@layerzerolabs/base-definitions 0.2.68 → 0.2.69

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/dist/{G6XKLFF4.js → FN4EJGD7.js} +2 -2
  2. package/dist/{G6XKLFF4.js.map → FN4EJGD7.js.map} +1 -1
  3. package/dist/{5V2VE36W.js → IRTAOK6O.js} +17 -2
  4. package/dist/IRTAOK6O.js.map +1 -0
  5. package/dist/{2IH6HX7W.cjs → KY4LVDYW.cjs} +4 -4
  6. package/dist/{2IH6HX7W.cjs.map → KY4LVDYW.cjs.map} +1 -1
  7. package/dist/{PG5UTJ4W.js → XASERBNQ.js} +3 -3
  8. package/dist/{PG5UTJ4W.js.map → XASERBNQ.js.map} +1 -1
  9. package/dist/{2YGTKLAP.cjs → XFGZZMRR.cjs} +2 -2
  10. package/dist/{2YGTKLAP.cjs.map → XFGZZMRR.cjs.map} +1 -1
  11. package/dist/{Y4WRKZUM.cjs → ZBUMYCUA.cjs} +17 -2
  12. package/dist/ZBUMYCUA.cjs.map +1 -0
  13. package/dist/definitions.cjs +5 -5
  14. package/dist/definitions.d.ts +1 -1
  15. package/dist/definitions.d.ts.map +1 -1
  16. package/dist/definitions.js +1 -1
  17. package/dist/index.cjs +10 -10
  18. package/dist/index.js +3 -3
  19. package/dist/registrarBuilder.cjs +3 -3
  20. package/dist/registrarBuilder.d.ts +6 -0
  21. package/dist/registrarBuilder.d.ts.map +1 -1
  22. package/dist/registrarBuilder.js +1 -1
  23. package/dist/utils.cjs +3 -3
  24. package/dist/utils.js +2 -2
  25. package/package.json +10 -7
  26. package/.turbo/turbo-build.log +0 -55
  27. package/.turbo/turbo-lint.log +0 -8
  28. package/.turbo/turbo-test.log +0 -17
  29. package/dist/5V2VE36W.js.map +0 -1
  30. package/dist/Y4WRKZUM.cjs.map +0 -1
  31. package/src/definitions.ts +0 -321
  32. package/src/index.ts +0 -4
  33. package/src/lzyringe.ts +0 -71
  34. package/src/registrarBuilder.ts +0 -348
  35. package/src/utils.ts +0 -25
  36. package/test/registrarBuilder.test.ts +0 -175
  37. package/tsconfig.json +0 -20
  38. package/tsup.config.ts +0 -8
