|
|
@@ -3,7 +3,7 @@
|
|
|
JavaScript модуль для работы с проекцией данных.
|
|
|
|
|
|
Модуль использует декларативные схемы для определения правил видимости полей
|
|
|
-данных. Поддерживается вложенность, именные схемы, области проекции
|
|
|
+данных. Поддерживается вложенность, именованные схемы, области проекции
|
|
|
и строгий режим.
|
|
|
|
|
|
## Содержание
|
|
|
@@ -25,7 +25,7 @@ npm install @e22m4u/js-data-projector
|
|
|
|
|
|
Модуль экспортирует функцию `projectData` и класс `DataProjector`.
|
|
|
Оба инструмента реализуют одинаковый функционал создания проекций,
|
|
|
-за исключением возможности регистрации именных схем, которая
|
|
|
+за исключением возможности регистрации именованных схем, которая
|
|
|
доступна только экземпляру класса.
|
|
|
|
|
|
### Функция `projectData`
|
|
|
@@ -38,13 +38,13 @@ import {projectData} from '@e22m4u/js-data-projector';
|
|
|
const schema = {
|
|
|
name: true,
|
|
|
password: false,
|
|
|
-}
|
|
|
+};
|
|
|
|
|
|
const data = {
|
|
|
name: 'Fedor', // будет доступно, явное правило
|
|
|
password: 'pass123', // будет исключено, явное правило
|
|
|
- extra: 10 // будет доступно в режиме по умолчанию
|
|
|
-}
|
|
|
+ extra: 10, // будет доступно в режиме по умолчанию
|
|
|
+};
|
|
|
|
|
|
const result = projectData(schema, data);
|
|
|
console.log(result);
|
|
|
@@ -61,7 +61,7 @@ import {projectData} from '@e22m4u/js-data-projector';
|
|
|
|
|
|
const schema = {
|
|
|
id: true,
|
|
|
- secret: false
|
|
|
+ secret: false,
|
|
|
};
|
|
|
|
|
|
const data = [
|
|
|
@@ -85,13 +85,13 @@ import {projectData} from '@e22m4u/js-data-projector';
|
|
|
const schema = {
|
|
|
name: true,
|
|
|
password: false,
|
|
|
-}
|
|
|
+};
|
|
|
|
|
|
const data = {
|
|
|
name: 'Fedor', // будет доступно, явное правило
|
|
|
password: 'pass123', // будет исключено, явное правило
|
|
|
- extra: 10 // будет исключено в строгом режиме
|
|
|
-}
|
|
|
+ extra: 10, // будет исключено в строгом режиме
|
|
|
+};
|
|
|
|
|
|
const result = projectData(schema, data, {
|
|
|
strict: true, // <= строгий режим
|
|
|
@@ -115,9 +115,9 @@ const schema = {
|
|
|
schema: { // вложенная схема
|
|
|
id: false,
|
|
|
name: true,
|
|
|
- }
|
|
|
- }
|
|
|
-}
|
|
|
+ },
|
|
|
+ },
|
|
|
+};
|
|
|
|
|
|
const data = {
|
|
|
id: 10, // будет скрыто, явное правило
|
|
|
@@ -125,8 +125,8 @@ const data = {
|
|
|
city: {
|
|
|
id: 20, // будет скрыто, явное правило
|
|
|
name: 'Moscow',
|
|
|
- }
|
|
|
-}
|
|
|
+ },
|
|
|
+};
|
|
|
|
|
|
const result = projectData(schema, data);
|
|
|
console.log(result);
|
|
|
@@ -151,15 +151,15 @@ const schema = {
|
|
|
output: false, // правило для области 'output'
|
|
|
},
|
|
|
},
|
|
|
-}
|
|
|
+};
|
|
|
|
|
|
const data = {
|
|
|
name: 'Fedor', // будет доступно, явное правило
|
|
|
password: 'pass123', // будет доступно в зависимости от области
|
|
|
-}
|
|
|
+};
|
|
|
|
|
|
const inputData = projectData(schema, data, {
|
|
|
- scope: 'input' // <= область проекции
|
|
|
+ scope: 'input', // <= область проекции
|
|
|
});
|
|
|
console.log(inputData);
|
|
|
// {
|
|
|
@@ -168,7 +168,7 @@ console.log(inputData);
|
|
|
// }
|
|
|
|
|
|
const outputData = projectData(schema, data, {
|
|
|
- scope: 'output' // <= область проекции
|
|
|
+ scope: 'output', // <= область проекции
|
|
|
});
|
|
|
console.log(outputData);
|
|
|
// {
|
|
|
@@ -178,14 +178,14 @@ console.log(outputData);
|
|
|
|
|
|
### Класс `DataProjector`
|
|
|
|
|
|
-Создание проекции с помощью именной схемы.
|
|
|
+Создание проекции с помощью именованной схемы.
|
|
|
|
|
|
```js
|
|
|
import {DataProjector} from '@e22m4u/js-data-projector';
|
|
|
|
|
|
const projector = new DataProjector();
|
|
|
|
|
|
-// регистрация именной схемы
|
|
|
+// регистрация именованной схемы
|
|
|
projector.defineSchema('user', {
|
|
|
id: true,
|
|
|
name: true,
|
|
|
@@ -206,7 +206,7 @@ console.log(result);
|
|
|
// }
|
|
|
```
|
|
|
|
|
|
-Комбинирование именных схем.
|
|
|
+Комбинирование именованных схем.
|
|
|
|
|
|
```js
|
|
|
import {DataProjector} from '@e22m4u/js-data-projector';
|
|
|
@@ -216,23 +216,23 @@ const projector = new DataProjector();
|
|
|
// регистрация схемы адреса
|
|
|
projector.defineSchema('address', {
|
|
|
city: true,
|
|
|
- zip: false
|
|
|
+ zip: false,
|
|
|
});
|
|
|
|
|
|
// регистрация схемы пользователя
|
|
|
projector.defineSchema('user', {
|
|
|
name: true,
|
|
|
location: {
|
|
|
- schema: 'address' // ссылка на именную схему
|
|
|
- }
|
|
|
+ schema: 'address', // ссылка на именованную схему
|
|
|
+ },
|
|
|
});
|
|
|
|
|
|
const data = {
|
|
|
name: 'John',
|
|
|
location: {
|
|
|
city: 'Moscow',
|
|
|
- zip: '101000'
|
|
|
- }
|
|
|
+ zip: '101000',
|
|
|
+ },
|
|
|
};
|
|
|
|
|
|
const result = projector.project('user', data);
|