@xyo-network/module-factory-locator 2.110.19 → 2.111.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/dist/browser/ModuleFactoryLocator.d.cts +4 -0
  2. package/dist/browser/ModuleFactoryLocator.d.cts.map +1 -1
  3. package/dist/browser/ModuleFactoryLocator.d.mts +4 -0
  4. package/dist/browser/ModuleFactoryLocator.d.mts.map +1 -1
  5. package/dist/browser/ModuleFactoryLocator.d.ts +4 -0
  6. package/dist/browser/ModuleFactoryLocator.d.ts.map +1 -1
  7. package/dist/browser/index.cjs +14 -9
  8. package/dist/browser/index.cjs.map +1 -1
  9. package/dist/browser/{index.js → index.mjs} +15 -10
  10. package/dist/browser/index.mjs.map +1 -0
  11. package/dist/neutral/ModuleFactoryLocator.d.cts +4 -0
  12. package/dist/neutral/ModuleFactoryLocator.d.cts.map +1 -1
  13. package/dist/neutral/ModuleFactoryLocator.d.mts +4 -0
  14. package/dist/neutral/ModuleFactoryLocator.d.mts.map +1 -1
  15. package/dist/neutral/ModuleFactoryLocator.d.ts +4 -0
  16. package/dist/neutral/ModuleFactoryLocator.d.ts.map +1 -1
  17. package/dist/neutral/index.cjs +14 -9
  18. package/dist/neutral/index.cjs.map +1 -1
  19. package/dist/neutral/{index.js → index.mjs} +15 -10
  20. package/dist/neutral/index.mjs.map +1 -0
  21. package/dist/node/ModuleFactoryLocator.d.cts +4 -0
  22. package/dist/node/ModuleFactoryLocator.d.cts.map +1 -1
  23. package/dist/node/ModuleFactoryLocator.d.mts +4 -0
  24. package/dist/node/ModuleFactoryLocator.d.mts.map +1 -1
  25. package/dist/node/ModuleFactoryLocator.d.ts +4 -0
  26. package/dist/node/ModuleFactoryLocator.d.ts.map +1 -1
  27. package/dist/node/index.cjs +14 -9
  28. package/dist/node/index.cjs.map +1 -1
  29. package/dist/node/{index.js → index.mjs} +15 -10
  30. package/dist/node/index.mjs.map +1 -0
  31. package/package.json +19 -19
  32. package/src/ModuleFactoryLocator.ts +19 -6
  33. package/src/standardCreatableFactories.ts +1 -1
  34. package/dist/browser/index.js.map +0 -1
  35. package/dist/neutral/index.js.map +0 -1
  36. package/dist/node/index.js.map +0 -1
