@layerzerolabs/base-definitions 0.0.19 → 0.0.20
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 +27 -27
- package/.turbo/turbo-lint.log +1 -1
- package/.turbo/turbo-test.log +5 -5
- package/dist/{O4SGLGEI.js → JJBD65HU.js} +12 -2
- package/dist/JJBD65HU.js.map +1 -0
- package/dist/{67HCA6YT.cjs → JKTGUQY4.cjs} +12 -2
- package/dist/JKTGUQY4.cjs.map +1 -0
- package/dist/{VO33UEHJ.cjs → LBRYOOPE.cjs} +5 -5
- package/dist/LBRYOOPE.cjs.map +1 -0
- package/dist/{S2FOVFOI.js → RFHQF55L.js} +5 -5
- package/dist/RFHQF55L.js.map +1 -0
- package/dist/index.cjs +4 -4
- package/dist/index.js +2 -2
- package/dist/lzyringe.cjs +2 -2
- package/dist/lzyringe.d.ts +5 -1
- package/dist/lzyringe.d.ts.map +1 -1
- package/dist/lzyringe.js +1 -1
- package/dist/registrarBuilder.cjs +2 -2
- package/dist/registrarBuilder.d.ts +8 -8
- package/dist/registrarBuilder.d.ts.map +1 -1
- package/dist/registrarBuilder.js +1 -1
- package/package.json +7 -7
- package/src/lzyringe.ts +9 -1
- package/src/registrarBuilder.ts +21 -27
- package/dist/67HCA6YT.cjs.map +0 -1
- package/dist/O4SGLGEI.js.map +0 -1
- package/dist/S2FOVFOI.js.map +0 -1
- package/dist/VO33UEHJ.cjs.map +0 -1
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,54 +1,54 @@
|
|
|
1
1
|
|
|
2
|
-
> @layerzerolabs/base-definitions@0.0.2 build /home/runner/work/monorepo-internal/monorepo-internal/packages/definitions/base-definitions
|
|
2
|
+
> @layerzerolabs/base-definitions@0.0.2 build /home/runner/work/monorepo-internal/monorepo-internal/packages/framework/definitions/base-definitions
|
|
3
3
|
> tsup
|
|
4
4
|
|
|
5
5
|
[34mCLI[39m Building entry: src/definitions.ts, src/index.ts, src/lzyringe.ts, src/registrarBuilder.ts, src/utils.ts
|
|
6
6
|
[34mCLI[39m Using tsconfig: tsconfig.json
|
|
7
7
|
[34mCLI[39m tsup v8.4.0
|
|
8
|
-
[34mCLI[39m Using tsup config: /home/runner/work/monorepo-internal/monorepo-internal/packages/definitions/base-definitions/tsup.config.ts
|
|
8
|
+
[34mCLI[39m Using tsup config: /home/runner/work/monorepo-internal/monorepo-internal/packages/framework/definitions/base-definitions/tsup.config.ts
|
|
9
9
|
[34mCLI[39m Target: es2022
|
|
10
10
|
[34mCLI[39m Cleaning output folder
|
|
11
11
|
[34mCJS[39m Build start
|
|
12
12
|
[34mESM[39m Build start
|
|
13
13
|
[32mCJS[39m [1mdist/definitions.cjs [22m[32m594.00 B[39m
|
|
14
|
-
[32mCJS[39m [1mdist/lzyringe.cjs [22m[32m304.00 B[39m
|
|
15
|
-
[32mCJS[39m [1mdist/registrarBuilder.cjs [22m[32m320.00 B[39m
|
|
16
|
-
[32mCJS[39m [1mdist/utils.cjs [22m[32m341.00 B[39m
|
|
17
14
|
[32mCJS[39m [1mdist/index.cjs [22m[32m1.12 KB[39m
|
|
18
15
|
[32mCJS[39m [1mdist/Y5HYTYQJ.cjs [22m[32m862.00 B[39m
|
|
19
|
-
[32mCJS[39m [1mdist/
|
|
20
|
-
[32mCJS[39m [1mdist/
|
|
16
|
+
[32mCJS[39m [1mdist/LBRYOOPE.cjs [22m[32m4.11 KB[39m
|
|
17
|
+
[32mCJS[39m [1mdist/JKTGUQY4.cjs [22m[32m1.70 KB[39m
|
|
18
|
+
[32mCJS[39m [1mdist/utils.cjs [22m[32m341.00 B[39m
|
|
21
19
|
[32mCJS[39m [1mdist/YJF4D23A.cjs [22m[32m245.00 B[39m
|
|
22
|
-
[32mCJS[39m [1mdist/
|
|
20
|
+
[32mCJS[39m [1mdist/lzyringe.cjs [22m[32m302.00 B[39m
|
|
21
|
+
[32mCJS[39m [1mdist/MOTHALOU.cjs [22m[32m1.21 KB[39m
|
|
22
|
+
[32mCJS[39m [1mdist/registrarBuilder.cjs [22m[32m320.00 B[39m
|
|
23
|
+
[32mCJS[39m [1mdist/Y5HYTYQJ.cjs.map [22m[32m1.89 KB[39m
|
|
24
|
+
[32mCJS[39m [1mdist/LBRYOOPE.cjs.map [22m[32m11.37 KB[39m
|
|
25
|
+
[32mCJS[39m [1mdist/index.cjs.map [22m[32m70.00 B[39m
|
|
26
|
+
[32mCJS[39m [1mdist/JKTGUQY4.cjs.map [22m[32m3.78 KB[39m
|
|
23
27
|
[32mCJS[39m [1mdist/definitions.cjs.map [22m[32m76.00 B[39m
|
|
24
|
-
[32mCJS[39m [1mdist/
|
|
25
|
-
[32mCJS[39m [1mdist/registrarBuilder.cjs.map [22m[32m81.00 B[39m
|
|
28
|
+
[32mCJS[39m [1mdist/YJF4D23A.cjs.map [22m[32m73.00 B[39m
|
|
26
29
|
[32mCJS[39m [1mdist/utils.cjs.map [22m[32m70.00 B[39m
|
|
27
|
-
[32mCJS[39m [1mdist/
|
|
28
|
-
[32mCJS[39m [1mdist/Y5HYTYQJ.cjs.map [22m[32m1.89 KB[39m
|
|
29
|
-
[32mCJS[39m [1mdist/VO33UEHJ.cjs.map [22m[32m11.48 KB[39m
|
|
30
|
+
[32mCJS[39m [1mdist/lzyringe.cjs.map [22m[32m73.00 B[39m
|
|
30
31
|
[32mCJS[39m [1mdist/MOTHALOU.cjs.map [22m[32m9.25 KB[39m
|
|
31
|
-
[32mCJS[39m [1mdist/
|
|
32
|
-
[32mCJS[39m
|
|
33
|
-
[32mCJS[39m ⚡️ Build success in 142ms
|
|
34
|
-
[32mESM[39m [1mdist/index.js [22m[32m338.00 B[39m
|
|
32
|
+
[32mCJS[39m [1mdist/registrarBuilder.cjs.map [22m[32m81.00 B[39m
|
|
33
|
+
[32mCJS[39m ⚡️ Build success in 146ms
|
|
35
34
|
[32mESM[39m [1mdist/definitions.js [22m[32m193.00 B[39m
|
|
36
|
-
[32mESM[39m [1mdist/
|
|
35
|
+
[32mESM[39m [1mdist/index.js [22m[32m338.00 B[39m
|
|
37
36
|
[32mESM[39m [1mdist/lzyringe.js [22m[32m146.00 B[39m
|
|
38
|
-
[32mESM[39m [1mdist/
|
|
39
|
-
[32mESM[39m [1mdist/
|
|
37
|
+
[32mESM[39m [1mdist/registrarBuilder.js [22m[32m163.00 B[39m
|
|
38
|
+
[32mESM[39m [1mdist/JJBD65HU.js [22m[32m1.65 KB[39m
|
|
40
39
|
[32mESM[39m [1mdist/utils.js [22m[32m173.00 B[39m
|
|
41
|
-
[32mESM[39m [1mdist/
|
|
40
|
+
[32mESM[39m [1mdist/RFHQF55L.js [22m[32m4.01 KB[39m
|
|
42
41
|
[32mESM[39m [1mdist/T6VE3ZX4.js [22m[32m783.00 B[39m
|
|
42
|
+
[32mESM[39m [1mdist/YDEUCMM5.js [22m[32m1.04 KB[39m
|
|
43
43
|
[32mESM[39m [1mdist/VUOMXK5T.js [22m[32m222.00 B[39m
|
|
44
|
-
[32mESM[39m [1mdist/index.js.map [22m[32m69.00 B[39m
|
|
45
44
|
[32mESM[39m [1mdist/definitions.js.map [22m[32m75.00 B[39m
|
|
45
|
+
[32mESM[39m [1mdist/index.js.map [22m[32m69.00 B[39m
|
|
46
46
|
[32mESM[39m [1mdist/lzyringe.js.map [22m[32m72.00 B[39m
|
|
47
|
+
[32mESM[39m [1mdist/JJBD65HU.js.map [22m[32m3.78 KB[39m
|
|
48
|
+
[32mESM[39m [1mdist/utils.js.map [22m[32m69.00 B[39m
|
|
47
49
|
[32mESM[39m [1mdist/registrarBuilder.js.map [22m[32m80.00 B[39m
|
|
48
|
-
[32mESM[39m [1mdist/
|
|
50
|
+
[32mESM[39m [1mdist/RFHQF55L.js.map [22m[32m11.36 KB[39m
|
|
51
|
+
[32mESM[39m [1mdist/VUOMXK5T.js.map [22m[32m72.00 B[39m
|
|
49
52
|
[32mESM[39m [1mdist/T6VE3ZX4.js.map [22m[32m1.87 KB[39m
|
|
50
|
-
[32mESM[39m [1mdist/utils.js.map [22m[32m69.00 B[39m
|
|
51
53
|
[32mESM[39m [1mdist/YDEUCMM5.js.map [22m[32m9.24 KB[39m
|
|
52
|
-
[32mESM[39m
|
|
53
|
-
[32mESM[39m [1mdist/S2FOVFOI.js.map [22m[32m11.46 KB[39m
|
|
54
|
-
[32mESM[39m ⚡️ Build success in 143ms
|
|
54
|
+
[32mESM[39m ⚡️ Build success in 147ms
|
package/.turbo/turbo-lint.log
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
|
|
2
|
-
> @layerzerolabs/base-definitions@0.0.2 lint /home/runner/work/monorepo-internal/monorepo-internal/packages/definitions/base-definitions
|
|
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
|
|
4
4
|
|
package/.turbo/turbo-test.log
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
|
|
2
|
-
> @layerzerolabs/base-definitions@0.0.2 test /home/runner/work/monorepo-internal/monorepo-internal/packages/definitions/base-definitions
|
|
2
|
+
> @layerzerolabs/base-definitions@0.0.2 test /home/runner/work/monorepo-internal/monorepo-internal/packages/framework/definitions/base-definitions
|
|
3
3
|
> vitest --run --pass-with-no-tests
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
[1m[46m RUN [49m[22m [36mv3.2.3 [39m[90m/home/runner/work/monorepo-internal/monorepo-internal/packages/definitions/base-definitions[39m
|
|
6
|
+
[1m[46m RUN [49m[22m [36mv3.2.3 [39m[90m/home/runner/work/monorepo-internal/monorepo-internal/packages/framework/definitions/base-definitions[39m
|
|
7
7
|
|
|
8
|
-
[32m✓[39m test/registrarBuilder.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m
|
|
8
|
+
[32m✓[39m test/registrarBuilder.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m 6[2mms[22m[39m
|
|
9
9
|
|
|
10
10
|
[2m Test Files [22m [1m[32m1 passed[39m[22m[90m (1)[39m
|
|
11
11
|
[2m Tests [22m [1m[32m4 passed[39m[22m[90m (4)[39m
|
|
12
|
-
[2m Start at [22m
|
|
13
|
-
[2m Duration [22m
|
|
12
|
+
[2m Start at [22m 22:36:01
|
|
13
|
+
[2m Duration [22m 472ms[2m (transform 107ms, setup 0ms, collect 91ms, tests 6ms, environment 0ms, prepare 141ms)[22m
|
|
14
14
|
|
|
@@ -26,6 +26,16 @@ var DependencyStore = class {
|
|
|
26
26
|
value
|
|
27
27
|
};
|
|
28
28
|
}
|
|
29
|
+
/** Registers a promise value that will be resolved literally by resolve()
|
|
30
|
+
* @throws if already registered
|
|
31
|
+
*/
|
|
32
|
+
registerPromise(key, value) {
|
|
33
|
+
this.throwIfRegistered(key);
|
|
34
|
+
this.store[key] = {
|
|
35
|
+
type: "value",
|
|
36
|
+
value
|
|
37
|
+
};
|
|
38
|
+
}
|
|
29
39
|
/** Registers a factory function that will be called by resolve()
|
|
30
40
|
* @throws if already registered
|
|
31
41
|
*/
|
|
@@ -58,5 +68,5 @@ var DependencyStore = class {
|
|
|
58
68
|
};
|
|
59
69
|
|
|
60
70
|
export { DependencyStore };
|
|
61
|
-
//# sourceMappingURL=
|
|
62
|
-
//# sourceMappingURL=
|
|
71
|
+
//# sourceMappingURL=JJBD65HU.js.map
|
|
72
|
+
//# sourceMappingURL=JJBD65HU.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/lzyringe.ts"],"names":["DependencyStore","store","throwIfRegistered","key","Error","throwIfUnregistered","register","value","type","registerPromise","registerFactory","factory","unregister","undefined","invalidate","resolve","stored"],"mappings":";;;AAUO,IAAMA,kBAAN,MAAMA;EAAb;;;AACYC,EAAAA,KAAAA,GAA8C,EAAC;AAE/CC,EAAAA,iBAAAA,CAAkBC,GAAAA,EAAa;AACnC,IAAA,IAAI,IAAA,CAAKF,KAAAA,CAAME,GAAAA,CAAAA,IAAQ,IAAA,EAAM;AACzB,MAAA,MAAM,IAAIC,KAAAA,CAAM,CAAA,EAAGD,GAAAA,CAAAA,sBAAAA,CAA2B,CAAA;AAClD,IAAA;AACJ,EAAA;AAEQE,EAAAA,mBAAAA,CAAoBF,GAAAA,EAAa;AACrC,IAAA,IAAI,IAAA,CAAKF,KAAAA,CAAME,GAAAA,CAAAA,IAAQ,IAAA,EAAM;AACzB,MAAA,MAAM,IAAIC,KAAAA,CAAM,CAAA,EAAGD,GAAAA,CAAAA,kBAAAA,CAAuB,CAAA;AAC9C,IAAA;AACJ,EAAA;;;;AAKOG,EAAAA,QAAAA,CAAYH,KAAaI,KAAAA,EAA2C;AACvE,IAAA,IAAA,CAAKL,kBAAkBC,GAAAA,CAAAA;AACvB,IAAA,IAAA,CAAKF,KAAAA,CAAME,GAAAA,CAAAA,GAAO;MAAEK,IAAAA,EAAM,OAAA;AAASD,MAAAA;AAAM,KAAA;AAC7C,EAAA;;;;AAKOE,EAAAA,eAAAA,CAAgBN,KAAaI,KAAAA,EAAqB;AACrD,IAAA,IAAA,CAAKL,kBAAkBC,GAAAA,CAAAA;AACvB,IAAA,IAAA,CAAKF,KAAAA,CAAME,GAAAA,CAAAA,GAAO;MAAEK,IAAAA,EAAM,OAAA;AAASD,MAAAA;AAAM,KAAA;AAC7C,EAAA;;;;AAKOG,EAAAA,eAAAA,CAAgBP,KAAaQ,OAAAA,EAAoB;AACpD,IAAA,IAAA,CAAKT,kBAAkBC,GAAAA,CAAAA;AACvB,IAAA,IAAA,CAAKF,KAAAA,CAAME,GAAAA,CAAAA,GAAO;MAAEK,IAAAA,EAAM,SAAA;MAAWD,KAAAA,EAAOI;AAAQ,KAAA;AACxD,EAAA;;;;AAKOC,EAAAA,UAAAA,CAAWT,GAAAA,EAAa;AAC3B,IAAA,IAAA,CAAKE,oBAAoBF,GAAAA,CAAAA;AACzB,IAAA,IAAA,CAAKF,KAAAA,CAAME,GAAAA,CAAAA,GAAOU,MAAAA;AACtB,EAAA;;;;EAKOC,UAAAA,GAAa;AAChB,IAAA,IAAA,CAAKb,QAAQ,EAAC;AAClB,EAAA;;AAGOc,EAAAA,OAAAA,CAAQZ,GAAAA,EAAa;AACxB,IAAA,IAAA,CAAKE,oBAAoBF,GAAAA,CAAAA;AACzB,IAAA,MAAMa,MAAAA,GAAS,IAAA,CAAKf,KAAAA,CAAME,GAAAA,CAAAA;AAC1B,IAAA,OAAOa,OAAOR,IAAAA,KAAS,SAAA,GAAYQ,MAAAA,CAAOT,KAAAA,KAAUS,MAAAA,CAAOT,KAAAA;AAC/D,EAAA;AACJ","file":"JJBD65HU.js","sourcesContent":["type StoreValue = {\n type: 'value';\n value: any;\n};\ntype StoreFactory = {\n type: 'factory';\n value: () => any;\n};\ntype StoreAny = StoreValue | StoreFactory;\n\nexport class DependencyStore {\n private store: Record<string, StoreAny | undefined> = {};\n\n private throwIfRegistered(key: string) {\n if (this.store[key] != null) {\n throw new Error(`${key} is already registered`);\n }\n }\n\n private throwIfUnregistered(key: string) {\n if (this.store[key] == null) {\n throw new Error(`${key} is not registered`);\n }\n }\n\n /** Registers a value that will be resolved literally by resolve()\n * @throws if already registered\n */\n public register<T>(key: string, value: T extends Promise<any> ? never : T) {\n this.throwIfRegistered(key);\n this.store[key] = { type: 'value', value };\n }\n\n /** Registers a promise value that will be resolved literally by resolve()\n * @throws if already registered\n */\n public registerPromise(key: string, value: Promise<any>) {\n this.throwIfRegistered(key);\n this.store[key] = { type: 'value', value };\n }\n\n /** Registers a factory function that will be called by resolve()\n * @throws if already registered\n */\n public registerFactory(key: string, factory: () => any) {\n this.throwIfRegistered(key);\n this.store[key] = { type: 'factory', value: factory };\n }\n\n /** Unregisters a key\n * @throws if not registered\n */\n public unregister(key: string) {\n this.throwIfUnregistered(key);\n this.store[key] = undefined;\n }\n\n /**\n * Drops all registered values\n */\n public invalidate() {\n this.store = {};\n }\n\n /** Resolves a key to a value */\n public resolve(key: string) {\n this.throwIfUnregistered(key);\n const stored = this.store[key]!;\n return stored.type === 'factory' ? stored.value() : stored.value;\n }\n}\n"]}
|
|
@@ -28,6 +28,16 @@ var DependencyStore = class {
|
|
|
28
28
|
value
|
|
29
29
|
};
|
|
30
30
|
}
|
|
31
|
+
/** Registers a promise value that will be resolved literally by resolve()
|
|
32
|
+
* @throws if already registered
|
|
33
|
+
*/
|
|
34
|
+
registerPromise(key, value) {
|
|
35
|
+
this.throwIfRegistered(key);
|
|
36
|
+
this.store[key] = {
|
|
37
|
+
type: "value",
|
|
38
|
+
value
|
|
39
|
+
};
|
|
40
|
+
}
|
|
31
41
|
/** Registers a factory function that will be called by resolve()
|
|
32
42
|
* @throws if already registered
|
|
33
43
|
*/
|
|
@@ -60,5 +70,5 @@ var DependencyStore = class {
|
|
|
60
70
|
};
|
|
61
71
|
|
|
62
72
|
exports.DependencyStore = DependencyStore;
|
|
63
|
-
//# sourceMappingURL=
|
|
64
|
-
//# sourceMappingURL=
|
|
73
|
+
//# sourceMappingURL=JKTGUQY4.cjs.map
|
|
74
|
+
//# sourceMappingURL=JKTGUQY4.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/lzyringe.ts"],"names":["DependencyStore","store","throwIfRegistered","key","Error","throwIfUnregistered","register","value","type","registerPromise","registerFactory","factory","unregister","undefined","invalidate","resolve","stored"],"mappings":";;;;;AAUO,IAAMA,kBAAN,MAAMA;EAAb;;;AACYC,EAAAA,KAAAA,GAA8C,EAAC;AAE/CC,EAAAA,iBAAAA,CAAkBC,GAAAA,EAAa;AACnC,IAAA,IAAI,IAAA,CAAKF,KAAAA,CAAME,GAAAA,CAAAA,IAAQ,IAAA,EAAM;AACzB,MAAA,MAAM,IAAIC,KAAAA,CAAM,CAAA,EAAGD,GAAAA,CAAAA,sBAAAA,CAA2B,CAAA;AAClD,IAAA;AACJ,EAAA;AAEQE,EAAAA,mBAAAA,CAAoBF,GAAAA,EAAa;AACrC,IAAA,IAAI,IAAA,CAAKF,KAAAA,CAAME,GAAAA,CAAAA,IAAQ,IAAA,EAAM;AACzB,MAAA,MAAM,IAAIC,KAAAA,CAAM,CAAA,EAAGD,GAAAA,CAAAA,kBAAAA,CAAuB,CAAA;AAC9C,IAAA;AACJ,EAAA;;;;AAKOG,EAAAA,QAAAA,CAAYH,KAAaI,KAAAA,EAA2C;AACvE,IAAA,IAAA,CAAKL,kBAAkBC,GAAAA,CAAAA;AACvB,IAAA,IAAA,CAAKF,KAAAA,CAAME,GAAAA,CAAAA,GAAO;MAAEK,IAAAA,EAAM,OAAA;AAASD,MAAAA;AAAM,KAAA;AAC7C,EAAA;;;;AAKOE,EAAAA,eAAAA,CAAgBN,KAAaI,KAAAA,EAAqB;AACrD,IAAA,IAAA,CAAKL,kBAAkBC,GAAAA,CAAAA;AACvB,IAAA,IAAA,CAAKF,KAAAA,CAAME,GAAAA,CAAAA,GAAO;MAAEK,IAAAA,EAAM,OAAA;AAASD,MAAAA;AAAM,KAAA;AAC7C,EAAA;;;;AAKOG,EAAAA,eAAAA,CAAgBP,KAAaQ,OAAAA,EAAoB;AACpD,IAAA,IAAA,CAAKT,kBAAkBC,GAAAA,CAAAA;AACvB,IAAA,IAAA,CAAKF,KAAAA,CAAME,GAAAA,CAAAA,GAAO;MAAEK,IAAAA,EAAM,SAAA;MAAWD,KAAAA,EAAOI;AAAQ,KAAA;AACxD,EAAA;;;;AAKOC,EAAAA,UAAAA,CAAWT,GAAAA,EAAa;AAC3B,IAAA,IAAA,CAAKE,oBAAoBF,GAAAA,CAAAA;AACzB,IAAA,IAAA,CAAKF,KAAAA,CAAME,GAAAA,CAAAA,GAAOU,MAAAA;AACtB,EAAA;;;;EAKOC,UAAAA,GAAa;AAChB,IAAA,IAAA,CAAKb,QAAQ,EAAC;AAClB,EAAA;;AAGOc,EAAAA,OAAAA,CAAQZ,GAAAA,EAAa;AACxB,IAAA,IAAA,CAAKE,oBAAoBF,GAAAA,CAAAA;AACzB,IAAA,MAAMa,MAAAA,GAAS,IAAA,CAAKf,KAAAA,CAAME,GAAAA,CAAAA;AAC1B,IAAA,OAAOa,OAAOR,IAAAA,KAAS,SAAA,GAAYQ,MAAAA,CAAOT,KAAAA,KAAUS,MAAAA,CAAOT,KAAAA;AAC/D,EAAA;AACJ","file":"JKTGUQY4.cjs","sourcesContent":["type StoreValue = {\n type: 'value';\n value: any;\n};\ntype StoreFactory = {\n type: 'factory';\n value: () => any;\n};\ntype StoreAny = StoreValue | StoreFactory;\n\nexport class DependencyStore {\n private store: Record<string, StoreAny | undefined> = {};\n\n private throwIfRegistered(key: string) {\n if (this.store[key] != null) {\n throw new Error(`${key} is already registered`);\n }\n }\n\n private throwIfUnregistered(key: string) {\n if (this.store[key] == null) {\n throw new Error(`${key} is not registered`);\n }\n }\n\n /** Registers a value that will be resolved literally by resolve()\n * @throws if already registered\n */\n public register<T>(key: string, value: T extends Promise<any> ? never : T) {\n this.throwIfRegistered(key);\n this.store[key] = { type: 'value', value };\n }\n\n /** Registers a promise value that will be resolved literally by resolve()\n * @throws if already registered\n */\n public registerPromise(key: string, value: Promise<any>) {\n this.throwIfRegistered(key);\n this.store[key] = { type: 'value', value };\n }\n\n /** Registers a factory function that will be called by resolve()\n * @throws if already registered\n */\n public registerFactory(key: string, factory: () => any) {\n this.throwIfRegistered(key);\n this.store[key] = { type: 'factory', value: factory };\n }\n\n /** Unregisters a key\n * @throws if not registered\n */\n public unregister(key: string) {\n this.throwIfUnregistered(key);\n this.store[key] = undefined;\n }\n\n /**\n * Drops all registered values\n */\n public invalidate() {\n this.store = {};\n }\n\n /** Resolves a key to a value */\n public resolve(key: string) {\n this.throwIfUnregistered(key);\n const stored = this.store[key]!;\n return stored.type === 'factory' ? stored.value() : stored.value;\n }\n}\n"]}
|
|
@@ -111,18 +111,18 @@ var RegistrarBuilder = class {
|
|
|
111
111
|
}
|
|
112
112
|
return node;
|
|
113
113
|
}, "mergedNodePrehandler");
|
|
114
|
-
const mergedNodeHandler = /* @__PURE__ */ YJF4D23A_cjs.__name(async (node) => {
|
|
114
|
+
const mergedNodeHandler = /* @__PURE__ */ YJF4D23A_cjs.__name(async (node, ancestry) => {
|
|
115
115
|
for (const { nodeClass, identifier, fn } of this.classHandlers) {
|
|
116
116
|
if (node instanceof nodeClass) {
|
|
117
117
|
return {
|
|
118
118
|
key: identifier,
|
|
119
|
-
value: await fn(node)
|
|
119
|
+
value: await fn(node, ancestry)
|
|
120
120
|
};
|
|
121
121
|
}
|
|
122
122
|
}
|
|
123
123
|
return {
|
|
124
124
|
key: "default",
|
|
125
|
-
value: await this.defaultHandler(node)
|
|
125
|
+
value: await this.defaultHandler(node, ancestry)
|
|
126
126
|
};
|
|
127
127
|
}, "mergedNodeHandler");
|
|
128
128
|
return {
|
|
@@ -132,5 +132,5 @@ var RegistrarBuilder = class {
|
|
|
132
132
|
};
|
|
133
133
|
|
|
134
134
|
exports.RegistrarBuilder = RegistrarBuilder;
|
|
135
|
-
//# sourceMappingURL=
|
|
136
|
-
//# sourceMappingURL=
|
|
135
|
+
//# sourceMappingURL=LBRYOOPE.cjs.map
|
|
136
|
+
//# sourceMappingURL=LBRYOOPE.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/registrarBuilder.ts"],"names":["RegistrarBuilder","defaultHandler","node","Error","JSON","stringify","classHandlers","classAliases","addClassHandler","nodeClass","identifier","fn","find","fromNodeClass","i","handler","prototype","isPrototypeOf","splice","push","addClassAlias","getToNode","alias","addDefault","build","mergedNodePrehandler","toNode","mergedNodeHandler","__name","ancestry","key","value","traverseDependencies","dfs"],"mappings":"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","file":"LBRYOOPE.cjs","sourcesContent":["import type { DependencyNode } from '@layerzerolabs/dependency-graph';\nimport type { Registrar } from '@layerzerolabs/dfs';\nexport type { Registrar };\nimport { dfs } from '@layerzerolabs/dfs';\n\ntype NodeClass = new (...args: any[]) => DependencyNode;\ntype AbstractNodeClass = abstract new (...args: any[]) => DependencyNode;\n\n/**\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 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 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 /**\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 * 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 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 await dfs<_ReturnTypes>(node, mergedNodeHandler, mergedNodePrehandler)(),\n };\n }\n}\n"]}
|
|
@@ -109,18 +109,18 @@ var RegistrarBuilder = class {
|
|
|
109
109
|
}
|
|
110
110
|
return node;
|
|
111
111
|
}, "mergedNodePrehandler");
|
|
112
|
-
const mergedNodeHandler = /* @__PURE__ */ __name(async (node) => {
|
|
112
|
+
const mergedNodeHandler = /* @__PURE__ */ __name(async (node, ancestry) => {
|
|
113
113
|
for (const { nodeClass, identifier, fn } of this.classHandlers) {
|
|
114
114
|
if (node instanceof nodeClass) {
|
|
115
115
|
return {
|
|
116
116
|
key: identifier,
|
|
117
|
-
value: await fn(node)
|
|
117
|
+
value: await fn(node, ancestry)
|
|
118
118
|
};
|
|
119
119
|
}
|
|
120
120
|
}
|
|
121
121
|
return {
|
|
122
122
|
key: "default",
|
|
123
|
-
value: await this.defaultHandler(node)
|
|
123
|
+
value: await this.defaultHandler(node, ancestry)
|
|
124
124
|
};
|
|
125
125
|
}, "mergedNodeHandler");
|
|
126
126
|
return {
|
|
@@ -130,5 +130,5 @@ var RegistrarBuilder = class {
|
|
|
130
130
|
};
|
|
131
131
|
|
|
132
132
|
export { RegistrarBuilder };
|
|
133
|
-
//# sourceMappingURL=
|
|
134
|
-
//# sourceMappingURL=
|
|
133
|
+
//# sourceMappingURL=RFHQF55L.js.map
|
|
134
|
+
//# sourceMappingURL=RFHQF55L.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/registrarBuilder.ts"],"names":["RegistrarBuilder","defaultHandler","node","Error","JSON","stringify","classHandlers","classAliases","addClassHandler","nodeClass","identifier","fn","find","fromNodeClass","i","handler","prototype","isPrototypeOf","splice","push","addClassAlias","getToNode","alias","addDefault","build","mergedNodePrehandler","toNode","mergedNodeHandler","ancestry","key","value","traverseDependencies","dfs"],"mappings":";;;AAoBO,IAAMA,mBAAN,MAAMA;EAjBb;;;AAkBcC,EAAAA,cAAAA;EACV,WAAA,GAAc;AACV,IAAA,IAAA,CAAKA,cAAAA,GAAiB,OAAOC,IAAAA,KAAAA;AACzB,MAAA,MAAM,IAAIC,KAAAA,CACN,CAAA,0EAAA,EAA6EC,KAAKC,SAAAA,CAAUH,IAAAA,CAAAA,CAAAA,CAAO,CAAA;AAE3G,IAAA,CAAA;AACJ,EAAA;AAEUI,EAAAA,aAAAA,GAIJ,EAAA;AAEIC,EAAAA,YAAAA,GAGJ,EAAA;;;;;;;EAQCC,eAAAA,CAILC,SAAAA,EAAuBC,YAAwBC,EAAAA,EAAc;AAC3D,IAAA,IAAI,IAAA,CAAKJ,aAAaK,IAAAA,CAAK,CAAC,EAAEC,aAAAA,EAAa,KAAOA,aAAAA,KAAkBJ,SAAAA,CAAAA,EAAY;AAC5E,MAAA,MAAM,IAAIN,MACN,CAAA,8FAAA,CAAgG,CAAA;AAExG,IAAA;AAEA,IAAA,IAAIW,CAAAA,GAAI,CAAA;AACR,IAAA,KAAA,MAAWC,OAAAA,IAAW,KAAKT,aAAAA,EAAe;AAEtC,MAAA,IAAIS,OAAAA,CAAQN,cAAcA,SAAAA,EAAW;AACjC,QAAA,IAAA,CAAKH,aAAAA,CAAcQ,CAAAA,CAAAA,GAAK;AACpBL,UAAAA,SAAAA;AACAC,UAAAA,UAAAA;AACAC,UAAAA;AACJ,SAAA;AAEA,QAAA,OAAO,IAAA;AAKX,MAAA;AAIA,MAAA,IAAII,QAAQN,SAAAA,CAAUO,SAAAA,CAAUC,aAAAA,CAAcR,SAAAA,CAAUO,SAAS,CAAA,EAAG;AAChE,QAAA,IAAA,CAAKV,aAAAA,CAAcY,MAAAA,CAAOJ,CAAAA,EAAG,CAAA,EAAG;AAC5BL,UAAAA,SAAAA;AACAC,UAAAA,UAAAA;AACAC,UAAAA;SACJ,CAAA;AAEA,QAAA,OAAO,IAAA;AAKX,MAAA;AACAG,MAAAA,CAAAA,EAAAA;AACJ,IAAA;AAEA,IAAA,IAAA,CAAKR,cAAca,IAAAA,CAAK;AACpBV,MAAAA,SAAAA;AACAC,MAAAA,UAAAA;AACAC,MAAAA;KACJ,CAAA;AAEA,IAAA,OAAO,IAAA;AAKX,EAAA;;;;;;;;;;;;;;AAeOS,EAAAA,aAAAA,CACHP,eACAQ,SAAAA,EACF;AACE,IAAA,IAAI,IAAA,CAAKf,cAAcM,IAAAA,CAAK,CAAC,EAAEH,SAAAA,EAAS,KAAOA,SAAAA,KAAcI,aAAAA,CAAAA,EAAgB;AACzE,MAAA,MAAM,IAAIV,MAAM,CAAA,6DAAA,CAA+D,CAAA;AACnF,IAAA;AAEA,IAAA,IAAIW,CAAAA,GAAI,CAAA;AACR,IAAA,KAAA,MAAWQ,KAAAA,IAAS,KAAKf,YAAAA,EAAc;AAEnC,MAAA,IAAIe,KAAAA,CAAMT,kBAAkBA,aAAAA,EAAe;AACvC,QAAA,IAAA,CAAKN,YAAAA,CAAaO,CAAAA,CAAAA,GAAK;AACnBD,UAAAA,aAAAA;AACAQ,UAAAA;AACJ,SAAA;AAEA,QAAA,OAAO,IAAA;AACX,MAAA;AAIA,MAAA,IAAIC,MAAMT,aAAAA,CAAcG,SAAAA,CAAUC,aAAAA,CAAcJ,aAAAA,CAAcG,SAAS,CAAA,EAAG;AACtE,QAAA,IAAA,CAAKT,YAAAA,CAAaW,MAAAA,CAAOJ,CAAAA,EAAG,CAAA,EAAG;AAC3BD,UAAAA,aAAAA;AACAQ,UAAAA;SACJ,CAAA;AAEA,QAAA,OAAO,IAAA;AACX,MAAA;AACAP,MAAAA,CAAAA,EAAAA;AACJ,IAAA;AAEA,IAAA,IAAA,CAAKP,aAAaY,IAAAA,CAAK;AACnBN,MAAAA,aAAAA;AACAQ,MAAAA;KACJ,CAAA;AAEA,IAAA,OAAO,IAAA;AACX,EAAA;;;;;;AAOOE,EAAAA,UAAAA,CAAWZ,EAAAA,EAA+D;AAC7E,IAAA,IAAA,CAAKV,cAAAA,GAAiBU,EAAAA;AACtB,IAAA,OAAO,IAAA;AACX,EAAA;EAEOa,KAAAA,GAAiC;AACpC,IAAA,MAAMC,oBAAAA,2BAAwBvB,IAAAA,KAAAA;AAC1B,MAAA,KAAA,MAAW,EAAEW,aAAAA,EAAeQ,SAAAA,EAAWK,MAAAA,EAAM,IAAM,KAAKnB,YAAAA,EAAc;AAClE,QAAA,IAAIL,gBAAgBW,aAAAA,EAAe;AAC/B,UAAA,OAAOa,OAAOxB,IAAAA,CAAAA;AAClB,QAAA;AACJ,MAAA;AACA,MAAA,OAAOA,IAAAA;IACX,CAAA,EAP6B,sBAAA,CAAA;AAS7B,IAAA,MAAMyB,iBAAAA,mBAAoB,MAAA,CAAA,OAAOzB,IAAAA,EAAsB0B,QAAAA,KAAAA;AACnD,MAAA,KAAA,MAAW,EAAEnB,SAAAA,EAAWC,UAAAA,EAAYC,EAAAA,EAAE,IAAM,KAAKL,aAAAA,EAAe;AAC5D,QAAA,IAAIJ,gBAAgBO,SAAAA,EAAW;AAC3B,UAAA,OAAO;YACHoB,GAAAA,EAAKnB,UAAAA;YACLoB,KAAAA,EAAO,MAAMnB,EAAAA,CAAGT,IAAAA,EAAM0B,QAAAA;AAC1B,WAAA;AACJ,QAAA;AACJ,MAAA;AAEA,MAAA,OAAO;QACHC,GAAAA,EAAK,SAAA;AACLC,QAAAA,KAAAA,EAAO,MAAM,IAAA,CAAK7B,cAAAA,CAAeC,IAAAA,EAAM0B,QAAAA;AAC3C,OAAA;IACJ,CAAA,EAd0B,mBAAA,CAAA;AAe1B,IAAA,OAAO;MACHG,oBAAAA,kBAAsB,MAAA,CAAA,OAAO7B,SACzB,MAAM8B,GAAAA,CAAkB9B,MAAMyB,iBAAAA,EAAmBF,oBAAAA,GAAAA,EAD/B,sBAAA;AAE1B,KAAA;AACJ,EAAA;AACJ","file":"RFHQF55L.js","sourcesContent":["import type { DependencyNode } from '@layerzerolabs/dependency-graph';\nimport type { Registrar } from '@layerzerolabs/dfs';\nexport type { Registrar };\nimport { dfs } from '@layerzerolabs/dfs';\n\ntype NodeClass = new (...args: any[]) => DependencyNode;\ntype AbstractNodeClass = abstract new (...args: any[]) => DependencyNode;\n\n/**\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 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 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 /**\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 * 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 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 await dfs<_ReturnTypes>(node, mergedNodeHandler, mergedNodePrehandler)(),\n };\n }\n}\n"]}
|
package/dist/index.cjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
var
|
|
3
|
+
var JKTGUQY4_cjs = require('./JKTGUQY4.cjs');
|
|
4
|
+
var LBRYOOPE_cjs = require('./LBRYOOPE.cjs');
|
|
5
5
|
var Y5HYTYQJ_cjs = require('./Y5HYTYQJ.cjs');
|
|
6
6
|
var MOTHALOU_cjs = require('./MOTHALOU.cjs');
|
|
7
7
|
require('./YJF4D23A.cjs');
|
|
@@ -10,11 +10,11 @@ require('./YJF4D23A.cjs');
|
|
|
10
10
|
|
|
11
11
|
Object.defineProperty(exports, "DependencyStore", {
|
|
12
12
|
enumerable: true,
|
|
13
|
-
get: function () { return
|
|
13
|
+
get: function () { return JKTGUQY4_cjs.DependencyStore; }
|
|
14
14
|
});
|
|
15
15
|
Object.defineProperty(exports, "RegistrarBuilder", {
|
|
16
16
|
enumerable: true,
|
|
17
|
-
get: function () { return
|
|
17
|
+
get: function () { return LBRYOOPE_cjs.RegistrarBuilder; }
|
|
18
18
|
});
|
|
19
19
|
Object.defineProperty(exports, "extractSchemaFromFactory", {
|
|
20
20
|
enumerable: true,
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export { DependencyStore } from './
|
|
2
|
-
export { RegistrarBuilder } from './
|
|
1
|
+
export { DependencyStore } from './JJBD65HU.js';
|
|
2
|
+
export { RegistrarBuilder } from './RFHQF55L.js';
|
|
3
3
|
export { extractSchemaFromFactory } from './T6VE3ZX4.js';
|
|
4
4
|
export { FactoryDefinition, ObjectDefinition, serializeDimensions } from './YDEUCMM5.js';
|
|
5
5
|
import './VUOMXK5T.js';
|
package/dist/lzyringe.cjs
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var JKTGUQY4_cjs = require('./JKTGUQY4.cjs');
|
|
4
4
|
require('./YJF4D23A.cjs');
|
|
5
5
|
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
Object.defineProperty(exports, "DependencyStore", {
|
|
9
9
|
enumerable: true,
|
|
10
|
-
get: function () { return
|
|
10
|
+
get: function () { return JKTGUQY4_cjs.DependencyStore; }
|
|
11
11
|
});
|
|
12
12
|
//# sourceMappingURL=lzyringe.cjs.map
|
|
13
13
|
//# sourceMappingURL=lzyringe.cjs.map
|
package/dist/lzyringe.d.ts
CHANGED
|
@@ -5,7 +5,11 @@ export declare class DependencyStore {
|
|
|
5
5
|
/** Registers a value that will be resolved literally by resolve()
|
|
6
6
|
* @throws if already registered
|
|
7
7
|
*/
|
|
8
|
-
register(key: string, value: any): void;
|
|
8
|
+
register<T>(key: string, value: T extends Promise<any> ? never : T): void;
|
|
9
|
+
/** Registers a promise value that will be resolved literally by resolve()
|
|
10
|
+
* @throws if already registered
|
|
11
|
+
*/
|
|
12
|
+
registerPromise(key: string, value: Promise<any>): void;
|
|
9
13
|
/** Registers a factory function that will be called by resolve()
|
|
10
14
|
* @throws if already registered
|
|
11
15
|
*/
|
package/dist/lzyringe.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lzyringe.d.ts","sourceRoot":"","sources":["../src/lzyringe.ts"],"names":[],"mappings":"AAUA,qBAAa,eAAe;IACxB,OAAO,CAAC,KAAK,CAA4C;IAEzD,OAAO,CAAC,iBAAiB;IAMzB,OAAO,CAAC,mBAAmB;IAM3B;;OAEG;IACI,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG;
|
|
1
|
+
{"version":3,"file":"lzyringe.d.ts","sourceRoot":"","sources":["../src/lzyringe.ts"],"names":[],"mappings":"AAUA,qBAAa,eAAe;IACxB,OAAO,CAAC,KAAK,CAA4C;IAEzD,OAAO,CAAC,iBAAiB;IAMzB,OAAO,CAAC,mBAAmB;IAM3B;;OAEG;IACI,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,SAAS,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC;IAKzE;;OAEG;IACI,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC;IAKvD;;OAEG;IACI,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG;IAKtD;;OAEG;IACI,UAAU,CAAC,GAAG,EAAE,MAAM;IAK7B;;OAEG;IACI,UAAU;IAIjB,gCAAgC;IACzB,OAAO,CAAC,GAAG,EAAE,MAAM;CAK7B"}
|
package/dist/lzyringe.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var LBRYOOPE_cjs = require('./LBRYOOPE.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 LBRYOOPE_cjs.RegistrarBuilder; }
|
|
11
11
|
});
|
|
12
12
|
//# sourceMappingURL=registrarBuilder.cjs.map
|
|
13
13
|
//# sourceMappingURL=registrarBuilder.cjs.map
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import type { DependencyNode } from '@layerzerolabs/dependency-graph';
|
|
2
2
|
import type { Registrar } from '@layerzerolabs/dfs';
|
|
3
3
|
export type { Registrar };
|
|
4
|
-
type NodeClass = new (...args: any[]) => DependencyNode
|
|
5
|
-
type AbstractNodeClass = abstract new (...args: any[]) => DependencyNode
|
|
4
|
+
type NodeClass = new (...args: any[]) => DependencyNode;
|
|
5
|
+
type AbstractNodeClass = abstract new (...args: any[]) => DependencyNode;
|
|
6
6
|
/**
|
|
7
7
|
* A builder class for a {@link Registrar}.
|
|
8
8
|
* Builds a registrar that switches on node class--i.e., enables defining
|
|
@@ -16,16 +16,16 @@ type AbstractNodeClass = abstract new (...args: any[]) => DependencyNode<any, an
|
|
|
16
16
|
* given that the handlers return the resolved nodes.
|
|
17
17
|
*/
|
|
18
18
|
export declare class RegistrarBuilder<_ReturnTypes> {
|
|
19
|
-
protected defaultHandler: (node: DependencyNode
|
|
19
|
+
protected defaultHandler: (node: DependencyNode, ancestry: DependencyNode[]) => Promise<any>;
|
|
20
20
|
constructor();
|
|
21
21
|
protected classHandlers: {
|
|
22
22
|
nodeClass: AbstractNodeClass;
|
|
23
23
|
identifier: string;
|
|
24
|
-
fn: (node: DependencyNode
|
|
24
|
+
fn: (node: DependencyNode, ancestry: DependencyNode[]) => Promise<any>;
|
|
25
25
|
}[];
|
|
26
26
|
protected classAliases: {
|
|
27
27
|
fromNodeClass: AbstractNodeClass;
|
|
28
|
-
getToNode: (from: DependencyNode
|
|
28
|
+
getToNode: (from: DependencyNode) => DependencyNode;
|
|
29
29
|
}[];
|
|
30
30
|
/**
|
|
31
31
|
* Add a function fn to be called on all nodes of class
|
|
@@ -33,7 +33,7 @@ export declare class RegistrarBuilder<_ReturnTypes> {
|
|
|
33
33
|
* @param identifier
|
|
34
34
|
* @param fn
|
|
35
35
|
*/
|
|
36
|
-
addClassHandler<Identifier extends string, _NodeClass extends NodeClass, Function extends (node: InstanceType<_NodeClass
|
|
36
|
+
addClassHandler<Identifier extends string, _NodeClass extends NodeClass, Function extends (node: InstanceType<_NodeClass>, ancestry: DependencyNode[]) => any>(nodeClass: _NodeClass, identifier: Identifier, fn: Function): RegistrarBuilder<_ReturnTypes & { [K in Identifier]: {
|
|
37
37
|
[nodeName: string]: Awaited<ReturnType<Function>>;
|
|
38
38
|
}; }>;
|
|
39
39
|
/**
|
|
@@ -49,13 +49,13 @@ export declare class RegistrarBuilder<_ReturnTypes> {
|
|
|
49
49
|
* @param fromNodeClass alias instances of this class
|
|
50
50
|
* @param getToNode method that returns the *to* part of the alias
|
|
51
51
|
*/
|
|
52
|
-
addClassAlias<FromNodeClass extends AbstractNodeClass>(fromNodeClass: FromNodeClass, getToNode: (fromNodeInstance: InstanceType<FromNodeClass>) => DependencyNode
|
|
52
|
+
addClassAlias<FromNodeClass extends AbstractNodeClass>(fromNodeClass: FromNodeClass, getToNode: (fromNodeInstance: InstanceType<FromNodeClass>) => DependencyNode): this;
|
|
53
53
|
/**
|
|
54
54
|
* Add a default function fn to be used on nodes whose types do not have handlers.
|
|
55
55
|
* If this is not set, the default behaviour will be to throw
|
|
56
56
|
* @param fn
|
|
57
57
|
*/
|
|
58
|
-
addDefault(fn: (node: DependencyNode
|
|
58
|
+
addDefault(fn: (node: DependencyNode, ancestry: DependencyNode[]) => any): this;
|
|
59
59
|
build(): Registrar<_ReturnTypes>;
|
|
60
60
|
}
|
|
61
61
|
//# sourceMappingURL=registrarBuilder.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registrarBuilder.d.ts","sourceRoot":"","sources":["../src/registrarBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpD,YAAY,EAAE,SAAS,EAAE,CAAC;AAG1B,KAAK,SAAS,GAAG,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,cAAc,CAAC
|
|
1
|
+
{"version":3,"file":"registrarBuilder.d.ts","sourceRoot":"","sources":["../src/registrarBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpD,YAAY,EAAE,SAAS,EAAE,CAAC;AAG1B,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;;;;;;;;;;;GAWG;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;;IAS7F,SAAS,CAAC,aAAa,EAAE;QACrB,SAAS,EAAE,iBAAiB,CAAC;QAC7B,UAAU,EAAE,MAAM,CAAC;QACnB,EAAE,EAAE,CAAC,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,cAAc,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;KAC1E,EAAE,CAAM;IAET,SAAS,CAAC,YAAY,EAAE;QACpB,aAAa,EAAE,iBAAiB,CAAC;QACjC,SAAS,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,cAAc,CAAC;KACvD,EAAE,CAAM;IAET;;;;;OAKG;IACI,eAAe,CAClB,UAAU,SAAS,MAAM,EACzB,UAAU,SAAS,SAAS,EAC5B,QAAQ,SAAS,CAAC,IAAI,EAAE,YAAY,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,cAAc,EAAE,KAAK,GAAG,EACtF,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,EAAE,EAAE,QAAQ,sCAmBxC,CAAC;;;IAoCtB;;;;;;;;;;;;OAYG;IACI,aAAa,CAAC,aAAa,SAAS,iBAAiB,EACxD,aAAa,EAAE,aAAa,EAC5B,SAAS,EAAE,CAAC,gBAAgB,EAAE,YAAY,CAAC,aAAa,CAAC,KAAK,cAAc;IAuChF;;;;OAIG;IACI,UAAU,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,cAAc,EAAE,KAAK,GAAG;IAKxE,KAAK,IAAI,SAAS,CAAC,YAAY,CAAC;CA8B1C"}
|
package/dist/registrarBuilder.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@layerzerolabs/base-definitions",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.20",
|
|
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.23.8",
|
|
18
|
-
"@layerzerolabs/
|
|
19
|
-
"@layerzerolabs/
|
|
20
|
-
"@layerzerolabs/dependency-graph": "0.0.
|
|
18
|
+
"@layerzerolabs/dfs": "0.0.20",
|
|
19
|
+
"@layerzerolabs/common-utils": "0.0.20",
|
|
20
|
+
"@layerzerolabs/dependency-graph": "0.0.20"
|
|
21
21
|
},
|
|
22
22
|
"devDependencies": {
|
|
23
23
|
"tsup": "^8.4.0",
|
|
24
24
|
"vitest": "^3.2.3",
|
|
25
|
-
"@layerzerolabs/tsup-configuration": "0.0.
|
|
26
|
-
"@layerzerolabs/typescript-configuration": "0.0.
|
|
27
|
-
"@layerzerolabs/typescript-utils": "0.0.
|
|
25
|
+
"@layerzerolabs/tsup-configuration": "0.0.20",
|
|
26
|
+
"@layerzerolabs/typescript-configuration": "0.0.20",
|
|
27
|
+
"@layerzerolabs/typescript-utils": "0.0.20"
|
|
28
28
|
},
|
|
29
29
|
"publishConfig": {
|
|
30
30
|
"access": "restricted",
|
package/src/lzyringe.ts
CHANGED
|
@@ -26,7 +26,15 @@ export class DependencyStore {
|
|
|
26
26
|
/** Registers a value that will be resolved literally by resolve()
|
|
27
27
|
* @throws if already registered
|
|
28
28
|
*/
|
|
29
|
-
public register(key: string, value: any) {
|
|
29
|
+
public register<T>(key: string, value: T extends Promise<any> ? never : T) {
|
|
30
|
+
this.throwIfRegistered(key);
|
|
31
|
+
this.store[key] = { type: 'value', value };
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/** Registers a promise value that will be resolved literally by resolve()
|
|
35
|
+
* @throws if already registered
|
|
36
|
+
*/
|
|
37
|
+
public registerPromise(key: string, value: Promise<any>) {
|
|
30
38
|
this.throwIfRegistered(key);
|
|
31
39
|
this.store[key] = { type: 'value', value };
|
|
32
40
|
}
|
package/src/registrarBuilder.ts
CHANGED
|
@@ -3,8 +3,8 @@ import type { Registrar } from '@layerzerolabs/dfs';
|
|
|
3
3
|
export type { Registrar };
|
|
4
4
|
import { dfs } from '@layerzerolabs/dfs';
|
|
5
5
|
|
|
6
|
-
type NodeClass = new (...args: any[]) => DependencyNode
|
|
7
|
-
type AbstractNodeClass = abstract new (...args: any[]) => DependencyNode
|
|
6
|
+
type NodeClass = new (...args: any[]) => DependencyNode;
|
|
7
|
+
type AbstractNodeClass = abstract new (...args: any[]) => DependencyNode;
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
10
|
* A builder class for a {@link Registrar}.
|
|
@@ -19,9 +19,9 @@ type AbstractNodeClass = abstract new (...args: any[]) => DependencyNode<any, an
|
|
|
19
19
|
* given that the handlers return the resolved nodes.
|
|
20
20
|
*/
|
|
21
21
|
export class RegistrarBuilder<_ReturnTypes> {
|
|
22
|
-
protected defaultHandler: (node: DependencyNode
|
|
22
|
+
protected defaultHandler: (node: DependencyNode, ancestry: DependencyNode[]) => Promise<any>;
|
|
23
23
|
constructor() {
|
|
24
|
-
this.defaultHandler = async (node: DependencyNode
|
|
24
|
+
this.defaultHandler = async (node: DependencyNode) => {
|
|
25
25
|
throw new Error(
|
|
26
26
|
`This registrar does not provide a handler for the dependency type used by ${JSON.stringify(node)}`,
|
|
27
27
|
);
|
|
@@ -31,12 +31,12 @@ export class RegistrarBuilder<_ReturnTypes> {
|
|
|
31
31
|
protected classHandlers: {
|
|
32
32
|
nodeClass: AbstractNodeClass;
|
|
33
33
|
identifier: string;
|
|
34
|
-
fn: (node: DependencyNode
|
|
34
|
+
fn: (node: DependencyNode, ancestry: DependencyNode[]) => Promise<any>;
|
|
35
35
|
}[] = [];
|
|
36
36
|
|
|
37
37
|
protected classAliases: {
|
|
38
38
|
fromNodeClass: AbstractNodeClass;
|
|
39
|
-
getToNode: (from: DependencyNode
|
|
39
|
+
getToNode: (from: DependencyNode) => DependencyNode;
|
|
40
40
|
}[] = [];
|
|
41
41
|
|
|
42
42
|
/**
|
|
@@ -48,7 +48,7 @@ export class RegistrarBuilder<_ReturnTypes> {
|
|
|
48
48
|
public addClassHandler<
|
|
49
49
|
Identifier extends string,
|
|
50
50
|
_NodeClass extends NodeClass,
|
|
51
|
-
Function extends (node: InstanceType<_NodeClass
|
|
51
|
+
Function extends (node: InstanceType<_NodeClass>, ancestry: DependencyNode[]) => any,
|
|
52
52
|
>(nodeClass: _NodeClass, identifier: Identifier, fn: Function) {
|
|
53
53
|
if (this.classAliases.find(({ fromNodeClass }) => fromNodeClass === nodeClass)) {
|
|
54
54
|
throw new Error(
|
|
@@ -63,7 +63,7 @@ export class RegistrarBuilder<_ReturnTypes> {
|
|
|
63
63
|
this.classHandlers[i] = {
|
|
64
64
|
nodeClass,
|
|
65
65
|
identifier,
|
|
66
|
-
fn: fn as unknown as (node: DependencyNode
|
|
66
|
+
fn: fn as unknown as (node: DependencyNode) => Promise<any>,
|
|
67
67
|
};
|
|
68
68
|
|
|
69
69
|
return this as RegistrarBuilder<
|
|
@@ -79,7 +79,7 @@ export class RegistrarBuilder<_ReturnTypes> {
|
|
|
79
79
|
this.classHandlers.splice(i, 0, {
|
|
80
80
|
nodeClass,
|
|
81
81
|
identifier,
|
|
82
|
-
fn: fn as unknown as (node: DependencyNode
|
|
82
|
+
fn: fn as unknown as (node: DependencyNode) => Promise<any>,
|
|
83
83
|
});
|
|
84
84
|
|
|
85
85
|
return this as RegistrarBuilder<
|
|
@@ -94,7 +94,7 @@ export class RegistrarBuilder<_ReturnTypes> {
|
|
|
94
94
|
this.classHandlers.push({
|
|
95
95
|
nodeClass,
|
|
96
96
|
identifier,
|
|
97
|
-
fn: fn as unknown as (node: DependencyNode
|
|
97
|
+
fn: fn as unknown as (node: DependencyNode) => Promise<any>,
|
|
98
98
|
});
|
|
99
99
|
|
|
100
100
|
return this as RegistrarBuilder<
|
|
@@ -119,7 +119,7 @@ export class RegistrarBuilder<_ReturnTypes> {
|
|
|
119
119
|
*/
|
|
120
120
|
public addClassAlias<FromNodeClass extends AbstractNodeClass>(
|
|
121
121
|
fromNodeClass: FromNodeClass,
|
|
122
|
-
getToNode: (fromNodeInstance: InstanceType<FromNodeClass>) => DependencyNode
|
|
122
|
+
getToNode: (fromNodeInstance: InstanceType<FromNodeClass>) => DependencyNode,
|
|
123
123
|
) {
|
|
124
124
|
if (this.classHandlers.find(({ nodeClass }) => nodeClass === fromNodeClass)) {
|
|
125
125
|
throw new Error(`Cannot define an alias for a class that already has a handler`);
|
|
@@ -131,9 +131,7 @@ export class RegistrarBuilder<_ReturnTypes> {
|
|
|
131
131
|
if (alias.fromNodeClass === fromNodeClass) {
|
|
132
132
|
this.classAliases[i] = {
|
|
133
133
|
fromNodeClass,
|
|
134
|
-
getToNode: getToNode as unknown as (
|
|
135
|
-
from: DependencyNode<any, any>,
|
|
136
|
-
) => DependencyNode<any, any>,
|
|
134
|
+
getToNode: getToNode as unknown as (from: DependencyNode) => DependencyNode,
|
|
137
135
|
};
|
|
138
136
|
|
|
139
137
|
return this;
|
|
@@ -144,9 +142,7 @@ export class RegistrarBuilder<_ReturnTypes> {
|
|
|
144
142
|
if (alias.fromNodeClass.prototype.isPrototypeOf(fromNodeClass.prototype)) {
|
|
145
143
|
this.classAliases.splice(i, 0, {
|
|
146
144
|
fromNodeClass,
|
|
147
|
-
getToNode: getToNode as unknown as (
|
|
148
|
-
from: DependencyNode<any, any>,
|
|
149
|
-
) => DependencyNode<any, any>,
|
|
145
|
+
getToNode: getToNode as unknown as (from: DependencyNode) => DependencyNode,
|
|
150
146
|
});
|
|
151
147
|
|
|
152
148
|
return this;
|
|
@@ -156,9 +152,7 @@ export class RegistrarBuilder<_ReturnTypes> {
|
|
|
156
152
|
|
|
157
153
|
this.classAliases.push({
|
|
158
154
|
fromNodeClass,
|
|
159
|
-
getToNode: getToNode as unknown as (
|
|
160
|
-
from: DependencyNode<any, any>,
|
|
161
|
-
) => DependencyNode<any, any>,
|
|
155
|
+
getToNode: getToNode as unknown as (from: DependencyNode) => DependencyNode,
|
|
162
156
|
});
|
|
163
157
|
|
|
164
158
|
return this;
|
|
@@ -169,13 +163,13 @@ export class RegistrarBuilder<_ReturnTypes> {
|
|
|
169
163
|
* If this is not set, the default behaviour will be to throw
|
|
170
164
|
* @param fn
|
|
171
165
|
*/
|
|
172
|
-
public addDefault(fn: (node: DependencyNode
|
|
166
|
+
public addDefault(fn: (node: DependencyNode, ancestry: DependencyNode[]) => any) {
|
|
173
167
|
this.defaultHandler = fn;
|
|
174
168
|
return this;
|
|
175
169
|
}
|
|
176
170
|
|
|
177
171
|
public build(): Registrar<_ReturnTypes> {
|
|
178
|
-
const mergedNodePrehandler = (node: DependencyNode
|
|
172
|
+
const mergedNodePrehandler = (node: DependencyNode) => {
|
|
179
173
|
for (const { fromNodeClass, getToNode: toNode } of this.classAliases) {
|
|
180
174
|
if (node instanceof fromNodeClass) {
|
|
181
175
|
return toNode(node);
|
|
@@ -184,24 +178,24 @@ export class RegistrarBuilder<_ReturnTypes> {
|
|
|
184
178
|
return node;
|
|
185
179
|
};
|
|
186
180
|
|
|
187
|
-
const mergedNodeHandler = async (node: DependencyNode
|
|
181
|
+
const mergedNodeHandler = async (node: DependencyNode, ancestry: DependencyNode[]) => {
|
|
188
182
|
for (const { nodeClass, identifier, fn } of this.classHandlers) {
|
|
189
183
|
if (node instanceof nodeClass) {
|
|
190
184
|
return {
|
|
191
185
|
key: identifier,
|
|
192
|
-
value: await fn(node),
|
|
186
|
+
value: await fn(node, ancestry),
|
|
193
187
|
};
|
|
194
188
|
}
|
|
195
189
|
}
|
|
196
190
|
|
|
197
191
|
return {
|
|
198
192
|
key: 'default',
|
|
199
|
-
value: await this.defaultHandler(node),
|
|
193
|
+
value: await this.defaultHandler(node, ancestry),
|
|
200
194
|
};
|
|
201
195
|
};
|
|
202
196
|
return {
|
|
203
|
-
traverseDependencies: async (node: DependencyNode
|
|
204
|
-
await dfs<
|
|
197
|
+
traverseDependencies: async (node: DependencyNode) =>
|
|
198
|
+
await dfs<_ReturnTypes>(node, mergedNodeHandler, mergedNodePrehandler)(),
|
|
205
199
|
};
|
|
206
200
|
}
|
|
207
201
|
}
|
package/dist/67HCA6YT.cjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/lzyringe.ts"],"names":["DependencyStore","store","throwIfRegistered","key","Error","throwIfUnregistered","register","value","type","registerFactory","factory","unregister","undefined","invalidate","resolve","stored"],"mappings":";;;;;AAUO,IAAMA,kBAAN,MAAMA;EAAb;;;AACYC,EAAAA,KAAAA,GAA8C,EAAC;AAE/CC,EAAAA,iBAAAA,CAAkBC,GAAAA,EAAa;AACnC,IAAA,IAAI,IAAA,CAAKF,KAAAA,CAAME,GAAAA,CAAAA,IAAQ,IAAA,EAAM;AACzB,MAAA,MAAM,IAAIC,KAAAA,CAAM,CAAA,EAAGD,GAAAA,CAAAA,sBAAAA,CAA2B,CAAA;AAClD,IAAA;AACJ,EAAA;AAEQE,EAAAA,mBAAAA,CAAoBF,GAAAA,EAAa;AACrC,IAAA,IAAI,IAAA,CAAKF,KAAAA,CAAME,GAAAA,CAAAA,IAAQ,IAAA,EAAM;AACzB,MAAA,MAAM,IAAIC,KAAAA,CAAM,CAAA,EAAGD,GAAAA,CAAAA,kBAAAA,CAAuB,CAAA;AAC9C,IAAA;AACJ,EAAA;;;;AAKOG,EAAAA,QAAAA,CAASH,KAAaI,KAAAA,EAAY;AACrC,IAAA,IAAA,CAAKL,kBAAkBC,GAAAA,CAAAA;AACvB,IAAA,IAAA,CAAKF,KAAAA,CAAME,GAAAA,CAAAA,GAAO;MAAEK,IAAAA,EAAM,OAAA;AAASD,MAAAA;AAAM,KAAA;AAC7C,EAAA;;;;AAKOE,EAAAA,eAAAA,CAAgBN,KAAaO,OAAAA,EAAoB;AACpD,IAAA,IAAA,CAAKR,kBAAkBC,GAAAA,CAAAA;AACvB,IAAA,IAAA,CAAKF,KAAAA,CAAME,GAAAA,CAAAA,GAAO;MAAEK,IAAAA,EAAM,SAAA;MAAWD,KAAAA,EAAOG;AAAQ,KAAA;AACxD,EAAA;;;;AAKOC,EAAAA,UAAAA,CAAWR,GAAAA,EAAa;AAC3B,IAAA,IAAA,CAAKE,oBAAoBF,GAAAA,CAAAA;AACzB,IAAA,IAAA,CAAKF,KAAAA,CAAME,GAAAA,CAAAA,GAAOS,MAAAA;AACtB,EAAA;;;;EAKOC,UAAAA,GAAa;AAChB,IAAA,IAAA,CAAKZ,QAAQ,EAAC;AAClB,EAAA;;AAGOa,EAAAA,OAAAA,CAAQX,GAAAA,EAAa;AACxB,IAAA,IAAA,CAAKE,oBAAoBF,GAAAA,CAAAA;AACzB,IAAA,MAAMY,MAAAA,GAAS,IAAA,CAAKd,KAAAA,CAAME,GAAAA,CAAAA;AAC1B,IAAA,OAAOY,OAAOP,IAAAA,KAAS,SAAA,GAAYO,MAAAA,CAAOR,KAAAA,KAAUQ,MAAAA,CAAOR,KAAAA;AAC/D,EAAA;AACJ","file":"67HCA6YT.cjs","sourcesContent":["type StoreValue = {\n type: 'value';\n value: any;\n};\ntype StoreFactory = {\n type: 'factory';\n value: () => any;\n};\ntype StoreAny = StoreValue | StoreFactory;\n\nexport class DependencyStore {\n private store: Record<string, StoreAny | undefined> = {};\n\n private throwIfRegistered(key: string) {\n if (this.store[key] != null) {\n throw new Error(`${key} is already registered`);\n }\n }\n\n private throwIfUnregistered(key: string) {\n if (this.store[key] == null) {\n throw new Error(`${key} is not registered`);\n }\n }\n\n /** Registers a value that will be resolved literally by resolve()\n * @throws if already registered\n */\n public register(key: string, value: any) {\n this.throwIfRegistered(key);\n this.store[key] = { type: 'value', value };\n }\n\n /** Registers a factory function that will be called by resolve()\n * @throws if already registered\n */\n public registerFactory(key: string, factory: () => any) {\n this.throwIfRegistered(key);\n this.store[key] = { type: 'factory', value: factory };\n }\n\n /** Unregisters a key\n * @throws if not registered\n */\n public unregister(key: string) {\n this.throwIfUnregistered(key);\n this.store[key] = undefined;\n }\n\n /**\n * Drops all registered values\n */\n public invalidate() {\n this.store = {};\n }\n\n /** Resolves a key to a value */\n public resolve(key: string) {\n this.throwIfUnregistered(key);\n const stored = this.store[key]!;\n return stored.type === 'factory' ? stored.value() : stored.value;\n }\n}\n"]}
|
package/dist/O4SGLGEI.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/lzyringe.ts"],"names":["DependencyStore","store","throwIfRegistered","key","Error","throwIfUnregistered","register","value","type","registerFactory","factory","unregister","undefined","invalidate","resolve","stored"],"mappings":";;;AAUO,IAAMA,kBAAN,MAAMA;EAAb;;;AACYC,EAAAA,KAAAA,GAA8C,EAAC;AAE/CC,EAAAA,iBAAAA,CAAkBC,GAAAA,EAAa;AACnC,IAAA,IAAI,IAAA,CAAKF,KAAAA,CAAME,GAAAA,CAAAA,IAAQ,IAAA,EAAM;AACzB,MAAA,MAAM,IAAIC,KAAAA,CAAM,CAAA,EAAGD,GAAAA,CAAAA,sBAAAA,CAA2B,CAAA;AAClD,IAAA;AACJ,EAAA;AAEQE,EAAAA,mBAAAA,CAAoBF,GAAAA,EAAa;AACrC,IAAA,IAAI,IAAA,CAAKF,KAAAA,CAAME,GAAAA,CAAAA,IAAQ,IAAA,EAAM;AACzB,MAAA,MAAM,IAAIC,KAAAA,CAAM,CAAA,EAAGD,GAAAA,CAAAA,kBAAAA,CAAuB,CAAA;AAC9C,IAAA;AACJ,EAAA;;;;AAKOG,EAAAA,QAAAA,CAASH,KAAaI,KAAAA,EAAY;AACrC,IAAA,IAAA,CAAKL,kBAAkBC,GAAAA,CAAAA;AACvB,IAAA,IAAA,CAAKF,KAAAA,CAAME,GAAAA,CAAAA,GAAO;MAAEK,IAAAA,EAAM,OAAA;AAASD,MAAAA;AAAM,KAAA;AAC7C,EAAA;;;;AAKOE,EAAAA,eAAAA,CAAgBN,KAAaO,OAAAA,EAAoB;AACpD,IAAA,IAAA,CAAKR,kBAAkBC,GAAAA,CAAAA;AACvB,IAAA,IAAA,CAAKF,KAAAA,CAAME,GAAAA,CAAAA,GAAO;MAAEK,IAAAA,EAAM,SAAA;MAAWD,KAAAA,EAAOG;AAAQ,KAAA;AACxD,EAAA;;;;AAKOC,EAAAA,UAAAA,CAAWR,GAAAA,EAAa;AAC3B,IAAA,IAAA,CAAKE,oBAAoBF,GAAAA,CAAAA;AACzB,IAAA,IAAA,CAAKF,KAAAA,CAAME,GAAAA,CAAAA,GAAOS,MAAAA;AACtB,EAAA;;;;EAKOC,UAAAA,GAAa;AAChB,IAAA,IAAA,CAAKZ,QAAQ,EAAC;AAClB,EAAA;;AAGOa,EAAAA,OAAAA,CAAQX,GAAAA,EAAa;AACxB,IAAA,IAAA,CAAKE,oBAAoBF,GAAAA,CAAAA;AACzB,IAAA,MAAMY,MAAAA,GAAS,IAAA,CAAKd,KAAAA,CAAME,GAAAA,CAAAA;AAC1B,IAAA,OAAOY,OAAOP,IAAAA,KAAS,SAAA,GAAYO,MAAAA,CAAOR,KAAAA,KAAUQ,MAAAA,CAAOR,KAAAA;AAC/D,EAAA;AACJ","file":"O4SGLGEI.js","sourcesContent":["type StoreValue = {\n type: 'value';\n value: any;\n};\ntype StoreFactory = {\n type: 'factory';\n value: () => any;\n};\ntype StoreAny = StoreValue | StoreFactory;\n\nexport class DependencyStore {\n private store: Record<string, StoreAny | undefined> = {};\n\n private throwIfRegistered(key: string) {\n if (this.store[key] != null) {\n throw new Error(`${key} is already registered`);\n }\n }\n\n private throwIfUnregistered(key: string) {\n if (this.store[key] == null) {\n throw new Error(`${key} is not registered`);\n }\n }\n\n /** Registers a value that will be resolved literally by resolve()\n * @throws if already registered\n */\n public register(key: string, value: any) {\n this.throwIfRegistered(key);\n this.store[key] = { type: 'value', value };\n }\n\n /** Registers a factory function that will be called by resolve()\n * @throws if already registered\n */\n public registerFactory(key: string, factory: () => any) {\n this.throwIfRegistered(key);\n this.store[key] = { type: 'factory', value: factory };\n }\n\n /** Unregisters a key\n * @throws if not registered\n */\n public unregister(key: string) {\n this.throwIfUnregistered(key);\n this.store[key] = undefined;\n }\n\n /**\n * Drops all registered values\n */\n public invalidate() {\n this.store = {};\n }\n\n /** Resolves a key to a value */\n public resolve(key: string) {\n this.throwIfUnregistered(key);\n const stored = this.store[key]!;\n return stored.type === 'factory' ? stored.value() : stored.value;\n }\n}\n"]}
|
package/dist/S2FOVFOI.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/registrarBuilder.ts"],"names":["RegistrarBuilder","defaultHandler","node","Error","JSON","stringify","classHandlers","classAliases","addClassHandler","nodeClass","identifier","fn","find","fromNodeClass","i","handler","prototype","isPrototypeOf","splice","push","addClassAlias","getToNode","alias","addDefault","build","mergedNodePrehandler","toNode","mergedNodeHandler","key","value","traverseDependencies","dfs"],"mappings":"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","file":"S2FOVFOI.js","sourcesContent":["import type { DependencyNode } from '@layerzerolabs/dependency-graph';\nimport type { Registrar } from '@layerzerolabs/dfs';\nexport type { Registrar };\nimport { dfs } from '@layerzerolabs/dfs';\n\ntype NodeClass = new (...args: any[]) => DependencyNode<any, any>;\ntype AbstractNodeClass = abstract new (...args: any[]) => DependencyNode<any, any>;\n\n/**\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<any, any>) => Promise<any>;\n constructor() {\n this.defaultHandler = async (node: DependencyNode<any, any>) => {\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 protected classHandlers: {\n nodeClass: AbstractNodeClass;\n identifier: string;\n fn: (node: DependencyNode<any, any>) => Promise<any>;\n }[] = [];\n\n protected classAliases: {\n fromNodeClass: AbstractNodeClass;\n getToNode: (from: DependencyNode<any, any>) => DependencyNode<any, any>;\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>) => 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<any, any>) => 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<any, any>) => 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<any, any>) => 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<any, any>,\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 (\n from: DependencyNode<any, any>,\n ) => DependencyNode<any, any>,\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 (\n from: DependencyNode<any, any>,\n ) => DependencyNode<any, any>,\n });\n\n return this;\n }\n i++;\n }\n\n this.classAliases.push({\n fromNodeClass,\n getToNode: getToNode as unknown as (\n from: DependencyNode<any, any>,\n ) => DependencyNode<any, any>,\n });\n\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<any, any>) => any) {\n this.defaultHandler = fn;\n return this;\n }\n\n public build(): Registrar<_ReturnTypes> {\n const mergedNodePrehandler = (node: DependencyNode<any, any>) => {\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<any, any>) => {\n for (const { nodeClass, identifier, fn } of this.classHandlers) {\n if (node instanceof nodeClass) {\n return {\n key: identifier,\n value: await fn(node),\n };\n }\n }\n\n return {\n key: 'default',\n value: await this.defaultHandler(node),\n };\n };\n return {\n traverseDependencies: async (node: DependencyNode<any, any>) =>\n await dfs<any, _ReturnTypes>(node, mergedNodeHandler, mergedNodePrehandler)(),\n };\n }\n}\n"]}
|
package/dist/VO33UEHJ.cjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/registrarBuilder.ts"],"names":["RegistrarBuilder","defaultHandler","node","Error","JSON","stringify","classHandlers","classAliases","addClassHandler","nodeClass","identifier","fn","find","fromNodeClass","i","handler","prototype","isPrototypeOf","splice","push","addClassAlias","getToNode","alias","addDefault","build","mergedNodePrehandler","toNode","mergedNodeHandler","key","value","traverseDependencies","__name","dfs"],"mappings":"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","file":"VO33UEHJ.cjs","sourcesContent":["import type { DependencyNode } from '@layerzerolabs/dependency-graph';\nimport type { Registrar } from '@layerzerolabs/dfs';\nexport type { Registrar };\nimport { dfs } from '@layerzerolabs/dfs';\n\ntype NodeClass = new (...args: any[]) => DependencyNode<any, any>;\ntype AbstractNodeClass = abstract new (...args: any[]) => DependencyNode<any, any>;\n\n/**\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<any, any>) => Promise<any>;\n constructor() {\n this.defaultHandler = async (node: DependencyNode<any, any>) => {\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 protected classHandlers: {\n nodeClass: AbstractNodeClass;\n identifier: string;\n fn: (node: DependencyNode<any, any>) => Promise<any>;\n }[] = [];\n\n protected classAliases: {\n fromNodeClass: AbstractNodeClass;\n getToNode: (from: DependencyNode<any, any>) => DependencyNode<any, any>;\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>) => 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<any, any>) => 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<any, any>) => 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<any, any>) => 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<any, any>,\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 (\n from: DependencyNode<any, any>,\n ) => DependencyNode<any, any>,\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 (\n from: DependencyNode<any, any>,\n ) => DependencyNode<any, any>,\n });\n\n return this;\n }\n i++;\n }\n\n this.classAliases.push({\n fromNodeClass,\n getToNode: getToNode as unknown as (\n from: DependencyNode<any, any>,\n ) => DependencyNode<any, any>,\n });\n\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<any, any>) => any) {\n this.defaultHandler = fn;\n return this;\n }\n\n public build(): Registrar<_ReturnTypes> {\n const mergedNodePrehandler = (node: DependencyNode<any, any>) => {\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<any, any>) => {\n for (const { nodeClass, identifier, fn } of this.classHandlers) {\n if (node instanceof nodeClass) {\n return {\n key: identifier,\n value: await fn(node),\n };\n }\n }\n\n return {\n key: 'default',\n value: await this.defaultHandler(node),\n };\n };\n return {\n traverseDependencies: async (node: DependencyNode<any, any>) =>\n await dfs<any, _ReturnTypes>(node, mergedNodeHandler, mergedNodePrehandler)(),\n };\n }\n}\n"]}
|