|
|
@@ -9,18 +9,19 @@ JavaScript модуль для работы с проекцией данных.
|
|
|
## Содержание
|
|
|
|
|
|
- [Установка](#установка)
|
|
|
-- [Использование](#использование)
|
|
|
- - [Функция `projectData`](#функция-projectdata)
|
|
|
- - [Создание проекции](#создание-проекции)
|
|
|
- - [Проекция массива](#проекция-массива)
|
|
|
- - [Строгий режим](#строгий-режим)
|
|
|
- - [Вложенные схемы](#вложенные-схемы)
|
|
|
- - [Область проекции](#область-проекции)
|
|
|
- - [Фабричные функции](#фабричные-функции)
|
|
|
- - [Именованные схемы](#именованные-схемы)
|
|
|
- - [Класс `DataProjector`](#класс-dataprojector)
|
|
|
- - [Метод `defineSchema`](#метод-defineschema)
|
|
|
- - [Метод `project`](#метод-project)
|
|
|
+- [Функция `projectData`](#функция-projectdata)
|
|
|
+ - [Создание проекции](#создание-проекции)
|
|
|
+ - [Проекция массива](#проекция-массива)
|
|
|
+ - [Строгий режим](#строгий-режим)
|
|
|
+ - [Вложенные схемы](#вложенные-схемы)
|
|
|
+ - [Область проекции](#область-проекции)
|
|
|
+ - [Фабричные функции](#фабричные-функции)
|
|
|
+ - [Именованные схемы](#именованные-схемы)
|
|
|
+- [Класс `DataProjector`](#класс-dataprojector)
|
|
|
+ - [Метод `defineSchema`](#метод-defineschema)
|
|
|
+ - [Регистрация именованных схемы](#регистрация-именованных-схем)
|
|
|
+ - [Метод `project`](#метод-project)
|
|
|
+ - [Применение именованных схем](#применение-именованных-схем)
|
|
|
- [Тесты](#тесты)
|
|
|
- [Лицензия](#лицензия)
|
|
|
|
|
|
@@ -30,11 +31,7 @@ JavaScript модуль для работы с проекцией данных.
|
|
|
npm install @e22m4u/js-data-projection
|
|
|
```
|
|
|
|
|
|
-## Использование
|
|
|
-
|
|
|
-Модуль экспортирует функцию создания проекции `projectData`.
|
|
|
-
|
|
|
-### Функция `projectData`
|
|
|
+## Функция `projectData`
|
|
|
|
|
|
Функция создает проекцию данных на основе переданного объекта схемы.
|
|
|
Принимает исходные данные и дополнительные опции для управления режимом
|
|
|
@@ -411,7 +408,7 @@ console.log(result);
|
|
|
```
|
|
|
|
|
|
|
|
|
-### Класс `DataProjector`
|
|
|
+## Класс `DataProjector`
|
|
|
|
|
|
Для централизованного управления схемами и удобной работы в рамках
|
|
|
сервис-ориентированной архитектуры модуль предоставляет класс `DataProjector`.
|
|
|
@@ -451,9 +448,10 @@ defineSchema(schemaDef)
|
|
|
|
|
|
Текущий экземпляр `DataProjector`.
|
|
|
|
|
|
-**Примеры:**
|
|
|
+#### Регистрация именованных схем
|
|
|
|
|
|
-Регистрация именованной схемы.
|
|
|
+Ниже приводится пример регистрации простой схемы под именем `user`. После
|
|
|
+выполнения этого кода схема сохраняется в памяти экземпляра проектора.
|
|
|
|
|
|
```js
|
|
|
import {DataProjector} from '@e22m4u/js-data-projection';
|
|
|
@@ -470,7 +468,9 @@ projector.defineSchema({
|
|
|
});
|
|
|
```
|
|
|
|
|
|
-Регистрация вложенных схем.
|
|
|
+Метод позволяет регистрировать схемы, которые ссылаются друг на друга.
|
|
|
+В примере ниже схема `user` использует схему `address` для проекции
|
|
|
+вложенного объекта.
|
|
|
|
|
|
```js
|
|
|
import {DataProjector} from '@e22m4u/js-data-projection';
|
|
|
@@ -536,9 +536,10 @@ project(schemaOrFactory, data, [options])
|
|
|
Метод возвращает проекцию исходных данных в соответствии с переданной схемой
|
|
|
и настройками.
|
|
|
|
|
|
-**Примеры:**
|
|
|
+#### Применение именованных схем
|
|
|
|
|
|
-Использование зарегистрированной схемы.
|
|
|
+В данном примере вместо передачи объекта схемы используется имя `publicUser`. Проектор находит соответствующее определение в своем реестре и применяет
|
|
|
+его к указанным данным.
|
|
|
|
|
|
```js
|
|
|
import {DataProjector} from '@e22m4u/js-data-projection';
|
|
|
@@ -570,7 +571,8 @@ console.log(result);
|
|
|
// }
|
|
|
```
|
|
|
|
|
|
-Использование вложенных именованных схем.
|
|
|
+Проектор автоматически обрабатывает зависимости между схемами. Когда схема
|
|
|
+`user` применяется к данным, проектор видит ссылку на схему `address` во вложенном поле и использует её для обработки адреса.
|
|
|
|
|
|
```js
|
|
|
import {DataProjector} from '@e22m4u/js-data-projection';
|
|
|
@@ -586,13 +588,13 @@ projector.defineSchema({
|
|
|
},
|
|
|
});
|
|
|
|
|
|
-// регистрация основной схемы, использующей вложенную по имени
|
|
|
+// регистрация основной схемы
|
|
|
projector.defineSchema({
|
|
|
name: 'user',
|
|
|
schema: {
|
|
|
name: true,
|
|
|
- contact: {
|
|
|
- select: true, // поле будет включено в результат
|
|
|
+ address: {
|
|
|
+ select: true, // видимость поля address
|
|
|
schema: 'address', // <= имя вложенной схемы
|
|
|
},
|
|
|
},
|
|
|
@@ -600,7 +602,7 @@ projector.defineSchema({
|
|
|
|
|
|
const data = {
|
|
|
name: 'Fedor',
|
|
|
- contact: {
|
|
|
+ address: {
|
|
|
city: 'Moscow',
|
|
|
zip: 123456,
|
|
|
},
|
|
|
@@ -612,7 +614,7 @@ const result = projector.project('user', data);
|
|
|
console.log(result);
|
|
|
// {
|
|
|
// name: 'Fedor',
|
|
|
-// contact: {
|
|
|
+// address: {
|
|
|
// city: 'Moscow'
|
|
|
// }
|
|
|
// }
|