|
|
@@ -6,20 +6,11 @@ JavaScript модуль для работы с проекцией данных.
|
|
|
|
|
|
- [Установка](#установка)
|
|
|
- [Схема проекции](#схема-проекции)
|
|
|
- - [Определение правил видимости полей](#определение-правил-видимости-полей)
|
|
|
- - [Определение вложенной схемы](#определение-вложенной-схемы)
|
|
|
- - [Определение правил для областей проекции](#определение-правил-для-областей-проекции)
|
|
|
-- [Использование](#использование)
|
|
|
- - [Создание проекции данных с помощью схемы](#создание-проекции-данных-с-помощью-схемы)
|
|
|
- - [Применение схемы к массиву объектов](#применение-схемы-к-массиву-объектов)
|
|
|
- - [Исключение неизвестных полей в строгом режиме](#исключение-неизвестных-полей-в-строгом-режиме)
|
|
|
- - [Применение вложенных схем для сложных структур](#применение-вложенных-схем-для-сложных-структур)
|
|
|
- - [Создание проекции для определенной области](#создание-проекции-для-определенной-области)
|
|
|
- - [Использование фабрики вместо объекта схемы](#использование-фабрики-вместо-объекта-схемы)
|
|
|
- - [Использование фабрики во вложенной схеме](#использование-фабрики-во-вложенной-схеме)
|
|
|
- - [Регистрация именованной схемы и создание проекции](#регистрация-именованной-схемы-и-создание-проекции)
|
|
|
- - [Использование вложенных именованных схем](#использование-вложенных-именованных-схем)
|
|
|
- - [Реализация пользовательской функции разрешения имен](#реализация-пользовательской-функции-разрешения-имен)
|
|
|
+- [Применение схемы](#применение-схемы)
|
|
|
+- [Строгий режим](#строгий-режим)
|
|
|
+- [Область проекции](#область-проекции)
|
|
|
+- [Фабричные функции](#фабричные-функции)
|
|
|
+- [Именованные схемы](#именованные-схемы)
|
|
|
- [Тесты](#тесты)
|
|
|
- [Лицензия](#лицензия)
|
|
|
|
|
|
@@ -45,7 +36,7 @@ const {projectData} = require('@e22m4u/js-data-projection');
|
|
|
|
|
|
## Схема проекции
|
|
|
|
|
|
-#### Определение правил видимости полей
|
|
|
+Определение правил видимости полей.
|
|
|
|
|
|
```js
|
|
|
{
|
|
|
@@ -54,7 +45,7 @@ const {projectData} = require('@e22m4u/js-data-projection');
|
|
|
}
|
|
|
```
|
|
|
|
|
|
-#### Определение вложенной схемы
|
|
|
+Определение вложенной схемы.
|
|
|
|
|
|
```js
|
|
|
{
|
|
|
@@ -69,7 +60,7 @@ const {projectData} = require('@e22m4u/js-data-projection');
|
|
|
}
|
|
|
```
|
|
|
|
|
|
-#### Определение правил для областей проекции
|
|
|
+Определение правил для областей проекции.
|
|
|
|
|
|
```js
|
|
|
{
|
|
|
@@ -83,9 +74,9 @@ const {projectData} = require('@e22m4u/js-data-projection');
|
|
|
}
|
|
|
```
|
|
|
|
|
|
-## Использование
|
|
|
+## Применение схемы
|
|
|
|
|
|
-#### Создание проекции данных с помощью схемы
|
|
|
+Создание проекции данных с помощью схемы.
|
|
|
|
|
|
```js
|
|
|
import {projectData} from '@e22m4u/js-data-projection';
|
|
|
@@ -109,7 +100,7 @@ console.log(result);
|
|
|
// }
|
|
|
```
|
|
|
|
|
|
-#### Применение схемы к массиву объектов
|
|
|
+Применение схемы к массиву объектов.
|
|
|
|
|
|
```js
|
|
|
import {projectData} from '@e22m4u/js-data-projection';
|
|
|
@@ -132,32 +123,7 @@ console.log(result);
|
|
|
// ]
|
|
|
```
|
|
|
|
|
|
-#### Исключение неизвестных полей в строгом режиме
|
|
|
-
|
|
|
-```js
|
|
|
-import {projectData} from '@e22m4u/js-data-projection';
|
|
|
-
|
|
|
-const schema = {
|
|
|
- name: true,
|
|
|
- password: false,
|
|
|
-};
|
|
|
-
|
|
|
-const data = {
|
|
|
- name: 'Fedor', // будет доступно, явное правило
|
|
|
- password: 'pass123', // будет исключено, явное правило
|
|
|
- extra: 10, // будет исключено в строгом режиме
|
|
|
-};
|
|
|
-
|
|
|
-const result = projectData(schema, data, {
|
|
|
- strict: true, // <= строгий режим
|
|
|
-});
|
|
|
-console.log(result);
|
|
|
-// {
|
|
|
-// name: 'Fedor'
|
|
|
-// }
|
|
|
-```
|
|
|
-
|
|
|
-#### Применение вложенных схем для сложных структур
|
|
|
+Применение вложенной схемы для сложной структуры данных.
|
|
|
|
|
|
```js
|
|
|
import {projectData} from '@e22m4u/js-data-projection';
|
|
|
@@ -193,7 +159,36 @@ console.log(result);
|
|
|
// }
|
|
|
```
|
|
|
|
|
|
-#### Создание проекции для определенной области
|
|
|
+## Строгий режим
|
|
|
+
|
|
|
+Исключение полей не указанных в схеме проекции.
|
|
|
+
|
|
|
+```js
|
|
|
+import {projectData} from '@e22m4u/js-data-projection';
|
|
|
+
|
|
|
+const schema = {
|
|
|
+ name: true,
|
|
|
+ password: false,
|
|
|
+};
|
|
|
+
|
|
|
+const data = {
|
|
|
+ name: 'Fedor', // будет доступно, явное правило
|
|
|
+ password: 'pass123', // будет исключено, явное правило
|
|
|
+ extra: 10, // будет исключено в строгом режиме
|
|
|
+};
|
|
|
+
|
|
|
+const result = projectData(schema, data, {
|
|
|
+ strict: true, // <= строгий режим
|
|
|
+});
|
|
|
+console.log(result);
|
|
|
+// {
|
|
|
+// name: 'Fedor'
|
|
|
+// }
|
|
|
+```
|
|
|
+
|
|
|
+## Область проекции
|
|
|
+
|
|
|
+Создание проекции определенной области.
|
|
|
|
|
|
```js
|
|
|
import {projectData} from '@e22m4u/js-data-projection';
|
|
|
@@ -231,7 +226,9 @@ console.log(outputData);
|
|
|
// }
|
|
|
```
|
|
|
|
|
|
-#### Использование фабрики вместо объекта схемы
|
|
|
+## Фабричные функции
|
|
|
+
|
|
|
+Использование фабрики вместо объекта схемы.
|
|
|
|
|
|
```js
|
|
|
import {projectData} from '@e22m4u/js-data-projection';
|
|
|
@@ -257,7 +254,7 @@ console.log(result);
|
|
|
// }
|
|
|
```
|
|
|
|
|
|
-#### Использование фабрики во вложенной схеме
|
|
|
+Использование фабрики во вложенной схеме.
|
|
|
|
|
|
```js
|
|
|
import {projectData} from '@e22m4u/js-data-projection';
|
|
|
@@ -293,7 +290,9 @@ console.log(result);
|
|
|
// }
|
|
|
```
|
|
|
|
|
|
-#### Регистрация именованной схемы и создание проекции
|
|
|
+## Именованные схемы
|
|
|
+
|
|
|
+Регистрация и применение именованной схемы.
|
|
|
|
|
|
```js
|
|
|
import {DataProjector} from '@e22m4u/js-data-projection';
|
|
|
@@ -325,7 +324,7 @@ console.log(result);
|
|
|
// }
|
|
|
```
|
|
|
|
|
|
-#### Использование вложенных именованных схем
|
|
|
+Использование вложенных именованных схем.
|
|
|
|
|
|
```js
|
|
|
import {DataProjector} from '@e22m4u/js-data-projection';
|
|
|
@@ -371,7 +370,7 @@ console.log(result);
|
|
|
// }
|
|
|
```
|
|
|
|
|
|
-#### Реализация пользовательской функции разрешения имен
|
|
|
+Реализация пользовательской функции разрешения имен.
|
|
|
|
|
|
```js
|
|
|
import {projectData} from '@e22m4u/js-data-projection';
|