@layerzerolabs/base-definitions 0.2.7 → 0.2.8
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 +22 -22
- package/.turbo/turbo-lint.log +1 -1
- package/.turbo/turbo-test.log +3 -3
- package/dist/{H6QNIXMU.js → 3E4NCL37.js} +28 -10
- package/dist/3E4NCL37.js.map +1 -0
- package/dist/{OIBEOODK.cjs → 6HCJDYOS.cjs} +4 -4
- package/dist/{OIBEOODK.cjs.map → 6HCJDYOS.cjs.map} +1 -1
- package/dist/{VTYVOFLM.cjs → E35XJD2D.cjs} +2 -2
- package/dist/E35XJD2D.cjs.map +1 -0
- package/dist/{EAPC6542.js → F7GZNVSO.js} +3 -3
- package/dist/{EAPC6542.js.map → F7GZNVSO.js.map} +1 -1
- package/dist/{3AKKEY5J.cjs → Q4VTGVJZ.cjs} +28 -10
- package/dist/Q4VTGVJZ.cjs.map +1 -0
- package/dist/{NQBJGAQC.js → XAFNHADO.js} +2 -2
- package/dist/XAFNHADO.js.map +1 -0
- package/dist/definitions.cjs +5 -5
- package/dist/definitions.d.ts +1 -1
- package/dist/definitions.d.ts.map +1 -1
- package/dist/definitions.js +1 -1
- package/dist/index.cjs +10 -10
- package/dist/index.js +3 -3
- package/dist/registrarBuilder.cjs +3 -3
- package/dist/registrarBuilder.d.ts +14 -3
- package/dist/registrarBuilder.d.ts.map +1 -1
- package/dist/registrarBuilder.js +1 -1
- package/dist/utils.cjs +3 -3
- package/dist/utils.js +2 -2
- package/package.json +7 -8
- package/src/definitions.ts +1 -1
- package/src/registrarBuilder.ts +35 -9
- package/test/registrarBuilder.test.ts +9 -9
- package/dist/3AKKEY5J.cjs.map +0 -1
- package/dist/H6QNIXMU.js.map +0 -1
- package/dist/NQBJGAQC.js.map +0 -1
- package/dist/VTYVOFLM.cjs.map +0 -1
package/.turbo/turbo-build.log
CHANGED
|
@@ -14,41 +14,41 @@
|
|
|
14
14
|
[32mCJS[39m [1mdist/lzyringe.cjs [22m[32m302.00 B[39m
|
|
15
15
|
[32mCJS[39m [1mdist/index.cjs [22m[32m1.42 KB[39m
|
|
16
16
|
[32mCJS[39m [1mdist/JKTGUQY4.cjs [22m[32m1.70 KB[39m
|
|
17
|
-
[32mCJS[39m [1mdist/
|
|
18
|
-
[32mCJS[39m [1mdist/
|
|
19
|
-
[32mCJS[39m [1mdist/
|
|
20
|
-
[32mCJS[39m [1mdist/
|
|
21
|
-
[32mCJS[39m [1mdist/
|
|
17
|
+
[32mCJS[39m [1mdist/registrarBuilder.cjs [22m[32m478.00 B[39m
|
|
18
|
+
[32mCJS[39m [1mdist/6HCJDYOS.cjs [22m[32m812.00 B[39m
|
|
19
|
+
[32mCJS[39m [1mdist/utils.cjs [22m[32m343.00 B[39m
|
|
20
|
+
[32mCJS[39m [1mdist/E35XJD2D.cjs [22m[32m1.68 KB[39m
|
|
21
|
+
[32mCJS[39m [1mdist/Q4VTGVJZ.cjs [22m[32m6.90 KB[39m
|
|
22
22
|
[32mCJS[39m [1mdist/YJF4D23A.cjs [22m[32m245.00 B[39m
|
|
23
23
|
[32mCJS[39m [1mdist/definitions.cjs.map [22m[32m76.00 B[39m
|
|
24
24
|
[32mCJS[39m [1mdist/lzyringe.cjs.map [22m[32m73.00 B[39m
|
|
25
|
+
[32mCJS[39m [1mdist/JKTGUQY4.cjs.map [22m[32m3.78 KB[39m
|
|
25
26
|
[32mCJS[39m [1mdist/index.cjs.map [22m[32m70.00 B[39m
|
|
26
27
|
[32mCJS[39m [1mdist/registrarBuilder.cjs.map [22m[32m81.00 B[39m
|
|
27
|
-
[32mCJS[39m [1mdist/
|
|
28
|
-
[32mCJS[39m [1mdist/OIBEOODK.cjs.map [22m[32m1.83 KB[39m
|
|
29
|
-
[32mCJS[39m [1mdist/VTYVOFLM.cjs.map [22m[32m14.00 KB[39m
|
|
30
|
-
[32mCJS[39m [1mdist/YJF4D23A.cjs.map [22m[32m73.00 B[39m
|
|
31
|
-
[32mCJS[39m [1mdist/JKTGUQY4.cjs.map [22m[32m3.78 KB[39m
|
|
28
|
+
[32mCJS[39m [1mdist/6HCJDYOS.cjs.map [22m[32m1.83 KB[39m
|
|
32
29
|
[32mCJS[39m [1mdist/utils.cjs.map [22m[32m70.00 B[39m
|
|
33
|
-
[32mCJS[39m
|
|
34
|
-
[
|
|
30
|
+
[32mCJS[39m [1mdist/YJF4D23A.cjs.map [22m[32m73.00 B[39m
|
|
31
|
+
[32mCJS[39m [1mdist/E35XJD2D.cjs.map [22m[32m14.01 KB[39m
|
|
32
|
+
[32mCJS[39m [1mdist/Q4VTGVJZ.cjs.map [22m[32m18.34 KB[39m
|
|
33
|
+
[32mCJS[39m ⚡️ Build success in 186ms
|
|
35
34
|
[32mESM[39m [1mdist/lzyringe.js [22m[32m146.00 B[39m
|
|
36
35
|
[32mESM[39m [1mdist/definitions.js [22m[32m216.00 B[39m
|
|
37
|
-
[32mESM[39m [1mdist/JJBD65HU.js [22m[32m1.65 KB[39m
|
|
38
36
|
[32mESM[39m [1mdist/registrarBuilder.js [22m[32m191.00 B[39m
|
|
39
|
-
[32mESM[39m [1mdist/
|
|
37
|
+
[32mESM[39m [1mdist/index.js [22m[32m389.00 B[39m
|
|
38
|
+
[32mESM[39m [1mdist/F7GZNVSO.js [22m[32m733.00 B[39m
|
|
40
39
|
[32mESM[39m [1mdist/utils.js [22m[32m173.00 B[39m
|
|
41
|
-
[32mESM[39m [1mdist/
|
|
40
|
+
[32mESM[39m [1mdist/JJBD65HU.js [22m[32m1.65 KB[39m
|
|
41
|
+
[32mESM[39m [1mdist/3E4NCL37.js [22m[32m6.70 KB[39m
|
|
42
|
+
[32mESM[39m [1mdist/XAFNHADO.js [22m[32m1.47 KB[39m
|
|
42
43
|
[32mESM[39m [1mdist/VUOMXK5T.js [22m[32m222.00 B[39m
|
|
43
|
-
[32mESM[39m [1mdist/NQBJGAQC.js [22m[32m1.47 KB[39m
|
|
44
|
-
[32mESM[39m [1mdist/index.js.map [22m[32m69.00 B[39m
|
|
45
44
|
[32mESM[39m [1mdist/lzyringe.js.map [22m[32m72.00 B[39m
|
|
46
45
|
[32mESM[39m [1mdist/definitions.js.map [22m[32m75.00 B[39m
|
|
47
|
-
[32mESM[39m [1mdist/JJBD65HU.js.map [22m[32m3.78 KB[39m
|
|
48
|
-
[32mESM[39m [1mdist/H6QNIXMU.js.map [22m[32m16.99 KB[39m
|
|
49
46
|
[32mESM[39m [1mdist/registrarBuilder.js.map [22m[32m80.00 B[39m
|
|
47
|
+
[32mESM[39m [1mdist/index.js.map [22m[32m69.00 B[39m
|
|
50
48
|
[32mESM[39m [1mdist/utils.js.map [22m[32m69.00 B[39m
|
|
51
|
-
[32mESM[39m [1mdist/
|
|
49
|
+
[32mESM[39m [1mdist/F7GZNVSO.js.map [22m[32m1.82 KB[39m
|
|
50
|
+
[32mESM[39m [1mdist/JJBD65HU.js.map [22m[32m3.78 KB[39m
|
|
52
51
|
[32mESM[39m [1mdist/VUOMXK5T.js.map [22m[32m72.00 B[39m
|
|
53
|
-
[32mESM[39m [1mdist/
|
|
54
|
-
[32mESM[39m
|
|
52
|
+
[32mESM[39m [1mdist/XAFNHADO.js.map [22m[32m13.99 KB[39m
|
|
53
|
+
[32mESM[39m [1mdist/3E4NCL37.js.map [22m[32m18.32 KB[39m
|
|
54
|
+
[32mESM[39m ⚡️ Build success in 186ms
|
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:26841) [MODULE_TYPELESS_PACKAGE_JSON] Warning: Module type of file:///home/runner/work/monorepo-internal/monorepo-internal/eslint.config.js?mtime=1766427679294 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 10[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 18:26:22
|
|
16
|
+
[2m Duration [22m 548ms[2m (transform 117ms, setup 0ms, collect 114ms, tests 10ms, environment 0ms, prepare 124ms)[22m
|
|
17
17
|
|
|
@@ -7,9 +7,10 @@ var RegistrarBuilder = class {
|
|
|
7
7
|
__name(this, "RegistrarBuilder");
|
|
8
8
|
}
|
|
9
9
|
defaultHandler;
|
|
10
|
-
|
|
10
|
+
nodeHandlers = {};
|
|
11
11
|
classHandlers = [];
|
|
12
12
|
classAliases = [];
|
|
13
|
+
nodeAliases = {};
|
|
13
14
|
getEntrypoints = /* @__PURE__ */ __name((node) => [
|
|
14
15
|
node
|
|
15
16
|
], "getEntrypoints");
|
|
@@ -18,11 +19,11 @@ var RegistrarBuilder = class {
|
|
|
18
19
|
throw new Error(`This registrar does not provide a handler for the dependency type used by ${JSON.stringify(node)}`);
|
|
19
20
|
};
|
|
20
21
|
}
|
|
21
|
-
|
|
22
|
-
if (this.
|
|
23
|
-
throw new Error(`Cannot define a
|
|
22
|
+
addNodeHandler(node, fn) {
|
|
23
|
+
if (this.nodeHandlers[node.name]) {
|
|
24
|
+
throw new Error(`Cannot define a node handler for an identifier that already has a handler: ${node.name}`);
|
|
24
25
|
}
|
|
25
|
-
this.
|
|
26
|
+
this.nodeHandlers[node.name] = fn;
|
|
26
27
|
return this;
|
|
27
28
|
}
|
|
28
29
|
/**
|
|
@@ -103,6 +104,19 @@ var RegistrarBuilder = class {
|
|
|
103
104
|
});
|
|
104
105
|
return this;
|
|
105
106
|
}
|
|
107
|
+
/**
|
|
108
|
+
* Alias a specific named node, such that when encountered in the tree,
|
|
109
|
+
* it will be transformed to a different node before processing.
|
|
110
|
+
* The transformed node's dependencies will be traversed instead.
|
|
111
|
+
* This is useful for short-circuiting dependency traversal for specific nodes.
|
|
112
|
+
*
|
|
113
|
+
* @param nodeName name of the node to alias
|
|
114
|
+
* @param getToNode method that returns the transformed node
|
|
115
|
+
*/
|
|
116
|
+
addNodeAlias(node, getToNode) {
|
|
117
|
+
this.nodeAliases[node.name] = getToNode;
|
|
118
|
+
return this;
|
|
119
|
+
}
|
|
106
120
|
/**
|
|
107
121
|
* Set a custom entrypoint getter function. By default, the entrypoint getter
|
|
108
122
|
* returns the node passed in as the sole entrypoint.
|
|
@@ -122,6 +136,10 @@ var RegistrarBuilder = class {
|
|
|
122
136
|
}
|
|
123
137
|
build() {
|
|
124
138
|
const mergedNodePrehandler = /* @__PURE__ */ __name((node) => {
|
|
139
|
+
const nodeAlias = this.nodeAliases[node.name];
|
|
140
|
+
if (nodeAlias) {
|
|
141
|
+
return nodeAlias(node);
|
|
142
|
+
}
|
|
125
143
|
for (const { fromNodeClass, getToNode: toNode } of this.classAliases) {
|
|
126
144
|
if (node instanceof fromNodeClass) {
|
|
127
145
|
return toNode(node);
|
|
@@ -136,11 +154,11 @@ var RegistrarBuilder = class {
|
|
|
136
154
|
value: void 0
|
|
137
155
|
};
|
|
138
156
|
}
|
|
139
|
-
const
|
|
140
|
-
if (
|
|
157
|
+
const nodeHandler = this.nodeHandlers[node.name];
|
|
158
|
+
if (nodeHandler) {
|
|
141
159
|
return {
|
|
142
160
|
key: node.name,
|
|
143
|
-
value: await
|
|
161
|
+
value: await nodeHandler(node, ancestry)
|
|
144
162
|
};
|
|
145
163
|
}
|
|
146
164
|
for (const { nodeClass, identifier, fn } of this.classHandlers) {
|
|
@@ -193,5 +211,5 @@ var multiplexOrderedRegistrars = /* @__PURE__ */ __name((...registrars) => {
|
|
|
193
211
|
}, "multiplexOrderedRegistrars");
|
|
194
212
|
|
|
195
213
|
export { RegistrarBuilder, multiplexOrderedRegistrars };
|
|
196
|
-
//# sourceMappingURL=
|
|
197
|
-
//# sourceMappingURL=
|
|
214
|
+
//# sourceMappingURL=3E4NCL37.js.map
|
|
215
|
+
//# sourceMappingURL=3E4NCL37.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","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":"3E4NCL37.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: (node: DependencyNode) => 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(fn: (node: DependencyNode) => DependencyNode[]) {\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 = 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"]}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var E35XJD2D_cjs = require('./E35XJD2D.cjs');
|
|
4
4
|
var YJF4D23A_cjs = require('./YJF4D23A.cjs');
|
|
5
5
|
|
|
6
6
|
// src/utils.ts
|
|
7
7
|
var extractSchemaFromFactory = /* @__PURE__ */ YJF4D23A_cjs.__name((factory, dimension) => {
|
|
8
|
-
const schema = (factory.dimensionToSchemaMap.byDimension && Object.values(factory.dimensionToSchemaMap.byDimension).find(([dim]) =>
|
|
8
|
+
const schema = (factory.dimensionToSchemaMap.byDimension && Object.values(factory.dimensionToSchemaMap.byDimension).find(([dim]) => E35XJD2D_cjs.serializeDimensions(dim) === E35XJD2D_cjs.serializeDimensions(dimension))?.[1]) ?? factory.dimensionToSchemaMap.base;
|
|
9
9
|
if (!schema?.shape) {
|
|
10
10
|
throw new Error(`Couldn't resolve the schema of factory ${factory.name} for dim ${JSON.stringify(dimension)}`);
|
|
11
11
|
}
|
|
@@ -13,5 +13,5 @@ var extractSchemaFromFactory = /* @__PURE__ */ YJF4D23A_cjs.__name((factory, dim
|
|
|
13
13
|
}, "extractSchemaFromFactory");
|
|
14
14
|
|
|
15
15
|
exports.extractSchemaFromFactory = extractSchemaFromFactory;
|
|
16
|
-
//# sourceMappingURL=
|
|
17
|
-
//# sourceMappingURL=
|
|
16
|
+
//# sourceMappingURL=6HCJDYOS.cjs.map
|
|
17
|
+
//# sourceMappingURL=6HCJDYOS.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils.ts"],"names":["extractSchemaFromFactory","__name","factory","dimension","schema","dimensionToSchemaMap","byDimension","Object","values","find","dim","serializeDimensions","base","shape","Error","name","JSON","stringify"],"mappings":";;;;;;AAOO,IAAMA,wBAAAA,mBAA2BC,mBAAA,CAAA,CACpCC,OAAAA,EACAC,SAAAA,KAAAA;AAEA,EAAA,MAAMC,MAAAA,GAAAA,CACDF,OAAAA,CAAQG,oBAAAA,CAAqBC,WAAAA,IAC1BC,MAAAA,CAAOC,OAAON,OAAAA,CAAQG,oBAAAA,CAAqBC,WAAW,CAAA,CAAoBG,IAAAA,CACtE,CAAC,CAACC,GAAAA,CAAAA,KAASC,gCAAAA,CAAoBD,GAAAA,CAAAA,KAASC,gCAAAA,CAAoBR,SAAAA,CAAAA,CAAAA,GAC5D,CAAA,CAAA,KACRD,OAAAA,CAAQG,oBAAAA,CAAqBO,IAAAA;AACjC,EAAA,IAAI,CAACR,QAAQS,KAAAA,EAAO;AAChB,IAAA,MAAM,IAAIC,KAAAA,CACN,CAAA,uCAAA,EAA0CZ,OAAAA,CAAQa,IAAI,YAAYC,IAAAA,CAAKC,SAAAA,CAAUd,SAAAA,CAAAA,CAAAA,CAAY,CAAA;AAErG,EAAA;AAEA,EAAA,OAAOC,MAAAA;AACX,CAAA,EAjBwC,0BAAA","file":"
|
|
1
|
+
{"version":3,"sources":["../src/utils.ts"],"names":["extractSchemaFromFactory","__name","factory","dimension","schema","dimensionToSchemaMap","byDimension","Object","values","find","dim","serializeDimensions","base","shape","Error","name","JSON","stringify"],"mappings":";;;;;;AAOO,IAAMA,wBAAAA,mBAA2BC,mBAAA,CAAA,CACpCC,OAAAA,EACAC,SAAAA,KAAAA;AAEA,EAAA,MAAMC,MAAAA,GAAAA,CACDF,OAAAA,CAAQG,oBAAAA,CAAqBC,WAAAA,IAC1BC,MAAAA,CAAOC,OAAON,OAAAA,CAAQG,oBAAAA,CAAqBC,WAAW,CAAA,CAAoBG,IAAAA,CACtE,CAAC,CAACC,GAAAA,CAAAA,KAASC,gCAAAA,CAAoBD,GAAAA,CAAAA,KAASC,gCAAAA,CAAoBR,SAAAA,CAAAA,CAAAA,GAC5D,CAAA,CAAA,KACRD,OAAAA,CAAQG,oBAAAA,CAAqBO,IAAAA;AACjC,EAAA,IAAI,CAACR,QAAQS,KAAAA,EAAO;AAChB,IAAA,MAAM,IAAIC,KAAAA,CACN,CAAA,uCAAA,EAA0CZ,OAAAA,CAAQa,IAAI,YAAYC,IAAAA,CAAKC,SAAAA,CAAUd,SAAAA,CAAAA,CAAAA,CAAY,CAAA;AAErG,EAAA;AAEA,EAAA,OAAOC,MAAAA;AACX,CAAA,EAjBwC,0BAAA","file":"6HCJDYOS.cjs","sourcesContent":["import type z from 'zod/v4';\n\nimport type { AdvancedRecord } from '@layerzerolabs/typescript-utils';\n\nimport type { Factory } from './definitions';\nimport { type FactoryDefinition, serializeDimensions } from './definitions';\n\nexport const extractSchemaFromFactory = <Dim extends z.ZodObject>(\n factory: FactoryDefinition<any, Dim, any, any, any> | Factory<any, any, any, any>,\n dimension: z.infer<Dim>,\n): z.ZodObject => {\n const schema =\n (factory.dimensionToSchemaMap.byDimension &&\n Object.values(factory.dimensionToSchemaMap.byDimension as AdvancedRecord).find(\n ([dim]) => serializeDimensions(dim) === serializeDimensions(dimension),\n )?.[1]) ??\n factory.dimensionToSchemaMap.base;\n if (!schema?.shape) {\n throw new Error(\n `Couldn't resolve the schema of factory ${factory.name} for dim ${JSON.stringify(dimension)}`,\n );\n }\n\n return schema;\n};\n"]}
|
|
@@ -49,5 +49,5 @@ exports.FactoryDefinition = FactoryDefinition;
|
|
|
49
49
|
exports.ObjectDefinition = ObjectDefinition;
|
|
50
50
|
exports.deserializeDimensions = deserializeDimensions;
|
|
51
51
|
exports.serializeDimensions = serializeDimensions;
|
|
52
|
-
//# sourceMappingURL=
|
|
53
|
-
//# sourceMappingURL=
|
|
52
|
+
//# sourceMappingURL=E35XJD2D.cjs.map
|
|
53
|
+
//# sourceMappingURL=E35XJD2D.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/definitions.ts"],"names":["FactoryDefinition","DependencyNode","dimensions","specialization","dimensionToSchemaMap","getFactory","args","ObjectDefinition","schema","serializeDimensions","__name","dim","Object","keys","length","entries","sort","map","dimName","dimVal","join","deserializeDimensions","serializedDim","fromEntries","split","pair","dimValParts"],"mappings":";;;;;AAkIO,IAAMA,iBAAAA,GAAN,cAMGC,8BAAAA,CAAAA;EArIV;;;AAsIoBC,EAAAA,UAAAA;AACAC,EAAAA,cAAAA;AACAC,EAAAA,oBAAAA;AACAC,EAAAA,UAAAA;AAChB,EAAA,WAAA,CAAY,EACRH,UAAAA,EACAC,cAAAA,EACAC,sBACAC,UAAAA,EACA,GAAGC,MAAAA,EAMmE;AACtE,IAAA,KAAA,CAAMA,IAAAA,CAAAA;AACN,IAAA,IAAA,CAAKJ,UAAAA,GAAaA,UAAAA;AAClB,IAAA,IAAA,CAAKC,cAAAA,GAAiBA,cAAAA;AACtB,IAAA,IAAA,CAAKC,oBAAAA,GAAuBA,oBAAAA;AAC5B,IAAA,IAAA,CAAKC,UAAAA,GAAaA,UAAAA;AACtB,EAAA;AACJ;AAaO,IAAeE,gBAAAA,GAAf,cAIGN,8BAAAA,CAAAA;EA7KV;;;AA8KoBO,EAAAA,MAAAA;AAEhB,EAAA,WAAA,CAAY,EACRA,MAAAA,EACA,GAAGF,IAAAA,EAAAA,EAGmE;AACtE,IAAA,KAAA,CAAMA,IAAAA,CAAAA;AACN,IAAA,IAAA,CAAKE,MAAAA,GAASA,MAAAA;AAClB,EAAA;AACJ;AA8GO,IAAMC,mBAAAA,mBAAsBC,mBAAA,CAAA,CAACC,GAAAA,GAAc,EAAC,KAAC;AAChD,EAAA,OAAOC,MAAAA,CAAOC,IAAAA,CAAKF,GAAAA,CAAAA,CAAKG,MAAAA,GAClBF,OAAOG,OAAAA,CAAQJ,GAAAA,CAAAA,CACVK,IAAAA,EAAI,CACJC,GAAAA,CAAI,CAAC,CAACC,OAAAA,EAASC,MAAAA,CAAAA,KAAY,CAAA,EAAGD,OAAAA,CAAAA,CAAAA,EAAWC,MAAAA,CAAAA,CAAQ,CAAA,CACjDC,IAAAA,CAAK,GAAA,CAAA,GACV,OAAA;AACV,CAAA,EAPmC,qBAAA;AAS5B,IAAMC,qBAAAA,wCAAyBC,aAAAA,KAAAA;AAClC,EAAA,IAAIA,kBAAkB,OAAA,EAAS;AAC3B,IAAA,OAAO,EAAC;AACZ,EAAA;AAEA,EAAA,OAAOV,MAAAA,CAAOW,YACVD,aAAAA,CAAcE,KAAAA,CAAM,GAAA,CAAA,CAAKP,GAAAA,CAAI,CAACQ,IAAAA,KAAAA;AAC1B,IAAA,MAAM,CAACP,OAAAA,EAAS,GAAGQ,WAAAA,CAAAA,GAAeD,IAAAA,CAAKD,MAAM,GAAA,CAAA;AAC7C,IAAA,OAAO;AAACN,MAAAA,OAAAA;AAASQ,MAAAA,WAAAA,CAAYN,KAAK,GAAA;;AACtC,EAAA,CAAA,CAAA,CAAA;AAER,CAAA,EAXqC,uBAAA","file":"E35XJD2D.cjs","sourcesContent":["import type { z } from 'zod/v4';\n\nimport type { Dependencies } from '@layerzerolabs/dependency-graph';\nimport { DependencyNode } from '@layerzerolabs/dependency-graph';\nimport type { FunctionPointer } from '@layerzerolabs/function-pointer';\nimport type {\n AdvancedRecord,\n AdvancedRecordLookup,\n Merge,\n MethodNameOf,\n RemoveNever,\n UnionToIntersection,\n} from '@layerzerolabs/typescript-utils';\nimport type { IsAny } from '@layerzerolabs/typescript-utils';\n\nexport type DimensionToSchemaMap<DimConstraint extends object = object> = {\n byDimension?: AdvancedRecord<DimConstraint, z.ZodType>;\n base: z.ZodType;\n};\n\nexport type FactorySpecialization<DMap extends DimensionToSchemaMap = DimensionToSchemaMap> = {\n spec: z.ZodObject<any>;\n exempt: readonly MethodNameOf<GetSupersetOfModelsFromSchema<DMap>>[];\n};\n\nexport type WithInjectedSpecialization<T, Specialization extends FactorySpecialization<any>> = [\n {},\n] extends [z.infer<Specialization['spec']>]\n ? T\n : {\n [K in keyof T]: K extends Specialization['exempt'][number]\n ? T[K]\n : T[K] extends (...args: infer A) => infer R\n ? (specialization: z.infer<Specialization['spec']>, ...args: A) => R\n : T[K];\n };\n\nexport type WithSpecializeMethod<WithInjection, WithoutInjection, S> = {} extends S\n ? WithoutInjection\n : WithInjection extends (...args: infer Args) => infer Ret\n ? (...args: Args) => Ret\n : WithInjection & {\n specialize: (specialization: S) => WithoutInjection;\n };\n\nexport type GetModelFromSchema<DMap extends DimensionToSchemaMap, Dim> =\n IsAny<Dim> extends true\n ? z.infer<DMap['base']>\n : AdvancedRecordLookup<DMap['byDimension'], Dim> extends never\n ? z.infer<DMap['base']>\n : Merge<z.infer<DMap['base']>, z.infer<AdvancedRecordLookup<DMap['byDimension'], Dim>>>;\n\nexport type GetSupersetOfModelsFromSchema<DMap extends DimensionToSchemaMap> = UnionToIntersection<\n {\n [Key in keyof DMap['byDimension']]: DMap['byDimension'][Key] extends [any, any]\n ? z.infer<DMap['byDimension'][Key][1]>\n : never;\n }[keyof DMap['byDimension']]\n> &\n z.infer<DMap['base']>;\n\ntype GetImplFunctionWithConditionalOptionalDim<Dim, Return> = {} extends Dim\n ? (dim?: Dim) => Return\n : (dim: Dim) => Return;\n\ntype GetImplOverloads<\n Dim extends z.ZodObject<any>,\n Specialization extends FactorySpecialization<DMap>,\n DMap extends DimensionToSchemaMap<z.infer<Dim>>,\n> = UnionToIntersection<\n | {\n [I in keyof DMap['byDimension']]: DMap['byDimension'][I] extends readonly [infer K, any]\n ? {\n getImpl: GetImplFunctionWithConditionalOptionalDim<\n K,\n WithSpecializeMethod<\n WithInjectedSpecialization<GetModelFromSchema<DMap, K>, Specialization>,\n GetModelFromSchema<DMap, K>,\n z.infer<Specialization['spec']>\n >\n >;\n }\n : never;\n }[keyof DMap['byDimension']]\n | {\n getImpl: GetImplFunctionWithConditionalOptionalDim<\n z.infer<Dim>,\n WithSpecializeMethod<\n WithInjectedSpecialization<z.infer<DMap['base']>, Specialization>,\n z.infer<DMap['base']>,\n z.infer<Specialization['spec']>\n >\n >;\n }\n>;\n\nexport type Factory<\n _Dependencies extends Dependencies,\n Dim extends z.ZodObject<any>,\n Specialization extends FactorySpecialization<DMap>,\n DMap extends DimensionToSchemaMap<z.infer<Dim>>,\n> = {\n name: string;\n implKeys: string[];\n dimensionToSchemaMap: DMap;\n} & GetImplOverloads<Dim, Specialization, DMap>;\n\nexport type GetFactory<\n _Dependencies extends Dependencies,\n Dim extends z.ZodObject<any>,\n Specialization extends FactorySpecialization<DMap>,\n DMap extends DimensionToSchemaMap<z.infer<Dim>>,\n> = () =>\n | Factory<_Dependencies, Dim, Specialization, DMap>\n | Promise<Factory<_Dependencies, Dim, Specialization, DMap>>;\n\n/**\n * <!-- anchor:FactoryDefinition -->\n * Factory definitions are a type of dependency node that shall be resolved to a *factory*.\n * A factory is an object that provides a getImpl method which accepts some parameters `dim`,\n * and returns some object `getImplMetadata.getModel(dim)`.\n * That is, a factory definition is given by the set of parameters it uses to get its implementations,\n * and a function defining the schema it will return for each set of parameters.\n * @param name inherited from {@link DependencyNode}\n * @param dependencies inherited from {@link DependencyNode}\n * @param dimensions a Zod schema for the parameters this factory operates on.\n * @param dimensionToSchemaMap A map from dimension objects to the Zod schema for the implementation.\n * @param getFactory a method that should return an object with a `getImpl` method that returns\n * entities adhering to the schema for the corresponding `getModel` call\n */\nexport class FactoryDefinition<\n Name extends string,\n Dim extends z.ZodObject<any>,\n const Specialization extends FactorySpecialization<DMap>,\n DMap extends DimensionToSchemaMap<z.infer<Dim>>,\n _Dependencies extends Dependencies,\n> extends DependencyNode<Name, _Dependencies> {\n public readonly dimensions: Dim;\n public readonly specialization: Specialization;\n public readonly dimensionToSchemaMap: DMap;\n public readonly getFactory: GetFactory<_Dependencies, Dim, Specialization, DMap>;\n constructor({\n dimensions,\n specialization,\n dimensionToSchemaMap,\n getFactory,\n ...args\n }: {\n dimensions: Dim;\n specialization: Specialization;\n dimensionToSchemaMap: DMap;\n getFactory: GetFactory<_Dependencies, Dim, Specialization, DMap>;\n } & ConstructorParameters<typeof DependencyNode<Name, _Dependencies>>[0]) {\n super(args);\n this.dimensions = dimensions;\n this.specialization = specialization;\n this.dimensionToSchemaMap = dimensionToSchemaMap;\n this.getFactory = getFactory;\n }\n}\n\n/**\n * <!-- anchor:ObjectDefinition -->\n * An object definition is a dependency node that refers to some entity\n * matching a given schema. That is, it may be resolved to any entity\n * that adheres to the {@link schema}.\n * The object definition is abstract, as it cannot be meaningfully resolved without\n * additional information. For an example of an object definition, see ReflexiveObjectDefinition or ContextDefinition\n * @param name inherited from {@link DependencyNode}\n * @param dependencies inherited from {@link DependencyNode}\n * @param schema a Zod schema defining the expected resolution for this definition\n */\nexport abstract class ObjectDefinition<\n Name extends string,\n Schema extends z.ZodSchema,\n _Dependencies extends Dependencies,\n> extends DependencyNode<Name, _Dependencies> {\n public readonly schema: Schema;\n\n constructor({\n schema,\n ...args\n }: {\n schema: Schema;\n } & ConstructorParameters<typeof DependencyNode<Name, _Dependencies>>[0]) {\n super(args);\n this.schema = schema;\n }\n}\n\nexport type Definition<Name extends string> =\n | FactoryDefinition<Name, any, any, any, any>\n | ObjectDefinition<Name, any, any>;\n\n/**\n * Infers the expected type of a definition once it has been resolved\n */\nexport type ResolvedDefinition<Definition extends DependencyNode<any, any>> =\n Definition extends ObjectDefinition<any, infer Schema, any>\n ? z.infer<Schema>\n : Definition extends FactoryDefinition<\n any,\n infer Dim,\n infer Specialization,\n infer DMap,\n any\n >\n ? Factory<Definition['dependencies'], Dim, Specialization, DMap>\n : Definition extends FactoryDefinition<any, any, any, any, any>\n ? Factory<\n Definition['dependencies'],\n Definition['dimensions'],\n Definition['specialization'],\n Definition['dimensionToSchemaMap']\n >\n : unknown;\n\n/**\n * Given a record from string to definition, maps each definition T to ResolvedDefinition<T>. Removes `definition` suffix from name\n */\nexport type ResolvedDefinitionMap<Deps extends Dependencies> = {\n [Key in keyof Deps as Key extends `${infer Name}Definition` ? Name : Key]: ResolvedDefinition<\n Deps[Key]\n >;\n};\n\n/**\n * For some factory definition F and some dimension D s.t. D ⊇ F.dimensions, infers the expected return type of\n * ResolvedDefinition<F>.getImpl(D)\n */\nexport type ResolvedFactoryImplementation<Definition extends DependencyNode<any, any>, Dim> =\n Definition extends FactoryDefinition<any, any, any, any, any>\n ? WithSpecializeMethod<\n WithInjectedSpecialization<\n GetModelFromSchema<Definition['dimensionToSchemaMap'], Dim>,\n Definition['specialization']\n >,\n GetModelFromSchema<Definition['dimensionToSchemaMap'], Dim>,\n z.infer<Definition['specialization']['spec']>\n >\n : never;\n\ntype RemoveDefinitionSuffix<Key extends string> = Key extends `${infer Name}Definition`\n ? Name\n : Key;\ntype ReplaceFactorySuffix<Key extends string> = Key extends `${infer Name}Factory`\n ? `${Name}Impl`\n : Key;\n\n/**\n * Given a record from string to definition and some dimension D, maps each definition T to ResolvedFactoryImplementation<T, D>\n * Removes Definition | ActivityFactory | Factory from the suffix of the key\n */\nexport type ResolvedFactoryImplementationMap<Deps extends Dependencies, Dim> = RemoveNever<{\n [Key in keyof Deps as Key extends string\n ? ReplaceFactorySuffix<RemoveDefinitionSuffix<Key>>\n : never]: ResolvedFactoryImplementation<Deps[Key], Dim>;\n}>;\n\ntype ActivityFactoryContext<\n _FactoryDefinition extends FactoryDefinition<any, any, any, any, any>,\n Dim,\n _PrivateSchemaExtension extends z.ZodObject = z.ZodObject<{}, z.core.$strip>,\n> = {\n getFunctionPointer: <\n MethodName extends MethodNameOf<\n ResolvedFactoryImplementation<_FactoryDefinition, Dim> &\n z.infer<_PrivateSchemaExtension>\n >,\n >(\n methodName: MethodName,\n ) => FunctionPointer<\n (ResolvedFactoryImplementation<_FactoryDefinition, Dim> &\n z.infer<_PrivateSchemaExtension>)[MethodName]\n >;\n};\n\n/**\n * The parameters that shall be received by a factory's implementation getter\n */\nexport type Context<\n _FactoryDefinition extends FactoryDefinition<any, any, any, any, any>,\n Dim,\n _PrivateSchemaExtension extends z.ZodObject = z.ZodObject<{}, z.core.$strip>,\n> = {\n name: _FactoryDefinition extends FactoryDefinition<infer Name, any, any, any, any>\n ? Name\n : never;\n dependencies: _FactoryDefinition extends FactoryDefinition<any, any, any, any, infer Deps>\n ? ResolvedDefinitionMap<Deps>\n : never;\n dim: Dim;\n impls: _FactoryDefinition extends FactoryDefinition<any, any, any, any, infer Deps>\n ? ResolvedFactoryImplementationMap<Deps, Dim>\n : never;\n self: ResolvedFactoryImplementation<_FactoryDefinition, Dim> & z.infer<_PrivateSchemaExtension>;\n} & ActivityFactoryContext<_FactoryDefinition, Dim, _PrivateSchemaExtension>;\n\nexport const serializeDimensions = (dim: object = {}) => {\n return Object.keys(dim).length\n ? Object.entries(dim)\n .sort()\n .map(([dimName, dimVal]) => `${dimName}_${dimVal}`)\n .join('&')\n : '_base';\n};\n\nexport const deserializeDimensions = (serializedDim: string) => {\n if (serializedDim === '_base') {\n return {};\n }\n\n return Object.fromEntries(\n serializedDim.split('&').map((pair) => {\n const [dimName, ...dimValParts] = pair.split('_');\n return [dimName, dimValParts.join('_')];\n }),\n );\n};\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { serializeDimensions } from './
|
|
1
|
+
import { serializeDimensions } from './XAFNHADO.js';
|
|
2
2
|
import { __name } from './VUOMXK5T.js';
|
|
3
3
|
|
|
4
4
|
// src/utils.ts
|
|
@@ -11,5 +11,5 @@ var extractSchemaFromFactory = /* @__PURE__ */ __name((factory, dimension) => {
|
|
|
11
11
|
}, "extractSchemaFromFactory");
|
|
12
12
|
|
|
13
13
|
export { extractSchemaFromFactory };
|
|
14
|
-
//# sourceMappingURL=
|
|
15
|
-
//# sourceMappingURL=
|
|
14
|
+
//# sourceMappingURL=F7GZNVSO.js.map
|
|
15
|
+
//# sourceMappingURL=F7GZNVSO.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils.ts"],"names":["extractSchemaFromFactory","factory","dimension","schema","dimensionToSchemaMap","byDimension","Object","values","find","dim","serializeDimensions","base","shape","Error","name","JSON","stringify"],"mappings":";;;;AAOO,IAAMA,wBAAAA,mBAA2B,MAAA,CAAA,CACpCC,OAAAA,EACAC,SAAAA,KAAAA;AAEA,EAAA,MAAMC,MAAAA,GAAAA,CACDF,OAAAA,CAAQG,oBAAAA,CAAqBC,WAAAA,IAC1BC,MAAAA,CAAOC,OAAON,OAAAA,CAAQG,oBAAAA,CAAqBC,WAAW,CAAA,CAAoBG,IAAAA,CACtE,CAAC,CAACC,GAAAA,CAAAA,KAASC,mBAAAA,CAAoBD,GAAAA,CAAAA,KAASC,mBAAAA,CAAoBR,SAAAA,CAAAA,CAAAA,GAC5D,CAAA,CAAA,KACRD,OAAAA,CAAQG,oBAAAA,CAAqBO,IAAAA;AACjC,EAAA,IAAI,CAACR,QAAQS,KAAAA,EAAO;AAChB,IAAA,MAAM,IAAIC,KAAAA,CACN,CAAA,uCAAA,EAA0CZ,OAAAA,CAAQa,IAAI,YAAYC,IAAAA,CAAKC,SAAAA,CAAUd,SAAAA,CAAAA,CAAAA,CAAY,CAAA;AAErG,EAAA;AAEA,EAAA,OAAOC,MAAAA;AACX,CAAA,EAjBwC,0BAAA","file":"
|
|
1
|
+
{"version":3,"sources":["../src/utils.ts"],"names":["extractSchemaFromFactory","factory","dimension","schema","dimensionToSchemaMap","byDimension","Object","values","find","dim","serializeDimensions","base","shape","Error","name","JSON","stringify"],"mappings":";;;;AAOO,IAAMA,wBAAAA,mBAA2B,MAAA,CAAA,CACpCC,OAAAA,EACAC,SAAAA,KAAAA;AAEA,EAAA,MAAMC,MAAAA,GAAAA,CACDF,OAAAA,CAAQG,oBAAAA,CAAqBC,WAAAA,IAC1BC,MAAAA,CAAOC,OAAON,OAAAA,CAAQG,oBAAAA,CAAqBC,WAAW,CAAA,CAAoBG,IAAAA,CACtE,CAAC,CAACC,GAAAA,CAAAA,KAASC,mBAAAA,CAAoBD,GAAAA,CAAAA,KAASC,mBAAAA,CAAoBR,SAAAA,CAAAA,CAAAA,GAC5D,CAAA,CAAA,KACRD,OAAAA,CAAQG,oBAAAA,CAAqBO,IAAAA;AACjC,EAAA,IAAI,CAACR,QAAQS,KAAAA,EAAO;AAChB,IAAA,MAAM,IAAIC,KAAAA,CACN,CAAA,uCAAA,EAA0CZ,OAAAA,CAAQa,IAAI,YAAYC,IAAAA,CAAKC,SAAAA,CAAUd,SAAAA,CAAAA,CAAAA,CAAY,CAAA;AAErG,EAAA;AAEA,EAAA,OAAOC,MAAAA;AACX,CAAA,EAjBwC,0BAAA","file":"F7GZNVSO.js","sourcesContent":["import type z from 'zod/v4';\n\nimport type { AdvancedRecord } from '@layerzerolabs/typescript-utils';\n\nimport type { Factory } from './definitions';\nimport { type FactoryDefinition, serializeDimensions } from './definitions';\n\nexport const extractSchemaFromFactory = <Dim extends z.ZodObject>(\n factory: FactoryDefinition<any, Dim, any, any, any> | Factory<any, any, any, any>,\n dimension: z.infer<Dim>,\n): z.ZodObject => {\n const schema =\n (factory.dimensionToSchemaMap.byDimension &&\n Object.values(factory.dimensionToSchemaMap.byDimension as AdvancedRecord).find(\n ([dim]) => serializeDimensions(dim) === serializeDimensions(dimension),\n )?.[1]) ??\n factory.dimensionToSchemaMap.base;\n if (!schema?.shape) {\n throw new Error(\n `Couldn't resolve the schema of factory ${factory.name} for dim ${JSON.stringify(dimension)}`,\n );\n }\n\n return schema;\n};\n"]}
|
|
@@ -9,9 +9,10 @@ var RegistrarBuilder = class {
|
|
|
9
9
|
YJF4D23A_cjs.__name(this, "RegistrarBuilder");
|
|
10
10
|
}
|
|
11
11
|
defaultHandler;
|
|
12
|
-
|
|
12
|
+
nodeHandlers = {};
|
|
13
13
|
classHandlers = [];
|
|
14
14
|
classAliases = [];
|
|
15
|
+
nodeAliases = {};
|
|
15
16
|
getEntrypoints = /* @__PURE__ */ YJF4D23A_cjs.__name((node) => [
|
|
16
17
|
node
|
|
17
18
|
], "getEntrypoints");
|
|
@@ -20,11 +21,11 @@ var RegistrarBuilder = class {
|
|
|
20
21
|
throw new Error(`This registrar does not provide a handler for the dependency type used by ${JSON.stringify(node)}`);
|
|
21
22
|
};
|
|
22
23
|
}
|
|
23
|
-
|
|
24
|
-
if (this.
|
|
25
|
-
throw new Error(`Cannot define a
|
|
24
|
+
addNodeHandler(node, fn) {
|
|
25
|
+
if (this.nodeHandlers[node.name]) {
|
|
26
|
+
throw new Error(`Cannot define a node handler for an identifier that already has a handler: ${node.name}`);
|
|
26
27
|
}
|
|
27
|
-
this.
|
|
28
|
+
this.nodeHandlers[node.name] = fn;
|
|
28
29
|
return this;
|
|
29
30
|
}
|
|
30
31
|
/**
|
|
@@ -105,6 +106,19 @@ var RegistrarBuilder = class {
|
|
|
105
106
|
});
|
|
106
107
|
return this;
|
|
107
108
|
}
|
|
109
|
+
/**
|
|
110
|
+
* Alias a specific named node, such that when encountered in the tree,
|
|
111
|
+
* it will be transformed to a different node before processing.
|
|
112
|
+
* The transformed node's dependencies will be traversed instead.
|
|
113
|
+
* This is useful for short-circuiting dependency traversal for specific nodes.
|
|
114
|
+
*
|
|
115
|
+
* @param nodeName name of the node to alias
|
|
116
|
+
* @param getToNode method that returns the transformed node
|
|
117
|
+
*/
|
|
118
|
+
addNodeAlias(node, getToNode) {
|
|
119
|
+
this.nodeAliases[node.name] = getToNode;
|
|
120
|
+
return this;
|
|
121
|
+
}
|
|
108
122
|
/**
|
|
109
123
|
* Set a custom entrypoint getter function. By default, the entrypoint getter
|
|
110
124
|
* returns the node passed in as the sole entrypoint.
|
|
@@ -124,6 +138,10 @@ var RegistrarBuilder = class {
|
|
|
124
138
|
}
|
|
125
139
|
build() {
|
|
126
140
|
const mergedNodePrehandler = /* @__PURE__ */ YJF4D23A_cjs.__name((node) => {
|
|
141
|
+
const nodeAlias = this.nodeAliases[node.name];
|
|
142
|
+
if (nodeAlias) {
|
|
143
|
+
return nodeAlias(node);
|
|
144
|
+
}
|
|
127
145
|
for (const { fromNodeClass, getToNode: toNode } of this.classAliases) {
|
|
128
146
|
if (node instanceof fromNodeClass) {
|
|
129
147
|
return toNode(node);
|
|
@@ -138,11 +156,11 @@ var RegistrarBuilder = class {
|
|
|
138
156
|
value: void 0
|
|
139
157
|
};
|
|
140
158
|
}
|
|
141
|
-
const
|
|
142
|
-
if (
|
|
159
|
+
const nodeHandler = this.nodeHandlers[node.name];
|
|
160
|
+
if (nodeHandler) {
|
|
143
161
|
return {
|
|
144
162
|
key: node.name,
|
|
145
|
-
value: await
|
|
163
|
+
value: await nodeHandler(node, ancestry)
|
|
146
164
|
};
|
|
147
165
|
}
|
|
148
166
|
for (const { nodeClass, identifier, fn } of this.classHandlers) {
|
|
@@ -196,5 +214,5 @@ var multiplexOrderedRegistrars = /* @__PURE__ */ YJF4D23A_cjs.__name((...registr
|
|
|
196
214
|
|
|
197
215
|
exports.RegistrarBuilder = RegistrarBuilder;
|
|
198
216
|
exports.multiplexOrderedRegistrars = multiplexOrderedRegistrars;
|
|
199
|
-
//# sourceMappingURL=
|
|
200
|
-
//# sourceMappingURL=
|
|
217
|
+
//# sourceMappingURL=Q4VTGVJZ.cjs.map
|
|
218
|
+
//# sourceMappingURL=Q4VTGVJZ.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","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":"Q4VTGVJZ.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: (node: DependencyNode) => 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(fn: (node: DependencyNode) => DependencyNode[]) {\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 = 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"]}
|
|
@@ -44,5 +44,5 @@ var deserializeDimensions = /* @__PURE__ */ __name((serializedDim) => {
|
|
|
44
44
|
}, "deserializeDimensions");
|
|
45
45
|
|
|
46
46
|
export { FactoryDefinition, ObjectDefinition, deserializeDimensions, serializeDimensions };
|
|
47
|
-
//# sourceMappingURL=
|
|
48
|
-
//# sourceMappingURL=
|
|
47
|
+
//# sourceMappingURL=XAFNHADO.js.map
|
|
48
|
+
//# sourceMappingURL=XAFNHADO.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/definitions.ts"],"names":["FactoryDefinition","DependencyNode","dimensions","specialization","dimensionToSchemaMap","getFactory","args","ObjectDefinition","schema","serializeDimensions","dim","Object","keys","length","entries","sort","map","dimName","dimVal","join","deserializeDimensions","serializedDim","fromEntries","split","pair","dimValParts"],"mappings":";;;AAkIO,IAAMA,iBAAAA,GAAN,cAMGC,cAAAA,CAAAA;EArIV;;;AAsIoBC,EAAAA,UAAAA;AACAC,EAAAA,cAAAA;AACAC,EAAAA,oBAAAA;AACAC,EAAAA,UAAAA;AAChB,EAAA,WAAA,CAAY,EACRH,UAAAA,EACAC,cAAAA,EACAC,sBACAC,UAAAA,EACA,GAAGC,MAAAA,EAMmE;AACtE,IAAA,KAAA,CAAMA,IAAAA,CAAAA;AACN,IAAA,IAAA,CAAKJ,UAAAA,GAAaA,UAAAA;AAClB,IAAA,IAAA,CAAKC,cAAAA,GAAiBA,cAAAA;AACtB,IAAA,IAAA,CAAKC,oBAAAA,GAAuBA,oBAAAA;AAC5B,IAAA,IAAA,CAAKC,UAAAA,GAAaA,UAAAA;AACtB,EAAA;AACJ;AAaO,IAAeE,gBAAAA,GAAf,cAIGN,cAAAA,CAAAA;EA7KV;;;AA8KoBO,EAAAA,MAAAA;AAEhB,EAAA,WAAA,CAAY,EACRA,MAAAA,EACA,GAAGF,IAAAA,EAAAA,EAGmE;AACtE,IAAA,KAAA,CAAMA,IAAAA,CAAAA;AACN,IAAA,IAAA,CAAKE,MAAAA,GAASA,MAAAA;AAClB,EAAA;AACJ;AA8GO,IAAMC,mBAAAA,mBAAsB,MAAA,CAAA,CAACC,GAAAA,GAAc,EAAC,KAAC;AAChD,EAAA,OAAOC,MAAAA,CAAOC,IAAAA,CAAKF,GAAAA,CAAAA,CAAKG,MAAAA,GAClBF,OAAOG,OAAAA,CAAQJ,GAAAA,CAAAA,CACVK,IAAAA,EAAI,CACJC,GAAAA,CAAI,CAAC,CAACC,OAAAA,EAASC,MAAAA,CAAAA,KAAY,CAAA,EAAGD,OAAAA,CAAAA,CAAAA,EAAWC,MAAAA,CAAAA,CAAQ,CAAA,CACjDC,IAAAA,CAAK,GAAA,CAAA,GACV,OAAA;AACV,CAAA,EAPmC,qBAAA;AAS5B,IAAMC,qBAAAA,2BAAyBC,aAAAA,KAAAA;AAClC,EAAA,IAAIA,kBAAkB,OAAA,EAAS;AAC3B,IAAA,OAAO,EAAC;AACZ,EAAA;AAEA,EAAA,OAAOV,MAAAA,CAAOW,YACVD,aAAAA,CAAcE,KAAAA,CAAM,GAAA,CAAA,CAAKP,GAAAA,CAAI,CAACQ,IAAAA,KAAAA;AAC1B,IAAA,MAAM,CAACP,OAAAA,EAAS,GAAGQ,WAAAA,CAAAA,GAAeD,IAAAA,CAAKD,MAAM,GAAA,CAAA;AAC7C,IAAA,OAAO;AAACN,MAAAA,OAAAA;AAASQ,MAAAA,WAAAA,CAAYN,KAAK,GAAA;;AACtC,EAAA,CAAA,CAAA,CAAA;AAER,CAAA,EAXqC,uBAAA","file":"XAFNHADO.js","sourcesContent":["import type { z } from 'zod/v4';\n\nimport type { Dependencies } from '@layerzerolabs/dependency-graph';\nimport { DependencyNode } from '@layerzerolabs/dependency-graph';\nimport type { FunctionPointer } from '@layerzerolabs/function-pointer';\nimport type {\n AdvancedRecord,\n AdvancedRecordLookup,\n Merge,\n MethodNameOf,\n RemoveNever,\n UnionToIntersection,\n} from '@layerzerolabs/typescript-utils';\nimport type { IsAny } from '@layerzerolabs/typescript-utils';\n\nexport type DimensionToSchemaMap<DimConstraint extends object = object> = {\n byDimension?: AdvancedRecord<DimConstraint, z.ZodType>;\n base: z.ZodType;\n};\n\nexport type FactorySpecialization<DMap extends DimensionToSchemaMap = DimensionToSchemaMap> = {\n spec: z.ZodObject<any>;\n exempt: readonly MethodNameOf<GetSupersetOfModelsFromSchema<DMap>>[];\n};\n\nexport type WithInjectedSpecialization<T, Specialization extends FactorySpecialization<any>> = [\n {},\n] extends [z.infer<Specialization['spec']>]\n ? T\n : {\n [K in keyof T]: K extends Specialization['exempt'][number]\n ? T[K]\n : T[K] extends (...args: infer A) => infer R\n ? (specialization: z.infer<Specialization['spec']>, ...args: A) => R\n : T[K];\n };\n\nexport type WithSpecializeMethod<WithInjection, WithoutInjection, S> = {} extends S\n ? WithoutInjection\n : WithInjection extends (...args: infer Args) => infer Ret\n ? (...args: Args) => Ret\n : WithInjection & {\n specialize: (specialization: S) => WithoutInjection;\n };\n\nexport type GetModelFromSchema<DMap extends DimensionToSchemaMap, Dim> =\n IsAny<Dim> extends true\n ? z.infer<DMap['base']>\n : AdvancedRecordLookup<DMap['byDimension'], Dim> extends never\n ? z.infer<DMap['base']>\n : Merge<z.infer<DMap['base']>, z.infer<AdvancedRecordLookup<DMap['byDimension'], Dim>>>;\n\nexport type GetSupersetOfModelsFromSchema<DMap extends DimensionToSchemaMap> = UnionToIntersection<\n {\n [Key in keyof DMap['byDimension']]: DMap['byDimension'][Key] extends [any, any]\n ? z.infer<DMap['byDimension'][Key][1]>\n : never;\n }[keyof DMap['byDimension']]\n> &\n z.infer<DMap['base']>;\n\ntype GetImplFunctionWithConditionalOptionalDim<Dim, Return> = {} extends Dim\n ? (dim?: Dim) => Return\n : (dim: Dim) => Return;\n\ntype GetImplOverloads<\n Dim extends z.ZodObject<any>,\n Specialization extends FactorySpecialization<DMap>,\n DMap extends DimensionToSchemaMap<z.infer<Dim>>,\n> = UnionToIntersection<\n | {\n [I in keyof DMap['byDimension']]: DMap['byDimension'][I] extends readonly [infer K, any]\n ? {\n getImpl: GetImplFunctionWithConditionalOptionalDim<\n K,\n WithSpecializeMethod<\n WithInjectedSpecialization<GetModelFromSchema<DMap, K>, Specialization>,\n GetModelFromSchema<DMap, K>,\n z.infer<Specialization['spec']>\n >\n >;\n }\n : never;\n }[keyof DMap['byDimension']]\n | {\n getImpl: GetImplFunctionWithConditionalOptionalDim<\n z.infer<Dim>,\n WithSpecializeMethod<\n WithInjectedSpecialization<z.infer<DMap['base']>, Specialization>,\n z.infer<DMap['base']>,\n z.infer<Specialization['spec']>\n >\n >;\n }\n>;\n\nexport type Factory<\n _Dependencies extends Dependencies,\n Dim extends z.ZodObject<any>,\n Specialization extends FactorySpecialization<DMap>,\n DMap extends DimensionToSchemaMap<z.infer<Dim>>,\n> = {\n name: string;\n implKeys: string[];\n dimensionToSchemaMap: DMap;\n} & GetImplOverloads<Dim, Specialization, DMap>;\n\nexport type GetFactory<\n _Dependencies extends Dependencies,\n Dim extends z.ZodObject<any>,\n Specialization extends FactorySpecialization<DMap>,\n DMap extends DimensionToSchemaMap<z.infer<Dim>>,\n> = () =>\n | Factory<_Dependencies, Dim, Specialization, DMap>\n | Promise<Factory<_Dependencies, Dim, Specialization, DMap>>;\n\n/**\n * <!-- anchor:FactoryDefinition -->\n * Factory definitions are a type of dependency node that shall be resolved to a *factory*.\n * A factory is an object that provides a getImpl method which accepts some parameters `dim`,\n * and returns some object `getImplMetadata.getModel(dim)`.\n * That is, a factory definition is given by the set of parameters it uses to get its implementations,\n * and a function defining the schema it will return for each set of parameters.\n * @param name inherited from {@link DependencyNode}\n * @param dependencies inherited from {@link DependencyNode}\n * @param dimensions a Zod schema for the parameters this factory operates on.\n * @param dimensionToSchemaMap A map from dimension objects to the Zod schema for the implementation.\n * @param getFactory a method that should return an object with a `getImpl` method that returns\n * entities adhering to the schema for the corresponding `getModel` call\n */\nexport class FactoryDefinition<\n Name extends string,\n Dim extends z.ZodObject<any>,\n const Specialization extends FactorySpecialization<DMap>,\n DMap extends DimensionToSchemaMap<z.infer<Dim>>,\n _Dependencies extends Dependencies,\n> extends DependencyNode<Name, _Dependencies> {\n public readonly dimensions: Dim;\n public readonly specialization: Specialization;\n public readonly dimensionToSchemaMap: DMap;\n public readonly getFactory: GetFactory<_Dependencies, Dim, Specialization, DMap>;\n constructor({\n dimensions,\n specialization,\n dimensionToSchemaMap,\n getFactory,\n ...args\n }: {\n dimensions: Dim;\n specialization: Specialization;\n dimensionToSchemaMap: DMap;\n getFactory: GetFactory<_Dependencies, Dim, Specialization, DMap>;\n } & ConstructorParameters<typeof DependencyNode<Name, _Dependencies>>[0]) {\n super(args);\n this.dimensions = dimensions;\n this.specialization = specialization;\n this.dimensionToSchemaMap = dimensionToSchemaMap;\n this.getFactory = getFactory;\n }\n}\n\n/**\n * <!-- anchor:ObjectDefinition -->\n * An object definition is a dependency node that refers to some entity\n * matching a given schema. That is, it may be resolved to any entity\n * that adheres to the {@link schema}.\n * The object definition is abstract, as it cannot be meaningfully resolved without\n * additional information. For an example of an object definition, see ReflexiveObjectDefinition or ContextDefinition\n * @param name inherited from {@link DependencyNode}\n * @param dependencies inherited from {@link DependencyNode}\n * @param schema a Zod schema defining the expected resolution for this definition\n */\nexport abstract class ObjectDefinition<\n Name extends string,\n Schema extends z.ZodSchema,\n _Dependencies extends Dependencies,\n> extends DependencyNode<Name, _Dependencies> {\n public readonly schema: Schema;\n\n constructor({\n schema,\n ...args\n }: {\n schema: Schema;\n } & ConstructorParameters<typeof DependencyNode<Name, _Dependencies>>[0]) {\n super(args);\n this.schema = schema;\n }\n}\n\nexport type Definition<Name extends string> =\n | FactoryDefinition<Name, any, any, any, any>\n | ObjectDefinition<Name, any, any>;\n\n/**\n * Infers the expected type of a definition once it has been resolved\n */\nexport type ResolvedDefinition<Definition extends DependencyNode<any, any>> =\n Definition extends ObjectDefinition<any, infer Schema, any>\n ? z.infer<Schema>\n : Definition extends FactoryDefinition<\n any,\n infer Dim,\n infer Specialization,\n infer DMap,\n any\n >\n ? Factory<Definition['dependencies'], Dim, Specialization, DMap>\n : Definition extends FactoryDefinition<any, any, any, any, any>\n ? Factory<\n Definition['dependencies'],\n Definition['dimensions'],\n Definition['specialization'],\n Definition['dimensionToSchemaMap']\n >\n : unknown;\n\n/**\n * Given a record from string to definition, maps each definition T to ResolvedDefinition<T>. Removes `definition` suffix from name\n */\nexport type ResolvedDefinitionMap<Deps extends Dependencies> = {\n [Key in keyof Deps as Key extends `${infer Name}Definition` ? Name : Key]: ResolvedDefinition<\n Deps[Key]\n >;\n};\n\n/**\n * For some factory definition F and some dimension D s.t. D ⊇ F.dimensions, infers the expected return type of\n * ResolvedDefinition<F>.getImpl(D)\n */\nexport type ResolvedFactoryImplementation<Definition extends DependencyNode<any, any>, Dim> =\n Definition extends FactoryDefinition<any, any, any, any, any>\n ? WithSpecializeMethod<\n WithInjectedSpecialization<\n GetModelFromSchema<Definition['dimensionToSchemaMap'], Dim>,\n Definition['specialization']\n >,\n GetModelFromSchema<Definition['dimensionToSchemaMap'], Dim>,\n z.infer<Definition['specialization']['spec']>\n >\n : never;\n\ntype RemoveDefinitionSuffix<Key extends string> = Key extends `${infer Name}Definition`\n ? Name\n : Key;\ntype ReplaceFactorySuffix<Key extends string> = Key extends `${infer Name}Factory`\n ? `${Name}Impl`\n : Key;\n\n/**\n * Given a record from string to definition and some dimension D, maps each definition T to ResolvedFactoryImplementation<T, D>\n * Removes Definition | ActivityFactory | Factory from the suffix of the key\n */\nexport type ResolvedFactoryImplementationMap<Deps extends Dependencies, Dim> = RemoveNever<{\n [Key in keyof Deps as Key extends string\n ? ReplaceFactorySuffix<RemoveDefinitionSuffix<Key>>\n : never]: ResolvedFactoryImplementation<Deps[Key], Dim>;\n}>;\n\ntype ActivityFactoryContext<\n _FactoryDefinition extends FactoryDefinition<any, any, any, any, any>,\n Dim,\n _PrivateSchemaExtension extends z.ZodObject = z.ZodObject<{}, z.core.$strip>,\n> = {\n getFunctionPointer: <\n MethodName extends MethodNameOf<\n ResolvedFactoryImplementation<_FactoryDefinition, Dim> &\n z.infer<_PrivateSchemaExtension>\n >,\n >(\n methodName: MethodName,\n ) => FunctionPointer<\n (ResolvedFactoryImplementation<_FactoryDefinition, Dim> &\n z.infer<_PrivateSchemaExtension>)[MethodName]\n >;\n};\n\n/**\n * The parameters that shall be received by a factory's implementation getter\n */\nexport type Context<\n _FactoryDefinition extends FactoryDefinition<any, any, any, any, any>,\n Dim,\n _PrivateSchemaExtension extends z.ZodObject = z.ZodObject<{}, z.core.$strip>,\n> = {\n name: _FactoryDefinition extends FactoryDefinition<infer Name, any, any, any, any>\n ? Name\n : never;\n dependencies: _FactoryDefinition extends FactoryDefinition<any, any, any, any, infer Deps>\n ? ResolvedDefinitionMap<Deps>\n : never;\n dim: Dim;\n impls: _FactoryDefinition extends FactoryDefinition<any, any, any, any, infer Deps>\n ? ResolvedFactoryImplementationMap<Deps, Dim>\n : never;\n self: ResolvedFactoryImplementation<_FactoryDefinition, Dim> & z.infer<_PrivateSchemaExtension>;\n} & ActivityFactoryContext<_FactoryDefinition, Dim, _PrivateSchemaExtension>;\n\nexport const serializeDimensions = (dim: object = {}) => {\n return Object.keys(dim).length\n ? Object.entries(dim)\n .sort()\n .map(([dimName, dimVal]) => `${dimName}_${dimVal}`)\n .join('&')\n : '_base';\n};\n\nexport const deserializeDimensions = (serializedDim: string) => {\n if (serializedDim === '_base') {\n return {};\n }\n\n return Object.fromEntries(\n serializedDim.split('&').map((pair) => {\n const [dimName, ...dimValParts] = pair.split('_');\n return [dimName, dimValParts.join('_')];\n }),\n );\n};\n"]}
|
package/dist/definitions.cjs
CHANGED
|
@@ -1,25 +1,25 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var E35XJD2D_cjs = require('./E35XJD2D.cjs');
|
|
4
4
|
require('./YJF4D23A.cjs');
|
|
5
5
|
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
Object.defineProperty(exports, "FactoryDefinition", {
|
|
9
9
|
enumerable: true,
|
|
10
|
-
get: function () { return
|
|
10
|
+
get: function () { return E35XJD2D_cjs.FactoryDefinition; }
|
|
11
11
|
});
|
|
12
12
|
Object.defineProperty(exports, "ObjectDefinition", {
|
|
13
13
|
enumerable: true,
|
|
14
|
-
get: function () { return
|
|
14
|
+
get: function () { return E35XJD2D_cjs.ObjectDefinition; }
|
|
15
15
|
});
|
|
16
16
|
Object.defineProperty(exports, "deserializeDimensions", {
|
|
17
17
|
enumerable: true,
|
|
18
|
-
get: function () { return
|
|
18
|
+
get: function () { return E35XJD2D_cjs.deserializeDimensions; }
|
|
19
19
|
});
|
|
20
20
|
Object.defineProperty(exports, "serializeDimensions", {
|
|
21
21
|
enumerable: true,
|
|
22
|
-
get: function () { return
|
|
22
|
+
get: function () { return E35XJD2D_cjs.serializeDimensions; }
|
|
23
23
|
});
|
|
24
24
|
//# sourceMappingURL=definitions.cjs.map
|
|
25
25
|
//# sourceMappingURL=definitions.cjs.map
|
package/dist/definitions.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { z } from 'zod/v4';
|
|
2
|
-
import type { FunctionPointer } from '@layerzerolabs/common-utils';
|
|
3
2
|
import type { Dependencies } from '@layerzerolabs/dependency-graph';
|
|
4
3
|
import { DependencyNode } from '@layerzerolabs/dependency-graph';
|
|
4
|
+
import type { FunctionPointer } from '@layerzerolabs/function-pointer';
|
|
5
5
|
import type { AdvancedRecord, AdvancedRecordLookup, Merge, MethodNameOf, RemoveNever, UnionToIntersection } from '@layerzerolabs/typescript-utils';
|
|
6
6
|
import type { IsAny } from '@layerzerolabs/typescript-utils';
|
|
7
7
|
export type DimensionToSchemaMap<DimConstraint extends object = object> = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definitions.d.ts","sourceRoot":"","sources":["../src/definitions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAEhC,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"definitions.d.ts","sourceRoot":"","sources":["../src/definitions.ts"],"names":[],"mappings":"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"}
|
package/dist/definitions.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { FactoryDefinition, ObjectDefinition, deserializeDimensions, serializeDimensions } from './
|
|
1
|
+
export { FactoryDefinition, ObjectDefinition, deserializeDimensions, serializeDimensions } from './XAFNHADO.js';
|
|
2
2
|
import './VUOMXK5T.js';
|
|
3
3
|
//# sourceMappingURL=definitions.js.map
|
|
4
4
|
//# sourceMappingURL=definitions.js.map
|
package/dist/index.cjs
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var JKTGUQY4_cjs = require('./JKTGUQY4.cjs');
|
|
4
|
-
var
|
|
5
|
-
var
|
|
6
|
-
var
|
|
4
|
+
var Q4VTGVJZ_cjs = require('./Q4VTGVJZ.cjs');
|
|
5
|
+
var _6HCJDYOS_cjs = require('./6HCJDYOS.cjs');
|
|
6
|
+
var E35XJD2D_cjs = require('./E35XJD2D.cjs');
|
|
7
7
|
require('./YJF4D23A.cjs');
|
|
8
8
|
|
|
9
9
|
|
|
@@ -14,31 +14,31 @@ Object.defineProperty(exports, "DependencyStore", {
|
|
|
14
14
|
});
|
|
15
15
|
Object.defineProperty(exports, "RegistrarBuilder", {
|
|
16
16
|
enumerable: true,
|
|
17
|
-
get: function () { return
|
|
17
|
+
get: function () { return Q4VTGVJZ_cjs.RegistrarBuilder; }
|
|
18
18
|
});
|
|
19
19
|
Object.defineProperty(exports, "multiplexOrderedRegistrars", {
|
|
20
20
|
enumerable: true,
|
|
21
|
-
get: function () { return
|
|
21
|
+
get: function () { return Q4VTGVJZ_cjs.multiplexOrderedRegistrars; }
|
|
22
22
|
});
|
|
23
23
|
Object.defineProperty(exports, "extractSchemaFromFactory", {
|
|
24
24
|
enumerable: true,
|
|
25
|
-
get: function () { return
|
|
25
|
+
get: function () { return _6HCJDYOS_cjs.extractSchemaFromFactory; }
|
|
26
26
|
});
|
|
27
27
|
Object.defineProperty(exports, "FactoryDefinition", {
|
|
28
28
|
enumerable: true,
|
|
29
|
-
get: function () { return
|
|
29
|
+
get: function () { return E35XJD2D_cjs.FactoryDefinition; }
|
|
30
30
|
});
|
|
31
31
|
Object.defineProperty(exports, "ObjectDefinition", {
|
|
32
32
|
enumerable: true,
|
|
33
|
-
get: function () { return
|
|
33
|
+
get: function () { return E35XJD2D_cjs.ObjectDefinition; }
|
|
34
34
|
});
|
|
35
35
|
Object.defineProperty(exports, "deserializeDimensions", {
|
|
36
36
|
enumerable: true,
|
|
37
|
-
get: function () { return
|
|
37
|
+
get: function () { return E35XJD2D_cjs.deserializeDimensions; }
|
|
38
38
|
});
|
|
39
39
|
Object.defineProperty(exports, "serializeDimensions", {
|
|
40
40
|
enumerable: true,
|
|
41
|
-
get: function () { return
|
|
41
|
+
get: function () { return E35XJD2D_cjs.serializeDimensions; }
|
|
42
42
|
});
|
|
43
43
|
//# sourceMappingURL=index.cjs.map
|
|
44
44
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export { DependencyStore } from './JJBD65HU.js';
|
|
2
|
-
export { RegistrarBuilder, multiplexOrderedRegistrars } from './
|
|
3
|
-
export { extractSchemaFromFactory } from './
|
|
4
|
-
export { FactoryDefinition, ObjectDefinition, deserializeDimensions, serializeDimensions } from './
|
|
2
|
+
export { RegistrarBuilder, multiplexOrderedRegistrars } from './3E4NCL37.js';
|
|
3
|
+
export { extractSchemaFromFactory } from './F7GZNVSO.js';
|
|
4
|
+
export { FactoryDefinition, ObjectDefinition, deserializeDimensions, serializeDimensions } from './XAFNHADO.js';
|
|
5
5
|
import './VUOMXK5T.js';
|
|
6
6
|
//# sourceMappingURL=index.js.map
|
|
7
7
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var Q4VTGVJZ_cjs = require('./Q4VTGVJZ.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 Q4VTGVJZ_cjs.RegistrarBuilder; }
|
|
11
11
|
});
|
|
12
12
|
Object.defineProperty(exports, "multiplexOrderedRegistrars", {
|
|
13
13
|
enumerable: true,
|
|
14
|
-
get: function () { return
|
|
14
|
+
get: function () { return Q4VTGVJZ_cjs.multiplexOrderedRegistrars; }
|
|
15
15
|
});
|
|
16
16
|
//# sourceMappingURL=registrarBuilder.cjs.map
|
|
17
17
|
//# sourceMappingURL=registrarBuilder.cjs.map
|
|
@@ -18,7 +18,7 @@ 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
|
|
21
|
+
protected nodeHandlers: Record<string, (node: DependencyNode, ancestry: DependencyNode[]) => Promise<any>>;
|
|
22
22
|
protected classHandlers: {
|
|
23
23
|
nodeClass: AbstractNodeClass;
|
|
24
24
|
identifier: string;
|
|
@@ -28,10 +28,11 @@ export declare class RegistrarBuilder<_ReturnTypes> {
|
|
|
28
28
|
fromNodeClass: AbstractNodeClass;
|
|
29
29
|
getToNode: (from: DependencyNode) => DependencyNode;
|
|
30
30
|
}[];
|
|
31
|
+
protected nodeAliases: Record<string, (node: DependencyNode) => DependencyNode>;
|
|
31
32
|
protected getEntrypoints: (node: DependencyNode) => DependencyNode[];
|
|
32
33
|
constructor();
|
|
33
|
-
|
|
34
|
-
["
|
|
34
|
+
addNodeHandler<Node extends DependencyNode, Function extends (node: Node, ancestry: DependencyNode[]) => Promise<any>>(node: DependencyNode, fn: Function): RegistrarBuilder<_ReturnTypes & {
|
|
35
|
+
["nodeHandlers"]: {
|
|
35
36
|
[nodeName: string]: Awaited<ReturnType<Function>>;
|
|
36
37
|
};
|
|
37
38
|
}>;
|
|
@@ -58,6 +59,16 @@ export declare class RegistrarBuilder<_ReturnTypes> {
|
|
|
58
59
|
* @param getToNode method that returns the *to* part of the alias
|
|
59
60
|
*/
|
|
60
61
|
addClassAlias<FromNodeClass extends AbstractNodeClass>(fromNodeClass: FromNodeClass, getToNode: (fromNodeInstance: InstanceType<FromNodeClass>) => DependencyNode): this;
|
|
62
|
+
/**
|
|
63
|
+
* Alias a specific named node, such that when encountered in the tree,
|
|
64
|
+
* it will be transformed to a different node before processing.
|
|
65
|
+
* The transformed node's dependencies will be traversed instead.
|
|
66
|
+
* This is useful for short-circuiting dependency traversal for specific nodes.
|
|
67
|
+
*
|
|
68
|
+
* @param nodeName name of the node to alias
|
|
69
|
+
* @param getToNode method that returns the transformed node
|
|
70
|
+
*/
|
|
71
|
+
addNodeAlias(node: DependencyNode, getToNode: (fromNodeInstance: DependencyNode) => DependencyNode): this;
|
|
61
72
|
/**
|
|
62
73
|
* Set a custom entrypoint getter function. By default, the entrypoint getter
|
|
63
74
|
* returns the node passed in as the sole entrypoint.
|
|
@@ -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,
|
|
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 './3E4NCL37.js';
|
|
2
2
|
import './VUOMXK5T.js';
|
|
3
3
|
//# sourceMappingURL=registrarBuilder.js.map
|
|
4
4
|
//# sourceMappingURL=registrarBuilder.js.map
|
package/dist/utils.cjs
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
require('./
|
|
3
|
+
var _6HCJDYOS_cjs = require('./6HCJDYOS.cjs');
|
|
4
|
+
require('./E35XJD2D.cjs');
|
|
5
5
|
require('./YJF4D23A.cjs');
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
Object.defineProperty(exports, "extractSchemaFromFactory", {
|
|
10
10
|
enumerable: true,
|
|
11
|
-
get: function () { return
|
|
11
|
+
get: function () { return _6HCJDYOS_cjs.extractSchemaFromFactory; }
|
|
12
12
|
});
|
|
13
13
|
//# sourceMappingURL=utils.cjs.map
|
|
14
14
|
//# sourceMappingURL=utils.cjs.map
|
package/dist/utils.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@layerzerolabs/base-definitions",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.8",
|
|
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": "3.25.56",
|
|
18
|
-
"@layerzerolabs/
|
|
19
|
-
"@layerzerolabs/
|
|
20
|
-
"@layerzerolabs/
|
|
21
|
-
"@layerzerolabs/
|
|
18
|
+
"@layerzerolabs/dependency-graph": "0.2.8",
|
|
19
|
+
"@layerzerolabs/function-pointer": "0.2.8",
|
|
20
|
+
"@layerzerolabs/typescript-utils": "0.2.8",
|
|
21
|
+
"@layerzerolabs/dfs": "0.2.8"
|
|
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.8",
|
|
27
|
+
"@layerzerolabs/typescript-configuration": "0.2.8"
|
|
28
28
|
},
|
|
29
29
|
"publishConfig": {
|
|
30
30
|
"access": "restricted",
|
|
@@ -32,7 +32,6 @@
|
|
|
32
32
|
},
|
|
33
33
|
"scripts": {
|
|
34
34
|
"build": "tsup",
|
|
35
|
-
"clean": "rm -rf ./node_modules .turbo ./dist",
|
|
36
35
|
"lint": "eslint . --max-warnings 0 || (eslint . --fix --max-warnings 0 && false)",
|
|
37
36
|
"test": "vitest --run --pass-with-no-tests --typecheck"
|
|
38
37
|
}
|
package/src/definitions.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import type { z } from 'zod/v4';
|
|
2
2
|
|
|
3
|
-
import type { FunctionPointer } from '@layerzerolabs/common-utils';
|
|
4
3
|
import type { Dependencies } from '@layerzerolabs/dependency-graph';
|
|
5
4
|
import { DependencyNode } from '@layerzerolabs/dependency-graph';
|
|
5
|
+
import type { FunctionPointer } from '@layerzerolabs/function-pointer';
|
|
6
6
|
import type {
|
|
7
7
|
AdvancedRecord,
|
|
8
8
|
AdvancedRecordLookup,
|
package/src/registrarBuilder.ts
CHANGED
|
@@ -23,7 +23,7 @@ type AbstractNodeClass = abstract new (...args: any[]) => DependencyNode;
|
|
|
23
23
|
export class RegistrarBuilder<_ReturnTypes> {
|
|
24
24
|
protected defaultHandler: (node: DependencyNode, ancestry: DependencyNode[]) => Promise<any>;
|
|
25
25
|
|
|
26
|
-
protected
|
|
26
|
+
protected nodeHandlers: Record<
|
|
27
27
|
string,
|
|
28
28
|
(node: DependencyNode, ancestry: DependencyNode[]) => Promise<any>
|
|
29
29
|
> = {};
|
|
@@ -39,6 +39,8 @@ export class RegistrarBuilder<_ReturnTypes> {
|
|
|
39
39
|
getToNode: (from: DependencyNode) => DependencyNode;
|
|
40
40
|
}[] = [];
|
|
41
41
|
|
|
42
|
+
protected nodeAliases: Record<string, (node: DependencyNode) => DependencyNode> = {};
|
|
43
|
+
|
|
42
44
|
protected getEntrypoints: (node: DependencyNode) => DependencyNode[] = (node) => [node];
|
|
43
45
|
|
|
44
46
|
constructor() {
|
|
@@ -49,22 +51,22 @@ export class RegistrarBuilder<_ReturnTypes> {
|
|
|
49
51
|
};
|
|
50
52
|
}
|
|
51
53
|
|
|
52
|
-
public
|
|
54
|
+
public addNodeHandler<
|
|
53
55
|
Node extends DependencyNode,
|
|
54
56
|
Function extends (node: Node, ancestry: DependencyNode[]) => Promise<any>,
|
|
55
57
|
>(node: DependencyNode, fn: Function) {
|
|
56
|
-
if (this.
|
|
58
|
+
if (this.nodeHandlers[node.name]) {
|
|
57
59
|
throw new Error(
|
|
58
|
-
`Cannot define a
|
|
60
|
+
`Cannot define a node handler for an identifier that already has a handler: ${node.name}`,
|
|
59
61
|
);
|
|
60
62
|
}
|
|
61
|
-
this.
|
|
63
|
+
this.nodeHandlers[node.name] = fn as unknown as (
|
|
62
64
|
node: DependencyNode,
|
|
63
65
|
ancestry: DependencyNode[],
|
|
64
66
|
) => Promise<any>;
|
|
65
67
|
return this as RegistrarBuilder<
|
|
66
68
|
_ReturnTypes & {
|
|
67
|
-
['
|
|
69
|
+
['nodeHandlers']: { [nodeName: string]: Awaited<ReturnType<Function>> };
|
|
68
70
|
}
|
|
69
71
|
>;
|
|
70
72
|
}
|
|
@@ -188,6 +190,23 @@ export class RegistrarBuilder<_ReturnTypes> {
|
|
|
188
190
|
return this;
|
|
189
191
|
}
|
|
190
192
|
|
|
193
|
+
/**
|
|
194
|
+
* Alias a specific named node, such that when encountered in the tree,
|
|
195
|
+
* it will be transformed to a different node before processing.
|
|
196
|
+
* The transformed node's dependencies will be traversed instead.
|
|
197
|
+
* This is useful for short-circuiting dependency traversal for specific nodes.
|
|
198
|
+
*
|
|
199
|
+
* @param nodeName name of the node to alias
|
|
200
|
+
* @param getToNode method that returns the transformed node
|
|
201
|
+
*/
|
|
202
|
+
public addNodeAlias(
|
|
203
|
+
node: DependencyNode,
|
|
204
|
+
getToNode: (fromNodeInstance: DependencyNode) => DependencyNode,
|
|
205
|
+
) {
|
|
206
|
+
this.nodeAliases[node.name] = getToNode;
|
|
207
|
+
return this;
|
|
208
|
+
}
|
|
209
|
+
|
|
191
210
|
/**
|
|
192
211
|
* Set a custom entrypoint getter function. By default, the entrypoint getter
|
|
193
212
|
* returns the node passed in as the sole entrypoint.
|
|
@@ -209,6 +228,13 @@ export class RegistrarBuilder<_ReturnTypes> {
|
|
|
209
228
|
|
|
210
229
|
public build(): Registrar<_ReturnTypes> {
|
|
211
230
|
const mergedNodePrehandler = (node: DependencyNode) => {
|
|
231
|
+
// Check node aliases first (more specific)
|
|
232
|
+
const nodeAlias = this.nodeAliases[node.name];
|
|
233
|
+
if (nodeAlias) {
|
|
234
|
+
return nodeAlias(node);
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
// Then check class aliases
|
|
212
238
|
for (const { fromNodeClass, getToNode: toNode } of this.classAliases) {
|
|
213
239
|
if (node instanceof fromNodeClass) {
|
|
214
240
|
return toNode(node);
|
|
@@ -225,11 +251,11 @@ export class RegistrarBuilder<_ReturnTypes> {
|
|
|
225
251
|
};
|
|
226
252
|
}
|
|
227
253
|
|
|
228
|
-
const
|
|
229
|
-
if (
|
|
254
|
+
const nodeHandler = this.nodeHandlers[node.name];
|
|
255
|
+
if (nodeHandler) {
|
|
230
256
|
return {
|
|
231
257
|
key: node.name,
|
|
232
|
-
value: await
|
|
258
|
+
value: await nodeHandler(node, ancestry),
|
|
233
259
|
};
|
|
234
260
|
}
|
|
235
261
|
|
|
@@ -121,8 +121,8 @@ describe('Registrar builder', () => {
|
|
|
121
121
|
});
|
|
122
122
|
});
|
|
123
123
|
|
|
124
|
-
describe('
|
|
125
|
-
test('
|
|
124
|
+
describe('Node handlers', () => {
|
|
125
|
+
test('Should take priority over class handlers', async () => {
|
|
126
126
|
let classHandlerCalled = false;
|
|
127
127
|
let namedHandlerCalled = false;
|
|
128
128
|
|
|
@@ -131,7 +131,7 @@ describe('Named handlers', () => {
|
|
|
131
131
|
classHandlerCalled = true;
|
|
132
132
|
return 'from-class';
|
|
133
133
|
})
|
|
134
|
-
.
|
|
134
|
+
.addNodeHandler(mySimpleClassA1, async () => {
|
|
135
135
|
namedHandlerCalled = true;
|
|
136
136
|
return 'from-named';
|
|
137
137
|
})
|
|
@@ -143,12 +143,12 @@ describe('Named handlers', () => {
|
|
|
143
143
|
expect(classHandlerCalled).toBe(false);
|
|
144
144
|
});
|
|
145
145
|
|
|
146
|
-
test('
|
|
146
|
+
test('Should be invoked with correct arguments and return values', async () => {
|
|
147
147
|
let receivedNode: DependencyNode | undefined;
|
|
148
148
|
let receivedAncestry: DependencyNode[] | undefined;
|
|
149
149
|
|
|
150
150
|
const builder = new RegistrarBuilder()
|
|
151
|
-
.
|
|
151
|
+
.addNodeHandler(mySimpleClassA1, async (node, ancestry) => {
|
|
152
152
|
receivedNode = node;
|
|
153
153
|
receivedAncestry = ancestry;
|
|
154
154
|
return 'named-result';
|
|
@@ -163,13 +163,13 @@ describe('Named handlers', () => {
|
|
|
163
163
|
expect(result).toStrictEqual({ MySimpleClassA: { MySimpleClassA: 'named-result' } });
|
|
164
164
|
});
|
|
165
165
|
|
|
166
|
-
test('Registering duplicate
|
|
166
|
+
test('Registering duplicate node handlers should throw', () => {
|
|
167
167
|
expect(() => {
|
|
168
168
|
new RegistrarBuilder()
|
|
169
|
-
.
|
|
170
|
-
.
|
|
169
|
+
.addNodeHandler(mySimpleClassA1, async () => 'first')
|
|
170
|
+
.addNodeHandler(mySimpleClassA1, async () => 'second');
|
|
171
171
|
}).toThrow(
|
|
172
|
-
'Cannot define a
|
|
172
|
+
'Cannot define a node handler for an identifier that already has a handler: MySimpleClassA',
|
|
173
173
|
);
|
|
174
174
|
});
|
|
175
175
|
});
|
package/dist/3AKKEY5J.cjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/registrarBuilder.ts"],"names":["RegistrarBuilder","defaultHandler","namedHandlers","classHandlers","classAliases","getEntrypoints","node","Error","JSON","stringify","addNamedHandler","fn","name","addClassHandler","nodeClass","identifier","find","fromNodeClass","i","handler","prototype","isPrototypeOf","splice","push","addClassAlias","getToNode","alias","setEntrypointsGetter","addDefault","build","mergedNodePrehandler","toNode","mergedNodeHandler","__name","ancestry","key","value","undefined","namedHandler","traverseDependencies","entrypoints","length","dfs","dependencies","reduce","acc","cur","VirtualNode","DependencyNode","virtualEntrypoint","multiplexOrderedRegistrars","registrars","multiplexRegistrar","params","registrar","result"],"mappings":"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","file":"3AKKEY5J.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 namedHandlers: 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 getEntrypoints: (node: DependencyNode) => 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 addNamedHandler<\n Node extends DependencyNode,\n Function extends (node: Node, ancestry: DependencyNode[]) => Promise<any>,\n >(node: DependencyNode, fn: Function) {\n if (this.namedHandlers[node.name]) {\n throw new Error(\n `Cannot define a named handler for an identifier that already has a handler: ${node.name}`,\n );\n }\n this.namedHandlers[node.name] = fn as unknown as (\n node: DependencyNode,\n ancestry: DependencyNode[],\n ) => Promise<any>;\n return this as RegistrarBuilder<\n _ReturnTypes & {\n ['namedHandlers']: { [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 * 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(fn: (node: DependencyNode) => DependencyNode[]) {\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 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 namedHandler = this.namedHandlers[node.name];\n if (namedHandler) {\n return {\n key: node.name,\n value: await namedHandler(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 = 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/H6QNIXMU.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/registrarBuilder.ts"],"names":["RegistrarBuilder","defaultHandler","namedHandlers","classHandlers","classAliases","getEntrypoints","node","Error","JSON","stringify","addNamedHandler","fn","name","addClassHandler","nodeClass","identifier","find","fromNodeClass","i","handler","prototype","isPrototypeOf","splice","push","addClassAlias","getToNode","alias","setEntrypointsGetter","addDefault","build","mergedNodePrehandler","toNode","mergedNodeHandler","ancestry","key","value","undefined","namedHandler","traverseDependencies","entrypoints","length","dfs","dependencies","reduce","acc","cur","VirtualNode","DependencyNode","virtualEntrypoint","multiplexOrderedRegistrars","registrars","multiplexRegistrar","params","registrar","result"],"mappings":"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","file":"H6QNIXMU.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 namedHandlers: 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 getEntrypoints: (node: DependencyNode) => 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 addNamedHandler<\n Node extends DependencyNode,\n Function extends (node: Node, ancestry: DependencyNode[]) => Promise<any>,\n >(node: DependencyNode, fn: Function) {\n if (this.namedHandlers[node.name]) {\n throw new Error(\n `Cannot define a named handler for an identifier that already has a handler: ${node.name}`,\n );\n }\n this.namedHandlers[node.name] = fn as unknown as (\n node: DependencyNode,\n ancestry: DependencyNode[],\n ) => Promise<any>;\n return this as RegistrarBuilder<\n _ReturnTypes & {\n ['namedHandlers']: { [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 * 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(fn: (node: DependencyNode) => DependencyNode[]) {\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 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 namedHandler = this.namedHandlers[node.name];\n if (namedHandler) {\n return {\n key: node.name,\n value: await namedHandler(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 = 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/NQBJGAQC.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/definitions.ts"],"names":["FactoryDefinition","DependencyNode","dimensions","specialization","dimensionToSchemaMap","getFactory","args","ObjectDefinition","schema","serializeDimensions","dim","Object","keys","length","entries","sort","map","dimName","dimVal","join","deserializeDimensions","serializedDim","fromEntries","split","pair","dimValParts"],"mappings":";;;AAkIO,IAAMA,iBAAAA,GAAN,cAMGC,cAAAA,CAAAA;EApIV;;;AAqIoBC,EAAAA,UAAAA;AACAC,EAAAA,cAAAA;AACAC,EAAAA,oBAAAA;AACAC,EAAAA,UAAAA;AAChB,EAAA,WAAA,CAAY,EACRH,UAAAA,EACAC,cAAAA,EACAC,sBACAC,UAAAA,EACA,GAAGC,MAAAA,EAMmE;AACtE,IAAA,KAAA,CAAMA,IAAAA,CAAAA;AACN,IAAA,IAAA,CAAKJ,UAAAA,GAAaA,UAAAA;AAClB,IAAA,IAAA,CAAKC,cAAAA,GAAiBA,cAAAA;AACtB,IAAA,IAAA,CAAKC,oBAAAA,GAAuBA,oBAAAA;AAC5B,IAAA,IAAA,CAAKC,UAAAA,GAAaA,UAAAA;AACtB,EAAA;AACJ;AAaO,IAAeE,gBAAAA,GAAf,cAIGN,cAAAA,CAAAA;EA5KV;;;AA6KoBO,EAAAA,MAAAA;AAEhB,EAAA,WAAA,CAAY,EACRA,MAAAA,EACA,GAAGF,IAAAA,EAAAA,EAGmE;AACtE,IAAA,KAAA,CAAMA,IAAAA,CAAAA;AACN,IAAA,IAAA,CAAKE,MAAAA,GAASA,MAAAA;AAClB,EAAA;AACJ;AA8GO,IAAMC,mBAAAA,mBAAsB,MAAA,CAAA,CAACC,GAAAA,GAAc,EAAC,KAAC;AAChD,EAAA,OAAOC,MAAAA,CAAOC,IAAAA,CAAKF,GAAAA,CAAAA,CAAKG,MAAAA,GAClBF,OAAOG,OAAAA,CAAQJ,GAAAA,CAAAA,CACVK,IAAAA,EAAI,CACJC,GAAAA,CAAI,CAAC,CAACC,OAAAA,EAASC,MAAAA,CAAAA,KAAY,CAAA,EAAGD,OAAAA,CAAAA,CAAAA,EAAWC,MAAAA,CAAAA,CAAQ,CAAA,CACjDC,IAAAA,CAAK,GAAA,CAAA,GACV,OAAA;AACV,CAAA,EAPmC,qBAAA;AAS5B,IAAMC,qBAAAA,2BAAyBC,aAAAA,KAAAA;AAClC,EAAA,IAAIA,kBAAkB,OAAA,EAAS;AAC3B,IAAA,OAAO,EAAC;AACZ,EAAA;AAEA,EAAA,OAAOV,MAAAA,CAAOW,YACVD,aAAAA,CAAcE,KAAAA,CAAM,GAAA,CAAA,CAAKP,GAAAA,CAAI,CAACQ,IAAAA,KAAAA;AAC1B,IAAA,MAAM,CAACP,OAAAA,EAAS,GAAGQ,WAAAA,CAAAA,GAAeD,IAAAA,CAAKD,MAAM,GAAA,CAAA;AAC7C,IAAA,OAAO;AAACN,MAAAA,OAAAA;AAASQ,MAAAA,WAAAA,CAAYN,KAAK,GAAA;;AACtC,EAAA,CAAA,CAAA,CAAA;AAER,CAAA,EAXqC,uBAAA","file":"NQBJGAQC.js","sourcesContent":["import type { z } from 'zod/v4';\n\nimport type { FunctionPointer } from '@layerzerolabs/common-utils';\nimport type { Dependencies } from '@layerzerolabs/dependency-graph';\nimport { DependencyNode } from '@layerzerolabs/dependency-graph';\nimport type {\n AdvancedRecord,\n AdvancedRecordLookup,\n Merge,\n MethodNameOf,\n RemoveNever,\n UnionToIntersection,\n} from '@layerzerolabs/typescript-utils';\nimport type { IsAny } from '@layerzerolabs/typescript-utils';\n\nexport type DimensionToSchemaMap<DimConstraint extends object = object> = {\n byDimension?: AdvancedRecord<DimConstraint, z.ZodType>;\n base: z.ZodType;\n};\n\nexport type FactorySpecialization<DMap extends DimensionToSchemaMap = DimensionToSchemaMap> = {\n spec: z.ZodObject<any>;\n exempt: readonly MethodNameOf<GetSupersetOfModelsFromSchema<DMap>>[];\n};\n\nexport type WithInjectedSpecialization<T, Specialization extends FactorySpecialization<any>> = [\n {},\n] extends [z.infer<Specialization['spec']>]\n ? T\n : {\n [K in keyof T]: K extends Specialization['exempt'][number]\n ? T[K]\n : T[K] extends (...args: infer A) => infer R\n ? (specialization: z.infer<Specialization['spec']>, ...args: A) => R\n : T[K];\n };\n\nexport type WithSpecializeMethod<WithInjection, WithoutInjection, S> = {} extends S\n ? WithoutInjection\n : WithInjection extends (...args: infer Args) => infer Ret\n ? (...args: Args) => Ret\n : WithInjection & {\n specialize: (specialization: S) => WithoutInjection;\n };\n\nexport type GetModelFromSchema<DMap extends DimensionToSchemaMap, Dim> =\n IsAny<Dim> extends true\n ? z.infer<DMap['base']>\n : AdvancedRecordLookup<DMap['byDimension'], Dim> extends never\n ? z.infer<DMap['base']>\n : Merge<z.infer<DMap['base']>, z.infer<AdvancedRecordLookup<DMap['byDimension'], Dim>>>;\n\nexport type GetSupersetOfModelsFromSchema<DMap extends DimensionToSchemaMap> = UnionToIntersection<\n {\n [Key in keyof DMap['byDimension']]: DMap['byDimension'][Key] extends [any, any]\n ? z.infer<DMap['byDimension'][Key][1]>\n : never;\n }[keyof DMap['byDimension']]\n> &\n z.infer<DMap['base']>;\n\ntype GetImplFunctionWithConditionalOptionalDim<Dim, Return> = {} extends Dim\n ? (dim?: Dim) => Return\n : (dim: Dim) => Return;\n\ntype GetImplOverloads<\n Dim extends z.ZodObject<any>,\n Specialization extends FactorySpecialization<DMap>,\n DMap extends DimensionToSchemaMap<z.infer<Dim>>,\n> = UnionToIntersection<\n | {\n [I in keyof DMap['byDimension']]: DMap['byDimension'][I] extends readonly [infer K, any]\n ? {\n getImpl: GetImplFunctionWithConditionalOptionalDim<\n K,\n WithSpecializeMethod<\n WithInjectedSpecialization<GetModelFromSchema<DMap, K>, Specialization>,\n GetModelFromSchema<DMap, K>,\n z.infer<Specialization['spec']>\n >\n >;\n }\n : never;\n }[keyof DMap['byDimension']]\n | {\n getImpl: GetImplFunctionWithConditionalOptionalDim<\n z.infer<Dim>,\n WithSpecializeMethod<\n WithInjectedSpecialization<z.infer<DMap['base']>, Specialization>,\n z.infer<DMap['base']>,\n z.infer<Specialization['spec']>\n >\n >;\n }\n>;\n\nexport type Factory<\n _Dependencies extends Dependencies,\n Dim extends z.ZodObject<any>,\n Specialization extends FactorySpecialization<DMap>,\n DMap extends DimensionToSchemaMap<z.infer<Dim>>,\n> = {\n name: string;\n implKeys: string[];\n dimensionToSchemaMap: DMap;\n} & GetImplOverloads<Dim, Specialization, DMap>;\n\nexport type GetFactory<\n _Dependencies extends Dependencies,\n Dim extends z.ZodObject<any>,\n Specialization extends FactorySpecialization<DMap>,\n DMap extends DimensionToSchemaMap<z.infer<Dim>>,\n> = () =>\n | Factory<_Dependencies, Dim, Specialization, DMap>\n | Promise<Factory<_Dependencies, Dim, Specialization, DMap>>;\n\n/**\n * <!-- anchor:FactoryDefinition -->\n * Factory definitions are a type of dependency node that shall be resolved to a *factory*.\n * A factory is an object that provides a getImpl method which accepts some parameters `dim`,\n * and returns some object `getImplMetadata.getModel(dim)`.\n * That is, a factory definition is given by the set of parameters it uses to get its implementations,\n * and a function defining the schema it will return for each set of parameters.\n * @param name inherited from {@link DependencyNode}\n * @param dependencies inherited from {@link DependencyNode}\n * @param dimensions a Zod schema for the parameters this factory operates on.\n * @param dimensionToSchemaMap A map from dimension objects to the Zod schema for the implementation.\n * @param getFactory a method that should return an object with a `getImpl` method that returns\n * entities adhering to the schema for the corresponding `getModel` call\n */\nexport class FactoryDefinition<\n Name extends string,\n Dim extends z.ZodObject<any>,\n const Specialization extends FactorySpecialization<DMap>,\n DMap extends DimensionToSchemaMap<z.infer<Dim>>,\n _Dependencies extends Dependencies,\n> extends DependencyNode<Name, _Dependencies> {\n public readonly dimensions: Dim;\n public readonly specialization: Specialization;\n public readonly dimensionToSchemaMap: DMap;\n public readonly getFactory: GetFactory<_Dependencies, Dim, Specialization, DMap>;\n constructor({\n dimensions,\n specialization,\n dimensionToSchemaMap,\n getFactory,\n ...args\n }: {\n dimensions: Dim;\n specialization: Specialization;\n dimensionToSchemaMap: DMap;\n getFactory: GetFactory<_Dependencies, Dim, Specialization, DMap>;\n } & ConstructorParameters<typeof DependencyNode<Name, _Dependencies>>[0]) {\n super(args);\n this.dimensions = dimensions;\n this.specialization = specialization;\n this.dimensionToSchemaMap = dimensionToSchemaMap;\n this.getFactory = getFactory;\n }\n}\n\n/**\n * <!-- anchor:ObjectDefinition -->\n * An object definition is a dependency node that refers to some entity\n * matching a given schema. That is, it may be resolved to any entity\n * that adheres to the {@link schema}.\n * The object definition is abstract, as it cannot be meaningfully resolved without\n * additional information. For an example of an object definition, see ReflexiveObjectDefinition or ContextDefinition\n * @param name inherited from {@link DependencyNode}\n * @param dependencies inherited from {@link DependencyNode}\n * @param schema a Zod schema defining the expected resolution for this definition\n */\nexport abstract class ObjectDefinition<\n Name extends string,\n Schema extends z.ZodSchema,\n _Dependencies extends Dependencies,\n> extends DependencyNode<Name, _Dependencies> {\n public readonly schema: Schema;\n\n constructor({\n schema,\n ...args\n }: {\n schema: Schema;\n } & ConstructorParameters<typeof DependencyNode<Name, _Dependencies>>[0]) {\n super(args);\n this.schema = schema;\n }\n}\n\nexport type Definition<Name extends string> =\n | FactoryDefinition<Name, any, any, any, any>\n | ObjectDefinition<Name, any, any>;\n\n/**\n * Infers the expected type of a definition once it has been resolved\n */\nexport type ResolvedDefinition<Definition extends DependencyNode<any, any>> =\n Definition extends ObjectDefinition<any, infer Schema, any>\n ? z.infer<Schema>\n : Definition extends FactoryDefinition<\n any,\n infer Dim,\n infer Specialization,\n infer DMap,\n any\n >\n ? Factory<Definition['dependencies'], Dim, Specialization, DMap>\n : Definition extends FactoryDefinition<any, any, any, any, any>\n ? Factory<\n Definition['dependencies'],\n Definition['dimensions'],\n Definition['specialization'],\n Definition['dimensionToSchemaMap']\n >\n : unknown;\n\n/**\n * Given a record from string to definition, maps each definition T to ResolvedDefinition<T>. Removes `definition` suffix from name\n */\nexport type ResolvedDefinitionMap<Deps extends Dependencies> = {\n [Key in keyof Deps as Key extends `${infer Name}Definition` ? Name : Key]: ResolvedDefinition<\n Deps[Key]\n >;\n};\n\n/**\n * For some factory definition F and some dimension D s.t. D ⊇ F.dimensions, infers the expected return type of\n * ResolvedDefinition<F>.getImpl(D)\n */\nexport type ResolvedFactoryImplementation<Definition extends DependencyNode<any, any>, Dim> =\n Definition extends FactoryDefinition<any, any, any, any, any>\n ? WithSpecializeMethod<\n WithInjectedSpecialization<\n GetModelFromSchema<Definition['dimensionToSchemaMap'], Dim>,\n Definition['specialization']\n >,\n GetModelFromSchema<Definition['dimensionToSchemaMap'], Dim>,\n z.infer<Definition['specialization']['spec']>\n >\n : never;\n\ntype RemoveDefinitionSuffix<Key extends string> = Key extends `${infer Name}Definition`\n ? Name\n : Key;\ntype ReplaceFactorySuffix<Key extends string> = Key extends `${infer Name}Factory`\n ? `${Name}Impl`\n : Key;\n\n/**\n * Given a record from string to definition and some dimension D, maps each definition T to ResolvedFactoryImplementation<T, D>\n * Removes Definition | ActivityFactory | Factory from the suffix of the key\n */\nexport type ResolvedFactoryImplementationMap<Deps extends Dependencies, Dim> = RemoveNever<{\n [Key in keyof Deps as Key extends string\n ? ReplaceFactorySuffix<RemoveDefinitionSuffix<Key>>\n : never]: ResolvedFactoryImplementation<Deps[Key], Dim>;\n}>;\n\ntype ActivityFactoryContext<\n _FactoryDefinition extends FactoryDefinition<any, any, any, any, any>,\n Dim,\n _PrivateSchemaExtension extends z.ZodObject = z.ZodObject<{}, z.core.$strip>,\n> = {\n getFunctionPointer: <\n MethodName extends MethodNameOf<\n ResolvedFactoryImplementation<_FactoryDefinition, Dim> &\n z.infer<_PrivateSchemaExtension>\n >,\n >(\n methodName: MethodName,\n ) => FunctionPointer<\n (ResolvedFactoryImplementation<_FactoryDefinition, Dim> &\n z.infer<_PrivateSchemaExtension>)[MethodName]\n >;\n};\n\n/**\n * The parameters that shall be received by a factory's implementation getter\n */\nexport type Context<\n _FactoryDefinition extends FactoryDefinition<any, any, any, any, any>,\n Dim,\n _PrivateSchemaExtension extends z.ZodObject = z.ZodObject<{}, z.core.$strip>,\n> = {\n name: _FactoryDefinition extends FactoryDefinition<infer Name, any, any, any, any>\n ? Name\n : never;\n dependencies: _FactoryDefinition extends FactoryDefinition<any, any, any, any, infer Deps>\n ? ResolvedDefinitionMap<Deps>\n : never;\n dim: Dim;\n impls: _FactoryDefinition extends FactoryDefinition<any, any, any, any, infer Deps>\n ? ResolvedFactoryImplementationMap<Deps, Dim>\n : never;\n self: ResolvedFactoryImplementation<_FactoryDefinition, Dim> & z.infer<_PrivateSchemaExtension>;\n} & ActivityFactoryContext<_FactoryDefinition, Dim, _PrivateSchemaExtension>;\n\nexport const serializeDimensions = (dim: object = {}) => {\n return Object.keys(dim).length\n ? Object.entries(dim)\n .sort()\n .map(([dimName, dimVal]) => `${dimName}_${dimVal}`)\n .join('&')\n : '_base';\n};\n\nexport const deserializeDimensions = (serializedDim: string) => {\n if (serializedDim === '_base') {\n return {};\n }\n\n return Object.fromEntries(\n serializedDim.split('&').map((pair) => {\n const [dimName, ...dimValParts] = pair.split('_');\n return [dimName, dimValParts.join('_')];\n }),\n );\n};\n"]}
|
package/dist/VTYVOFLM.cjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/definitions.ts"],"names":["FactoryDefinition","DependencyNode","dimensions","specialization","dimensionToSchemaMap","getFactory","args","ObjectDefinition","schema","serializeDimensions","__name","dim","Object","keys","length","entries","sort","map","dimName","dimVal","join","deserializeDimensions","serializedDim","fromEntries","split","pair","dimValParts"],"mappings":";;;;;AAkIO,IAAMA,iBAAAA,GAAN,cAMGC,8BAAAA,CAAAA;EApIV;;;AAqIoBC,EAAAA,UAAAA;AACAC,EAAAA,cAAAA;AACAC,EAAAA,oBAAAA;AACAC,EAAAA,UAAAA;AAChB,EAAA,WAAA,CAAY,EACRH,UAAAA,EACAC,cAAAA,EACAC,sBACAC,UAAAA,EACA,GAAGC,MAAAA,EAMmE;AACtE,IAAA,KAAA,CAAMA,IAAAA,CAAAA;AACN,IAAA,IAAA,CAAKJ,UAAAA,GAAaA,UAAAA;AAClB,IAAA,IAAA,CAAKC,cAAAA,GAAiBA,cAAAA;AACtB,IAAA,IAAA,CAAKC,oBAAAA,GAAuBA,oBAAAA;AAC5B,IAAA,IAAA,CAAKC,UAAAA,GAAaA,UAAAA;AACtB,EAAA;AACJ;AAaO,IAAeE,gBAAAA,GAAf,cAIGN,8BAAAA,CAAAA;EA5KV;;;AA6KoBO,EAAAA,MAAAA;AAEhB,EAAA,WAAA,CAAY,EACRA,MAAAA,EACA,GAAGF,IAAAA,EAAAA,EAGmE;AACtE,IAAA,KAAA,CAAMA,IAAAA,CAAAA;AACN,IAAA,IAAA,CAAKE,MAAAA,GAASA,MAAAA;AAClB,EAAA;AACJ;AA8GO,IAAMC,mBAAAA,mBAAsBC,mBAAA,CAAA,CAACC,GAAAA,GAAc,EAAC,KAAC;AAChD,EAAA,OAAOC,MAAAA,CAAOC,IAAAA,CAAKF,GAAAA,CAAAA,CAAKG,MAAAA,GAClBF,OAAOG,OAAAA,CAAQJ,GAAAA,CAAAA,CACVK,IAAAA,EAAI,CACJC,GAAAA,CAAI,CAAC,CAACC,OAAAA,EAASC,MAAAA,CAAAA,KAAY,CAAA,EAAGD,OAAAA,CAAAA,CAAAA,EAAWC,MAAAA,CAAAA,CAAQ,CAAA,CACjDC,IAAAA,CAAK,GAAA,CAAA,GACV,OAAA;AACV,CAAA,EAPmC,qBAAA;AAS5B,IAAMC,qBAAAA,wCAAyBC,aAAAA,KAAAA;AAClC,EAAA,IAAIA,kBAAkB,OAAA,EAAS;AAC3B,IAAA,OAAO,EAAC;AACZ,EAAA;AAEA,EAAA,OAAOV,MAAAA,CAAOW,YACVD,aAAAA,CAAcE,KAAAA,CAAM,GAAA,CAAA,CAAKP,GAAAA,CAAI,CAACQ,IAAAA,KAAAA;AAC1B,IAAA,MAAM,CAACP,OAAAA,EAAS,GAAGQ,WAAAA,CAAAA,GAAeD,IAAAA,CAAKD,MAAM,GAAA,CAAA;AAC7C,IAAA,OAAO;AAACN,MAAAA,OAAAA;AAASQ,MAAAA,WAAAA,CAAYN,KAAK,GAAA;;AACtC,EAAA,CAAA,CAAA,CAAA;AAER,CAAA,EAXqC,uBAAA","file":"VTYVOFLM.cjs","sourcesContent":["import type { z } from 'zod/v4';\n\nimport type { FunctionPointer } from '@layerzerolabs/common-utils';\nimport type { Dependencies } from '@layerzerolabs/dependency-graph';\nimport { DependencyNode } from '@layerzerolabs/dependency-graph';\nimport type {\n AdvancedRecord,\n AdvancedRecordLookup,\n Merge,\n MethodNameOf,\n RemoveNever,\n UnionToIntersection,\n} from '@layerzerolabs/typescript-utils';\nimport type { IsAny } from '@layerzerolabs/typescript-utils';\n\nexport type DimensionToSchemaMap<DimConstraint extends object = object> = {\n byDimension?: AdvancedRecord<DimConstraint, z.ZodType>;\n base: z.ZodType;\n};\n\nexport type FactorySpecialization<DMap extends DimensionToSchemaMap = DimensionToSchemaMap> = {\n spec: z.ZodObject<any>;\n exempt: readonly MethodNameOf<GetSupersetOfModelsFromSchema<DMap>>[];\n};\n\nexport type WithInjectedSpecialization<T, Specialization extends FactorySpecialization<any>> = [\n {},\n] extends [z.infer<Specialization['spec']>]\n ? T\n : {\n [K in keyof T]: K extends Specialization['exempt'][number]\n ? T[K]\n : T[K] extends (...args: infer A) => infer R\n ? (specialization: z.infer<Specialization['spec']>, ...args: A) => R\n : T[K];\n };\n\nexport type WithSpecializeMethod<WithInjection, WithoutInjection, S> = {} extends S\n ? WithoutInjection\n : WithInjection extends (...args: infer Args) => infer Ret\n ? (...args: Args) => Ret\n : WithInjection & {\n specialize: (specialization: S) => WithoutInjection;\n };\n\nexport type GetModelFromSchema<DMap extends DimensionToSchemaMap, Dim> =\n IsAny<Dim> extends true\n ? z.infer<DMap['base']>\n : AdvancedRecordLookup<DMap['byDimension'], Dim> extends never\n ? z.infer<DMap['base']>\n : Merge<z.infer<DMap['base']>, z.infer<AdvancedRecordLookup<DMap['byDimension'], Dim>>>;\n\nexport type GetSupersetOfModelsFromSchema<DMap extends DimensionToSchemaMap> = UnionToIntersection<\n {\n [Key in keyof DMap['byDimension']]: DMap['byDimension'][Key] extends [any, any]\n ? z.infer<DMap['byDimension'][Key][1]>\n : never;\n }[keyof DMap['byDimension']]\n> &\n z.infer<DMap['base']>;\n\ntype GetImplFunctionWithConditionalOptionalDim<Dim, Return> = {} extends Dim\n ? (dim?: Dim) => Return\n : (dim: Dim) => Return;\n\ntype GetImplOverloads<\n Dim extends z.ZodObject<any>,\n Specialization extends FactorySpecialization<DMap>,\n DMap extends DimensionToSchemaMap<z.infer<Dim>>,\n> = UnionToIntersection<\n | {\n [I in keyof DMap['byDimension']]: DMap['byDimension'][I] extends readonly [infer K, any]\n ? {\n getImpl: GetImplFunctionWithConditionalOptionalDim<\n K,\n WithSpecializeMethod<\n WithInjectedSpecialization<GetModelFromSchema<DMap, K>, Specialization>,\n GetModelFromSchema<DMap, K>,\n z.infer<Specialization['spec']>\n >\n >;\n }\n : never;\n }[keyof DMap['byDimension']]\n | {\n getImpl: GetImplFunctionWithConditionalOptionalDim<\n z.infer<Dim>,\n WithSpecializeMethod<\n WithInjectedSpecialization<z.infer<DMap['base']>, Specialization>,\n z.infer<DMap['base']>,\n z.infer<Specialization['spec']>\n >\n >;\n }\n>;\n\nexport type Factory<\n _Dependencies extends Dependencies,\n Dim extends z.ZodObject<any>,\n Specialization extends FactorySpecialization<DMap>,\n DMap extends DimensionToSchemaMap<z.infer<Dim>>,\n> = {\n name: string;\n implKeys: string[];\n dimensionToSchemaMap: DMap;\n} & GetImplOverloads<Dim, Specialization, DMap>;\n\nexport type GetFactory<\n _Dependencies extends Dependencies,\n Dim extends z.ZodObject<any>,\n Specialization extends FactorySpecialization<DMap>,\n DMap extends DimensionToSchemaMap<z.infer<Dim>>,\n> = () =>\n | Factory<_Dependencies, Dim, Specialization, DMap>\n | Promise<Factory<_Dependencies, Dim, Specialization, DMap>>;\n\n/**\n * <!-- anchor:FactoryDefinition -->\n * Factory definitions are a type of dependency node that shall be resolved to a *factory*.\n * A factory is an object that provides a getImpl method which accepts some parameters `dim`,\n * and returns some object `getImplMetadata.getModel(dim)`.\n * That is, a factory definition is given by the set of parameters it uses to get its implementations,\n * and a function defining the schema it will return for each set of parameters.\n * @param name inherited from {@link DependencyNode}\n * @param dependencies inherited from {@link DependencyNode}\n * @param dimensions a Zod schema for the parameters this factory operates on.\n * @param dimensionToSchemaMap A map from dimension objects to the Zod schema for the implementation.\n * @param getFactory a method that should return an object with a `getImpl` method that returns\n * entities adhering to the schema for the corresponding `getModel` call\n */\nexport class FactoryDefinition<\n Name extends string,\n Dim extends z.ZodObject<any>,\n const Specialization extends FactorySpecialization<DMap>,\n DMap extends DimensionToSchemaMap<z.infer<Dim>>,\n _Dependencies extends Dependencies,\n> extends DependencyNode<Name, _Dependencies> {\n public readonly dimensions: Dim;\n public readonly specialization: Specialization;\n public readonly dimensionToSchemaMap: DMap;\n public readonly getFactory: GetFactory<_Dependencies, Dim, Specialization, DMap>;\n constructor({\n dimensions,\n specialization,\n dimensionToSchemaMap,\n getFactory,\n ...args\n }: {\n dimensions: Dim;\n specialization: Specialization;\n dimensionToSchemaMap: DMap;\n getFactory: GetFactory<_Dependencies, Dim, Specialization, DMap>;\n } & ConstructorParameters<typeof DependencyNode<Name, _Dependencies>>[0]) {\n super(args);\n this.dimensions = dimensions;\n this.specialization = specialization;\n this.dimensionToSchemaMap = dimensionToSchemaMap;\n this.getFactory = getFactory;\n }\n}\n\n/**\n * <!-- anchor:ObjectDefinition -->\n * An object definition is a dependency node that refers to some entity\n * matching a given schema. That is, it may be resolved to any entity\n * that adheres to the {@link schema}.\n * The object definition is abstract, as it cannot be meaningfully resolved without\n * additional information. For an example of an object definition, see ReflexiveObjectDefinition or ContextDefinition\n * @param name inherited from {@link DependencyNode}\n * @param dependencies inherited from {@link DependencyNode}\n * @param schema a Zod schema defining the expected resolution for this definition\n */\nexport abstract class ObjectDefinition<\n Name extends string,\n Schema extends z.ZodSchema,\n _Dependencies extends Dependencies,\n> extends DependencyNode<Name, _Dependencies> {\n public readonly schema: Schema;\n\n constructor({\n schema,\n ...args\n }: {\n schema: Schema;\n } & ConstructorParameters<typeof DependencyNode<Name, _Dependencies>>[0]) {\n super(args);\n this.schema = schema;\n }\n}\n\nexport type Definition<Name extends string> =\n | FactoryDefinition<Name, any, any, any, any>\n | ObjectDefinition<Name, any, any>;\n\n/**\n * Infers the expected type of a definition once it has been resolved\n */\nexport type ResolvedDefinition<Definition extends DependencyNode<any, any>> =\n Definition extends ObjectDefinition<any, infer Schema, any>\n ? z.infer<Schema>\n : Definition extends FactoryDefinition<\n any,\n infer Dim,\n infer Specialization,\n infer DMap,\n any\n >\n ? Factory<Definition['dependencies'], Dim, Specialization, DMap>\n : Definition extends FactoryDefinition<any, any, any, any, any>\n ? Factory<\n Definition['dependencies'],\n Definition['dimensions'],\n Definition['specialization'],\n Definition['dimensionToSchemaMap']\n >\n : unknown;\n\n/**\n * Given a record from string to definition, maps each definition T to ResolvedDefinition<T>. Removes `definition` suffix from name\n */\nexport type ResolvedDefinitionMap<Deps extends Dependencies> = {\n [Key in keyof Deps as Key extends `${infer Name}Definition` ? Name : Key]: ResolvedDefinition<\n Deps[Key]\n >;\n};\n\n/**\n * For some factory definition F and some dimension D s.t. D ⊇ F.dimensions, infers the expected return type of\n * ResolvedDefinition<F>.getImpl(D)\n */\nexport type ResolvedFactoryImplementation<Definition extends DependencyNode<any, any>, Dim> =\n Definition extends FactoryDefinition<any, any, any, any, any>\n ? WithSpecializeMethod<\n WithInjectedSpecialization<\n GetModelFromSchema<Definition['dimensionToSchemaMap'], Dim>,\n Definition['specialization']\n >,\n GetModelFromSchema<Definition['dimensionToSchemaMap'], Dim>,\n z.infer<Definition['specialization']['spec']>\n >\n : never;\n\ntype RemoveDefinitionSuffix<Key extends string> = Key extends `${infer Name}Definition`\n ? Name\n : Key;\ntype ReplaceFactorySuffix<Key extends string> = Key extends `${infer Name}Factory`\n ? `${Name}Impl`\n : Key;\n\n/**\n * Given a record from string to definition and some dimension D, maps each definition T to ResolvedFactoryImplementation<T, D>\n * Removes Definition | ActivityFactory | Factory from the suffix of the key\n */\nexport type ResolvedFactoryImplementationMap<Deps extends Dependencies, Dim> = RemoveNever<{\n [Key in keyof Deps as Key extends string\n ? ReplaceFactorySuffix<RemoveDefinitionSuffix<Key>>\n : never]: ResolvedFactoryImplementation<Deps[Key], Dim>;\n}>;\n\ntype ActivityFactoryContext<\n _FactoryDefinition extends FactoryDefinition<any, any, any, any, any>,\n Dim,\n _PrivateSchemaExtension extends z.ZodObject = z.ZodObject<{}, z.core.$strip>,\n> = {\n getFunctionPointer: <\n MethodName extends MethodNameOf<\n ResolvedFactoryImplementation<_FactoryDefinition, Dim> &\n z.infer<_PrivateSchemaExtension>\n >,\n >(\n methodName: MethodName,\n ) => FunctionPointer<\n (ResolvedFactoryImplementation<_FactoryDefinition, Dim> &\n z.infer<_PrivateSchemaExtension>)[MethodName]\n >;\n};\n\n/**\n * The parameters that shall be received by a factory's implementation getter\n */\nexport type Context<\n _FactoryDefinition extends FactoryDefinition<any, any, any, any, any>,\n Dim,\n _PrivateSchemaExtension extends z.ZodObject = z.ZodObject<{}, z.core.$strip>,\n> = {\n name: _FactoryDefinition extends FactoryDefinition<infer Name, any, any, any, any>\n ? Name\n : never;\n dependencies: _FactoryDefinition extends FactoryDefinition<any, any, any, any, infer Deps>\n ? ResolvedDefinitionMap<Deps>\n : never;\n dim: Dim;\n impls: _FactoryDefinition extends FactoryDefinition<any, any, any, any, infer Deps>\n ? ResolvedFactoryImplementationMap<Deps, Dim>\n : never;\n self: ResolvedFactoryImplementation<_FactoryDefinition, Dim> & z.infer<_PrivateSchemaExtension>;\n} & ActivityFactoryContext<_FactoryDefinition, Dim, _PrivateSchemaExtension>;\n\nexport const serializeDimensions = (dim: object = {}) => {\n return Object.keys(dim).length\n ? Object.entries(dim)\n .sort()\n .map(([dimName, dimVal]) => `${dimName}_${dimVal}`)\n .join('&')\n : '_base';\n};\n\nexport const deserializeDimensions = (serializedDim: string) => {\n if (serializedDim === '_base') {\n return {};\n }\n\n return Object.fromEntries(\n serializedDim.split('&').map((pair) => {\n const [dimName, ...dimValParts] = pair.split('_');\n return [dimName, dimValParts.join('_')];\n }),\n );\n};\n"]}
|