@avijs/di 1.0.0-rc.4 → 1.0.0-rc.5

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/inject.d.ts CHANGED
@@ -8,7 +8,7 @@ type Entries = readonly (readonly [Class, readonly Token[]])[];
8
8
  export declare function registerInjects(entries: Entries | (() => Entries)): void;
9
9
  /** Applies lists registered as functions. Avi.js calls it before it reads `static inject`. */
10
10
  export declare function resolveInjects(): void;
11
- /** Why a class cannot be built: it has no dependency list, or one shorter than its constructor. */
12
- export declare function injectListError(name: string, needed: number, list: readonly unknown[] | undefined, where?: string): TypeError;
11
+ /** Why a class cannot be built: its constructor takes arguments and it has no dependency list. */
12
+ export declare function injectListError(name: string, needed: number, where?: string): TypeError;
13
13
  export {};
14
14
  //# sourceMappingURL=inject.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"inject.d.ts","sourceRoot":"","sources":["../src/inject.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,KAAK,KAAK,EAAE,KAAK,KAAK,EAAE,MAAM,YAAY,CAAC;AAE7D,KAAK,OAAO,GAAG,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC;AAM/D;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,CAAC,MAAM,OAAO,CAAC,GAAG,IAAI,CAGxE;AAED,8FAA8F;AAC9F,wBAAgB,cAAc,IAAI,IAAI,CAerC;AAmBD,mGAAmG;AACnG,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,SAAS,OAAO,EAAE,GAAG,SAAS,EACpC,KAAK,CAAC,EAAE,MAAM,GACb,SAAS,CAQX"}
