@forklaunch/core 0.2.33 → 0.2.34
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/lib/src/services/configInjector.d.ts +1 -1
- package/lib/src/services/configInjector.d.ts.map +1 -1
- package/lib/src/services/configInjector.js +3 -3
- package/lib/src/services/types/configInjector.types.d.ts +2 -0
- package/lib/src/services/types/configInjector.types.d.ts.map +1 -1
- package/lib/tests/configInjector.test.js +11 -10
- package/lib/tests/expressLikeRouterInstantiation.test.js +13 -3
- package/package.json +3 -3
- package/lib/tsconfig.tsbuildinfo +0 -1
@@ -14,7 +14,7 @@ export declare class ConfigInjector<SV extends AnySchemaValidator, CV extends Co
|
|
14
14
|
});
|
15
15
|
validateConfigSingletons(config: Partial<ResolvedConfigValidator<SV, CV>>): ParseResult<unknown>;
|
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?:
|
17
|
+
scopedResolver<T extends keyof CV>(token: T, context?: Record<string, unknown>, resolutionPath?: (keyof CV)[]): (scope?: ConfigInjector<SV, CV>) => ResolvedConfigValidator<SV, CV>[T];
|
18
18
|
createScope(): ConfigInjector<SV, CV>;
|
19
19
|
dispose(): void;
|
20
20
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"configInjector.d.ts","sourceRoot":"","sources":["../../../src/services/configInjector.ts"],"names":[],"mappings":"AACA,OAAO,EACL,kBAAkB,EAClB,WAAW,EAEZ,MAAM,uBAAuB,CAAC;AAC/B,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,EACL,kBAAkB,EAClB,WAAW,EAEZ,MAAM,uBAAuB,CAAC;AAC/B,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;IAgE5B,OAAO,CAAC,eAAe;IACvB,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,sBAAsB;IAhEhC,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;gBAiDb,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,WAAW,CAAC,OAAO,CAAC;IAgBvB,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,cAAc,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,uBAAuB,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IAKzE,WAAW,IAAI,cAAc,CAAC,EAAE,EAAE,EAAE,CAAC;IAQrC,OAAO,IAAI,IAAI;CAIhB"}
|
@@ -28,11 +28,11 @@ export class ConfigInjector {
|
|
28
28
|
.split(',')
|
29
29
|
.map((arg) => arg.split(':')[0].trim())
|
30
30
|
.map((arg) => {
|
31
|
-
|
31
|
+
const newResolutionPath = [...resolutionPath, token];
|
32
32
|
if (resolutionPath.includes(arg)) {
|
33
|
-
throw new Error(`Circular dependency detected: ${
|
33
|
+
throw new Error(`Circular dependency detected: ${newResolutionPath.join(' -> ')} -> ${arg}`);
|
34
34
|
}
|
35
|
-
const resolvedArg = this.resolve(arg, context,
|
35
|
+
const resolvedArg = this.resolve(arg, context, newResolutionPath);
|
36
36
|
return [arg, resolvedArg];
|
37
37
|
}));
|
38
38
|
return definition.factory(resolvedArguments, this.resolve.bind(this), context ?? {});
|
@@ -1,4 +1,5 @@
|
|
1
1
|
import { AnySchemaValidator, IdiomaticSchema, Schema } from '@forklaunch/validator';
|
2
|
+
import { ConfigInjector } from '../configInjector';
|
2
3
|
export declare enum Lifetime {
|
3
4
|
Singleton = 0,
|
4
5
|
Transient = 1,
|
@@ -20,4 +21,5 @@ export type ConfigValidator<SV extends AnySchemaValidator> = Record<string, Func
|
|
20
21
|
export type ResolvedConfigValidator<SV extends AnySchemaValidator, CV extends ConfigValidator<SV>> = {
|
21
22
|
[M in keyof CV]: CV[M] extends SchemaConstructor<SV> ? Schema<InstanceType<CV[M]>, SV> : CV[M] extends SchemaFunction<SV> ? Schema<ReturnType<CV[M]>, SV> : CV[M] extends Function ? ReturnType<CV[M]> : CV[M] extends Constructor ? InstanceType<CV[M]> : Schema<CV[M], SV>;
|
22
23
|
};
|
24
|
+
export type ScopedDependencyFactory<SV extends AnySchemaValidator, CV extends ConfigValidator<SV>, M extends keyof CV> = (scope?: ConfigInjector<SV, CV>) => ResolvedConfigValidator<SV, CV>[M];
|
23
25
|
//# sourceMappingURL=configInjector.types.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"configInjector.types.d.ts","sourceRoot":"","sources":["../../../../src/services/types/configInjector.types.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,MAAM,EACP,MAAM,uBAAuB,CAAC;
|
1
|
+
{"version":3,"file":"configInjector.types.d.ts","sourceRoot":"","sources":["../../../../src/services/types/configInjector.types.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,MAAM,EACP,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,oBAAY,QAAQ;IAClB,SAAS,IAAA;IACT,SAAS,IAAA;IACT,MAAM,IAAA;CACP;AAED,MAAM,MAAM,SAAS,CAAC,KAAK,IAAI;IAC7B,QAAQ,EAAE,QAAQ,CAAC,SAAS,CAAC;IAC7B,KAAK,EAAE,KAAK,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,WAAW,CAAC,IAAI,EAAE,MAAM,IAAI;IACtC,QAAQ,EAAE,QAAQ,CAAC,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC;IAC/C,OAAO,EAAE,CACP,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,CAAC,CAAC,SAAS,MAAM,IAAI,EAC5B,KAAK,EAAE,CAAC,EACR,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC9B,IAAI,CAAC,CAAC,CAAC,EACZ,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC7B,MAAM,CAAC;CACb,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,OAAO,CAAC;AAC5D,MAAM,MAAM,iBAAiB,CAAC,EAAE,SAAS,kBAAkB,IAAI,KAC7D,GAAG,IAAI,EAAE,OAAO,EAAE,KACf,eAAe,CAAC,EAAE,CAAC,CAAC;AACzB,MAAM,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,OAAO,CAAC;AACrD,MAAM,MAAM,cAAc,CAAC,EAAE,SAAS,kBAAkB,IAAI,CAC1D,IAAI,EAAE,OAAO,KACV,eAAe,CAAC,EAAE,CAAC,CAAC;AAEzB,MAAM,MAAM,eAAe,CAAC,EAAE,SAAS,kBAAkB,IAAI,MAAM,CACjE,MAAM,EACJ,QAAQ,GACR,cAAc,CAAC,EAAE,CAAC,GAClB,WAAW,GACX,iBAAiB,CAAC,EAAE,CAAC,GACrB,eAAe,CAAC,EAAE,CAAC,CACtB,CAAC;AAEF,MAAM,MAAM,uBAAuB,CACjC,EAAE,SAAS,kBAAkB,EAC7B,EAAE,SAAS,eAAe,CAAC,EAAE,CAAC,IAC5B;KACD,CAAC,IAAI,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,SAAS,iBAAiB,CAAC,EAAE,CAAC,GAChD,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAC/B,EAAE,CAAC,CAAC,CAAC,SAAS,cAAc,CAAC,EAAE,CAAC,GAC9B,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAC7B,EAAE,CAAC,CAAC,CAAC,SAAS,QAAQ,GACpB,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GACjB,EAAE,CAAC,CAAC,CAAC,SAAS,WAAW,GACvB,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GACnB,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,uBAAuB,CACjC,EAAE,SAAS,kBAAkB,EAC7B,EAAE,SAAS,eAAe,CAAC,EAAE,CAAC,EAC9B,CAAC,SAAS,MAAM,EAAE,IAChB,CAAC,KAAK,CAAC,EAAE,cAAc,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,uBAAuB,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC"}
|
@@ -12,16 +12,17 @@ class X {
|
|
12
12
|
return `${this.a}${this.b()}`;
|
13
13
|
}
|
14
14
|
}
|
15
|
+
const configValidator = {
|
16
|
+
a: string,
|
17
|
+
b: number,
|
18
|
+
c: X,
|
19
|
+
d: number,
|
20
|
+
e: number,
|
21
|
+
f: number,
|
22
|
+
g: number
|
23
|
+
};
|
15
24
|
describe('serviceFactory', () => {
|
16
|
-
const configInjector = new ConfigInjector(SchemaValidator(), {
|
17
|
-
a: string,
|
18
|
-
b: number,
|
19
|
-
c: X,
|
20
|
-
d: number,
|
21
|
-
e: number,
|
22
|
-
f: number,
|
23
|
-
g: number
|
24
|
-
}, {
|
25
|
+
const configInjector = new ConfigInjector(SchemaValidator(), configValidator, {
|
25
26
|
a: {
|
26
27
|
lifetime: Lifetime.Singleton,
|
27
28
|
value: 'a'
|
@@ -39,7 +40,7 @@ describe('serviceFactory', () => {
|
|
39
40
|
},
|
40
41
|
d: {
|
41
42
|
lifetime: Lifetime.Transient,
|
42
|
-
factory: ({ e }) => e
|
43
|
+
factory: ({ a, e }) => e
|
43
44
|
},
|
44
45
|
e: {
|
45
46
|
lifetime: Lifetime.Transient,
|
@@ -56,9 +56,19 @@ const xasd = typedHandler(SchemaValidator(), '/test/:name/:id', 'trace', {
|
|
56
56
|
const l = res.getHeaders()['x-correlation-id'];
|
57
57
|
res.status(200).send(new Date());
|
58
58
|
});
|
59
|
-
const xa = new ForklaunchExpressLikeRouter('/l', SchemaValidator(),
|
60
|
-
|
61
|
-
{}
|
59
|
+
const xa = new ForklaunchExpressLikeRouter('/l', SchemaValidator(), {
|
60
|
+
use: () => { },
|
61
|
+
get: () => { },
|
62
|
+
post: () => { },
|
63
|
+
put: () => { },
|
64
|
+
delete: () => { },
|
65
|
+
all: () => { },
|
66
|
+
connect: () => { },
|
67
|
+
patch: () => { },
|
68
|
+
options: () => { },
|
69
|
+
head: () => { },
|
70
|
+
trace: () => { }
|
71
|
+
});
|
62
72
|
const bl = xa.trace('/test/:name/:id', {
|
63
73
|
name: 'string',
|
64
74
|
summary: 'string',
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@forklaunch/core",
|
3
|
-
"version": "0.2.
|
3
|
+
"version": "0.2.34",
|
4
4
|
"description": "forklaunch-js core package. Contains useful building blocks.",
|
5
5
|
"files": [
|
6
6
|
"lib"
|
@@ -23,8 +23,8 @@
|
|
23
23
|
"openapi3-ts": "^4.4.0",
|
24
24
|
"redis": "^4.7.0",
|
25
25
|
"uuid": "^11.0.3",
|
26
|
-
"@forklaunch/
|
27
|
-
"@forklaunch/
|
26
|
+
"@forklaunch/validator": "0.3.12",
|
27
|
+
"@forklaunch/common": "0.1.13"
|
28
28
|
},
|
29
29
|
"devDependencies": {
|
30
30
|
"@eslint/js": "^9.16.0",
|