JavaScript модуль для работы со схемой данных
|
|
3 недель назад | |
|---|---|---|
| .husky | 3 недель назад | |
| dist | 3 недель назад | |
| src | 3 недель назад | |
| .c8rc | 3 недель назад | |
| .commitlintrc | 3 недель назад | |
| .editorconfig | 3 недель назад | |
| .gitignore | 3 недель назад | |
| .mocharc.json | 3 недель назад | |
| .prettierrc | 3 недель назад | |
| LICENSE | 3 недель назад | |
| README.md | 3 недель назад | |
| build-cjs.js | 3 недель назад | |
| eslint.config.js | 3 недель назад | |
| package.json | 3 недель назад | |
| tsconfig.json | 3 недель назад |
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 определяет тип допустимых значений.
| константа | значение |
|---|---|
DataType.ANY |
"any" |
DataType.STRING |
"string" |
DataType.NUMBER |
"number" |
DataType.BOOLEAN |
"boolean" |
DataType.ARRAY |
"array" |
DataType.OBJECT |
"object" |
Параметр items позволяет указать схему для элементов
массива. Параметр можно использовать, только если явно указан тип
array текущей схемы.
{
type: DataType.ARRAY,
items: {
type: DataType.NUMBER
}
}
// [1, 2, 3]
Параметр properties позволяет указать схемы для каждого
свойства объекта. Параметр можно использовать, только если явно указан
тип object текущей схемы.
{
type: DataType.OBJECT,
properties: {
name: {
type: DataType.STRING
},
age: {
type: DataType.NUMBER
}
}
}
// {
// name: "John",
// age: 32
// }
Параметр 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