data-projector.js 853 B

1234567891011121314151617181920212223242526272829303132333435
  1. import {Service} from '@e22m4u/js-service';
  2. import {projectData} from './project-data.js';
  3. import {ProjectionSchemaRegistry} from './projection-schema-registry.js';
  4. /**
  5. * Data projector.
  6. */
  7. export class DataProjector extends Service {
  8. /**
  9. * Define schema.
  10. *
  11. * @param {object} schemaDef
  12. * @returns {this}
  13. */
  14. defineSchema(schemaDef) {
  15. this.getService(ProjectionSchemaRegistry).defineSchema(schemaDef);
  16. return this;
  17. }
  18. /**
  19. * Project.
  20. *
  21. * @param {object|Function|string} schema
  22. * @param {object|object[]|*} data
  23. * @param {object} [options]
  24. * @returns {*}
  25. */
  26. project(schema, data, options) {
  27. const registry = this.getService(ProjectionSchemaRegistry);
  28. const resolver = name => {
  29. return registry.getSchema(name);
  30. };
  31. return projectData(schema, data, {...options, resolver});
  32. }
  33. }