@proto-kit/common 0.1.1-develop.211 → 0.1.1-develop.2137
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cache/CacheManifest.d.ts +11 -0
- package/dist/cache/CacheManifest.d.ts.map +1 -0
- package/dist/cache/CacheManifest.js +56 -0
- package/dist/cache/CacheManifest.js.map +1 -0
- package/dist/cache/ProxyCache.d.ts +13 -0
- package/dist/cache/ProxyCache.d.ts.map +1 -0
- package/dist/cache/ProxyCache.js +24 -0
- package/dist/cache/ProxyCache.js.map +1 -0
- package/dist/cache/RemoteCache.d.ts +8 -0
- package/dist/cache/RemoteCache.d.ts.map +1 -0
- package/dist/cache/RemoteCache.js +2 -0
- package/dist/cache/RemoteCache.js.map +1 -0
- package/dist/cache/RemoteCacheCompiler.d.ts +16 -0
- package/dist/cache/RemoteCacheCompiler.d.ts.map +1 -0
- package/dist/cache/RemoteCacheCompiler.js +104 -0
- package/dist/cache/RemoteCacheCompiler.js.map +1 -0
- package/dist/compiling/AtomicCompileHelper.d.ts +15 -0
- package/dist/compiling/AtomicCompileHelper.d.ts.map +1 -0
- package/dist/compiling/AtomicCompileHelper.js +61 -0
- package/dist/compiling/AtomicCompileHelper.js.map +1 -0
- package/dist/compiling/CompilableModule.d.ts +6 -0
- package/dist/compiling/CompilableModule.d.ts.map +1 -0
- package/dist/compiling/CompilableModule.js +2 -0
- package/dist/compiling/CompilableModule.js.map +1 -0
- package/dist/compiling/CompileRegistry.d.ts +25 -0
- package/dist/compiling/CompileRegistry.d.ts.map +1 -0
- package/dist/compiling/CompileRegistry.js +62 -0
- package/dist/compiling/CompileRegistry.js.map +1 -0
- package/dist/compiling/services/ChildVerificationKeyService.d.ts +10 -0
- package/dist/compiling/services/ChildVerificationKeyService.d.ts.map +1 -0
- package/dist/compiling/services/ChildVerificationKeyService.js +27 -0
- package/dist/compiling/services/ChildVerificationKeyService.js.map +1 -0
- package/dist/config/ChildContainerCreatable.d.ts +5 -0
- package/dist/config/ChildContainerCreatable.d.ts.map +1 -0
- package/dist/config/ChildContainerCreatable.js +2 -0
- package/dist/config/ChildContainerCreatable.js.map +1 -0
- package/dist/config/ChildContainerProvider.d.ts +5 -0
- package/dist/config/ChildContainerProvider.d.ts.map +1 -0
- package/dist/config/ChildContainerProvider.js +2 -0
- package/dist/config/ChildContainerProvider.js.map +1 -0
- package/dist/config/ConfigurableModule.d.ts +6 -2
- package/dist/config/ConfigurableModule.d.ts.map +1 -1
- package/dist/config/ConfigurableModule.js +5 -0
- package/dist/config/ConfigurableModule.js.map +1 -0
- package/dist/config/ModuleContainer.d.ts +70 -23
- package/dist/config/ModuleContainer.d.ts.map +1 -1
- package/dist/config/ModuleContainer.js +164 -31
- package/dist/config/ModuleContainer.js.map +1 -0
- package/dist/config/Startable.d.ts +4 -0
- package/dist/config/Startable.d.ts.map +1 -0
- package/dist/config/Startable.js +2 -0
- package/dist/config/Startable.js.map +1 -0
- package/dist/config/injectAlias.d.ts +18 -0
- package/dist/config/injectAlias.d.ts.map +1 -0
- package/dist/config/injectAlias.js +47 -0
- package/dist/config/injectAlias.js.map +1 -0
- package/dist/dependencyFactory/DependencyFactory.d.ts +14 -9
- package/dist/dependencyFactory/DependencyFactory.d.ts.map +1 -1
- package/dist/dependencyFactory/DependencyFactory.js +2 -96
- package/dist/dependencyFactory/DependencyFactory.js.map +1 -0
- package/dist/dependencyFactory/injectOptional.d.ts +16 -0
- package/dist/dependencyFactory/injectOptional.d.ts.map +1 -0
- package/dist/dependencyFactory/injectOptional.js +40 -0
- package/dist/dependencyFactory/injectOptional.js.map +1 -0
- package/dist/dummyVerificationKey.d.ts +3 -0
- package/dist/dummyVerificationKey.d.ts.map +1 -0
- package/dist/dummyVerificationKey.js +8 -0
- package/dist/dummyVerificationKey.js.map +1 -0
- package/dist/events/EventEmitter.d.ts +19 -0
- package/dist/events/EventEmitter.d.ts.map +1 -0
- package/dist/events/EventEmitter.js +35 -0
- package/dist/events/EventEmitter.js.map +1 -0
- package/dist/events/EventEmitterProxy.d.ts +18 -0
- package/dist/events/EventEmitterProxy.d.ts.map +1 -0
- package/dist/events/EventEmitterProxy.js +35 -0
- package/dist/events/EventEmitterProxy.js.map +1 -0
- package/dist/events/EventEmittingComponent.d.ts +9 -0
- package/dist/events/EventEmittingComponent.d.ts.map +1 -0
- package/dist/events/EventEmittingComponent.js +2 -0
- package/dist/events/EventEmittingComponent.js.map +1 -0
- package/dist/events/ReplayingSingleUseEventEmitter.d.ts +17 -0
- package/dist/events/ReplayingSingleUseEventEmitter.d.ts.map +1 -0
- package/dist/events/ReplayingSingleUseEventEmitter.js +34 -0
- package/dist/events/ReplayingSingleUseEventEmitter.js.map +1 -0
- package/dist/index.d.ts +27 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +28 -2
- package/dist/index.js.map +1 -0
- package/dist/log.d.ts +37 -0
- package/dist/log.d.ts.map +1 -0
- package/dist/log.js +117 -0
- package/dist/log.js.map +1 -0
- package/dist/trees/InMemoryLinkedLeafStore.d.ts +21 -0
- package/dist/trees/InMemoryLinkedLeafStore.d.ts.map +1 -0
- package/dist/trees/InMemoryLinkedLeafStore.js +26 -0
- package/dist/trees/InMemoryLinkedLeafStore.js.map +1 -0
- package/dist/trees/InMemoryLinkedMerkleLeafStore.d.ts +7 -0
- package/dist/trees/InMemoryLinkedMerkleLeafStore.d.ts.map +1 -0
- package/dist/trees/InMemoryLinkedMerkleLeafStore.js +6 -0
- package/dist/trees/InMemoryLinkedMerkleLeafStore.js.map +1 -0
- package/dist/trees/InMemoryMerkleTreeStorage.d.ts +11 -0
- package/dist/trees/InMemoryMerkleTreeStorage.d.ts.map +1 -0
- package/dist/trees/InMemoryMerkleTreeStorage.js +13 -0
- package/dist/trees/InMemoryMerkleTreeStorage.js.map +1 -0
- package/dist/trees/LinkedMerkleTree.d.ts +345 -0
- package/dist/trees/LinkedMerkleTree.d.ts.map +1 -0
- package/dist/trees/LinkedMerkleTree.js +337 -0
- package/dist/trees/LinkedMerkleTree.js.map +1 -0
- package/dist/trees/LinkedMerkleTreeStore.d.ts +24 -0
- package/dist/trees/LinkedMerkleTreeStore.d.ts.map +1 -0
- package/dist/trees/LinkedMerkleTreeStore.js +2 -0
- package/dist/trees/LinkedMerkleTreeStore.js.map +1 -0
- package/dist/trees/MerkleTreeStore.d.ts +5 -0
- package/dist/trees/MerkleTreeStore.d.ts.map +1 -0
- package/dist/trees/MerkleTreeStore.js +2 -0
- package/dist/trees/MerkleTreeStore.js.map +1 -0
- package/dist/trees/MockAsyncMerkleStore.d.ts +9 -0
- package/dist/trees/MockAsyncMerkleStore.d.ts.map +1 -0
- package/dist/trees/MockAsyncMerkleStore.js +20 -0
- package/dist/trees/MockAsyncMerkleStore.js.map +1 -0
- package/dist/trees/RollupMerkleTree.d.ts +147 -0
- package/dist/trees/RollupMerkleTree.d.ts.map +1 -0
- package/dist/trees/RollupMerkleTree.js +218 -0
- package/dist/trees/RollupMerkleTree.js.map +1 -0
- package/dist/trees/VirtualMerkleTreeStore.d.ts +13 -0
- package/dist/trees/VirtualMerkleTreeStore.d.ts.map +1 -0
- package/dist/trees/VirtualMerkleTreeStore.js +18 -0
- package/dist/trees/VirtualMerkleTreeStore.js.map +1 -0
- package/dist/trees/lmt/AbstractLinkedMerkleTree.d.ts +288 -0
- package/dist/trees/lmt/AbstractLinkedMerkleTree.d.ts.map +1 -0
- package/dist/trees/lmt/AbstractLinkedMerkleTree.js +22 -0
- package/dist/trees/lmt/AbstractLinkedMerkleTree.js.map +1 -0
- package/dist/trees/lmt/InMemoryLinkedLeafStore.d.ts +21 -0
- package/dist/trees/lmt/InMemoryLinkedLeafStore.d.ts.map +1 -0
- package/dist/trees/lmt/InMemoryLinkedLeafStore.js +26 -0
- package/dist/trees/lmt/InMemoryLinkedLeafStore.js.map +1 -0
- package/dist/trees/lmt/InMemoryLinkedMerkleLeafStore.d.ts +7 -0
- package/dist/trees/lmt/InMemoryLinkedMerkleLeafStore.d.ts.map +1 -0
- package/dist/trees/lmt/InMemoryLinkedMerkleLeafStore.js +6 -0
- package/dist/trees/lmt/InMemoryLinkedMerkleLeafStore.js.map +1 -0
- package/dist/trees/lmt/LinkedLeafStore.d.ts +16 -0
- package/dist/trees/lmt/LinkedLeafStore.d.ts.map +1 -0
- package/dist/trees/lmt/LinkedLeafStore.js +2 -0
- package/dist/trees/lmt/LinkedLeafStore.js.map +1 -0
- package/dist/trees/lmt/LinkedLinkedStore.d.ts +16 -0
- package/dist/trees/lmt/LinkedLinkedStore.d.ts.map +1 -0
- package/dist/trees/lmt/LinkedLinkedStore.js +2 -0
- package/dist/trees/lmt/LinkedLinkedStore.js.map +1 -0
- package/dist/trees/lmt/LinkedMerkleTree.d.ts +11 -0
- package/dist/trees/lmt/LinkedMerkleTree.d.ts.map +1 -0
- package/dist/trees/lmt/LinkedMerkleTree.js +241 -0
- package/dist/trees/lmt/LinkedMerkleTree.js.map +1 -0
- package/dist/trees/lmt/LinkedMerkleTreeCircuitOps.d.ts +113 -0
- package/dist/trees/lmt/LinkedMerkleTreeCircuitOps.d.ts.map +1 -0
- package/dist/trees/lmt/LinkedMerkleTreeCircuitOps.js +113 -0
- package/dist/trees/lmt/LinkedMerkleTreeCircuitOps.js.map +1 -0
- package/dist/trees/lmt/LinkedMerkleTreeDatabase.d.ts +7 -0
- package/dist/trees/lmt/LinkedMerkleTreeDatabase.d.ts.map +1 -0
- package/dist/trees/lmt/LinkedMerkleTreeDatabase.js +2 -0
- package/dist/trees/lmt/LinkedMerkleTreeDatabase.js.map +1 -0
- package/dist/trees/lmt/LinkedMerkleTreeStore.d.ts +16 -0
- package/dist/trees/lmt/LinkedMerkleTreeStore.d.ts.map +1 -0
- package/dist/trees/lmt/LinkedMerkleTreeStore.js +2 -0
- package/dist/trees/lmt/LinkedMerkleTreeStore.js.map +1 -0
- package/dist/trees/lmt/LinkedMerkleTreeTypes.d.ts +74 -0
- package/dist/trees/lmt/LinkedMerkleTreeTypes.d.ts.map +1 -0
- package/dist/trees/lmt/LinkedMerkleTreeTypes.js +50 -0
- package/dist/trees/lmt/LinkedMerkleTreeTypes.js.map +1 -0
- package/dist/trees/sparse/InMemoryMerkleTreeStorage.d.ts +11 -0
- package/dist/trees/sparse/InMemoryMerkleTreeStorage.d.ts.map +1 -0
- package/dist/trees/sparse/InMemoryMerkleTreeStorage.js +13 -0
- package/dist/trees/sparse/InMemoryMerkleTreeStorage.js.map +1 -0
- package/dist/trees/sparse/MerkleTreeStore.d.ts +5 -0
- package/dist/trees/sparse/MerkleTreeStore.d.ts.map +1 -0
- package/dist/trees/sparse/MerkleTreeStore.js +2 -0
- package/dist/trees/sparse/MerkleTreeStore.js.map +1 -0
- package/dist/trees/sparse/MockAsyncMerkleStore.d.ts +9 -0
- package/dist/trees/sparse/MockAsyncMerkleStore.d.ts.map +1 -0
- package/dist/trees/sparse/MockAsyncMerkleStore.js +20 -0
- package/dist/trees/sparse/MockAsyncMerkleStore.js.map +1 -0
- package/dist/trees/sparse/RollupMerkleTree.d.ts +158 -0
- package/dist/trees/sparse/RollupMerkleTree.d.ts.map +1 -0
- package/dist/trees/sparse/RollupMerkleTree.js +330 -0
- package/dist/trees/sparse/RollupMerkleTree.js.map +1 -0
- package/dist/types.d.ts +62 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +14 -1
- package/dist/types.js.map +1 -0
- package/dist/union/union.d.ts +177 -0
- package/dist/union/union.d.ts.map +1 -0
- package/dist/union/union.js +35 -0
- package/dist/union/union.js.map +1 -0
- package/dist/utils.d.ts +57 -2
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +153 -4
- package/dist/utils.js.map +1 -0
- package/dist/zkProgrammable/ProvableMethodExecutionContext.d.ts +4 -3
- package/dist/zkProgrammable/ProvableMethodExecutionContext.d.ts.map +1 -1
- package/dist/zkProgrammable/ProvableMethodExecutionContext.js +2 -3
- package/dist/zkProgrammable/ProvableMethodExecutionContext.js.map +1 -0
- package/dist/zkProgrammable/ZkProgrammable.d.ts +32 -11
- package/dist/zkProgrammable/ZkProgrammable.d.ts.map +1 -1
- package/dist/zkProgrammable/ZkProgrammable.js +36 -17
- package/dist/zkProgrammable/ZkProgrammable.js.map +1 -0
- package/dist/zkProgrammable/provableMethod.d.ts +7 -4
- package/dist/zkProgrammable/provableMethod.d.ts.map +1 -1
- package/dist/zkProgrammable/provableMethod.js +30 -14
- package/dist/zkProgrammable/provableMethod.js.map +1 -0
- package/jest.config.cjs +12 -1
- package/package.json +9 -7
- package/src/cache/CacheManifest.ts +57 -0
- package/src/cache/ProxyCache.ts +30 -0
- package/src/cache/RemoteCache.ts +9 -0
- package/src/cache/RemoteCacheCompiler.ts +131 -0
- package/src/compiling/AtomicCompileHelper.ts +71 -0
- package/src/compiling/CompilableModule.ts +6 -0
- package/src/compiling/CompileRegistry.ts +64 -0
- package/src/compiling/services/ChildVerificationKeyService.ts +26 -0
- package/src/config/ChildContainerCreatable.ts +5 -0
- package/src/config/ChildContainerProvider.ts +5 -0
- package/src/config/ConfigurableModule.ts +15 -2
- package/src/config/ModuleContainer.ts +286 -58
- package/src/config/Startable.ts +3 -0
- package/src/config/injectAlias.ts +70 -0
- package/src/dependencyFactory/DependencyFactory.ts +34 -109
- package/src/dummyVerificationKey.ts +10 -0
- package/src/events/EventEmitter.ts +61 -0
- package/src/events/EventEmitterProxy.ts +81 -0
- package/src/events/EventEmittingComponent.ts +11 -0
- package/src/events/ReplayingSingleUseEventEmitter.ts +42 -0
- package/src/index.ts +27 -2
- package/src/log.ts +145 -0
- package/src/trees/lmt/AbstractLinkedMerkleTree.ts +102 -0
- package/src/trees/lmt/InMemoryLinkedLeafStore.ts +42 -0
- package/src/trees/lmt/LinkedLeafStore.ts +13 -0
- package/src/trees/lmt/LinkedMerkleTree.ts +335 -0
- package/src/trees/lmt/LinkedMerkleTreeCircuitOps.ts +188 -0
- package/src/trees/lmt/LinkedMerkleTreeTypes.ts +53 -0
- package/src/trees/sparse/InMemoryMerkleTreeStorage.ts +17 -0
- package/src/trees/sparse/MerkleTreeStore.ts +5 -0
- package/src/trees/sparse/MockAsyncMerkleStore.ts +30 -0
- package/src/trees/sparse/RollupMerkleTree.ts +512 -0
- package/src/types.ts +53 -2
- package/src/utils.ts +281 -5
- package/src/zkProgrammable/ProvableMethodExecutionContext.ts +6 -6
- package/src/zkProgrammable/ZkProgrammable.ts +90 -35
- package/src/zkProgrammable/provableMethod.ts +50 -23
- package/test/config/ContainerEvents.test.ts +65 -0
- package/test/config/ModuleContainer.test.ts +146 -15
- package/test/config/injectAlias.test.ts +28 -0
- package/test/trees/LinkedMerkleTree.test.ts +124 -0
- package/test/trees/LinkedMerkleTreeCircuitOps.test.ts +147 -0
- package/test/trees/MerkleTree.test.ts +251 -0
- package/test/tsconfig.json +5 -2
- package/test/zkProgrammable/ZkProgrammable.test.ts +145 -119
- package/tsconfig.json +1 -1
- package/LICENSE.md +0 -201
- package/tsconfig.test.json +0 -9
|
@@ -1,42 +1,65 @@
|
|
|
1
1
|
import "reflect-metadata";
|
|
2
|
-
import { InjectionToken } from "tsyringe";
|
|
3
|
-
import { StringKeyOf, TypedClass } from "../types";
|
|
4
|
-
import { DependencyFactory } from "../dependencyFactory/DependencyFactory";
|
|
5
|
-
import {
|
|
2
|
+
import { DependencyContainer, InjectionToken } from "tsyringe";
|
|
3
|
+
import { MergeObjects, StringKeyOf, TypedClass } from "../types";
|
|
4
|
+
import { DependencyFactory, InferDependencies } from "../dependencyFactory/DependencyFactory";
|
|
5
|
+
import { EventEmitterProxy } from "../events/EventEmitterProxy";
|
|
6
|
+
import { Configurable, ConfigurableModule, NoConfig } from "./ConfigurableModule";
|
|
7
|
+
import { ChildContainerProvider } from "./ChildContainerProvider";
|
|
8
|
+
import { ChildContainerCreatable } from "./ChildContainerCreatable";
|
|
6
9
|
export declare const ModuleContainerErrors: {
|
|
7
10
|
configNotSetInContainer: (moduleName: string) => Error;
|
|
8
11
|
onlyValidModuleNames: (moduleName: NonNullable<unknown>) => Error;
|
|
9
12
|
unableToDecorateModule: (moduleName: InjectionToken<unknown>) => Error;
|
|
10
13
|
nonModuleDependency: (runtimeModuleName: string) => Error;
|
|
11
14
|
unknownDependency: (runtimeModuleName: string, name: string) => Error;
|
|
15
|
+
dependencyContainerNotSet: (className: string) => Error;
|
|
16
|
+
validModuleInstance: (moduleName: string, moduleTypeName: string) => Error;
|
|
12
17
|
};
|
|
13
|
-
export
|
|
18
|
+
export interface BaseModuleInstanceType extends ChildContainerCreatable, Configurable<unknown> {
|
|
19
|
+
}
|
|
20
|
+
export type BaseModuleType = TypedClass<BaseModuleInstanceType>;
|
|
14
21
|
export interface ModulesRecord<ModuleType extends BaseModuleType = BaseModuleType> {
|
|
15
22
|
[name: string]: ModuleType;
|
|
16
23
|
}
|
|
17
24
|
export type ModulesConfig<Modules extends ModulesRecord> = {
|
|
18
|
-
[ConfigKey in StringKeyOf<Modules>]: InstanceType<Modules[ConfigKey]> extends Configurable<infer Config> ? Config : never;
|
|
25
|
+
[ConfigKey in StringKeyOf<Modules>]: InstanceType<Modules[ConfigKey]> extends Configurable<infer Config> ? Config extends NoConfig ? Config | undefined : Config : never;
|
|
19
26
|
};
|
|
20
27
|
/**
|
|
21
|
-
*
|
|
28
|
+
* This type make any config partial (i.e. optional) up to the first level
|
|
29
|
+
* So { Module: { a: { b: string } } }
|
|
30
|
+
* will become
|
|
31
|
+
* { Module?: { a?: { b: string } } }
|
|
32
|
+
* Note that b does not become optional, as we don't want nested objects to
|
|
33
|
+
* become unreasonably partialized (for example Field).
|
|
22
34
|
*/
|
|
23
|
-
export
|
|
24
|
-
|
|
25
|
-
|
|
35
|
+
export type RecursivePartial<T> = {
|
|
36
|
+
[Key in keyof T]?: Partial<T[Key]>;
|
|
37
|
+
};
|
|
38
|
+
export type FilterNeverValues<Type extends Record<string, unknown>> = {
|
|
39
|
+
[Key in keyof Type as Type[Key] extends never ? never : Key]: Type[Key];
|
|
40
|
+
};
|
|
41
|
+
export type DependenciesFromModules<Modules extends ModulesRecord> = FilterNeverValues<{
|
|
42
|
+
[Key in keyof Modules]: Modules[Key] extends TypedClass<DependencyFactory> ? InferDependencies<InstanceType<Modules[Key]>> : never;
|
|
43
|
+
}>;
|
|
44
|
+
export type ResolvableModules<Modules extends ModulesRecord> = MergeObjects<DependenciesFromModules<Modules>> & Modules;
|
|
45
|
+
export interface ModuleContainerLike {
|
|
46
|
+
get dependencyContainer(): DependencyContainer;
|
|
47
|
+
resolveOrFail<ModuleType>(moduleName: string, moduleType: TypedClass<ModuleType>): ModuleType;
|
|
26
48
|
}
|
|
27
49
|
/**
|
|
28
50
|
* Reusable module container facilitating registration, resolution
|
|
29
51
|
* configuration, decoration and validation of modules
|
|
30
52
|
*/
|
|
31
|
-
export declare class ModuleContainer<Modules extends ModulesRecord> extends ConfigurableModule<
|
|
32
|
-
definition:
|
|
53
|
+
export declare class ModuleContainer<Modules extends ModulesRecord> extends ConfigurableModule<ModulesConfig<Modules>> implements ModuleContainerLike {
|
|
54
|
+
definition: Modules;
|
|
33
55
|
/**
|
|
34
56
|
* Determines how often are modules decorated upon resolution
|
|
35
57
|
* from the tsyringe DI container
|
|
36
58
|
*/
|
|
37
59
|
private static readonly moduleDecorationFrequency;
|
|
38
|
-
|
|
39
|
-
|
|
60
|
+
private providedContainer?;
|
|
61
|
+
private eventEmitterProxy;
|
|
62
|
+
constructor(definition: Modules);
|
|
40
63
|
/**
|
|
41
64
|
* @returns list of module names
|
|
42
65
|
*/
|
|
@@ -49,13 +72,16 @@ export declare class ModuleContainer<Modules extends ModulesRecord> extends Conf
|
|
|
49
72
|
* @param containedModule
|
|
50
73
|
*/
|
|
51
74
|
protected validateModule(moduleName: StringKeyOf<Modules>, containedModule: ConfigurableModule<unknown>): void;
|
|
75
|
+
protected get container(): DependencyContainer;
|
|
52
76
|
/**
|
|
53
77
|
* Assert that the iterated `moduleName` is of ModuleName type,
|
|
54
78
|
* otherwise it may be just string e.g. when modules are iterated over
|
|
55
79
|
* using e.g. a for loop.
|
|
56
80
|
*/
|
|
57
|
-
assertIsValidModuleName(
|
|
58
|
-
isValidModuleName(modules: Modules, moduleName: number | string | symbol):
|
|
81
|
+
assertIsValidModuleName(moduleName: string): asserts moduleName is StringKeyOf<Modules>;
|
|
82
|
+
isValidModuleName(modules: Modules, moduleName: number | string | symbol): moduleName is StringKeyOf<Modules>;
|
|
83
|
+
assertContainerInitialized(container: DependencyContainer | undefined): asserts container is DependencyContainer;
|
|
84
|
+
protected registerAliases(originalToken: string, clas: TypedClass<any>): void;
|
|
59
85
|
/**
|
|
60
86
|
* Register modules into the current container, and registers
|
|
61
87
|
* a respective resolution hook in order to decorate the module
|
|
@@ -64,11 +90,7 @@ export declare class ModuleContainer<Modules extends ModulesRecord> extends Conf
|
|
|
64
90
|
* @param modules
|
|
65
91
|
*/
|
|
66
92
|
protected registerModules(modules: Modules): void;
|
|
67
|
-
|
|
68
|
-
* Inject a set of dependencies using the given list of DependencyFactories
|
|
69
|
-
* This method should be called during startup
|
|
70
|
-
*/
|
|
71
|
-
protected registerDependencyFactories(factories: TypedClass<DependencyFactory>[]): void;
|
|
93
|
+
get events(): EventEmitterProxy<Modules>;
|
|
72
94
|
/**
|
|
73
95
|
* Register a non-module value into the current container
|
|
74
96
|
* @param modules
|
|
@@ -83,6 +105,9 @@ export declare class ModuleContainer<Modules extends ModulesRecord> extends Conf
|
|
|
83
105
|
* @param config
|
|
84
106
|
*/
|
|
85
107
|
configure(config: ModulesConfig<Modules>): void;
|
|
108
|
+
configurePartial(config: RecursivePartial<ModulesConfig<Modules>>): void;
|
|
109
|
+
get config(): ModulesConfig<Modules>;
|
|
110
|
+
set config(config: ModulesConfig<Modules>);
|
|
86
111
|
/**
|
|
87
112
|
* Resolves a module from the current module container
|
|
88
113
|
*
|
|
@@ -93,17 +118,39 @@ export declare class ModuleContainer<Modules extends ModulesRecord> extends Conf
|
|
|
93
118
|
* @param moduleName
|
|
94
119
|
* @returns
|
|
95
120
|
*/
|
|
96
|
-
resolve<
|
|
97
|
-
resolveOrFail<ModuleType>(moduleName: string, moduleType
|
|
121
|
+
resolve<KeyType extends StringKeyOf<ResolvableModules<Modules>>>(moduleName: KeyType): InstanceType<ResolvableModules<Modules>[KeyType]>;
|
|
122
|
+
resolveOrFail<ModuleType>(moduleName: string, moduleType?: TypedClass<ModuleType>): ModuleType;
|
|
98
123
|
/**
|
|
99
124
|
* Override this in the child class to provide custom
|
|
100
125
|
* features or module checks
|
|
101
126
|
*/
|
|
102
127
|
protected decorateModule(moduleName: StringKeyOf<Modules>, containedModule: InstanceType<Modules[StringKeyOf<Modules>]>): void;
|
|
128
|
+
private isDependencyFactory;
|
|
129
|
+
/**
|
|
130
|
+
* Inject a set of dependencies using the given list of DependencyFactories
|
|
131
|
+
* This method should be called during startup
|
|
132
|
+
*/
|
|
133
|
+
protected initializeDependencyFactories(factories: StringKeyOf<Modules>[]): void;
|
|
134
|
+
/**
|
|
135
|
+
* Retrieves all dependencies generated by a particular dependencyfactory
|
|
136
|
+
* and injects them inside this modulecontainer's DI container.
|
|
137
|
+
* This will be automatically called for every module, but can also be called
|
|
138
|
+
* explicitly to initialize an extra factory
|
|
139
|
+
* @param factory
|
|
140
|
+
* @private
|
|
141
|
+
*/
|
|
142
|
+
protected useDependencyFactory(factory: DependencyFactory): void;
|
|
103
143
|
/**
|
|
104
144
|
* Handle module resolution, e.g. by decorating resolved modules
|
|
105
145
|
* @param moduleName
|
|
106
146
|
*/
|
|
107
147
|
protected onAfterModuleResolution(moduleName: StringKeyOf<Modules>): void;
|
|
148
|
+
/**
|
|
149
|
+
* This is a placeholder for individual modules to override.
|
|
150
|
+
* This method will be called whenever the underlying container fully
|
|
151
|
+
* initialized
|
|
152
|
+
*/
|
|
153
|
+
create(childContainerProvider: ChildContainerProvider): void;
|
|
154
|
+
get dependencyContainer(): DependencyContainer;
|
|
108
155
|
}
|
|
109
156
|
//# sourceMappingURL=ModuleContainer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ModuleContainer.d.ts","sourceRoot":"","sources":["../../src/config/ModuleContainer.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAE1B,OAAO,
|
|
1
|
+
{"version":3,"file":"ModuleContainer.d.ts","sourceRoot":"","sources":["../../src/config/ModuleContainer.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAE1B,OAAO,EACL,mBAAmB,EAEnB,cAAc,EAOf,MAAM,UAAU,CAAC;AAIlB,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACjE,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EAClB,MAAM,wCAAwC,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAEhE,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,QAAQ,EACT,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAyCpE,eAAO,MAAM,qBAAqB;0CArCM,MAAM;uCAKT,YAAY,OAAO,CAAC;yCAMlB,eAAe,OAAO,CAAC;6CAInB,MAAM;2CAIR,MAAM,QAAQ,MAAM;2CAOpB,MAAM;sCAKX,MAAM,kBAAkB,MAAM;CAMvB,CAAC;AAE5C,MAAM,WAAW,sBACf,SAAQ,uBAAuB,EAC7B,YAAY,CAAC,OAAO,CAAC;CAAG;AAG5B,MAAM,MAAM,cAAc,GAAG,UAAU,CAAC,sBAAsB,CAAC,CAAC;AAGhE,MAAM,WAAW,aAAa,CAE5B,UAAU,SAAS,cAAc,GAAG,cAAc;IAElD,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC;CAC5B;AAGD,MAAM,MAAM,aAAa,CAAC,OAAO,SAAS,aAAa,IAAI;KAExD,SAAS,IAAI,WAAW,CAAC,OAAO,CAAC,GAAG,YAAY,CAC/C,OAAO,CAAC,SAAS,CAAC,CACnB,SAAS,YAAY,CAAC,MAAM,MAAM,CAAC,GAChC,MAAM,SAAS,QAAQ,GACrB,MAAM,GAAG,SAAS,GAClB,MAAM,GACR,KAAK;CACV,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,MAAM,gBAAgB,CAAC,CAAC,IAAI;KAC/B,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;CACnC,CAAC;AAGF,MAAM,MAAM,iBAAiB,CAAC,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI;KACnE,GAAG,IAAI,MAAM,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,KAAK,GAAG,KAAK,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;CACxE,CAAC;AAEF,MAAM,MAAM,uBAAuB,CAAC,OAAO,SAAS,aAAa,IAC/D,iBAAiB,CAAC;KACf,GAAG,IAAI,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,UAAU,CAAC,iBAAiB,CAAC,GACtE,iBAAiB,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAC7C,KAAK;CACV,CAAC,CAAC;AAEL,MAAM,MAAM,iBAAiB,CAAC,OAAO,SAAS,aAAa,IAAI,YAAY,CACzE,uBAAuB,CAAC,OAAO,CAAC,CACjC,GACC,OAAO,CAAC;AAEV,MAAM,WAAW,mBAAmB;IAClC,IAAI,mBAAmB,IAAI,mBAAmB,CAAC;IAE/C,aAAa,CAAC,UAAU,EACtB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,UAAU,CAAC,UAAU,CAAC,GACjC,UAAU,CAAC;CACf;AAED;;;GAGG;AACH,qBAAa,eAAe,CAAC,OAAO,SAAS,aAAa,CACxD,SAAQ,kBAAkB,CAAC,aAAa,CAAC,OAAO,CAAC,CACjD,YAAW,mBAAmB;IAaJ,UAAU,EAAE,OAAO;IAX7C;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,yBAAyB,CAAqB;IAGtE,OAAO,CAAC,iBAAiB,CAAC,CAAkC;IAE5D,OAAO,CAAC,iBAAiB,CAAqD;gBAEpD,UAAU,EAAE,OAAO;IAI7C;;OAEG;IACH,IAAW,WAAW,aAErB;IAED;;;;;;OAMG;IACH,SAAS,CAAC,cAAc,CACtB,UAAU,EAAE,WAAW,CAAC,OAAO,CAAC,EAChC,eAAe,EAAE,kBAAkB,CAAC,OAAO,CAAC,GAC3C,IAAI;IAmBP,SAAS,KAAK,SAAS,IAAI,mBAAmB,CAG7C;IAED;;;;OAIG;IACI,uBAAuB,CAC5B,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,UAAU,IAAI,WAAW,CAAC,OAAO,CAAC;IAMtC,iBAAiB,CACtB,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GACnC,UAAU,IAAI,WAAW,CAAC,OAAO,CAAC;IAI9B,0BAA0B,CAC/B,SAAS,EAAE,mBAAmB,GAAG,SAAS,GACzC,OAAO,CAAC,SAAS,IAAI,mBAAmB;IAM3C,SAAS,CAAC,eAAe,CAAC,aAAa,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,CAAC,GAAG,CAAC;IAUtE;;;;;;OAMG;IACH,SAAS,CAAC,eAAe,CAAC,OAAO,EAAE,OAAO;IAyB1C,IAAW,MAAM,IAAI,iBAAiB,CAAC,OAAO,CAAC,CAK9C;IAED;;;OAGG;IAEI,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC;IAM1D;;;;;;;OAOG;IACI,SAAS,CAAC,MAAM,EAAE,aAAa,CAAC,OAAO,CAAC;IAIxC,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAOxE,IAAW,MAAM,IAIS,aAAa,CAAC,OAAO,CAAC,CAF/C;IAED,IAAW,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,OAAO,CAAC,EAK/C;IAED;;;;;;;;;OASG;IACI,OAAO,CAAC,OAAO,SAAS,WAAW,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,EACpE,UAAU,EAAE,OAAO,GAClB,YAAY,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC;IAM7C,aAAa,CAAC,UAAU,EAC7B,UAAU,EAAE,MAAM,EAClB,UAAU,CAAC,EAAE,UAAU,CAAC,UAAU,CAAC;IAmBrC;;;OAGG;IACH,SAAS,CAAC,cAAc,CACtB,UAAU,EAAE,WAAW,CAAC,OAAO,CAAC,EAChC,eAAe,EAAE,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;IAe9D,OAAO,CAAC,mBAAmB;IAI3B;;;OAGG;IACH,SAAS,CAAC,6BAA6B,CAAC,SAAS,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE;IAMzE;;;;;;;OAOG;IACH,SAAS,CAAC,oBAAoB,CAAC,OAAO,EAAE,iBAAiB;IAyDzD;;;OAGG;IACH,SAAS,CAAC,uBAAuB,CAAC,UAAU,EAAE,WAAW,CAAC,OAAO,CAAC;IAuBlE;;;;OAIG;IACI,MAAM,CAAC,sBAAsB,EAAE,sBAAsB,GAAG,IAAI;IAYnE,IAAW,mBAAmB,IAAI,mBAAmB,CAEpD;CACF"}
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import "reflect-metadata";
|
|
2
|
-
import {
|
|
2
|
+
import { instanceCachingFactory, isClassProvider, isFactoryProvider, isTokenProvider, isValueProvider, Lifecycle, } from "tsyringe";
|
|
3
3
|
import log from "loglevel";
|
|
4
|
-
import
|
|
4
|
+
import merge from "lodash/merge";
|
|
5
|
+
import { EventEmitterProxy } from "../events/EventEmitterProxy";
|
|
6
|
+
import { ConfigurableModule, } from "./ConfigurableModule";
|
|
7
|
+
import { getInjectAliases } from "./injectAlias";
|
|
5
8
|
const errors = {
|
|
6
9
|
configNotSetInContainer: (moduleName) => new Error(`Trying to get config of ${moduleName}, but it was not yet set in the module container`),
|
|
7
10
|
onlyValidModuleNames: (moduleName) => new Error(
|
|
8
|
-
// eslint-disable-next-line
|
|
9
|
-
// eslint-disable-next-line @typescript-eslint/no-base-to-string,@typescript-eslint/restrict-template-expressions
|
|
11
|
+
// eslint-disable-next-line @typescript-eslint/no-base-to-string
|
|
10
12
|
`Only known module names are allowed, using unknown module name: ${moduleName}`),
|
|
11
13
|
unableToDecorateModule: (moduleName) =>
|
|
12
14
|
// eslint-disable-next-line @typescript-eslint/no-base-to-string
|
|
@@ -16,6 +18,8 @@ const errors = {
|
|
|
16
18
|
unknownDependency: (runtimeModuleName, name) => new Error(`Unable to register module: ${runtimeModuleName},
|
|
17
19
|
attempting to inject a dependency that is not registered
|
|
18
20
|
as a runtime module for this chain: ${name}`),
|
|
21
|
+
dependencyContainerNotSet: (className) => new Error(`DependencyContainer not set. Be sure to only call DI-related function in create() and not inside the constructor. (${className})`),
|
|
22
|
+
validModuleInstance: (moduleName, moduleTypeName) => new Error(`Incompatible module instance ("${moduleName}" not instanceof ${moduleTypeName})`),
|
|
19
23
|
};
|
|
20
24
|
export const ModuleContainerErrors = errors;
|
|
21
25
|
/**
|
|
@@ -27,15 +31,14 @@ export class ModuleContainer extends ConfigurableModule {
|
|
|
27
31
|
super();
|
|
28
32
|
this.definition = definition;
|
|
29
33
|
// DI container holding all the registered modules
|
|
30
|
-
this.
|
|
31
|
-
|
|
32
|
-
this.registerModules(definition.modules);
|
|
34
|
+
this.providedContainer = undefined;
|
|
35
|
+
this.eventEmitterProxy = undefined;
|
|
33
36
|
}
|
|
34
37
|
/**
|
|
35
38
|
* @returns list of module names
|
|
36
39
|
*/
|
|
37
40
|
get moduleNames() {
|
|
38
|
-
return Object.keys(this.definition
|
|
41
|
+
return Object.keys(this.definition);
|
|
39
42
|
}
|
|
40
43
|
/**
|
|
41
44
|
* Check if the provided module satisfies the container requirements,
|
|
@@ -57,19 +60,34 @@ export class ModuleContainer extends ConfigurableModule {
|
|
|
57
60
|
}
|
|
58
61
|
});
|
|
59
62
|
}
|
|
63
|
+
get container() {
|
|
64
|
+
this.assertContainerInitialized(this.providedContainer);
|
|
65
|
+
return this.providedContainer;
|
|
66
|
+
}
|
|
60
67
|
/**
|
|
61
68
|
* Assert that the iterated `moduleName` is of ModuleName type,
|
|
62
69
|
* otherwise it may be just string e.g. when modules are iterated over
|
|
63
70
|
* using e.g. a for loop.
|
|
64
71
|
*/
|
|
65
|
-
assertIsValidModuleName(
|
|
66
|
-
this.isValidModuleName(
|
|
72
|
+
assertIsValidModuleName(moduleName) {
|
|
73
|
+
if (!this.isValidModuleName(this.definition, moduleName)) {
|
|
74
|
+
throw errors.onlyValidModuleNames(moduleName);
|
|
75
|
+
}
|
|
67
76
|
}
|
|
68
77
|
isValidModuleName(modules, moduleName) {
|
|
69
|
-
|
|
70
|
-
|
|
78
|
+
return Object.prototype.hasOwnProperty.call(modules, moduleName);
|
|
79
|
+
}
|
|
80
|
+
assertContainerInitialized(container) {
|
|
81
|
+
if (container === undefined) {
|
|
82
|
+
throw errors.dependencyContainerNotSet(this.constructor.name);
|
|
71
83
|
}
|
|
72
84
|
}
|
|
85
|
+
registerAliases(originalToken, clas) {
|
|
86
|
+
const aliases = getInjectAliases(clas);
|
|
87
|
+
aliases.forEach((alias) => this.container.register(alias, {
|
|
88
|
+
useToken: originalToken,
|
|
89
|
+
}));
|
|
90
|
+
}
|
|
73
91
|
/**
|
|
74
92
|
* Register modules into the current container, and registers
|
|
75
93
|
* a respective resolution hook in order to decorate the module
|
|
@@ -78,29 +96,30 @@ export class ModuleContainer extends ConfigurableModule {
|
|
|
78
96
|
* @param modules
|
|
79
97
|
*/
|
|
80
98
|
registerModules(modules) {
|
|
81
|
-
|
|
99
|
+
Object.keys(modules).forEach((moduleName) => {
|
|
82
100
|
if (Object.prototype.hasOwnProperty.call(modules, moduleName)) {
|
|
83
|
-
this.assertIsValidModuleName(
|
|
101
|
+
this.assertIsValidModuleName(moduleName);
|
|
84
102
|
log.debug(`Registering module: ${moduleName}`);
|
|
85
|
-
|
|
103
|
+
const useClass = modules[moduleName];
|
|
104
|
+
this.container.register(moduleName, { useClass }, { lifecycle: Lifecycle.ContainerScoped });
|
|
86
105
|
this.onAfterModuleResolution(moduleName);
|
|
106
|
+
this.registerAliases(moduleName, useClass);
|
|
107
|
+
if (this.isDependencyFactory(useClass)) {
|
|
108
|
+
this.useDependencyFactory(useClass);
|
|
109
|
+
}
|
|
87
110
|
}
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
/**
|
|
91
|
-
* Inject a set of dependencies using the given list of DependencyFactories
|
|
92
|
-
* This method should be called during startup
|
|
93
|
-
*/
|
|
94
|
-
registerDependencyFactories(factories) {
|
|
95
|
-
factories.forEach((factory) => {
|
|
96
|
-
this.container.resolve(factory).initDependencies(this.container);
|
|
97
111
|
});
|
|
98
112
|
}
|
|
113
|
+
get events() {
|
|
114
|
+
if (this.eventEmitterProxy === undefined) {
|
|
115
|
+
this.eventEmitterProxy = new EventEmitterProxy(this);
|
|
116
|
+
}
|
|
117
|
+
return this.eventEmitterProxy;
|
|
118
|
+
}
|
|
99
119
|
/**
|
|
100
120
|
* Register a non-module value into the current container
|
|
101
121
|
* @param modules
|
|
102
122
|
*/
|
|
103
|
-
// eslint-disable-next-line no-warning-comments
|
|
104
123
|
// TODO Rename to plural since object is param
|
|
105
124
|
registerValue(modules) {
|
|
106
125
|
Object.entries(modules).forEach(([moduleName, useValue]) => {
|
|
@@ -116,7 +135,16 @@ export class ModuleContainer extends ConfigurableModule {
|
|
|
116
135
|
* @param config
|
|
117
136
|
*/
|
|
118
137
|
configure(config) {
|
|
119
|
-
this.
|
|
138
|
+
this.config = config;
|
|
139
|
+
}
|
|
140
|
+
configurePartial(config) {
|
|
141
|
+
this.config = merge(this.currentConfig ?? {}, config);
|
|
142
|
+
}
|
|
143
|
+
get config() {
|
|
144
|
+
return super.config;
|
|
145
|
+
}
|
|
146
|
+
set config(config) {
|
|
147
|
+
super.config = merge(this.currentConfig ?? {}, config);
|
|
120
148
|
}
|
|
121
149
|
/**
|
|
122
150
|
* Resolves a module from the current module container
|
|
@@ -132,10 +160,15 @@ export class ModuleContainer extends ConfigurableModule {
|
|
|
132
160
|
return this.container.resolve(moduleName);
|
|
133
161
|
}
|
|
134
162
|
resolveOrFail(moduleName, moduleType) {
|
|
163
|
+
if (!this.container.isRegistered(moduleName)) {
|
|
164
|
+
throw new Error(`Dependency with token ${moduleName} not registered`);
|
|
165
|
+
}
|
|
135
166
|
const instance = this.container.resolve(moduleName);
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
167
|
+
if (moduleType !== undefined) {
|
|
168
|
+
const isValidModuleInstance = instance instanceof moduleType;
|
|
169
|
+
if (!isValidModuleInstance) {
|
|
170
|
+
throw errors.validModuleInstance(moduleName, moduleType.name);
|
|
171
|
+
}
|
|
139
172
|
}
|
|
140
173
|
return instance;
|
|
141
174
|
}
|
|
@@ -144,12 +177,86 @@ export class ModuleContainer extends ConfigurableModule {
|
|
|
144
177
|
* features or module checks
|
|
145
178
|
*/
|
|
146
179
|
decorateModule(moduleName, containedModule) {
|
|
147
|
-
const config =
|
|
180
|
+
const config = super.config?.[moduleName];
|
|
148
181
|
// eslint-disable-next-line @typescript-eslint/strict-boolean-expressions
|
|
149
182
|
if (!config) {
|
|
150
183
|
throw errors.configNotSetInContainer(moduleName.toString());
|
|
151
184
|
}
|
|
152
|
-
containedModule
|
|
185
|
+
if (containedModule instanceof ModuleContainer) {
|
|
186
|
+
containedModule.configure(config);
|
|
187
|
+
}
|
|
188
|
+
else {
|
|
189
|
+
containedModule.config = config;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
isDependencyFactory(type) {
|
|
193
|
+
return "dependencies" in type;
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Inject a set of dependencies using the given list of DependencyFactories
|
|
197
|
+
* This method should be called during startup
|
|
198
|
+
*/
|
|
199
|
+
initializeDependencyFactories(factories) {
|
|
200
|
+
factories.forEach((factoryName) => {
|
|
201
|
+
this.resolve(factoryName);
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Retrieves all dependencies generated by a particular dependencyfactory
|
|
206
|
+
* and injects them inside this modulecontainer's DI container.
|
|
207
|
+
* This will be automatically called for every module, but can also be called
|
|
208
|
+
* explicitly to initialize an extra factory
|
|
209
|
+
* @param factory
|
|
210
|
+
* @private
|
|
211
|
+
*/
|
|
212
|
+
useDependencyFactory(factory) {
|
|
213
|
+
const dependencies = factory.dependencies();
|
|
214
|
+
// eslint-disable-next-line sonarjs/cognitive-complexity
|
|
215
|
+
Object.entries(dependencies).forEach(([rawKey, declaration]) => {
|
|
216
|
+
const key = rawKey.charAt(0).toUpperCase() + rawKey.slice(1);
|
|
217
|
+
if (!this.container.isRegistered(key) ||
|
|
218
|
+
declaration.forceOverwrite === true) {
|
|
219
|
+
if (this.container.isRegistered(key) &&
|
|
220
|
+
(declaration?.forceOverwrite ?? false)) {
|
|
221
|
+
log.warn(`You are trying to overwrite dependency ${key}, which is already registered. This is currently not supported. Try to define your dependency earlier.`);
|
|
222
|
+
}
|
|
223
|
+
// Find correct provider type and call respective register
|
|
224
|
+
if (isValueProvider(declaration)) {
|
|
225
|
+
this.container.register(key, declaration);
|
|
226
|
+
}
|
|
227
|
+
else if (isFactoryProvider(declaration)) {
|
|
228
|
+
// this enables us to have a singletoned factory
|
|
229
|
+
// that returns the same instance for each resolve
|
|
230
|
+
this.container.register(key, {
|
|
231
|
+
useFactory: instanceCachingFactory(declaration.useFactory),
|
|
232
|
+
});
|
|
233
|
+
}
|
|
234
|
+
else if (isClassProvider(declaration)) {
|
|
235
|
+
this.container.register(key, declaration, {
|
|
236
|
+
lifecycle: Lifecycle.Singleton,
|
|
237
|
+
});
|
|
238
|
+
this.registerAliases(key,
|
|
239
|
+
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
|
|
240
|
+
declaration.useClass);
|
|
241
|
+
// Register static dependencies
|
|
242
|
+
if (this.isDependencyFactory(declaration.useClass)) {
|
|
243
|
+
this.useDependencyFactory(declaration.useClass);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
else if (isTokenProvider(declaration)) {
|
|
247
|
+
this.container.register(key, declaration, {
|
|
248
|
+
lifecycle: Lifecycle.Singleton,
|
|
249
|
+
});
|
|
250
|
+
}
|
|
251
|
+
else {
|
|
252
|
+
// Can never be reached
|
|
253
|
+
throw new Error("Above if-statement is exhaustive");
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
else {
|
|
257
|
+
log.debug(`Dependency ${key} already registered, skipping`);
|
|
258
|
+
}
|
|
259
|
+
});
|
|
153
260
|
}
|
|
154
261
|
/**
|
|
155
262
|
* Handle module resolution, e.g. by decorating resolved modules
|
|
@@ -162,11 +269,37 @@ export class ModuleContainer extends ConfigurableModule {
|
|
|
162
269
|
throw errors.unableToDecorateModule(containedModuleName);
|
|
163
270
|
}
|
|
164
271
|
this.decorateModule(moduleName, containedModule);
|
|
272
|
+
containedModule.create(() => {
|
|
273
|
+
const container = this.container.createChildContainer();
|
|
274
|
+
container.reset();
|
|
275
|
+
return container;
|
|
276
|
+
});
|
|
277
|
+
if (this.isDependencyFactory(containedModule)) {
|
|
278
|
+
this.useDependencyFactory(containedModule);
|
|
279
|
+
}
|
|
165
280
|
}, { frequency: ModuleContainer.moduleDecorationFrequency });
|
|
166
281
|
}
|
|
282
|
+
/**
|
|
283
|
+
* This is a placeholder for individual modules to override.
|
|
284
|
+
* This method will be called whenever the underlying container fully
|
|
285
|
+
* initialized
|
|
286
|
+
*/
|
|
287
|
+
create(childContainerProvider) {
|
|
288
|
+
this.providedContainer = childContainerProvider();
|
|
289
|
+
this.registerValue({
|
|
290
|
+
ChildContainerProvider: () => this.container.createChildContainer(),
|
|
291
|
+
});
|
|
292
|
+
// register all provided modules when the container is created
|
|
293
|
+
this.registerModules(this.definition);
|
|
294
|
+
this.container.register("ParentContainer", { useValue: this });
|
|
295
|
+
}
|
|
296
|
+
get dependencyContainer() {
|
|
297
|
+
return this.container;
|
|
298
|
+
}
|
|
167
299
|
}
|
|
168
300
|
/**
|
|
169
301
|
* Determines how often are modules decorated upon resolution
|
|
170
302
|
* from the tsyringe DI container
|
|
171
303
|
*/
|
|
172
304
|
ModuleContainer.moduleDecorationFrequency = "Once";
|
|
305
|
+
//# sourceMappingURL=ModuleContainer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ModuleContainer.js","sourceRoot":"","sources":["../../src/config/ModuleContainer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Startable.d.ts","sourceRoot":"","sources":["../../src/config/Startable.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,SAAS;IACxB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Startable.js","sourceRoot":"","sources":["../../src/config/Startable.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { TypedClass } from "../types";
|
|
2
|
+
export declare const injectAliasMetadataKey = "protokit-inject-alias";
|
|
3
|
+
/**
|
|
4
|
+
* Attaches metadata to the class that the ModuleContainer can pick up
|
|
5
|
+
* and inject this class in the DI container under the specified aliases.
|
|
6
|
+
* This method supports inheritance, therefore also gets aliases defined
|
|
7
|
+
* on superclasses
|
|
8
|
+
*/
|
|
9
|
+
export declare function injectAlias(aliases: string[]): (target: TypedClass<unknown>) => void;
|
|
10
|
+
/**
|
|
11
|
+
* Marks the class to implement a certain interface T, while also attaching
|
|
12
|
+
* a DI-injection alias as metadata, that will be picked up by the ModuleContainer
|
|
13
|
+
* to allow resolving by that interface name
|
|
14
|
+
* @param name The name of the injection alias, convention is to use the same as the name of T
|
|
15
|
+
*/
|
|
16
|
+
export declare function implement<T>(name: string): (target: TypedClass<T>) => void;
|
|
17
|
+
export declare function getInjectAliases(target: TypedClass<unknown>): string[];
|
|
18
|
+
//# sourceMappingURL=injectAlias.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"injectAlias.d.ts","sourceRoot":"","sources":["../../src/config/injectAlias.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEtC,eAAO,MAAM,sBAAsB,0BAA0B,CAAC;AAE9D;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,YAC3B,WAAW,OAAO,CAAC,UA+BpC;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,YAM7B,WAAW,CAAC,CAAC,UAIxB;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC,GAAG,MAAM,EAAE,CAOtE"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
export const injectAliasMetadataKey = "protokit-inject-alias";
|
|
2
|
+
/**
|
|
3
|
+
* Attaches metadata to the class that the ModuleContainer can pick up
|
|
4
|
+
* and inject this class in the DI container under the specified aliases.
|
|
5
|
+
* This method supports inheritance, therefore also gets aliases defined
|
|
6
|
+
* on superclasses
|
|
7
|
+
*/
|
|
8
|
+
export function injectAlias(aliases) {
|
|
9
|
+
return (target) => {
|
|
10
|
+
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
|
|
11
|
+
const superAliases = Reflect.getMetadata(injectAliasMetadataKey,
|
|
12
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument
|
|
13
|
+
Object.getPrototypeOf(target));
|
|
14
|
+
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
|
|
15
|
+
const existingAliases = Reflect.getMetadata(injectAliasMetadataKey, target);
|
|
16
|
+
let allAliases = aliases;
|
|
17
|
+
if (superAliases !== undefined) {
|
|
18
|
+
allAliases = allAliases.concat(superAliases);
|
|
19
|
+
}
|
|
20
|
+
if (existingAliases !== undefined) {
|
|
21
|
+
allAliases = allAliases.concat(existingAliases);
|
|
22
|
+
}
|
|
23
|
+
Reflect.defineMetadata(injectAliasMetadataKey, allAliases.filter((value, index, array) => array.indexOf(value) === index), target);
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Marks the class to implement a certain interface T, while also attaching
|
|
28
|
+
* a DI-injection alias as metadata, that will be picked up by the ModuleContainer
|
|
29
|
+
* to allow resolving by that interface name
|
|
30
|
+
* @param name The name of the injection alias, convention is to use the same as the name of T
|
|
31
|
+
*/
|
|
32
|
+
export function implement(name) {
|
|
33
|
+
return (
|
|
34
|
+
/**
|
|
35
|
+
* Check if the target class extends RuntimeModule, while
|
|
36
|
+
* also providing static config presets
|
|
37
|
+
*/
|
|
38
|
+
target) => {
|
|
39
|
+
injectAlias([name])(target);
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
export function getInjectAliases(target) {
|
|
43
|
+
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
|
|
44
|
+
const aliases = Reflect.getMetadata(injectAliasMetadataKey, target);
|
|
45
|
+
return aliases ?? [];
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=injectAlias.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"injectAlias.js","sourceRoot":"","sources":["../../src/config/injectAlias.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,sBAAsB,GAAG,uBAAuB,CAAC;AAE9D;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,OAAiB;IAC3C,OAAO,CAAC,MAA2B,EAAE,EAAE;QACrC,yEAAyE;QACzE,MAAM,YAAY,GAAG,OAAO,CAAC,WAAW,CACtC,sBAAsB;QACtB,iEAAiE;QACjE,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CACN,CAAC;QAE1B,yEAAyE;QACzE,MAAM,eAAe,GAAG,OAAO,CAAC,WAAW,CACzC,sBAAsB,EACtB,MAAM,CACiB,CAAC;QAE1B,IAAI,UAAU,GAAG,OAAO,CAAC;QAEzB,IAAI,YAAY,KAAK,SAAS,EAAE;YAC9B,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;SAC9C;QACD,IAAI,eAAe,KAAK,SAAS,EAAE;YACjC,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;SACjD;QAED,OAAO,CAAC,cAAc,CACpB,sBAAsB,EACtB,UAAU,CAAC,MAAM,CACf,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,KAAK,CACxD,EACD,MAAM,CACP,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,SAAS,CAAI,IAAY;IACvC,OAAO;IACL;;;OAGG;IACH,MAAqB,EACrB,EAAE;QACF,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAC9B,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,MAA2B;IAC1D,yEAAyE;IACzE,MAAM,OAAO,GAAG,OAAO,CAAC,WAAW,CACjC,sBAAsB,EACtB,MAAM,CACK,CAAC;IACd,OAAO,OAAO,IAAI,EAAE,CAAC;AACvB,CAAC"}
|
|
@@ -1,5 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ClassProvider, FactoryProvider, TokenProvider, ValueProvider } from "tsyringe";
|
|
2
2
|
import { TypedClass } from "../types";
|
|
3
|
+
import type { BaseModuleInstanceType } from "../config/ModuleContainer";
|
|
4
|
+
export type DependencyDeclaration<Dependency> = ClassProvider<Dependency> | FactoryProvider<Dependency> | TokenProvider<Dependency> | ValueProvider<Dependency>;
|
|
5
|
+
export type DependencyRecord = Record<string, DependencyDeclaration<unknown> & {
|
|
6
|
+
forceOverwrite?: boolean;
|
|
7
|
+
}>;
|
|
3
8
|
/**
|
|
4
9
|
* This is an abstract class for creating DependencyFactories, a pattern
|
|
5
10
|
* to bundle multiple smaller services into one and register them into the
|
|
@@ -11,14 +16,14 @@ import { TypedClass } from "../types";
|
|
|
11
16
|
*
|
|
12
17
|
* DependencyFactories are designed to only be used statically for sets of
|
|
13
18
|
* deps that are necessary for the sequencer to work.
|
|
14
|
-
*
|
|
15
|
-
* Every Factory need the @dependencyFactory annotation (which basically
|
|
16
|
-
* proxies @injectable()) and every method that returns a dependency has to be
|
|
17
|
-
* of the format `() => Dependency` and be annotated with @dependency.
|
|
18
19
|
*/
|
|
19
|
-
export
|
|
20
|
-
|
|
20
|
+
export interface DependencyFactory {
|
|
21
|
+
dependencies: () => DependencyRecord;
|
|
21
22
|
}
|
|
22
|
-
export
|
|
23
|
-
export
|
|
23
|
+
export type TypeFromDependencyDeclaration<Declaration extends DependencyDeclaration<unknown>> = Declaration extends DependencyDeclaration<infer Dependency> ? Dependency : never;
|
|
24
|
+
export type CapitalizeAny<Key extends string | number | symbol> = Key extends string ? Capitalize<Key> : Key;
|
|
25
|
+
export type MapDependencyRecordToTypes<Record extends DependencyRecord> = {
|
|
26
|
+
[Key in keyof Record as CapitalizeAny<Key>]: TypedClass<TypeFromDependencyDeclaration<Record[Key]>>;
|
|
27
|
+
};
|
|
28
|
+
export type InferDependencies<Class extends BaseModuleInstanceType> = Class extends DependencyFactory ? MapDependencyRecordToTypes<ReturnType<Class["dependencies"]>> : never;
|
|
24
29
|
//# sourceMappingURL=DependencyFactory.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DependencyFactory.d.ts","sourceRoot":"","sources":["../../src/dependencyFactory/DependencyFactory.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"DependencyFactory.d.ts","sourceRoot":"","sources":["../../src/dependencyFactory/DependencyFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,eAAe,EACf,aAAa,EACb,aAAa,EACd,MAAM,UAAU,CAAC;AAElB,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAExE,MAAM,MAAM,qBAAqB,CAAC,UAAU,IACxC,aAAa,CAAC,UAAU,CAAC,GACzB,eAAe,CAAC,UAAU,CAAC,GAC3B,aAAa,CAAC,UAAU,CAAC,GACzB,aAAa,CAAC,UAAU,CAAC,CAAC;AAE9B,MAAM,MAAM,gBAAgB,GAAG,MAAM,CACnC,MAAM,EACN,qBAAqB,CAAC,OAAO,CAAC,GAAG;IAAE,cAAc,CAAC,EAAE,OAAO,CAAA;CAAE,CAC9D,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,iBAAiB;IAChC,YAAY,EAAE,MAAM,gBAAgB,CAAC;CACtC;AAED,MAAM,MAAM,6BAA6B,CACvC,WAAW,SAAS,qBAAqB,CAAC,OAAO,CAAC,IAElD,WAAW,SAAS,qBAAqB,CAAC,MAAM,UAAU,CAAC,GACvD,UAAU,GACV,KAAK,CAAC;AAEZ,MAAM,MAAM,aAAa,CAAC,GAAG,SAAS,MAAM,GAAG,MAAM,GAAG,MAAM,IAC5D,GAAG,SAAS,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;AAE7C,MAAM,MAAM,0BAA0B,CAAC,MAAM,SAAS,gBAAgB,IAAI;KACvE,GAAG,IAAI,MAAM,MAAM,IAAI,aAAa,CAAC,GAAG,CAAC,GAAG,UAAU,CACrD,6BAA6B,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAC3C;CACF,CAAC;AAEF,MAAM,MAAM,iBAAiB,CAAC,KAAK,SAAS,sBAAsB,IAChE,KAAK,SAAS,iBAAiB,GAC3B,0BAA0B,CAAC,UAAU,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,GAC7D,KAAK,CAAC"}
|