@xyo-network/module-factory-locator 2.98.3

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 (51) hide show
  1. package/LICENSE +165 -0
  2. package/README.md +13 -0
  3. package/dist/browser/ModuleFactoryLocator.d.cts +43 -0
  4. package/dist/browser/ModuleFactoryLocator.d.cts.map +1 -0
  5. package/dist/browser/ModuleFactoryLocator.d.mts +43 -0
  6. package/dist/browser/ModuleFactoryLocator.d.mts.map +1 -0
  7. package/dist/browser/ModuleFactoryLocator.d.ts +43 -0
  8. package/dist/browser/ModuleFactoryLocator.d.ts.map +1 -0
  9. package/dist/browser/index.cjs +150 -0
  10. package/dist/browser/index.cjs.map +1 -0
  11. package/dist/browser/index.d.cts +2 -0
  12. package/dist/browser/index.d.cts.map +1 -0
  13. package/dist/browser/index.d.mts +2 -0
  14. package/dist/browser/index.d.mts.map +1 -0
  15. package/dist/browser/index.d.ts +2 -0
  16. package/dist/browser/index.d.ts.map +1 -0
  17. package/dist/browser/index.js +129 -0
  18. package/dist/browser/index.js.map +1 -0
  19. package/dist/browser/standardCreatableFactories.d.cts +4 -0
  20. package/dist/browser/standardCreatableFactories.d.cts.map +1 -0
  21. package/dist/browser/standardCreatableFactories.d.mts +4 -0
  22. package/dist/browser/standardCreatableFactories.d.mts.map +1 -0
  23. package/dist/browser/standardCreatableFactories.d.ts +4 -0
  24. package/dist/browser/standardCreatableFactories.d.ts.map +1 -0
  25. package/dist/node/ModuleFactoryLocator.d.cts +43 -0
  26. package/dist/node/ModuleFactoryLocator.d.cts.map +1 -0
  27. package/dist/node/ModuleFactoryLocator.d.mts +43 -0
  28. package/dist/node/ModuleFactoryLocator.d.mts.map +1 -0
  29. package/dist/node/ModuleFactoryLocator.d.ts +43 -0
  30. package/dist/node/ModuleFactoryLocator.d.ts.map +1 -0
  31. package/dist/node/index.cjs +154 -0
  32. package/dist/node/index.cjs.map +1 -0
  33. package/dist/node/index.d.cts +2 -0
  34. package/dist/node/index.d.cts.map +1 -0
  35. package/dist/node/index.d.mts +2 -0
  36. package/dist/node/index.d.mts.map +1 -0
  37. package/dist/node/index.d.ts +2 -0
  38. package/dist/node/index.d.ts.map +1 -0
  39. package/dist/node/index.js +129 -0
  40. package/dist/node/index.js.map +1 -0
  41. package/dist/node/standardCreatableFactories.d.cts +4 -0
  42. package/dist/node/standardCreatableFactories.d.cts.map +1 -0
  43. package/dist/node/standardCreatableFactories.d.mts +4 -0
  44. package/dist/node/standardCreatableFactories.d.mts.map +1 -0
  45. package/dist/node/standardCreatableFactories.d.ts +4 -0
  46. package/dist/node/standardCreatableFactories.d.ts.map +1 -0
  47. package/package.json +77 -0
  48. package/src/ModuleFactoryLocator.ts +101 -0
  49. package/src/index.ts +1 -0
  50. package/src/standardCreatableFactories.ts +42 -0
  51. package/typedoc.json +5 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/ModuleFactoryLocator.ts","../../src/standardCreatableFactories.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport {\n AttachableModuleInstance,\n CreatableModuleFactory,\n CreatableModuleRegistry,\n hasAllLabels,\n hasLabels,\n LabeledCreatableModuleFactory,\n Labels,\n} from '@xyo-network/module-model'\nimport { Schema } from '@xyo-network/payload-model'\n\nimport { standardCreatableFactories } from './standardCreatableFactories'\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 () => `No module factory for the supplied ${`config schema [${schema}]`}${labels ? ` & labels [${JSON.stringify(labels)}]` : ''} registered`,\n )\n }\n\n /**\n * Registers a single module factory (with optional tags) with the locator\n * @param additional Additional module factories to register\n */\n register(mod: CreatableModuleFactory, labels?: Labels): this {\n this.registerOne(mod, mod.defaultConfigSchema, labels, true)\n mod.configSchemas.map((schema) => {\n this.registerOne(mod, schema, labels, false)\n })\n return this\n }\n\n /**\n * Registers multiple module factories with the locator\n * @param additional Additional module factories to register\n */\n registerMany(mods: CreatableModuleFactory[]): this {\n for (const mod of mods) {\n this.register(mod)\n }\n return this\n }\n\n /**\n * Registers a single module factory (with optional tags) with the locator & a specific schema\n * @param additional Additional module factories to register\n */\n registerOne<TModule extends AttachableModuleInstance>(\n mod: CreatableModuleFactory<TModule>,\n schema: Schema,\n labels?: Labels,\n primary = false,\n ): this {\n const existingFactories = this._registry[schema]\n const factory: LabeledCreatableModuleFactory<TModule> = {\n // Destructure instance properties\n ...mod,\n // Copy static methods\n create: mod.create.bind(mod) as LabeledCreatableModuleFactory<TModule>['create'],\n // Merge module & supplied labels\n labels: Object.assign({}, (mod as LabeledCreatableModuleFactory).labels ?? {}, labels ?? {}),\n }\n this._registry[schema] = primary ? [factory, ...(existingFactories ?? [])] : [...(existingFactories ?? []), factory]\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 { ArchivistConfigSchema } from '@xyo-network/archivist-model'\nimport { ViewArchivist } from '@xyo-network/archivist-view'\nimport { BridgeConfigSchema } from '@xyo-network/bridge-model'\nimport { IdentityDiviner } from '@xyo-network/diviner-identity'\nimport { DivinerConfigSchema } from '@xyo-network/diviner-model'\nimport { HttpBridge } from '@xyo-network/http-bridge'\nimport {\n CreatableModuleFactory,\n LabeledCreatableModuleFactory,\n registerCreatableModuleFactories,\n registerPrimaryCreatableModuleFactory,\n} from '@xyo-network/module-model'\nimport { MemoryNode } from '@xyo-network/node-memory'\nimport { NodeConfigSchema } from '@xyo-network/node-model'\nimport { ViewNode } from '@xyo-network/node-view'\nimport { MemorySentinel } from '@xyo-network/sentinel-memory'\nimport { SentinelConfigSchema } from '@xyo-network/sentinel-model'\nimport { AdhocWitness } from '@xyo-network/witness-adhoc'\nimport { WitnessConfigSchema } from '@xyo-network/witness-model'\n\nexport const standardCreatableFactoriesList: (CreatableModuleFactory | LabeledCreatableModuleFactory)[] = [\n MemoryArchivist,\n HttpBridge,\n MemoryArchivist,\n MemoryNode,\n MemorySentinel,\n ViewArchivist,\n ViewNode,\n AdhocWitness,\n]\n\nexport const standardCreatableFactories = () => {\n const registry = registerCreatableModuleFactories(standardCreatableFactoriesList)\n registerPrimaryCreatableModuleFactory(registry, MemoryNode, NodeConfigSchema)\n registerPrimaryCreatableModuleFactory(registry, MemoryArchivist, ArchivistConfigSchema)\n registerPrimaryCreatableModuleFactory(registry, MemorySentinel, SentinelConfigSchema)\n registerPrimaryCreatableModuleFactory(registry, AdhocWitness, WitnessConfigSchema)\n registerPrimaryCreatableModuleFactory(registry, IdentityDiviner, DivinerConfigSchema)\n registerPrimaryCreatableModuleFactory(registry, HttpBridge, BridgeConfigSchema)\n return registry\n}\n"],"mappings":";;;;AAAA,SAASA,gBAAgB;AACzB,SAIEC,cACAC,iBAGK;;;ACTP,SAASC,uBAAuB;AAChC,SAASC,6BAA6B;AACtC,SAASC,qBAAqB;AAC9B,SAASC,0BAA0B;AACnC,SAASC,uBAAuB;AAChC,SAASC,2BAA2B;AACpC,SAASC,kBAAkB;AAC3B,SAGEC,kCACAC,6CACK;AACP,SAASC,kBAAkB;AAC3B,SAASC,wBAAwB;AACjC,SAASC,gBAAgB;AACzB,SAASC,sBAAsB;AAC/B,SAASC,4BAA4B;AACrC,SAASC,oBAAoB;AAC7B,SAASC,2BAA2B;AAE7B,IAAMC,iCAA6F;EACxGC;EACAC;EACAD;EACAE;EACAC;EACAC;EACAC;EACAC;;AAGK,IAAMC,6BAA6B,6BAAA;AACxC,QAAMC,WAAWC,iCAAiCV,8BAAAA;AAClDW,wCAAsCF,UAAUN,YAAYS,gBAAAA;AAC5DD,wCAAsCF,UAAUR,iBAAiBY,qBAAAA;AACjEF,wCAAsCF,UAAUL,gBAAgBU,oBAAAA;AAChEH,wCAAsCF,UAAUF,cAAcQ,mBAAAA;AAC9DJ,wCAAsCF,UAAUO,iBAAiBC,mBAAAA;AACjEN,wCAAsCF,UAAUP,YAAYgB,kBAAAA;AAC5D,SAAOT;AACT,GAT0C;;;ADfnC,IAAMU,uBAAN,MAAMA;EAjBb,OAiBaA;;;;EACXC,YAA+BC,YAAqCC,2BAAAA,GAA8B;SAAnED,YAAAA;EAAoE;;;;EAKnG,IAAIE,WAA8C;AAChD,WAAO,KAAKF;EACd;;;;;;;EAQAG,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;;;;;EAMAK,SAASC,KAA6BN,QAAuB;AAC3D,SAAKO,YAAYD,KAAKA,IAAIE,qBAAqBR,QAAQ,IAAA;AACvDM,QAAIG,cAAcC,IAAI,CAACX,WAAAA;AACrB,WAAKQ,YAAYD,KAAKP,QAAQC,QAAQ,KAAA;IACxC,CAAA;AACA,WAAO;EACT;;;;;EAMAW,aAAaC,MAAsC;AACjD,eAAWN,OAAOM,MAAM;AACtB,WAAKP,SAASC,GAAAA;IAChB;AACA,WAAO;EACT;;;;;EAMAC,YACED,KACAP,QACAC,QACAa,UAAU,OACJ;AACN,UAAMC,oBAAoB,KAAKnB,UAAUI,MAAAA;AACzC,UAAMgB,UAAkD;;MAEtD,GAAGT;;MAEHU,QAAQV,IAAIU,OAAOC,KAAKX,GAAAA;;MAExBN,QAAQkB,OAAOC,OAAO,CAAC,GAAIb,IAAsCN,UAAU,CAAC,GAAGA,UAAU,CAAC,CAAA;IAC5F;AACA,SAAKL,UAAUI,MAAAA,IAAUc,UAAU;MAACE;SAAaD,qBAAqB,CAAA;QAAO;SAAKA,qBAAqB,CAAA;MAAKC;;AAC5G,WAAO;EACT;;;;;;;EAQAb,UAAUH,QAAgBC,QAAqF;AAE7G,WAAOA;;MAEH,KAAKL,UAAUI,MAAAA,GAASqB,OAAOC,SAAAA,EAAWC,KAAK,CAACP,YAAYQ,aAAaR,SAASf,QAAQA,MAAAA,CAAAA;QAE1F,KAAKL,UAAUI,MAAAA,IAAU,CAAA;EAC/B;AACF;","names":["assertEx","hasAllLabels","hasLabels","MemoryArchivist","ArchivistConfigSchema","ViewArchivist","BridgeConfigSchema","IdentityDiviner","DivinerConfigSchema","HttpBridge","registerCreatableModuleFactories","registerPrimaryCreatableModuleFactory","MemoryNode","NodeConfigSchema","ViewNode","MemorySentinel","SentinelConfigSchema","AdhocWitness","WitnessConfigSchema","standardCreatableFactoriesList","MemoryArchivist","HttpBridge","MemoryNode","MemorySentinel","ViewArchivist","ViewNode","AdhocWitness","standardCreatableFactories","registry","registerCreatableModuleFactories","registerPrimaryCreatableModuleFactory","NodeConfigSchema","ArchivistConfigSchema","SentinelConfigSchema","WitnessConfigSchema","IdentityDiviner","DivinerConfigSchema","BridgeConfigSchema","ModuleFactoryLocator","constructor","_registry","standardCreatableFactories","registry","locate","schema","labels","assertEx","tryLocate","JSON","stringify","register","mod","registerOne","defaultConfigSchema","configSchemas","map","registerMany","mods","primary","existingFactories","factory","create","bind","Object","assign","filter","hasLabels","find","hasAllLabels"]}
@@ -0,0 +1,4 @@
1
+ import { CreatableModuleFactory, LabeledCreatableModuleFactory } from '@xyo-network/module-model';
2
+ export declare const standardCreatableFactoriesList: (CreatableModuleFactory | LabeledCreatableModuleFactory)[];
3
+ export declare const standardCreatableFactories: () => import("@xyo-network/module-model").CreatableModuleRegistry;
4
+ //# sourceMappingURL=standardCreatableFactories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"standardCreatableFactories.d.ts","sourceRoot":"","sources":["../../src/standardCreatableFactories.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,sBAAsB,EACtB,6BAA6B,EAG9B,MAAM,2BAA2B,CAAA;AASlC,eAAO,MAAM,8BAA8B,EAAE,CAAC,sBAAsB,GAAG,6BAA6B,CAAC,EASpG,CAAA;AAED,eAAO,MAAM,0BAA0B,mEAStC,CAAA"}
@@ -0,0 +1,4 @@
1
+ import { CreatableModuleFactory, LabeledCreatableModuleFactory } from '@xyo-network/module-model';
2
+ export declare const standardCreatableFactoriesList: (CreatableModuleFactory | LabeledCreatableModuleFactory)[];
3
+ export declare const standardCreatableFactories: () => import("@xyo-network/module-model").CreatableModuleRegistry;
4
+ //# sourceMappingURL=standardCreatableFactories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"standardCreatableFactories.d.ts","sourceRoot":"","sources":["../../src/standardCreatableFactories.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,sBAAsB,EACtB,6BAA6B,EAG9B,MAAM,2BAA2B,CAAA;AASlC,eAAO,MAAM,8BAA8B,EAAE,CAAC,sBAAsB,GAAG,6BAA6B,CAAC,EASpG,CAAA;AAED,eAAO,MAAM,0BAA0B,mEAStC,CAAA"}
@@ -0,0 +1,4 @@
1
+ import { CreatableModuleFactory, LabeledCreatableModuleFactory } from '@xyo-network/module-model';
2
+ export declare const standardCreatableFactoriesList: (CreatableModuleFactory | LabeledCreatableModuleFactory)[];
3
+ export declare const standardCreatableFactories: () => import("@xyo-network/module-model").CreatableModuleRegistry;
4
+ //# sourceMappingURL=standardCreatableFactories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"standardCreatableFactories.d.ts","sourceRoot":"","sources":["../../src/standardCreatableFactories.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,sBAAsB,EACtB,6BAA6B,EAG9B,MAAM,2BAA2B,CAAA;AASlC,eAAO,MAAM,8BAA8B,EAAE,CAAC,sBAAsB,GAAG,6BAA6B,CAAC,EASpG,CAAA;AAED,eAAO,MAAM,0BAA0B,mEAStC,CAAA"}
@@ -0,0 +1,43 @@
1
+ import { AttachableModuleInstance, CreatableModuleFactory, CreatableModuleRegistry, LabeledCreatableModuleFactory, Labels } from '@xyo-network/module-model';
2
+ import { Schema } from '@xyo-network/payload-model';
3
+ /**
4
+ * A class which encapsulates the Service Locator Pattern for Module Factories
5
+ */
6
+ export declare class ModuleFactoryLocator {
7
+ protected readonly _registry: CreatableModuleRegistry;
8
+ constructor(_registry?: CreatableModuleRegistry);
9
+ /**
10
+ * The current registry for the module factory
11
+ */
12
+ get registry(): Readonly<CreatableModuleRegistry>;
13
+ /**
14
+ * Locates a module factory that matches the supplied schema and labels
15
+ * @param schema The config schema for the module
16
+ * @param labels The labels for the module factory
17
+ * @returns A module factory that matches the supplied schema and labels or throws if one is not found
18
+ */
19
+ locate(schema: string, labels?: Labels): CreatableModuleFactory | LabeledCreatableModuleFactory;
20
+ /**
21
+ * Registers a single module factory (with optional tags) with the locator
22
+ * @param additional Additional module factories to register
23
+ */
24
+ register(mod: CreatableModuleFactory, labels?: Labels): this;
25
+ /**
26
+ * Registers multiple module factories with the locator
27
+ * @param additional Additional module factories to register
28
+ */
29
+ registerMany(mods: CreatableModuleFactory[]): this;
30
+ /**
31
+ * Registers a single module factory (with optional tags) with the locator & a specific schema
32
+ * @param additional Additional module factories to register
33
+ */
34
+ registerOne<TModule extends AttachableModuleInstance>(mod: CreatableModuleFactory<TModule>, schema: Schema, labels?: Labels, primary?: boolean): this;
35
+ /**
36
+ * Tries to locate a module factory that matches the supplied schema and labels
37
+ * @param schema The config schema for the module
38
+ * @param labels The labels for the module factory
39
+ * @returns A module factory that matches the supplied schema and labels or undefined
40
+ */
41
+ tryLocate(schema: string, labels?: Labels): CreatableModuleFactory | LabeledCreatableModuleFactory | undefined;
42
+ }
43
+ //# sourceMappingURL=ModuleFactoryLocator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ModuleFactoryLocator.d.ts","sourceRoot":"","sources":["../../src/ModuleFactoryLocator.ts"],"names":[],"mappings":"AACA,OAAO,EACL,wBAAwB,EACxB,sBAAsB,EACtB,uBAAuB,EAGvB,6BAA6B,EAC7B,MAAM,EACP,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAInD;;GAEG;AACH,qBAAa,oBAAoB;IACnB,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,uBAAuB;gBAAlC,SAAS,GAAE,uBAAsD;IAEhG;;OAEG;IACH,IAAI,QAAQ,IAAI,QAAQ,CAAC,uBAAuB,CAAC,CAEhD;IAED;;;;;OAKG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,sBAAsB,GAAG,6BAA6B;IAO/F;;;OAGG;IACH,QAAQ,CAAC,GAAG,EAAE,sBAAsB,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;IAQ5D;;;OAGG;IACH,YAAY,CAAC,IAAI,EAAE,sBAAsB,EAAE,GAAG,IAAI;IAOlD;;;OAGG;IACH,WAAW,CAAC,OAAO,SAAS,wBAAwB,EAClD,GAAG,EAAE,sBAAsB,CAAC,OAAO,CAAC,EACpC,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,MAAM,EACf,OAAO,UAAQ,GACd,IAAI;IAcP;;;;;OAKG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,sBAAsB,GAAG,6BAA6B,GAAG,SAAS;CAQ/G"}
@@ -0,0 +1,43 @@
1
+ import { AttachableModuleInstance, CreatableModuleFactory, CreatableModuleRegistry, LabeledCreatableModuleFactory, Labels } from '@xyo-network/module-model';
2
+ import { Schema } from '@xyo-network/payload-model';
3
+ /**
4
+ * A class which encapsulates the Service Locator Pattern for Module Factories
5
+ */
6
+ export declare class ModuleFactoryLocator {
7
+ protected readonly _registry: CreatableModuleRegistry;
8
+ constructor(_registry?: CreatableModuleRegistry);
9
+ /**
10
+ * The current registry for the module factory
11
+ */
12
+ get registry(): Readonly<CreatableModuleRegistry>;
13
+ /**
14
+ * Locates a module factory that matches the supplied schema and labels
15
+ * @param schema The config schema for the module
16
+ * @param labels The labels for the module factory
17
+ * @returns A module factory that matches the supplied schema and labels or throws if one is not found
18
+ */
19
+ locate(schema: string, labels?: Labels): CreatableModuleFactory | LabeledCreatableModuleFactory;
20
+ /**
21
+ * Registers a single module factory (with optional tags) with the locator
22
+ * @param additional Additional module factories to register
23
+ */
24
+ register(mod: CreatableModuleFactory, labels?: Labels): this;
25
+ /**
26
+ * Registers multiple module factories with the locator
27
+ * @param additional Additional module factories to register
28
+ */
29
+ registerMany(mods: CreatableModuleFactory[]): this;
30
+ /**
31
+ * Registers a single module factory (with optional tags) with the locator & a specific schema
32
+ * @param additional Additional module factories to register
33
+ */
34
+ registerOne<TModule extends AttachableModuleInstance>(mod: CreatableModuleFactory<TModule>, schema: Schema, labels?: Labels, primary?: boolean): this;
35
+ /**
36
+ * Tries to locate a module factory that matches the supplied schema and labels
37
+ * @param schema The config schema for the module
38
+ * @param labels The labels for the module factory
39
+ * @returns A module factory that matches the supplied schema and labels or undefined
40
+ */
41
+ tryLocate(schema: string, labels?: Labels): CreatableModuleFactory | LabeledCreatableModuleFactory | undefined;
42
+ }
43
+ //# sourceMappingURL=ModuleFactoryLocator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ModuleFactoryLocator.d.ts","sourceRoot":"","sources":["../../src/ModuleFactoryLocator.ts"],"names":[],"mappings":"AACA,OAAO,EACL,wBAAwB,EACxB,sBAAsB,EACtB,uBAAuB,EAGvB,6BAA6B,EAC7B,MAAM,EACP,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAInD;;GAEG;AACH,qBAAa,oBAAoB;IACnB,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,uBAAuB;gBAAlC,SAAS,GAAE,uBAAsD;IAEhG;;OAEG;IACH,IAAI,QAAQ,IAAI,QAAQ,CAAC,uBAAuB,CAAC,CAEhD;IAED;;;;;OAKG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,sBAAsB,GAAG,6BAA6B;IAO/F;;;OAGG;IACH,QAAQ,CAAC,GAAG,EAAE,sBAAsB,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;IAQ5D;;;OAGG;IACH,YAAY,CAAC,IAAI,EAAE,sBAAsB,EAAE,GAAG,IAAI;IAOlD;;;OAGG;IACH,WAAW,CAAC,OAAO,SAAS,wBAAwB,EAClD,GAAG,EAAE,sBAAsB,CAAC,OAAO,CAAC,EACpC,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,MAAM,EACf,OAAO,UAAQ,GACd,IAAI;IAcP;;;;;OAKG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,sBAAsB,GAAG,6BAA6B,GAAG,SAAS;CAQ/G"}
@@ -0,0 +1,43 @@
1
+ import { AttachableModuleInstance, CreatableModuleFactory, CreatableModuleRegistry, LabeledCreatableModuleFactory, Labels } from '@xyo-network/module-model';
2
+ import { Schema } from '@xyo-network/payload-model';
3
+ /**
4
+ * A class which encapsulates the Service Locator Pattern for Module Factories
5
+ */
6
+ export declare class ModuleFactoryLocator {
7
+ protected readonly _registry: CreatableModuleRegistry;
8
+ constructor(_registry?: CreatableModuleRegistry);
9
+ /**
10
+ * The current registry for the module factory
11
+ */
12
+ get registry(): Readonly<CreatableModuleRegistry>;
13
+ /**
14
+ * Locates a module factory that matches the supplied schema and labels
15
+ * @param schema The config schema for the module
16
+ * @param labels The labels for the module factory
17
+ * @returns A module factory that matches the supplied schema and labels or throws if one is not found
18
+ */
19
+ locate(schema: string, labels?: Labels): CreatableModuleFactory | LabeledCreatableModuleFactory;
20
+ /**
21
+ * Registers a single module factory (with optional tags) with the locator
22
+ * @param additional Additional module factories to register
23
+ */
24
+ register(mod: CreatableModuleFactory, labels?: Labels): this;
25
+ /**
26
+ * Registers multiple module factories with the locator
27
+ * @param additional Additional module factories to register
28
+ */
29
+ registerMany(mods: CreatableModuleFactory[]): this;
30
+ /**
31
+ * Registers a single module factory (with optional tags) with the locator & a specific schema
32
+ * @param additional Additional module factories to register
33
+ */
34
+ registerOne<TModule extends AttachableModuleInstance>(mod: CreatableModuleFactory<TModule>, schema: Schema, labels?: Labels, primary?: boolean): this;
35
+ /**
36
+ * Tries to locate a module factory that matches the supplied schema and labels
37
+ * @param schema The config schema for the module
38
+ * @param labels The labels for the module factory
39
+ * @returns A module factory that matches the supplied schema and labels or undefined
40
+ */
41
+ tryLocate(schema: string, labels?: Labels): CreatableModuleFactory | LabeledCreatableModuleFactory | undefined;
42
+ }
43
+ //# sourceMappingURL=ModuleFactoryLocator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ModuleFactoryLocator.d.ts","sourceRoot":"","sources":["../../src/ModuleFactoryLocator.ts"],"names":[],"mappings":"AACA,OAAO,EACL,wBAAwB,EACxB,sBAAsB,EACtB,uBAAuB,EAGvB,6BAA6B,EAC7B,MAAM,EACP,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAInD;;GAEG;AACH,qBAAa,oBAAoB;IACnB,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,uBAAuB;gBAAlC,SAAS,GAAE,uBAAsD;IAEhG;;OAEG;IACH,IAAI,QAAQ,IAAI,QAAQ,CAAC,uBAAuB,CAAC,CAEhD;IAED;;;;;OAKG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,sBAAsB,GAAG,6BAA6B;IAO/F;;;OAGG;IACH,QAAQ,CAAC,GAAG,EAAE,sBAAsB,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;IAQ5D;;;OAGG;IACH,YAAY,CAAC,IAAI,EAAE,sBAAsB,EAAE,GAAG,IAAI;IAOlD;;;OAGG;IACH,WAAW,CAAC,OAAO,SAAS,wBAAwB,EAClD,GAAG,EAAE,sBAAsB,CAAC,OAAO,CAAC,EACpC,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,MAAM,EACf,OAAO,UAAQ,GACd,IAAI;IAcP;;;;;OAKG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,sBAAsB,GAAG,6BAA6B,GAAG,SAAS;CAQ/G"}
@@ -0,0 +1,154 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
20
+
21
+ // src/index.ts
22
+ var src_exports = {};
23
+ __export(src_exports, {
24
+ ModuleFactoryLocator: () => ModuleFactoryLocator
25
+ });
26
+ module.exports = __toCommonJS(src_exports);
27
+
28
+ // src/ModuleFactoryLocator.ts
29
+ var import_assert = require("@xylabs/assert");
30
+ var import_module_model2 = require("@xyo-network/module-model");
31
+
32
+ // src/standardCreatableFactories.ts
33
+ var import_archivist_memory = require("@xyo-network/archivist-memory");
34
+ var import_archivist_model = require("@xyo-network/archivist-model");
35
+ var import_archivist_view = require("@xyo-network/archivist-view");
36
+ var import_bridge_model = require("@xyo-network/bridge-model");
37
+ var import_diviner_identity = require("@xyo-network/diviner-identity");
38
+ var import_diviner_model = require("@xyo-network/diviner-model");
39
+ var import_http_bridge = require("@xyo-network/http-bridge");
40
+ var import_module_model = require("@xyo-network/module-model");
41
+ var import_node_memory = require("@xyo-network/node-memory");
42
+ var import_node_model = require("@xyo-network/node-model");
43
+ var import_node_view = require("@xyo-network/node-view");
44
+ var import_sentinel_memory = require("@xyo-network/sentinel-memory");
45
+ var import_sentinel_model = require("@xyo-network/sentinel-model");
46
+ var import_witness_adhoc = require("@xyo-network/witness-adhoc");
47
+ var import_witness_model = require("@xyo-network/witness-model");
48
+ var standardCreatableFactoriesList = [
49
+ import_archivist_memory.MemoryArchivist,
50
+ import_http_bridge.HttpBridge,
51
+ import_archivist_memory.MemoryArchivist,
52
+ import_node_memory.MemoryNode,
53
+ import_sentinel_memory.MemorySentinel,
54
+ import_archivist_view.ViewArchivist,
55
+ import_node_view.ViewNode,
56
+ import_witness_adhoc.AdhocWitness
57
+ ];
58
+ var standardCreatableFactories = /* @__PURE__ */ __name(() => {
59
+ const registry = (0, import_module_model.registerCreatableModuleFactories)(standardCreatableFactoriesList);
60
+ (0, import_module_model.registerPrimaryCreatableModuleFactory)(registry, import_node_memory.MemoryNode, import_node_model.NodeConfigSchema);
61
+ (0, import_module_model.registerPrimaryCreatableModuleFactory)(registry, import_archivist_memory.MemoryArchivist, import_archivist_model.ArchivistConfigSchema);
62
+ (0, import_module_model.registerPrimaryCreatableModuleFactory)(registry, import_sentinel_memory.MemorySentinel, import_sentinel_model.SentinelConfigSchema);
63
+ (0, import_module_model.registerPrimaryCreatableModuleFactory)(registry, import_witness_adhoc.AdhocWitness, import_witness_model.WitnessConfigSchema);
64
+ (0, import_module_model.registerPrimaryCreatableModuleFactory)(registry, import_diviner_identity.IdentityDiviner, import_diviner_model.DivinerConfigSchema);
65
+ (0, import_module_model.registerPrimaryCreatableModuleFactory)(registry, import_http_bridge.HttpBridge, import_bridge_model.BridgeConfigSchema);
66
+ return registry;
67
+ }, "standardCreatableFactories");
68
+
69
+ // src/ModuleFactoryLocator.ts
70
+ var _ModuleFactoryLocator = class _ModuleFactoryLocator {
71
+ _registry;
72
+ constructor(_registry = standardCreatableFactories()) {
73
+ this._registry = _registry;
74
+ }
75
+ /**
76
+ * The current registry for the module factory
77
+ */
78
+ get registry() {
79
+ return this._registry;
80
+ }
81
+ /**
82
+ * Locates a module factory that matches the supplied schema and labels
83
+ * @param schema The config schema for the module
84
+ * @param labels The labels for the module factory
85
+ * @returns A module factory that matches the supplied schema and labels or throws if one is not found
86
+ */
87
+ locate(schema, labels) {
88
+ return (0, import_assert.assertEx)(this.tryLocate(schema, labels), () => `No module factory for the supplied ${`config schema [${schema}]`}${labels ? ` & labels [${JSON.stringify(labels)}]` : ""} registered`);
89
+ }
90
+ /**
91
+ * Registers a single module factory (with optional tags) with the locator
92
+ * @param additional Additional module factories to register
93
+ */
94
+ register(mod, labels) {
95
+ this.registerOne(mod, mod.defaultConfigSchema, labels, true);
96
+ mod.configSchemas.map((schema) => {
97
+ this.registerOne(mod, schema, labels, false);
98
+ });
99
+ return this;
100
+ }
101
+ /**
102
+ * Registers multiple module factories with the locator
103
+ * @param additional Additional module factories to register
104
+ */
105
+ registerMany(mods) {
106
+ for (const mod of mods) {
107
+ this.register(mod);
108
+ }
109
+ return this;
110
+ }
111
+ /**
112
+ * Registers a single module factory (with optional tags) with the locator & a specific schema
113
+ * @param additional Additional module factories to register
114
+ */
115
+ registerOne(mod, schema, labels, primary = false) {
116
+ const existingFactories = this._registry[schema];
117
+ const factory = {
118
+ // Destructure instance properties
119
+ ...mod,
120
+ // Copy static methods
121
+ create: mod.create.bind(mod),
122
+ // Merge module & supplied labels
123
+ labels: Object.assign({}, mod.labels ?? {}, labels ?? {})
124
+ };
125
+ this._registry[schema] = primary ? [
126
+ factory,
127
+ ...existingFactories ?? []
128
+ ] : [
129
+ ...existingFactories ?? [],
130
+ factory
131
+ ];
132
+ return this;
133
+ }
134
+ /**
135
+ * Tries to locate a module factory that matches the supplied schema and labels
136
+ * @param schema The config schema for the module
137
+ * @param labels The labels for the module factory
138
+ * @returns A module factory that matches the supplied schema and labels or undefined
139
+ */
140
+ tryLocate(schema, labels) {
141
+ var _a, _b;
142
+ return labels ? (
143
+ // Find the first factory that has labels and has all the labels provided
144
+ (_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))
145
+ ) : (_b = this._registry[schema]) == null ? void 0 : _b[0];
146
+ }
147
+ };
148
+ __name(_ModuleFactoryLocator, "ModuleFactoryLocator");
149
+ var ModuleFactoryLocator = _ModuleFactoryLocator;
150
+ // Annotate the CommonJS export names for ESM import in node:
151
+ 0 && (module.exports = {
152
+ ModuleFactoryLocator
153
+ });
154
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/index.ts","../../src/ModuleFactoryLocator.ts","../../src/standardCreatableFactories.ts"],"sourcesContent":["export * from './ModuleFactoryLocator'\n","import { assertEx } from '@xylabs/assert'\nimport {\n AttachableModuleInstance,\n CreatableModuleFactory,\n CreatableModuleRegistry,\n hasAllLabels,\n hasLabels,\n LabeledCreatableModuleFactory,\n Labels,\n} from '@xyo-network/module-model'\nimport { Schema } from '@xyo-network/payload-model'\n\nimport { standardCreatableFactories } from './standardCreatableFactories'\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 () => `No module factory for the supplied ${`config schema [${schema}]`}${labels ? ` & labels [${JSON.stringify(labels)}]` : ''} registered`,\n )\n }\n\n /**\n * Registers a single module factory (with optional tags) with the locator\n * @param additional Additional module factories to register\n */\n register(mod: CreatableModuleFactory, labels?: Labels): this {\n this.registerOne(mod, mod.defaultConfigSchema, labels, true)\n mod.configSchemas.map((schema) => {\n this.registerOne(mod, schema, labels, false)\n })\n return this\n }\n\n /**\n * Registers multiple module factories with the locator\n * @param additional Additional module factories to register\n */\n registerMany(mods: CreatableModuleFactory[]): this {\n for (const mod of mods) {\n this.register(mod)\n }\n return this\n }\n\n /**\n * Registers a single module factory (with optional tags) with the locator & a specific schema\n * @param additional Additional module factories to register\n */\n registerOne<TModule extends AttachableModuleInstance>(\n mod: CreatableModuleFactory<TModule>,\n schema: Schema,\n labels?: Labels,\n primary = false,\n ): this {\n const existingFactories = this._registry[schema]\n const factory: LabeledCreatableModuleFactory<TModule> = {\n // Destructure instance properties\n ...mod,\n // Copy static methods\n create: mod.create.bind(mod) as LabeledCreatableModuleFactory<TModule>['create'],\n // Merge module & supplied labels\n labels: Object.assign({}, (mod as LabeledCreatableModuleFactory).labels ?? {}, labels ?? {}),\n }\n this._registry[schema] = primary ? [factory, ...(existingFactories ?? [])] : [...(existingFactories ?? []), factory]\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 { ArchivistConfigSchema } from '@xyo-network/archivist-model'\nimport { ViewArchivist } from '@xyo-network/archivist-view'\nimport { BridgeConfigSchema } from '@xyo-network/bridge-model'\nimport { IdentityDiviner } from '@xyo-network/diviner-identity'\nimport { DivinerConfigSchema } from '@xyo-network/diviner-model'\nimport { HttpBridge } from '@xyo-network/http-bridge'\nimport {\n CreatableModuleFactory,\n LabeledCreatableModuleFactory,\n registerCreatableModuleFactories,\n registerPrimaryCreatableModuleFactory,\n} from '@xyo-network/module-model'\nimport { MemoryNode } from '@xyo-network/node-memory'\nimport { NodeConfigSchema } from '@xyo-network/node-model'\nimport { ViewNode } from '@xyo-network/node-view'\nimport { MemorySentinel } from '@xyo-network/sentinel-memory'\nimport { SentinelConfigSchema } from '@xyo-network/sentinel-model'\nimport { AdhocWitness } from '@xyo-network/witness-adhoc'\nimport { WitnessConfigSchema } from '@xyo-network/witness-model'\n\nexport const standardCreatableFactoriesList: (CreatableModuleFactory | LabeledCreatableModuleFactory)[] = [\n MemoryArchivist,\n HttpBridge,\n MemoryArchivist,\n MemoryNode,\n MemorySentinel,\n ViewArchivist,\n ViewNode,\n AdhocWitness,\n]\n\nexport const standardCreatableFactories = () => {\n const registry = registerCreatableModuleFactories(standardCreatableFactoriesList)\n registerPrimaryCreatableModuleFactory(registry, MemoryNode, NodeConfigSchema)\n registerPrimaryCreatableModuleFactory(registry, MemoryArchivist, ArchivistConfigSchema)\n registerPrimaryCreatableModuleFactory(registry, MemorySentinel, SentinelConfigSchema)\n registerPrimaryCreatableModuleFactory(registry, AdhocWitness, WitnessConfigSchema)\n registerPrimaryCreatableModuleFactory(registry, IdentityDiviner, DivinerConfigSchema)\n registerPrimaryCreatableModuleFactory(registry, HttpBridge, BridgeConfigSchema)\n return registry\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;ACAA,oBAAyB;AACzB,IAAAA,uBAQO;;;ACTP,8BAAgC;AAChC,6BAAsC;AACtC,4BAA8B;AAC9B,0BAAmC;AACnC,8BAAgC;AAChC,2BAAoC;AACpC,yBAA2B;AAC3B,0BAKO;AACP,yBAA2B;AAC3B,wBAAiC;AACjC,uBAAyB;AACzB,6BAA+B;AAC/B,4BAAqC;AACrC,2BAA6B;AAC7B,2BAAoC;AAE7B,IAAMC,iCAA6F;EACxGC;EACAC;EACAD;EACAE;EACAC;EACAC;EACAC;EACAC;;AAGK,IAAMC,6BAA6B,6BAAA;AACxC,QAAMC,eAAWC,sDAAiCV,8BAAAA;AAClDW,iEAAsCF,UAAUN,+BAAYS,kCAAAA;AAC5DD,iEAAsCF,UAAUR,yCAAiBY,4CAAAA;AACjEF,iEAAsCF,UAAUL,uCAAgBU,0CAAAA;AAChEH,iEAAsCF,UAAUF,mCAAcQ,wCAAAA;AAC9DJ,iEAAsCF,UAAUO,yCAAiBC,wCAAAA;AACjEN,iEAAsCF,UAAUP,+BAAYgB,sCAAAA;AAC5D,SAAOT;AACT,GAT0C;;;ADfnC,IAAMU,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,wBACL,KAAKC,UAAUH,QAAQC,MAAAA,GACvB,MAAM,sCAAsC,kBAAkBD,MAAAA,GAAS,GAAGC,SAAS,cAAcG,KAAKC,UAAUJ,MAAAA,CAAAA,MAAa,EAAA,aAAe;EAEhJ;;;;;EAMAK,SAASC,KAA6BN,QAAuB;AAC3D,SAAKO,YAAYD,KAAKA,IAAIE,qBAAqBR,QAAQ,IAAA;AACvDM,QAAIG,cAAcC,IAAI,CAACX,WAAAA;AACrB,WAAKQ,YAAYD,KAAKP,QAAQC,QAAQ,KAAA;IACxC,CAAA;AACA,WAAO;EACT;;;;;EAMAW,aAAaC,MAAsC;AACjD,eAAWN,OAAOM,MAAM;AACtB,WAAKP,SAASC,GAAAA;IAChB;AACA,WAAO;EACT;;;;;EAMAC,YACED,KACAP,QACAC,QACAa,UAAU,OACJ;AACN,UAAMC,oBAAoB,KAAKnB,UAAUI,MAAAA;AACzC,UAAMgB,UAAkD;;MAEtD,GAAGT;;MAEHU,QAAQV,IAAIU,OAAOC,KAAKX,GAAAA;;MAExBN,QAAQkB,OAAOC,OAAO,CAAC,GAAIb,IAAsCN,UAAU,CAAC,GAAGA,UAAU,CAAC,CAAA;IAC5F;AACA,SAAKL,UAAUI,MAAAA,IAAUc,UAAU;MAACE;SAAaD,qBAAqB,CAAA;QAAO;SAAKA,qBAAqB,CAAA;MAAKC;;AAC5G,WAAO;EACT;;;;;;;EAQAb,UAAUH,QAAgBC,QAAqF;AA5FjH;AA8FI,WAAOA;;OAEH,UAAKL,UAAUI,MAAAA,MAAf,mBAAwBqB,OAAOC,gCAAWC,KAAK,CAACP,gBAAYQ,mCAAaR,mCAASf,QAAQA,MAAAA;SAE1F,UAAKL,UAAUI,MAAAA,MAAf,mBAAyB;EAC/B;AACF;AAnFaN;AAAN,IAAMA,uBAAN;","names":["import_module_model","standardCreatableFactoriesList","MemoryArchivist","HttpBridge","MemoryNode","MemorySentinel","ViewArchivist","ViewNode","AdhocWitness","standardCreatableFactories","registry","registerCreatableModuleFactories","registerPrimaryCreatableModuleFactory","NodeConfigSchema","ArchivistConfigSchema","SentinelConfigSchema","WitnessConfigSchema","IdentityDiviner","DivinerConfigSchema","BridgeConfigSchema","ModuleFactoryLocator","constructor","_registry","standardCreatableFactories","registry","locate","schema","labels","assertEx","tryLocate","JSON","stringify","register","mod","registerOne","defaultConfigSchema","configSchemas","map","registerMany","mods","primary","existingFactories","factory","create","bind","Object","assign","filter","hasLabels","find","hasAllLabels"]}
@@ -0,0 +1,2 @@
1
+ export * from './ModuleFactoryLocator';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAA"}
@@ -0,0 +1,2 @@
1
+ export * from './ModuleFactoryLocator';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAA"}
@@ -0,0 +1,2 @@
1
+ export * from './ModuleFactoryLocator';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAA"}
@@ -0,0 +1,129 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
+
4
+ // src/ModuleFactoryLocator.ts
5
+ import { assertEx } from "@xylabs/assert";
6
+ import { hasAllLabels, hasLabels } from "@xyo-network/module-model";
7
+
8
+ // src/standardCreatableFactories.ts
9
+ import { MemoryArchivist } from "@xyo-network/archivist-memory";
10
+ import { ArchivistConfigSchema } from "@xyo-network/archivist-model";
11
+ import { ViewArchivist } from "@xyo-network/archivist-view";
12
+ import { BridgeConfigSchema } from "@xyo-network/bridge-model";
13
+ import { IdentityDiviner } from "@xyo-network/diviner-identity";
14
+ import { DivinerConfigSchema } from "@xyo-network/diviner-model";
15
+ import { HttpBridge } from "@xyo-network/http-bridge";
16
+ import { registerCreatableModuleFactories, registerPrimaryCreatableModuleFactory } from "@xyo-network/module-model";
17
+ import { MemoryNode } from "@xyo-network/node-memory";
18
+ import { NodeConfigSchema } from "@xyo-network/node-model";
19
+ import { ViewNode } from "@xyo-network/node-view";
20
+ import { MemorySentinel } from "@xyo-network/sentinel-memory";
21
+ import { SentinelConfigSchema } from "@xyo-network/sentinel-model";
22
+ import { AdhocWitness } from "@xyo-network/witness-adhoc";
23
+ import { WitnessConfigSchema } from "@xyo-network/witness-model";
24
+ var standardCreatableFactoriesList = [
25
+ MemoryArchivist,
26
+ HttpBridge,
27
+ MemoryArchivist,
28
+ MemoryNode,
29
+ MemorySentinel,
30
+ ViewArchivist,
31
+ ViewNode,
32
+ AdhocWitness
33
+ ];
34
+ var standardCreatableFactories = /* @__PURE__ */ __name(() => {
35
+ const registry = registerCreatableModuleFactories(standardCreatableFactoriesList);
36
+ registerPrimaryCreatableModuleFactory(registry, MemoryNode, NodeConfigSchema);
37
+ registerPrimaryCreatableModuleFactory(registry, MemoryArchivist, ArchivistConfigSchema);
38
+ registerPrimaryCreatableModuleFactory(registry, MemorySentinel, SentinelConfigSchema);
39
+ registerPrimaryCreatableModuleFactory(registry, AdhocWitness, WitnessConfigSchema);
40
+ registerPrimaryCreatableModuleFactory(registry, IdentityDiviner, DivinerConfigSchema);
41
+ registerPrimaryCreatableModuleFactory(registry, HttpBridge, BridgeConfigSchema);
42
+ return registry;
43
+ }, "standardCreatableFactories");
44
+
45
+ // src/ModuleFactoryLocator.ts
46
+ var _ModuleFactoryLocator = class _ModuleFactoryLocator {
47
+ _registry;
48
+ constructor(_registry = standardCreatableFactories()) {
49
+ this._registry = _registry;
50
+ }
51
+ /**
52
+ * The current registry for the module factory
53
+ */
54
+ get registry() {
55
+ return this._registry;
56
+ }
57
+ /**
58
+ * Locates a module factory that matches the supplied schema and labels
59
+ * @param schema The config schema for the module
60
+ * @param labels The labels for the module factory
61
+ * @returns A module factory that matches the supplied schema and labels or throws if one is not found
62
+ */
63
+ locate(schema, labels) {
64
+ return assertEx(this.tryLocate(schema, labels), () => `No module factory for the supplied ${`config schema [${schema}]`}${labels ? ` & labels [${JSON.stringify(labels)}]` : ""} registered`);
65
+ }
66
+ /**
67
+ * Registers a single module factory (with optional tags) with the locator
68
+ * @param additional Additional module factories to register
69
+ */
70
+ register(mod, labels) {
71
+ this.registerOne(mod, mod.defaultConfigSchema, labels, true);
72
+ mod.configSchemas.map((schema) => {
73
+ this.registerOne(mod, schema, labels, false);
74
+ });
75
+ return this;
76
+ }
77
+ /**
78
+ * Registers multiple module factories with the locator
79
+ * @param additional Additional module factories to register
80
+ */
81
+ registerMany(mods) {
82
+ for (const mod of mods) {
83
+ this.register(mod);
84
+ }
85
+ return this;
86
+ }
87
+ /**
88
+ * Registers a single module factory (with optional tags) with the locator & a specific schema
89
+ * @param additional Additional module factories to register
90
+ */
91
+ registerOne(mod, schema, labels, primary = false) {
92
+ const existingFactories = this._registry[schema];
93
+ const factory = {
94
+ // Destructure instance properties
95
+ ...mod,
96
+ // Copy static methods
97
+ create: mod.create.bind(mod),
98
+ // Merge module & supplied labels
99
+ labels: Object.assign({}, mod.labels ?? {}, labels ?? {})
100
+ };
101
+ this._registry[schema] = primary ? [
102
+ factory,
103
+ ...existingFactories ?? []
104
+ ] : [
105
+ ...existingFactories ?? [],
106
+ factory
107
+ ];
108
+ return this;
109
+ }
110
+ /**
111
+ * Tries to locate a module factory that matches the supplied schema and labels
112
+ * @param schema The config schema for the module
113
+ * @param labels The labels for the module factory
114
+ * @returns A module factory that matches the supplied schema and labels or undefined
115
+ */
116
+ tryLocate(schema, labels) {
117
+ var _a, _b;
118
+ return labels ? (
119
+ // Find the first factory that has labels and has all the labels provided
120
+ (_a = this._registry[schema]) == null ? void 0 : _a.filter(hasLabels).find((factory) => hasAllLabels(factory == null ? void 0 : factory.labels, labels))
121
+ ) : (_b = this._registry[schema]) == null ? void 0 : _b[0];
122
+ }
123
+ };
124
+ __name(_ModuleFactoryLocator, "ModuleFactoryLocator");
125
+ var ModuleFactoryLocator = _ModuleFactoryLocator;
126
+ export {
127
+ ModuleFactoryLocator
128
+ };
129
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/ModuleFactoryLocator.ts","../../src/standardCreatableFactories.ts"],"sourcesContent":["import { assertEx } from '@xylabs/assert'\nimport {\n AttachableModuleInstance,\n CreatableModuleFactory,\n CreatableModuleRegistry,\n hasAllLabels,\n hasLabels,\n LabeledCreatableModuleFactory,\n Labels,\n} from '@xyo-network/module-model'\nimport { Schema } from '@xyo-network/payload-model'\n\nimport { standardCreatableFactories } from './standardCreatableFactories'\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 () => `No module factory for the supplied ${`config schema [${schema}]`}${labels ? ` & labels [${JSON.stringify(labels)}]` : ''} registered`,\n )\n }\n\n /**\n * Registers a single module factory (with optional tags) with the locator\n * @param additional Additional module factories to register\n */\n register(mod: CreatableModuleFactory, labels?: Labels): this {\n this.registerOne(mod, mod.defaultConfigSchema, labels, true)\n mod.configSchemas.map((schema) => {\n this.registerOne(mod, schema, labels, false)\n })\n return this\n }\n\n /**\n * Registers multiple module factories with the locator\n * @param additional Additional module factories to register\n */\n registerMany(mods: CreatableModuleFactory[]): this {\n for (const mod of mods) {\n this.register(mod)\n }\n return this\n }\n\n /**\n * Registers a single module factory (with optional tags) with the locator & a specific schema\n * @param additional Additional module factories to register\n */\n registerOne<TModule extends AttachableModuleInstance>(\n mod: CreatableModuleFactory<TModule>,\n schema: Schema,\n labels?: Labels,\n primary = false,\n ): this {\n const existingFactories = this._registry[schema]\n const factory: LabeledCreatableModuleFactory<TModule> = {\n // Destructure instance properties\n ...mod,\n // Copy static methods\n create: mod.create.bind(mod) as LabeledCreatableModuleFactory<TModule>['create'],\n // Merge module & supplied labels\n labels: Object.assign({}, (mod as LabeledCreatableModuleFactory).labels ?? {}, labels ?? {}),\n }\n this._registry[schema] = primary ? [factory, ...(existingFactories ?? [])] : [...(existingFactories ?? []), factory]\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 { ArchivistConfigSchema } from '@xyo-network/archivist-model'\nimport { ViewArchivist } from '@xyo-network/archivist-view'\nimport { BridgeConfigSchema } from '@xyo-network/bridge-model'\nimport { IdentityDiviner } from '@xyo-network/diviner-identity'\nimport { DivinerConfigSchema } from '@xyo-network/diviner-model'\nimport { HttpBridge } from '@xyo-network/http-bridge'\nimport {\n CreatableModuleFactory,\n LabeledCreatableModuleFactory,\n registerCreatableModuleFactories,\n registerPrimaryCreatableModuleFactory,\n} from '@xyo-network/module-model'\nimport { MemoryNode } from '@xyo-network/node-memory'\nimport { NodeConfigSchema } from '@xyo-network/node-model'\nimport { ViewNode } from '@xyo-network/node-view'\nimport { MemorySentinel } from '@xyo-network/sentinel-memory'\nimport { SentinelConfigSchema } from '@xyo-network/sentinel-model'\nimport { AdhocWitness } from '@xyo-network/witness-adhoc'\nimport { WitnessConfigSchema } from '@xyo-network/witness-model'\n\nexport const standardCreatableFactoriesList: (CreatableModuleFactory | LabeledCreatableModuleFactory)[] = [\n MemoryArchivist,\n HttpBridge,\n MemoryArchivist,\n MemoryNode,\n MemorySentinel,\n ViewArchivist,\n ViewNode,\n AdhocWitness,\n]\n\nexport const standardCreatableFactories = () => {\n const registry = registerCreatableModuleFactories(standardCreatableFactoriesList)\n registerPrimaryCreatableModuleFactory(registry, MemoryNode, NodeConfigSchema)\n registerPrimaryCreatableModuleFactory(registry, MemoryArchivist, ArchivistConfigSchema)\n registerPrimaryCreatableModuleFactory(registry, MemorySentinel, SentinelConfigSchema)\n registerPrimaryCreatableModuleFactory(registry, AdhocWitness, WitnessConfigSchema)\n registerPrimaryCreatableModuleFactory(registry, IdentityDiviner, DivinerConfigSchema)\n registerPrimaryCreatableModuleFactory(registry, HttpBridge, BridgeConfigSchema)\n return registry\n}\n"],"mappings":";;;;AAAA,SAASA,gBAAgB;AACzB,SAIEC,cACAC,iBAGK;;;ACTP,SAASC,uBAAuB;AAChC,SAASC,6BAA6B;AACtC,SAASC,qBAAqB;AAC9B,SAASC,0BAA0B;AACnC,SAASC,uBAAuB;AAChC,SAASC,2BAA2B;AACpC,SAASC,kBAAkB;AAC3B,SAGEC,kCACAC,6CACK;AACP,SAASC,kBAAkB;AAC3B,SAASC,wBAAwB;AACjC,SAASC,gBAAgB;AACzB,SAASC,sBAAsB;AAC/B,SAASC,4BAA4B;AACrC,SAASC,oBAAoB;AAC7B,SAASC,2BAA2B;AAE7B,IAAMC,iCAA6F;EACxGC;EACAC;EACAD;EACAE;EACAC;EACAC;EACAC;EACAC;;AAGK,IAAMC,6BAA6B,6BAAA;AACxC,QAAMC,WAAWC,iCAAiCV,8BAAAA;AAClDW,wCAAsCF,UAAUN,YAAYS,gBAAAA;AAC5DD,wCAAsCF,UAAUR,iBAAiBY,qBAAAA;AACjEF,wCAAsCF,UAAUL,gBAAgBU,oBAAAA;AAChEH,wCAAsCF,UAAUF,cAAcQ,mBAAAA;AAC9DJ,wCAAsCF,UAAUO,iBAAiBC,mBAAAA;AACjEN,wCAAsCF,UAAUP,YAAYgB,kBAAAA;AAC5D,SAAOT;AACT,GAT0C;;;ADfnC,IAAMU,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,SACL,KAAKC,UAAUH,QAAQC,MAAAA,GACvB,MAAM,sCAAsC,kBAAkBD,MAAAA,GAAS,GAAGC,SAAS,cAAcG,KAAKC,UAAUJ,MAAAA,CAAAA,MAAa,EAAA,aAAe;EAEhJ;;;;;EAMAK,SAASC,KAA6BN,QAAuB;AAC3D,SAAKO,YAAYD,KAAKA,IAAIE,qBAAqBR,QAAQ,IAAA;AACvDM,QAAIG,cAAcC,IAAI,CAACX,WAAAA;AACrB,WAAKQ,YAAYD,KAAKP,QAAQC,QAAQ,KAAA;IACxC,CAAA;AACA,WAAO;EACT;;;;;EAMAW,aAAaC,MAAsC;AACjD,eAAWN,OAAOM,MAAM;AACtB,WAAKP,SAASC,GAAAA;IAChB;AACA,WAAO;EACT;;;;;EAMAC,YACED,KACAP,QACAC,QACAa,UAAU,OACJ;AACN,UAAMC,oBAAoB,KAAKnB,UAAUI,MAAAA;AACzC,UAAMgB,UAAkD;;MAEtD,GAAGT;;MAEHU,QAAQV,IAAIU,OAAOC,KAAKX,GAAAA;;MAExBN,QAAQkB,OAAOC,OAAO,CAAC,GAAIb,IAAsCN,UAAU,CAAC,GAAGA,UAAU,CAAC,CAAA;IAC5F;AACA,SAAKL,UAAUI,MAAAA,IAAUc,UAAU;MAACE;SAAaD,qBAAqB,CAAA;QAAO;SAAKA,qBAAqB,CAAA;MAAKC;;AAC5G,WAAO;EACT;;;;;;;EAQAb,UAAUH,QAAgBC,QAAqF;AA5FjH;AA8FI,WAAOA;;OAEH,UAAKL,UAAUI,MAAAA,MAAf,mBAAwBqB,OAAOC,WAAWC,KAAK,CAACP,YAAYQ,aAAaR,mCAASf,QAAQA,MAAAA;SAE1F,UAAKL,UAAUI,MAAAA,MAAf,mBAAyB;EAC/B;AACF;AAnFaN;AAAN,IAAMA,uBAAN;","names":["assertEx","hasAllLabels","hasLabels","MemoryArchivist","ArchivistConfigSchema","ViewArchivist","BridgeConfigSchema","IdentityDiviner","DivinerConfigSchema","HttpBridge","registerCreatableModuleFactories","registerPrimaryCreatableModuleFactory","MemoryNode","NodeConfigSchema","ViewNode","MemorySentinel","SentinelConfigSchema","AdhocWitness","WitnessConfigSchema","standardCreatableFactoriesList","MemoryArchivist","HttpBridge","MemoryNode","MemorySentinel","ViewArchivist","ViewNode","AdhocWitness","standardCreatableFactories","registry","registerCreatableModuleFactories","registerPrimaryCreatableModuleFactory","NodeConfigSchema","ArchivistConfigSchema","SentinelConfigSchema","WitnessConfigSchema","IdentityDiviner","DivinerConfigSchema","BridgeConfigSchema","ModuleFactoryLocator","constructor","_registry","standardCreatableFactories","registry","locate","schema","labels","assertEx","tryLocate","JSON","stringify","register","mod","registerOne","defaultConfigSchema","configSchemas","map","registerMany","mods","primary","existingFactories","factory","create","bind","Object","assign","filter","hasLabels","find","hasAllLabels"]}
@@ -0,0 +1,4 @@
1
+ import { CreatableModuleFactory, LabeledCreatableModuleFactory } from '@xyo-network/module-model';
2
+ export declare const standardCreatableFactoriesList: (CreatableModuleFactory | LabeledCreatableModuleFactory)[];
3
+ export declare const standardCreatableFactories: () => import("@xyo-network/module-model").CreatableModuleRegistry;
4
+ //# sourceMappingURL=standardCreatableFactories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"standardCreatableFactories.d.ts","sourceRoot":"","sources":["../../src/standardCreatableFactories.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,sBAAsB,EACtB,6BAA6B,EAG9B,MAAM,2BAA2B,CAAA;AASlC,eAAO,MAAM,8BAA8B,EAAE,CAAC,sBAAsB,GAAG,6BAA6B,CAAC,EASpG,CAAA;AAED,eAAO,MAAM,0BAA0B,mEAStC,CAAA"}
@@ -0,0 +1,4 @@
1
+ import { CreatableModuleFactory, LabeledCreatableModuleFactory } from '@xyo-network/module-model';
2
+ export declare const standardCreatableFactoriesList: (CreatableModuleFactory | LabeledCreatableModuleFactory)[];
3
+ export declare const standardCreatableFactories: () => import("@xyo-network/module-model").CreatableModuleRegistry;
4
+ //# sourceMappingURL=standardCreatableFactories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"standardCreatableFactories.d.ts","sourceRoot":"","sources":["../../src/standardCreatableFactories.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,sBAAsB,EACtB,6BAA6B,EAG9B,MAAM,2BAA2B,CAAA;AASlC,eAAO,MAAM,8BAA8B,EAAE,CAAC,sBAAsB,GAAG,6BAA6B,CAAC,EASpG,CAAA;AAED,eAAO,MAAM,0BAA0B,mEAStC,CAAA"}
@@ -0,0 +1,4 @@
1
+ import { CreatableModuleFactory, LabeledCreatableModuleFactory } from '@xyo-network/module-model';
2
+ export declare const standardCreatableFactoriesList: (CreatableModuleFactory | LabeledCreatableModuleFactory)[];
3
+ export declare const standardCreatableFactories: () => import("@xyo-network/module-model").CreatableModuleRegistry;
4
+ //# sourceMappingURL=standardCreatableFactories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"standardCreatableFactories.d.ts","sourceRoot":"","sources":["../../src/standardCreatableFactories.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,sBAAsB,EACtB,6BAA6B,EAG9B,MAAM,2BAA2B,CAAA;AASlC,eAAO,MAAM,8BAA8B,EAAE,CAAC,sBAAsB,GAAG,6BAA6B,CAAC,EASpG,CAAA;AAED,eAAO,MAAM,0BAA0B,mEAStC,CAAA"}