JavaScript модуль для работы со схемой данных

e22m4u 7a00c5ace8 docs: updates README.md 3 weeks ago
.husky d5fd2cd003 chore: initial commit 3 weeks ago
dist 87d4722a2c chore: bumps version to 0.0.1 3 weeks ago
src 87d4722a2c chore: bumps version to 0.0.1 3 weeks ago
.c8rc d5fd2cd003 chore: initial commit 3 weeks ago
.commitlintrc d5fd2cd003 chore: initial commit 3 weeks ago
.editorconfig d5fd2cd003 chore: initial commit 3 weeks ago
.gitignore d5fd2cd003 chore: initial commit 3 weeks ago
.mocharc.json d5fd2cd003 chore: initial commit 3 weeks ago
.prettierrc d5fd2cd003 chore: initial commit 3 weeks ago
LICENSE d5fd2cd003 chore: initial commit 3 weeks ago
README.md 7a00c5ace8 docs: updates README.md 3 weeks ago
build-cjs.js d5fd2cd003 chore: initial commit 3 weeks ago
eslint.config.js d5fd2cd003 chore: initial commit 3 weeks ago
package.json 87d4722a2c chore: bumps version to 0.0.1 3 weeks ago
tsconfig.json d5fd2cd003 chore: initial commit 3 weeks ago

README.md

@e22m4u/js-data-schema

JavaScript модуль для работы со схемой данных.

Содержание

Установка

npm install @e22m4u/js-data-schema

Модуль поддерживает ESM и CommonJS стандарты.

ESM

import {DataValidator} from '@e22m4u/js-data-schema';

CommonJS

const {DataValidator} = require('@e22m4u/js-data-schema');

Схема данных

Структура:

{
  type?: DataType;
  items?: DataSchemaObject | DataSchemaFactory | string;
  properties?: DataSchemaProperties | DataSchemaFactory | string;
  required?: boolean;
}

type

Параметр type определяет тип допустимых значений.

константа значение
DataType.ANY "any"
DataType.STRING "string"
DataType.NUMBER "number"
DataType.BOOLEAN "boolean"
DataType.ARRAY "array"
DataType.OBJECT "object"

items

Параметр items позволяет указать схему для элементов массива. Параметр можно использовать, только если явно указан тип array текущей схемы.

{
  type: DataType.ARRAY,
  items: {
    type: DataType.NUMBER
  }
}
// [1, 2, 3]

properties

Параметр properties позволяет указать схему каждого свойства объекта. Параметр можно использовать, только если явно указан тип object текущей схемы.

{
  type: DataType.OBJECT,
  properties: {
    name: {
      type: DataType.STRING
    },
    age: {
      type: DataType.NUMBER
    }
  }
}
// {
//   name: "John",
//   age: 32
// }

required

Параметр required позволяет запретить пустые значения.

{
  type: DataType.STRING,
  required: true
}
// запрещает '', undefined и null
// см. раздел «Пустые значения»

Использование

Ниже приводятся примеры использования данного модуля.

Проверка данных

Проверка примитивных значений.

import {DataValidator, DataType} from '@e22m4u/js-data-schema';

const schema = {
  type: DataType.STRING
};

const validator = new DataValidator();
validator.validate('str', schema); // OK
validator.validate(undefined, schema); // OK (пустое значение)

validator.validate(10, schema); // error: DataValidationError
validator.validate(true, schema); // error: DataValidationError

Проверка обязательного значения.

import {DataValidator, DataType} from '@e22m4u/js-data-schema';

const schema = {
  type: DataType.NUMBER,
  required: true, // <= исключает 0, undefined и null (для типа number)
};

const validator = new DataValidator();
validator.validate(10, schema); // OK

validator.validate('str', schema); // error: DataValidationError
validator.validate(0, schema); // error: DataValidationError
validator.validate(true, schema); // error: DataValidationError

Проверка элементов массива.

import {DataValidator, DataType} from '@e22m4u/js-data-schema';

const schema = {
  type: DataType.ARRAY,
  items: {
    type: DataType.NUMBER,
  },
};

const validator = new DataValidator();
validator.validate([1, 2, 3], schema); // OK
validator.validate([], schema); // OK

validator.validate('str', schema); // error: DataValidationError
validator.validate(['a', 'b'], schema); // error: DataValidationError
validator.validate({foo: 'bar'}, schema); // error: DataValidationError

Проверка свойств объекта.

import {DataValidator, DataType} from '@e22m4u/js-data-schema';

const schema = {
  type: DataType.OBJECT,
  properties: {
    foo: {
      type: DataType.STRING,
    },
    bar: {
      type: DataType.NUMBER,
    },
  },
};

const validator = new DataValidator();
validator.validate({foo: 'str', bar: 10}, schema); // OK
validator.validate({}, schema); // OK

validator.validate({foo: true}, schema); // error: DataValidationError
validator.validate([1, 2, 3], schema); // error: DataValidationError

Парсинг данных

Приведение строки к числу.

import {DataParser, DataType} from '@e22m4u/js-data-schema';

const parser = new DataParser();

const schema = {
  type: DataType.NUMBER
};

const result = parser.parse('10', schema);
console.log(result); // 10

// строка не является числом
parser.parse('10abc', schema); // error: DataParsingError

Разбор JSON строки согласно схеме массива.

import {DataParser, DataType} from '@e22m4u/js-data-schema';

const parser = new DataParser();

const schema = {
  type: DataType.ARRAY,
  items: {
    type: DataType.NUMBER, // тип элементов
  },
};

const result = parser.parse('[1, 2, 3]', schema);
console.log(result);
// [1, 2, 3]

// элементы массива не соответствуют схеме
parser.parse('["str", true]', schema); // error: DataParsingError

Разбор JSON строки согласно схеме объекта.

import {DataParser, DataType} from '@e22m4u/js-data-schema';

const parser = new DataParser();

const schema = {
  type: DataType.OBJECT,
  properties: {
    foo: {
      type: DataType.STRING,
    },
    bar: {
      type: DataType.NUMBER,
    },
  },
};

const result = parser.parse(
  '{"foo": "str", "bar": 10}',
  schema,
);
console.log(result);
// {
//   "foo": "str",
//   "bar": 10
// }

// значения полей не соответствуют схеме
parser.parse('{"foo": true, "bar": "str"}', schema); // error: DataParsingError

Пустые значения

Разные типы данных имеют свои наборы пустых значений. Эти наборы используются для определения наличия полезной нагрузки в значении свойства. Например, параметр required исключает пустые значения при проверке данных.

тип пустые значения
'any' undefined, null
'string' undefined, null, ''
'number' undefined, null, 0
'boolean' undefined, null
'array' undefined, null, []
'object' undefined, null, {}

Управление этими наборами осуществляется через специальный сервис, который предоставляет модуль @e22m4u/js-empty-values (не требует установки).

Тесты

npm run test

Лицензия

MIT