@@ -2,8 +2,12 @@ import { CreatableModuleFactory, CreatableModuleRegistry, LabeledCreatableModule
2
2
  import { Schema } from '@xyo-network/payload-model';
3
3
  export declare class ModuleFactoryLocator {
4
4
  protected readonly _registry: CreatableModuleRegistry;
5
+ private _frozen;
5
6
  constructor(_registry?: CreatableModuleRegistry);
6
7
  get registry(): Readonly<CreatableModuleRegistry>;
8
+ static empty(): ModuleFactoryLocator;
9
+ static standard(): ModuleFactoryLocator;
10
+ freeze(): void;
7
11
  locate(schema: string, labels?: Labels): CreatableModuleFactory | LabeledCreatableModuleFactory;
8
12
  merge(locator: ModuleFactoryLocator): ModuleFactoryLocator;
9
13
  register(factory: CreatableModuleFactory, labels?: Labels, primary?: boolean | Schema | Schema[]): this;
@@ -1 +1 @@
1
- {"version":3,"file":"ModuleFactoryLocator.d.ts","sourceRoot":"","sources":["../../src/ModuleFactoryLocator.ts"],"names":[],"mappings":"AACA,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EAGvB,6BAA6B,EAC7B,MAAM,EAEP,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAOnD,qBAAa,oBAAoB;IACnB,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,uBAAuB;gBAAlC,SAAS,GAAE,uBAAsD;IAKhG,IAAI,QAAQ,IAAI,QAAQ,CAAC,uBAAuB,CAAC,CAEhD;IAQD,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,sBAAsB,GAAG,6BAA6B;IAQ/F,KAAK,CAAC,OAAO,EAAE,oBAAoB,GAAG,oBAAoB;IAiB1D,QAAQ,CAAC,OAAO,EAAE,sBAAsB,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE,OAAO,GAAG,MAAM,GAAG,MAAM,EAAU,GAAG,IAAI;IAS9G,YAAY,CAAC,SAAS,EAAE,sBAAsB,EAAE,GAAG,IAAI;IAavD,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,sBAAsB,GAAG,6BAA6B,GAAG,SAAS;CAQ/G"}
1
+ {"version":3,"file":"ModuleFactoryLocator.d.ts","sourceRoot":"","sources":["../../src/ModuleFactoryLocator.ts"],"names":[],"mappings":"AACA,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EAGvB,6BAA6B,EAC7B,MAAM,EAEP,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAOnD,qBAAa,oBAAoB;IAGnB,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,uBAAuB;IAFjE,OAAO,CAAC,OAAO,CAAQ;gBAEQ,SAAS,GAAE,uBAAsD;IAKhG,IAAI,QAAQ,IAAI,QAAQ,CAAC,uBAAuB,CAAC,CAEhD;IAED,MAAM,CAAC,KAAK;IAIZ,MAAM,CAAC,QAAQ;IAIf,MAAM;IAUN,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,sBAAsB,GAAG,6BAA6B;IAO/F,KAAK,CAAC,OAAO,EAAE,oBAAoB,GAAG,oBAAoB;IAiB1D,QAAQ,CAAC,OAAO,EAAE,sBAAsB,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE,OAAO,GAAG,MAAM,GAAG,MAAM,EAAU,GAAG,IAAI;IAU9G,YAAY,CAAC,SAAS,EAAE,sBAAsB,EAAE,GAAG,IAAI;IAavD,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,sBAAsB,GAAG,6BAA6B,GAAG,SAAS;CAO/G"}
@@ -2,8 +2,12 @@ import { CreatableModuleFactory, CreatableModuleRegistry, LabeledCreatableModule
2
2
  import { Schema } from '@xyo-network/payload-model';
3
3
  export declare class ModuleFactoryLocator {
4
4
  protected readonly _registry: CreatableModuleRegistry;
5
+ private _frozen;
5
6
  constructor(_registry?: CreatableModuleRegistry);
6
7
  get registry(): Readonly<CreatableModuleRegistry>;
8
+ static empty(): ModuleFactoryLocator;
9
+ static standard(): ModuleFactoryLocator;
10
+ freeze(): void;
7
11
  locate(schema: string, labels?: Labels): CreatableModuleFactory | LabeledCreatableModuleFactory;
8
12
  merge(locator: ModuleFactoryLocator): ModuleFactoryLocator;
9
13
  register(factory: CreatableModuleFactory, labels?: Labels, primary?: boolean | Schema | Schema[]): this;
@@ -1 +1 @@
1
- {"version":3,"file":"ModuleFactoryLocator.d.ts","sourceRoot":"","sources":["../../src/ModuleFactoryLocator.ts"],"names":[],"mappings":"AACA,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EAGvB,6BAA6B,EAC7B,MAAM,EAEP,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAOnD,qBAAa,oBAAoB;IACnB,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,uBAAuB;gBAAlC,SAAS,GAAE,uBAAsD;IAKhG,IAAI,QAAQ,IAAI,QAAQ,CAAC,uBAAuB,CAAC,CAEhD;IAQD,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,sBAAsB,GAAG,6BAA6B;IAQ/F,KAAK,CAAC,OAAO,EAAE,oBAAoB,GAAG,oBAAoB;IAiB1D,QAAQ,CAAC,OAAO,EAAE,sBAAsB,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE,OAAO,GAAG,MAAM,GAAG,MAAM,EAAU,GAAG,IAAI;IAS9G,YAAY,CAAC,SAAS,EAAE,sBAAsB,EAAE,GAAG,IAAI;IAavD,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,sBAAsB,GAAG,6BAA6B,GAAG,SAAS;CAQ/G"}
1
+ {"version":3,"file":"ModuleFactoryLocator.d.ts","sourceRoot":"","sources":["../../src/ModuleFactoryLocator.ts"],"names":[],"mappings":"AACA,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EAGvB,6BAA6B,EAC7B,MAAM,EAEP,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAOnD,qBAAa,oBAAoB;IAGnB,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,uBAAuB;IAFjE,OAAO,CAAC,OAAO,CAAQ;gBAEQ,SAAS,GAAE,uBAAsD;IAKhG,IAAI,QAAQ,IAAI,QAAQ,CAAC,uBAAuB,CAAC,CAEhD;IAED,MAAM,CAAC,KAAK;IAIZ,MAAM,CAAC,QAAQ;IAIf,MAAM;IAUN,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,sBAAsB,GAAG,6BAA6B;IAO/F,KAAK,CAAC,OAAO,EAAE,oBAAoB,GAAG,oBAAoB;IAiB1D,QAAQ,CAAC,OAAO,EAAE,sBAAsB,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE,OAAO,GAAG,MAAM,GAAG,MAAM,EAAU,GAAG,IAAI;IAU9G,YAAY,CAAC,SAAS,EAAE,sBAAsB,EAAE,GAAG,IAAI;IAavD,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,sBAAsB,GAAG,6BAA6B,GAAG,SAAS;CAO/G"}
@@ -2,8 +2,12 @@ import { CreatableModuleFactory, CreatableModuleRegistry, LabeledCreatableModule
2
2
  import { Schema } from '@xyo-network/payload-model';
3
3
  export declare class ModuleFactoryLocator {
4
4
  protected readonly _registry: CreatableModuleRegistry;
5
+ private _frozen;
5
6
  constructor(_registry?: CreatableModuleRegistry);
6
7
  get registry(): Readonly<CreatableModuleRegistry>;
8
+ static empty(): ModuleFactoryLocator;
9
+ static standard(): ModuleFactoryLocator;
10
+ freeze(): void;
7
11
  locate(schema: string, labels?: Labels): CreatableModuleFactory | LabeledCreatableModuleFactory;
8
12
  merge(locator: ModuleFactoryLocator): ModuleFactoryLocator;
9
13
  register(factory: CreatableModuleFactory, labels?: Labels, primary?: boolean | Schema | Schema[]): this;
@@ -1 +1 @@
1
- {"version":3,"file":"ModuleFactoryLocator.d.ts","sourceRoot":"","sources":["../../src/ModuleFactoryLocator.ts"],"names":[],"mappings":"AACA,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EAGvB,6BAA6B,EAC7B,MAAM,EAEP,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAOnD,qBAAa,oBAAoB;IACnB,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,uBAAuB;gBAAlC,SAAS,GAAE,uBAAsD;IAKhG,IAAI,QAAQ,IAAI,QAAQ,CAAC,uBAAuB,CAAC,CAEhD;IAQD,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,sBAAsB,GAAG,6BAA6B;IAQ/F,KAAK,CAAC,OAAO,EAAE,oBAAoB,GAAG,oBAAoB;IAiB1D,QAAQ,CAAC,OAAO,EAAE,sBAAsB,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE,OAAO,GAAG,MAAM,GAAG,MAAM,EAAU,GAAG,IAAI;IAS9G,YAAY,CAAC,SAAS,EAAE,sBAAsB,EAAE,GAAG,IAAI;IAavD,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,sBAAsB,GAAG,6BAA6B,GAAG,SAAS;CAQ/G"}
1
+ {"version":3,"file":"ModuleFactoryLocator.d.ts","sourceRoot":"","sources":["../../src/ModuleFactoryLocator.ts"],"names":[],"mappings":"AACA,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EAGvB,6BAA6B,EAC7B,MAAM,EAEP,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAOnD,qBAAa,oBAAoB;IAGnB,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,uBAAuB;IAFjE,OAAO,CAAC,OAAO,CAAQ;gBAEQ,SAAS,GAAE,uBAAsD;IAKhG,IAAI,QAAQ,IAAI,QAAQ,CAAC,uBAAuB,CAAC,CAEhD;IAED,MAAM,CAAC,KAAK;IAIZ,MAAM,CAAC,QAAQ;IAIf,MAAM;IAUN,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,sBAAsB,GAAG,6BAA6B;IAO/F,KAAK,CAAC,OAAO,EAAE,oBAAoB,GAAG,oBAAoB;IAiB1D,QAAQ,CAAC,OAAO,EAAE,sBAAsB,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE,OAAO,GAAG,MAAM,GAAG,MAAM,EAAU,GAAG,IAAI;IAU9G,YAAY,CAAC,SAAS,EAAE,sBAAsB,EAAE,GAAG,IAAI;IAavD,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,sBAAsB,GAAG,6BAA6B,GAAG,SAAS;CAO/G"}
@@ -66,8 +66,10 @@ var ModuleFactoryLocator = class _ModuleFactoryLocator {
66
66
  __name(this, "ModuleFactoryLocator");
67
67
  }
68
68
  _registry;
69
+ _frozen;
69
70
  constructor(_registry = standardCreatableFactories()) {
70
71
  this._registry = _registry;
72
+ this._frozen = false;
71
73
  }
72
74
  /**
73
75
  * The current registry for the module factory
@@ -75,6 +77,15 @@ var ModuleFactoryLocator = class _ModuleFactoryLocator {
75
77
  get registry() {
76
78
  return this._registry;
77
79
  }
80
+ static empty() {
81
+ return new _ModuleFactoryLocator({});
82
+ }
83
+ static standard() {
84
+ return new _ModuleFactoryLocator(standardCreatableFactories());
85
+ }
86
+ freeze() {
87
+ this._frozen = true;
88
+ }
78
89
  /**
79
90
  * Locates a module factory that matches the supplied schema and labels
80
91
  * @param schema The config schema for the module
@@ -82,11 +93,7 @@ var ModuleFactoryLocator = class _ModuleFactoryLocator {
82
93
  * @returns A module factory that matches the supplied schema and labels or throws if one is not found
83
94
  */
84
95
  locate(schema, labels) {
85
- return (0, import_assert.assertEx)(
86
- this.tryLocate(schema, labels),
87
- // eslint-disable-next-line sonarjs/no-nested-template-literals
88
- () => `No module factory for the supplied ${`config schema [${schema}]`}${labels ? ` & labels [${JSON.stringify(labels)}]` : ""} registered`
89
- );
96
+ return (0, import_assert.assertEx)(this.tryLocate(schema, labels), () => `No module factory for the supplied ${`config schema [${schema}]`}${labels ? ` & labels [${JSON.stringify(labels)}]` : ""} registered`);
90
97
  }
91
98
  merge(locator) {
92
99
  const registry = {
@@ -107,6 +114,7 @@ var ModuleFactoryLocator = class _ModuleFactoryLocator {
107
114
  * @param labels The labels for the module factory
108
115
  */
109
116
  register(factory, labels, primary = false) {
117
+ (0, import_assert.assertEx)(!this._frozen, () => "Cannot register a module factory after the locator has been frozen");
110
118
  (0, import_module_model2.registerCreatableModuleFactory)(this._registry, factory, labels, primary);
111
119
  return this;
112
120
  }
@@ -127,10 +135,7 @@ var ModuleFactoryLocator = class _ModuleFactoryLocator {
127
135
  * @returns A module factory that matches the supplied schema and labels or undefined
128
136
  */
129
137
  tryLocate(schema, labels) {
130
- return labels ? (
131
- // Find the first factory that has labels and has all the labels provided
132
- this._registry[schema]?.filter(import_module_model2.hasLabels).find((factory) => (0, import_module_model2.hasAllLabels)(factory?.labels, labels))
133
- ) : this._registry[schema]?.[0];
138
+ return labels ? this._registry[schema]?.filter(import_module_model2.hasLabels).find((factory) => (0, import_module_model2.hasAllLabels)(factory?.labels, labels)) : this._registry[schema]?.[0];
134
139
  }
135
140
  };
136
141
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts","../../src/ModuleFactoryLocator.ts","../../src/standardCreatableFactories.ts"],"sourcesContent":["export * from './ModuleFactoryLocator.ts'\nexport * from './standardCreatableFactories.ts'\n","import { assertEx } from '@xylabs/assert'\nimport {\n CreatableModuleFactory,\n CreatableModuleRegistry,\n hasAllLabels,\n hasLabels,\n LabeledCreatableModuleFactory,\n Labels,\n registerCreatableModuleFactory,\n} from '@xyo-network/module-model'\nimport { Schema } from '@xyo-network/payload-model'\n\nimport { standardCreatableFactories } from './standardCreatableFactories.ts'\n\n/**\n * A class which encapsulates the Service Locator Pattern for Module Factories\n */\nexport class ModuleFactoryLocator {\n constructor(protected readonly _registry: CreatableModuleRegistry = standardCreatableFactories()) {}\n\n /**\n * The current registry for the module factory\n */\n get registry(): Readonly<CreatableModuleRegistry> {\n return this._registry\n }\n\n /**\n * Locates a module factory that matches the supplied schema and labels\n * @param schema The config schema for the module\n * @param labels The labels for the module factory\n * @returns A module factory that matches the supplied schema and labels or throws if one is not found\n */\n locate(schema: string, labels?: Labels): CreatableModuleFactory | LabeledCreatableModuleFactory {\n return assertEx(\n this.tryLocate(schema, labels),\n // eslint-disable-next-line sonarjs/no-nested-template-literals\n () => `No module factory for the supplied ${`config schema [${schema}]`}${labels ? ` & labels [${JSON.stringify(labels)}]` : ''} registered`,\n )\n }\n\n merge(locator: ModuleFactoryLocator): ModuleFactoryLocator {\n const registry = { ...this.registry }\n for (const schema in locator.registry) {\n if (registry[schema]) {\n registry[schema].push(...(locator.registry[schema] ?? []))\n } else {\n registry[schema] = locator.registry[schema]\n }\n }\n return new ModuleFactoryLocator(registry)\n }\n\n /**\n * Registers a single module factory (with optional tags) with the locator\n * @param factory The factory to register\n * @param labels The labels for the module factory\n */\n register(factory: CreatableModuleFactory, labels?: Labels, primary: boolean | Schema | Schema[] = false): this {\n registerCreatableModuleFactory(this._registry, factory, labels, primary)\n return this\n }\n\n /**\n * Registers multiple module factories with the locator\n * @param factories The factories to register\n */\n registerMany(factories: CreatableModuleFactory[]): this {\n for (const factory of factories) {\n this.register(factory)\n }\n return this\n }\n\n /**\n * Tries to locate a module factory that matches the supplied schema and labels\n * @param schema The config schema for the module\n * @param labels The labels for the module factory\n * @returns A module factory that matches the supplied schema and labels or undefined\n */\n tryLocate(schema: string, labels?: Labels): CreatableModuleFactory | LabeledCreatableModuleFactory | undefined {\n // If labels were provided\n return labels ?\n // Find the first factory that has labels and has all the labels provided\n this._registry[schema]?.filter(hasLabels).find((factory) => hasAllLabels(factory?.labels, labels))\n : // Otherwise, return the first factory\n this._registry[schema]?.[0]\n }\n}\n","import { MemoryArchivist } from '@xyo-network/archivist-memory'\nimport { ViewArchivist } from '@xyo-network/archivist-view'\nimport { HttpBridge } from '@xyo-network/bridge-http'\nimport { MemoryBoundWitnessDiviner } from '@xyo-network/diviner-boundwitness-memory'\nimport { IdentityDiviner } from '@xyo-network/diviner-identity'\nimport { MemoryPayloadDiviner } from '@xyo-network/diviner-payload-memory'\nimport { CreatableModuleFactory, LabeledCreatableModuleFactory, registerCreatableModuleFactories } from '@xyo-network/module-model'\nimport { MemoryNode } from '@xyo-network/node-memory'\nimport { ViewNode } from '@xyo-network/node-view'\nimport { MemorySentinel } from '@xyo-network/sentinel-memory'\nimport { AdhocWitness } from '@xyo-network/witness-adhoc'\n\n//order matters in this array. later items will register themselves as primary for schemas shared with earlier items\nexport const standardCreatableFactoriesList: (CreatableModuleFactory | LabeledCreatableModuleFactory)[] = [\n HttpBridge,\n ViewArchivist,\n ViewNode,\n AdhocWitness,\n MemoryPayloadDiviner,\n MemoryBoundWitnessDiviner,\n IdentityDiviner,\n MemoryArchivist,\n MemoryArchivist,\n MemoryNode,\n MemorySentinel,\n]\n\nexport const standardCreatableFactories = () => {\n return registerCreatableModuleFactories(standardCreatableFactoriesList, {}, true)\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;;ACAA,oBAAyB;AACzB,IAAAA,uBAQO;;;ACTP,8BAAgC;AAChC,4BAA8B;AAC9B,yBAA2B;AAC3B,yCAA0C;AAC1C,8BAAgC;AAChC,oCAAqC;AACrC,0BAAwG;AACxG,yBAA2B;AAC3B,uBAAyB;AACzB,6BAA+B;AAC/B,2BAA6B;AAGtB,IAAMC,iCAA6F;EACxGC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAA;EACAC;EACAC;;AAGK,IAAMC,6BAA6B,6BAAA;AACxC,aAAOC,sDAAiCZ,gCAAgC,CAAC,GAAG,IAAA;AAC9E,GAF0C;;;ADVnC,IAAMa,uBAAN,MAAMA,sBAAAA;EAjBb,OAiBaA;;;;EACXC,YAA+BC,YAAqCC,2BAAAA,GAA8B;SAAnED,YAAAA;EAAoE;;;;EAKnG,IAAIE,WAA8C;AAChD,WAAO,KAAKF;EACd;;;;;;;EAQAG,OAAOC,QAAgBC,QAAyE;AAC9F,eAAOC;MACL,KAAKC,UAAUH,QAAQC,MAAAA;;MAEvB,MAAM,sCAAsC,kBAAkBD,MAAAA,GAAS,GAAGC,SAAS,cAAcG,KAAKC,UAAUJ,MAAAA,CAAAA,MAAa,EAAA;IAAe;EAEhJ;EAEAK,MAAMC,SAAqD;AACzD,UAAMT,WAAW;MAAE,GAAG,KAAKA;IAAS;AACpC,eAAWE,UAAUO,QAAQT,UAAU;AACrC,UAAIA,SAASE,MAAAA,GAAS;AACpBF,iBAASE,MAAAA,EAAQQ,KAAI,GAAKD,QAAQT,SAASE,MAAAA,KAAW,CAAA,CAAE;MAC1D,OAAO;AACLF,iBAASE,MAAAA,IAAUO,QAAQT,SAASE,MAAAA;MACtC;IACF;AACA,WAAO,IAAIN,sBAAqBI,QAAAA;EAClC;;;;;;EAOAW,SAASC,SAAiCT,QAAiBU,UAAuC,OAAa;AAC7GC,6DAA+B,KAAKhB,WAAWc,SAAST,QAAQU,OAAAA;AAChE,WAAO;EACT;;;;;EAMAE,aAAaC,WAA2C;AACtD,eAAWJ,WAAWI,WAAW;AAC/B,WAAKL,SAASC,OAAAA;IAChB;AACA,WAAO;EACT;;;;;;;EAQAP,UAAUH,QAAgBC,QAAqF;AAE7G,WAAOA;;MAEH,KAAKL,UAAUI,MAAAA,GAASe,OAAOC,8BAAAA,EAAWC,KAAK,CAACP,gBAAYQ,mCAAaR,SAAST,QAAQA,MAAAA,CAAAA;QAE1F,KAAKL,UAAUI,MAAAA,IAAU,CAAA;EAC/B;AACF;","names":["import_module_model","standardCreatableFactoriesList","HttpBridge","ViewArchivist","ViewNode","AdhocWitness","MemoryPayloadDiviner","MemoryBoundWitnessDiviner","IdentityDiviner","MemoryArchivist","MemoryNode","MemorySentinel","standardCreatableFactories","registerCreatableModuleFactories","ModuleFactoryLocator","constructor","_registry","standardCreatableFactories","registry","locate","schema","labels","assertEx","tryLocate","JSON","stringify","merge","locator","push","register","factory","primary","registerCreatableModuleFactory","registerMany","factories","filter","hasLabels","find","hasAllLabels"]}
1
+ {"version":3,"sources":["../../src/index.ts","../../src/ModuleFactoryLocator.ts","../../src/standardCreatableFactories.ts"],"sourcesContent":["export * from './ModuleFactoryLocator.ts'\nexport * from './standardCreatableFactories.ts'\n","import { assertEx } from '@xylabs/assert'\nimport {\n CreatableModuleFactory,\n CreatableModuleRegistry,\n hasAllLabels,\n hasLabels,\n LabeledCreatableModuleFactory,\n Labels,\n registerCreatableModuleFactory,\n} from '@xyo-network/module-model'\nimport { Schema } from '@xyo-network/payload-model'\n\nimport { standardCreatableFactories } from './standardCreatableFactories.ts'\n\n/**\n * A class which encapsulates the Service Locator Pattern for Module Factories\n */\nexport class ModuleFactoryLocator {\n private _frozen = false\n\n constructor(protected readonly _registry: CreatableModuleRegistry = standardCreatableFactories()) {}\n\n /**\n * The current registry for the module factory\n */\n get registry(): Readonly<CreatableModuleRegistry> {\n return this._registry\n }\n\n static empty() {\n return new ModuleFactoryLocator({})\n }\n\n static standard() {\n return new ModuleFactoryLocator(standardCreatableFactories())\n }\n\n freeze() {\n this._frozen = true\n }\n\n /**\n * Locates a module factory that matches the supplied schema and labels\n * @param schema The config schema for the module\n * @param labels The labels for the module factory\n * @returns A module factory that matches the supplied schema and labels or throws if one is not found\n */\n locate(schema: string, labels?: Labels): CreatableModuleFactory | LabeledCreatableModuleFactory {\n return assertEx(\n this.tryLocate(schema, labels),\n () => `No module factory for the supplied ${`config schema [${schema}]`}${labels ? ` & labels [${JSON.stringify(labels)}]` : ''} registered`,\n )\n }\n\n merge(locator: ModuleFactoryLocator): ModuleFactoryLocator {\n const registry = { ...this.registry }\n for (const schema in locator.registry) {\n if (registry[schema]) {\n registry[schema].push(...(locator.registry[schema] ?? []))\n } else {\n registry[schema] = locator.registry[schema]\n }\n }\n return new ModuleFactoryLocator(registry)\n }\n\n /**\n * Registers a single module factory (with optional tags) with the locator\n * @param factory The factory to register\n * @param labels The labels for the module factory\n */\n register(factory: CreatableModuleFactory, labels?: Labels, primary: boolean | Schema | Schema[] = false): this {\n assertEx(!this._frozen, () => 'Cannot register a module factory after the locator has been frozen')\n registerCreatableModuleFactory(this._registry, factory, labels, primary)\n return this\n }\n\n /**\n * Registers multiple module factories with the locator\n * @param factories The factories to register\n */\n registerMany(factories: CreatableModuleFactory[]): this {\n for (const factory of factories) {\n this.register(factory)\n }\n return this\n }\n\n /**\n * Tries to locate a module factory that matches the supplied schema and labels\n * @param schema The config schema for the module\n * @param labels The labels for the module factory\n * @returns A module factory that matches the supplied schema and labels or undefined\n */\n tryLocate(schema: string, labels?: Labels): CreatableModuleFactory | LabeledCreatableModuleFactory | undefined {\n // If labels were provided\n return labels\n // Find the first factory that has labels and has all the labels provided\n ? this._registry[schema]?.filter(hasLabels).find(factory => hasAllLabels(factory?.labels, labels))\n : this._registry[schema]?.[0] // Otherwise, return the first factory\n }\n}\n","import { MemoryArchivist } from '@xyo-network/archivist-memory'\nimport { ViewArchivist } from '@xyo-network/archivist-view'\nimport { HttpBridge } from '@xyo-network/bridge-http'\nimport { MemoryBoundWitnessDiviner } from '@xyo-network/diviner-boundwitness-memory'\nimport { IdentityDiviner } from '@xyo-network/diviner-identity'\nimport { MemoryPayloadDiviner } from '@xyo-network/diviner-payload-memory'\nimport { CreatableModuleFactory, LabeledCreatableModuleFactory, registerCreatableModuleFactories } from '@xyo-network/module-model'\nimport { MemoryNode } from '@xyo-network/node-memory'\nimport { ViewNode } from '@xyo-network/node-view'\nimport { MemorySentinel } from '@xyo-network/sentinel-memory'\nimport { AdhocWitness } from '@xyo-network/witness-adhoc'\n\n// order matters in this array. later items will register themselves as primary for schemas shared with earlier items\nexport const standardCreatableFactoriesList: (CreatableModuleFactory | LabeledCreatableModuleFactory)[] = [\n HttpBridge,\n ViewArchivist,\n ViewNode,\n AdhocWitness,\n MemoryPayloadDiviner,\n MemoryBoundWitnessDiviner,\n IdentityDiviner,\n MemoryArchivist,\n MemoryArchivist,\n MemoryNode,\n MemorySentinel,\n]\n\nexport const standardCreatableFactories = () => {\n return registerCreatableModuleFactories(standardCreatableFactoriesList, {}, true)\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;;ACAA,oBAAyB;AACzB,IAAAA,uBAQO;;;ACTP,8BAAgC;AAChC,4BAA8B;AAC9B,yBAA2B;AAC3B,yCAA0C;AAC1C,8BAAgC;AAChC,oCAAqC;AACrC,0BAAwG;AACxG,yBAA2B;AAC3B,uBAAyB;AACzB,6BAA+B;AAC/B,2BAA6B;AAGtB,IAAMC,iCAA6F;EACxGC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAA;EACAC;EACAC;;AAGK,IAAMC,6BAA6B,6BAAA;AACxC,aAAOC,sDAAiCZ,gCAAgC,CAAC,GAAG,IAAA;AAC9E,GAF0C;;;ADVnC,IAAMa,uBAAN,MAAMA,sBAAAA;EAjBb,OAiBaA;;;;EACHC;EAERC,YAA+BC,YAAqCC,2BAAAA,GAA8B;SAAnED,YAAAA;SAFvBF,UAAU;EAEiF;;;;EAKnG,IAAII,WAA8C;AAChD,WAAO,KAAKF;EACd;EAEA,OAAOG,QAAQ;AACb,WAAO,IAAIN,sBAAqB,CAAC,CAAA;EACnC;EAEA,OAAOO,WAAW;AAChB,WAAO,IAAIP,sBAAqBI,2BAAAA,CAAAA;EAClC;EAEAI,SAAS;AACP,SAAKP,UAAU;EACjB;;;;;;;EAQAQ,OAAOC,QAAgBC,QAAyE;AAC9F,eAAOC,wBACL,KAAKC,UAAUH,QAAQC,MAAAA,GACvB,MAAM,sCAAsC,kBAAkBD,MAAAA,GAAS,GAAGC,SAAS,cAAcG,KAAKC,UAAUJ,MAAAA,CAAAA,MAAa,EAAA,aAAe;EAEhJ;EAEAK,MAAMC,SAAqD;AACzD,UAAMZ,WAAW;MAAE,GAAG,KAAKA;IAAS;AACpC,eAAWK,UAAUO,QAAQZ,UAAU;AACrC,UAAIA,SAASK,MAAAA,GAAS;AACpBL,iBAASK,MAAAA,EAAQQ,KAAI,GAAKD,QAAQZ,SAASK,MAAAA,KAAW,CAAA,CAAE;MAC1D,OAAO;AACLL,iBAASK,MAAAA,IAAUO,QAAQZ,SAASK,MAAAA;MACtC;IACF;AACA,WAAO,IAAIV,sBAAqBK,QAAAA;EAClC;;;;;;EAOAc,SAASC,SAAiCT,QAAiBU,UAAuC,OAAa;AAC7GT,gCAAS,CAAC,KAAKX,SAAS,MAAM,oEAAA;AAC9BqB,6DAA+B,KAAKnB,WAAWiB,SAAST,QAAQU,OAAAA;AAChE,WAAO;EACT;;;;;EAMAE,aAAaC,WAA2C;AACtD,eAAWJ,WAAWI,WAAW;AAC/B,WAAKL,SAASC,OAAAA;IAChB;AACA,WAAO;EACT;;;;;;;EAQAP,UAAUH,QAAgBC,QAAqF;AAE7G,WAAOA,SAEH,KAAKR,UAAUO,MAAAA,GAASe,OAAOC,8BAAAA,EAAWC,KAAKP,CAAAA,gBAAWQ,mCAAaR,SAAST,QAAQA,MAAAA,CAAAA,IACxF,KAAKR,UAAUO,MAAAA,IAAU,CAAA;EAC/B;AACF;","names":["import_module_model","standardCreatableFactoriesList","HttpBridge","ViewArchivist","ViewNode","AdhocWitness","MemoryPayloadDiviner","MemoryBoundWitnessDiviner","IdentityDiviner","MemoryArchivist","MemoryNode","MemorySentinel","standardCreatableFactories","registerCreatableModuleFactories","ModuleFactoryLocator","_frozen","constructor","_registry","standardCreatableFactories","registry","empty","standard","freeze","locate","schema","labels","assertEx","tryLocate","JSON","stringify","merge","locator","push","register","factory","primary","registerCreatableModuleFactory","registerMany","factories","filter","hasLabels","find","hasAllLabels"]}
@@ -40,8 +40,10 @@ var ModuleFactoryLocator = class _ModuleFactoryLocator {
40
40
  __name(this, "ModuleFactoryLocator");
41
41
  }
42
42
  _registry;
43
+ _frozen;
43
44
  constructor(_registry = standardCreatableFactories()) {
44
45
  this._registry = _registry;
46
+ this._frozen = false;
45
47
  }
46
48
  /**
47
49
  * The current registry for the module factory
@@ -49,6 +51,15 @@ var ModuleFactoryLocator = class _ModuleFactoryLocator {
49
51
  get registry() {
50
52
  return this._registry;
51
53
  }
54
+ static empty() {
55
+ return new _ModuleFactoryLocator({});
56
+ }
57
+ static standard() {
58
+ return new _ModuleFactoryLocator(standardCreatableFactories());
59
+ }
60
+ freeze() {
61
+ this._frozen = true;
62
+ }
52
63
  /**
53
64
  * Locates a module factory that matches the supplied schema and labels
54
65
  * @param schema The config schema for the module
@@ -56,11 +67,7 @@ var ModuleFactoryLocator = class _ModuleFactoryLocator {
56
67
  * @returns A module factory that matches the supplied schema and labels or throws if one is not found
57
68
  */
58
69
  locate(schema, labels) {
59
- return assertEx(
60
- this.tryLocate(schema, labels),
61
- // eslint-disable-next-line sonarjs/no-nested-template-literals
62
- () => `No module factory for the supplied ${`config schema [${schema}]`}${labels ? ` & labels [${JSON.stringify(labels)}]` : ""} registered`
63
- );
70
+ return assertEx(this.tryLocate(schema, labels), () => `No module factory for the supplied ${`config schema [${schema}]`}${labels ? ` & labels [${JSON.stringify(labels)}]` : ""} registered`);
64
71
  }
65
72
  merge(locator) {
66
73
  const registry = {
@@ -81,6 +88,7 @@ var ModuleFactoryLocator = class _ModuleFactoryLocator {
81
88
  * @param labels The labels for the module factory
82
89
  */
83
90
  register(factory, labels, primary = false) {
91
+ assertEx(!this._frozen, () => "Cannot register a module factory after the locator has been frozen");
84
92
  registerCreatableModuleFactory(this._registry, factory, labels, primary);
85
93
  return this;
86
94
  }
@@ -101,10 +109,7 @@ var ModuleFactoryLocator = class _ModuleFactoryLocator {
101
109
  * @returns A module factory that matches the supplied schema and labels or undefined
102
110
  */
103
111
  tryLocate(schema, labels) {
104
- return labels ? (
105
- // Find the first factory that has labels and has all the labels provided
106
- this._registry[schema]?.filter(hasLabels).find((factory) => hasAllLabels(factory?.labels, labels))
107
- ) : this._registry[schema]?.[0];
112
+ return labels ? this._registry[schema]?.filter(hasLabels).find((factory) => hasAllLabels(factory?.labels, labels)) : this._registry[schema]?.[0];
108
113
  }
109
114
  };
110
115
  export {
@@ -112,4 +117,4 @@ export {
112
117
  standardCreatableFactories,
113
118
  standardCreatableFactoriesList
114
119
  };
115
- //# sourceMappingURL=index.js.map
120
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/ModuleFactoryLocator.ts","../../src/standardCreatableFactories.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport {\n CreatableModuleFactory,\n CreatableModuleRegistry,\n hasAllLabels,\n hasLabels,\n LabeledCreatableModuleFactory,\n Labels,\n registerCreatableModuleFactory,\n} from '@xyo-network/module-model'\nimport { Schema } from '@xyo-network/payload-model'\n\nimport { standardCreatableFactories } from './standardCreatableFactories.ts'\n\n/**\n * A class which encapsulates the Service Locator Pattern for Module Factories\n */\nexport class ModuleFactoryLocator {\n private _frozen = false\n\n constructor(protected readonly _registry: CreatableModuleRegistry = standardCreatableFactories()) {}\n\n /**\n * The current registry for the module factory\n */\n get registry(): Readonly<CreatableModuleRegistry> {\n return this._registry\n }\n\n static empty() {\n return new ModuleFactoryLocator({})\n }\n\n static standard() {\n return new ModuleFactoryLocator(standardCreatableFactories())\n }\n\n freeze() {\n this._frozen = true\n }\n\n /**\n * Locates a module factory that matches the supplied schema and labels\n * @param schema The config schema for the module\n * @param labels The labels for the module factory\n * @returns A module factory that matches the supplied schema and labels or throws if one is not found\n */\n locate(schema: string, labels?: Labels): CreatableModuleFactory | LabeledCreatableModuleFactory {\n return assertEx(\n this.tryLocate(schema, labels),\n () => `No module factory for the supplied ${`config schema [${schema}]`}${labels ? ` & labels [${JSON.stringify(labels)}]` : ''} registered`,\n )\n }\n\n merge(locator: ModuleFactoryLocator): ModuleFactoryLocator {\n const registry = { ...this.registry }\n for (const schema in locator.registry) {\n if (registry[schema]) {\n registry[schema].push(...(locator.registry[schema] ?? []))\n } else {\n registry[schema] = locator.registry[schema]\n }\n }\n return new ModuleFactoryLocator(registry)\n }\n\n /**\n * Registers a single module factory (with optional tags) with the locator\n * @param factory The factory to register\n * @param labels The labels for the module factory\n */\n register(factory: CreatableModuleFactory, labels?: Labels, primary: boolean | Schema | Schema[] = false): this {\n assertEx(!this._frozen, () => 'Cannot register a module factory after the locator has been frozen')\n registerCreatableModuleFactory(this._registry, factory, labels, primary)\n return this\n }\n\n /**\n * Registers multiple module factories with the locator\n * @param factories The factories to register\n */\n registerMany(factories: CreatableModuleFactory[]): this {\n for (const factory of factories) {\n this.register(factory)\n }\n return this\n }\n\n /**\n * Tries to locate a module factory that matches the supplied schema and labels\n * @param schema The config schema for the module\n * @param labels The labels for the module factory\n * @returns A module factory that matches the supplied schema and labels or undefined\n */\n tryLocate(schema: string, labels?: Labels): CreatableModuleFactory | LabeledCreatableModuleFactory | undefined {\n // If labels were provided\n return labels\n // Find the first factory that has labels and has all the labels provided\n ? this._registry[schema]?.filter(hasLabels).find(factory => hasAllLabels(factory?.labels, labels))\n : this._registry[schema]?.[0] // Otherwise, return the first factory\n }\n}\n","import { MemoryArchivist } from '@xyo-network/archivist-memory'\nimport { ViewArchivist } from '@xyo-network/archivist-view'\nimport { HttpBridge } from '@xyo-network/bridge-http'\nimport { MemoryBoundWitnessDiviner } from '@xyo-network/diviner-boundwitness-memory'\nimport { IdentityDiviner } from '@xyo-network/diviner-identity'\nimport { MemoryPayloadDiviner } from '@xyo-network/diviner-payload-memory'\nimport { CreatableModuleFactory, LabeledCreatableModuleFactory, registerCreatableModuleFactories } from '@xyo-network/module-model'\nimport { MemoryNode } from '@xyo-network/node-memory'\nimport { ViewNode } from '@xyo-network/node-view'\nimport { MemorySentinel } from '@xyo-network/sentinel-memory'\nimport { AdhocWitness } from '@xyo-network/witness-adhoc'\n\n// order matters in this array. later items will register themselves as primary for schemas shared with earlier items\nexport const standardCreatableFactoriesList: (CreatableModuleFactory | LabeledCreatableModuleFactory)[] = [\n HttpBridge,\n ViewArchivist,\n ViewNode,\n AdhocWitness,\n MemoryPayloadDiviner,\n MemoryBoundWitnessDiviner,\n IdentityDiviner,\n MemoryArchivist,\n MemoryArchivist,\n MemoryNode,\n MemorySentinel,\n]\n\nexport const standardCreatableFactories = () => {\n return registerCreatableModuleFactories(standardCreatableFactoriesList, {}, true)\n}\n"],"mappings":";;;;AAAA,SAASA,gBAAgB;AACzB,SAGEC,cACAC,WAGAC,sCACK;;;ACTP,SAASC,uBAAuB;AAChC,SAASC,qBAAqB;AAC9B,SAASC,kBAAkB;AAC3B,SAASC,iCAAiC;AAC1C,SAASC,uBAAuB;AAChC,SAASC,4BAA4B;AACrC,SAAgEC,wCAAwC;AACxG,SAASC,kBAAkB;AAC3B,SAASC,gBAAgB;AACzB,SAASC,sBAAsB;AAC/B,SAASC,oBAAoB;AAGtB,IAAMC,iCAA6F;EACxGC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAA;EACAC;EACAC;;AAGK,IAAMC,6BAA6B,6BAAA;AACxC,SAAOC,iCAAiCZ,gCAAgC,CAAC,GAAG,IAAA;AAC9E,GAF0C;;;ADVnC,IAAMa,uBAAN,MAAMA,sBAAAA;EAjBb,OAiBaA;;;;EACHC;EAERC,YAA+BC,YAAqCC,2BAAAA,GAA8B;SAAnED,YAAAA;SAFvBF,UAAU;EAEiF;;;;EAKnG,IAAII,WAA8C;AAChD,WAAO,KAAKF;EACd;EAEA,OAAOG,QAAQ;AACb,WAAO,IAAIN,sBAAqB,CAAC,CAAA;EACnC;EAEA,OAAOO,WAAW;AAChB,WAAO,IAAIP,sBAAqBI,2BAAAA,CAAAA;EAClC;EAEAI,SAAS;AACP,SAAKP,UAAU;EACjB;;;;;;;EAQAQ,OAAOC,QAAgBC,QAAyE;AAC9F,WAAOC,SACL,KAAKC,UAAUH,QAAQC,MAAAA,GACvB,MAAM,sCAAsC,kBAAkBD,MAAAA,GAAS,GAAGC,SAAS,cAAcG,KAAKC,UAAUJ,MAAAA,CAAAA,MAAa,EAAA,aAAe;EAEhJ;EAEAK,MAAMC,SAAqD;AACzD,UAAMZ,WAAW;MAAE,GAAG,KAAKA;IAAS;AACpC,eAAWK,UAAUO,QAAQZ,UAAU;AACrC,UAAIA,SAASK,MAAAA,GAAS;AACpBL,iBAASK,MAAAA,EAAQQ,KAAI,GAAKD,QAAQZ,SAASK,MAAAA,KAAW,CAAA,CAAE;MAC1D,OAAO;AACLL,iBAASK,MAAAA,IAAUO,QAAQZ,SAASK,MAAAA;MACtC;IACF;AACA,WAAO,IAAIV,sBAAqBK,QAAAA;EAClC;;;;;;EAOAc,SAASC,SAAiCT,QAAiBU,UAAuC,OAAa;AAC7GT,aAAS,CAAC,KAAKX,SAAS,MAAM,oEAAA;AAC9BqB,mCAA+B,KAAKnB,WAAWiB,SAAST,QAAQU,OAAAA;AAChE,WAAO;EACT;;;;;EAMAE,aAAaC,WAA2C;AACtD,eAAWJ,WAAWI,WAAW;AAC/B,WAAKL,SAASC,OAAAA;IAChB;AACA,WAAO;EACT;;;;;;;EAQAP,UAAUH,QAAgBC,QAAqF;AAE7G,WAAOA,SAEH,KAAKR,UAAUO,MAAAA,GAASe,OAAOC,SAAAA,EAAWC,KAAKP,CAAAA,YAAWQ,aAAaR,SAAST,QAAQA,MAAAA,CAAAA,IACxF,KAAKR,UAAUO,MAAAA,IAAU,CAAA;EAC/B;AACF;","names":["assertEx","hasAllLabels","hasLabels","registerCreatableModuleFactory","MemoryArchivist","ViewArchivist","HttpBridge","MemoryBoundWitnessDiviner","IdentityDiviner","MemoryPayloadDiviner","registerCreatableModuleFactories","MemoryNode","ViewNode","MemorySentinel","AdhocWitness","standardCreatableFactoriesList","HttpBridge","ViewArchivist","ViewNode","AdhocWitness","MemoryPayloadDiviner","MemoryBoundWitnessDiviner","IdentityDiviner","MemoryArchivist","MemoryNode","MemorySentinel","standardCreatableFactories","registerCreatableModuleFactories","ModuleFactoryLocator","_frozen","constructor","_registry","standardCreatableFactories","registry","empty","standard","freeze","locate","schema","labels","assertEx","tryLocate","JSON","stringify","merge","locator","push","register","factory","primary","registerCreatableModuleFactory","registerMany","factories","filter","hasLabels","find","hasAllLabels"]}
@@ -2,8 +2,12 @@ import { CreatableModuleFactory, CreatableModuleRegistry, LabeledCreatableModule
2
2
  import { Schema } from '@xyo-network/payload-model';
3
3
  export declare class ModuleFactoryLocator {
4
4
  protected readonly _registry: CreatableModuleRegistry;
5
+ private _frozen;
5
6
  constructor(_registry?: CreatableModuleRegistry);
6
7
  get registry(): Readonly<CreatableModuleRegistry>;
8
+ static empty(): ModuleFactoryLocator;
9
+ static standard(): ModuleFactoryLocator;
10
+ freeze(): void;
7
11
  locate(schema: string, labels?: Labels): CreatableModuleFactory | LabeledCreatableModuleFactory;
8
12
  merge(locator: ModuleFactoryLocator): ModuleFactoryLocator;
9
13
  register(factory: CreatableModuleFactory, labels?: Labels, primary?: boolean | Schema | Schema[]): this;
@@ -1 +1 @@
1
- {"version":3,"file":"ModuleFactoryLocator.d.ts","sourceRoot":"","sources":["../../src/ModuleFactoryLocator.ts"],"names":[],"mappings":"AACA,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EAGvB,6BAA6B,EAC7B,MAAM,EAEP,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAOnD,qBAAa,oBAAoB;IACnB,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,uBAAuB;gBAAlC,SAAS,GAAE,uBAAsD;IAKhG,IAAI,QAAQ,IAAI,QAAQ,CAAC,uBAAuB,CAAC,CAEhD;IAQD,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,sBAAsB,GAAG,6BAA6B;IAQ/F,KAAK,CAAC,OAAO,EAAE,oBAAoB,GAAG,oBAAoB;IAiB1D,QAAQ,CAAC,OAAO,EAAE,sBAAsB,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE,OAAO,GAAG,MAAM,GAAG,MAAM,EAAU,GAAG,IAAI;IAS9G,YAAY,CAAC,SAAS,EAAE,sBAAsB,EAAE,GAAG,IAAI;IAavD,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,sBAAsB,GAAG,6BAA6B,GAAG,SAAS;CAQ/G"}
1
+ {"version":3,"file":"ModuleFactoryLocator.d.ts","sourceRoot":"","sources":["../../src/ModuleFactoryLocator.ts"],"names":[],"mappings":"AACA,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EAGvB,6BAA6B,EAC7B,MAAM,EAEP,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAOnD,qBAAa,oBAAoB;IAGnB,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,uBAAuB;IAFjE,OAAO,CAAC,OAAO,CAAQ;gBAEQ,SAAS,GAAE,uBAAsD;IAKhG,IAAI,QAAQ,IAAI,QAAQ,CAAC,uBAAuB,CAAC,CAEhD;IAED,MAAM,CAAC,KAAK;IAIZ,MAAM,CAAC,QAAQ;IAIf,MAAM;IAUN,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,sBAAsB,GAAG,6BAA6B;IAO/F,KAAK,CAAC,OAAO,EAAE,oBAAoB,GAAG,oBAAoB;IAiB1D,QAAQ,CAAC,OAAO,EAAE,sBAAsB,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE,OAAO,GAAG,MAAM,GAAG,MAAM,EAAU,GAAG,IAAI;IAU9G,YAAY,CAAC,SAAS,EAAE,sBAAsB,EAAE,GAAG,IAAI;IAavD,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,sBAAsB,GAAG,6BAA6B,GAAG,SAAS;CAO/G"}
@@ -2,8 +2,12 @@ import { CreatableModuleFactory, CreatableModuleRegistry, LabeledCreatableModule
2
2
  import { Schema } from '@xyo-network/payload-model';
3
3
  export declare class ModuleFactoryLocator {
4
4
  protected readonly _registry: CreatableModuleRegistry;
5
+ private _frozen;
5
6
  constructor(_registry?: CreatableModuleRegistry);
6
7
  get registry(): Readonly<CreatableModuleRegistry>;
8
+ static empty(): ModuleFactoryLocator;
9
+ static standard(): ModuleFactoryLocator;
10
+ freeze(): void;
7
11
  locate(schema: string, labels?: Labels): CreatableModuleFactory | LabeledCreatableModuleFactory;
8
12
  merge(locator: ModuleFactoryLocator): ModuleFactoryLocator;
9
13
  register(factory: CreatableModuleFactory, labels?: Labels, primary?: boolean | Schema | Schema[]): this;
@@ -1 +1 @@
1
- {"version":3,"file":"ModuleFactoryLocator.d.ts","sourceRoot":"","sources":["../../src/ModuleFactoryLocator.ts"],"names":[],"mappings":"AACA,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EAGvB,6BAA6B,EAC7B,MAAM,EAEP,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAOnD,qBAAa,oBAAoB;IACnB,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,uBAAuB;gBAAlC,SAAS,GAAE,uBAAsD;IAKhG,IAAI,QAAQ,IAAI,QAAQ,CAAC,uBAAuB,CAAC,CAEhD;IAQD,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,sBAAsB,GAAG,6BAA6B;IAQ/F,KAAK,CAAC,OAAO,EAAE,oBAAoB,GAAG,oBAAoB;IAiB1D,QAAQ,CAAC,OAAO,EAAE,sBAAsB,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE,OAAO,GAAG,MAAM,GAAG,MAAM,EAAU,GAAG,IAAI;IAS9G,YAAY,CAAC,SAAS,EAAE,sBAAsB,EAAE,GAAG,IAAI;IAavD,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,sBAAsB,GAAG,6BAA6B,GAAG,SAAS;CAQ/G"}
1
+ {"version":3,"file":"ModuleFactoryLocator.d.ts","sourceRoot":"","sources":["../../src/ModuleFactoryLocator.ts"],"names":[],"mappings":"AACA,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EAGvB,6BAA6B,EAC7B,MAAM,EAEP,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAOnD,qBAAa,oBAAoB;IAGnB,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,uBAAuB;IAFjE,OAAO,CAAC,OAAO,CAAQ;gBAEQ,SAAS,GAAE,uBAAsD;IAKhG,IAAI,QAAQ,IAAI,QAAQ,CAAC,uBAAuB,CAAC,CAEhD;IAED,MAAM,CAAC,KAAK;IAIZ,MAAM,CAAC,QAAQ;IAIf,MAAM;IAUN,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,sBAAsB,GAAG,6BAA6B;IAO/F,KAAK,CAAC,OAAO,EAAE,oBAAoB,GAAG,oBAAoB;IAiB1D,QAAQ,CAAC,OAAO,EAAE,sBAAsB,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE,OAAO,GAAG,MAAM,GAAG,MAAM,EAAU,GAAG,IAAI;IAU9G,YAAY,CAAC,SAAS,EAAE,sBAAsB,EAAE,GAAG,IAAI;IAavD,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,sBAAsB,GAAG,6BAA6B,GAAG,SAAS;CAO/G"}
@@ -2,8 +2,12 @@ import { CreatableModuleFactory, CreatableModuleRegistry, LabeledCreatableModule
2
2
  import { Schema } from '@xyo-network/payload-model';
3
3
  export declare class ModuleFactoryLocator {
4
4
  protected readonly _registry: CreatableModuleRegistry;
5
+ private _frozen;
5
6
  constructor(_registry?: CreatableModuleRegistry);
6
7
  get registry(): Readonly<CreatableModuleRegistry>;
8
+ static empty(): ModuleFactoryLocator;
9
+ static standard(): ModuleFactoryLocator;
10
+ freeze(): void;
7
11
  locate(schema: string, labels?: Labels): CreatableModuleFactory | LabeledCreatableModuleFactory;
8
12
  merge(locator: ModuleFactoryLocator): ModuleFactoryLocator;
9
13
  register(factory: CreatableModuleFactory, labels?: Labels, primary?: boolean | Schema | Schema[]): this;
@@ -1 +1 @@
1
- {"version":3,"file":"ModuleFactoryLocator.d.ts","sourceRoot":"","sources":["../../src/ModuleFactoryLocator.ts"],"names":[],"mappings":"AACA,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EAGvB,6BAA6B,EAC7B,MAAM,EAEP,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAOnD,qBAAa,oBAAoB;IACnB,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,uBAAuB;gBAAlC,SAAS,GAAE,uBAAsD;IAKhG,IAAI,QAAQ,IAAI,QAAQ,CAAC,uBAAuB,CAAC,CAEhD;IAQD,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,sBAAsB,GAAG,6BAA6B;IAQ/F,KAAK,CAAC,OAAO,EAAE,oBAAoB,GAAG,oBAAoB;IAiB1D,QAAQ,CAAC,OAAO,EAAE,sBAAsB,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE,OAAO,GAAG,MAAM,GAAG,MAAM,EAAU,GAAG,IAAI;IAS9G,YAAY,CAAC,SAAS,EAAE,sBAAsB,EAAE,GAAG,IAAI;IAavD,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,sBAAsB,GAAG,6BAA6B,GAAG,SAAS;CAQ/G"}
1
+ {"version":3,"file":"ModuleFactoryLocator.d.ts","sourceRoot":"","sources":["../../src/ModuleFactoryLocator.ts"],"names":[],"mappings":"AACA,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EAGvB,6BAA6B,EAC7B,MAAM,EAEP,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAOnD,qBAAa,oBAAoB;IAGnB,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,uBAAuB;IAFjE,OAAO,CAAC,OAAO,CAAQ;gBAEQ,SAAS,GAAE,uBAAsD;IAKhG,IAAI,QAAQ,IAAI,QAAQ,CAAC,uBAAuB,CAAC,CAEhD;IAED,MAAM,CAAC,KAAK;IAIZ,MAAM,CAAC,QAAQ;IAIf,MAAM;IAUN,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,sBAAsB,GAAG,6BAA6B;IAO/F,KAAK,CAAC,OAAO,EAAE,oBAAoB,GAAG,oBAAoB;IAiB1D,QAAQ,CAAC,OAAO,EAAE,sBAAsB,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE,OAAO,GAAG,MAAM,GAAG,MAAM,EAAU,GAAG,IAAI;IAU9G,YAAY,CAAC,SAAS,EAAE,sBAAsB,EAAE,GAAG,IAAI;IAavD,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,sBAAsB,GAAG,6BAA6B,GAAG,SAAS;CAO/G"}
@@ -66,8 +66,10 @@ var ModuleFactoryLocator = class _ModuleFactoryLocator {
66
66
  __name(this, "ModuleFactoryLocator");
67
67
  }
68
68
  _registry;
69
+ _frozen;
69
70
  constructor(_registry = standardCreatableFactories()) {
70
71
  this._registry = _registry;
72
+ this._frozen = false;
71
73
  }
72
74
  /**
73
75
  * The current registry for the module factory
@@ -75,6 +77,15 @@ var ModuleFactoryLocator = class _ModuleFactoryLocator {
75
77
  get registry() {
76
78
  return this._registry;
77
79
  }
80
+ static empty() {
81
+ return new _ModuleFactoryLocator({});
82
+ }
83
+ static standard() {
84
+ return new _ModuleFactoryLocator(standardCreatableFactories());
85
+ }
86
+ freeze() {
87
+ this._frozen = true;
88
+ }
78
89
  /**
79
90
  * Locates a module factory that matches the supplied schema and labels
80
91
  * @param schema The config schema for the module
@@ -82,11 +93,7 @@ var ModuleFactoryLocator = class _ModuleFactoryLocator {
82
93
  * @returns A module factory that matches the supplied schema and labels or throws if one is not found
83
94
  */
84
95
  locate(schema, labels) {
85
- return (0, import_assert.assertEx)(
86
- this.tryLocate(schema, labels),
87
- // eslint-disable-next-line sonarjs/no-nested-template-literals
88
- () => `No module factory for the supplied ${`config schema [${schema}]`}${labels ? ` & labels [${JSON.stringify(labels)}]` : ""} registered`
89
- );
96
+ return (0, import_assert.assertEx)(this.tryLocate(schema, labels), () => `No module factory for the supplied ${`config schema [${schema}]`}${labels ? ` & labels [${JSON.stringify(labels)}]` : ""} registered`);
90
97
  }
91
98
  merge(locator) {
92
99
  const registry = {
@@ -107,6 +114,7 @@ var ModuleFactoryLocator = class _ModuleFactoryLocator {
107
114
  * @param labels The labels for the module factory
108
115
  */
109
116
  register(factory, labels, primary = false) {
117
+ (0, import_assert.assertEx)(!this._frozen, () => "Cannot register a module factory after the locator has been frozen");
110
118
  (0, import_module_model2.registerCreatableModuleFactory)(this._registry, factory, labels, primary);
111
119
  return this;
112
120
  }
@@ -127,10 +135,7 @@ var ModuleFactoryLocator = class _ModuleFactoryLocator {
127
135
  * @returns A module factory that matches the supplied schema and labels or undefined
128
136
  */
129
137
  tryLocate(schema, labels) {
130
- return labels ? (
131
- // Find the first factory that has labels and has all the labels provided
132
- this._registry[schema]?.filter(import_module_model2.hasLabels).find((factory) => (0, import_module_model2.hasAllLabels)(factory?.labels, labels))
133
- ) : this._registry[schema]?.[0];
138
+ return labels ? this._registry[schema]?.filter(import_module_model2.hasLabels).find((factory) => (0, import_module_model2.hasAllLabels)(factory?.labels, labels)) : this._registry[schema]?.[0];
134
139
  }
135
140
  };
136
141
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts","../../src/ModuleFactoryLocator.ts","../../src/standardCreatableFactories.ts"],"sourcesContent":["export * from './ModuleFactoryLocator.ts'\nexport * from './standardCreatableFactories.ts'\n","import { assertEx } from '@xylabs/assert'\nimport {\n CreatableModuleFactory,\n CreatableModuleRegistry,\n hasAllLabels,\n hasLabels,\n LabeledCreatableModuleFactory,\n Labels,\n registerCreatableModuleFactory,\n} from '@xyo-network/module-model'\nimport { Schema } from '@xyo-network/payload-model'\n\nimport { standardCreatableFactories } from './standardCreatableFactories.ts'\n\n/**\n * A class which encapsulates the Service Locator Pattern for Module Factories\n */\nexport class ModuleFactoryLocator {\n constructor(protected readonly _registry: CreatableModuleRegistry = standardCreatableFactories()) {}\n\n /**\n * The current registry for the module factory\n */\n get registry(): Readonly<CreatableModuleRegistry> {\n return this._registry\n }\n\n /**\n * Locates a module factory that matches the supplied schema and labels\n * @param schema The config schema for the module\n * @param labels The labels for the module factory\n * @returns A module factory that matches the supplied schema and labels or throws if one is not found\n */\n locate(schema: string, labels?: Labels): CreatableModuleFactory | LabeledCreatableModuleFactory {\n return assertEx(\n this.tryLocate(schema, labels),\n // eslint-disable-next-line sonarjs/no-nested-template-literals\n () => `No module factory for the supplied ${`config schema [${schema}]`}${labels ? ` & labels [${JSON.stringify(labels)}]` : ''} registered`,\n )\n }\n\n merge(locator: ModuleFactoryLocator): ModuleFactoryLocator {\n const registry = { ...this.registry }\n for (const schema in locator.registry) {\n if (registry[schema]) {\n registry[schema].push(...(locator.registry[schema] ?? []))\n } else {\n registry[schema] = locator.registry[schema]\n }\n }\n return new ModuleFactoryLocator(registry)\n }\n\n /**\n * Registers a single module factory (with optional tags) with the locator\n * @param factory The factory to register\n * @param labels The labels for the module factory\n */\n register(factory: CreatableModuleFactory, labels?: Labels, primary: boolean | Schema | Schema[] = false): this {\n registerCreatableModuleFactory(this._registry, factory, labels, primary)\n return this\n }\n\n /**\n * Registers multiple module factories with the locator\n * @param factories The factories to register\n */\n registerMany(factories: CreatableModuleFactory[]): this {\n for (const factory of factories) {\n this.register(factory)\n }\n return this\n }\n\n /**\n * Tries to locate a module factory that matches the supplied schema and labels\n * @param schema The config schema for the module\n * @param labels The labels for the module factory\n * @returns A module factory that matches the supplied schema and labels or undefined\n */\n tryLocate(schema: string, labels?: Labels): CreatableModuleFactory | LabeledCreatableModuleFactory | undefined {\n // If labels were provided\n return labels ?\n // Find the first factory that has labels and has all the labels provided\n this._registry[schema]?.filter(hasLabels).find((factory) => hasAllLabels(factory?.labels, labels))\n : // Otherwise, return the first factory\n this._registry[schema]?.[0]\n }\n}\n","import { MemoryArchivist } from '@xyo-network/archivist-memory'\nimport { ViewArchivist } from '@xyo-network/archivist-view'\nimport { HttpBridge } from '@xyo-network/bridge-http'\nimport { MemoryBoundWitnessDiviner } from '@xyo-network/diviner-boundwitness-memory'\nimport { IdentityDiviner } from '@xyo-network/diviner-identity'\nimport { MemoryPayloadDiviner } from '@xyo-network/diviner-payload-memory'\nimport { CreatableModuleFactory, LabeledCreatableModuleFactory, registerCreatableModuleFactories } from '@xyo-network/module-model'\nimport { MemoryNode } from '@xyo-network/node-memory'\nimport { ViewNode } from '@xyo-network/node-view'\nimport { MemorySentinel } from '@xyo-network/sentinel-memory'\nimport { AdhocWitness } from '@xyo-network/witness-adhoc'\n\n//order matters in this array. later items will register themselves as primary for schemas shared with earlier items\nexport const standardCreatableFactoriesList: (CreatableModuleFactory | LabeledCreatableModuleFactory)[] = [\n HttpBridge,\n ViewArchivist,\n ViewNode,\n AdhocWitness,\n MemoryPayloadDiviner,\n MemoryBoundWitnessDiviner,\n IdentityDiviner,\n MemoryArchivist,\n MemoryArchivist,\n MemoryNode,\n MemorySentinel,\n]\n\nexport const standardCreatableFactories = () => {\n return registerCreatableModuleFactories(standardCreatableFactoriesList, {}, true)\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;;ACAA,oBAAyB;AACzB,IAAAA,uBAQO;;;ACTP,8BAAgC;AAChC,4BAA8B;AAC9B,yBAA2B;AAC3B,yCAA0C;AAC1C,8BAAgC;AAChC,oCAAqC;AACrC,0BAAwG;AACxG,yBAA2B;AAC3B,uBAAyB;AACzB,6BAA+B;AAC/B,2BAA6B;AAGtB,IAAMC,iCAA6F;EACxGC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAA;EACAC;EACAC;;AAGK,IAAMC,6BAA6B,6BAAA;AACxC,aAAOC,sDAAiCZ,gCAAgC,CAAC,GAAG,IAAA;AAC9E,GAF0C;;;ADVnC,IAAMa,uBAAN,MAAMA,sBAAAA;EAjBb,OAiBaA;;;;EACXC,YAA+BC,YAAqCC,2BAAAA,GAA8B;SAAnED,YAAAA;EAAoE;;;;EAKnG,IAAIE,WAA8C;AAChD,WAAO,KAAKF;EACd;;;;;;;EAQAG,OAAOC,QAAgBC,QAAyE;AAC9F,eAAOC;MACL,KAAKC,UAAUH,QAAQC,MAAAA;;MAEvB,MAAM,sCAAsC,kBAAkBD,MAAAA,GAAS,GAAGC,SAAS,cAAcG,KAAKC,UAAUJ,MAAAA,CAAAA,MAAa,EAAA;IAAe;EAEhJ;EAEAK,MAAMC,SAAqD;AACzD,UAAMT,WAAW;MAAE,GAAG,KAAKA;IAAS;AACpC,eAAWE,UAAUO,QAAQT,UAAU;AACrC,UAAIA,SAASE,MAAAA,GAAS;AACpBF,iBAASE,MAAAA,EAAQQ,KAAI,GAAKD,QAAQT,SAASE,MAAAA,KAAW,CAAA,CAAE;MAC1D,OAAO;AACLF,iBAASE,MAAAA,IAAUO,QAAQT,SAASE,MAAAA;MACtC;IACF;AACA,WAAO,IAAIN,sBAAqBI,QAAAA;EAClC;;;;;;EAOAW,SAASC,SAAiCT,QAAiBU,UAAuC,OAAa;AAC7GC,6DAA+B,KAAKhB,WAAWc,SAAST,QAAQU,OAAAA;AAChE,WAAO;EACT;;;;;EAMAE,aAAaC,WAA2C;AACtD,eAAWJ,WAAWI,WAAW;AAC/B,WAAKL,SAASC,OAAAA;IAChB;AACA,WAAO;EACT;;;;;;;EAQAP,UAAUH,QAAgBC,QAAqF;AAE7G,WAAOA;;MAEH,KAAKL,UAAUI,MAAAA,GAASe,OAAOC,8BAAAA,EAAWC,KAAK,CAACP,gBAAYQ,mCAAaR,SAAST,QAAQA,MAAAA,CAAAA;QAE1F,KAAKL,UAAUI,MAAAA,IAAU,CAAA;EAC/B;AACF;","names":["import_module_model","standardCreatableFactoriesList","HttpBridge","ViewArchivist","ViewNode","AdhocWitness","MemoryPayloadDiviner","MemoryBoundWitnessDiviner","IdentityDiviner","MemoryArchivist","MemoryNode","MemorySentinel","standardCreatableFactories","registerCreatableModuleFactories","ModuleFactoryLocator","constructor","_registry","standardCreatableFactories","registry","locate","schema","labels","assertEx","tryLocate","JSON","stringify","merge","locator","push","register","factory","primary","registerCreatableModuleFactory","registerMany","factories","filter","hasLabels","find","hasAllLabels"]}
1
+ {"version":3,"sources":["../../src/index.ts","../../src/ModuleFactoryLocator.ts","../../src/standardCreatableFactories.ts"],"sourcesContent":["export * from './ModuleFactoryLocator.ts'\nexport * from './standardCreatableFactories.ts'\n","import { assertEx } from '@xylabs/assert'\nimport {\n CreatableModuleFactory,\n CreatableModuleRegistry,\n hasAllLabels,\n hasLabels,\n LabeledCreatableModuleFactory,\n Labels,\n registerCreatableModuleFactory,\n} from '@xyo-network/module-model'\nimport { Schema } from '@xyo-network/payload-model'\n\nimport { standardCreatableFactories } from './standardCreatableFactories.ts'\n\n/**\n * A class which encapsulates the Service Locator Pattern for Module Factories\n */\nexport class ModuleFactoryLocator {\n private _frozen = false\n\n constructor(protected readonly _registry: CreatableModuleRegistry = standardCreatableFactories()) {}\n\n /**\n * The current registry for the module factory\n */\n get registry(): Readonly<CreatableModuleRegistry> {\n return this._registry\n }\n\n static empty() {\n return new ModuleFactoryLocator({})\n }\n\n static standard() {\n return new ModuleFactoryLocator(standardCreatableFactories())\n }\n\n freeze() {\n this._frozen = true\n }\n\n /**\n * Locates a module factory that matches the supplied schema and labels\n * @param schema The config schema for the module\n * @param labels The labels for the module factory\n * @returns A module factory that matches the supplied schema and labels or throws if one is not found\n */\n locate(schema: string, labels?: Labels): CreatableModuleFactory | LabeledCreatableModuleFactory {\n return assertEx(\n this.tryLocate(schema, labels),\n () => `No module factory for the supplied ${`config schema [${schema}]`}${labels ? ` & labels [${JSON.stringify(labels)}]` : ''} registered`,\n )\n }\n\n merge(locator: ModuleFactoryLocator): ModuleFactoryLocator {\n const registry = { ...this.registry }\n for (const schema in locator.registry) {\n if (registry[schema]) {\n registry[schema].push(...(locator.registry[schema] ?? []))\n } else {\n registry[schema] = locator.registry[schema]\n }\n }\n return new ModuleFactoryLocator(registry)\n }\n\n /**\n * Registers a single module factory (with optional tags) with the locator\n * @param factory The factory to register\n * @param labels The labels for the module factory\n */\n register(factory: CreatableModuleFactory, labels?: Labels, primary: boolean | Schema | Schema[] = false): this {\n assertEx(!this._frozen, () => 'Cannot register a module factory after the locator has been frozen')\n registerCreatableModuleFactory(this._registry, factory, labels, primary)\n return this\n }\n\n /**\n * Registers multiple module factories with the locator\n * @param factories The factories to register\n */\n registerMany(factories: CreatableModuleFactory[]): this {\n for (const factory of factories) {\n this.register(factory)\n }\n return this\n }\n\n /**\n * Tries to locate a module factory that matches the supplied schema and labels\n * @param schema The config schema for the module\n * @param labels The labels for the module factory\n * @returns A module factory that matches the supplied schema and labels or undefined\n */\n tryLocate(schema: string, labels?: Labels): CreatableModuleFactory | LabeledCreatableModuleFactory | undefined {\n // If labels were provided\n return labels\n // Find the first factory that has labels and has all the labels provided\n ? this._registry[schema]?.filter(hasLabels).find(factory => hasAllLabels(factory?.labels, labels))\n : this._registry[schema]?.[0] // Otherwise, return the first factory\n }\n}\n","import { MemoryArchivist } from '@xyo-network/archivist-memory'\nimport { ViewArchivist } from '@xyo-network/archivist-view'\nimport { HttpBridge } from '@xyo-network/bridge-http'\nimport { MemoryBoundWitnessDiviner } from '@xyo-network/diviner-boundwitness-memory'\nimport { IdentityDiviner } from '@xyo-network/diviner-identity'\nimport { MemoryPayloadDiviner } from '@xyo-network/diviner-payload-memory'\nimport { CreatableModuleFactory, LabeledCreatableModuleFactory, registerCreatableModuleFactories } from '@xyo-network/module-model'\nimport { MemoryNode } from '@xyo-network/node-memory'\nimport { ViewNode } from '@xyo-network/node-view'\nimport { MemorySentinel } from '@xyo-network/sentinel-memory'\nimport { AdhocWitness } from '@xyo-network/witness-adhoc'\n\n// order matters in this array. later items will register themselves as primary for schemas shared with earlier items\nexport const standardCreatableFactoriesList: (CreatableModuleFactory | LabeledCreatableModuleFactory)[] = [\n HttpBridge,\n ViewArchivist,\n ViewNode,\n AdhocWitness,\n MemoryPayloadDiviner,\n MemoryBoundWitnessDiviner,\n IdentityDiviner,\n MemoryArchivist,\n MemoryArchivist,\n MemoryNode,\n MemorySentinel,\n]\n\nexport const standardCreatableFactories = () => {\n return registerCreatableModuleFactories(standardCreatableFactoriesList, {}, true)\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;;ACAA,oBAAyB;AACzB,IAAAA,uBAQO;;;ACTP,8BAAgC;AAChC,4BAA8B;AAC9B,yBAA2B;AAC3B,yCAA0C;AAC1C,8BAAgC;AAChC,oCAAqC;AACrC,0BAAwG;AACxG,yBAA2B;AAC3B,uBAAyB;AACzB,6BAA+B;AAC/B,2BAA6B;AAGtB,IAAMC,iCAA6F;EACxGC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAA;EACAC;EACAC;;AAGK,IAAMC,6BAA6B,6BAAA;AACxC,aAAOC,sDAAiCZ,gCAAgC,CAAC,GAAG,IAAA;AAC9E,GAF0C;;;ADVnC,IAAMa,uBAAN,MAAMA,sBAAAA;EAjBb,OAiBaA;;;;EACHC;EAERC,YAA+BC,YAAqCC,2BAAAA,GAA8B;SAAnED,YAAAA;SAFvBF,UAAU;EAEiF;;;;EAKnG,IAAII,WAA8C;AAChD,WAAO,KAAKF;EACd;EAEA,OAAOG,QAAQ;AACb,WAAO,IAAIN,sBAAqB,CAAC,CAAA;EACnC;EAEA,OAAOO,WAAW;AAChB,WAAO,IAAIP,sBAAqBI,2BAAAA,CAAAA;EAClC;EAEAI,SAAS;AACP,SAAKP,UAAU;EACjB;;;;;;;EAQAQ,OAAOC,QAAgBC,QAAyE;AAC9F,eAAOC,wBACL,KAAKC,UAAUH,QAAQC,MAAAA,GACvB,MAAM,sCAAsC,kBAAkBD,MAAAA,GAAS,GAAGC,SAAS,cAAcG,KAAKC,UAAUJ,MAAAA,CAAAA,MAAa,EAAA,aAAe;EAEhJ;EAEAK,MAAMC,SAAqD;AACzD,UAAMZ,WAAW;MAAE,GAAG,KAAKA;IAAS;AACpC,eAAWK,UAAUO,QAAQZ,UAAU;AACrC,UAAIA,SAASK,MAAAA,GAAS;AACpBL,iBAASK,MAAAA,EAAQQ,KAAI,GAAKD,QAAQZ,SAASK,MAAAA,KAAW,CAAA,CAAE;MAC1D,OAAO;AACLL,iBAASK,MAAAA,IAAUO,QAAQZ,SAASK,MAAAA;MACtC;IACF;AACA,WAAO,IAAIV,sBAAqBK,QAAAA;EAClC;;;;;;EAOAc,SAASC,SAAiCT,QAAiBU,UAAuC,OAAa;AAC7GT,gCAAS,CAAC,KAAKX,SAAS,MAAM,oEAAA;AAC9BqB,6DAA+B,KAAKnB,WAAWiB,SAAST,QAAQU,OAAAA;AAChE,WAAO;EACT;;;;;EAMAE,aAAaC,WAA2C;AACtD,eAAWJ,WAAWI,WAAW;AAC/B,WAAKL,SAASC,OAAAA;IAChB;AACA,WAAO;EACT;;;;;;;EAQAP,UAAUH,QAAgBC,QAAqF;AAE7G,WAAOA,SAEH,KAAKR,UAAUO,MAAAA,GAASe,OAAOC,8BAAAA,EAAWC,KAAKP,CAAAA,gBAAWQ,mCAAaR,SAAST,QAAQA,MAAAA,CAAAA,IACxF,KAAKR,UAAUO,MAAAA,IAAU,CAAA;EAC/B;AACF;","names":["import_module_model","standardCreatableFactoriesList","HttpBridge","ViewArchivist","ViewNode","AdhocWitness","MemoryPayloadDiviner","MemoryBoundWitnessDiviner","IdentityDiviner","MemoryArchivist","MemoryNode","MemorySentinel","standardCreatableFactories","registerCreatableModuleFactories","ModuleFactoryLocator","_frozen","constructor","_registry","standardCreatableFactories","registry","empty","standard","freeze","locate","schema","labels","assertEx","tryLocate","JSON","stringify","merge","locator","push","register","factory","primary","registerCreatableModuleFactory","registerMany","factories","filter","hasLabels","find","hasAllLabels"]}
@@ -40,8 +40,10 @@ var ModuleFactoryLocator = class _ModuleFactoryLocator {
40
40
  __name(this, "ModuleFactoryLocator");
41
41
  }
42
42
  _registry;
43
+ _frozen;
43
44
  constructor(_registry = standardCreatableFactories()) {
44
45
  this._registry = _registry;
46
+ this._frozen = false;
45
47
  }
46
48
  /**
47
49
  * The current registry for the module factory
@@ -49,6 +51,15 @@ var ModuleFactoryLocator = class _ModuleFactoryLocator {
49
51
  get registry() {
50
52
  return this._registry;
51
53
  }
54
+ static empty() {
55
+ return new _ModuleFactoryLocator({});
56
+ }
57
+ static standard() {
58
+ return new _ModuleFactoryLocator(standardCreatableFactories());
59
+ }
60
+ freeze() {
61
+ this._frozen = true;
62
+ }
52
63
  /**
53
64
  * Locates a module factory that matches the supplied schema and labels
54
65
  * @param schema The config schema for the module
@@ -56,11 +67,7 @@ var ModuleFactoryLocator = class _ModuleFactoryLocator {
56
67
  * @returns A module factory that matches the supplied schema and labels or throws if one is not found
57
68
  */
58
69
  locate(schema, labels) {
59
- return assertEx(
60
- this.tryLocate(schema, labels),
61
- // eslint-disable-next-line sonarjs/no-nested-template-literals
62
- () => `No module factory for the supplied ${`config schema [${schema}]`}${labels ? ` & labels [${JSON.stringify(labels)}]` : ""} registered`
63
- );
70
+ return assertEx(this.tryLocate(schema, labels), () => `No module factory for the supplied ${`config schema [${schema}]`}${labels ? ` & labels [${JSON.stringify(labels)}]` : ""} registered`);
64
71
  }
65
72
  merge(locator) {
66
73
  const registry = {
@@ -81,6 +88,7 @@ var ModuleFactoryLocator = class _ModuleFactoryLocator {
81
88
  * @param labels The labels for the module factory
82
89
  */
83
90
  register(factory, labels, primary = false) {
91
+ assertEx(!this._frozen, () => "Cannot register a module factory after the locator has been frozen");
84
92
  registerCreatableModuleFactory(this._registry, factory, labels, primary);
85
93
  return this;
86
94
  }
@@ -101,10 +109,7 @@ var ModuleFactoryLocator = class _ModuleFactoryLocator {
101
109
  * @returns A module factory that matches the supplied schema and labels or undefined
102
110
  */
103
111
  tryLocate(schema, labels) {
104
- return labels ? (
105
- // Find the first factory that has labels and has all the labels provided
106
- this._registry[schema]?.filter(hasLabels).find((factory) => hasAllLabels(factory?.labels, labels))
107
- ) : this._registry[schema]?.[0];
112
+ return labels ? this._registry[schema]?.filter(hasLabels).find((factory) => hasAllLabels(factory?.labels, labels)) : this._registry[schema]?.[0];
108
113
  }
109
114
  };
110
115
  export {
@@ -112,4 +117,4 @@ export {
112
117
  standardCreatableFactories,
113
118
  standardCreatableFactoriesList
114
119
  };
115
- //# sourceMappingURL=index.js.map
120
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/ModuleFactoryLocator.ts","../../src/standardCreatableFactories.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport {\n CreatableModuleFactory,\n CreatableModuleRegistry,\n hasAllLabels,\n hasLabels,\n LabeledCreatableModuleFactory,\n Labels,\n registerCreatableModuleFactory,\n} from '@xyo-network/module-model'\nimport { Schema } from '@xyo-network/payload-model'\n\nimport { standardCreatableFactories } from './standardCreatableFactories.ts'\n\n/**\n * A class which encapsulates the Service Locator Pattern for Module Factories\n */\nexport class ModuleFactoryLocator {\n private _frozen = false\n\n constructor(protected readonly _registry: CreatableModuleRegistry = standardCreatableFactories()) {}\n\n /**\n * The current registry for the module factory\n */\n get registry(): Readonly<CreatableModuleRegistry> {\n return this._registry\n }\n\n static empty() {\n return new ModuleFactoryLocator({})\n }\n\n static standard() {\n return new ModuleFactoryLocator(standardCreatableFactories())\n }\n\n freeze() {\n this._frozen = true\n }\n\n /**\n * Locates a module factory that matches the supplied schema and labels\n * @param schema The config schema for the module\n * @param labels The labels for the module factory\n * @returns A module factory that matches the supplied schema and labels or throws if one is not found\n */\n locate(schema: string, labels?: Labels): CreatableModuleFactory | LabeledCreatableModuleFactory {\n return assertEx(\n this.tryLocate(schema, labels),\n () => `No module factory for the supplied ${`config schema [${schema}]`}${labels ? ` & labels [${JSON.stringify(labels)}]` : ''} registered`,\n )\n }\n\n merge(locator: ModuleFactoryLocator): ModuleFactoryLocator {\n const registry = { ...this.registry }\n for (const schema in locator.registry) {\n if (registry[schema]) {\n registry[schema].push(...(locator.registry[schema] ?? []))\n } else {\n registry[schema] = locator.registry[schema]\n }\n }\n return new ModuleFactoryLocator(registry)\n }\n\n /**\n * Registers a single module factory (with optional tags) with the locator\n * @param factory The factory to register\n * @param labels The labels for the module factory\n */\n register(factory: CreatableModuleFactory, labels?: Labels, primary: boolean | Schema | Schema[] = false): this {\n assertEx(!this._frozen, () => 'Cannot register a module factory after the locator has been frozen')\n registerCreatableModuleFactory(this._registry, factory, labels, primary)\n return this\n }\n\n /**\n * Registers multiple module factories with the locator\n * @param factories The factories to register\n */\n registerMany(factories: CreatableModuleFactory[]): this {\n for (const factory of factories) {\n this.register(factory)\n }\n return this\n }\n\n /**\n * Tries to locate a module factory that matches the supplied schema and labels\n * @param schema The config schema for the module\n * @param labels The labels for the module factory\n * @returns A module factory that matches the supplied schema and labels or undefined\n */\n tryLocate(schema: string, labels?: Labels): CreatableModuleFactory | LabeledCreatableModuleFactory | undefined {\n // If labels were provided\n return labels\n // Find the first factory that has labels and has all the labels provided\n ? this._registry[schema]?.filter(hasLabels).find(factory => hasAllLabels(factory?.labels, labels))\n : this._registry[schema]?.[0] // Otherwise, return the first factory\n }\n}\n","import { MemoryArchivist } from '@xyo-network/archivist-memory'\nimport { ViewArchivist } from '@xyo-network/archivist-view'\nimport { HttpBridge } from '@xyo-network/bridge-http'\nimport { MemoryBoundWitnessDiviner } from '@xyo-network/diviner-boundwitness-memory'\nimport { IdentityDiviner } from '@xyo-network/diviner-identity'\nimport { MemoryPayloadDiviner } from '@xyo-network/diviner-payload-memory'\nimport { CreatableModuleFactory, LabeledCreatableModuleFactory, registerCreatableModuleFactories } from '@xyo-network/module-model'\nimport { MemoryNode } from '@xyo-network/node-memory'\nimport { ViewNode } from '@xyo-network/node-view'\nimport { MemorySentinel } from '@xyo-network/sentinel-memory'\nimport { AdhocWitness } from '@xyo-network/witness-adhoc'\n\n// order matters in this array. later items will register themselves as primary for schemas shared with earlier items\nexport const standardCreatableFactoriesList: (CreatableModuleFactory | LabeledCreatableModuleFactory)[] = [\n HttpBridge,\n ViewArchivist,\n ViewNode,\n AdhocWitness,\n MemoryPayloadDiviner,\n MemoryBoundWitnessDiviner,\n IdentityDiviner,\n MemoryArchivist,\n MemoryArchivist,\n MemoryNode,\n MemorySentinel,\n]\n\nexport const standardCreatableFactories = () => {\n return registerCreatableModuleFactories(standardCreatableFactoriesList, {}, true)\n}\n"],"mappings":";;;;AAAA,SAASA,gBAAgB;AACzB,SAGEC,cACAC,WAGAC,sCACK;;;ACTP,SAASC,uBAAuB;AAChC,SAASC,qBAAqB;AAC9B,SAASC,kBAAkB;AAC3B,SAASC,iCAAiC;AAC1C,SAASC,uBAAuB;AAChC,SAASC,4BAA4B;AACrC,SAAgEC,wCAAwC;AACxG,SAASC,kBAAkB;AAC3B,SAASC,gBAAgB;AACzB,SAASC,sBAAsB;AAC/B,SAASC,oBAAoB;AAGtB,IAAMC,iCAA6F;EACxGC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAA;EACAC;EACAC;;AAGK,IAAMC,6BAA6B,6BAAA;AACxC,SAAOC,iCAAiCZ,gCAAgC,CAAC,GAAG,IAAA;AAC9E,GAF0C;;;ADVnC,IAAMa,uBAAN,MAAMA,sBAAAA;EAjBb,OAiBaA;;;;EACHC;EAERC,YAA+BC,YAAqCC,2BAAAA,GAA8B;SAAnED,YAAAA;SAFvBF,UAAU;EAEiF;;;;EAKnG,IAAII,WAA8C;AAChD,WAAO,KAAKF;EACd;EAEA,OAAOG,QAAQ;AACb,WAAO,IAAIN,sBAAqB,CAAC,CAAA;EACnC;EAEA,OAAOO,WAAW;AAChB,WAAO,IAAIP,sBAAqBI,2BAAAA,CAAAA;EAClC;EAEAI,SAAS;AACP,SAAKP,UAAU;EACjB;;;;;;;EAQAQ,OAAOC,QAAgBC,QAAyE;AAC9F,WAAOC,SACL,KAAKC,UAAUH,QAAQC,MAAAA,GACvB,MAAM,sCAAsC,kBAAkBD,MAAAA,GAAS,GAAGC,SAAS,cAAcG,KAAKC,UAAUJ,MAAAA,CAAAA,MAAa,EAAA,aAAe;EAEhJ;EAEAK,MAAMC,SAAqD;AACzD,UAAMZ,WAAW;MAAE,GAAG,KAAKA;IAAS;AACpC,eAAWK,UAAUO,QAAQZ,UAAU;AACrC,UAAIA,SAASK,MAAAA,GAAS;AACpBL,iBAASK,MAAAA,EAAQQ,KAAI,GAAKD,QAAQZ,SAASK,MAAAA,KAAW,CAAA,CAAE;MAC1D,OAAO;AACLL,iBAASK,MAAAA,IAAUO,QAAQZ,SAASK,MAAAA;MACtC;IACF;AACA,WAAO,IAAIV,sBAAqBK,QAAAA;EAClC;;;;;;EAOAc,SAASC,SAAiCT,QAAiBU,UAAuC,OAAa;AAC7GT,aAAS,CAAC,KAAKX,SAAS,MAAM,oEAAA;AAC9BqB,mCAA+B,KAAKnB,WAAWiB,SAAST,QAAQU,OAAAA;AAChE,WAAO;EACT;;;;;EAMAE,aAAaC,WAA2C;AACtD,eAAWJ,WAAWI,WAAW;AAC/B,WAAKL,SAASC,OAAAA;IAChB;AACA,WAAO;EACT;;;;;;;EAQAP,UAAUH,QAAgBC,QAAqF;AAE7G,WAAOA,SAEH,KAAKR,UAAUO,MAAAA,GAASe,OAAOC,SAAAA,EAAWC,KAAKP,CAAAA,YAAWQ,aAAaR,SAAST,QAAQA,MAAAA,CAAAA,IACxF,KAAKR,UAAUO,MAAAA,IAAU,CAAA;EAC/B;AACF;","names":["assertEx","hasAllLabels","hasLabels","registerCreatableModuleFactory","MemoryArchivist","ViewArchivist","HttpBridge","MemoryBoundWitnessDiviner","IdentityDiviner","MemoryPayloadDiviner","registerCreatableModuleFactories","MemoryNode","ViewNode","MemorySentinel","AdhocWitness","standardCreatableFactoriesList","HttpBridge","ViewArchivist","ViewNode","AdhocWitness","MemoryPayloadDiviner","MemoryBoundWitnessDiviner","IdentityDiviner","MemoryArchivist","MemoryNode","MemorySentinel","standardCreatableFactories","registerCreatableModuleFactories","ModuleFactoryLocator","_frozen","constructor","_registry","standardCreatableFactories","registry","empty","standard","freeze","locate","schema","labels","assertEx","tryLocate","JSON","stringify","merge","locator","push","register","factory","primary","registerCreatableModuleFactory","registerMany","factories","filter","hasLabels","find","hasAllLabels"]}
@@ -2,8 +2,12 @@ import { CreatableModuleFactory, CreatableModuleRegistry, LabeledCreatableModule
2
2
  import { Schema } from '@xyo-network/payload-model';
3
3
  export declare class ModuleFactoryLocator {
4
4
  protected readonly _registry: CreatableModuleRegistry;
5
+ private _frozen;
5
6
  constructor(_registry?: CreatableModuleRegistry);
6
7
  get registry(): Readonly<CreatableModuleRegistry>;
8
+ static empty(): ModuleFactoryLocator;
9
+ static standard(): ModuleFactoryLocator;
10
+ freeze(): void;
7
11
  locate(schema: string, labels?: Labels): CreatableModuleFactory | LabeledCreatableModuleFactory;
8
12
  merge(locator: ModuleFactoryLocator): ModuleFactoryLocator;
9
13
  register(factory: CreatableModuleFactory, labels?: Labels, primary?: boolean | Schema | Schema[]): this;
@@ -1 +1 @@
1
- {"version":3,"file":"ModuleFactoryLocator.d.ts","sourceRoot":"","sources":["../../src/ModuleFactoryLocator.ts"],"names":[],"mappings":"AACA,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EAGvB,6BAA6B,EAC7B,MAAM,EAEP,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAOnD,qBAAa,oBAAoB;IACnB,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,uBAAuB;gBAAlC,SAAS,GAAE,uBAAsD;IAKhG,IAAI,QAAQ,IAAI,QAAQ,CAAC,uBAAuB,CAAC,CAEhD;IAQD,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,sBAAsB,GAAG,6BAA6B;IAQ/F,KAAK,CAAC,OAAO,EAAE,oBAAoB,GAAG,oBAAoB;IAiB1D,QAAQ,CAAC,OAAO,EAAE,sBAAsB,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE,OAAO,GAAG,MAAM,GAAG,MAAM,EAAU,GAAG,IAAI;IAS9G,YAAY,CAAC,SAAS,EAAE,sBAAsB,EAAE,GAAG,IAAI;IAavD,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,sBAAsB,GAAG,6BAA6B,GAAG,SAAS;CAQ/G"}
1
+ {"version":3,"file":"ModuleFactoryLocator.d.ts","sourceRoot":"","sources":["../../src/ModuleFactoryLocator.ts"],"names":[],"mappings":"AACA,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EAGvB,6BAA6B,EAC7B,MAAM,EAEP,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAOnD,qBAAa,oBAAoB;IAGnB,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,uBAAuB;IAFjE,OAAO,CAAC,OAAO,CAAQ;gBAEQ,SAAS,GAAE,uBAAsD;IAKhG,IAAI,QAAQ,IAAI,QAAQ,CAAC,uBAAuB,CAAC,CAEhD;IAED,MAAM,CAAC,KAAK;IAIZ,MAAM,CAAC,QAAQ;IAIf,MAAM;IAUN,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,sBAAsB,GAAG,6BAA6B;IAO/F,KAAK,CAAC,OAAO,EAAE,oBAAoB,GAAG,oBAAoB;IAiB1D,QAAQ,CAAC,OAAO,EAAE,sBAAsB,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE,OAAO,GAAG,MAAM,GAAG,MAAM,EAAU,GAAG,IAAI;IAU9G,YAAY,CAAC,SAAS,EAAE,sBAAsB,EAAE,GAAG,IAAI;IAavD,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,sBAAsB,GAAG,6BAA6B,GAAG,SAAS;CAO/G"}
@@ -2,8 +2,12 @@ import { CreatableModuleFactory, CreatableModuleRegistry, LabeledCreatableModule
2
2
  import { Schema } from '@xyo-network/payload-model';
3
3
  export declare class ModuleFactoryLocator {
4
4
  protected readonly _registry: CreatableModuleRegistry;
5
+ private _frozen;
5
6
  constructor(_registry?: CreatableModuleRegistry);
6
7
  get registry(): Readonly<CreatableModuleRegistry>;
8
+ static empty(): ModuleFactoryLocator;
9
+ static standard(): ModuleFactoryLocator;
10
+ freeze(): void;
7
11
  locate(schema: string, labels?: Labels): CreatableModuleFactory | LabeledCreatableModuleFactory;
8
12
  merge(locator: ModuleFactoryLocator): ModuleFactoryLocator;
9
13
  register(factory: CreatableModuleFactory, labels?: Labels, primary?: boolean | Schema | Schema[]): this;
@@ -1 +1 @@
1
- {"version":3,"file":"ModuleFactoryLocator.d.ts","sourceRoot":"","sources":["../../src/ModuleFactoryLocator.ts"],"names":[],"mappings":"AACA,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EAGvB,6BAA6B,EAC7B,MAAM,EAEP,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAOnD,qBAAa,oBAAoB;IACnB,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,uBAAuB;gBAAlC,SAAS,GAAE,uBAAsD;IAKhG,IAAI,QAAQ,IAAI,QAAQ,CAAC,uBAAuB,CAAC,CAEhD;IAQD,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,sBAAsB,GAAG,6BAA6B;IAQ/F,KAAK,CAAC,OAAO,EAAE,oBAAoB,GAAG,oBAAoB;IAiB1D,QAAQ,CAAC,OAAO,EAAE,sBAAsB,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE,OAAO,GAAG,MAAM,GAAG,MAAM,EAAU,GAAG,IAAI;IAS9G,YAAY,CAAC,SAAS,EAAE,sBAAsB,EAAE,GAAG,IAAI;IAavD,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,sBAAsB,GAAG,6BAA6B,GAAG,SAAS;CAQ/G"}
1
+ {"version":3,"file":"ModuleFactoryLocator.d.ts","sourceRoot":"","sources":["../../src/ModuleFactoryLocator.ts"],"names":[],"mappings":"AACA,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EAGvB,6BAA6B,EAC7B,MAAM,EAEP,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAOnD,qBAAa,oBAAoB;IAGnB,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,uBAAuB;IAFjE,OAAO,CAAC,OAAO,CAAQ;gBAEQ,SAAS,GAAE,uBAAsD;IAKhG,IAAI,QAAQ,IAAI,QAAQ,CAAC,uBAAuB,CAAC,CAEhD;IAED,MAAM,CAAC,KAAK;IAIZ,MAAM,CAAC,QAAQ;IAIf,MAAM;IAUN,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,sBAAsB,GAAG,6BAA6B;IAO/F,KAAK,CAAC,OAAO,EAAE,oBAAoB,GAAG,oBAAoB;IAiB1D,QAAQ,CAAC,OAAO,EAAE,sBAAsB,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE,OAAO,GAAG,MAAM,GAAG,MAAM,EAAU,GAAG,IAAI;IAU9G,YAAY,CAAC,SAAS,EAAE,sBAAsB,EAAE,GAAG,IAAI;IAavD,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,sBAAsB,GAAG,6BAA6B,GAAG,SAAS;CAO/G"}
@@ -2,8 +2,12 @@ import { CreatableModuleFactory, CreatableModuleRegistry, LabeledCreatableModule
2
2
  import { Schema } from '@xyo-network/payload-model';
3
3
  export declare class ModuleFactoryLocator {
4
4
  protected readonly _registry: CreatableModuleRegistry;
5
+ private _frozen;
5
6
  constructor(_registry?: CreatableModuleRegistry);
6
7
  get registry(): Readonly<CreatableModuleRegistry>;
8
+ static empty(): ModuleFactoryLocator;
9
+ static standard(): ModuleFactoryLocator;
10
+ freeze(): void;
7
11
  locate(schema: string, labels?: Labels): CreatableModuleFactory | LabeledCreatableModuleFactory;
8
12
  merge(locator: ModuleFactoryLocator): ModuleFactoryLocator;
9
13
  register(factory: CreatableModuleFactory, labels?: Labels, primary?: boolean | Schema | Schema[]): this;
@@ -1 +1 @@
1
- {"version":3,"file":"ModuleFactoryLocator.d.ts","sourceRoot":"","sources":["../../src/ModuleFactoryLocator.ts"],"names":[],"mappings":"AACA,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EAGvB,6BAA6B,EAC7B,MAAM,EAEP,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAOnD,qBAAa,oBAAoB;IACnB,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,uBAAuB;gBAAlC,SAAS,GAAE,uBAAsD;IAKhG,IAAI,QAAQ,IAAI,QAAQ,CAAC,uBAAuB,CAAC,CAEhD;IAQD,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,sBAAsB,GAAG,6BAA6B;IAQ/F,KAAK,CAAC,OAAO,EAAE,oBAAoB,GAAG,oBAAoB;IAiB1D,QAAQ,CAAC,OAAO,EAAE,sBAAsB,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE,OAAO,GAAG,MAAM,GAAG,MAAM,EAAU,GAAG,IAAI;IAS9G,YAAY,CAAC,SAAS,EAAE,sBAAsB,EAAE,GAAG,IAAI;IAavD,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,sBAAsB,GAAG,6BAA6B,GAAG,SAAS;CAQ/G"}
1
+ {"version":3,"file":"ModuleFactoryLocator.d.ts","sourceRoot":"","sources":["../../src/ModuleFactoryLocator.ts"],"names":[],"mappings":"AACA,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EAGvB,6BAA6B,EAC7B,MAAM,EAEP,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAOnD,qBAAa,oBAAoB;IAGnB,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,uBAAuB;IAFjE,OAAO,CAAC,OAAO,CAAQ;gBAEQ,SAAS,GAAE,uBAAsD;IAKhG,IAAI,QAAQ,IAAI,QAAQ,CAAC,uBAAuB,CAAC,CAEhD;IAED,MAAM,CAAC,KAAK;IAIZ,MAAM,CAAC,QAAQ;IAIf,MAAM;IAUN,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,sBAAsB,GAAG,6BAA6B;IAO/F,KAAK,CAAC,OAAO,EAAE,oBAAoB,GAAG,oBAAoB;IAiB1D,QAAQ,CAAC,OAAO,EAAE,sBAAsB,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE,OAAO,GAAG,MAAM,GAAG,MAAM,EAAU,GAAG,IAAI;IAU9G,YAAY,CAAC,SAAS,EAAE,sBAAsB,EAAE,GAAG,IAAI;IAavD,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,sBAAsB,GAAG,6BAA6B,GAAG,SAAS;CAO/G"}
@@ -63,8 +63,10 @@ var standardCreatableFactories = /* @__PURE__ */ __name(() => {
63
63
  // src/ModuleFactoryLocator.ts
64
64
  var _ModuleFactoryLocator = class _ModuleFactoryLocator {
65
65
  _registry;
66
+ _frozen;
66
67
  constructor(_registry = standardCreatableFactories()) {
67
68
  this._registry = _registry;
69
+ this._frozen = false;
68
70
  }
69
71
  /**
70
72
  * The current registry for the module factory
@@ -72,6 +74,15 @@ var _ModuleFactoryLocator = class _ModuleFactoryLocator {
72
74
  get registry() {
73
75
  return this._registry;
74
76
  }
77
+ static empty() {
78
+ return new _ModuleFactoryLocator({});
79
+ }
80
+ static standard() {
81
+ return new _ModuleFactoryLocator(standardCreatableFactories());
82
+ }
83
+ freeze() {
84
+ this._frozen = true;
85
+ }
75
86
  /**
76
87
  * Locates a module factory that matches the supplied schema and labels
77
88
  * @param schema The config schema for the module
@@ -79,11 +90,7 @@ var _ModuleFactoryLocator = class _ModuleFactoryLocator {
79
90
  * @returns A module factory that matches the supplied schema and labels or throws if one is not found
80
91
  */
81
92
  locate(schema, labels) {
82
- return (0, import_assert.assertEx)(
83
- this.tryLocate(schema, labels),
84
- // eslint-disable-next-line sonarjs/no-nested-template-literals
85
- () => `No module factory for the supplied ${`config schema [${schema}]`}${labels ? ` & labels [${JSON.stringify(labels)}]` : ""} registered`
86
- );
93
+ return (0, import_assert.assertEx)(this.tryLocate(schema, labels), () => `No module factory for the supplied ${`config schema [${schema}]`}${labels ? ` & labels [${JSON.stringify(labels)}]` : ""} registered`);
87
94
  }
88
95
  merge(locator) {
89
96
  const registry = {
@@ -104,6 +111,7 @@ var _ModuleFactoryLocator = class _ModuleFactoryLocator {
104
111
  * @param labels The labels for the module factory
105
112
  */
106
113
  register(factory, labels, primary = false) {
114
+ (0, import_assert.assertEx)(!this._frozen, () => "Cannot register a module factory after the locator has been frozen");
107
115
  (0, import_module_model2.registerCreatableModuleFactory)(this._registry, factory, labels, primary);
108
116
  return this;
109
117
  }
@@ -125,10 +133,7 @@ var _ModuleFactoryLocator = class _ModuleFactoryLocator {
125
133
  */
126
134
  tryLocate(schema, labels) {
127
135
  var _a, _b;
128
- return labels ? (
129
- // Find the first factory that has labels and has all the labels provided
130
- (_a = this._registry[schema]) == null ? void 0 : _a.filter(import_module_model2.hasLabels).find((factory) => (0, import_module_model2.hasAllLabels)(factory == null ? void 0 : factory.labels, labels))
131
- ) : (_b = this._registry[schema]) == null ? void 0 : _b[0];
136
+ return labels ? (_a = this._registry[schema]) == null ? void 0 : _a.filter(import_module_model2.hasLabels).find((factory) => (0, import_module_model2.hasAllLabels)(factory == null ? void 0 : factory.labels, labels)) : (_b = this._registry[schema]) == null ? void 0 : _b[0];
132
137
  }
133
138
  };
134
139
  __name(_ModuleFactoryLocator, "ModuleFactoryLocator");
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts","../../src/ModuleFactoryLocator.ts","../../src/standardCreatableFactories.ts"],"sourcesContent":["export * from './ModuleFactoryLocator.ts'\nexport * from './standardCreatableFactories.ts'\n","import { assertEx } from '@xylabs/assert'\nimport {\n CreatableModuleFactory,\n CreatableModuleRegistry,\n hasAllLabels,\n hasLabels,\n LabeledCreatableModuleFactory,\n Labels,\n registerCreatableModuleFactory,\n} from '@xyo-network/module-model'\nimport { Schema } from '@xyo-network/payload-model'\n\nimport { standardCreatableFactories } from './standardCreatableFactories.ts'\n\n/**\n * A class which encapsulates the Service Locator Pattern for Module Factories\n */\nexport class ModuleFactoryLocator {\n constructor(protected readonly _registry: CreatableModuleRegistry = standardCreatableFactories()) {}\n\n /**\n * The current registry for the module factory\n */\n get registry(): Readonly<CreatableModuleRegistry> {\n return this._registry\n }\n\n /**\n * Locates a module factory that matches the supplied schema and labels\n * @param schema The config schema for the module\n * @param labels The labels for the module factory\n * @returns A module factory that matches the supplied schema and labels or throws if one is not found\n */\n locate(schema: string, labels?: Labels): CreatableModuleFactory | LabeledCreatableModuleFactory {\n return assertEx(\n this.tryLocate(schema, labels),\n // eslint-disable-next-line sonarjs/no-nested-template-literals\n () => `No module factory for the supplied ${`config schema [${schema}]`}${labels ? ` & labels [${JSON.stringify(labels)}]` : ''} registered`,\n )\n }\n\n merge(locator: ModuleFactoryLocator): ModuleFactoryLocator {\n const registry = { ...this.registry }\n for (const schema in locator.registry) {\n if (registry[schema]) {\n registry[schema].push(...(locator.registry[schema] ?? []))\n } else {\n registry[schema] = locator.registry[schema]\n }\n }\n return new ModuleFactoryLocator(registry)\n }\n\n /**\n * Registers a single module factory (with optional tags) with the locator\n * @param factory The factory to register\n * @param labels The labels for the module factory\n */\n register(factory: CreatableModuleFactory, labels?: Labels, primary: boolean | Schema | Schema[] = false): this {\n registerCreatableModuleFactory(this._registry, factory, labels, primary)\n return this\n }\n\n /**\n * Registers multiple module factories with the locator\n * @param factories The factories to register\n */\n registerMany(factories: CreatableModuleFactory[]): this {\n for (const factory of factories) {\n this.register(factory)\n }\n return this\n }\n\n /**\n * Tries to locate a module factory that matches the supplied schema and labels\n * @param schema The config schema for the module\n * @param labels The labels for the module factory\n * @returns A module factory that matches the supplied schema and labels or undefined\n */\n tryLocate(schema: string, labels?: Labels): CreatableModuleFactory | LabeledCreatableModuleFactory | undefined {\n // If labels were provided\n return labels ?\n // Find the first factory that has labels and has all the labels provided\n this._registry[schema]?.filter(hasLabels).find((factory) => hasAllLabels(factory?.labels, labels))\n : // Otherwise, return the first factory\n this._registry[schema]?.[0]\n }\n}\n","import { MemoryArchivist } from '@xyo-network/archivist-memory'\nimport { ViewArchivist } from '@xyo-network/archivist-view'\nimport { HttpBridge } from '@xyo-network/bridge-http'\nimport { MemoryBoundWitnessDiviner } from '@xyo-network/diviner-boundwitness-memory'\nimport { IdentityDiviner } from '@xyo-network/diviner-identity'\nimport { MemoryPayloadDiviner } from '@xyo-network/diviner-payload-memory'\nimport { CreatableModuleFactory, LabeledCreatableModuleFactory, registerCreatableModuleFactories } from '@xyo-network/module-model'\nimport { MemoryNode } from '@xyo-network/node-memory'\nimport { ViewNode } from '@xyo-network/node-view'\nimport { MemorySentinel } from '@xyo-network/sentinel-memory'\nimport { AdhocWitness } from '@xyo-network/witness-adhoc'\n\n//order matters in this array. later items will register themselves as primary for schemas shared with earlier items\nexport const standardCreatableFactoriesList: (CreatableModuleFactory | LabeledCreatableModuleFactory)[] = [\n HttpBridge,\n ViewArchivist,\n ViewNode,\n AdhocWitness,\n MemoryPayloadDiviner,\n MemoryBoundWitnessDiviner,\n IdentityDiviner,\n MemoryArchivist,\n MemoryArchivist,\n MemoryNode,\n MemorySentinel,\n]\n\nexport const standardCreatableFactories = () => {\n return registerCreatableModuleFactories(standardCreatableFactoriesList, {}, true)\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;;ACAA,oBAAyB;AACzB,IAAAA,uBAQO;;;ACTP,8BAAgC;AAChC,4BAA8B;AAC9B,yBAA2B;AAC3B,yCAA0C;AAC1C,8BAAgC;AAChC,oCAAqC;AACrC,0BAAwG;AACxG,yBAA2B;AAC3B,uBAAyB;AACzB,6BAA+B;AAC/B,2BAA6B;AAGtB,IAAMC,iCAA6F;EACxGC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAA;EACAC;EACAC;;AAGK,IAAMC,6BAA6B,6BAAA;AACxC,aAAOC,sDAAiCZ,gCAAgC,CAAC,GAAG,IAAA;AAC9E,GAF0C;;;ADVnC,IAAMa,wBAAN,MAAMA,sBAAAA;;EACXC,YAA+BC,YAAqCC,2BAAAA,GAA8B;SAAnED,YAAAA;EAAoE;;;;EAKnG,IAAIE,WAA8C;AAChD,WAAO,KAAKF;EACd;;;;;;;EAQAG,OAAOC,QAAgBC,QAAyE;AAC9F,eAAOC;MACL,KAAKC,UAAUH,QAAQC,MAAAA;;MAEvB,MAAM,sCAAsC,kBAAkBD,MAAAA,GAAS,GAAGC,SAAS,cAAcG,KAAKC,UAAUJ,MAAAA,CAAAA,MAAa,EAAA;IAAe;EAEhJ;EAEAK,MAAMC,SAAqD;AACzD,UAAMT,WAAW;MAAE,GAAG,KAAKA;IAAS;AACpC,eAAWE,UAAUO,QAAQT,UAAU;AACrC,UAAIA,SAASE,MAAAA,GAAS;AACpBF,iBAASE,MAAAA,EAAQQ,KAAI,GAAKD,QAAQT,SAASE,MAAAA,KAAW,CAAA,CAAE;MAC1D,OAAO;AACLF,iBAASE,MAAAA,IAAUO,QAAQT,SAASE,MAAAA;MACtC;IACF;AACA,WAAO,IAAIN,sBAAqBI,QAAAA;EAClC;;;;;;EAOAW,SAASC,SAAiCT,QAAiBU,UAAuC,OAAa;AAC7GC,6DAA+B,KAAKhB,WAAWc,SAAST,QAAQU,OAAAA;AAChE,WAAO;EACT;;;;;EAMAE,aAAaC,WAA2C;AACtD,eAAWJ,WAAWI,WAAW;AAC/B,WAAKL,SAASC,OAAAA;IAChB;AACA,WAAO;EACT;;;;;;;EAQAP,UAAUH,QAAgBC,QAAqF;AAhFjH;AAkFI,WAAOA;;OAEH,UAAKL,UAAUI,MAAAA,MAAf,mBAAwBe,OAAOC,gCAAWC,KAAK,CAACP,gBAAYQ,mCAAaR,mCAAST,QAAQA,MAAAA;SAE1F,UAAKL,UAAUI,MAAAA,MAAf,mBAAyB;EAC/B;AACF;AAvEaN;AAAN,IAAMA,uBAAN;","names":["import_module_model","standardCreatableFactoriesList","HttpBridge","ViewArchivist","ViewNode","AdhocWitness","MemoryPayloadDiviner","MemoryBoundWitnessDiviner","IdentityDiviner","MemoryArchivist","MemoryNode","MemorySentinel","standardCreatableFactories","registerCreatableModuleFactories","ModuleFactoryLocator","constructor","_registry","standardCreatableFactories","registry","locate","schema","labels","assertEx","tryLocate","JSON","stringify","merge","locator","push","register","factory","primary","registerCreatableModuleFactory","registerMany","factories","filter","hasLabels","find","hasAllLabels"]}
1
+ {"version":3,"sources":["../../src/index.ts","../../src/ModuleFactoryLocator.ts","../../src/standardCreatableFactories.ts"],"sourcesContent":["export * from './ModuleFactoryLocator.ts'\nexport * from './standardCreatableFactories.ts'\n","import { assertEx } from '@xylabs/assert'\nimport {\n CreatableModuleFactory,\n CreatableModuleRegistry,\n hasAllLabels,\n hasLabels,\n LabeledCreatableModuleFactory,\n Labels,\n registerCreatableModuleFactory,\n} from '@xyo-network/module-model'\nimport { Schema } from '@xyo-network/payload-model'\n\nimport { standardCreatableFactories } from './standardCreatableFactories.ts'\n\n/**\n * A class which encapsulates the Service Locator Pattern for Module Factories\n */\nexport class ModuleFactoryLocator {\n private _frozen = false\n\n constructor(protected readonly _registry: CreatableModuleRegistry = standardCreatableFactories()) {}\n\n /**\n * The current registry for the module factory\n */\n get registry(): Readonly<CreatableModuleRegistry> {\n return this._registry\n }\n\n static empty() {\n return new ModuleFactoryLocator({})\n }\n\n static standard() {\n return new ModuleFactoryLocator(standardCreatableFactories())\n }\n\n freeze() {\n this._frozen = true\n }\n\n /**\n * Locates a module factory that matches the supplied schema and labels\n * @param schema The config schema for the module\n * @param labels The labels for the module factory\n * @returns A module factory that matches the supplied schema and labels or throws if one is not found\n */\n locate(schema: string, labels?: Labels): CreatableModuleFactory | LabeledCreatableModuleFactory {\n return assertEx(\n this.tryLocate(schema, labels),\n () => `No module factory for the supplied ${`config schema [${schema}]`}${labels ? ` & labels [${JSON.stringify(labels)}]` : ''} registered`,\n )\n }\n\n merge(locator: ModuleFactoryLocator): ModuleFactoryLocator {\n const registry = { ...this.registry }\n for (const schema in locator.registry) {\n if (registry[schema]) {\n registry[schema].push(...(locator.registry[schema] ?? []))\n } else {\n registry[schema] = locator.registry[schema]\n }\n }\n return new ModuleFactoryLocator(registry)\n }\n\n /**\n * Registers a single module factory (with optional tags) with the locator\n * @param factory The factory to register\n * @param labels The labels for the module factory\n */\n register(factory: CreatableModuleFactory, labels?: Labels, primary: boolean | Schema | Schema[] = false): this {\n assertEx(!this._frozen, () => 'Cannot register a module factory after the locator has been frozen')\n registerCreatableModuleFactory(this._registry, factory, labels, primary)\n return this\n }\n\n /**\n * Registers multiple module factories with the locator\n * @param factories The factories to register\n */\n registerMany(factories: CreatableModuleFactory[]): this {\n for (const factory of factories) {\n this.register(factory)\n }\n return this\n }\n\n /**\n * Tries to locate a module factory that matches the supplied schema and labels\n * @param schema The config schema for the module\n * @param labels The labels for the module factory\n * @returns A module factory that matches the supplied schema and labels or undefined\n */\n tryLocate(schema: string, labels?: Labels): CreatableModuleFactory | LabeledCreatableModuleFactory | undefined {\n // If labels were provided\n return labels\n // Find the first factory that has labels and has all the labels provided\n ? this._registry[schema]?.filter(hasLabels).find(factory => hasAllLabels(factory?.labels, labels))\n : this._registry[schema]?.[0] // Otherwise, return the first factory\n }\n}\n","import { MemoryArchivist } from '@xyo-network/archivist-memory'\nimport { ViewArchivist } from '@xyo-network/archivist-view'\nimport { HttpBridge } from '@xyo-network/bridge-http'\nimport { MemoryBoundWitnessDiviner } from '@xyo-network/diviner-boundwitness-memory'\nimport { IdentityDiviner } from '@xyo-network/diviner-identity'\nimport { MemoryPayloadDiviner } from '@xyo-network/diviner-payload-memory'\nimport { CreatableModuleFactory, LabeledCreatableModuleFactory, registerCreatableModuleFactories } from '@xyo-network/module-model'\nimport { MemoryNode } from '@xyo-network/node-memory'\nimport { ViewNode } from '@xyo-network/node-view'\nimport { MemorySentinel } from '@xyo-network/sentinel-memory'\nimport { AdhocWitness } from '@xyo-network/witness-adhoc'\n\n// order matters in this array. later items will register themselves as primary for schemas shared with earlier items\nexport const standardCreatableFactoriesList: (CreatableModuleFactory | LabeledCreatableModuleFactory)[] = [\n HttpBridge,\n ViewArchivist,\n ViewNode,\n AdhocWitness,\n MemoryPayloadDiviner,\n MemoryBoundWitnessDiviner,\n IdentityDiviner,\n MemoryArchivist,\n MemoryArchivist,\n MemoryNode,\n MemorySentinel,\n]\n\nexport const standardCreatableFactories = () => {\n return registerCreatableModuleFactories(standardCreatableFactoriesList, {}, true)\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;;ACAA,oBAAyB;AACzB,IAAAA,uBAQO;;;ACTP,8BAAgC;AAChC,4BAA8B;AAC9B,yBAA2B;AAC3B,yCAA0C;AAC1C,8BAAgC;AAChC,oCAAqC;AACrC,0BAAwG;AACxG,yBAA2B;AAC3B,uBAAyB;AACzB,6BAA+B;AAC/B,2BAA6B;AAGtB,IAAMC,iCAA6F;EACxGC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAA;EACAC;EACAC;;AAGK,IAAMC,6BAA6B,6BAAA;AACxC,aAAOC,sDAAiCZ,gCAAgC,CAAC,GAAG,IAAA;AAC9E,GAF0C;;;ADVnC,IAAMa,wBAAN,MAAMA,sBAAAA;;EACHC;EAERC,YAA+BC,YAAqCC,2BAAAA,GAA8B;SAAnED,YAAAA;SAFvBF,UAAU;EAEiF;;;;EAKnG,IAAII,WAA8C;AAChD,WAAO,KAAKF;EACd;EAEA,OAAOG,QAAQ;AACb,WAAO,IAAIN,sBAAqB,CAAC,CAAA;EACnC;EAEA,OAAOO,WAAW;AAChB,WAAO,IAAIP,sBAAqBI,2BAAAA,CAAAA;EAClC;EAEAI,SAAS;AACP,SAAKP,UAAU;EACjB;;;;;;;EAQAQ,OAAOC,QAAgBC,QAAyE;AAC9F,eAAOC,wBACL,KAAKC,UAAUH,QAAQC,MAAAA,GACvB,MAAM,sCAAsC,kBAAkBD,MAAAA,GAAS,GAAGC,SAAS,cAAcG,KAAKC,UAAUJ,MAAAA,CAAAA,MAAa,EAAA,aAAe;EAEhJ;EAEAK,MAAMC,SAAqD;AACzD,UAAMZ,WAAW;MAAE,GAAG,KAAKA;IAAS;AACpC,eAAWK,UAAUO,QAAQZ,UAAU;AACrC,UAAIA,SAASK,MAAAA,GAAS;AACpBL,iBAASK,MAAAA,EAAQQ,KAAI,GAAKD,QAAQZ,SAASK,MAAAA,KAAW,CAAA,CAAE;MAC1D,OAAO;AACLL,iBAASK,MAAAA,IAAUO,QAAQZ,SAASK,MAAAA;MACtC;IACF;AACA,WAAO,IAAIV,sBAAqBK,QAAAA;EAClC;;;;;;EAOAc,SAASC,SAAiCT,QAAiBU,UAAuC,OAAa;AAC7GT,gCAAS,CAAC,KAAKX,SAAS,MAAM,oEAAA;AAC9BqB,6DAA+B,KAAKnB,WAAWiB,SAAST,QAAQU,OAAAA;AAChE,WAAO;EACT;;;;;EAMAE,aAAaC,WAA2C;AACtD,eAAWJ,WAAWI,WAAW;AAC/B,WAAKL,SAASC,OAAAA;IAChB;AACA,WAAO;EACT;;;;;;;EAQAP,UAAUH,QAAgBC,QAAqF;AA9FjH;AAgGI,WAAOA,UAEH,UAAKR,UAAUO,MAAAA,MAAf,mBAAwBe,OAAOC,gCAAWC,KAAKP,CAAAA,gBAAWQ,mCAAaR,mCAAST,QAAQA,MAAAA,MACxF,UAAKR,UAAUO,MAAAA,MAAf,mBAAyB;EAC/B;AACF;AApFaV;AAAN,IAAMA,uBAAN;","names":["import_module_model","standardCreatableFactoriesList","HttpBridge","ViewArchivist","ViewNode","AdhocWitness","MemoryPayloadDiviner","MemoryBoundWitnessDiviner","IdentityDiviner","MemoryArchivist","MemoryNode","MemorySentinel","standardCreatableFactories","registerCreatableModuleFactories","ModuleFactoryLocator","_frozen","constructor","_registry","standardCreatableFactories","registry","empty","standard","freeze","locate","schema","labels","assertEx","tryLocate","JSON","stringify","merge","locator","push","register","factory","primary","registerCreatableModuleFactory","registerMany","factories","filter","hasLabels","find","hasAllLabels"]}
@@ -37,8 +37,10 @@ var standardCreatableFactories = /* @__PURE__ */ __name(() => {
37
37
  // src/ModuleFactoryLocator.ts
38
38
  var _ModuleFactoryLocator = class _ModuleFactoryLocator {
39
39
  _registry;
40
+ _frozen;
40
41
  constructor(_registry = standardCreatableFactories()) {
41
42
  this._registry = _registry;
43
+ this._frozen = false;
42
44
  }
43
45
  /**
44
46
  * The current registry for the module factory
@@ -46,6 +48,15 @@ var _ModuleFactoryLocator = class _ModuleFactoryLocator {
46
48
  get registry() {
47
49
  return this._registry;
48
50
  }
51
+ static empty() {
52
+ return new _ModuleFactoryLocator({});
53
+ }
54
+ static standard() {
55
+ return new _ModuleFactoryLocator(standardCreatableFactories());
56
+ }
57
+ freeze() {
58
+ this._frozen = true;
59
+ }
49
60
  /**
50
61
  * Locates a module factory that matches the supplied schema and labels
51
62
  * @param schema The config schema for the module
@@ -53,11 +64,7 @@ var _ModuleFactoryLocator = class _ModuleFactoryLocator {
53
64
  * @returns A module factory that matches the supplied schema and labels or throws if one is not found
54
65
  */
55
66
  locate(schema, labels) {
56
- return assertEx(
57
- this.tryLocate(schema, labels),
58
- // eslint-disable-next-line sonarjs/no-nested-template-literals
59
- () => `No module factory for the supplied ${`config schema [${schema}]`}${labels ? ` & labels [${JSON.stringify(labels)}]` : ""} registered`
60
- );
67
+ return assertEx(this.tryLocate(schema, labels), () => `No module factory for the supplied ${`config schema [${schema}]`}${labels ? ` & labels [${JSON.stringify(labels)}]` : ""} registered`);
61
68
  }
62
69
  merge(locator) {
63
70
  const registry = {
@@ -78,6 +85,7 @@ var _ModuleFactoryLocator = class _ModuleFactoryLocator {
78
85
  * @param labels The labels for the module factory
79
86
  */
80
87
  register(factory, labels, primary = false) {
88
+ assertEx(!this._frozen, () => "Cannot register a module factory after the locator has been frozen");
81
89
  registerCreatableModuleFactory(this._registry, factory, labels, primary);
82
90
  return this;
83
91
  }
@@ -99,10 +107,7 @@ var _ModuleFactoryLocator = class _ModuleFactoryLocator {
99
107
  */
100
108
  tryLocate(schema, labels) {
101
109
  var _a, _b;
102
- return labels ? (
103
- // Find the first factory that has labels and has all the labels provided
104
- (_a = this._registry[schema]) == null ? void 0 : _a.filter(hasLabels).find((factory) => hasAllLabels(factory == null ? void 0 : factory.labels, labels))
105
- ) : (_b = this._registry[schema]) == null ? void 0 : _b[0];
110
+ return labels ? (_a = this._registry[schema]) == null ? void 0 : _a.filter(hasLabels).find((factory) => hasAllLabels(factory == null ? void 0 : factory.labels, labels)) : (_b = this._registry[schema]) == null ? void 0 : _b[0];
106
111
  }
107
112
  };
108
113
  __name(_ModuleFactoryLocator, "ModuleFactoryLocator");
@@ -112,4 +117,4 @@ export {
112
117
  standardCreatableFactories,
113
118
  standardCreatableFactoriesList
114
119
  };
115
- //# sourceMappingURL=index.js.map
120
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/ModuleFactoryLocator.ts","../../src/standardCreatableFactories.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport {\n CreatableModuleFactory,\n CreatableModuleRegistry,\n hasAllLabels,\n hasLabels,\n LabeledCreatableModuleFactory,\n Labels,\n registerCreatableModuleFactory,\n} from '@xyo-network/module-model'\nimport { Schema } from '@xyo-network/payload-model'\n\nimport { standardCreatableFactories } from './standardCreatableFactories.ts'\n\n/**\n * A class which encapsulates the Service Locator Pattern for Module Factories\n */\nexport class ModuleFactoryLocator {\n private _frozen = false\n\n constructor(protected readonly _registry: CreatableModuleRegistry = standardCreatableFactories()) {}\n\n /**\n * The current registry for the module factory\n */\n get registry(): Readonly<CreatableModuleRegistry> {\n return this._registry\n }\n\n static empty() {\n return new ModuleFactoryLocator({})\n }\n\n static standard() {\n return new ModuleFactoryLocator(standardCreatableFactories())\n }\n\n freeze() {\n this._frozen = true\n }\n\n /**\n * Locates a module factory that matches the supplied schema and labels\n * @param schema The config schema for the module\n * @param labels The labels for the module factory\n * @returns A module factory that matches the supplied schema and labels or throws if one is not found\n */\n locate(schema: string, labels?: Labels): CreatableModuleFactory | LabeledCreatableModuleFactory {\n return assertEx(\n this.tryLocate(schema, labels),\n () => `No module factory for the supplied ${`config schema [${schema}]`}${labels ? ` & labels [${JSON.stringify(labels)}]` : ''} registered`,\n )\n }\n\n merge(locator: ModuleFactoryLocator): ModuleFactoryLocator {\n const registry = { ...this.registry }\n for (const schema in locator.registry) {\n if (registry[schema]) {\n registry[schema].push(...(locator.registry[schema] ?? []))\n } else {\n registry[schema] = locator.registry[schema]\n }\n }\n return new ModuleFactoryLocator(registry)\n }\n\n /**\n * Registers a single module factory (with optional tags) with the locator\n * @param factory The factory to register\n * @param labels The labels for the module factory\n */\n register(factory: CreatableModuleFactory, labels?: Labels, primary: boolean | Schema | Schema[] = false): this {\n assertEx(!this._frozen, () => 'Cannot register a module factory after the locator has been frozen')\n registerCreatableModuleFactory(this._registry, factory, labels, primary)\n return this\n }\n\n /**\n * Registers multiple module factories with the locator\n * @param factories The factories to register\n */\n registerMany(factories: CreatableModuleFactory[]): this {\n for (const factory of factories) {\n this.register(factory)\n }\n return this\n }\n\n /**\n * Tries to locate a module factory that matches the supplied schema and labels\n * @param schema The config schema for the module\n * @param labels The labels for the module factory\n * @returns A module factory that matches the supplied schema and labels or undefined\n */\n tryLocate(schema: string, labels?: Labels): CreatableModuleFactory | LabeledCreatableModuleFactory | undefined {\n // If labels were provided\n return labels\n // Find the first factory that has labels and has all the labels provided\n ? this._registry[schema]?.filter(hasLabels).find(factory => hasAllLabels(factory?.labels, labels))\n : this._registry[schema]?.[0] // Otherwise, return the first factory\n }\n}\n","import { MemoryArchivist } from '@xyo-network/archivist-memory'\nimport { ViewArchivist } from '@xyo-network/archivist-view'\nimport { HttpBridge } from '@xyo-network/bridge-http'\nimport { MemoryBoundWitnessDiviner } from '@xyo-network/diviner-boundwitness-memory'\nimport { IdentityDiviner } from '@xyo-network/diviner-identity'\nimport { MemoryPayloadDiviner } from '@xyo-network/diviner-payload-memory'\nimport { CreatableModuleFactory, LabeledCreatableModuleFactory, registerCreatableModuleFactories } from '@xyo-network/module-model'\nimport { MemoryNode } from '@xyo-network/node-memory'\nimport { ViewNode } from '@xyo-network/node-view'\nimport { MemorySentinel } from '@xyo-network/sentinel-memory'\nimport { AdhocWitness } from '@xyo-network/witness-adhoc'\n\n// order matters in this array. later items will register themselves as primary for schemas shared with earlier items\nexport const standardCreatableFactoriesList: (CreatableModuleFactory | LabeledCreatableModuleFactory)[] = [\n HttpBridge,\n ViewArchivist,\n ViewNode,\n AdhocWitness,\n MemoryPayloadDiviner,\n MemoryBoundWitnessDiviner,\n IdentityDiviner,\n MemoryArchivist,\n MemoryArchivist,\n MemoryNode,\n MemorySentinel,\n]\n\nexport const standardCreatableFactories = () => {\n return registerCreatableModuleFactories(standardCreatableFactoriesList, {}, true)\n}\n"],"mappings":";;;;AAAA,SAASA,gBAAgB;AACzB,SAGEC,cACAC,WAGAC,sCACK;;;ACTP,SAASC,uBAAuB;AAChC,SAASC,qBAAqB;AAC9B,SAASC,kBAAkB;AAC3B,SAASC,iCAAiC;AAC1C,SAASC,uBAAuB;AAChC,SAASC,4BAA4B;AACrC,SAAgEC,wCAAwC;AACxG,SAASC,kBAAkB;AAC3B,SAASC,gBAAgB;AACzB,SAASC,sBAAsB;AAC/B,SAASC,oBAAoB;AAGtB,IAAMC,iCAA6F;EACxGC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAA;EACAC;EACAC;;AAGK,IAAMC,6BAA6B,6BAAA;AACxC,SAAOC,iCAAiCZ,gCAAgC,CAAC,GAAG,IAAA;AAC9E,GAF0C;;;ADVnC,IAAMa,wBAAN,MAAMA,sBAAAA;;EACHC;EAERC,YAA+BC,YAAqCC,2BAAAA,GAA8B;SAAnED,YAAAA;SAFvBF,UAAU;EAEiF;;;;EAKnG,IAAII,WAA8C;AAChD,WAAO,KAAKF;EACd;EAEA,OAAOG,QAAQ;AACb,WAAO,IAAIN,sBAAqB,CAAC,CAAA;EACnC;EAEA,OAAOO,WAAW;AAChB,WAAO,IAAIP,sBAAqBI,2BAAAA,CAAAA;EAClC;EAEAI,SAAS;AACP,SAAKP,UAAU;EACjB;;;;;;;EAQAQ,OAAOC,QAAgBC,QAAyE;AAC9F,WAAOC,SACL,KAAKC,UAAUH,QAAQC,MAAAA,GACvB,MAAM,sCAAsC,kBAAkBD,MAAAA,GAAS,GAAGC,SAAS,cAAcG,KAAKC,UAAUJ,MAAAA,CAAAA,MAAa,EAAA,aAAe;EAEhJ;EAEAK,MAAMC,SAAqD;AACzD,UAAMZ,WAAW;MAAE,GAAG,KAAKA;IAAS;AACpC,eAAWK,UAAUO,QAAQZ,UAAU;AACrC,UAAIA,SAASK,MAAAA,GAAS;AACpBL,iBAASK,MAAAA,EAAQQ,KAAI,GAAKD,QAAQZ,SAASK,MAAAA,KAAW,CAAA,CAAE;MAC1D,OAAO;AACLL,iBAASK,MAAAA,IAAUO,QAAQZ,SAASK,MAAAA;MACtC;IACF;AACA,WAAO,IAAIV,sBAAqBK,QAAAA;EAClC;;;;;;EAOAc,SAASC,SAAiCT,QAAiBU,UAAuC,OAAa;AAC7GT,aAAS,CAAC,KAAKX,SAAS,MAAM,oEAAA;AAC9BqB,mCAA+B,KAAKnB,WAAWiB,SAAST,QAAQU,OAAAA;AAChE,WAAO;EACT;;;;;EAMAE,aAAaC,WAA2C;AACtD,eAAWJ,WAAWI,WAAW;AAC/B,WAAKL,SAASC,OAAAA;IAChB;AACA,WAAO;EACT;;;;;;;EAQAP,UAAUH,QAAgBC,QAAqF;AA9FjH;AAgGI,WAAOA,UAEH,UAAKR,UAAUO,MAAAA,MAAf,mBAAwBe,OAAOC,WAAWC,KAAKP,CAAAA,YAAWQ,aAAaR,mCAAST,QAAQA,MAAAA,MACxF,UAAKR,UAAUO,MAAAA,MAAf,mBAAyB;EAC/B;AACF;AApFaV;AAAN,IAAMA,uBAAN;","names":["assertEx","hasAllLabels","hasLabels","registerCreatableModuleFactory","MemoryArchivist","ViewArchivist","HttpBridge","MemoryBoundWitnessDiviner","IdentityDiviner","MemoryPayloadDiviner","registerCreatableModuleFactories","MemoryNode","ViewNode","MemorySentinel","AdhocWitness","standardCreatableFactoriesList","HttpBridge","ViewArchivist","ViewNode","AdhocWitness","MemoryPayloadDiviner","MemoryBoundWitnessDiviner","IdentityDiviner","MemoryArchivist","MemoryNode","MemorySentinel","standardCreatableFactories","registerCreatableModuleFactories","ModuleFactoryLocator","_frozen","constructor","_registry","standardCreatableFactories","registry","empty","standard","freeze","locate","schema","labels","assertEx","tryLocate","JSON","stringify","merge","locator","push","register","factory","primary","registerCreatableModuleFactory","registerMany","factories","filter","hasLabels","find","hasAllLabels"]}
package/package.json CHANGED
@@ -10,23 +10,23 @@
10
10
  "url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js/issues"
11
11
  },
12
12
  "dependencies": {
13
- "@xylabs/assert": "^3.6.6",
14
- "@xyo-network/archivist-memory": "^2.110.19",
15
- "@xyo-network/archivist-view": "^2.110.19",
16
- "@xyo-network/bridge-http": "^2.110.19",
17
- "@xyo-network/diviner-boundwitness-memory": "^2.110.19",
18
- "@xyo-network/diviner-identity": "^2.110.19",
19
- "@xyo-network/diviner-payload-memory": "^2.110.19",
20
- "@xyo-network/module-model": "^2.110.19",
21
- "@xyo-network/node-memory": "^2.110.19",
22
- "@xyo-network/node-view": "^2.110.19",
23
- "@xyo-network/payload-model": "^2.110.19",
24
- "@xyo-network/sentinel-memory": "^2.110.19",
25
- "@xyo-network/witness-adhoc": "^2.110.19"
13
+ "@xylabs/assert": "^3.6.8",
14
+ "@xyo-network/archivist-memory": "^2.111.1",
15
+ "@xyo-network/archivist-view": "^2.111.1",
16
+ "@xyo-network/bridge-http": "^2.111.1",
17
+ "@xyo-network/diviner-boundwitness-memory": "^2.111.1",
18
+ "@xyo-network/diviner-identity": "^2.111.1",
19
+ "@xyo-network/diviner-payload-memory": "^2.111.1",
20
+ "@xyo-network/module-model": "^2.111.1",
21
+ "@xyo-network/node-memory": "^2.111.1",
22
+ "@xyo-network/node-view": "^2.111.1",
23
+ "@xyo-network/payload-model": "^2.111.1",
24
+ "@xyo-network/sentinel-memory": "^2.111.1",
25
+ "@xyo-network/witness-adhoc": "^2.111.1"
26
26
  },
27
27
  "devDependencies": {
28
- "@xylabs/ts-scripts-yarn3": "^3.14.1",
29
- "@xylabs/tsconfig": "^3.14.1",
28
+ "@xylabs/ts-scripts-yarn3": "^3.15.8",
29
+ "@xylabs/tsconfig": "^3.15.8",
30
30
  "typescript": "^5.5.4"
31
31
  },
32
32
  "description": "Primary SDK for using XYO Protocol 2.0",
@@ -40,7 +40,7 @@
40
40
  },
41
41
  "import": {
42
42
  "types": "./dist/browser/index.d.mts",
43
- "default": "./dist/browser/index.js"
43
+ "default": "./dist/browser/index.mjs"
44
44
  }
45
45
  },
46
46
  "node": {
@@ -50,14 +50,14 @@
50
50
  },
51
51
  "import": {
52
52
  "types": "./dist/node/index.d.mts",
53
- "default": "./dist/node/index.js"
53
+ "default": "./dist/node/index.mjs"
54
54
  }
55
55
  }
56
56
  },
57
57
  "./package.json": "./package.json"
58
58
  },
59
59
  "main": "dist/node/index.cjs",
60
- "module": "dist/node/index.js",
60
+ "module": "dist/node/index.mjs",
61
61
  "homepage": "https://xyo.network",
62
62
  "license": "LGPL-3.0-only",
63
63
  "publishConfig": {
@@ -68,6 +68,6 @@
68
68
  "url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js.git"
69
69
  },
70
70
  "sideEffects": false,
71
- "version": "2.110.19",
71
+ "version": "2.111.1",
72
72
  "type": "module"
73
73
  }
@@ -16,6 +16,8 @@ import { standardCreatableFactories } from './standardCreatableFactories.ts'
16
16
  * A class which encapsulates the Service Locator Pattern for Module Factories
17
17
  */
18
18
  export class ModuleFactoryLocator {
19
+ private _frozen = false
20
+
19
21
  constructor(protected readonly _registry: CreatableModuleRegistry = standardCreatableFactories()) {}
20
22
 
21
23
  /**
@@ -25,6 +27,18 @@ export class ModuleFactoryLocator {
25
27
  return this._registry
26
28
  }
27
29
 
30
+ static empty() {
31
+ return new ModuleFactoryLocator({})
32
+ }
33
+
34
+ static standard() {
35
+ return new ModuleFactoryLocator(standardCreatableFactories())
36
+ }
37
+
38
+ freeze() {
39
+ this._frozen = true
40
+ }
41
+
28
42
  /**
29
43
  * Locates a module factory that matches the supplied schema and labels
30
44
  * @param schema The config schema for the module
@@ -34,7 +48,6 @@ export class ModuleFactoryLocator {
34
48
  locate(schema: string, labels?: Labels): CreatableModuleFactory | LabeledCreatableModuleFactory {
35
49
  return assertEx(
36
50
  this.tryLocate(schema, labels),
37
- // eslint-disable-next-line sonarjs/no-nested-template-literals
38
51
  () => `No module factory for the supplied ${`config schema [${schema}]`}${labels ? ` & labels [${JSON.stringify(labels)}]` : ''} registered`,
39
52
  )
40
53
  }
@@ -57,6 +70,7 @@ export class ModuleFactoryLocator {
57
70
  * @param labels The labels for the module factory
58
71
  */
59
72
  register(factory: CreatableModuleFactory, labels?: Labels, primary: boolean | Schema | Schema[] = false): this {
73
+ assertEx(!this._frozen, () => 'Cannot register a module factory after the locator has been frozen')
60
74
  registerCreatableModuleFactory(this._registry, factory, labels, primary)
61
75
  return this
62
76
  }
@@ -80,10 +94,9 @@ export class ModuleFactoryLocator {
80
94
  */
81
95
  tryLocate(schema: string, labels?: Labels): CreatableModuleFactory | LabeledCreatableModuleFactory | undefined {
82
96
  // If labels were provided
83
- return labels ?
84
- // Find the first factory that has labels and has all the labels provided
85
- this._registry[schema]?.filter(hasLabels).find((factory) => hasAllLabels(factory?.labels, labels))
86
- : // Otherwise, return the first factory
87
- this._registry[schema]?.[0]
97
+ return labels
98
+ // Find the first factory that has labels and has all the labels provided
99
+ ? this._registry[schema]?.filter(hasLabels).find(factory => hasAllLabels(factory?.labels, labels))
100
+ : this._registry[schema]?.[0] // Otherwise, return the first factory
88
101
  }
89
102
  }
@@ -10,7 +10,7 @@ import { ViewNode } from '@xyo-network/node-view'
10
10
  import { MemorySentinel } from '@xyo-network/sentinel-memory'
11
11
  import { AdhocWitness } from '@xyo-network/witness-adhoc'
12
12
 
13
- //order matters in this array. later items will register themselves as primary for schemas shared with earlier items
13
+ // order matters in this array. later items will register themselves as primary for schemas shared with earlier items
14
14
  export const standardCreatableFactoriesList: (CreatableModuleFactory | LabeledCreatableModuleFactory)[] = [
15
15
  HttpBridge,
16
16
  ViewArchivist,
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/ModuleFactoryLocator.ts","../../src/standardCreatableFactories.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport {\n CreatableModuleFactory,\n CreatableModuleRegistry,\n hasAllLabels,\n hasLabels,\n LabeledCreatableModuleFactory,\n Labels,\n registerCreatableModuleFactory,\n} from '@xyo-network/module-model'\nimport { Schema } from '@xyo-network/payload-model'\n\nimport { standardCreatableFactories } from './standardCreatableFactories.ts'\n\n/**\n * A class which encapsulates the Service Locator Pattern for Module Factories\n */\nexport class ModuleFactoryLocator {\n constructor(protected readonly _registry: CreatableModuleRegistry = standardCreatableFactories()) {}\n\n /**\n * The current registry for the module factory\n */\n get registry(): Readonly<CreatableModuleRegistry> {\n return this._registry\n }\n\n /**\n * Locates a module factory that matches the supplied schema and labels\n * @param schema The config schema for the module\n * @param labels The labels for the module factory\n * @returns A module factory that matches the supplied schema and labels or throws if one is not found\n */\n locate(schema: string, labels?: Labels): CreatableModuleFactory | LabeledCreatableModuleFactory {\n return assertEx(\n this.tryLocate(schema, labels),\n // eslint-disable-next-line sonarjs/no-nested-template-literals\n () => `No module factory for the supplied ${`config schema [${schema}]`}${labels ? ` & labels [${JSON.stringify(labels)}]` : ''} registered`,\n )\n }\n\n merge(locator: ModuleFactoryLocator): ModuleFactoryLocator {\n const registry = { ...this.registry }\n for (const schema in locator.registry) {\n if (registry[schema]) {\n registry[schema].push(...(locator.registry[schema] ?? []))\n } else {\n registry[schema] = locator.registry[schema]\n }\n }\n return new ModuleFactoryLocator(registry)\n }\n\n /**\n * Registers a single module factory (with optional tags) with the locator\n * @param factory The factory to register\n * @param labels The labels for the module factory\n */\n register(factory: CreatableModuleFactory, labels?: Labels, primary: boolean | Schema | Schema[] = false): this {\n registerCreatableModuleFactory(this._registry, factory, labels, primary)\n return this\n }\n\n /**\n * Registers multiple module factories with the locator\n * @param factories The factories to register\n */\n registerMany(factories: CreatableModuleFactory[]): this {\n for (const factory of factories) {\n this.register(factory)\n }\n return this\n }\n\n /**\n * Tries to locate a module factory that matches the supplied schema and labels\n * @param schema The config schema for the module\n * @param labels The labels for the module factory\n * @returns A module factory that matches the supplied schema and labels or undefined\n */\n tryLocate(schema: string, labels?: Labels): CreatableModuleFactory | LabeledCreatableModuleFactory | undefined {\n // If labels were provided\n return labels ?\n // Find the first factory that has labels and has all the labels provided\n this._registry[schema]?.filter(hasLabels).find((factory) => hasAllLabels(factory?.labels, labels))\n : // Otherwise, return the first factory\n this._registry[schema]?.[0]\n }\n}\n","import { MemoryArchivist } from '@xyo-network/archivist-memory'\nimport { ViewArchivist } from '@xyo-network/archivist-view'\nimport { HttpBridge } from '@xyo-network/bridge-http'\nimport { MemoryBoundWitnessDiviner } from '@xyo-network/diviner-boundwitness-memory'\nimport { IdentityDiviner } from '@xyo-network/diviner-identity'\nimport { MemoryPayloadDiviner } from '@xyo-network/diviner-payload-memory'\nimport { CreatableModuleFactory, LabeledCreatableModuleFactory, registerCreatableModuleFactories } from '@xyo-network/module-model'\nimport { MemoryNode } from '@xyo-network/node-memory'\nimport { ViewNode } from '@xyo-network/node-view'\nimport { MemorySentinel } from '@xyo-network/sentinel-memory'\nimport { AdhocWitness } from '@xyo-network/witness-adhoc'\n\n//order matters in this array. later items will register themselves as primary for schemas shared with earlier items\nexport const standardCreatableFactoriesList: (CreatableModuleFactory | LabeledCreatableModuleFactory)[] = [\n HttpBridge,\n ViewArchivist,\n ViewNode,\n AdhocWitness,\n MemoryPayloadDiviner,\n MemoryBoundWitnessDiviner,\n IdentityDiviner,\n MemoryArchivist,\n MemoryArchivist,\n MemoryNode,\n MemorySentinel,\n]\n\nexport const standardCreatableFactories = () => {\n return registerCreatableModuleFactories(standardCreatableFactoriesList, {}, true)\n}\n"],"mappings":";;;;AAAA,SAASA,gBAAgB;AACzB,SAGEC,cACAC,WAGAC,sCACK;;;ACTP,SAASC,uBAAuB;AAChC,SAASC,qBAAqB;AAC9B,SAASC,kBAAkB;AAC3B,SAASC,iCAAiC;AAC1C,SAASC,uBAAuB;AAChC,SAASC,4BAA4B;AACrC,SAAgEC,wCAAwC;AACxG,SAASC,kBAAkB;AAC3B,SAASC,gBAAgB;AACzB,SAASC,sBAAsB;AAC/B,SAASC,oBAAoB;AAGtB,IAAMC,iCAA6F;EACxGC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAA;EACAC;EACAC;;AAGK,IAAMC,6BAA6B,6BAAA;AACxC,SAAOC,iCAAiCZ,gCAAgC,CAAC,GAAG,IAAA;AAC9E,GAF0C;;;ADVnC,IAAMa,uBAAN,MAAMA,sBAAAA;EAjBb,OAiBaA;;;;EACXC,YAA+BC,YAAqCC,2BAAAA,GAA8B;SAAnED,YAAAA;EAAoE;;;;EAKnG,IAAIE,WAA8C;AAChD,WAAO,KAAKF;EACd;;;;;;;EAQAG,OAAOC,QAAgBC,QAAyE;AAC9F,WAAOC;MACL,KAAKC,UAAUH,QAAQC,MAAAA;;MAEvB,MAAM,sCAAsC,kBAAkBD,MAAAA,GAAS,GAAGC,SAAS,cAAcG,KAAKC,UAAUJ,MAAAA,CAAAA,MAAa,EAAA;IAAe;EAEhJ;EAEAK,MAAMC,SAAqD;AACzD,UAAMT,WAAW;MAAE,GAAG,KAAKA;IAAS;AACpC,eAAWE,UAAUO,QAAQT,UAAU;AACrC,UAAIA,SAASE,MAAAA,GAAS;AACpBF,iBAASE,MAAAA,EAAQQ,KAAI,GAAKD,QAAQT,SAASE,MAAAA,KAAW,CAAA,CAAE;MAC1D,OAAO;AACLF,iBAASE,MAAAA,IAAUO,QAAQT,SAASE,MAAAA;MACtC;IACF;AACA,WAAO,IAAIN,sBAAqBI,QAAAA;EAClC;;;;;;EAOAW,SAASC,SAAiCT,QAAiBU,UAAuC,OAAa;AAC7GC,mCAA+B,KAAKhB,WAAWc,SAAST,QAAQU,OAAAA;AAChE,WAAO;EACT;;;;;EAMAE,aAAaC,WAA2C;AACtD,eAAWJ,WAAWI,WAAW;AAC/B,WAAKL,SAASC,OAAAA;IAChB;AACA,WAAO;EACT;;;;;;;EAQAP,UAAUH,QAAgBC,QAAqF;AAE7G,WAAOA;;MAEH,KAAKL,UAAUI,MAAAA,GAASe,OAAOC,SAAAA,EAAWC,KAAK,CAACP,YAAYQ,aAAaR,SAAST,QAAQA,MAAAA,CAAAA;QAE1F,KAAKL,UAAUI,MAAAA,IAAU,CAAA;EAC/B;AACF;","names":["assertEx","hasAllLabels","hasLabels","registerCreatableModuleFactory","MemoryArchivist","ViewArchivist","HttpBridge","MemoryBoundWitnessDiviner","IdentityDiviner","MemoryPayloadDiviner","registerCreatableModuleFactories","MemoryNode","ViewNode","MemorySentinel","AdhocWitness","standardCreatableFactoriesList","HttpBridge","ViewArchivist","ViewNode","AdhocWitness","MemoryPayloadDiviner","MemoryBoundWitnessDiviner","IdentityDiviner","MemoryArchivist","MemoryNode","MemorySentinel","standardCreatableFactories","registerCreatableModuleFactories","ModuleFactoryLocator","constructor","_registry","standardCreatableFactories","registry","locate","schema","labels","assertEx","tryLocate","JSON","stringify","merge","locator","push","register","factory","primary","registerCreatableModuleFactory","registerMany","factories","filter","hasLabels","find","hasAllLabels"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/ModuleFactoryLocator.ts","../../src/standardCreatableFactories.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport {\n CreatableModuleFactory,\n CreatableModuleRegistry,\n hasAllLabels,\n hasLabels,\n LabeledCreatableModuleFactory,\n Labels,\n registerCreatableModuleFactory,\n} from '@xyo-network/module-model'\nimport { Schema } from '@xyo-network/payload-model'\n\nimport { standardCreatableFactories } from './standardCreatableFactories.ts'\n\n/**\n * A class which encapsulates the Service Locator Pattern for Module Factories\n */\nexport class ModuleFactoryLocator {\n constructor(protected readonly _registry: CreatableModuleRegistry = standardCreatableFactories()) {}\n\n /**\n * The current registry for the module factory\n */\n get registry(): Readonly<CreatableModuleRegistry> {\n return this._registry\n }\n\n /**\n * Locates a module factory that matches the supplied schema and labels\n * @param schema The config schema for the module\n * @param labels The labels for the module factory\n * @returns A module factory that matches the supplied schema and labels or throws if one is not found\n */\n locate(schema: string, labels?: Labels): CreatableModuleFactory | LabeledCreatableModuleFactory {\n return assertEx(\n this.tryLocate(schema, labels),\n // eslint-disable-next-line sonarjs/no-nested-template-literals\n () => `No module factory for the supplied ${`config schema [${schema}]`}${labels ? ` & labels [${JSON.stringify(labels)}]` : ''} registered`,\n )\n }\n\n merge(locator: ModuleFactoryLocator): ModuleFactoryLocator {\n const registry = { ...this.registry }\n for (const schema in locator.registry) {\n if (registry[schema]) {\n registry[schema].push(...(locator.registry[schema] ?? []))\n } else {\n registry[schema] = locator.registry[schema]\n }\n }\n return new ModuleFactoryLocator(registry)\n }\n\n /**\n * Registers a single module factory (with optional tags) with the locator\n * @param factory The factory to register\n * @param labels The labels for the module factory\n */\n register(factory: CreatableModuleFactory, labels?: Labels, primary: boolean | Schema | Schema[] = false): this {\n registerCreatableModuleFactory(this._registry, factory, labels, primary)\n return this\n }\n\n /**\n * Registers multiple module factories with the locator\n * @param factories The factories to register\n */\n registerMany(factories: CreatableModuleFactory[]): this {\n for (const factory of factories) {\n this.register(factory)\n }\n return this\n }\n\n /**\n * Tries to locate a module factory that matches the supplied schema and labels\n * @param schema The config schema for the module\n * @param labels The labels for the module factory\n * @returns A module factory that matches the supplied schema and labels or undefined\n */\n tryLocate(schema: string, labels?: Labels): CreatableModuleFactory | LabeledCreatableModuleFactory | undefined {\n // If labels were provided\n return labels ?\n // Find the first factory that has labels and has all the labels provided\n this._registry[schema]?.filter(hasLabels).find((factory) => hasAllLabels(factory?.labels, labels))\n : // Otherwise, return the first factory\n this._registry[schema]?.[0]\n }\n}\n","import { MemoryArchivist } from '@xyo-network/archivist-memory'\nimport { ViewArchivist } from '@xyo-network/archivist-view'\nimport { HttpBridge } from '@xyo-network/bridge-http'\nimport { MemoryBoundWitnessDiviner } from '@xyo-network/diviner-boundwitness-memory'\nimport { IdentityDiviner } from '@xyo-network/diviner-identity'\nimport { MemoryPayloadDiviner } from '@xyo-network/diviner-payload-memory'\nimport { CreatableModuleFactory, LabeledCreatableModuleFactory, registerCreatableModuleFactories } from '@xyo-network/module-model'\nimport { MemoryNode } from '@xyo-network/node-memory'\nimport { ViewNode } from '@xyo-network/node-view'\nimport { MemorySentinel } from '@xyo-network/sentinel-memory'\nimport { AdhocWitness } from '@xyo-network/witness-adhoc'\n\n//order matters in this array. later items will register themselves as primary for schemas shared with earlier items\nexport const standardCreatableFactoriesList: (CreatableModuleFactory | LabeledCreatableModuleFactory)[] = [\n HttpBridge,\n ViewArchivist,\n ViewNode,\n AdhocWitness,\n MemoryPayloadDiviner,\n MemoryBoundWitnessDiviner,\n IdentityDiviner,\n MemoryArchivist,\n MemoryArchivist,\n MemoryNode,\n MemorySentinel,\n]\n\nexport const standardCreatableFactories = () => {\n return registerCreatableModuleFactories(standardCreatableFactoriesList, {}, true)\n}\n"],"mappings":";;;;AAAA,SAASA,gBAAgB;AACzB,SAGEC,cACAC,WAGAC,sCACK;;;ACTP,SAASC,uBAAuB;AAChC,SAASC,qBAAqB;AAC9B,SAASC,kBAAkB;AAC3B,SAASC,iCAAiC;AAC1C,SAASC,uBAAuB;AAChC,SAASC,4BAA4B;AACrC,SAAgEC,wCAAwC;AACxG,SAASC,kBAAkB;AAC3B,SAASC,gBAAgB;AACzB,SAASC,sBAAsB;AAC/B,SAASC,oBAAoB;AAGtB,IAAMC,iCAA6F;EACxGC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAA;EACAC;EACAC;;AAGK,IAAMC,6BAA6B,6BAAA;AACxC,SAAOC,iCAAiCZ,gCAAgC,CAAC,GAAG,IAAA;AAC9E,GAF0C;;;ADVnC,IAAMa,uBAAN,MAAMA,sBAAAA;EAjBb,OAiBaA;;;;EACXC,YAA+BC,YAAqCC,2BAAAA,GAA8B;SAAnED,YAAAA;EAAoE;;;;EAKnG,IAAIE,WAA8C;AAChD,WAAO,KAAKF;EACd;;;;;;;EAQAG,OAAOC,QAAgBC,QAAyE;AAC9F,WAAOC;MACL,KAAKC,UAAUH,QAAQC,MAAAA;;MAEvB,MAAM,sCAAsC,kBAAkBD,MAAAA,GAAS,GAAGC,SAAS,cAAcG,KAAKC,UAAUJ,MAAAA,CAAAA,MAAa,EAAA;IAAe;EAEhJ;EAEAK,MAAMC,SAAqD;AACzD,UAAMT,WAAW;MAAE,GAAG,KAAKA;IAAS;AACpC,eAAWE,UAAUO,QAAQT,UAAU;AACrC,UAAIA,SAASE,MAAAA,GAAS;AACpBF,iBAASE,MAAAA,EAAQQ,KAAI,GAAKD,QAAQT,SAASE,MAAAA,KAAW,CAAA,CAAE;MAC1D,OAAO;AACLF,iBAASE,MAAAA,IAAUO,QAAQT,SAASE,MAAAA;MACtC;IACF;AACA,WAAO,IAAIN,sBAAqBI,QAAAA;EAClC;;;;;;EAOAW,SAASC,SAAiCT,QAAiBU,UAAuC,OAAa;AAC7GC,mCAA+B,KAAKhB,WAAWc,SAAST,QAAQU,OAAAA;AAChE,WAAO;EACT;;;;;EAMAE,aAAaC,WAA2C;AACtD,eAAWJ,WAAWI,WAAW;AAC/B,WAAKL,SAASC,OAAAA;IAChB;AACA,WAAO;EACT;;;;;;;EAQAP,UAAUH,QAAgBC,QAAqF;AAE7G,WAAOA;;MAEH,KAAKL,UAAUI,MAAAA,GAASe,OAAOC,SAAAA,EAAWC,KAAK,CAACP,YAAYQ,aAAaR,SAAST,QAAQA,MAAAA,CAAAA;QAE1F,KAAKL,UAAUI,MAAAA,IAAU,CAAA;EAC/B;AACF;","names":["assertEx","hasAllLabels","hasLabels","registerCreatableModuleFactory","MemoryArchivist","ViewArchivist","HttpBridge","MemoryBoundWitnessDiviner","IdentityDiviner","MemoryPayloadDiviner","registerCreatableModuleFactories","MemoryNode","ViewNode","MemorySentinel","AdhocWitness","standardCreatableFactoriesList","HttpBridge","ViewArchivist","ViewNode","AdhocWitness","MemoryPayloadDiviner","MemoryBoundWitnessDiviner","IdentityDiviner","MemoryArchivist","MemoryNode","MemorySentinel","standardCreatableFactories","registerCreatableModuleFactories","ModuleFactoryLocator","constructor","_registry","standardCreatableFactories","registry","locate","schema","labels","assertEx","tryLocate","JSON","stringify","merge","locator","push","register","factory","primary","registerCreatableModuleFactory","registerMany","factories","filter","hasLabels","find","hasAllLabels"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/ModuleFactoryLocator.ts","../../src/standardCreatableFactories.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport {\n CreatableModuleFactory,\n CreatableModuleRegistry,\n hasAllLabels,\n hasLabels,\n LabeledCreatableModuleFactory,\n Labels,\n registerCreatableModuleFactory,\n} from '@xyo-network/module-model'\nimport { Schema } from '@xyo-network/payload-model'\n\nimport { standardCreatableFactories } from './standardCreatableFactories.ts'\n\n/**\n * A class which encapsulates the Service Locator Pattern for Module Factories\n */\nexport class ModuleFactoryLocator {\n constructor(protected readonly _registry: CreatableModuleRegistry = standardCreatableFactories()) {}\n\n /**\n * The current registry for the module factory\n */\n get registry(): Readonly<CreatableModuleRegistry> {\n return this._registry\n }\n\n /**\n * Locates a module factory that matches the supplied schema and labels\n * @param schema The config schema for the module\n * @param labels The labels for the module factory\n * @returns A module factory that matches the supplied schema and labels or throws if one is not found\n */\n locate(schema: string, labels?: Labels): CreatableModuleFactory | LabeledCreatableModuleFactory {\n return assertEx(\n this.tryLocate(schema, labels),\n // eslint-disable-next-line sonarjs/no-nested-template-literals\n () => `No module factory for the supplied ${`config schema [${schema}]`}${labels ? ` & labels [${JSON.stringify(labels)}]` : ''} registered`,\n )\n }\n\n merge(locator: ModuleFactoryLocator): ModuleFactoryLocator {\n const registry = { ...this.registry }\n for (const schema in locator.registry) {\n if (registry[schema]) {\n registry[schema].push(...(locator.registry[schema] ?? []))\n } else {\n registry[schema] = locator.registry[schema]\n }\n }\n return new ModuleFactoryLocator(registry)\n }\n\n /**\n * Registers a single module factory (with optional tags) with the locator\n * @param factory The factory to register\n * @param labels The labels for the module factory\n */\n register(factory: CreatableModuleFactory, labels?: Labels, primary: boolean | Schema | Schema[] = false): this {\n registerCreatableModuleFactory(this._registry, factory, labels, primary)\n return this\n }\n\n /**\n * Registers multiple module factories with the locator\n * @param factories The factories to register\n */\n registerMany(factories: CreatableModuleFactory[]): this {\n for (const factory of factories) {\n this.register(factory)\n }\n return this\n }\n\n /**\n * Tries to locate a module factory that matches the supplied schema and labels\n * @param schema The config schema for the module\n * @param labels The labels for the module factory\n * @returns A module factory that matches the supplied schema and labels or undefined\n */\n tryLocate(schema: string, labels?: Labels): CreatableModuleFactory | LabeledCreatableModuleFactory | undefined {\n // If labels were provided\n return labels ?\n // Find the first factory that has labels and has all the labels provided\n this._registry[schema]?.filter(hasLabels).find((factory) => hasAllLabels(factory?.labels, labels))\n : // Otherwise, return the first factory\n this._registry[schema]?.[0]\n }\n}\n","import { MemoryArchivist } from '@xyo-network/archivist-memory'\nimport { ViewArchivist } from '@xyo-network/archivist-view'\nimport { HttpBridge } from '@xyo-network/bridge-http'\nimport { MemoryBoundWitnessDiviner } from '@xyo-network/diviner-boundwitness-memory'\nimport { IdentityDiviner } from '@xyo-network/diviner-identity'\nimport { MemoryPayloadDiviner } from '@xyo-network/diviner-payload-memory'\nimport { CreatableModuleFactory, LabeledCreatableModuleFactory, registerCreatableModuleFactories } from '@xyo-network/module-model'\nimport { MemoryNode } from '@xyo-network/node-memory'\nimport { ViewNode } from '@xyo-network/node-view'\nimport { MemorySentinel } from '@xyo-network/sentinel-memory'\nimport { AdhocWitness } from '@xyo-network/witness-adhoc'\n\n//order matters in this array. later items will register themselves as primary for schemas shared with earlier items\nexport const standardCreatableFactoriesList: (CreatableModuleFactory | LabeledCreatableModuleFactory)[] = [\n HttpBridge,\n ViewArchivist,\n ViewNode,\n AdhocWitness,\n MemoryPayloadDiviner,\n MemoryBoundWitnessDiviner,\n IdentityDiviner,\n MemoryArchivist,\n MemoryArchivist,\n MemoryNode,\n MemorySentinel,\n]\n\nexport const standardCreatableFactories = () => {\n return registerCreatableModuleFactories(standardCreatableFactoriesList, {}, true)\n}\n"],"mappings":";;;;AAAA,SAASA,gBAAgB;AACzB,SAGEC,cACAC,WAGAC,sCACK;;;ACTP,SAASC,uBAAuB;AAChC,SAASC,qBAAqB;AAC9B,SAASC,kBAAkB;AAC3B,SAASC,iCAAiC;AAC1C,SAASC,uBAAuB;AAChC,SAASC,4BAA4B;AACrC,SAAgEC,wCAAwC;AACxG,SAASC,kBAAkB;AAC3B,SAASC,gBAAgB;AACzB,SAASC,sBAAsB;AAC/B,SAASC,oBAAoB;AAGtB,IAAMC,iCAA6F;EACxGC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAC;EACAA;EACAC;EACAC;;AAGK,IAAMC,6BAA6B,6BAAA;AACxC,SAAOC,iCAAiCZ,gCAAgC,CAAC,GAAG,IAAA;AAC9E,GAF0C;;;ADVnC,IAAMa,wBAAN,MAAMA,sBAAAA;;EACXC,YAA+BC,YAAqCC,2BAAAA,GAA8B;SAAnED,YAAAA;EAAoE;;;;EAKnG,IAAIE,WAA8C;AAChD,WAAO,KAAKF;EACd;;;;;;;EAQAG,OAAOC,QAAgBC,QAAyE;AAC9F,WAAOC;MACL,KAAKC,UAAUH,QAAQC,MAAAA;;MAEvB,MAAM,sCAAsC,kBAAkBD,MAAAA,GAAS,GAAGC,SAAS,cAAcG,KAAKC,UAAUJ,MAAAA,CAAAA,MAAa,EAAA;IAAe;EAEhJ;EAEAK,MAAMC,SAAqD;AACzD,UAAMT,WAAW;MAAE,GAAG,KAAKA;IAAS;AACpC,eAAWE,UAAUO,QAAQT,UAAU;AACrC,UAAIA,SAASE,MAAAA,GAAS;AACpBF,iBAASE,MAAAA,EAAQQ,KAAI,GAAKD,QAAQT,SAASE,MAAAA,KAAW,CAAA,CAAE;MAC1D,OAAO;AACLF,iBAASE,MAAAA,IAAUO,QAAQT,SAASE,MAAAA;MACtC;IACF;AACA,WAAO,IAAIN,sBAAqBI,QAAAA;EAClC;;;;;;EAOAW,SAASC,SAAiCT,QAAiBU,UAAuC,OAAa;AAC7GC,mCAA+B,KAAKhB,WAAWc,SAAST,QAAQU,OAAAA;AAChE,WAAO;EACT;;;;;EAMAE,aAAaC,WAA2C;AACtD,eAAWJ,WAAWI,WAAW;AAC/B,WAAKL,SAASC,OAAAA;IAChB;AACA,WAAO;EACT;;;;;;;EAQAP,UAAUH,QAAgBC,QAAqF;AAhFjH;AAkFI,WAAOA;;OAEH,UAAKL,UAAUI,MAAAA,MAAf,mBAAwBe,OAAOC,WAAWC,KAAK,CAACP,YAAYQ,aAAaR,mCAAST,QAAQA,MAAAA;SAE1F,UAAKL,UAAUI,MAAAA,MAAf,mBAAyB;EAC/B;AACF;AAvEaN;AAAN,IAAMA,uBAAN;","names":["assertEx","hasAllLabels","hasLabels","registerCreatableModuleFactory","MemoryArchivist","ViewArchivist","HttpBridge","MemoryBoundWitnessDiviner","IdentityDiviner","MemoryPayloadDiviner","registerCreatableModuleFactories","MemoryNode","ViewNode","MemorySentinel","AdhocWitness","standardCreatableFactoriesList","HttpBridge","ViewArchivist","ViewNode","AdhocWitness","MemoryPayloadDiviner","MemoryBoundWitnessDiviner","IdentityDiviner","MemoryArchivist","MemoryNode","MemorySentinel","standardCreatableFactories","registerCreatableModuleFactories","ModuleFactoryLocator","constructor","_registry","standardCreatableFactories","registry","locate","schema","labels","assertEx","tryLocate","JSON","stringify","merge","locator","push","register","factory","primary","registerCreatableModuleFactory","registerMany","factories","filter","hasLabels","find","hasAllLabels"]}