@layerzerolabs/base-definitions 0.2.59 → 0.2.61
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/.turbo/turbo-build.log +34 -34
- package/.turbo/turbo-lint.log +1 -1
- package/.turbo/turbo-test.log +3 -3
- package/dist/{I3HCQWKQ.js → 5V2VE36W.js} +21 -6
- package/dist/5V2VE36W.js.map +1 -0
- package/dist/{GJR4AWAW.cjs → Y4WRKZUM.cjs} +21 -6
- package/dist/Y4WRKZUM.cjs.map +1 -0
- package/dist/index.cjs +3 -3
- package/dist/index.js +1 -1
- package/dist/registrarBuilder.cjs +3 -3
- package/dist/registrarBuilder.d.ts +10 -2
- package/dist/registrarBuilder.d.ts.map +1 -1
- package/dist/registrarBuilder.js +1 -1
- package/package.json +7 -7
- package/src/registrarBuilder.ts +24 -8
- package/test/registrarBuilder.test.ts +4 -4
- package/dist/GJR4AWAW.cjs.map +0 -1
- package/dist/I3HCQWKQ.js.map +0 -1
package/.turbo/turbo-build.log
CHANGED
|
@@ -11,45 +11,45 @@
|
|
|
11
11
|
[34mCLI[39m Cleaning output folder
|
|
12
12
|
[34mCJS[39m Build start
|
|
13
13
|
[34mESM[39m Build start
|
|
14
|
-
[32mESM[39m [1mdist/definitions.js [22m[32m216.00 B[39m
|
|
15
|
-
[32mESM[39m [1mdist/registrarBuilder.js [22m[32m191.00 B[39m
|
|
16
|
-
[32mESM[39m [1mdist/lzyringe.js [22m[32m146.00 B[39m
|
|
17
|
-
[32mESM[39m [1mdist/JJBD65HU.js [22m[32m1.65 KB[39m
|
|
18
|
-
[32mESM[39m [1mdist/utils.js [22m[32m173.00 B[39m
|
|
19
|
-
[32mESM[39m [1mdist/I3HCQWKQ.js [22m[32m6.70 KB[39m
|
|
20
|
-
[32mESM[39m [1mdist/PG5UTJ4W.js [22m[32m733.00 B[39m
|
|
21
|
-
[32mESM[39m [1mdist/G6XKLFF4.js [22m[32m1.47 KB[39m
|
|
22
|
-
[32mESM[39m [1mdist/index.js [22m[32m389.00 B[39m
|
|
23
|
-
[32mESM[39m [1mdist/VUOMXK5T.js [22m[32m222.00 B[39m
|
|
24
|
-
[32mESM[39m [1mdist/definitions.js.map [22m[32m75.00 B[39m
|
|
25
|
-
[32mESM[39m [1mdist/registrarBuilder.js.map [22m[32m80.00 B[39m
|
|
26
|
-
[32mESM[39m [1mdist/JJBD65HU.js.map [22m[32m3.78 KB[39m
|
|
27
|
-
[32mESM[39m [1mdist/lzyringe.js.map [22m[32m72.00 B[39m
|
|
28
|
-
[32mESM[39m [1mdist/utils.js.map [22m[32m69.00 B[39m
|
|
29
|
-
[32mESM[39m [1mdist/I3HCQWKQ.js.map [22m[32m18.42 KB[39m
|
|
30
|
-
[32mESM[39m [1mdist/PG5UTJ4W.js.map [22m[32m1.81 KB[39m
|
|
31
|
-
[32mESM[39m [1mdist/G6XKLFF4.js.map [22m[32m14.09 KB[39m
|
|
32
|
-
[32mESM[39m [1mdist/index.js.map [22m[32m69.00 B[39m
|
|
33
|
-
[32mESM[39m [1mdist/VUOMXK5T.js.map [22m[32m72.00 B[39m
|
|
34
|
-
[32mESM[39m ⚡️ Build success in 317ms
|
|
35
|
-
[32mCJS[39m [1mdist/index.cjs [22m[32m1.43 KB[39m
|
|
36
14
|
[32mCJS[39m [1mdist/definitions.cjs [22m[32m747.00 B[39m
|
|
37
15
|
[32mCJS[39m [1mdist/lzyringe.cjs [22m[32m302.00 B[39m
|
|
38
|
-
[32mCJS[39m [1mdist/JKTGUQY4.cjs [22m[32m1.70 KB[39m
|
|
39
16
|
[32mCJS[39m [1mdist/registrarBuilder.cjs [22m[32m478.00 B[39m
|
|
40
|
-
[32mCJS[39m [1mdist/
|
|
41
|
-
[32mCJS[39m [1mdist/GJR4AWAW.cjs [22m[32m6.90 KB[39m
|
|
42
|
-
[32mCJS[39m [1mdist/YJF4D23A.cjs [22m[32m245.00 B[39m
|
|
43
|
-
[32mCJS[39m [1mdist/2IH6HX7W.cjs [22m[32m815.00 B[39m
|
|
17
|
+
[32mCJS[39m [1mdist/JKTGUQY4.cjs [22m[32m1.70 KB[39m
|
|
44
18
|
[32mCJS[39m [1mdist/utils.cjs [22m[32m343.00 B[39m
|
|
45
|
-
[32mCJS[39m [1mdist/
|
|
19
|
+
[32mCJS[39m [1mdist/Y4WRKZUM.cjs [22m[32m7.31 KB[39m
|
|
20
|
+
[32mCJS[39m [1mdist/2IH6HX7W.cjs [22m[32m815.00 B[39m
|
|
21
|
+
[32mCJS[39m [1mdist/YJF4D23A.cjs [22m[32m245.00 B[39m
|
|
22
|
+
[32mCJS[39m [1mdist/2YGTKLAP.cjs [22m[32m1.68 KB[39m
|
|
23
|
+
[32mCJS[39m [1mdist/index.cjs [22m[32m1.43 KB[39m
|
|
46
24
|
[32mCJS[39m [1mdist/definitions.cjs.map [22m[32m76.00 B[39m
|
|
25
|
+
[32mCJS[39m [1mdist/registrarBuilder.cjs.map [22m[32m81.00 B[39m
|
|
47
26
|
[32mCJS[39m [1mdist/lzyringe.cjs.map [22m[32m73.00 B[39m
|
|
48
27
|
[32mCJS[39m [1mdist/JKTGUQY4.cjs.map [22m[32m3.78 KB[39m
|
|
49
|
-
[32mCJS[39m [1mdist/registrarBuilder.cjs.map [22m[32m81.00 B[39m
|
|
50
|
-
[32mCJS[39m [1mdist/2YGTKLAP.cjs.map [22m[32m14.10 KB[39m
|
|
51
|
-
[32mCJS[39m [1mdist/GJR4AWAW.cjs.map [22m[32m18.43 KB[39m
|
|
52
|
-
[32mCJS[39m [1mdist/YJF4D23A.cjs.map [22m[32m73.00 B[39m
|
|
53
|
-
[32mCJS[39m [1mdist/2IH6HX7W.cjs.map [22m[32m1.83 KB[39m
|
|
54
28
|
[32mCJS[39m [1mdist/utils.cjs.map [22m[32m70.00 B[39m
|
|
55
|
-
[32mCJS[39m
|
|
29
|
+
[32mCJS[39m [1mdist/2IH6HX7W.cjs.map [22m[32m1.83 KB[39m
|
|
30
|
+
[32mCJS[39m [1mdist/index.cjs.map [22m[32m70.00 B[39m
|
|
31
|
+
[32mCJS[39m [1mdist/YJF4D23A.cjs.map [22m[32m73.00 B[39m
|
|
32
|
+
[32mCJS[39m [1mdist/2YGTKLAP.cjs.map [22m[32m14.10 KB[39m
|
|
33
|
+
[32mCJS[39m [1mdist/Y4WRKZUM.cjs.map [22m[32m19.32 KB[39m
|
|
34
|
+
[32mCJS[39m ⚡️ Build success in 186ms
|
|
35
|
+
[32mESM[39m [1mdist/definitions.js [22m[32m216.00 B[39m
|
|
36
|
+
[32mESM[39m [1mdist/lzyringe.js [22m[32m146.00 B[39m
|
|
37
|
+
[32mESM[39m [1mdist/index.js [22m[32m389.00 B[39m
|
|
38
|
+
[32mESM[39m [1mdist/JJBD65HU.js [22m[32m1.65 KB[39m
|
|
39
|
+
[32mESM[39m [1mdist/registrarBuilder.js [22m[32m191.00 B[39m
|
|
40
|
+
[32mESM[39m [1mdist/PG5UTJ4W.js [22m[32m733.00 B[39m
|
|
41
|
+
[32mESM[39m [1mdist/utils.js [22m[32m173.00 B[39m
|
|
42
|
+
[32mESM[39m [1mdist/5V2VE36W.js [22m[32m7.11 KB[39m
|
|
43
|
+
[32mESM[39m [1mdist/VUOMXK5T.js [22m[32m222.00 B[39m
|
|
44
|
+
[32mESM[39m [1mdist/G6XKLFF4.js [22m[32m1.47 KB[39m
|
|
45
|
+
[32mESM[39m [1mdist/lzyringe.js.map [22m[32m72.00 B[39m
|
|
46
|
+
[32mESM[39m [1mdist/index.js.map [22m[32m69.00 B[39m
|
|
47
|
+
[32mESM[39m [1mdist/JJBD65HU.js.map [22m[32m3.78 KB[39m
|
|
48
|
+
[32mESM[39m [1mdist/registrarBuilder.js.map [22m[32m80.00 B[39m
|
|
49
|
+
[32mESM[39m [1mdist/PG5UTJ4W.js.map [22m[32m1.81 KB[39m
|
|
50
|
+
[32mESM[39m [1mdist/utils.js.map [22m[32m69.00 B[39m
|
|
51
|
+
[32mESM[39m [1mdist/5V2VE36W.js.map [22m[32m19.30 KB[39m
|
|
52
|
+
[32mESM[39m [1mdist/definitions.js.map [22m[32m75.00 B[39m
|
|
53
|
+
[32mESM[39m [1mdist/VUOMXK5T.js.map [22m[32m72.00 B[39m
|
|
54
|
+
[32mESM[39m [1mdist/G6XKLFF4.js.map [22m[32m14.09 KB[39m
|
|
55
|
+
[32mESM[39m ⚡️ Build success in 187ms
|
package/.turbo/turbo-lint.log
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
> @layerzerolabs/base-definitions@0.0.2 lint /home/runner/work/monorepo-internal/monorepo-internal/packages/framework/definitions/base-definitions
|
|
3
3
|
> eslint . --max-warnings 0 || (eslint . --fix --max-warnings 0 && false)
|
|
4
4
|
|
|
5
|
-
(node:
|
|
5
|
+
(node:55587) [MODULE_TYPELESS_PACKAGE_JSON] Warning: Module type of file:///home/runner/work/monorepo-internal/monorepo-internal/eslint.config.js?mtime=1774486407645 is not specified and it doesn't parse as CommonJS.
|
|
6
6
|
Reparsing as ES module because module syntax was detected. This incurs a performance overhead.
|
|
7
7
|
To eliminate this warning, add "type": "module" to /home/runner/work/monorepo-internal/monorepo-internal/package.json.
|
|
8
8
|
(Use `node --trace-warnings ...` to show where the warning was created)
|
package/.turbo/turbo-test.log
CHANGED
|
@@ -7,11 +7,11 @@ Breaking changes might not follow SemVer, please pin Vitest's version when using
|
|
|
7
7
|
|
|
8
8
|
[1m[46m RUN [49m[22m [36mv3.2.4 [39m[90m/home/runner/work/monorepo-internal/monorepo-internal/packages/framework/definitions/base-definitions[39m
|
|
9
9
|
|
|
10
|
-
[32m✓[39m test/registrarBuilder.test.ts [2m([22m[2m7 tests[22m[2m)[22m[32m
|
|
10
|
+
[32m✓[39m test/registrarBuilder.test.ts [2m([22m[2m7 tests[22m[2m)[22m[32m 12[2mms[22m[39m
|
|
11
11
|
|
|
12
12
|
[2m Test Files [22m [1m[32m1 passed[39m[22m[90m (1)[39m
|
|
13
13
|
[2m Tests [22m [1m[32m7 passed[39m[22m[90m (7)[39m
|
|
14
14
|
[2mType Errors [22m [2mno errors[22m
|
|
15
|
-
[2m Start at [22m
|
|
16
|
-
[2m Duration [22m
|
|
15
|
+
[2m Start at [22m 00:55:54
|
|
16
|
+
[2m Duration [22m 539ms[2m (transform 111ms, setup 0ms, collect 118ms, tests 12ms, environment 0ms, prepare 115ms)[22m
|
|
17
17
|
|
|
@@ -19,13 +19,28 @@ var RegistrarBuilder = class {
|
|
|
19
19
|
throw new Error(`This registrar does not provide a handler for the dependency type used by ${JSON.stringify(node)}`);
|
|
20
20
|
};
|
|
21
21
|
}
|
|
22
|
-
addNodeHandler(node, fn) {
|
|
22
|
+
addNodeHandler(node, identifier, fn) {
|
|
23
23
|
if (this.nodeHandlers[node.name]) {
|
|
24
24
|
throw new Error(`Cannot define a node handler for an identifier that already has a handler: ${node.name}`);
|
|
25
25
|
}
|
|
26
|
-
this.nodeHandlers[node.name] =
|
|
26
|
+
this.nodeHandlers[node.name] = {
|
|
27
|
+
fn,
|
|
28
|
+
identifier
|
|
29
|
+
};
|
|
27
30
|
return this;
|
|
28
31
|
}
|
|
32
|
+
/**
|
|
33
|
+
* Returns the class handler identifier that would be used for a given node,
|
|
34
|
+
* or undefined if no class handler matches.
|
|
35
|
+
*/
|
|
36
|
+
getClassIdentifierForNode(node) {
|
|
37
|
+
for (const { nodeClass, identifier } of this.classHandlers) {
|
|
38
|
+
if (node instanceof nodeClass) {
|
|
39
|
+
return identifier;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return void 0;
|
|
43
|
+
}
|
|
29
44
|
/**
|
|
30
45
|
* Add a function fn to be called on all nodes of class
|
|
31
46
|
* @param nodeClass
|
|
@@ -157,8 +172,8 @@ var RegistrarBuilder = class {
|
|
|
157
172
|
const nodeHandler = this.nodeHandlers[node.name];
|
|
158
173
|
if (nodeHandler) {
|
|
159
174
|
return {
|
|
160
|
-
key: node.name,
|
|
161
|
-
value: await nodeHandler(node, ancestry)
|
|
175
|
+
key: nodeHandler.identifier ?? node.name,
|
|
176
|
+
value: await nodeHandler.fn(node, ancestry)
|
|
162
177
|
};
|
|
163
178
|
}
|
|
164
179
|
for (const { nodeClass, identifier, fn } of this.classHandlers) {
|
|
@@ -211,5 +226,5 @@ var multiplexOrderedRegistrars = /* @__PURE__ */ __name((...registrars) => {
|
|
|
211
226
|
}, "multiplexOrderedRegistrars");
|
|
212
227
|
|
|
213
228
|
export { RegistrarBuilder, multiplexOrderedRegistrars };
|
|
214
|
-
//# sourceMappingURL=
|
|
215
|
-
//# sourceMappingURL=
|
|
229
|
+
//# sourceMappingURL=5V2VE36W.js.map
|
|
230
|
+
//# sourceMappingURL=5V2VE36W.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/registrarBuilder.ts"],"names":["RegistrarBuilder","defaultHandler","nodeHandlers","classHandlers","classAliases","nodeAliases","getEntrypoints","node","Error","JSON","stringify","addNodeHandler","identifier","fn","name","getClassIdentifierForNode","nodeClass","undefined","addClassHandler","find","fromNodeClass","i","handler","prototype","isPrototypeOf","splice","push","addClassAlias","getToNode","alias","addNodeAlias","setEntrypointsGetter","addDefault","build","mergedNodePrehandler","nodeAlias","toNode","mergedNodeHandler","ancestry","key","value","nodeHandler","traverseDependencies","entrypoints","length","dfs","dependencies","reduce","acc","cur","VirtualNode","DependencyNode","virtualEntrypoint","multiplexOrderedRegistrars","registrars","multiplexRegistrar","params","registrar","result"],"mappings":"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","file":"5V2VE36W.js","sourcesContent":["import type { Dependencies } from '@layerzerolabs/dependency-graph';\nimport { DependencyNode } from '@layerzerolabs/dependency-graph';\nimport type { Registrar } from '@layerzerolabs/dfs';\nimport { dfs } from '@layerzerolabs/dfs';\nexport type { Registrar };\n\ntype NodeClass = new (...args: any[]) => DependencyNode;\ntype AbstractNodeClass = abstract new (...args: any[]) => DependencyNode;\n\n/**\n * <!-- anchor:RegistrarBuilder -->\n * A builder class for a {@link Registrar}.\n * Builds a registrar that switches on node class--i.e., enables defining\n * specific registration behaviour for specific node classes.\n * Intelligently handles inheritance, always using the most specific\n * handler defined for any given class.\n * The registrar built shall return an object that maps from a handler ID,\n * to a map from node name to the return of each handler,\n * e.g., { objectNodes: { myObjectNode: 'my handler return' }}.\n * This can be used to extract a specific resolved value after resolving the tree,\n * given that the handlers return the resolved nodes.\n */\nexport class RegistrarBuilder<_ReturnTypes> {\n protected defaultHandler: (node: DependencyNode, ancestry: DependencyNode[]) => Promise<any>;\n\n protected nodeHandlers: Record<\n string,\n {\n fn: (node: DependencyNode, ancestry: DependencyNode[]) => Promise<any>;\n identifier: string;\n }\n > = {};\n\n protected classHandlers: {\n nodeClass: AbstractNodeClass;\n identifier: string;\n fn: (node: DependencyNode, ancestry: DependencyNode[]) => Promise<any>;\n }[] = [];\n\n protected classAliases: {\n fromNodeClass: AbstractNodeClass;\n getToNode: (from: DependencyNode) => DependencyNode;\n }[] = [];\n\n protected nodeAliases: Record<string, (node: DependencyNode) => DependencyNode> = {};\n\n protected getEntrypoints: (\n node: DependencyNode,\n ) => DependencyNode[] | Promise<DependencyNode[]> = (node) => [node];\n\n constructor() {\n this.defaultHandler = async (node: DependencyNode) => {\n throw new Error(\n `This registrar does not provide a handler for the dependency type used by ${JSON.stringify(node)}`,\n );\n };\n }\n\n public addNodeHandler<\n Node extends DependencyNode,\n Function extends (node: Node, ancestry: DependencyNode[]) => Promise<any>,\n >(node: DependencyNode, identifier: string, fn: Function) {\n if (this.nodeHandlers[node.name]) {\n throw new Error(\n `Cannot define a node handler for an identifier that already has a handler: ${node.name}`,\n );\n }\n this.nodeHandlers[node.name] = {\n fn: fn as unknown as (node: DependencyNode, ancestry: DependencyNode[]) => Promise<any>,\n identifier,\n };\n return this as RegistrarBuilder<\n _ReturnTypes & {\n ['nodeHandlers']: { [nodeName: string]: Awaited<ReturnType<Function>> };\n }\n >;\n }\n\n /**\n * Returns the class handler identifier that would be used for a given node,\n * or undefined if no class handler matches.\n */\n public getClassIdentifierForNode(node: DependencyNode): string | undefined {\n for (const { nodeClass, identifier } of this.classHandlers) {\n if (node instanceof nodeClass) {\n return identifier;\n }\n }\n return undefined;\n }\n\n /**\n * Add a function fn to be called on all nodes of class\n * @param nodeClass\n * @param identifier\n * @param fn\n */\n public addClassHandler<\n Identifier extends string,\n _NodeClass extends NodeClass,\n Function extends (node: InstanceType<_NodeClass>, ancestry: DependencyNode[]) => any,\n >(nodeClass: _NodeClass, identifier: Identifier, fn: Function) {\n if (this.classAliases.find(({ fromNodeClass }) => fromNodeClass === nodeClass)) {\n throw new Error(\n `Cannot define a handler for a class that is aliased to something else. This would be pointless`,\n );\n }\n\n let i = 0;\n for (const handler of this.classHandlers) {\n //check if we are overriding an existing handler\n if (handler.nodeClass === nodeClass) {\n this.classHandlers[i] = {\n nodeClass,\n identifier,\n fn: fn as unknown as (node: DependencyNode) => Promise<any>,\n };\n\n return this as RegistrarBuilder<\n _ReturnTypes & {\n [_K in Identifier]: { [nodeName: string]: Awaited<ReturnType<Function>> };\n }\n >;\n }\n //check if the new handler has an ordering requirement against an existing handler\n //(we always want to use more specific handlers if they exist)\n // eslint-disable-next-line no-prototype-builtins\n if (handler.nodeClass.prototype.isPrototypeOf(nodeClass.prototype)) {\n this.classHandlers.splice(i, 0, {\n nodeClass,\n identifier,\n fn: fn as unknown as (node: DependencyNode) => Promise<any>,\n });\n\n return this as RegistrarBuilder<\n _ReturnTypes & {\n [_K in Identifier]: { [nodeName: string]: Awaited<ReturnType<Function>> };\n }\n >;\n }\n i++;\n }\n\n this.classHandlers.push({\n nodeClass,\n identifier,\n fn: fn as unknown as (node: DependencyNode) => Promise<any>,\n });\n\n return this as RegistrarBuilder<\n _ReturnTypes & {\n [_K in Identifier]: { [nodeName: string]: Awaited<ReturnType<Function>> };\n }\n >;\n }\n\n /**\n * Alias some class *from*, such that any node of that class in the tree will be\n * treated as though it were some other node *to*. The *to* node is given as a\n * function returning a class instance, so that its dependencies, name, etc can be fixed.\n * The registrar will ignore the dependencies of the original node, and follow the alias's\n * dependencies instead.\n *\n * Additionally, this method does not affect the typing of the registrar. The output type\n * of the build() method will not reflect the alias.\n *\n * @param fromNodeClass alias instances of this class\n * @param getToNode method that returns the *to* part of the alias\n */\n public addClassAlias<FromNodeClass extends AbstractNodeClass>(\n fromNodeClass: FromNodeClass,\n getToNode: (fromNodeInstance: InstanceType<FromNodeClass>) => DependencyNode,\n ) {\n if (this.classHandlers.find(({ nodeClass }) => nodeClass === fromNodeClass)) {\n throw new Error(`Cannot define an alias for a class that already has a handler`);\n }\n\n let i = 0;\n for (const alias of this.classAliases) {\n //check if we are overriding an existing alias\n if (alias.fromNodeClass === fromNodeClass) {\n this.classAliases[i] = {\n fromNodeClass,\n getToNode: getToNode as unknown as (from: DependencyNode) => DependencyNode,\n };\n\n return this;\n }\n //check if the new alias has an ordering requirement against an existing alias\n //(we always want to use more specific handlers if they exist)\n // eslint-disable-next-line no-prototype-builtins\n if (alias.fromNodeClass.prototype.isPrototypeOf(fromNodeClass.prototype)) {\n this.classAliases.splice(i, 0, {\n fromNodeClass,\n getToNode: getToNode as unknown as (from: DependencyNode) => DependencyNode,\n });\n\n return this;\n }\n i++;\n }\n\n this.classAliases.push({\n fromNodeClass,\n getToNode: getToNode as unknown as (from: DependencyNode) => DependencyNode,\n });\n\n return this;\n }\n\n /**\n * Alias a specific named node, such that when encountered in the tree,\n * it will be transformed to a different node before processing.\n * The transformed node's dependencies will be traversed instead.\n * This is useful for short-circuiting dependency traversal for specific nodes.\n *\n * @param nodeName name of the node to alias\n * @param getToNode method that returns the transformed node\n */\n public addNodeAlias(\n node: DependencyNode,\n getToNode: (fromNodeInstance: DependencyNode) => DependencyNode,\n ) {\n this.nodeAliases[node.name] = getToNode;\n return this;\n }\n\n /**\n * Set a custom entrypoint getter function. By default, the entrypoint getter\n * returns the node passed in as the sole entrypoint.\n */\n public setEntrypointsGetter(\n fn: (node: DependencyNode) => DependencyNode[] | Promise<DependencyNode[]>,\n ) {\n this.getEntrypoints = fn;\n return this;\n }\n\n /**\n * Add a default function fn to be used on nodes whose types do not have handlers.\n * If this is not set, the default behaviour will be to throw\n * @param fn\n */\n public addDefault(fn: (node: DependencyNode, ancestry: DependencyNode[]) => any) {\n this.defaultHandler = fn;\n return this;\n }\n\n public build(): Registrar<_ReturnTypes> {\n const mergedNodePrehandler = (node: DependencyNode) => {\n // Check node aliases first (more specific)\n const nodeAlias = this.nodeAliases[node.name];\n if (nodeAlias) {\n return nodeAlias(node);\n }\n\n // Then check class aliases\n for (const { fromNodeClass, getToNode: toNode } of this.classAliases) {\n if (node instanceof fromNodeClass) {\n return toNode(node);\n }\n }\n return node;\n };\n\n const mergedNodeHandler = async (node: DependencyNode, ancestry: DependencyNode[]) => {\n if (node.name === '_virtualEntrypoint') {\n return {\n key: node.name,\n value: undefined,\n };\n }\n\n const nodeHandler = this.nodeHandlers[node.name];\n if (nodeHandler) {\n return {\n key: nodeHandler.identifier ?? node.name,\n value: await nodeHandler.fn(node, ancestry),\n };\n }\n\n for (const { nodeClass, identifier, fn } of this.classHandlers) {\n if (node instanceof nodeClass) {\n return {\n key: identifier,\n value: await fn(node, ancestry),\n };\n }\n }\n\n return {\n key: 'default',\n value: await this.defaultHandler(node, ancestry),\n };\n };\n return {\n traverseDependencies: async (node: DependencyNode) => {\n const entrypoints = await this.getEntrypoints(node);\n if (entrypoints.length === 1)\n return await dfs<_ReturnTypes>(node, mergedNodeHandler, mergedNodePrehandler)();\n\n const dependencies = entrypoints.reduce((acc, cur) => {\n acc[cur.name] = cur;\n return acc;\n }, {} as Dependencies);\n\n class VirtualNode extends DependencyNode {}\n\n const virtualEntrypoint = new VirtualNode({\n name: '_virtualEntrypoint',\n dependencies,\n });\n\n return await dfs<_ReturnTypes>(\n virtualEntrypoint,\n mergedNodeHandler,\n mergedNodePrehandler,\n )();\n },\n };\n }\n}\n\nexport const multiplexOrderedRegistrars = <\n const T extends [name: string, registrar: Registrar<{}>][],\n>(\n ...registrars: T\n) => {\n const multiplexRegistrar: Registrar<{\n [K in Extract<keyof T, number> as T[K] extends readonly [infer Name extends string, any]\n ? Name\n : never]: T[K] extends readonly [any, Registrar<infer Ret>] ? Ret : never;\n }> = {\n traverseDependencies: async (\n ...params: Parameters<Registrar<any>['traverseDependencies']>\n ) => {\n const acc: Record<string, any> = {};\n for (const [name, registrar] of registrars) {\n const result = await registrar.traverseDependencies(...params);\n acc[name] = result;\n }\n\n return acc;\n },\n } as any;\n\n return multiplexRegistrar;\n};\n"]}
|
|
@@ -21,13 +21,28 @@ var RegistrarBuilder = class {
|
|
|
21
21
|
throw new Error(`This registrar does not provide a handler for the dependency type used by ${JSON.stringify(node)}`);
|
|
22
22
|
};
|
|
23
23
|
}
|
|
24
|
-
addNodeHandler(node, fn) {
|
|
24
|
+
addNodeHandler(node, identifier, fn) {
|
|
25
25
|
if (this.nodeHandlers[node.name]) {
|
|
26
26
|
throw new Error(`Cannot define a node handler for an identifier that already has a handler: ${node.name}`);
|
|
27
27
|
}
|
|
28
|
-
this.nodeHandlers[node.name] =
|
|
28
|
+
this.nodeHandlers[node.name] = {
|
|
29
|
+
fn,
|
|
30
|
+
identifier
|
|
31
|
+
};
|
|
29
32
|
return this;
|
|
30
33
|
}
|
|
34
|
+
/**
|
|
35
|
+
* Returns the class handler identifier that would be used for a given node,
|
|
36
|
+
* or undefined if no class handler matches.
|
|
37
|
+
*/
|
|
38
|
+
getClassIdentifierForNode(node) {
|
|
39
|
+
for (const { nodeClass, identifier } of this.classHandlers) {
|
|
40
|
+
if (node instanceof nodeClass) {
|
|
41
|
+
return identifier;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return void 0;
|
|
45
|
+
}
|
|
31
46
|
/**
|
|
32
47
|
* Add a function fn to be called on all nodes of class
|
|
33
48
|
* @param nodeClass
|
|
@@ -159,8 +174,8 @@ var RegistrarBuilder = class {
|
|
|
159
174
|
const nodeHandler = this.nodeHandlers[node.name];
|
|
160
175
|
if (nodeHandler) {
|
|
161
176
|
return {
|
|
162
|
-
key: node.name,
|
|
163
|
-
value: await nodeHandler(node, ancestry)
|
|
177
|
+
key: nodeHandler.identifier ?? node.name,
|
|
178
|
+
value: await nodeHandler.fn(node, ancestry)
|
|
164
179
|
};
|
|
165
180
|
}
|
|
166
181
|
for (const { nodeClass, identifier, fn } of this.classHandlers) {
|
|
@@ -214,5 +229,5 @@ var multiplexOrderedRegistrars = /* @__PURE__ */ YJF4D23A_cjs.__name((...registr
|
|
|
214
229
|
|
|
215
230
|
exports.RegistrarBuilder = RegistrarBuilder;
|
|
216
231
|
exports.multiplexOrderedRegistrars = multiplexOrderedRegistrars;
|
|
217
|
-
//# sourceMappingURL=
|
|
218
|
-
//# sourceMappingURL=
|
|
232
|
+
//# sourceMappingURL=Y4WRKZUM.cjs.map
|
|
233
|
+
//# sourceMappingURL=Y4WRKZUM.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/registrarBuilder.ts"],"names":["RegistrarBuilder","defaultHandler","nodeHandlers","classHandlers","classAliases","nodeAliases","getEntrypoints","node","Error","JSON","stringify","addNodeHandler","identifier","fn","name","getClassIdentifierForNode","nodeClass","undefined","addClassHandler","find","fromNodeClass","i","handler","prototype","isPrototypeOf","splice","push","addClassAlias","getToNode","alias","addNodeAlias","setEntrypointsGetter","addDefault","build","mergedNodePrehandler","nodeAlias","toNode","mergedNodeHandler","__name","ancestry","key","value","nodeHandler","traverseDependencies","entrypoints","length","dfs","dependencies","reduce","acc","cur","VirtualNode","DependencyNode","virtualEntrypoint","multiplexOrderedRegistrars","registrars","multiplexRegistrar","params","registrar","result"],"mappings":"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","file":"Y4WRKZUM.cjs","sourcesContent":["import type { Dependencies } from '@layerzerolabs/dependency-graph';\nimport { DependencyNode } from '@layerzerolabs/dependency-graph';\nimport type { Registrar } from '@layerzerolabs/dfs';\nimport { dfs } from '@layerzerolabs/dfs';\nexport type { Registrar };\n\ntype NodeClass = new (...args: any[]) => DependencyNode;\ntype AbstractNodeClass = abstract new (...args: any[]) => DependencyNode;\n\n/**\n * <!-- anchor:RegistrarBuilder -->\n * A builder class for a {@link Registrar}.\n * Builds a registrar that switches on node class--i.e., enables defining\n * specific registration behaviour for specific node classes.\n * Intelligently handles inheritance, always using the most specific\n * handler defined for any given class.\n * The registrar built shall return an object that maps from a handler ID,\n * to a map from node name to the return of each handler,\n * e.g., { objectNodes: { myObjectNode: 'my handler return' }}.\n * This can be used to extract a specific resolved value after resolving the tree,\n * given that the handlers return the resolved nodes.\n */\nexport class RegistrarBuilder<_ReturnTypes> {\n protected defaultHandler: (node: DependencyNode, ancestry: DependencyNode[]) => Promise<any>;\n\n protected nodeHandlers: Record<\n string,\n {\n fn: (node: DependencyNode, ancestry: DependencyNode[]) => Promise<any>;\n identifier: string;\n }\n > = {};\n\n protected classHandlers: {\n nodeClass: AbstractNodeClass;\n identifier: string;\n fn: (node: DependencyNode, ancestry: DependencyNode[]) => Promise<any>;\n }[] = [];\n\n protected classAliases: {\n fromNodeClass: AbstractNodeClass;\n getToNode: (from: DependencyNode) => DependencyNode;\n }[] = [];\n\n protected nodeAliases: Record<string, (node: DependencyNode) => DependencyNode> = {};\n\n protected getEntrypoints: (\n node: DependencyNode,\n ) => DependencyNode[] | Promise<DependencyNode[]> = (node) => [node];\n\n constructor() {\n this.defaultHandler = async (node: DependencyNode) => {\n throw new Error(\n `This registrar does not provide a handler for the dependency type used by ${JSON.stringify(node)}`,\n );\n };\n }\n\n public addNodeHandler<\n Node extends DependencyNode,\n Function extends (node: Node, ancestry: DependencyNode[]) => Promise<any>,\n >(node: DependencyNode, identifier: string, fn: Function) {\n if (this.nodeHandlers[node.name]) {\n throw new Error(\n `Cannot define a node handler for an identifier that already has a handler: ${node.name}`,\n );\n }\n this.nodeHandlers[node.name] = {\n fn: fn as unknown as (node: DependencyNode, ancestry: DependencyNode[]) => Promise<any>,\n identifier,\n };\n return this as RegistrarBuilder<\n _ReturnTypes & {\n ['nodeHandlers']: { [nodeName: string]: Awaited<ReturnType<Function>> };\n }\n >;\n }\n\n /**\n * Returns the class handler identifier that would be used for a given node,\n * or undefined if no class handler matches.\n */\n public getClassIdentifierForNode(node: DependencyNode): string | undefined {\n for (const { nodeClass, identifier } of this.classHandlers) {\n if (node instanceof nodeClass) {\n return identifier;\n }\n }\n return undefined;\n }\n\n /**\n * Add a function fn to be called on all nodes of class\n * @param nodeClass\n * @param identifier\n * @param fn\n */\n public addClassHandler<\n Identifier extends string,\n _NodeClass extends NodeClass,\n Function extends (node: InstanceType<_NodeClass>, ancestry: DependencyNode[]) => any,\n >(nodeClass: _NodeClass, identifier: Identifier, fn: Function) {\n if (this.classAliases.find(({ fromNodeClass }) => fromNodeClass === nodeClass)) {\n throw new Error(\n `Cannot define a handler for a class that is aliased to something else. This would be pointless`,\n );\n }\n\n let i = 0;\n for (const handler of this.classHandlers) {\n //check if we are overriding an existing handler\n if (handler.nodeClass === nodeClass) {\n this.classHandlers[i] = {\n nodeClass,\n identifier,\n fn: fn as unknown as (node: DependencyNode) => Promise<any>,\n };\n\n return this as RegistrarBuilder<\n _ReturnTypes & {\n [_K in Identifier]: { [nodeName: string]: Awaited<ReturnType<Function>> };\n }\n >;\n }\n //check if the new handler has an ordering requirement against an existing handler\n //(we always want to use more specific handlers if they exist)\n // eslint-disable-next-line no-prototype-builtins\n if (handler.nodeClass.prototype.isPrototypeOf(nodeClass.prototype)) {\n this.classHandlers.splice(i, 0, {\n nodeClass,\n identifier,\n fn: fn as unknown as (node: DependencyNode) => Promise<any>,\n });\n\n return this as RegistrarBuilder<\n _ReturnTypes & {\n [_K in Identifier]: { [nodeName: string]: Awaited<ReturnType<Function>> };\n }\n >;\n }\n i++;\n }\n\n this.classHandlers.push({\n nodeClass,\n identifier,\n fn: fn as unknown as (node: DependencyNode) => Promise<any>,\n });\n\n return this as RegistrarBuilder<\n _ReturnTypes & {\n [_K in Identifier]: { [nodeName: string]: Awaited<ReturnType<Function>> };\n }\n >;\n }\n\n /**\n * Alias some class *from*, such that any node of that class in the tree will be\n * treated as though it were some other node *to*. The *to* node is given as a\n * function returning a class instance, so that its dependencies, name, etc can be fixed.\n * The registrar will ignore the dependencies of the original node, and follow the alias's\n * dependencies instead.\n *\n * Additionally, this method does not affect the typing of the registrar. The output type\n * of the build() method will not reflect the alias.\n *\n * @param fromNodeClass alias instances of this class\n * @param getToNode method that returns the *to* part of the alias\n */\n public addClassAlias<FromNodeClass extends AbstractNodeClass>(\n fromNodeClass: FromNodeClass,\n getToNode: (fromNodeInstance: InstanceType<FromNodeClass>) => DependencyNode,\n ) {\n if (this.classHandlers.find(({ nodeClass }) => nodeClass === fromNodeClass)) {\n throw new Error(`Cannot define an alias for a class that already has a handler`);\n }\n\n let i = 0;\n for (const alias of this.classAliases) {\n //check if we are overriding an existing alias\n if (alias.fromNodeClass === fromNodeClass) {\n this.classAliases[i] = {\n fromNodeClass,\n getToNode: getToNode as unknown as (from: DependencyNode) => DependencyNode,\n };\n\n return this;\n }\n //check if the new alias has an ordering requirement against an existing alias\n //(we always want to use more specific handlers if they exist)\n // eslint-disable-next-line no-prototype-builtins\n if (alias.fromNodeClass.prototype.isPrototypeOf(fromNodeClass.prototype)) {\n this.classAliases.splice(i, 0, {\n fromNodeClass,\n getToNode: getToNode as unknown as (from: DependencyNode) => DependencyNode,\n });\n\n return this;\n }\n i++;\n }\n\n this.classAliases.push({\n fromNodeClass,\n getToNode: getToNode as unknown as (from: DependencyNode) => DependencyNode,\n });\n\n return this;\n }\n\n /**\n * Alias a specific named node, such that when encountered in the tree,\n * it will be transformed to a different node before processing.\n * The transformed node's dependencies will be traversed instead.\n * This is useful for short-circuiting dependency traversal for specific nodes.\n *\n * @param nodeName name of the node to alias\n * @param getToNode method that returns the transformed node\n */\n public addNodeAlias(\n node: DependencyNode,\n getToNode: (fromNodeInstance: DependencyNode) => DependencyNode,\n ) {\n this.nodeAliases[node.name] = getToNode;\n return this;\n }\n\n /**\n * Set a custom entrypoint getter function. By default, the entrypoint getter\n * returns the node passed in as the sole entrypoint.\n */\n public setEntrypointsGetter(\n fn: (node: DependencyNode) => DependencyNode[] | Promise<DependencyNode[]>,\n ) {\n this.getEntrypoints = fn;\n return this;\n }\n\n /**\n * Add a default function fn to be used on nodes whose types do not have handlers.\n * If this is not set, the default behaviour will be to throw\n * @param fn\n */\n public addDefault(fn: (node: DependencyNode, ancestry: DependencyNode[]) => any) {\n this.defaultHandler = fn;\n return this;\n }\n\n public build(): Registrar<_ReturnTypes> {\n const mergedNodePrehandler = (node: DependencyNode) => {\n // Check node aliases first (more specific)\n const nodeAlias = this.nodeAliases[node.name];\n if (nodeAlias) {\n return nodeAlias(node);\n }\n\n // Then check class aliases\n for (const { fromNodeClass, getToNode: toNode } of this.classAliases) {\n if (node instanceof fromNodeClass) {\n return toNode(node);\n }\n }\n return node;\n };\n\n const mergedNodeHandler = async (node: DependencyNode, ancestry: DependencyNode[]) => {\n if (node.name === '_virtualEntrypoint') {\n return {\n key: node.name,\n value: undefined,\n };\n }\n\n const nodeHandler = this.nodeHandlers[node.name];\n if (nodeHandler) {\n return {\n key: nodeHandler.identifier ?? node.name,\n value: await nodeHandler.fn(node, ancestry),\n };\n }\n\n for (const { nodeClass, identifier, fn } of this.classHandlers) {\n if (node instanceof nodeClass) {\n return {\n key: identifier,\n value: await fn(node, ancestry),\n };\n }\n }\n\n return {\n key: 'default',\n value: await this.defaultHandler(node, ancestry),\n };\n };\n return {\n traverseDependencies: async (node: DependencyNode) => {\n const entrypoints = await this.getEntrypoints(node);\n if (entrypoints.length === 1)\n return await dfs<_ReturnTypes>(node, mergedNodeHandler, mergedNodePrehandler)();\n\n const dependencies = entrypoints.reduce((acc, cur) => {\n acc[cur.name] = cur;\n return acc;\n }, {} as Dependencies);\n\n class VirtualNode extends DependencyNode {}\n\n const virtualEntrypoint = new VirtualNode({\n name: '_virtualEntrypoint',\n dependencies,\n });\n\n return await dfs<_ReturnTypes>(\n virtualEntrypoint,\n mergedNodeHandler,\n mergedNodePrehandler,\n )();\n },\n };\n }\n}\n\nexport const multiplexOrderedRegistrars = <\n const T extends [name: string, registrar: Registrar<{}>][],\n>(\n ...registrars: T\n) => {\n const multiplexRegistrar: Registrar<{\n [K in Extract<keyof T, number> as T[K] extends readonly [infer Name extends string, any]\n ? Name\n : never]: T[K] extends readonly [any, Registrar<infer Ret>] ? Ret : never;\n }> = {\n traverseDependencies: async (\n ...params: Parameters<Registrar<any>['traverseDependencies']>\n ) => {\n const acc: Record<string, any> = {};\n for (const [name, registrar] of registrars) {\n const result = await registrar.traverseDependencies(...params);\n acc[name] = result;\n }\n\n return acc;\n },\n } as any;\n\n return multiplexRegistrar;\n};\n"]}
|
package/dist/index.cjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var JKTGUQY4_cjs = require('./JKTGUQY4.cjs');
|
|
4
|
-
var
|
|
4
|
+
var Y4WRKZUM_cjs = require('./Y4WRKZUM.cjs');
|
|
5
5
|
var _2IH6HX7W_cjs = require('./2IH6HX7W.cjs');
|
|
6
6
|
var _2YGTKLAP_cjs = require('./2YGTKLAP.cjs');
|
|
7
7
|
require('./YJF4D23A.cjs');
|
|
@@ -14,11 +14,11 @@ Object.defineProperty(exports, "DependencyStore", {
|
|
|
14
14
|
});
|
|
15
15
|
Object.defineProperty(exports, "RegistrarBuilder", {
|
|
16
16
|
enumerable: true,
|
|
17
|
-
get: function () { return
|
|
17
|
+
get: function () { return Y4WRKZUM_cjs.RegistrarBuilder; }
|
|
18
18
|
});
|
|
19
19
|
Object.defineProperty(exports, "multiplexOrderedRegistrars", {
|
|
20
20
|
enumerable: true,
|
|
21
|
-
get: function () { return
|
|
21
|
+
get: function () { return Y4WRKZUM_cjs.multiplexOrderedRegistrars; }
|
|
22
22
|
});
|
|
23
23
|
Object.defineProperty(exports, "extractSchemaFromFactory", {
|
|
24
24
|
enumerable: true,
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { DependencyStore } from './JJBD65HU.js';
|
|
2
|
-
export { RegistrarBuilder, multiplexOrderedRegistrars } from './
|
|
2
|
+
export { RegistrarBuilder, multiplexOrderedRegistrars } from './5V2VE36W.js';
|
|
3
3
|
export { extractSchemaFromFactory } from './PG5UTJ4W.js';
|
|
4
4
|
export { FactoryDefinition, ObjectDefinition, deserializeDimensions, serializeDimensions } from './G6XKLFF4.js';
|
|
5
5
|
import './VUOMXK5T.js';
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var Y4WRKZUM_cjs = require('./Y4WRKZUM.cjs');
|
|
4
4
|
require('./YJF4D23A.cjs');
|
|
5
5
|
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
Object.defineProperty(exports, "RegistrarBuilder", {
|
|
9
9
|
enumerable: true,
|
|
10
|
-
get: function () { return
|
|
10
|
+
get: function () { return Y4WRKZUM_cjs.RegistrarBuilder; }
|
|
11
11
|
});
|
|
12
12
|
Object.defineProperty(exports, "multiplexOrderedRegistrars", {
|
|
13
13
|
enumerable: true,
|
|
14
|
-
get: function () { return
|
|
14
|
+
get: function () { return Y4WRKZUM_cjs.multiplexOrderedRegistrars; }
|
|
15
15
|
});
|
|
16
16
|
//# sourceMappingURL=registrarBuilder.cjs.map
|
|
17
17
|
//# sourceMappingURL=registrarBuilder.cjs.map
|
|
@@ -18,7 +18,10 @@ type AbstractNodeClass = abstract new (...args: any[]) => DependencyNode;
|
|
|
18
18
|
*/
|
|
19
19
|
export declare class RegistrarBuilder<_ReturnTypes> {
|
|
20
20
|
protected defaultHandler: (node: DependencyNode, ancestry: DependencyNode[]) => Promise<any>;
|
|
21
|
-
protected nodeHandlers: Record<string,
|
|
21
|
+
protected nodeHandlers: Record<string, {
|
|
22
|
+
fn: (node: DependencyNode, ancestry: DependencyNode[]) => Promise<any>;
|
|
23
|
+
identifier: string;
|
|
24
|
+
}>;
|
|
22
25
|
protected classHandlers: {
|
|
23
26
|
nodeClass: AbstractNodeClass;
|
|
24
27
|
identifier: string;
|
|
@@ -31,11 +34,16 @@ export declare class RegistrarBuilder<_ReturnTypes> {
|
|
|
31
34
|
protected nodeAliases: Record<string, (node: DependencyNode) => DependencyNode>;
|
|
32
35
|
protected getEntrypoints: (node: DependencyNode) => DependencyNode[] | Promise<DependencyNode[]>;
|
|
33
36
|
constructor();
|
|
34
|
-
addNodeHandler<Node extends DependencyNode, Function extends (node: Node, ancestry: DependencyNode[]) => Promise<any>>(node: DependencyNode, fn: Function): RegistrarBuilder<_ReturnTypes & {
|
|
37
|
+
addNodeHandler<Node extends DependencyNode, Function extends (node: Node, ancestry: DependencyNode[]) => Promise<any>>(node: DependencyNode, identifier: string, fn: Function): RegistrarBuilder<_ReturnTypes & {
|
|
35
38
|
["nodeHandlers"]: {
|
|
36
39
|
[nodeName: string]: Awaited<ReturnType<Function>>;
|
|
37
40
|
};
|
|
38
41
|
}>;
|
|
42
|
+
/**
|
|
43
|
+
* Returns the class handler identifier that would be used for a given node,
|
|
44
|
+
* or undefined if no class handler matches.
|
|
45
|
+
*/
|
|
46
|
+
getClassIdentifierForNode(node: DependencyNode): string | undefined;
|
|
39
47
|
/**
|
|
40
48
|
* Add a function fn to be called on all nodes of class
|
|
41
49
|
* @param nodeClass
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registrarBuilder.d.ts","sourceRoot":"","sources":["../src/registrarBuilder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEpD,YAAY,EAAE,SAAS,EAAE,CAAC;AAE1B,KAAK,SAAS,GAAG,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,cAAc,CAAC;AACxD,KAAK,iBAAiB,GAAG,QAAQ,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,cAAc,CAAC;AAEzE;;;;;;;;;;;;GAYG;AACH,qBAAa,gBAAgB,CAAC,YAAY;IACtC,SAAS,CAAC,cAAc,EAAE,CAAC,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,cAAc,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;IAE7F,SAAS,CAAC,YAAY,EAAE,MAAM,CAC1B,MAAM,EACN,CAAC,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,cAAc,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"registrarBuilder.d.ts","sourceRoot":"","sources":["../src/registrarBuilder.ts"],"names":[],"mappings":"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"}
|
package/dist/registrarBuilder.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { RegistrarBuilder, multiplexOrderedRegistrars } from './
|
|
1
|
+
export { RegistrarBuilder, multiplexOrderedRegistrars } from './5V2VE36W.js';
|
|
2
2
|
import './VUOMXK5T.js';
|
|
3
3
|
//# sourceMappingURL=registrarBuilder.js.map
|
|
4
4
|
//# sourceMappingURL=registrarBuilder.js.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@layerzerolabs/base-definitions",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.61",
|
|
4
4
|
"private": false,
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -15,16 +15,16 @@
|
|
|
15
15
|
"types": "./dist/index.d.ts",
|
|
16
16
|
"dependencies": {
|
|
17
17
|
"zod": "4.3.5",
|
|
18
|
-
"@layerzerolabs/
|
|
19
|
-
"@layerzerolabs/
|
|
20
|
-
"@layerzerolabs/
|
|
21
|
-
"@layerzerolabs/
|
|
18
|
+
"@layerzerolabs/typescript-utils": "0.2.61",
|
|
19
|
+
"@layerzerolabs/dependency-graph": "0.2.61",
|
|
20
|
+
"@layerzerolabs/dfs": "0.2.61",
|
|
21
|
+
"@layerzerolabs/function-pointer": "0.2.61"
|
|
22
22
|
},
|
|
23
23
|
"devDependencies": {
|
|
24
24
|
"tsup": "^8.4.0",
|
|
25
25
|
"vitest": "^3.2.3",
|
|
26
|
-
"@layerzerolabs/tsup-configuration": "0.2.
|
|
27
|
-
"@layerzerolabs/typescript-configuration": "0.2.
|
|
26
|
+
"@layerzerolabs/tsup-configuration": "0.2.61",
|
|
27
|
+
"@layerzerolabs/typescript-configuration": "0.2.61"
|
|
28
28
|
},
|
|
29
29
|
"publishConfig": {
|
|
30
30
|
"access": "restricted",
|
package/src/registrarBuilder.ts
CHANGED
|
@@ -25,7 +25,10 @@ export class RegistrarBuilder<_ReturnTypes> {
|
|
|
25
25
|
|
|
26
26
|
protected nodeHandlers: Record<
|
|
27
27
|
string,
|
|
28
|
-
|
|
28
|
+
{
|
|
29
|
+
fn: (node: DependencyNode, ancestry: DependencyNode[]) => Promise<any>;
|
|
30
|
+
identifier: string;
|
|
31
|
+
}
|
|
29
32
|
> = {};
|
|
30
33
|
|
|
31
34
|
protected classHandlers: {
|
|
@@ -56,16 +59,16 @@ export class RegistrarBuilder<_ReturnTypes> {
|
|
|
56
59
|
public addNodeHandler<
|
|
57
60
|
Node extends DependencyNode,
|
|
58
61
|
Function extends (node: Node, ancestry: DependencyNode[]) => Promise<any>,
|
|
59
|
-
>(node: DependencyNode, fn: Function) {
|
|
62
|
+
>(node: DependencyNode, identifier: string, fn: Function) {
|
|
60
63
|
if (this.nodeHandlers[node.name]) {
|
|
61
64
|
throw new Error(
|
|
62
65
|
`Cannot define a node handler for an identifier that already has a handler: ${node.name}`,
|
|
63
66
|
);
|
|
64
67
|
}
|
|
65
|
-
this.nodeHandlers[node.name] =
|
|
66
|
-
node: DependencyNode,
|
|
67
|
-
|
|
68
|
-
|
|
68
|
+
this.nodeHandlers[node.name] = {
|
|
69
|
+
fn: fn as unknown as (node: DependencyNode, ancestry: DependencyNode[]) => Promise<any>,
|
|
70
|
+
identifier,
|
|
71
|
+
};
|
|
69
72
|
return this as RegistrarBuilder<
|
|
70
73
|
_ReturnTypes & {
|
|
71
74
|
['nodeHandlers']: { [nodeName: string]: Awaited<ReturnType<Function>> };
|
|
@@ -73,6 +76,19 @@ export class RegistrarBuilder<_ReturnTypes> {
|
|
|
73
76
|
>;
|
|
74
77
|
}
|
|
75
78
|
|
|
79
|
+
/**
|
|
80
|
+
* Returns the class handler identifier that would be used for a given node,
|
|
81
|
+
* or undefined if no class handler matches.
|
|
82
|
+
*/
|
|
83
|
+
public getClassIdentifierForNode(node: DependencyNode): string | undefined {
|
|
84
|
+
for (const { nodeClass, identifier } of this.classHandlers) {
|
|
85
|
+
if (node instanceof nodeClass) {
|
|
86
|
+
return identifier;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return undefined;
|
|
90
|
+
}
|
|
91
|
+
|
|
76
92
|
/**
|
|
77
93
|
* Add a function fn to be called on all nodes of class
|
|
78
94
|
* @param nodeClass
|
|
@@ -258,8 +274,8 @@ export class RegistrarBuilder<_ReturnTypes> {
|
|
|
258
274
|
const nodeHandler = this.nodeHandlers[node.name];
|
|
259
275
|
if (nodeHandler) {
|
|
260
276
|
return {
|
|
261
|
-
key: node.name,
|
|
262
|
-
value: await nodeHandler(node, ancestry),
|
|
277
|
+
key: nodeHandler.identifier ?? node.name,
|
|
278
|
+
value: await nodeHandler.fn(node, ancestry),
|
|
263
279
|
};
|
|
264
280
|
}
|
|
265
281
|
|
|
@@ -131,7 +131,7 @@ describe('Node handlers', () => {
|
|
|
131
131
|
classHandlerCalled = true;
|
|
132
132
|
return 'from-class';
|
|
133
133
|
})
|
|
134
|
-
.addNodeHandler(mySimpleClassA1, async () => {
|
|
134
|
+
.addNodeHandler(mySimpleClassA1, 'MySimpleClassA', async () => {
|
|
135
135
|
namedHandlerCalled = true;
|
|
136
136
|
return 'from-named';
|
|
137
137
|
})
|
|
@@ -148,7 +148,7 @@ describe('Node handlers', () => {
|
|
|
148
148
|
let receivedAncestry: DependencyNode[] | undefined;
|
|
149
149
|
|
|
150
150
|
const builder = new RegistrarBuilder()
|
|
151
|
-
.addNodeHandler(mySimpleClassA1, async (node, ancestry) => {
|
|
151
|
+
.addNodeHandler(mySimpleClassA1, 'MySimpleClassA', async (node, ancestry) => {
|
|
152
152
|
receivedNode = node;
|
|
153
153
|
receivedAncestry = ancestry;
|
|
154
154
|
return 'named-result';
|
|
@@ -166,8 +166,8 @@ describe('Node handlers', () => {
|
|
|
166
166
|
test('Registering duplicate node handlers should throw', () => {
|
|
167
167
|
expect(() => {
|
|
168
168
|
new RegistrarBuilder()
|
|
169
|
-
.addNodeHandler(mySimpleClassA1, async () => 'first')
|
|
170
|
-
.addNodeHandler(mySimpleClassA1, async () => 'second');
|
|
169
|
+
.addNodeHandler(mySimpleClassA1, 'MySimpleClassA', async () => 'first')
|
|
170
|
+
.addNodeHandler(mySimpleClassA1, 'MySimpleClassA', async () => 'second');
|
|
171
171
|
}).toThrow(
|
|
172
172
|
'Cannot define a node handler for an identifier that already has a handler: MySimpleClassA',
|
|
173
173
|
);
|
package/dist/GJR4AWAW.cjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/registrarBuilder.ts"],"names":["RegistrarBuilder","defaultHandler","nodeHandlers","classHandlers","classAliases","nodeAliases","getEntrypoints","node","Error","JSON","stringify","addNodeHandler","fn","name","addClassHandler","nodeClass","identifier","find","fromNodeClass","i","handler","prototype","isPrototypeOf","splice","push","addClassAlias","getToNode","alias","addNodeAlias","setEntrypointsGetter","addDefault","build","mergedNodePrehandler","nodeAlias","toNode","mergedNodeHandler","__name","ancestry","key","value","undefined","nodeHandler","traverseDependencies","entrypoints","length","dfs","dependencies","reduce","acc","cur","VirtualNode","DependencyNode","virtualEntrypoint","multiplexOrderedRegistrars","registrars","multiplexRegistrar","params","registrar","result"],"mappings":"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","file":"GJR4AWAW.cjs","sourcesContent":["import type { Dependencies } from '@layerzerolabs/dependency-graph';\nimport { DependencyNode } from '@layerzerolabs/dependency-graph';\nimport type { Registrar } from '@layerzerolabs/dfs';\nimport { dfs } from '@layerzerolabs/dfs';\nexport type { Registrar };\n\ntype NodeClass = new (...args: any[]) => DependencyNode;\ntype AbstractNodeClass = abstract new (...args: any[]) => DependencyNode;\n\n/**\n * <!-- anchor:RegistrarBuilder -->\n * A builder class for a {@link Registrar}.\n * Builds a registrar that switches on node class--i.e., enables defining\n * specific registration behaviour for specific node classes.\n * Intelligently handles inheritance, always using the most specific\n * handler defined for any given class.\n * The registrar built shall return an object that maps from a handler ID,\n * to a map from node name to the return of each handler,\n * e.g., { objectNodes: { myObjectNode: 'my handler return' }}.\n * This can be used to extract a specific resolved value after resolving the tree,\n * given that the handlers return the resolved nodes.\n */\nexport class RegistrarBuilder<_ReturnTypes> {\n protected defaultHandler: (node: DependencyNode, ancestry: DependencyNode[]) => Promise<any>;\n\n protected nodeHandlers: Record<\n string,\n (node: DependencyNode, ancestry: DependencyNode[]) => Promise<any>\n > = {};\n\n protected classHandlers: {\n nodeClass: AbstractNodeClass;\n identifier: string;\n fn: (node: DependencyNode, ancestry: DependencyNode[]) => Promise<any>;\n }[] = [];\n\n protected classAliases: {\n fromNodeClass: AbstractNodeClass;\n getToNode: (from: DependencyNode) => DependencyNode;\n }[] = [];\n\n protected nodeAliases: Record<string, (node: DependencyNode) => DependencyNode> = {};\n\n protected getEntrypoints: (\n node: DependencyNode,\n ) => DependencyNode[] | Promise<DependencyNode[]> = (node) => [node];\n\n constructor() {\n this.defaultHandler = async (node: DependencyNode) => {\n throw new Error(\n `This registrar does not provide a handler for the dependency type used by ${JSON.stringify(node)}`,\n );\n };\n }\n\n public addNodeHandler<\n Node extends DependencyNode,\n Function extends (node: Node, ancestry: DependencyNode[]) => Promise<any>,\n >(node: DependencyNode, fn: Function) {\n if (this.nodeHandlers[node.name]) {\n throw new Error(\n `Cannot define a node handler for an identifier that already has a handler: ${node.name}`,\n );\n }\n this.nodeHandlers[node.name] = fn as unknown as (\n node: DependencyNode,\n ancestry: DependencyNode[],\n ) => Promise<any>;\n return this as RegistrarBuilder<\n _ReturnTypes & {\n ['nodeHandlers']: { [nodeName: string]: Awaited<ReturnType<Function>> };\n }\n >;\n }\n\n /**\n * Add a function fn to be called on all nodes of class\n * @param nodeClass\n * @param identifier\n * @param fn\n */\n public addClassHandler<\n Identifier extends string,\n _NodeClass extends NodeClass,\n Function extends (node: InstanceType<_NodeClass>, ancestry: DependencyNode[]) => any,\n >(nodeClass: _NodeClass, identifier: Identifier, fn: Function) {\n if (this.classAliases.find(({ fromNodeClass }) => fromNodeClass === nodeClass)) {\n throw new Error(\n `Cannot define a handler for a class that is aliased to something else. This would be pointless`,\n );\n }\n\n let i = 0;\n for (const handler of this.classHandlers) {\n //check if we are overriding an existing handler\n if (handler.nodeClass === nodeClass) {\n this.classHandlers[i] = {\n nodeClass,\n identifier,\n fn: fn as unknown as (node: DependencyNode) => Promise<any>,\n };\n\n return this as RegistrarBuilder<\n _ReturnTypes & {\n [_K in Identifier]: { [nodeName: string]: Awaited<ReturnType<Function>> };\n }\n >;\n }\n //check if the new handler has an ordering requirement against an existing handler\n //(we always want to use more specific handlers if they exist)\n // eslint-disable-next-line no-prototype-builtins\n if (handler.nodeClass.prototype.isPrototypeOf(nodeClass.prototype)) {\n this.classHandlers.splice(i, 0, {\n nodeClass,\n identifier,\n fn: fn as unknown as (node: DependencyNode) => Promise<any>,\n });\n\n return this as RegistrarBuilder<\n _ReturnTypes & {\n [_K in Identifier]: { [nodeName: string]: Awaited<ReturnType<Function>> };\n }\n >;\n }\n i++;\n }\n\n this.classHandlers.push({\n nodeClass,\n identifier,\n fn: fn as unknown as (node: DependencyNode) => Promise<any>,\n });\n\n return this as RegistrarBuilder<\n _ReturnTypes & {\n [_K in Identifier]: { [nodeName: string]: Awaited<ReturnType<Function>> };\n }\n >;\n }\n\n /**\n * Alias some class *from*, such that any node of that class in the tree will be\n * treated as though it were some other node *to*. The *to* node is given as a\n * function returning a class instance, so that its dependencies, name, etc can be fixed.\n * The registrar will ignore the dependencies of the original node, and follow the alias's\n * dependencies instead.\n *\n * Additionally, this method does not affect the typing of the registrar. The output type\n * of the build() method will not reflect the alias.\n *\n * @param fromNodeClass alias instances of this class\n * @param getToNode method that returns the *to* part of the alias\n */\n public addClassAlias<FromNodeClass extends AbstractNodeClass>(\n fromNodeClass: FromNodeClass,\n getToNode: (fromNodeInstance: InstanceType<FromNodeClass>) => DependencyNode,\n ) {\n if (this.classHandlers.find(({ nodeClass }) => nodeClass === fromNodeClass)) {\n throw new Error(`Cannot define an alias for a class that already has a handler`);\n }\n\n let i = 0;\n for (const alias of this.classAliases) {\n //check if we are overriding an existing alias\n if (alias.fromNodeClass === fromNodeClass) {\n this.classAliases[i] = {\n fromNodeClass,\n getToNode: getToNode as unknown as (from: DependencyNode) => DependencyNode,\n };\n\n return this;\n }\n //check if the new alias has an ordering requirement against an existing alias\n //(we always want to use more specific handlers if they exist)\n // eslint-disable-next-line no-prototype-builtins\n if (alias.fromNodeClass.prototype.isPrototypeOf(fromNodeClass.prototype)) {\n this.classAliases.splice(i, 0, {\n fromNodeClass,\n getToNode: getToNode as unknown as (from: DependencyNode) => DependencyNode,\n });\n\n return this;\n }\n i++;\n }\n\n this.classAliases.push({\n fromNodeClass,\n getToNode: getToNode as unknown as (from: DependencyNode) => DependencyNode,\n });\n\n return this;\n }\n\n /**\n * Alias a specific named node, such that when encountered in the tree,\n * it will be transformed to a different node before processing.\n * The transformed node's dependencies will be traversed instead.\n * This is useful for short-circuiting dependency traversal for specific nodes.\n *\n * @param nodeName name of the node to alias\n * @param getToNode method that returns the transformed node\n */\n public addNodeAlias(\n node: DependencyNode,\n getToNode: (fromNodeInstance: DependencyNode) => DependencyNode,\n ) {\n this.nodeAliases[node.name] = getToNode;\n return this;\n }\n\n /**\n * Set a custom entrypoint getter function. By default, the entrypoint getter\n * returns the node passed in as the sole entrypoint.\n */\n public setEntrypointsGetter(\n fn: (node: DependencyNode) => DependencyNode[] | Promise<DependencyNode[]>,\n ) {\n this.getEntrypoints = fn;\n return this;\n }\n\n /**\n * Add a default function fn to be used on nodes whose types do not have handlers.\n * If this is not set, the default behaviour will be to throw\n * @param fn\n */\n public addDefault(fn: (node: DependencyNode, ancestry: DependencyNode[]) => any) {\n this.defaultHandler = fn;\n return this;\n }\n\n public build(): Registrar<_ReturnTypes> {\n const mergedNodePrehandler = (node: DependencyNode) => {\n // Check node aliases first (more specific)\n const nodeAlias = this.nodeAliases[node.name];\n if (nodeAlias) {\n return nodeAlias(node);\n }\n\n // Then check class aliases\n for (const { fromNodeClass, getToNode: toNode } of this.classAliases) {\n if (node instanceof fromNodeClass) {\n return toNode(node);\n }\n }\n return node;\n };\n\n const mergedNodeHandler = async (node: DependencyNode, ancestry: DependencyNode[]) => {\n if (node.name === '_virtualEntrypoint') {\n return {\n key: node.name,\n value: undefined,\n };\n }\n\n const nodeHandler = this.nodeHandlers[node.name];\n if (nodeHandler) {\n return {\n key: node.name,\n value: await nodeHandler(node, ancestry),\n };\n }\n\n for (const { nodeClass, identifier, fn } of this.classHandlers) {\n if (node instanceof nodeClass) {\n return {\n key: identifier,\n value: await fn(node, ancestry),\n };\n }\n }\n\n return {\n key: 'default',\n value: await this.defaultHandler(node, ancestry),\n };\n };\n return {\n traverseDependencies: async (node: DependencyNode) => {\n const entrypoints = await this.getEntrypoints(node);\n if (entrypoints.length === 1)\n return await dfs<_ReturnTypes>(node, mergedNodeHandler, mergedNodePrehandler)();\n\n const dependencies = entrypoints.reduce((acc, cur) => {\n acc[cur.name] = cur;\n return acc;\n }, {} as Dependencies);\n\n class VirtualNode extends DependencyNode {}\n\n const virtualEntrypoint = new VirtualNode({\n name: '_virtualEntrypoint',\n dependencies,\n });\n\n return await dfs<_ReturnTypes>(\n virtualEntrypoint,\n mergedNodeHandler,\n mergedNodePrehandler,\n )();\n },\n };\n }\n}\n\nexport const multiplexOrderedRegistrars = <\n const T extends [name: string, registrar: Registrar<{}>][],\n>(\n ...registrars: T\n) => {\n const multiplexRegistrar: Registrar<{\n [K in Extract<keyof T, number> as T[K] extends readonly [infer Name extends string, any]\n ? Name\n : never]: T[K] extends readonly [any, Registrar<infer Ret>] ? Ret : never;\n }> = {\n traverseDependencies: async (\n ...params: Parameters<Registrar<any>['traverseDependencies']>\n ) => {\n const acc: Record<string, any> = {};\n for (const [name, registrar] of registrars) {\n const result = await registrar.traverseDependencies(...params);\n acc[name] = result;\n }\n\n return acc;\n },\n } as any;\n\n return multiplexRegistrar;\n};\n"]}
|
package/dist/I3HCQWKQ.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/registrarBuilder.ts"],"names":["RegistrarBuilder","defaultHandler","nodeHandlers","classHandlers","classAliases","nodeAliases","getEntrypoints","node","Error","JSON","stringify","addNodeHandler","fn","name","addClassHandler","nodeClass","identifier","find","fromNodeClass","i","handler","prototype","isPrototypeOf","splice","push","addClassAlias","getToNode","alias","addNodeAlias","setEntrypointsGetter","addDefault","build","mergedNodePrehandler","nodeAlias","toNode","mergedNodeHandler","ancestry","key","value","undefined","nodeHandler","traverseDependencies","entrypoints","length","dfs","dependencies","reduce","acc","cur","VirtualNode","DependencyNode","virtualEntrypoint","multiplexOrderedRegistrars","registrars","multiplexRegistrar","params","registrar","result"],"mappings":"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","file":"I3HCQWKQ.js","sourcesContent":["import type { Dependencies } from '@layerzerolabs/dependency-graph';\nimport { DependencyNode } from '@layerzerolabs/dependency-graph';\nimport type { Registrar } from '@layerzerolabs/dfs';\nimport { dfs } from '@layerzerolabs/dfs';\nexport type { Registrar };\n\ntype NodeClass = new (...args: any[]) => DependencyNode;\ntype AbstractNodeClass = abstract new (...args: any[]) => DependencyNode;\n\n/**\n * <!-- anchor:RegistrarBuilder -->\n * A builder class for a {@link Registrar}.\n * Builds a registrar that switches on node class--i.e., enables defining\n * specific registration behaviour for specific node classes.\n * Intelligently handles inheritance, always using the most specific\n * handler defined for any given class.\n * The registrar built shall return an object that maps from a handler ID,\n * to a map from node name to the return of each handler,\n * e.g., { objectNodes: { myObjectNode: 'my handler return' }}.\n * This can be used to extract a specific resolved value after resolving the tree,\n * given that the handlers return the resolved nodes.\n */\nexport class RegistrarBuilder<_ReturnTypes> {\n protected defaultHandler: (node: DependencyNode, ancestry: DependencyNode[]) => Promise<any>;\n\n protected nodeHandlers: Record<\n string,\n (node: DependencyNode, ancestry: DependencyNode[]) => Promise<any>\n > = {};\n\n protected classHandlers: {\n nodeClass: AbstractNodeClass;\n identifier: string;\n fn: (node: DependencyNode, ancestry: DependencyNode[]) => Promise<any>;\n }[] = [];\n\n protected classAliases: {\n fromNodeClass: AbstractNodeClass;\n getToNode: (from: DependencyNode) => DependencyNode;\n }[] = [];\n\n protected nodeAliases: Record<string, (node: DependencyNode) => DependencyNode> = {};\n\n protected getEntrypoints: (\n node: DependencyNode,\n ) => DependencyNode[] | Promise<DependencyNode[]> = (node) => [node];\n\n constructor() {\n this.defaultHandler = async (node: DependencyNode) => {\n throw new Error(\n `This registrar does not provide a handler for the dependency type used by ${JSON.stringify(node)}`,\n );\n };\n }\n\n public addNodeHandler<\n Node extends DependencyNode,\n Function extends (node: Node, ancestry: DependencyNode[]) => Promise<any>,\n >(node: DependencyNode, fn: Function) {\n if (this.nodeHandlers[node.name]) {\n throw new Error(\n `Cannot define a node handler for an identifier that already has a handler: ${node.name}`,\n );\n }\n this.nodeHandlers[node.name] = fn as unknown as (\n node: DependencyNode,\n ancestry: DependencyNode[],\n ) => Promise<any>;\n return this as RegistrarBuilder<\n _ReturnTypes & {\n ['nodeHandlers']: { [nodeName: string]: Awaited<ReturnType<Function>> };\n }\n >;\n }\n\n /**\n * Add a function fn to be called on all nodes of class\n * @param nodeClass\n * @param identifier\n * @param fn\n */\n public addClassHandler<\n Identifier extends string,\n _NodeClass extends NodeClass,\n Function extends (node: InstanceType<_NodeClass>, ancestry: DependencyNode[]) => any,\n >(nodeClass: _NodeClass, identifier: Identifier, fn: Function) {\n if (this.classAliases.find(({ fromNodeClass }) => fromNodeClass === nodeClass)) {\n throw new Error(\n `Cannot define a handler for a class that is aliased to something else. This would be pointless`,\n );\n }\n\n let i = 0;\n for (const handler of this.classHandlers) {\n //check if we are overriding an existing handler\n if (handler.nodeClass === nodeClass) {\n this.classHandlers[i] = {\n nodeClass,\n identifier,\n fn: fn as unknown as (node: DependencyNode) => Promise<any>,\n };\n\n return this as RegistrarBuilder<\n _ReturnTypes & {\n [_K in Identifier]: { [nodeName: string]: Awaited<ReturnType<Function>> };\n }\n >;\n }\n //check if the new handler has an ordering requirement against an existing handler\n //(we always want to use more specific handlers if they exist)\n // eslint-disable-next-line no-prototype-builtins\n if (handler.nodeClass.prototype.isPrototypeOf(nodeClass.prototype)) {\n this.classHandlers.splice(i, 0, {\n nodeClass,\n identifier,\n fn: fn as unknown as (node: DependencyNode) => Promise<any>,\n });\n\n return this as RegistrarBuilder<\n _ReturnTypes & {\n [_K in Identifier]: { [nodeName: string]: Awaited<ReturnType<Function>> };\n }\n >;\n }\n i++;\n }\n\n this.classHandlers.push({\n nodeClass,\n identifier,\n fn: fn as unknown as (node: DependencyNode) => Promise<any>,\n });\n\n return this as RegistrarBuilder<\n _ReturnTypes & {\n [_K in Identifier]: { [nodeName: string]: Awaited<ReturnType<Function>> };\n }\n >;\n }\n\n /**\n * Alias some class *from*, such that any node of that class in the tree will be\n * treated as though it were some other node *to*. The *to* node is given as a\n * function returning a class instance, so that its dependencies, name, etc can be fixed.\n * The registrar will ignore the dependencies of the original node, and follow the alias's\n * dependencies instead.\n *\n * Additionally, this method does not affect the typing of the registrar. The output type\n * of the build() method will not reflect the alias.\n *\n * @param fromNodeClass alias instances of this class\n * @param getToNode method that returns the *to* part of the alias\n */\n public addClassAlias<FromNodeClass extends AbstractNodeClass>(\n fromNodeClass: FromNodeClass,\n getToNode: (fromNodeInstance: InstanceType<FromNodeClass>) => DependencyNode,\n ) {\n if (this.classHandlers.find(({ nodeClass }) => nodeClass === fromNodeClass)) {\n throw new Error(`Cannot define an alias for a class that already has a handler`);\n }\n\n let i = 0;\n for (const alias of this.classAliases) {\n //check if we are overriding an existing alias\n if (alias.fromNodeClass === fromNodeClass) {\n this.classAliases[i] = {\n fromNodeClass,\n getToNode: getToNode as unknown as (from: DependencyNode) => DependencyNode,\n };\n\n return this;\n }\n //check if the new alias has an ordering requirement against an existing alias\n //(we always want to use more specific handlers if they exist)\n // eslint-disable-next-line no-prototype-builtins\n if (alias.fromNodeClass.prototype.isPrototypeOf(fromNodeClass.prototype)) {\n this.classAliases.splice(i, 0, {\n fromNodeClass,\n getToNode: getToNode as unknown as (from: DependencyNode) => DependencyNode,\n });\n\n return this;\n }\n i++;\n }\n\n this.classAliases.push({\n fromNodeClass,\n getToNode: getToNode as unknown as (from: DependencyNode) => DependencyNode,\n });\n\n return this;\n }\n\n /**\n * Alias a specific named node, such that when encountered in the tree,\n * it will be transformed to a different node before processing.\n * The transformed node's dependencies will be traversed instead.\n * This is useful for short-circuiting dependency traversal for specific nodes.\n *\n * @param nodeName name of the node to alias\n * @param getToNode method that returns the transformed node\n */\n public addNodeAlias(\n node: DependencyNode,\n getToNode: (fromNodeInstance: DependencyNode) => DependencyNode,\n ) {\n this.nodeAliases[node.name] = getToNode;\n return this;\n }\n\n /**\n * Set a custom entrypoint getter function. By default, the entrypoint getter\n * returns the node passed in as the sole entrypoint.\n */\n public setEntrypointsGetter(\n fn: (node: DependencyNode) => DependencyNode[] | Promise<DependencyNode[]>,\n ) {\n this.getEntrypoints = fn;\n return this;\n }\n\n /**\n * Add a default function fn to be used on nodes whose types do not have handlers.\n * If this is not set, the default behaviour will be to throw\n * @param fn\n */\n public addDefault(fn: (node: DependencyNode, ancestry: DependencyNode[]) => any) {\n this.defaultHandler = fn;\n return this;\n }\n\n public build(): Registrar<_ReturnTypes> {\n const mergedNodePrehandler = (node: DependencyNode) => {\n // Check node aliases first (more specific)\n const nodeAlias = this.nodeAliases[node.name];\n if (nodeAlias) {\n return nodeAlias(node);\n }\n\n // Then check class aliases\n for (const { fromNodeClass, getToNode: toNode } of this.classAliases) {\n if (node instanceof fromNodeClass) {\n return toNode(node);\n }\n }\n return node;\n };\n\n const mergedNodeHandler = async (node: DependencyNode, ancestry: DependencyNode[]) => {\n if (node.name === '_virtualEntrypoint') {\n return {\n key: node.name,\n value: undefined,\n };\n }\n\n const nodeHandler = this.nodeHandlers[node.name];\n if (nodeHandler) {\n return {\n key: node.name,\n value: await nodeHandler(node, ancestry),\n };\n }\n\n for (const { nodeClass, identifier, fn } of this.classHandlers) {\n if (node instanceof nodeClass) {\n return {\n key: identifier,\n value: await fn(node, ancestry),\n };\n }\n }\n\n return {\n key: 'default',\n value: await this.defaultHandler(node, ancestry),\n };\n };\n return {\n traverseDependencies: async (node: DependencyNode) => {\n const entrypoints = await this.getEntrypoints(node);\n if (entrypoints.length === 1)\n return await dfs<_ReturnTypes>(node, mergedNodeHandler, mergedNodePrehandler)();\n\n const dependencies = entrypoints.reduce((acc, cur) => {\n acc[cur.name] = cur;\n return acc;\n }, {} as Dependencies);\n\n class VirtualNode extends DependencyNode {}\n\n const virtualEntrypoint = new VirtualNode({\n name: '_virtualEntrypoint',\n dependencies,\n });\n\n return await dfs<_ReturnTypes>(\n virtualEntrypoint,\n mergedNodeHandler,\n mergedNodePrehandler,\n )();\n },\n };\n }\n}\n\nexport const multiplexOrderedRegistrars = <\n const T extends [name: string, registrar: Registrar<{}>][],\n>(\n ...registrars: T\n) => {\n const multiplexRegistrar: Registrar<{\n [K in Extract<keyof T, number> as T[K] extends readonly [infer Name extends string, any]\n ? Name\n : never]: T[K] extends readonly [any, Registrar<infer Ret>] ? Ret : never;\n }> = {\n traverseDependencies: async (\n ...params: Parameters<Registrar<any>['traverseDependencies']>\n ) => {\n const acc: Record<string, any> = {};\n for (const [name, registrar] of registrars) {\n const result = await registrar.traverseDependencies(...params);\n acc[name] = result;\n }\n\n return acc;\n },\n } as any;\n\n return multiplexRegistrar;\n};\n"]}
|