|
|
@@ -16,9 +16,7 @@ JavaScript модуль для работы с проекцией данных.
|
|
|
- [Вложенные схемы](#вложенные-схемы)
|
|
|
- [Область проекции](#область-проекции)
|
|
|
- [Фабричные функции](#фабричные-функции)
|
|
|
- - [Регистрация именованных схем](#регистрация-именованных-схем)
|
|
|
- - [Применение именованных схем](#применение-именованных-схем)
|
|
|
- - [Ручное разрешение имен](#ручное-разрешение-имен)
|
|
|
+ - [Именованные схемы](#именованные-схемы)
|
|
|
- [Функция `projectData`](#функция-projectdata)
|
|
|
- [Класс `DataProjector`](#класс-dataprojector)
|
|
|
- [Метод `defineSchema`](#метод-defineschema)
|
|
|
@@ -288,7 +286,7 @@ console.log(result);
|
|
|
// }
|
|
|
```
|
|
|
|
|
|
-#### Регистрация именованных схем
|
|
|
+#### Именованные схемы
|
|
|
|
|
|
Класс `DataProjector` позволяет сохранять схемы во внутреннем реестре
|
|
|
для их последующего использования по имени. Это удобно для переиспользования
|
|
|
@@ -299,56 +297,6 @@ import {DataProjector} from '@e22m4u/js-data-projection';
|
|
|
|
|
|
const projector = new DataProjector();
|
|
|
|
|
|
-projector.defineSchema({
|
|
|
- name: 'user',
|
|
|
- schema: {
|
|
|
- id: true,
|
|
|
- name: true,
|
|
|
- password: false,
|
|
|
- },
|
|
|
-});
|
|
|
-```
|
|
|
-
|
|
|
-Зарегистрированные схемы могут ссылаться друг на друга, что позволяет
|
|
|
-компоновать сложные схемы из более простых. В примере ниже схема `user`
|
|
|
-использует схему `address` как вложенную.
|
|
|
-
|
|
|
-```js
|
|
|
-import {DataProjector} from '@e22m4u/js-data-projection';
|
|
|
-
|
|
|
-const projector = new DataProjector();
|
|
|
-
|
|
|
-projector.defineSchema({
|
|
|
- name: 'address',
|
|
|
- schema: {
|
|
|
- city: true,
|
|
|
- zip: false,
|
|
|
- },
|
|
|
-});
|
|
|
-
|
|
|
-projector.defineSchema({
|
|
|
- name: 'user',
|
|
|
- schema: {
|
|
|
- name: true,
|
|
|
- address: {
|
|
|
- select: true, // видимость поля address
|
|
|
- schema: 'address', // <= вложенная схема
|
|
|
- },
|
|
|
- },
|
|
|
-});
|
|
|
-```
|
|
|
-
|
|
|
-#### Применение именованных схем
|
|
|
-
|
|
|
-В данном примере вместо передачи объекта схемы используется предварительно
|
|
|
-зарегистрированное имя `publicUser`. Проектор находит соответствующее
|
|
|
-определение в своем реестре и применяет его к исходным данным.
|
|
|
-
|
|
|
-```js
|
|
|
-import {DataProjector} from '@e22m4u/js-data-projection';
|
|
|
-
|
|
|
-const projector = new DataProjector();
|
|
|
-
|
|
|
projector.defineSchema({
|
|
|
name: 'publicUser',
|
|
|
schema: {
|
|
|
@@ -373,9 +321,9 @@ console.log(result);
|
|
|
// }
|
|
|
```
|
|
|
|
|
|
-Проектор автоматически разрешает зависимости между схемами. Если в схеме
|
|
|
-указана ссылка на другую именованную схему, проектор найдет её в реестре
|
|
|
-и применит к вложенным данным.
|
|
|
+Зарегистрированные схемы могут ссылаться друг на друга, что позволяет
|
|
|
+компоновать сложные схемы из более простых. В примере ниже схема `user`
|
|
|
+использует схему `address` как вложенную.
|
|
|
|
|
|
```js
|
|
|
import {DataProjector} from '@e22m4u/js-data-projection';
|
|
|
@@ -419,8 +367,6 @@ console.log(result);
|
|
|
// }
|
|
|
```
|
|
|
|
|
|
-#### Ручное разрешение имен
|
|
|
-
|
|
|
Для ручного разрешения имен используется опция `resolver` функции `projectData`.
|
|
|
В опцию передается функция, которая принимает имя схемы и должна вернуть
|
|
|
соответствующий ей объект схемы.
|