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

+ 60 - 0
README.md

@@ -295,6 +295,66 @@ console.log(result);
 // }
 ```
 
+Установка аргументов вызова фабричных функций.
+
+```js
+import {projectData} from '@e22m4u/js-data-projection';
+
+// объект будет передан в параметры фабрики
+const logger = {
+  log: (message) => console.log(message);
+};
+
+// фабрика использует logger
+const getSchema = (logger) => {
+  logger.log('Factory was invoked!');
+  return {name: true, secret: false};
+};
+
+const data = {
+  name: 'John',
+  secret: 'john123',
+};
+
+const result = projectData(getSchema, data, {
+  factoryArgs: [logger], // <= передача logger в фабрику
+});
+// Factory was invoked!
+console.log(result);
+// {
+//   name: 'John',
+// }
+```
+
+Доступ к [сервис-контейнеру](https://www.npmjs.com/package/@e22m4u/js-service) внутри фабрики.
+
+```js
+import {ServiceContainer} from '@e22m4u/js-service';
+import {DataProjector} from '@e22m4u/js-data-projection';
+
+// сервис-контейнер доступен только
+// при использовании DataProjector
+const projector = new DataProjector();
+
+// по умолчанию сервис-контейнер передается
+// первым аргументом фабрики
+const getSchema = (container) => {
+  console.log(container instanceof ServiceContainer); // true
+  return {name: true, secret: false};
+}
+
+const data = {
+  name: 'John',
+  secret: 'john123',
+};
+
+const result = projector.project(getSchema, data);
+console.log(result);
+// {
+//   name: 'John',
+// }
+```
+
 ### Именованные схемы
 
 Регистрация и применение именованной схемы.