@forklaunch/core 0.2.20 → 0.2.22

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;IAwD5B,OAAO,CAAC,eAAe;IACvB,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,sBAAsB;IAxDhC,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;gBAyCb,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;IAYV,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,WAAW,IAAI,cAAc,CAAC,EAAE,EAAE,EAAE,CAAC;IAQrC,OAAO,IAAI,IAAI;CAIhB"}
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.createScope()).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' });