| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- import {Service} from '@e22m4u/js-service';
- import {projectData} from './project-data.js';
- import {ProjectionSchemaRegistry} from './projection-schema-registry.js';
- /**
- * Data projector.
- */
- export class DataProjector extends Service {
- /**
- * Define schema.
- *
- * @param {object} schemaDef
- * @returns {this}
- */
- defineSchema(schemaDef) {
- this.getService(ProjectionSchemaRegistry).defineSchema(schemaDef);
- return this;
- }
- /**
- * Project.
- *
- * @param {object|object[]|*} data
- * @param {object|Function|string} schema
- * @param {object} [options]
- * @returns {*}
- */
- project(data, schema, options) {
- const registry = this.getService(ProjectionSchemaRegistry);
- const defaultNameResolver = name => registry.getSchema(name);
- const nameResolver =
- (options && options.nameResolver) || defaultNameResolver;
- const factoryArgs = (options && options.factoryArgs) || [this.container];
- return projectData(data, schema, {...options, nameResolver, factoryArgs});
- }
- /**
- * Project input.
- *
- * @param {object|object[]|*} data
- * @param {object|Function|string} schema
- * @param {object} [options]
- * @returns {*}
- */
- projectInput(data, schema, options) {
- return this.project(data, schema, {...options, scope: 'input'});
- }
- /**
- * Project output.
- *
- * @param {object|object[]|*} data
- * @param {object|Function|string} schema
- * @param {object} [options]
- * @returns {*}
- */
- projectOutput(data, schema, options) {
- return this.project(data, schema, {...options, scope: 'output'});
- }
- }
|