definition-registry.js 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. import {Service} from '@e22m4u/service';
  2. import {InvalidArgumentError} from '../errors/index.js';
  3. import {ModelDefinitionValidator} from './model/index.js';
  4. import {DatasourceDefinitionValidator} from '../definition/index.js';
  5. /**
  6. * Definition registry.
  7. */
  8. export class DefinitionRegistry extends Service {
  9. /**
  10. * Datasources.
  11. *
  12. * @type {{[name: string]: object}}
  13. */
  14. _datasources = {};
  15. /**
  16. * Models.
  17. *
  18. * @type {{[name: string]: object}}
  19. */
  20. _models = {};
  21. /**
  22. * Add datasource.
  23. *
  24. * @param datasourceDef
  25. */
  26. addDatasource(datasourceDef) {
  27. this.getService(DatasourceDefinitionValidator).validate(datasourceDef);
  28. const name = datasourceDef.name;
  29. if (name in this._datasources)
  30. throw new InvalidArgumentError(
  31. 'The datasource %v is already defined.',
  32. name,
  33. );
  34. this._datasources[name] = datasourceDef;
  35. }
  36. /**
  37. * Has datasource.
  38. *
  39. * @param name
  40. * @return {*}
  41. */
  42. hasDatasource(name) {
  43. return Boolean(this._datasources[name]);
  44. }
  45. /**
  46. * Get datasource.
  47. *
  48. * @param name
  49. * @return {Object}
  50. */
  51. getDatasource(name) {
  52. const datasourceDef = this._datasources[name];
  53. if (!datasourceDef)
  54. throw new InvalidArgumentError('The datasource %v is not defined.', name);
  55. return datasourceDef;
  56. }
  57. /**
  58. * Add model.
  59. *
  60. * @param modelDef
  61. */
  62. addModel(modelDef) {
  63. this.getService(ModelDefinitionValidator).validate(modelDef);
  64. const name = modelDef.name;
  65. if (name in this._models)
  66. throw new InvalidArgumentError('The model %v is already defined.', name);
  67. this._models[name] = modelDef;
  68. }
  69. /**
  70. * Has model.
  71. *
  72. * @param name
  73. * @return {*}
  74. */
  75. hasModel(name) {
  76. return Boolean(this._models[name]);
  77. }
  78. /**
  79. * Get model.
  80. *
  81. * @param name
  82. * @return {Object}
  83. */
  84. getModel(name) {
  85. const modelDef = this._models[name];
  86. if (!modelDef)
  87. throw new InvalidArgumentError('The model %v is not defined.', name);
  88. return modelDef;
  89. }
  90. }