e22m4u 1 месяц назад
Родитель
Сommit
1a97513d2a
1 измененных файлов с 80 добавлено и 4 удалено
  1. 80 4
      README.md

+ 80 - 4
README.md

@@ -306,10 +306,12 @@ console.log(result);
 import {projectData} from '@e22m4u/js-data-projection';
 
 // фабрика для вложенных данных
-const getAddressSchema = () => ({
-  city: true,
-  zip: false,
-});
+const getAddressSchema = () => {
+  return {
+    city: true,
+    zip: false,
+  };
+};
 
 const userSchema = {
   name: true,
@@ -476,6 +478,80 @@ console.log(result);
 // }
 ```
 
+Регистрация псевдонима именованной схемы.
+
+```js
+import {DataProjector} from '@e22m4u/js-data-projection';
+
+const dps = new DataProjector();
+
+// регистрация основной схемы
+dps.defineSchema({
+  name: 'user',
+  schema: {
+    id: true,
+    name: true,
+    email: false,
+  },
+});
+
+// регистрация псевдонима
+dps.defineSchema({
+  name: 'author', // имя псевдонима
+  schema: 'user', // <= имя основной схемы
+});
+
+const data = {
+  id: 10,
+  name: 'Fedor',
+  email: 'fedor@example.com',
+};
+
+// проекция данных по имени псевдонима
+const result = dps.projectData(data, 'author');
+console.log(result);
+// {
+//   id: 10,
+//   name: 'Fedor'
+// }
+```
+
+Использование фабрики при регистрации именованной схемы.
+
+```js
+import {DataProjector} from '@e22m4u/js-data-projection';
+
+const dps = new DataProjector();
+
+// создание фабрики
+const getUserSchema = () => {
+  return {
+    id: true,
+    name: true,
+    email: false,
+  };
+};
+
+// регистрация схемы
+dps.defineSchema({
+  name: 'user',
+  schema: getUserSchema, // <= фабрика вместо схемы
+});
+
+const data = {
+  id: 10,
+  name: 'Fedor',
+  email: 'fedor@example.com',
+};
+
+const result = dps.projectData(data, 'user');
+console.log(result);
+// {
+//   id: 10,
+//   name: 'Fedor'
+// }
+```
+
 Реализация пользовательской функции разрешения имен.
 
 ```js