1
+ {"version":3,"file":"inject.d.ts","sourceRoot":"","sources":["../src/inject.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,KAAK,KAAK,EAAE,KAAK,KAAK,EAAE,MAAM,YAAY,CAAC;AAE7D,KAAK,OAAO,GAAG,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC;AAM/D;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,CAAC,MAAM,OAAO,CAAC,GAAG,IAAI,CAGxE;AAED,8FAA8F;AAC9F,wBAAgB,cAAc,IAAI,IAAI,CAiBrC;AAmBD,kGAAkG;AAClG,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAMvF"}
package/dist/inject.js CHANGED
@@ -16,17 +16,19 @@ export function registerInjects(entries) {
16
16
  /** Applies lists registered as functions. Avi.js calls it before it reads `static inject`. */
17
17
  export function resolveInjects() {
18
18
  while (pending.length > 0) {
19
- const next = pending.shift();
19
+ const next = pending[0];
20
20
  let entries;
21
21
  try {
22
22
  entries = next();
23
23
  }
24
24
  catch (error) {
25
+ // It stays queued, so the next app that starts reports the same reason.
25
26
  if (!(error instanceof ReferenceError))
26
27
  throw error;
27
28
  throw new TypeError(`inject.gen.ts lists a class that is not created yet (${error.message}): declare it before the app starts`, { cause: error });
28
29
  }
29
30
  apply(entries);
31
+ pending.shift();
30
32
  }
31
33
  }
32
34
  function apply(entries) {
@@ -44,12 +46,10 @@ function apply(entries) {
44
46
  Object.defineProperty(cls, 'inject', { value: Object.freeze([...tokens]), configurable: true });
45
47
  }
46
48
  }
47
- /** Why a class cannot be built: it has no dependency list, or one shorter than its constructor. */
48
- export function injectListError(name, needed, list, where) {
49
+ /** Why a class cannot be built: its constructor takes arguments and it has no dependency list. */
50
+ export function injectListError(name, needed, where) {
49
51
  const args = `${String(needed)} constructor argument${needed === 1 ? '' : 's'}`;
50
52
  const at = where ? ` (at ${where})` : '';
51
- return new TypeError(list === undefined
52
- ? `${name} has no dependency list for its ${args}${at}: import inject.gen.ts before the app starts, as app.module.ts does, or add static inject. avi dev reports AVI201 when it cannot infer a list`
53
- : `${name} takes ${args} but static inject lists ${String(list.length)}${at}`);
53
+ return new TypeError(`${name} has no dependency list for its ${args}${at}: add import './inject.gen.js' before the app starts, as app.module.ts does, or add static inject. avi dev reports AVI201 when it cannot infer a list`);
54
54
  }
55
55
  //# sourceMappingURL=inject.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"inject.js","sourceRoot":"","sources":["../src/inject.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAA0B,MAAM,YAAY,CAAC;AAI7D,gGAAgG;AAChG,8EAA8E;AAC9E,MAAM,OAAO,GAAsB,EAAE,CAAC;AAEtC;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,OAAkC;IAChE,IAAI,OAAO,OAAO,KAAK,UAAU;QAAE,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;;QACpD,KAAK,CAAC,OAAO,CAAC,CAAC;AACtB,CAAC;AAED,8FAA8F;AAC9F,MAAM,UAAU,cAAc;IAC5B,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,EAAmB,CAAC;QAC9C,IAAI,OAAgB,CAAC;QACrB,IAAI,CAAC;YACH,OAAO,GAAG,IAAI,EAAE,CAAC;QACnB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,CAAC,KAAK,YAAY,cAAc,CAAC;gBAAE,MAAM,KAAK,CAAC;YACpD,MAAM,IAAI,SAAS,CACjB,wDAAwD,KAAK,CAAC,OAAO,qCAAqC,EAC1G,EAAE,KAAK,EAAE,KAAK,EAAE,CACjB,CAAC;QACJ,CAAC;QACD,KAAK,CAAC,OAAO,CAAC,CAAC;IACjB,CAAC;AACH,CAAC;AAED,SAAS,KAAK,CAAC,OAAgB;IAC7B,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACpC,IAAI,OAAO,GAAG,KAAK,UAAU,EAAE,CAAC;YAC9B,MAAM,IAAI,SAAS,CAAC,iEAAiE,CAAC,CAAC;QACzF,CAAC;QACD,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;YAC1B,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACpB,MAAM,IAAI,SAAS,CACjB,+BAA+B,MAAM,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,IAAI,+CAA+C,CACvG,CAAC;YACJ,CAAC;QACH,CAAC,CAAC,CAAC;QACH,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC;YAAE,SAAS;QAC3C,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;IAClG,CAAC;AACH,CAAC;AAED,mGAAmG;AACnG,MAAM,UAAU,eAAe,CAC7B,IAAY,EACZ,MAAc,EACd,IAAoC,EACpC,KAAc;IAEd,MAAM,IAAI,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,wBAAwB,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;IAChF,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,QAAQ,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IACzC,OAAO,IAAI,SAAS,CAClB,IAAI,KAAK,SAAS;QAChB,CAAC,CAAC,GAAG,IAAI,mCAAmC,IAAI,GAAG,EAAE,+IAA+I;QACpM,CAAC,CAAC,GAAG,IAAI,UAAU,IAAI,4BAA4B,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,CAChF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"inject.js","sourceRoot":"","sources":["../src/inject.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAA0B,MAAM,YAAY,CAAC;AAI7D,gGAAgG;AAChG,8EAA8E;AAC9E,MAAM,OAAO,GAAsB,EAAE,CAAC;AAEtC;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,OAAkC;IAChE,IAAI,OAAO,OAAO,KAAK,UAAU;QAAE,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;;QACpD,KAAK,CAAC,OAAO,CAAC,CAAC;AACtB,CAAC;AAED,8FAA8F;AAC9F,MAAM,UAAU,cAAc;IAC5B,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAkB,CAAC;QACzC,IAAI,OAAgB,CAAC;QACrB,IAAI,CAAC;YACH,OAAO,GAAG,IAAI,EAAE,CAAC;QACnB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,wEAAwE;YACxE,IAAI,CAAC,CAAC,KAAK,YAAY,cAAc,CAAC;gBAAE,MAAM,KAAK,CAAC;YACpD,MAAM,IAAI,SAAS,CACjB,wDAAwD,KAAK,CAAC,OAAO,qCAAqC,EAC1G,EAAE,KAAK,EAAE,KAAK,EAAE,CACjB,CAAC;QACJ,CAAC;QACD,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,OAAO,CAAC,KAAK,EAAE,CAAC;IAClB,CAAC;AACH,CAAC;AAED,SAAS,KAAK,CAAC,OAAgB;IAC7B,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACpC,IAAI,OAAO,GAAG,KAAK,UAAU,EAAE,CAAC;YAC9B,MAAM,IAAI,SAAS,CAAC,iEAAiE,CAAC,CAAC;QACzF,CAAC;QACD,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;YAC1B,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACpB,MAAM,IAAI,SAAS,CACjB,+BAA+B,MAAM,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,IAAI,+CAA+C,CACvG,CAAC;YACJ,CAAC;QACH,CAAC,CAAC,CAAC;QACH,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC;YAAE,SAAS;QAC3C,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;IAClG,CAAC;AACH,CAAC;AAED,kGAAkG;AAClG,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,MAAc,EAAE,KAAc;IAC1E,MAAM,IAAI,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,wBAAwB,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;IAChF,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,QAAQ,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IACzC,OAAO,IAAI,SAAS,CAClB,GAAG,IAAI,mCAAmC,IAAI,GAAG,EAAE,uJAAuJ,CAC3M,CAAC;AACJ,CAAC"}
package/dist/provider.js CHANGED
@@ -68,8 +68,9 @@ export function normalizeProvider(provider, where) {
68
68
  }
69
69
  function classSpec(token, cls, scope, where) {
70
70
  const deps = checkInject(cls.inject, `${where} ${cls.name}.inject`);
71
- if (cls.length > deps.length) {
72
- throw injectListError(cls.name || 'Class', cls.length, cls.inject, where);
71
+ // A shorter list is fine: the parameters left out may be optional, which only types can tell.
72
+ if (cls.inject === undefined && cls.length > 0) {
73
+ throw injectListError(cls.name || 'Class', cls.length, where);
73
74
  }
74
75
  const Ctor = cls;
75
76
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"provider.js","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"provider.js","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@avijs/di",
3
- "version": "1.0.0-rc.4",
3
+ "version": "1.0.0-rc.5",
4
4
  "description": "Explicit, reflection-free dependency injection for Avi.js.",
5
5
  "keywords": [
6
6
  "avi",
package/src/inject.ts CHANGED
@@ -19,11 +19,12 @@ export function registerInjects(entries: Entries | (() => Entries)): void {
19
19
  /** Applies lists registered as functions. Avi.js calls it before it reads `static inject`. */
20
20
  export function resolveInjects(): void {
21
21
  while (pending.length > 0) {
22
- const next = pending.shift() as () => Entries;
22
+ const next = pending[0] as () => Entries;
23
23
  let entries: Entries;
24
24
  try {
25
25
  entries = next();
26
26
  } catch (error) {
27
+ // It stays queued, so the next app that starts reports the same reason.
27
28
  if (!(error instanceof ReferenceError)) throw error;
28
29
  throw new TypeError(
29
30
  `inject.gen.ts lists a class that is not created yet (${error.message}): declare it before the app starts`,
@@ -31,6 +32,7 @@ export function resolveInjects(): void {
31
32
  );
32
33
  }
33
34
  apply(entries);
35
+ pending.shift();
34
36
  }
35
37
  }
36
38
 
@@ -51,18 +53,11 @@ function apply(entries: Entries): void {
51
53
  }
52
54
  }
53
55
 
54
- /** Why a class cannot be built: it has no dependency list, or one shorter than its constructor. */
55
- export function injectListError(
56
- name: string,
57
- needed: number,
58
- list: readonly unknown[] | undefined,
59
- where?: string,
60
- ): TypeError {
56
+ /** Why a class cannot be built: its constructor takes arguments and it has no dependency list. */
57
+ export function injectListError(name: string, needed: number, where?: string): TypeError {
61
58
  const args = `${String(needed)} constructor argument${needed === 1 ? '' : 's'}`;
62
59
  const at = where ? ` (at ${where})` : '';
63
60
  return new TypeError(
64
- list === undefined
65
- ? `${name} has no dependency list for its ${args}${at}: import inject.gen.ts before the app starts, as app.module.ts does, or add static inject. avi dev reports AVI201 when it cannot infer a list`
66
- : `${name} takes ${args} but static inject lists ${String(list.length)}${at}`,
61
+ `${name} has no dependency list for its ${args}${at}: add import './inject.gen.js' before the app starts, as app.module.ts does, or add static inject. avi dev reports AVI201 when it cannot infer a list`,
67
62
  );
68
63
  }
package/src/provider.ts CHANGED
@@ -137,8 +137,9 @@ export function normalizeProvider(provider: unknown, where: string): ProviderSpe
137
137
 
138
138
  function classSpec(token: Token, cls: Constructor, scope: Scope, where: string): ProviderSpec {
139
139
  const deps = checkInject(cls.inject, `${where} ${cls.name}.inject`);
140
- if (cls.length > deps.length) {
141
- throw injectListError(cls.name || 'Class', cls.length, cls.inject, where);
140
+ // A shorter list is fine: the parameters left out may be optional, which only types can tell.
141
+ if (cls.inject === undefined && cls.length > 0) {
142
+ throw injectListError(cls.name || 'Class', cls.length, where);
142
143
  }
143
144
  const Ctor = cls as unknown as new (...args: unknown[]) => unknown;
144
145
  return {