@@ -1 +1 @@
1
- {"version":3,"file":"registrarBuilder.d.ts","sourceRoot":"","sources":["../src/registrarBuilder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"registrarBuilder.d.ts","sourceRoot":"","sources":["../src/registrarBuilder.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- export { RegistrarBuilder, multiplexOrderedRegistrars } from './5V2VE36W.js';
1
+ export { RegistrarBuilder, multiplexOrderedRegistrars } from './IRTAOK6O.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 _2IH6HX7W_cjs = require('./2IH6HX7W.cjs');
4
- require('./2YGTKLAP.cjs');
3
+ var KY4LVDYW_cjs = require('./KY4LVDYW.cjs');
4
+ require('./XFGZZMRR.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 _2IH6HX7W_cjs.extractSchemaFromFactory; }
11
+ get: function () { return KY4LVDYW_cjs.extractSchemaFromFactory; }
12
12
  });
13
13
  //# sourceMappingURL=utils.cjs.map
14
14
  //# sourceMappingURL=utils.cjs.map
package/dist/utils.js CHANGED
@@ -1,5 +1,5 @@
1
- export { extractSchemaFromFactory } from './PG5UTJ4W.js';
2
- import './G6XKLFF4.js';
1
+ export { extractSchemaFromFactory } from './XASERBNQ.js';
2
+ import './FN4EJGD7.js';
3
3
  import './VUOMXK5T.js';
4
4
  //# sourceMappingURL=utils.js.map
5
5
  //# sourceMappingURL=utils.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@layerzerolabs/base-definitions",
3
- "version": "0.2.68",
3
+ "version": "0.2.69",
4
4
  "private": false,
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -13,18 +13,21 @@
13
13
  "main": "./dist/index.cjs",
14
14
  "module": "./dist/index.js",
15
15
  "types": "./dist/index.d.ts",
16
+ "files": [
17
+ "dist/**/*"
18
+ ],
16
19
  "dependencies": {
17
20
  "zod": "4.3.5",
18
- "@layerzerolabs/dependency-graph": "0.2.68",
19
- "@layerzerolabs/dfs": "0.2.68",
20
- "@layerzerolabs/function-pointer": "0.2.68",
21
- "@layerzerolabs/typescript-utils": "0.2.68"
21
+ "@layerzerolabs/dependency-graph": "0.2.69",
22
+ "@layerzerolabs/function-pointer": "0.2.69",
23
+ "@layerzerolabs/typescript-utils": "0.2.69",
24
+ "@layerzerolabs/dfs": "0.2.69"
22
25
  },
23
26
  "devDependencies": {
24
27
  "tsup": "^8.4.0",
25
28
  "vitest": "^3.2.3",
26
- "@layerzerolabs/tsup-configuration": "0.2.68",
27
- "@layerzerolabs/typescript-configuration": "0.2.68"
29
+ "@layerzerolabs/tsup-configuration": "0.2.69",
30
+ "@layerzerolabs/typescript-configuration": "0.2.69"
28
31
  },
29
32
  "publishConfig": {
30
33
  "access": "public",
@@ -1,55 +0,0 @@
1
-  WARN  Issue while reading "/home/runner/work/monorepo-internal/monorepo-internal/.npmrc". Failed to replace env in config: ${NPM_TOKEN}
2
-
3
- > @layerzerolabs/base-definitions@0.0.2 build /home/runner/work/monorepo-internal/monorepo-internal/packages/framework/definitions/base-definitions
4
- > tsup
5
-
6
- CLI Building entry: src/definitions.ts, src/index.ts, src/lzyringe.ts, src/registrarBuilder.ts, src/utils.ts
7
- CLI Using tsconfig: tsconfig.json
8
- CLI tsup v8.5.1
9
- CLI Using tsup config: /home/runner/work/monorepo-internal/monorepo-internal/packages/framework/definitions/base-definitions/tsup.config.ts
10
- CLI Target: ES2023
11
- CLI Cleaning output folder
12
- CJS Build start
13
- ESM Build start
14
- CJS dist/definitions.cjs 747.00 B
15
- CJS dist/index.cjs 1.43 KB
16
- CJS dist/lzyringe.cjs 302.00 B
17
- CJS dist/registrarBuilder.cjs 478.00 B
18
- CJS dist/JKTGUQY4.cjs 1.70 KB
19
- CJS dist/utils.cjs 343.00 B
20
- CJS dist/Y4WRKZUM.cjs 7.31 KB
21
- CJS dist/2YGTKLAP.cjs 1.68 KB
22
- CJS dist/2IH6HX7W.cjs 815.00 B
23
- CJS dist/YJF4D23A.cjs 245.00 B
24
- CJS dist/definitions.cjs.map 76.00 B
25
- CJS dist/index.cjs.map 70.00 B
26
- CJS dist/lzyringe.cjs.map 73.00 B
27
- CJS dist/registrarBuilder.cjs.map 81.00 B
28
- CJS dist/utils.cjs.map 70.00 B
29
- CJS dist/JKTGUQY4.cjs.map 3.78 KB
30
- CJS dist/2IH6HX7W.cjs.map 1.83 KB
31
- CJS dist/2YGTKLAP.cjs.map 14.10 KB
32
- CJS dist/YJF4D23A.cjs.map 73.00 B
33
- CJS dist/Y4WRKZUM.cjs.map 19.32 KB
34
- CJS ⚡️ Build success in 201ms
35
- ESM dist/definitions.js 216.00 B
36
- ESM dist/index.js 389.00 B
37
- ESM dist/registrarBuilder.js 191.00 B
38
- ESM dist/JJBD65HU.js 1.65 KB
39
- ESM dist/utils.js 173.00 B
40
- ESM dist/PG5UTJ4W.js 733.00 B
41
- ESM dist/5V2VE36W.js 7.11 KB
42
- ESM dist/VUOMXK5T.js 222.00 B
43
- ESM dist/G6XKLFF4.js 1.47 KB
44
- ESM dist/lzyringe.js 146.00 B
45
- ESM dist/definitions.js.map 75.00 B
46
- ESM dist/registrarBuilder.js.map 80.00 B
47
- ESM dist/index.js.map 69.00 B
48
- ESM dist/utils.js.map 69.00 B
49
- ESM dist/JJBD65HU.js.map 3.78 KB
50
- ESM dist/PG5UTJ4W.js.map 1.81 KB
51
- ESM dist/5V2VE36W.js.map 19.30 KB
52
- ESM dist/VUOMXK5T.js.map 72.00 B
53
- ESM dist/lzyringe.js.map 72.00 B
54
- ESM dist/G6XKLFF4.js.map 14.09 KB
55
- ESM ⚡️ Build success in 201ms
@@ -1,8 +0,0 @@
1
-
2
- > @layerzerolabs/base-definitions@0.0.2 lint /home/runner/work/monorepo-internal/monorepo-internal/packages/framework/definitions/base-definitions
3
- > eslint . --max-warnings 0 || (eslint . --fix --max-warnings 0 && false)
4
-
5
- (node:66489) [MODULE_TYPELESS_PACKAGE_JSON] Warning: Module type of file:///home/runner/work/monorepo-internal/monorepo-internal/eslint.config.js?mtime=1775777605148 is not specified and it doesn't parse as CommonJS.
6
- Reparsing as ES module because module syntax was detected. This incurs a performance overhead.
7
- To eliminate this warning, add "type": "module" to /home/runner/work/monorepo-internal/monorepo-internal/package.json.
8
- (Use `node --trace-warnings ...` to show where the warning was created)
@@ -1,17 +0,0 @@
1
-
2
- > @layerzerolabs/base-definitions@0.0.2 test /home/runner/work/monorepo-internal/monorepo-internal/packages/framework/definitions/base-definitions
3
- > vitest --run --pass-with-no-tests --typecheck
4
-
5
- Testing types with tsc and vue-tsc is an experimental feature.
6
- Breaking changes might not follow SemVer, please pin Vitest's version when using it.
7
-
8
-  RUN  v3.2.4 /home/runner/work/monorepo-internal/monorepo-internal/packages/framework/definitions/base-definitions
9
-
10
- ✓ test/registrarBuilder.test.ts (7 tests) 10ms
11
-
12
-  Test Files  1 passed (1)
13
-  Tests  7 passed (7)
14
- Type Errors  no errors
15
-  Start at  23:35:40
16
-  Duration  547ms (transform 134ms, setup 0ms, collect 128ms, tests 10ms, environment 0ms, prepare 125ms)
17
-
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/registrarBuilder.ts"],"names":["RegistrarBuilder","defaultHandler","nodeHandlers","classHandlers","classAliases","nodeAliases","getEntrypoints","node","Error","JSON","stringify","addNodeHandler","identifier","fn","name","getClassIdentifierForNode","nodeClass","undefined","addClassHandler","find","fromNodeClass","i","handler","prototype","isPrototypeOf","splice","push","addClassAlias","getToNode","alias","addNodeAlias","setEntrypointsGetter","addDefault","build","mergedNodePrehandler","nodeAlias","toNode","mergedNodeHandler","ancestry","key","value","nodeHandler","traverseDependencies","entrypoints","length","dfs","dependencies","reduce","acc","cur","VirtualNode","DependencyNode","virtualEntrypoint","multiplexOrderedRegistrars","registrars","multiplexRegistrar","params","registrar","result"],"mappings":"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","file":"5V2VE36W.js","sourcesContent":["import type { Dependencies } from '@layerzerolabs/dependency-graph';\nimport { DependencyNode } from '@layerzerolabs/dependency-graph';\nimport type { Registrar } from '@layerzerolabs/dfs';\nimport { dfs } from '@layerzerolabs/dfs';\nexport type { Registrar };\n\ntype NodeClass = new (...args: any[]) => DependencyNode;\ntype AbstractNodeClass = abstract new (...args: any[]) => DependencyNode;\n\n/**\n * <!-- anchor:RegistrarBuilder -->\n * A builder class for a {@link Registrar}.\n * Builds a registrar that switches on node class--i.e., enables defining\n * specific registration behaviour for specific node classes.\n * Intelligently handles inheritance, always using the most specific\n * handler defined for any given class.\n * The registrar built shall return an object that maps from a handler ID,\n * to a map from node name to the return of each handler,\n * e.g., { objectNodes: { myObjectNode: 'my handler return' }}.\n * This can be used to extract a specific resolved value after resolving the tree,\n * given that the handlers return the resolved nodes.\n */\nexport class RegistrarBuilder<_ReturnTypes> {\n protected defaultHandler: (node: DependencyNode, ancestry: DependencyNode[]) => Promise<any>;\n\n protected nodeHandlers: Record<\n string,\n {\n fn: (node: DependencyNode, ancestry: DependencyNode[]) => Promise<any>;\n identifier: string;\n }\n > = {};\n\n protected classHandlers: {\n nodeClass: AbstractNodeClass;\n identifier: string;\n fn: (node: DependencyNode, ancestry: DependencyNode[]) => Promise<any>;\n }[] = [];\n\n protected classAliases: {\n fromNodeClass: AbstractNodeClass;\n getToNode: (from: DependencyNode) => DependencyNode;\n }[] = [];\n\n protected nodeAliases: Record<string, (node: DependencyNode) => DependencyNode> = {};\n\n protected getEntrypoints: (\n node: DependencyNode,\n ) => DependencyNode[] | Promise<DependencyNode[]> = (node) => [node];\n\n constructor() {\n this.defaultHandler = async (node: DependencyNode) => {\n throw new Error(\n `This registrar does not provide a handler for the dependency type used by ${JSON.stringify(node)}`,\n );\n };\n }\n\n public addNodeHandler<\n Node extends DependencyNode,\n Function extends (node: Node, ancestry: DependencyNode[]) => Promise<any>,\n >(node: DependencyNode, identifier: string, fn: Function) {\n if (this.nodeHandlers[node.name]) {\n throw new Error(\n `Cannot define a node handler for an identifier that already has a handler: ${node.name}`,\n );\n }\n this.nodeHandlers[node.name] = {\n fn: fn as unknown as (node: DependencyNode, ancestry: DependencyNode[]) => Promise<any>,\n identifier,\n };\n return this as RegistrarBuilder<\n _ReturnTypes & {\n ['nodeHandlers']: { [nodeName: string]: Awaited<ReturnType<Function>> };\n }\n >;\n }\n\n /**\n * Returns the class handler identifier that would be used for a given node,\n * or undefined if no class handler matches.\n */\n public getClassIdentifierForNode(node: DependencyNode): string | undefined {\n for (const { nodeClass, identifier } of this.classHandlers) {\n if (node instanceof nodeClass) {\n return identifier;\n }\n }\n return undefined;\n }\n\n /**\n * Add a function fn to be called on all nodes of class\n * @param nodeClass\n * @param identifier\n * @param fn\n */\n public addClassHandler<\n Identifier extends string,\n _NodeClass extends NodeClass,\n Function extends (node: InstanceType<_NodeClass>, ancestry: DependencyNode[]) => any,\n >(nodeClass: _NodeClass, identifier: Identifier, fn: Function) {\n if (this.classAliases.find(({ fromNodeClass }) => fromNodeClass === nodeClass)) {\n throw new Error(\n `Cannot define a handler for a class that is aliased to something else. This would be pointless`,\n );\n }\n\n let i = 0;\n for (const handler of this.classHandlers) {\n //check if we are overriding an existing handler\n if (handler.nodeClass === nodeClass) {\n this.classHandlers[i] = {\n nodeClass,\n identifier,\n fn: fn as unknown as (node: DependencyNode) => Promise<any>,\n };\n\n return this as RegistrarBuilder<\n _ReturnTypes & {\n [_K in Identifier]: { [nodeName: string]: Awaited<ReturnType<Function>> };\n }\n >;\n }\n //check if the new handler has an ordering requirement against an existing handler\n //(we always want to use more specific handlers if they exist)\n // eslint-disable-next-line no-prototype-builtins\n if (handler.nodeClass.prototype.isPrototypeOf(nodeClass.prototype)) {\n this.classHandlers.splice(i, 0, {\n nodeClass,\n identifier,\n fn: fn as unknown as (node: DependencyNode) => Promise<any>,\n });\n\n return this as RegistrarBuilder<\n _ReturnTypes & {\n [_K in Identifier]: { [nodeName: string]: Awaited<ReturnType<Function>> };\n }\n >;\n }\n i++;\n }\n\n this.classHandlers.push({\n nodeClass,\n identifier,\n fn: fn as unknown as (node: DependencyNode) => Promise<any>,\n });\n\n return this as RegistrarBuilder<\n _ReturnTypes & {\n [_K in Identifier]: { [nodeName: string]: Awaited<ReturnType<Function>> };\n }\n >;\n }\n\n /**\n * Alias some class *from*, such that any node of that class in the tree will be\n * treated as though it were some other node *to*. The *to* node is given as a\n * function returning a class instance, so that its dependencies, name, etc can be fixed.\n * The registrar will ignore the dependencies of the original node, and follow the alias's\n * dependencies instead.\n *\n * Additionally, this method does not affect the typing of the registrar. The output type\n * of the build() method will not reflect the alias.\n *\n * @param fromNodeClass alias instances of this class\n * @param getToNode method that returns the *to* part of the alias\n */\n public addClassAlias<FromNodeClass extends AbstractNodeClass>(\n fromNodeClass: FromNodeClass,\n getToNode: (fromNodeInstance: InstanceType<FromNodeClass>) => DependencyNode,\n ) {\n if (this.classHandlers.find(({ nodeClass }) => nodeClass === fromNodeClass)) {\n throw new Error(`Cannot define an alias for a class that already has a handler`);\n }\n\n let i = 0;\n for (const alias of this.classAliases) {\n //check if we are overriding an existing alias\n if (alias.fromNodeClass === fromNodeClass) {\n this.classAliases[i] = {\n fromNodeClass,\n getToNode: getToNode as unknown as (from: DependencyNode) => DependencyNode,\n };\n\n return this;\n }\n //check if the new alias has an ordering requirement against an existing alias\n //(we always want to use more specific handlers if they exist)\n // eslint-disable-next-line no-prototype-builtins\n if (alias.fromNodeClass.prototype.isPrototypeOf(fromNodeClass.prototype)) {\n this.classAliases.splice(i, 0, {\n fromNodeClass,\n getToNode: getToNode as unknown as (from: DependencyNode) => DependencyNode,\n });\n\n return this;\n }\n i++;\n }\n\n this.classAliases.push({\n fromNodeClass,\n getToNode: getToNode as unknown as (from: DependencyNode) => DependencyNode,\n });\n\n return this;\n }\n\n /**\n * Alias a specific named node, such that when encountered in the tree,\n * it will be transformed to a different node before processing.\n * The transformed node's dependencies will be traversed instead.\n * This is useful for short-circuiting dependency traversal for specific nodes.\n *\n * @param nodeName name of the node to alias\n * @param getToNode method that returns the transformed node\n */\n public addNodeAlias(\n node: DependencyNode,\n getToNode: (fromNodeInstance: DependencyNode) => DependencyNode,\n ) {\n this.nodeAliases[node.name] = getToNode;\n return this;\n }\n\n /**\n * Set a custom entrypoint getter function. By default, the entrypoint getter\n * returns the node passed in as the sole entrypoint.\n */\n public setEntrypointsGetter(\n fn: (node: DependencyNode) => DependencyNode[] | Promise<DependencyNode[]>,\n ) {\n this.getEntrypoints = fn;\n return this;\n }\n\n /**\n * Add a default function fn to be used on nodes whose types do not have handlers.\n * If this is not set, the default behaviour will be to throw\n * @param fn\n */\n public addDefault(fn: (node: DependencyNode, ancestry: DependencyNode[]) => any) {\n this.defaultHandler = fn;\n return this;\n }\n\n public build(): Registrar<_ReturnTypes> {\n const mergedNodePrehandler = (node: DependencyNode) => {\n // Check node aliases first (more specific)\n const nodeAlias = this.nodeAliases[node.name];\n if (nodeAlias) {\n return nodeAlias(node);\n }\n\n // Then check class aliases\n for (const { fromNodeClass, getToNode: toNode } of this.classAliases) {\n if (node instanceof fromNodeClass) {\n return toNode(node);\n }\n }\n return node;\n };\n\n const mergedNodeHandler = async (node: DependencyNode, ancestry: DependencyNode[]) => {\n if (node.name === '_virtualEntrypoint') {\n return {\n key: node.name,\n value: undefined,\n };\n }\n\n const nodeHandler = this.nodeHandlers[node.name];\n if (nodeHandler) {\n return {\n key: nodeHandler.identifier ?? node.name,\n value: await nodeHandler.fn(node, ancestry),\n };\n }\n\n for (const { nodeClass, identifier, fn } of this.classHandlers) {\n if (node instanceof nodeClass) {\n return {\n key: identifier,\n value: await fn(node, ancestry),\n };\n }\n }\n\n return {\n key: 'default',\n value: await this.defaultHandler(node, ancestry),\n };\n };\n return {\n traverseDependencies: async (node: DependencyNode) => {\n const entrypoints = await this.getEntrypoints(node);\n if (entrypoints.length === 1)\n return await dfs<_ReturnTypes>(node, mergedNodeHandler, mergedNodePrehandler)();\n\n const dependencies = entrypoints.reduce((acc, cur) => {\n acc[cur.name] = cur;\n return acc;\n }, {} as Dependencies);\n\n class VirtualNode extends DependencyNode {}\n\n const virtualEntrypoint = new VirtualNode({\n name: '_virtualEntrypoint',\n dependencies,\n });\n\n return await dfs<_ReturnTypes>(\n virtualEntrypoint,\n mergedNodeHandler,\n mergedNodePrehandler,\n )();\n },\n };\n }\n}\n\nexport const multiplexOrderedRegistrars = <\n const T extends [name: string, registrar: Registrar<{}>][],\n>(\n ...registrars: T\n) => {\n const multiplexRegistrar: Registrar<{\n [K in Extract<keyof T, number> as T[K] extends readonly [infer Name extends string, any]\n ? Name\n : never]: T[K] extends readonly [any, Registrar<infer Ret>] ? Ret : never;\n }> = {\n traverseDependencies: async (\n ...params: Parameters<Registrar<any>['traverseDependencies']>\n ) => {\n const acc: Record<string, any> = {};\n for (const [name, registrar] of registrars) {\n const result = await registrar.traverseDependencies(...params);\n acc[name] = result;\n }\n\n return acc;\n },\n } as any;\n\n return multiplexRegistrar;\n};\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/registrarBuilder.ts"],"names":["RegistrarBuilder","defaultHandler","nodeHandlers","classHandlers","classAliases","nodeAliases","getEntrypoints","node","Error","JSON","stringify","addNodeHandler","identifier","fn","name","getClassIdentifierForNode","nodeClass","undefined","addClassHandler","find","fromNodeClass","i","handler","prototype","isPrototypeOf","splice","push","addClassAlias","getToNode","alias","addNodeAlias","setEntrypointsGetter","addDefault","build","mergedNodePrehandler","nodeAlias","toNode","mergedNodeHandler","__name","ancestry","key","value","nodeHandler","traverseDependencies","entrypoints","length","dfs","dependencies","reduce","acc","cur","VirtualNode","DependencyNode","virtualEntrypoint","multiplexOrderedRegistrars","registrars","multiplexRegistrar","params","registrar","result"],"mappings":"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","file":"Y4WRKZUM.cjs","sourcesContent":["import type { Dependencies } from '@layerzerolabs/dependency-graph';\nimport { DependencyNode } from '@layerzerolabs/dependency-graph';\nimport type { Registrar } from '@layerzerolabs/dfs';\nimport { dfs } from '@layerzerolabs/dfs';\nexport type { Registrar };\n\ntype NodeClass = new (...args: any[]) => DependencyNode;\ntype AbstractNodeClass = abstract new (...args: any[]) => DependencyNode;\n\n/**\n * <!-- anchor:RegistrarBuilder -->\n * A builder class for a {@link Registrar}.\n * Builds a registrar that switches on node class--i.e., enables defining\n * specific registration behaviour for specific node classes.\n * Intelligently handles inheritance, always using the most specific\n * handler defined for any given class.\n * The registrar built shall return an object that maps from a handler ID,\n * to a map from node name to the return of each handler,\n * e.g., { objectNodes: { myObjectNode: 'my handler return' }}.\n * This can be used to extract a specific resolved value after resolving the tree,\n * given that the handlers return the resolved nodes.\n */\nexport class RegistrarBuilder<_ReturnTypes> {\n protected defaultHandler: (node: DependencyNode, ancestry: DependencyNode[]) => Promise<any>;\n\n protected nodeHandlers: Record<\n string,\n {\n fn: (node: DependencyNode, ancestry: DependencyNode[]) => Promise<any>;\n identifier: string;\n }\n > = {};\n\n protected classHandlers: {\n nodeClass: AbstractNodeClass;\n identifier: string;\n fn: (node: DependencyNode, ancestry: DependencyNode[]) => Promise<any>;\n }[] = [];\n\n protected classAliases: {\n fromNodeClass: AbstractNodeClass;\n getToNode: (from: DependencyNode) => DependencyNode;\n }[] = [];\n\n protected nodeAliases: Record<string, (node: DependencyNode) => DependencyNode> = {};\n\n protected getEntrypoints: (\n node: DependencyNode,\n ) => DependencyNode[] | Promise<DependencyNode[]> = (node) => [node];\n\n constructor() {\n this.defaultHandler = async (node: DependencyNode) => {\n throw new Error(\n `This registrar does not provide a handler for the dependency type used by ${JSON.stringify(node)}`,\n );\n };\n }\n\n public addNodeHandler<\n Node extends DependencyNode,\n Function extends (node: Node, ancestry: DependencyNode[]) => Promise<any>,\n >(node: DependencyNode, identifier: string, fn: Function) {\n if (this.nodeHandlers[node.name]) {\n throw new Error(\n `Cannot define a node handler for an identifier that already has a handler: ${node.name}`,\n );\n }\n this.nodeHandlers[node.name] = {\n fn: fn as unknown as (node: DependencyNode, ancestry: DependencyNode[]) => Promise<any>,\n identifier,\n };\n return this as RegistrarBuilder<\n _ReturnTypes & {\n ['nodeHandlers']: { [nodeName: string]: Awaited<ReturnType<Function>> };\n }\n >;\n }\n\n /**\n * Returns the class handler identifier that would be used for a given node,\n * or undefined if no class handler matches.\n */\n public getClassIdentifierForNode(node: DependencyNode): string | undefined {\n for (const { nodeClass, identifier } of this.classHandlers) {\n if (node instanceof nodeClass) {\n return identifier;\n }\n }\n return undefined;\n }\n\n /**\n * Add a function fn to be called on all nodes of class\n * @param nodeClass\n * @param identifier\n * @param fn\n */\n public addClassHandler<\n Identifier extends string,\n _NodeClass extends NodeClass,\n Function extends (node: InstanceType<_NodeClass>, ancestry: DependencyNode[]) => any,\n >(nodeClass: _NodeClass, identifier: Identifier, fn: Function) {\n if (this.classAliases.find(({ fromNodeClass }) => fromNodeClass === nodeClass)) {\n throw new Error(\n `Cannot define a handler for a class that is aliased to something else. This would be pointless`,\n );\n }\n\n let i = 0;\n for (const handler of this.classHandlers) {\n //check if we are overriding an existing handler\n if (handler.nodeClass === nodeClass) {\n this.classHandlers[i] = {\n nodeClass,\n identifier,\n fn: fn as unknown as (node: DependencyNode) => Promise<any>,\n };\n\n return this as RegistrarBuilder<\n _ReturnTypes & {\n [_K in Identifier]: { [nodeName: string]: Awaited<ReturnType<Function>> };\n }\n >;\n }\n //check if the new handler has an ordering requirement against an existing handler\n //(we always want to use more specific handlers if they exist)\n // eslint-disable-next-line no-prototype-builtins\n if (handler.nodeClass.prototype.isPrototypeOf(nodeClass.prototype)) {\n this.classHandlers.splice(i, 0, {\n nodeClass,\n identifier,\n fn: fn as unknown as (node: DependencyNode) => Promise<any>,\n });\n\n return this as RegistrarBuilder<\n _ReturnTypes & {\n [_K in Identifier]: { [nodeName: string]: Awaited<ReturnType<Function>> };\n }\n >;\n }\n i++;\n }\n\n this.classHandlers.push({\n nodeClass,\n identifier,\n fn: fn as unknown as (node: DependencyNode) => Promise<any>,\n });\n\n return this as RegistrarBuilder<\n _ReturnTypes & {\n [_K in Identifier]: { [nodeName: string]: Awaited<ReturnType<Function>> };\n }\n >;\n }\n\n /**\n * Alias some class *from*, such that any node of that class in the tree will be\n * treated as though it were some other node *to*. The *to* node is given as a\n * function returning a class instance, so that its dependencies, name, etc can be fixed.\n * The registrar will ignore the dependencies of the original node, and follow the alias's\n * dependencies instead.\n *\n * Additionally, this method does not affect the typing of the registrar. The output type\n * of the build() method will not reflect the alias.\n *\n * @param fromNodeClass alias instances of this class\n * @param getToNode method that returns the *to* part of the alias\n */\n public addClassAlias<FromNodeClass extends AbstractNodeClass>(\n fromNodeClass: FromNodeClass,\n getToNode: (fromNodeInstance: InstanceType<FromNodeClass>) => DependencyNode,\n ) {\n if (this.classHandlers.find(({ nodeClass }) => nodeClass === fromNodeClass)) {\n throw new Error(`Cannot define an alias for a class that already has a handler`);\n }\n\n let i = 0;\n for (const alias of this.classAliases) {\n //check if we are overriding an existing alias\n if (alias.fromNodeClass === fromNodeClass) {\n this.classAliases[i] = {\n fromNodeClass,\n getToNode: getToNode as unknown as (from: DependencyNode) => DependencyNode,\n };\n\n return this;\n }\n //check if the new alias has an ordering requirement against an existing alias\n //(we always want to use more specific handlers if they exist)\n // eslint-disable-next-line no-prototype-builtins\n if (alias.fromNodeClass.prototype.isPrototypeOf(fromNodeClass.prototype)) {\n this.classAliases.splice(i, 0, {\n fromNodeClass,\n getToNode: getToNode as unknown as (from: DependencyNode) => DependencyNode,\n });\n\n return this;\n }\n i++;\n }\n\n this.classAliases.push({\n fromNodeClass,\n getToNode: getToNode as unknown as (from: DependencyNode) => DependencyNode,\n });\n\n return this;\n }\n\n /**\n * Alias a specific named node, such that when encountered in the tree,\n * it will be transformed to a different node before processing.\n * The transformed node's dependencies will be traversed instead.\n * This is useful for short-circuiting dependency traversal for specific nodes.\n *\n * @param nodeName name of the node to alias\n * @param getToNode method that returns the transformed node\n */\n public addNodeAlias(\n node: DependencyNode,\n getToNode: (fromNodeInstance: DependencyNode) => DependencyNode,\n ) {\n this.nodeAliases[node.name] = getToNode;\n return this;\n }\n\n /**\n * Set a custom entrypoint getter function. By default, the entrypoint getter\n * returns the node passed in as the sole entrypoint.\n */\n public setEntrypointsGetter(\n fn: (node: DependencyNode) => DependencyNode[] | Promise<DependencyNode[]>,\n ) {\n this.getEntrypoints = fn;\n return this;\n }\n\n /**\n * Add a default function fn to be used on nodes whose types do not have handlers.\n * If this is not set, the default behaviour will be to throw\n * @param fn\n */\n public addDefault(fn: (node: DependencyNode, ancestry: DependencyNode[]) => any) {\n this.defaultHandler = fn;\n return this;\n }\n\n public build(): Registrar<_ReturnTypes> {\n const mergedNodePrehandler = (node: DependencyNode) => {\n // Check node aliases first (more specific)\n const nodeAlias = this.nodeAliases[node.name];\n if (nodeAlias) {\n return nodeAlias(node);\n }\n\n // Then check class aliases\n for (const { fromNodeClass, getToNode: toNode } of this.classAliases) {\n if (node instanceof fromNodeClass) {\n return toNode(node);\n }\n }\n return node;\n };\n\n const mergedNodeHandler = async (node: DependencyNode, ancestry: DependencyNode[]) => {\n if (node.name === '_virtualEntrypoint') {\n return {\n key: node.name,\n value: undefined,\n };\n }\n\n const nodeHandler = this.nodeHandlers[node.name];\n if (nodeHandler) {\n return {\n key: nodeHandler.identifier ?? node.name,\n value: await nodeHandler.fn(node, ancestry),\n };\n }\n\n for (const { nodeClass, identifier, fn } of this.classHandlers) {\n if (node instanceof nodeClass) {\n return {\n key: identifier,\n value: await fn(node, ancestry),\n };\n }\n }\n\n return {\n key: 'default',\n value: await this.defaultHandler(node, ancestry),\n };\n };\n return {\n traverseDependencies: async (node: DependencyNode) => {\n const entrypoints = await this.getEntrypoints(node);\n if (entrypoints.length === 1)\n return await dfs<_ReturnTypes>(node, mergedNodeHandler, mergedNodePrehandler)();\n\n const dependencies = entrypoints.reduce((acc, cur) => {\n acc[cur.name] = cur;\n return acc;\n }, {} as Dependencies);\n\n class VirtualNode extends DependencyNode {}\n\n const virtualEntrypoint = new VirtualNode({\n name: '_virtualEntrypoint',\n dependencies,\n });\n\n return await dfs<_ReturnTypes>(\n virtualEntrypoint,\n mergedNodeHandler,\n mergedNodePrehandler,\n )();\n },\n };\n }\n}\n\nexport const multiplexOrderedRegistrars = <\n const T extends [name: string, registrar: Registrar<{}>][],\n>(\n ...registrars: T\n) => {\n const multiplexRegistrar: Registrar<{\n [K in Extract<keyof T, number> as T[K] extends readonly [infer Name extends string, any]\n ? Name\n : never]: T[K] extends readonly [any, Registrar<infer Ret>] ? Ret : never;\n }> = {\n traverseDependencies: async (\n ...params: Parameters<Registrar<any>['traverseDependencies']>\n ) => {\n const acc: Record<string, any> = {};\n for (const [name, registrar] of registrars) {\n const result = await registrar.traverseDependencies(...params);\n acc[name] = result;\n }\n\n return acc;\n },\n } as any;\n\n return multiplexRegistrar;\n};\n"]}
@@ -1,321 +0,0 @@
1
- import type { z } from 'zod';
2
-
3
- import type { Dependencies } from '@layerzerolabs/dependency-graph';
4
- import { DependencyNode } from '@layerzerolabs/dependency-graph';
5
- import type { FunctionPointer } from '@layerzerolabs/function-pointer';
6
- import type {
7
- AdvancedRecord,
8
- AdvancedRecordLookup,
9
- Merge,
10
- MethodNameOf,
11
- RemoveNever,
12
- UnionToIntersection,
13
- } from '@layerzerolabs/typescript-utils';
14
- import type { IsAny } from '@layerzerolabs/typescript-utils';
15
-
16
- export type DimensionToSchemaMap<DimConstraint extends object = object> = {
17
- byDimension?: AdvancedRecord<DimConstraint, z.ZodType>;
18
- base: z.ZodType;
19
- };
20
-
21
- export type FactorySpecialization<DMap extends DimensionToSchemaMap = DimensionToSchemaMap> = {
22
- spec: z.ZodObject<any>;
23
- exempt: readonly MethodNameOf<GetSupersetOfModelsFromSchema<DMap>>[];
24
- };
25
-
26
- export type WithInjectedSpecialization<T, Specialization extends FactorySpecialization<any>> = [
27
- {},
28
- ] extends [z.infer<Specialization['spec']>]
29
- ? T
30
- : {
31
- [K in keyof T]: K extends Specialization['exempt'][number]
32
- ? T[K]
33
- : T[K] extends (...args: infer A) => infer R
34
- ? (specialization: z.infer<Specialization['spec']>, ...args: A) => R
35
- : T[K];
36
- };
37
-
38
- export type WithSpecializeMethod<WithInjection, WithoutInjection, S> = {} extends S
39
- ? WithoutInjection
40
- : WithInjection extends (...args: infer Args) => infer Ret
41
- ? (...args: Args) => Ret
42
- : WithInjection & {
43
- specialize: (specialization: S) => WithoutInjection;
44
- };
45
-
46
- export type GetModelFromSchema<DMap extends DimensionToSchemaMap, Dim> =
47
- IsAny<Dim> extends true
48
- ? z.infer<DMap['base']>
49
- : AdvancedRecordLookup<DMap['byDimension'], Dim> extends never
50
- ? z.infer<DMap['base']>
51
- : Merge<z.infer<DMap['base']>, z.infer<AdvancedRecordLookup<DMap['byDimension'], Dim>>>;
52
-
53
- export type GetSupersetOfModelsFromSchema<DMap extends DimensionToSchemaMap> = UnionToIntersection<
54
- {
55
- [Key in keyof DMap['byDimension']]: DMap['byDimension'][Key] extends [any, any]
56
- ? z.infer<DMap['byDimension'][Key][1]>
57
- : never;
58
- }[keyof DMap['byDimension']]
59
- > &
60
- z.infer<DMap['base']>;
61
-
62
- type GetImplFunctionWithConditionalOptionalDim<Dim, Return> = {} extends Dim
63
- ? (dim?: Dim) => Return
64
- : (dim: Dim) => Return;
65
-
66
- type GetImplOverloads<
67
- Dim extends z.ZodObject<any>,
68
- Specialization extends FactorySpecialization<DMap>,
69
- DMap extends DimensionToSchemaMap<z.infer<Dim>>,
70
- > = UnionToIntersection<
71
- | {
72
- [I in keyof DMap['byDimension']]: DMap['byDimension'][I] extends readonly [infer K, any]
73
- ? {
74
- getImpl: GetImplFunctionWithConditionalOptionalDim<
75
- K,
76
- WithSpecializeMethod<
77
- WithInjectedSpecialization<GetModelFromSchema<DMap, K>, Specialization>,
78
- GetModelFromSchema<DMap, K>,
79
- z.infer<Specialization['spec']>
80
- >
81
- >;
82
- }
83
- : never;
84
- }[keyof DMap['byDimension']]
85
- | {
86
- getImpl: GetImplFunctionWithConditionalOptionalDim<
87
- z.infer<Dim>,
88
- WithSpecializeMethod<
89
- WithInjectedSpecialization<z.infer<DMap['base']>, Specialization>,
90
- z.infer<DMap['base']>,
91
- z.infer<Specialization['spec']>
92
- >
93
- >;
94
- }
95
- >;
96
-
97
- export type Factory<
98
- _Dependencies extends Dependencies,
99
- Dim extends z.ZodObject<any>,
100
- Specialization extends FactorySpecialization<DMap>,
101
- DMap extends DimensionToSchemaMap<z.infer<Dim>>,
102
- > = {
103
- name: string;
104
- implKeys: string[];
105
- dimensionToSchemaMap: DMap;
106
- } & GetImplOverloads<Dim, Specialization, DMap>;
107
-
108
- export type GetFactory<
109
- _Dependencies extends Dependencies,
110
- Dim extends z.ZodObject<any>,
111
- Specialization extends FactorySpecialization<DMap>,
112
- DMap extends DimensionToSchemaMap<z.infer<Dim>>,
113
- > = () =>
114
- | Factory<_Dependencies, Dim, Specialization, DMap>
115
- | Promise<Factory<_Dependencies, Dim, Specialization, DMap>>;
116
-
117
- /**
118
- * <!-- anchor:FactoryDefinition -->
119
- * Factory definitions are a type of dependency node that shall be resolved to a *factory*.
120
- * A factory is an object that provides a getImpl method which accepts some parameters `dim`,
121
- * and returns some object `getImplMetadata.getModel(dim)`.
122
- * That is, a factory definition is given by the set of parameters it uses to get its implementations,
123
- * and a function defining the schema it will return for each set of parameters.
124
- * @param name inherited from {@link DependencyNode}
125
- * @param dependencies inherited from {@link DependencyNode}
126
- * @param dimensions a Zod schema for the parameters this factory operates on.
127
- * @param dimensionToSchemaMap A map from dimension objects to the Zod schema for the implementation.
128
- * @param getFactory a method that should return an object with a `getImpl` method that returns
129
- * entities adhering to the schema for the corresponding `getModel` call
130
- */
131
- export class FactoryDefinition<
132
- Name extends string,
133
- Dim extends z.ZodObject<any>,
134
- const Specialization extends FactorySpecialization<DMap>,
135
- DMap extends DimensionToSchemaMap<z.infer<Dim>>,
136
- _Dependencies extends Dependencies,
137
- > extends DependencyNode<Name, _Dependencies> {
138
- public readonly dimensions: Dim;
139
- public readonly specialization: Specialization;
140
- public readonly dimensionToSchemaMap: DMap;
141
- public readonly getFactory: GetFactory<_Dependencies, Dim, Specialization, DMap>;
142
- constructor({
143
- dimensions,
144
- specialization,
145
- dimensionToSchemaMap,
146
- getFactory,
147
- ...args
148
- }: {
149
- dimensions: Dim;
150
- specialization: Specialization;
151
- dimensionToSchemaMap: DMap;
152
- getFactory: GetFactory<_Dependencies, Dim, Specialization, DMap>;
153
- } & ConstructorParameters<typeof DependencyNode<Name, _Dependencies>>[0]) {
154
- super(args);
155
- this.dimensions = dimensions;
156
- this.specialization = specialization;
157
- this.dimensionToSchemaMap = dimensionToSchemaMap;
158
- this.getFactory = getFactory;
159
- }
160
- }
161
-
162
- /**
163
- * <!-- anchor:ObjectDefinition -->
164
- * An object definition is a dependency node that refers to some entity
165
- * matching a given schema. That is, it may be resolved to any entity
166
- * that adheres to the {@link schema}.
167
- * The object definition is abstract, as it cannot be meaningfully resolved without
168
- * additional information. For an example of an object definition, see ReflexiveObjectDefinition or ContextDefinition
169
- * @param name inherited from {@link DependencyNode}
170
- * @param dependencies inherited from {@link DependencyNode}
171
- * @param schema a Zod schema defining the expected resolution for this definition
172
- */
173
- export abstract class ObjectDefinition<
174
- Name extends string,
175
- Schema extends z.ZodSchema,
176
- _Dependencies extends Dependencies,
177
- > extends DependencyNode<Name, _Dependencies> {
178
- public readonly schema: Schema;
179
-
180
- constructor({
181
- schema,
182
- ...args
183
- }: {
184
- schema: Schema;
185
- } & ConstructorParameters<typeof DependencyNode<Name, _Dependencies>>[0]) {
186
- super(args);
187
- this.schema = schema;
188
- }
189
- }
190
-
191
- export type Definition<Name extends string> =
192
- | FactoryDefinition<Name, any, any, any, any>
193
- | ObjectDefinition<Name, any, any>;
194
-
195
- /**
196
- * Infers the expected type of a definition once it has been resolved
197
- */
198
- export type ResolvedDefinition<Definition extends DependencyNode<any, any>> =
199
- Definition extends ObjectDefinition<any, infer Schema, any>
200
- ? z.infer<Schema>
201
- : Definition extends FactoryDefinition<
202
- any,
203
- infer Dim,
204
- infer Specialization,
205
- infer DMap,
206
- any
207
- >
208
- ? Factory<Definition['dependencies'], Dim, Specialization, DMap>
209
- : Definition extends FactoryDefinition<any, any, any, any, any>
210
- ? Factory<
211
- Definition['dependencies'],
212
- Definition['dimensions'],
213
- Definition['specialization'],
214
- Definition['dimensionToSchemaMap']
215
- >
216
- : unknown;
217
-
218
- /**
219
- * Given a record from string to definition, maps each definition T to ResolvedDefinition<T>. Removes `definition` suffix from name
220
- */
221
- export type ResolvedDefinitionMap<Deps extends Dependencies> = {
222
- [Key in keyof Deps as Key extends `${infer Name}Definition` ? Name : Key]: ResolvedDefinition<
223
- Deps[Key]
224
- >;
225
- };
226
-
227
- /**
228
- * For some factory definition F and some dimension D s.t. D ⊇ F.dimensions, infers the expected return type of
229
- * ResolvedDefinition<F>.getImpl(D)
230
- */
231
- export type ResolvedFactoryImplementation<Definition extends DependencyNode<any, any>, Dim> =
232
- Definition extends FactoryDefinition<any, any, any, any, any>
233
- ? WithSpecializeMethod<
234
- WithInjectedSpecialization<
235
- GetModelFromSchema<Definition['dimensionToSchemaMap'], Dim>,
236
- Definition['specialization']
237
- >,
238
- GetModelFromSchema<Definition['dimensionToSchemaMap'], Dim>,
239
- z.infer<Definition['specialization']['spec']>
240
- >
241
- : never;
242
-
243
- type RemoveDefinitionSuffix<Key extends string> = Key extends `${infer Name}Definition`
244
- ? Name
245
- : Key;
246
- type ReplaceFactorySuffix<Key extends string> = Key extends `${infer Name}Factory`
247
- ? `${Name}Impl`
248
- : Key;
249
-
250
- /**
251
- * Given a record from string to definition and some dimension D, maps each definition T to ResolvedFactoryImplementation<T, D>
252
- * Removes Definition | ActivityFactory | Factory from the suffix of the key
253
- */
254
- export type ResolvedFactoryImplementationMap<Deps extends Dependencies, Dim> = RemoveNever<{
255
- [Key in keyof Deps as Key extends string
256
- ? ReplaceFactorySuffix<RemoveDefinitionSuffix<Key>>
257
- : never]: ResolvedFactoryImplementation<Deps[Key], Dim>;
258
- }>;
259
-
260
- type ActivityFactoryContext<
261
- _FactoryDefinition extends FactoryDefinition<any, any, any, any, any>,
262
- Dim,
263
- _PrivateSchemaExtension extends z.ZodObject = z.ZodObject<{}, z.core.$strip>,
264
- > = {
265
- getFunctionPointer: <
266
- MethodName extends MethodNameOf<
267
- ResolvedFactoryImplementation<_FactoryDefinition, Dim> &
268
- z.infer<_PrivateSchemaExtension>
269
- >,
270
- >(
271
- methodName: MethodName,
272
- ) => (ResolvedFactoryImplementation<_FactoryDefinition, Dim> &
273
- z.infer<_PrivateSchemaExtension>)[MethodName] extends infer M extends (
274
- ...args: any[]
275
- ) => any
276
- ? FunctionPointer<Parameters<M>, ReturnType<M>>
277
- : never;
278
- };
279
-
280
- /**
281
- * The parameters that shall be received by a factory's implementation getter
282
- */
283
- export type Context<
284
- _FactoryDefinition extends FactoryDefinition<any, any, any, any, any>,
285
- Dim,
286
- _PrivateSchemaExtension extends z.ZodObject = z.ZodObject<{}, z.core.$strip>,
287
- > = {
288
- name: _FactoryDefinition extends FactoryDefinition<infer Name, any, any, any, any>
289
- ? Name
290
- : never;
291
- dependencies: _FactoryDefinition extends FactoryDefinition<any, any, any, any, infer Deps>
292
- ? ResolvedDefinitionMap<Deps>
293
- : never;
294
- dim: Dim;
295
- impls: _FactoryDefinition extends FactoryDefinition<any, any, any, any, infer Deps>
296
- ? ResolvedFactoryImplementationMap<Deps, Dim>
297
- : never;
298
- self: ResolvedFactoryImplementation<_FactoryDefinition, Dim> & z.infer<_PrivateSchemaExtension>;
299
- } & ActivityFactoryContext<_FactoryDefinition, Dim, _PrivateSchemaExtension>;
300
-
301
- export const serializeDimensions = (dim: object = {}) => {
302
- return Object.keys(dim).length
303
- ? Object.entries(dim)
304
- .sort()
305
- .map(([dimName, dimVal]) => `${dimName}_${dimVal}`)
306
- .join('&')
307
- : '_base';
308
- };
309
-
310
- export const deserializeDimensions = (serializedDim: string) => {
311
- if (serializedDim === '_base') {
312
- return {};
313
- }
314
-
315
- return Object.fromEntries(
316
- serializedDim.split('&').map((pair) => {
317
- const [dimName, ...dimValParts] = pair.split('_');
318
- return [dimName, dimValParts.join('_')];
319
- }),
320
- );
321
- };
package/src/index.ts DELETED
@@ -1,4 +0,0 @@
1
- export * from './definitions';
2
- export * from './lzyringe';
3
- export * from './registrarBuilder';
4
- export * from './utils';