@forklaunch/core 0.2.20 → 0.2.21
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.
@@ -14,6 +14,7 @@ export declare class ConfigInjector<SV extends AnySchemaValidator, CV extends Co
|
|
14
14
|
});
|
15
15
|
validateConfigSingletons(config: Partial<ResolvedConfigValidator<SV, CV>>): boolean;
|
16
16
|
resolve<T extends keyof CV>(token: T, context?: Record<string, unknown>, resolutionPath?: (keyof CV)[]): ResolvedConfigValidator<SV, CV>[T];
|
17
|
+
scopedResolver<T extends keyof CV>(token: T, context?: Record<string, unknown>, resolutionPath?: (keyof CV)[]): (scope?: typeof this) => ResolvedConfigValidator<SV, CV>[T];
|
17
18
|
createScope(): ConfigInjector<SV, CV>;
|
18
19
|
dispose(): void;
|
19
20
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"configInjector.d.ts","sourceRoot":"","sources":["../../../src/services/configInjector.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAmB,MAAM,uBAAuB,CAAC;AAC5E,OAAO,EACL,eAAe,EACf,WAAW,EAEX,uBAAuB,EACvB,SAAS,EACV,MAAM,8BAA8B,CAAC;AAEtC,qBAAa,cAAc,CACzB,EAAE,SAAS,kBAAkB,EAC7B,EAAE,SAAS,eAAe,CAAC,EAAE,CAAC;
|
1
|
+
{"version":3,"file":"configInjector.d.ts","sourceRoot":"","sources":["../../../src/services/configInjector.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAmB,MAAM,uBAAuB,CAAC;AAC5E,OAAO,EACL,eAAe,EACf,WAAW,EAEX,uBAAuB,EACvB,SAAS,EACV,MAAM,8BAA8B,CAAC;AAEtC,qBAAa,cAAc,CACzB,EAAE,SAAS,kBAAkB,EAC7B,EAAE,SAAS,eAAe,CAAC,EAAE,CAAC;IAiE5B,OAAO,CAAC,eAAe;IACvB,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,sBAAsB;IAjEhC,SAAS,EAAE;SACR,CAAC,IAAI,MAAM,EAAE,CAAC,CAAC,EAAE,uBAAuB,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;KACrD,CAAM;IAEP,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,eAAe;gBAkDb,eAAe,EAAE,EAAE,EACnB,YAAY,EAAE,EAAE,EAChB,sBAAsB,EAAE;SAC7B,CAAC,IAAI,MAAM,EAAE,GACV,SAAS,CAAC,uBAAuB,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAC7C,WAAW,CACT,IAAI,CAAC,uBAAuB,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EACxC,uBAAuB,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CACnC;KACN;IAKH,wBAAwB,CACtB,MAAM,EAAE,OAAO,CAAC,uBAAuB,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,GAC/C,OAAO;IAcV,OAAO,CAAC,CAAC,SAAS,MAAM,EAAE,EACxB,KAAK,EAAE,CAAC,EACR,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,cAAc,GAAE,CAAC,MAAM,EAAE,CAAC,EAAO,GAChC,uBAAuB,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IA2CrC,cAAc,CAAC,CAAC,SAAS,MAAM,EAAE,EAC/B,KAAK,EAAE,CAAC,EACR,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,cAAc,GAAE,CAAC,MAAM,EAAE,CAAC,EAAO,GAChC,CAAC,KAAK,CAAC,EAAE,OAAO,IAAI,KAAK,uBAAuB,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IAK9D,WAAW,IAAI,cAAc,CAAC,EAAE,EAAE,EAAE,CAAC;IAQrC,OAAO,IAAI,IAAI;CAIhB"}
|
@@ -15,6 +15,10 @@ export class ConfigInjector {
|
|
15
15
|
}
|
16
16
|
resolveInstance(token, definition, context, resolutionPath = []) {
|
17
17
|
const injectorArgument = extractArgumentNames(definition.factory)[0];
|
18
|
+
// short circuit as no args
|
19
|
+
if (injectorArgument === '_args') {
|
20
|
+
return definition.factory({}, this.resolve.bind(this), context ?? {});
|
21
|
+
}
|
18
22
|
if (!injectorArgument.startsWith('{') || !injectorArgument.endsWith('}')) {
|
19
23
|
throw new Error(`Invalid injector argument for ${String(token)}: ${injectorArgument}. Please use object destructuring syntax: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment.`);
|
20
24
|
}
|
@@ -22,7 +26,7 @@ export class ConfigInjector {
|
|
22
26
|
.replace('{', '')
|
23
27
|
.replace('}', '')
|
24
28
|
.split(',')
|
25
|
-
.map((arg) => arg.trim())
|
29
|
+
.map((arg) => arg.split(':')[0].trim())
|
26
30
|
.map((arg) => {
|
27
31
|
resolutionPath = [...resolutionPath, token];
|
28
32
|
if (resolutionPath.includes(arg)) {
|
@@ -40,7 +44,7 @@ export class ConfigInjector {
|
|
40
44
|
this.loadSingletons();
|
41
45
|
}
|
42
46
|
validateConfigSingletons(config) {
|
43
|
-
return this.schemaValidator.validate(Object.fromEntries(Object.entries(this.configShapes).filter(([key]) => this.dependenciesDefinition[key].lifetime === Lifetime.Singleton)), config);
|
47
|
+
return this.schemaValidator.validate(this.schemaValidator.schemify(Object.fromEntries(Object.entries(this.configShapes).filter(([key]) => this.dependenciesDefinition[key].lifetime === Lifetime.Singleton))), config);
|
44
48
|
}
|
45
49
|
resolve(token, context, resolutionPath = []) {
|
46
50
|
const instance = this.instances[token];
|
@@ -71,6 +75,9 @@ export class ConfigInjector {
|
|
71
75
|
return instance;
|
72
76
|
}
|
73
77
|
}
|
78
|
+
scopedResolver(token, context, resolutionPath = []) {
|
79
|
+
return (scope) => (scope ?? this).resolve(token, context, resolutionPath);
|
80
|
+
}
|
74
81
|
createScope() {
|
75
82
|
return new ConfigInjector(this.schemaValidator, this.configShapes, this.dependenciesDefinition);
|
76
83
|
}
|
@@ -19,7 +19,8 @@ describe('serviceFactory', () => {
|
|
19
19
|
c: X,
|
20
20
|
d: number,
|
21
21
|
e: number,
|
22
|
-
f: number
|
22
|
+
f: number,
|
23
|
+
g: number
|
23
24
|
}, {
|
24
25
|
a: {
|
25
26
|
lifetime: Lifetime.Singleton,
|
@@ -47,6 +48,10 @@ describe('serviceFactory', () => {
|
|
47
48
|
f: {
|
48
49
|
lifetime: Lifetime.Transient,
|
49
50
|
factory: ({ d }) => d
|
51
|
+
},
|
52
|
+
g: {
|
53
|
+
lifetime: Lifetime.Transient,
|
54
|
+
factory: (_args) => 6
|
50
55
|
}
|
51
56
|
});
|
52
57
|
test('loadSingletons', () => {
|
@@ -84,6 +89,14 @@ describe('serviceFactory', () => {
|
|
84
89
|
expect(scope).toBeInstanceOf(ConfigInjector);
|
85
90
|
expect(scope.instances).not.toEqual(configInjector.instances);
|
86
91
|
});
|
92
|
+
test('scoped resolver', () => {
|
93
|
+
const scope = configInjector.createScope();
|
94
|
+
scope.resolve('c', {
|
95
|
+
num: 5
|
96
|
+
});
|
97
|
+
expect(configInjector.resolve('c').dummy()).toEqual('a20');
|
98
|
+
expect(configInjector.scopedResolver('c')(scope).dummy()).toEqual('a25');
|
99
|
+
});
|
87
100
|
test('dispose', () => {
|
88
101
|
configInjector.dispose();
|
89
102
|
expect(configInjector.instances).toEqual({ a: 'a' });
|