@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.
- package/dist/browser/ModuleFactoryLocator.d.cts +4 -0
- package/dist/browser/ModuleFactoryLocator.d.cts.map +1 -1
- package/dist/browser/ModuleFactoryLocator.d.mts +4 -0
- package/dist/browser/ModuleFactoryLocator.d.mts.map +1 -1
- package/dist/browser/ModuleFactoryLocator.d.ts +4 -0
- package/dist/browser/ModuleFactoryLocator.d.ts.map +1 -1
- package/dist/browser/index.cjs +14 -9
- package/dist/browser/index.cjs.map +1 -1
- package/dist/browser/{index.js → index.mjs} +15 -10
- package/dist/browser/index.mjs.map +1 -0
- package/dist/neutral/ModuleFactoryLocator.d.cts +4 -0
- package/dist/neutral/ModuleFactoryLocator.d.cts.map +1 -1
- package/dist/neutral/ModuleFactoryLocator.d.mts +4 -0
- package/dist/neutral/ModuleFactoryLocator.d.mts.map +1 -1
- package/dist/neutral/ModuleFactoryLocator.d.ts +4 -0
- package/dist/neutral/ModuleFactoryLocator.d.ts.map +1 -1
- package/dist/neutral/index.cjs +14 -9
- package/dist/neutral/index.cjs.map +1 -1
- package/dist/neutral/{index.js → index.mjs} +15 -10
- package/dist/neutral/index.mjs.map +1 -0
- package/dist/node/ModuleFactoryLocator.d.cts +4 -0
- package/dist/node/ModuleFactoryLocator.d.cts.map +1 -1
- package/dist/node/ModuleFactoryLocator.d.mts +4 -0
- package/dist/node/ModuleFactoryLocator.d.mts.map +1 -1
- package/dist/node/ModuleFactoryLocator.d.ts +4 -0
- package/dist/node/ModuleFactoryLocator.d.ts.map +1 -1
- package/dist/node/index.cjs +14 -9
- package/dist/node/index.cjs.map +1 -1
- package/dist/node/{index.js → index.mjs} +15 -10
- package/dist/node/index.mjs.map +1 -0
- package/package.json +19 -19
- package/src/ModuleFactoryLocator.ts +19 -6
- package/src/standardCreatableFactories.ts +1 -1
- package/dist/browser/index.js.map +0 -1
- package/dist/neutral/index.js.map +0 -1
- 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;
|
|
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;
|
|
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;
|
|
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"}
|
package/dist/browser/index.cjs
CHANGED
|
@@ -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
|
|
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.
|
|
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;
|
|
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;
|
|
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;
|
|
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"}
|
package/dist/neutral/index.cjs
CHANGED
|
@@ -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
|
|
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.
|
|
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;
|
|
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;
|
|
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;
|
|
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"}
|
package/dist/node/index.cjs
CHANGED
|
@@ -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");
|
package/dist/node/index.cjs.map
CHANGED
|
@@ -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
|
|
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.
|
|
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.
|
|
14
|
-
"@xyo-network/archivist-memory": "^2.
|
|
15
|
-
"@xyo-network/archivist-view": "^2.
|
|
16
|
-
"@xyo-network/bridge-http": "^2.
|
|
17
|
-
"@xyo-network/diviner-boundwitness-memory": "^2.
|
|
18
|
-
"@xyo-network/diviner-identity": "^2.
|
|
19
|
-
"@xyo-network/diviner-payload-memory": "^2.
|
|
20
|
-
"@xyo-network/module-model": "^2.
|
|
21
|
-
"@xyo-network/node-memory": "^2.
|
|
22
|
-
"@xyo-network/node-view": "^2.
|
|
23
|
-
"@xyo-network/payload-model": "^2.
|
|
24
|
-
"@xyo-network/sentinel-memory": "^2.
|
|
25
|
-
"@xyo-network/witness-adhoc": "^2.
|
|
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.
|
|
29
|
-
"@xylabs/tsconfig": "^3.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
-
|
|
85
|
-
|
|
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"]}
|
package/dist/node/index.js.map
DELETED
|
@@ -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"]}
|