@venizia/ignis-inversion 0.2.0 → 0.2.1-1
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/cjs/common/types.d.ts +2 -1
- package/dist/cjs/common/types.d.ts.map +1 -1
- package/dist/cjs/modules/binding/binding.d.ts +3 -0
- package/dist/cjs/modules/binding/binding.d.ts.map +1 -1
- package/dist/cjs/modules/binding/binding.js +8 -6
- package/dist/cjs/modules/binding/binding.js.map +1 -1
- package/dist/cjs/modules/container/base.d.ts +25 -0
- package/dist/cjs/modules/container/base.d.ts.map +1 -1
- package/dist/cjs/modules/container/base.js +84 -26
- package/dist/cjs/modules/container/base.js.map +1 -1
- package/dist/cjs/modules/container/container.d.ts +9 -2
- package/dist/cjs/modules/container/container.d.ts.map +1 -1
- package/dist/cjs/modules/container/container.js +20 -10
- package/dist/cjs/modules/container/container.js.map +1 -1
- package/dist/cjs/modules/registry/registry.d.ts.map +1 -1
- package/dist/cjs/modules/registry/registry.js +4 -2
- package/dist/cjs/modules/registry/registry.js.map +1 -1
- package/dist/esm/common/types.d.ts +2 -1
- package/dist/esm/common/types.d.ts.map +1 -1
- package/dist/esm/modules/binding/binding.d.ts +3 -0
- package/dist/esm/modules/binding/binding.d.ts.map +1 -1
- package/dist/esm/modules/binding/binding.js +8 -6
- package/dist/esm/modules/binding/binding.js.map +1 -1
- package/dist/esm/modules/container/base.d.ts +25 -0
- package/dist/esm/modules/container/base.d.ts.map +1 -1
- package/dist/esm/modules/container/base.js +84 -26
- package/dist/esm/modules/container/base.js.map +1 -1
- package/dist/esm/modules/container/container.d.ts +9 -2
- package/dist/esm/modules/container/container.d.ts.map +1 -1
- package/dist/esm/modules/container/container.js +20 -10
- package/dist/esm/modules/container/container.js.map +1 -1
- package/dist/esm/modules/registry/registry.d.ts.map +1 -1
- package/dist/esm/modules/registry/registry.js +4 -2
- package/dist/esm/modules/registry/registry.js.map +1 -1
- package/package.json +2 -2
|
@@ -13,7 +13,8 @@ export type TValueOrResolver<T> = T | TResolver<T>;
|
|
|
13
13
|
export type TValueOrAsyncResolver<T> = T | TAsyncResolver<T>;
|
|
14
14
|
/** What `@inject({ target })` names: the class, or a function returning it. The function form defers the reference to resolve time, which is how a class reached through an import cycle stays reachable. */
|
|
15
15
|
export type TInjectTarget = TValueOrResolver<TClass<AnyType>>;
|
|
16
|
-
|
|
16
|
+
/** `& {}` keeps the literal set but stops it widening to `string` / `number` in mutable positions; see `TConstValue` in `@venizia/ignis-helpers`. */
|
|
17
|
+
export type TConstValue<T extends TClass<any>> = Extract<ValueOf<T>, string | number> & {};
|
|
17
18
|
export type TBindingKey = string | symbol;
|
|
18
19
|
export interface IBindingTag {
|
|
19
20
|
[name: string]: any;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/common/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC;AAEhD,MAAM,MAAM,cAAc,CAAC,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AAC/C,MAAM,MAAM,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAEpC,MAAM,MAAM,OAAO,GAAG,GAAG,CAAC;AAE1B,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;AACxD,MAAM,MAAM,oBAAoB,CAAC,CAAC,IAAI,QAAQ,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;AACzE,MAAM,MAAM,MAAM,CAAC,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,GAAG;IAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,CAAC;AAEtE,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;AACjD,MAAM,MAAM,cAAc,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AACnE,MAAM,MAAM,gBAAgB,CAAC,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;AACnD,MAAM,MAAM,qBAAqB,CAAC,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;AAE7D,6MAA6M;AAC7M,MAAM,MAAM,aAAa,GAAG,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;AAE9D,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,MAAM,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/common/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC;AAEhD,MAAM,MAAM,cAAc,CAAC,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AAC/C,MAAM,MAAM,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAEpC,MAAM,MAAM,OAAO,GAAG,GAAG,CAAC;AAE1B,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;AACxD,MAAM,MAAM,oBAAoB,CAAC,CAAC,IAAI,QAAQ,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;AACzE,MAAM,MAAM,MAAM,CAAC,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,GAAG;IAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,CAAC;AAEtE,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;AACjD,MAAM,MAAM,cAAc,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AACnE,MAAM,MAAM,gBAAgB,CAAC,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;AACnD,MAAM,MAAM,qBAAqB,CAAC,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;AAE7D,6MAA6M;AAC7M,MAAM,MAAM,aAAa,GAAG,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;AAE9D,qJAAqJ;AACrJ,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,MAAM,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;AAE3F,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,CAAC;AAE1C,MAAM,WAAW,WAAW;IAC1B,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAAC;CACrB"}
|
|
@@ -7,6 +7,7 @@ export declare class Binding<T = any> extends BaseHelper implements IBinding<T>
|
|
|
7
7
|
key: string;
|
|
8
8
|
private bindScope;
|
|
9
9
|
private tags;
|
|
10
|
+
/** Boxed: a singleton may legitimately be `null`, `false`, `0`, `''` or `undefined`. */
|
|
10
11
|
private cached?;
|
|
11
12
|
private resolver;
|
|
12
13
|
constructor(opts: {
|
|
@@ -26,6 +27,8 @@ export declare class Binding<T = any> extends BaseHelper implements IBinding<T>
|
|
|
26
27
|
hasTag(tag: string): boolean;
|
|
27
28
|
getTags(): string[];
|
|
28
29
|
getScope(): TBindingScope;
|
|
30
|
+
/** True when `getValue` answers without building anything: a cached singleton or a plain value. Nothing it reads can form a cycle. */
|
|
31
|
+
isSettled(): boolean;
|
|
29
32
|
getValue(container?: IContainer): T;
|
|
30
33
|
clearCache(): void;
|
|
31
34
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"binding.d.ts","sourceRoot":"","sources":["../../../../src/modules/binding/binding.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAiB,iBAAiB,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACrF,OAAO,EAAE,QAAQ,EAAmB,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAEpG,qBAAa,OAAO,CAAC,CAAC,GAAG,GAAG,CAAE,SAAQ,UAAW,YAAW,QAAQ,CAAC,CAAC,CAAC;IACrE,GAAG,EAAE,MAAM,CAAC;IAEZ,OAAO,CAAC,SAAS,CAA0C;IAC3D,OAAO,CAAC,IAAI,CAAc;IAC1B,OAAO,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"binding.d.ts","sourceRoot":"","sources":["../../../../src/modules/binding/binding.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAiB,iBAAiB,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACrF,OAAO,EAAE,QAAQ,EAAmB,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAEpG,qBAAa,OAAO,CAAC,CAAC,GAAG,GAAG,CAAE,SAAQ,UAAW,YAAW,QAAQ,CAAC,CAAC,CAAC;IACrE,GAAG,EAAE,MAAM,CAAC;IAEZ,OAAO,CAAC,SAAS,CAA0C;IAC3D,OAAO,CAAC,IAAI,CAAc;IAC1B,wFAAwF;IACxF,OAAO,CAAC,MAAM,CAAC,CAAe;IAE9B,OAAO,CAAC,QAAQ,CAG4D;gBAEhE,IAAI,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE;WAajB,IAAI,CAAC,CAAC,GAAG,GAAG,EAAE,IAAI,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,CAAC,CAAC;IAIhE,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI;IAK/B,OAAO,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI;IAKvB,UAAU,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG,IAAI;IAK5C,cAAc,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,WAAW,CAAC,OAAO,iBAAiB,CAAC,CAAA;KAAE,GAAG,qBAAqB,CAAC,CAAC,CAAC;IAU/F,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IAKpC,OAAO,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI;IAKhC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAI5B,OAAO,IAAI,MAAM,EAAE;IAInB,QAAQ,IAAI,aAAa;IAIzB,sIAAsI;IACtI,SAAS,IAAI,OAAO;IAOpB,QAAQ,CAAC,SAAS,CAAC,EAAE,UAAU,GAAG,CAAC;IAuDnC,UAAU;CAGX"}
|
|
@@ -57,9 +57,14 @@ class Binding extends base_helper_1.BaseHelper {
|
|
|
57
57
|
getScope() {
|
|
58
58
|
return this.bindScope;
|
|
59
59
|
}
|
|
60
|
+
/** True when `getValue` answers without building anything: a cached singleton or a plain value. Nothing it reads can form a cycle. */
|
|
61
|
+
isSettled() {
|
|
62
|
+
return ((this.bindScope === constants_1.BindingScopes.SINGLETON && this.cached !== undefined) ||
|
|
63
|
+
this.resolver.type === constants_1.BindingValueTypes.VALUE);
|
|
64
|
+
}
|
|
60
65
|
getValue(container) {
|
|
61
|
-
if (this.bindScope === constants_1.BindingScopes.SINGLETON && this.cached
|
|
62
|
-
return this.cached;
|
|
66
|
+
if (this.bindScope === constants_1.BindingScopes.SINGLETON && this.cached) {
|
|
67
|
+
return this.cached.value;
|
|
63
68
|
}
|
|
64
69
|
let instance;
|
|
65
70
|
const { type: resolverType } = this.resolver;
|
|
@@ -99,14 +104,11 @@ class Binding extends base_helper_1.BaseHelper {
|
|
|
99
104
|
}
|
|
100
105
|
}
|
|
101
106
|
if (this.bindScope === constants_1.BindingScopes.SINGLETON) {
|
|
102
|
-
this.cached = instance;
|
|
107
|
+
this.cached = { value: instance };
|
|
103
108
|
}
|
|
104
109
|
return instance;
|
|
105
110
|
}
|
|
106
111
|
clearCache() {
|
|
107
|
-
if (!this.cached) {
|
|
108
|
-
return;
|
|
109
|
-
}
|
|
110
112
|
this.cached = undefined;
|
|
111
113
|
}
|
|
112
114
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"binding.js","sourceRoot":"","sources":["../../../../src/modules/binding/binding.ts"],"names":[],"mappings":";;;AAAA,oCAAoC;AACpC,sDAAkD;AAGlD,kDAAqF;AACrF,0CAAoG;AAEpG,MAAa,OAAiB,SAAQ,wBAAU;
|
|
1
|
+
{"version":3,"file":"binding.js","sourceRoot":"","sources":["../../../../src/modules/binding/binding.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,10 +10,35 @@ export declare abstract class BaseContainer extends AbstractContainer {
|
|
|
10
10
|
protected isCountingResolutions: boolean;
|
|
11
11
|
/** Whether `startResolutionCounting` has ever run. A report read without it would name every binding, which is a wrong answer rather than an empty one. */
|
|
12
12
|
protected hasStartedResolutionCounting: boolean;
|
|
13
|
+
/** The string each BOUND symbol is stored under: `Symbol('x')` twice is two keys, and both print as "Symbol(x)". */
|
|
14
|
+
protected symbolKeys: Map<symbol, string>;
|
|
15
|
+
/** How many symbols have been bound per description, so a new one gets its suffix in one step. */
|
|
16
|
+
protected symbolDescriptionCounts: Map<string, number>;
|
|
17
|
+
/**
|
|
18
|
+
* Nesting depth of the reads in progress. Past {@link CYCLE_CHECK_DEPTH} the keys are tracked, and
|
|
19
|
+
* a key met again is a cycle: a real graph is far shallower, so the common read pays one counter.
|
|
20
|
+
* Only the synchronous part is checked - a cycle through an `await` is not seen.
|
|
21
|
+
*/
|
|
22
|
+
protected resolutionDepth: number;
|
|
23
|
+
protected resolvingKeys: Set<string>;
|
|
13
24
|
constructor(opts?: {
|
|
14
25
|
scope: string;
|
|
15
26
|
});
|
|
16
27
|
getMetadataRegistry(): import("../registry/registry").MetadataRegistry;
|
|
28
|
+
/**
|
|
29
|
+
* The string a key is stored under, or `undefined` for a symbol that was never bound - a lookup
|
|
30
|
+
* never records one, so reading with throwaway symbols leaves nothing behind.
|
|
31
|
+
*/
|
|
32
|
+
protected toKeyString(opts: {
|
|
33
|
+
key: TBindingKey | {
|
|
34
|
+
namespace: string;
|
|
35
|
+
key: string;
|
|
36
|
+
};
|
|
37
|
+
}): string | undefined;
|
|
38
|
+
/** A bound symbol's own string: its description, suffixed (`Symbol(x)#2`) when another symbol holds it. */
|
|
39
|
+
protected bindSymbolKey(opts: {
|
|
40
|
+
key: symbol;
|
|
41
|
+
}): string;
|
|
17
42
|
bind<T>(opts: {
|
|
18
43
|
key: TBindingKey;
|
|
19
44
|
}): Binding<T>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../../src/modules/container/base.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChE,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAI7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../../src/modules/container/base.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,8 @@ const constants_1 = require("../binding/common/constants");
|
|
|
6
6
|
const error_1 = require("../error");
|
|
7
7
|
const registry_1 = require("../registry/registry");
|
|
8
8
|
const abstract_1 = require("./abstract");
|
|
9
|
+
/** A dependency graph nests far less than this; deeper is all but certainly a cycle, and is checked. */
|
|
10
|
+
const CYCLE_CHECK_DEPTH = 64;
|
|
9
11
|
/** Storage half of the container, keyed by normalized binding-key strings - resolution (`instantiate`) stays abstract, it is the part an implementation swaps. */
|
|
10
12
|
class BaseContainer extends abstract_1.AbstractContainer {
|
|
11
13
|
constructor(opts) {
|
|
@@ -17,49 +19,80 @@ class BaseContainer extends abstract_1.AbstractContainer {
|
|
|
17
19
|
this.isCountingResolutions = false;
|
|
18
20
|
/** Whether `startResolutionCounting` has ever run. A report read without it would name every binding, which is a wrong answer rather than an empty one. */
|
|
19
21
|
this.hasStartedResolutionCounting = false;
|
|
22
|
+
/** The string each BOUND symbol is stored under: `Symbol('x')` twice is two keys, and both print as "Symbol(x)". */
|
|
23
|
+
this.symbolKeys = new Map();
|
|
24
|
+
/** How many symbols have been bound per description, so a new one gets its suffix in one step. */
|
|
25
|
+
this.symbolDescriptionCounts = new Map();
|
|
26
|
+
/**
|
|
27
|
+
* Nesting depth of the reads in progress. Past {@link CYCLE_CHECK_DEPTH} the keys are tracked, and
|
|
28
|
+
* a key met again is a cycle: a real graph is far shallower, so the common read pays one counter.
|
|
29
|
+
* Only the synchronous part is checked - a cycle through an `await` is not seen.
|
|
30
|
+
*/
|
|
31
|
+
this.resolutionDepth = 0;
|
|
32
|
+
this.resolvingKeys = new Set();
|
|
20
33
|
}
|
|
21
34
|
getMetadataRegistry() {
|
|
22
35
|
return registry_1.metadataRegistry;
|
|
23
36
|
}
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
return binding;
|
|
30
|
-
}
|
|
31
|
-
isBound(opts) {
|
|
37
|
+
/**
|
|
38
|
+
* The string a key is stored under, or `undefined` for a symbol that was never bound - a lookup
|
|
39
|
+
* never records one, so reading with throwaway symbols leaves nothing behind.
|
|
40
|
+
*/
|
|
41
|
+
toKeyString(opts) {
|
|
32
42
|
const { key } = opts;
|
|
33
|
-
|
|
34
|
-
return this.bindings.has(keyStr);
|
|
35
|
-
}
|
|
36
|
-
getBinding(opts) {
|
|
37
|
-
let key;
|
|
38
|
-
switch (typeof opts.key) {
|
|
43
|
+
switch (typeof key) {
|
|
39
44
|
case 'string': {
|
|
40
|
-
|
|
41
|
-
break;
|
|
45
|
+
return key;
|
|
42
46
|
}
|
|
43
47
|
case 'symbol': {
|
|
44
|
-
|
|
45
|
-
break;
|
|
48
|
+
return this.symbolKeys.get(key);
|
|
46
49
|
}
|
|
47
50
|
case 'object': {
|
|
48
|
-
|
|
49
|
-
break;
|
|
51
|
+
return constants_1.BindingKeys.build(key);
|
|
50
52
|
}
|
|
51
53
|
default: {
|
|
52
54
|
throw (0, error_1.getError)({
|
|
53
|
-
message: `[getBinding] Invalid binding key type | opts: ${
|
|
55
|
+
message: `[getBinding] Invalid binding key type | opts: ${String(key)} | allowed: [string, symbol, { namespace: string, key: string }]`,
|
|
54
56
|
});
|
|
55
57
|
}
|
|
56
58
|
}
|
|
57
|
-
|
|
59
|
+
}
|
|
60
|
+
/** A bound symbol's own string: its description, suffixed (`Symbol(x)#2`) when another symbol holds it. */
|
|
61
|
+
bindSymbolKey(opts) {
|
|
62
|
+
const { key } = opts;
|
|
63
|
+
const known = this.symbolKeys.get(key);
|
|
64
|
+
if (known !== undefined) {
|
|
65
|
+
return known;
|
|
66
|
+
}
|
|
67
|
+
const description = key.toString();
|
|
68
|
+
const count = (this.symbolDescriptionCounts.get(description) ?? 0) + 1;
|
|
69
|
+
this.symbolDescriptionCounts.set(description, count);
|
|
70
|
+
const keyStr = count === 1 ? description : `${description}#${count}`;
|
|
71
|
+
this.symbolKeys.set(key, keyStr);
|
|
72
|
+
return keyStr;
|
|
73
|
+
}
|
|
74
|
+
bind(opts) {
|
|
75
|
+
const { key } = opts;
|
|
76
|
+
const keyStr = typeof key === 'symbol' ? this.bindSymbolKey({ key }) : key;
|
|
77
|
+
const binding = new binding_1.Binding({ key: keyStr });
|
|
78
|
+
this.bindings.set(keyStr, binding);
|
|
58
79
|
return binding;
|
|
59
80
|
}
|
|
81
|
+
isBound(opts) {
|
|
82
|
+
const keyStr = this.toKeyString({ key: opts.key });
|
|
83
|
+
return keyStr !== undefined && this.bindings.has(keyStr);
|
|
84
|
+
}
|
|
85
|
+
getBinding(opts) {
|
|
86
|
+
const keyStr = this.toKeyString({ key: opts.key });
|
|
87
|
+
return keyStr === undefined ? undefined : this.bindings.get(keyStr);
|
|
88
|
+
}
|
|
60
89
|
unbind(opts) {
|
|
61
|
-
const key =
|
|
62
|
-
|
|
90
|
+
const { key } = opts;
|
|
91
|
+
const keyStr = this.toKeyString({ key });
|
|
92
|
+
if (typeof key === 'symbol') {
|
|
93
|
+
this.symbolKeys.delete(key);
|
|
94
|
+
}
|
|
95
|
+
return keyStr !== undefined && this.bindings.delete(keyStr);
|
|
63
96
|
}
|
|
64
97
|
set(opts) {
|
|
65
98
|
const { binding } = opts;
|
|
@@ -74,11 +107,34 @@ class BaseContainer extends abstract_1.AbstractContainer {
|
|
|
74
107
|
if (this.isCountingResolutions) {
|
|
75
108
|
this.resolutionCounts.set(binding.key, (this.resolutionCounts.get(binding.key) ?? 0) + 1);
|
|
76
109
|
}
|
|
77
|
-
|
|
110
|
+
// The hot path: a cached singleton or a value builds nothing, so it cannot be part of a cycle.
|
|
111
|
+
if (binding.isSettled()) {
|
|
112
|
+
return binding.getValue(this);
|
|
113
|
+
}
|
|
114
|
+
this.resolutionDepth++;
|
|
115
|
+
const isTracked = this.resolutionDepth > CYCLE_CHECK_DEPTH;
|
|
116
|
+
if (isTracked && this.resolvingKeys.has(binding.key)) {
|
|
117
|
+
this.resolutionDepth--;
|
|
118
|
+
throw (0, error_1.getError)({
|
|
119
|
+
message: `Circular dependency | ${[...this.resolvingKeys, binding.key].join(' -> ')}`,
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
if (isTracked) {
|
|
123
|
+
this.resolvingKeys.add(binding.key);
|
|
124
|
+
}
|
|
125
|
+
try {
|
|
126
|
+
return binding.getValue(this);
|
|
127
|
+
}
|
|
128
|
+
finally {
|
|
129
|
+
this.resolutionDepth--;
|
|
130
|
+
if (isTracked) {
|
|
131
|
+
this.resolvingKeys.delete(binding.key);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
78
134
|
}
|
|
79
135
|
if (!isOptional) {
|
|
80
136
|
throw (0, error_1.getError)({
|
|
81
|
-
message: `Binding key: ${
|
|
137
|
+
message: `Binding key: ${typeof key === 'object' ? constants_1.BindingKeys.build(key) : String(key)} is not bounded in context!`,
|
|
82
138
|
});
|
|
83
139
|
}
|
|
84
140
|
return undefined;
|
|
@@ -129,6 +185,8 @@ class BaseContainer extends abstract_1.AbstractContainer {
|
|
|
129
185
|
}
|
|
130
186
|
reset() {
|
|
131
187
|
this.bindings.clear();
|
|
188
|
+
this.symbolKeys.clear();
|
|
189
|
+
this.symbolDescriptionCounts.clear();
|
|
132
190
|
}
|
|
133
191
|
}
|
|
134
192
|
exports.BaseContainer = BaseContainer;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../../../src/modules/container/base.ts"],"names":[],"mappings":";;;AACA,gDAA6C;AAC7C,2DAA0D;AAC1D,oCAAoC;AACpC,mDAAwD;AACxD,yCAA+C;AAE/C,kKAAkK;AAClK,MAAsB,aAAc,SAAQ,4BAAiB;
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../../../src/modules/container/base.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,13 +5,20 @@ export declare class Container extends BaseContainer {
|
|
|
5
5
|
constructor(opts?: {
|
|
6
6
|
scope: string;
|
|
7
7
|
});
|
|
8
|
-
/**
|
|
8
|
+
/**
|
|
9
|
+
* The class form reads the key the REGISTRATION recorded, so a call-site override and an imperative
|
|
10
|
+
* `application.service(X)` both resolve. `@inject` takes a key or a class; metadata a framework
|
|
11
|
+
* writes may carry both, and then the class wins and the key is the fallback for a class nothing
|
|
12
|
+
* recorded - one bound by hand with `bind({ key }).toClass(X)`. An optional class with neither
|
|
13
|
+
* resolves to `undefined`, as an optional key would.
|
|
14
|
+
*/
|
|
9
15
|
protected resolveBindingKey(opts: {
|
|
10
16
|
key?: TBindingKey;
|
|
11
17
|
target?: TInjectTarget;
|
|
18
|
+
isOptional?: boolean;
|
|
12
19
|
cls: TClass<AnyType>;
|
|
13
20
|
at: string;
|
|
14
|
-
}): TBindingKey;
|
|
21
|
+
}): TBindingKey | undefined;
|
|
15
22
|
instantiate<T>(cls: TClass<T>): T;
|
|
16
23
|
}
|
|
17
24
|
//# sourceMappingURL=container.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"container.d.ts","sourceRoot":"","sources":["../../../../src/modules/container/container.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE7E,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAEvC,qGAAqG;AACrG,qBAAa,SAAU,SAAQ,aAAa;gBAC9B,IAAI,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE;IAIpC
|
|
1
|
+
{"version":3,"file":"container.d.ts","sourceRoot":"","sources":["../../../../src/modules/container/container.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE7E,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAEvC,qGAAqG;AACrG,qBAAa,SAAU,SAAQ,aAAa;gBAC9B,IAAI,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE;IAIpC;;;;;;OAMG;IACH,SAAS,CAAC,iBAAiB,CAAC,IAAI,EAAE;QAChC,GAAG,CAAC,EAAE,WAAW,CAAC;QAClB,MAAM,CAAC,EAAE,aAAa,CAAC;QACvB,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,GAAG,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QACrB,EAAE,EAAE,MAAM,CAAC;KACZ,GAAG,WAAW,GAAG,SAAS;IAkClB,WAAW,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC;CAyD3C"}
|
|
@@ -9,10 +9,16 @@ class Container extends base_1.BaseContainer {
|
|
|
9
9
|
constructor(opts) {
|
|
10
10
|
super({ scope: opts?.scope ?? Container.name });
|
|
11
11
|
}
|
|
12
|
-
/**
|
|
12
|
+
/**
|
|
13
|
+
* The class form reads the key the REGISTRATION recorded, so a call-site override and an imperative
|
|
14
|
+
* `application.service(X)` both resolve. `@inject` takes a key or a class; metadata a framework
|
|
15
|
+
* writes may carry both, and then the class wins and the key is the fallback for a class nothing
|
|
16
|
+
* recorded - one bound by hand with `bind({ key }).toClass(X)`. An optional class with neither
|
|
17
|
+
* resolves to `undefined`, as an optional key would.
|
|
18
|
+
*/
|
|
13
19
|
resolveBindingKey(opts) {
|
|
14
|
-
const { key, target: declared, cls, at } = opts;
|
|
15
|
-
if (key !== undefined) {
|
|
20
|
+
const { key, target: declared, isOptional = false, cls, at } = opts;
|
|
21
|
+
if (declared === undefined && key !== undefined) {
|
|
16
22
|
return key;
|
|
17
23
|
}
|
|
18
24
|
if (declared === undefined) {
|
|
@@ -26,7 +32,10 @@ class Container extends base_1.BaseContainer {
|
|
|
26
32
|
message: `[${cls.name}] ${at} names a function that did not return a class`,
|
|
27
33
|
});
|
|
28
34
|
}
|
|
29
|
-
const recorded = this.getMetadataRegistry().getBindingKey({ target });
|
|
35
|
+
const recorded = this.getMetadataRegistry().getBindingKey({ target }) ?? key;
|
|
36
|
+
if (recorded === undefined && isOptional) {
|
|
37
|
+
return undefined;
|
|
38
|
+
}
|
|
30
39
|
if (recorded === undefined) {
|
|
31
40
|
throw (0, error_1.getError)({
|
|
32
41
|
message: `[${cls.name}] ${at} names '${target.name}', which is not registered as an artifact | Decorate it (@service, @repository, ...) or register it on the application before it is injected`,
|
|
@@ -47,13 +56,15 @@ class Container extends base_1.BaseContainer {
|
|
|
47
56
|
message: `[${cls.name}] Constructor parameter ${index} has no @inject | Every parameter of a container-instantiated class must be decorated - the container cannot supply an undecorated one`,
|
|
48
57
|
});
|
|
49
58
|
}
|
|
59
|
+
const isOptional = meta.isOptional ?? false;
|
|
50
60
|
const key = this.resolveBindingKey({
|
|
51
61
|
key: meta.key,
|
|
52
62
|
target: meta.target,
|
|
63
|
+
isOptional,
|
|
53
64
|
cls,
|
|
54
65
|
at: `Constructor parameter ${index}`,
|
|
55
66
|
});
|
|
56
|
-
args[meta.index] = this.get({ key, isOptional
|
|
67
|
+
args[meta.index] = key === undefined ? undefined : this.get({ key, isOptional });
|
|
57
68
|
}
|
|
58
69
|
const instance = new cls(...args);
|
|
59
70
|
const propertyMetadata = registry.getPropertiesMetadata({
|
|
@@ -64,17 +75,16 @@ class Container extends base_1.BaseContainer {
|
|
|
64
75
|
}
|
|
65
76
|
const properties = propertyMetadata.entries();
|
|
66
77
|
for (const [propertyKey, metadata] of properties) {
|
|
78
|
+
const isOptional = metadata.isOptional ?? false;
|
|
67
79
|
const key = this.resolveBindingKey({
|
|
68
80
|
key: metadata.bindingKey,
|
|
69
81
|
target: metadata.target,
|
|
82
|
+
isOptional,
|
|
70
83
|
cls,
|
|
71
84
|
at: `Property '${String(propertyKey)}'`,
|
|
72
85
|
});
|
|
73
|
-
|
|
74
|
-
key,
|
|
75
|
-
isOptional: metadata.isOptional ?? false,
|
|
76
|
-
});
|
|
77
|
-
instance[propertyKey] = dep;
|
|
86
|
+
instance[propertyKey] =
|
|
87
|
+
key === undefined ? undefined : this.get({ key, isOptional });
|
|
78
88
|
}
|
|
79
89
|
return instance;
|
|
80
90
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"container.js","sourceRoot":"","sources":["../../../../src/modules/container/container.ts"],"names":[],"mappings":";;;AAAA,oCAAoC;AAEpC,kDAAyD;AACzD,iCAAuC;AAEvC,qGAAqG;AACrG,MAAa,SAAU,SAAQ,oBAAa;IAC1C,YAAY,IAAwB;QAClC,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;IAClD,CAAC;IAED
|
|
1
|
+
{"version":3,"file":"container.js","sourceRoot":"","sources":["../../../../src/modules/container/container.ts"],"names":[],"mappings":";;;AAAA,oCAAoC;AAEpC,kDAAyD;AACzD,iCAAuC;AAEvC,qGAAqG;AACrG,MAAa,SAAU,SAAQ,oBAAa;IAC1C,YAAY,IAAwB;QAClC,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;IAClD,CAAC;IAED;;;;;;OAMG;IACO,iBAAiB,CAAC,IAM3B;QACC,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,GAAG,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC;QAEpE,IAAI,QAAQ,KAAK,SAAS,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YAChD,OAAO,GAAG,CAAC;QACb,CAAC;QAED,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,MAAM,IAAA,gBAAQ,EAAC;gBACb,OAAO,EAAE,IAAI,GAAG,CAAC,IAAI,KAAK,EAAE,yCAAyC;aACtE,CAAC,CAAC;QACL,CAAC;QAED,MAAM,MAAM,GAAG,IAAA,+BAAmB,EAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;QACzD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,MAAM,IAAA,gBAAQ,EAAC;gBACb,OAAO,EAAE,IAAI,GAAG,CAAC,IAAI,KAAK,EAAE,+CAA+C;aAC5E,CAAC,CAAC;QACL,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC,IAAI,GAAG,CAAC;QAC7E,IAAI,QAAQ,KAAK,SAAS,IAAI,UAAU,EAAE,CAAC;YACzC,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,MAAM,IAAA,gBAAQ,EAAC;gBACb,OAAO,EAAE,IAAI,GAAG,CAAC,IAAI,KAAK,EAAE,WAAW,MAAM,CAAC,IAAI,8IAA8I;aACjM,CAAC,CAAC;QACL,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEQ,WAAW,CAAI,GAAc;QACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAE5C,MAAM,cAAc,GAAG,QAAQ,CAAC,iBAAiB,CAAC;YAChD,MAAM,EAAE,GAAG;SACZ,CAAC,CAAC;QAEH,MAAM,IAAI,GAAU,EAAE,CAAC;QAEvB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,cAAc,EAAE,MAAM,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC;YACnE,MAAM,IAAI,GAAG,cAAc,EAAE,CAAC,KAAK,CAAC,CAAC;YAErC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,MAAM,IAAA,gBAAQ,EAAC;oBACb,OAAO,EAAE,IAAI,GAAG,CAAC,IAAI,2BAA2B,KAAK,wIAAwI;iBAC9L,CAAC,CAAC;YACL,CAAC;YAED,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,KAAK,CAAC;YAC5C,MAAM,GAAG,GAAG,IAAI,CAAC,iBAAiB,CAAC;gBACjC,GAAG,EAAE,IAAI,CAAC,GAAG;gBACb,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,UAAU;gBACV,GAAG;gBACH,EAAE,EAAE,yBAAyB,KAAK,EAAE;aACrC,CAAC,CAAC;YAEH,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,CAAC;QACnF,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;QAElC,MAAM,gBAAgB,GAAG,QAAQ,CAAC,qBAAqB,CAAC;YACtD,MAAM,EAAE,QAAkB;SAC3B,CAAC,CAAC;QAEH,IAAI,CAAC,gBAAgB,EAAE,IAAI,EAAE,CAAC;YAC5B,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,MAAM,UAAU,GAAG,gBAAgB,CAAC,OAAO,EAAE,CAAC;QAC9C,KAAK,MAAM,CAAC,WAAW,EAAE,QAAQ,CAAC,IAAI,UAAU,EAAE,CAAC;YACjD,MAAM,UAAU,GAAG,QAAQ,CAAC,UAAU,IAAI,KAAK,CAAC;YAChD,MAAM,GAAG,GAAG,IAAI,CAAC,iBAAiB,CAAC;gBACjC,GAAG,EAAE,QAAQ,CAAC,UAAU;gBACxB,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,UAAU;gBACV,GAAG;gBACH,EAAE,EAAE,aAAa,MAAM,CAAC,WAAW,CAAC,GAAG;aACxC,CAAC,CAAC;YAEF,QAAgB,CAAC,WAAW,CAAC;gBAC5B,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,CAAC;QAClE,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF;AA7GD,8BA6GC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../../src/modules/registry/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAErD,OAAO,EAAqB,eAAe,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAEvF,+EAA+E;AAC/E,qBAAa,gBAAiB,SAAQ,UAAU;;IAK9C,MAAM,CAAC,MAAM,SAAS,MAAM,GAAG,MAAM,EAAE,KAAK,GAAG,GAAG,EAAE,IAAI,EAAE;QACxD,MAAM,EAAE,MAAM,CAAC;QACf,GAAG,EAAE,WAAW,CAAC;QACjB,KAAK,EAAE,KAAK,CAAC;KACd,GAAG,IAAI;IAaR,GAAG,CAAC,MAAM,SAAS,MAAM,GAAG,MAAM,EAAE,KAAK,GAAG,GAAG,EAAE,IAAI,EAAE;QACrD,MAAM,EAAE,MAAM,CAAC;QACf,GAAG,EAAE,WAAW,CAAC;KAClB,GAAG,KAAK,GAAG,SAAS;IAKrB,GAAG,CAAC,MAAM,SAAS,MAAM,GAAG,MAAM,EAAE,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,WAAW,CAAA;KAAE,GAAG,OAAO;IAKxF,MAAM,CAAC,MAAM,SAAS,MAAM,GAAG,MAAM,EAAE,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,WAAW,CAAA;KAAE,GAAG,OAAO;IAK3F,OAAO,CAAC,MAAM,SAAS,MAAM,GAAG,MAAM,EAAE,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,WAAW,EAAE;IAShF,cAAc,CAAC,CAAC,GAAG,GAAG,EAAE,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAA;KAAE,GAAG,MAAM,EAAE;IAS9D,aAAa,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,IAAI,EAAE;QAAE,MAAM,EAAE,CAAC,CAAA;KAAE,GAAG,IAAI;IASnE,mBAAmB,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,IAAI,EAAE;QACnD,MAAM,EAAE,CAAC,CAAC;QACV,YAAY,EAAE,MAAM,GAAG,MAAM,CAAC;QAC9B,QAAQ,EAAE,iBAAiB,CAAC;KAC7B,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../../src/modules/registry/registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -47,8 +47,10 @@ class MetadataRegistry extends base_helper_1.BaseHelper {
|
|
|
47
47
|
}
|
|
48
48
|
setPropertyMetadata(opts) {
|
|
49
49
|
const { target, propertyName, metadata } = opts;
|
|
50
|
-
|
|
51
|
-
|
|
50
|
+
// Copy-on-write, as for constructor injection: the inherited map belongs to the parent class and
|
|
51
|
+
// every sibling subclass reads it.
|
|
52
|
+
const own = Reflect.getOwnMetadata(constants_1.MetadataKeys.PROPERTIES, target.constructor);
|
|
53
|
+
const properties = own ?? new Map(this.getPropertiesMetadata({ target }));
|
|
52
54
|
properties.set(propertyName, metadata);
|
|
53
55
|
Reflect.defineMetadata(constants_1.MetadataKeys.PROPERTIES, properties, target.constructor);
|
|
54
56
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../../src/modules/registry/registry.ts"],"names":[],"mappings":";;;AAAA,sDAAkD;AAClD,4CAAyC;AAEzC,4DAA4D;AAG5D,+EAA+E;AAC/E,MAAa,gBAAiB,SAAQ,wBAAU;IAC9C;QACE,KAAK,CAAC,EAAE,KAAK,EAAE,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED,MAAM,CAA8C,IAInD;QACC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;QAEpC,eAAM,CAAC,KAAK,CACV,0DAA0D,EAC1D,MAAM,CAAC,WAAW,CAAC,IAAI,EACvB,GAAG,CAAC,QAAQ,EAAE,EACd,KAAK,CACN,CAAC;QAEF,OAAO,CAAC,cAAc,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IAC7C,CAAC;IAED,GAAG,CAA8C,IAGhD;QACC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;QAC7B,OAAO,OAAO,CAAC,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC1C,CAAC;IAED,GAAG,CAAiC,IAA0C;QAC5E,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;QAC7B,OAAO,OAAO,CAAC,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC1C,CAAC;IAED,MAAM,CAAiC,IAA0C;QAC/E,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;QAC7B,OAAO,OAAO,CAAC,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC7C,CAAC;IAED,OAAO,CAAiC,IAAwB;QAC9D,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QACxB,OAAO,CACL,OAAO,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE;YAC5C,OAAO,OAAO,GAAG,KAAK,QAAQ,IAAI,OAAO,GAAG,KAAK,QAAQ,CAAC;QAC5D,CAAC,CAAC,IAAI,EAAE,CACT,CAAC;IACJ,CAAC;IAED,cAAc,CAAU,IAA2B;QACjD,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QACxB,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;QACnC,MAAM,OAAO,GAAG,MAAM,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC,MAAM,CAC1D,IAAI,CAAC,EAAE,CAAC,IAAI,KAAK,aAAa,IAAI,OAAO,SAAS,CAAC,IAAI,CAAC,KAAK,UAAU,CACxE,CAAC;QACF,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,aAAa,CAA4B,IAAmB;QAC1D,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QACxB,MAAM,IAAI,GAAG,OAAO,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QAE7C,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,OAAO,CAAC,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IAED,mBAAmB,CAA4B,IAI9C;QACC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;QAEhD,
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../../src/modules/registry/registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,7 +13,8 @@ export type TValueOrResolver<T> = T | TResolver<T>;
|
|
|
13
13
|
export type TValueOrAsyncResolver<T> = T | TAsyncResolver<T>;
|
|
14
14
|
/** What `@inject({ target })` names: the class, or a function returning it. The function form defers the reference to resolve time, which is how a class reached through an import cycle stays reachable. */
|
|
15
15
|
export type TInjectTarget = TValueOrResolver<TClass<AnyType>>;
|
|
16
|
-
|
|
16
|
+
/** `& {}` keeps the literal set but stops it widening to `string` / `number` in mutable positions; see `TConstValue` in `@venizia/ignis-helpers`. */
|
|
17
|
+
export type TConstValue<T extends TClass<any>> = Extract<ValueOf<T>, string | number> & {};
|
|
17
18
|
export type TBindingKey = string | symbol;
|
|
18
19
|
export interface IBindingTag {
|
|
19
20
|
[name: string]: any;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/common/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC;AAEhD,MAAM,MAAM,cAAc,CAAC,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AAC/C,MAAM,MAAM,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAEpC,MAAM,MAAM,OAAO,GAAG,GAAG,CAAC;AAE1B,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;AACxD,MAAM,MAAM,oBAAoB,CAAC,CAAC,IAAI,QAAQ,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;AACzE,MAAM,MAAM,MAAM,CAAC,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,GAAG;IAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,CAAC;AAEtE,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;AACjD,MAAM,MAAM,cAAc,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AACnE,MAAM,MAAM,gBAAgB,CAAC,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;AACnD,MAAM,MAAM,qBAAqB,CAAC,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;AAE7D,6MAA6M;AAC7M,MAAM,MAAM,aAAa,GAAG,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;AAE9D,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,MAAM,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/common/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC;AAEhD,MAAM,MAAM,cAAc,CAAC,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AAC/C,MAAM,MAAM,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAEpC,MAAM,MAAM,OAAO,GAAG,GAAG,CAAC;AAE1B,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;AACxD,MAAM,MAAM,oBAAoB,CAAC,CAAC,IAAI,QAAQ,MAAM,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;AACzE,MAAM,MAAM,MAAM,CAAC,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,GAAG;IAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,CAAC;AAEtE,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;AACjD,MAAM,MAAM,cAAc,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AACnE,MAAM,MAAM,gBAAgB,CAAC,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;AACnD,MAAM,MAAM,qBAAqB,CAAC,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;AAE7D,6MAA6M;AAC7M,MAAM,MAAM,aAAa,GAAG,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;AAE9D,qJAAqJ;AACrJ,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,MAAM,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;AAE3F,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,CAAC;AAE1C,MAAM,WAAW,WAAW;IAC1B,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAAC;CACrB"}
|
|
@@ -7,6 +7,7 @@ export declare class Binding<T = any> extends BaseHelper implements IBinding<T>
|
|
|
7
7
|
key: string;
|
|
8
8
|
private bindScope;
|
|
9
9
|
private tags;
|
|
10
|
+
/** Boxed: a singleton may legitimately be `null`, `false`, `0`, `''` or `undefined`. */
|
|
10
11
|
private cached?;
|
|
11
12
|
private resolver;
|
|
12
13
|
constructor(opts: {
|
|
@@ -26,6 +27,8 @@ export declare class Binding<T = any> extends BaseHelper implements IBinding<T>
|
|
|
26
27
|
hasTag(tag: string): boolean;
|
|
27
28
|
getTags(): string[];
|
|
28
29
|
getScope(): TBindingScope;
|
|
30
|
+
/** True when `getValue` answers without building anything: a cached singleton or a plain value. Nothing it reads can form a cycle. */
|
|
31
|
+
isSettled(): boolean;
|
|
29
32
|
getValue(container?: IContainer): T;
|
|
30
33
|
clearCache(): void;
|
|
31
34
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"binding.d.ts","sourceRoot":"","sources":["../../../../src/modules/binding/binding.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAiB,iBAAiB,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACrF,OAAO,EAAE,QAAQ,EAAmB,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAEpG,qBAAa,OAAO,CAAC,CAAC,GAAG,GAAG,CAAE,SAAQ,UAAW,YAAW,QAAQ,CAAC,CAAC,CAAC;IACrE,GAAG,EAAE,MAAM,CAAC;IAEZ,OAAO,CAAC,SAAS,CAA0C;IAC3D,OAAO,CAAC,IAAI,CAAc;IAC1B,OAAO,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"binding.d.ts","sourceRoot":"","sources":["../../../../src/modules/binding/binding.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAiB,iBAAiB,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACrF,OAAO,EAAE,QAAQ,EAAmB,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAEpG,qBAAa,OAAO,CAAC,CAAC,GAAG,GAAG,CAAE,SAAQ,UAAW,YAAW,QAAQ,CAAC,CAAC,CAAC;IACrE,GAAG,EAAE,MAAM,CAAC;IAEZ,OAAO,CAAC,SAAS,CAA0C;IAC3D,OAAO,CAAC,IAAI,CAAc;IAC1B,wFAAwF;IACxF,OAAO,CAAC,MAAM,CAAC,CAAe;IAE9B,OAAO,CAAC,QAAQ,CAG4D;gBAEhE,IAAI,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE;WAajB,IAAI,CAAC,CAAC,GAAG,GAAG,EAAE,IAAI,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,CAAC,CAAC;IAIhE,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI;IAK/B,OAAO,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI;IAKvB,UAAU,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG,IAAI;IAK5C,cAAc,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,WAAW,CAAC,OAAO,iBAAiB,CAAC,CAAA;KAAE,GAAG,qBAAqB,CAAC,CAAC,CAAC;IAU/F,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IAKpC,OAAO,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI;IAKhC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAI5B,OAAO,IAAI,MAAM,EAAE;IAInB,QAAQ,IAAI,aAAa;IAIzB,sIAAsI;IACtI,SAAS,IAAI,OAAO;IAOpB,QAAQ,CAAC,SAAS,CAAC,EAAE,UAAU,GAAG,CAAC;IAuDnC,UAAU;CAGX"}
|
|
@@ -54,9 +54,14 @@ export class Binding extends BaseHelper {
|
|
|
54
54
|
getScope() {
|
|
55
55
|
return this.bindScope;
|
|
56
56
|
}
|
|
57
|
+
/** True when `getValue` answers without building anything: a cached singleton or a plain value. Nothing it reads can form a cycle. */
|
|
58
|
+
isSettled() {
|
|
59
|
+
return ((this.bindScope === BindingScopes.SINGLETON && this.cached !== undefined) ||
|
|
60
|
+
this.resolver.type === BindingValueTypes.VALUE);
|
|
61
|
+
}
|
|
57
62
|
getValue(container) {
|
|
58
|
-
if (this.bindScope === BindingScopes.SINGLETON && this.cached
|
|
59
|
-
return this.cached;
|
|
63
|
+
if (this.bindScope === BindingScopes.SINGLETON && this.cached) {
|
|
64
|
+
return this.cached.value;
|
|
60
65
|
}
|
|
61
66
|
let instance;
|
|
62
67
|
const { type: resolverType } = this.resolver;
|
|
@@ -96,14 +101,11 @@ export class Binding extends BaseHelper {
|
|
|
96
101
|
}
|
|
97
102
|
}
|
|
98
103
|
if (this.bindScope === BindingScopes.SINGLETON) {
|
|
99
|
-
this.cached = instance;
|
|
104
|
+
this.cached = { value: instance };
|
|
100
105
|
}
|
|
101
106
|
return instance;
|
|
102
107
|
}
|
|
103
108
|
clearCache() {
|
|
104
|
-
if (!this.cached) {
|
|
105
|
-
return;
|
|
106
|
-
}
|
|
107
109
|
this.cached = undefined;
|
|
108
110
|
}
|
|
109
111
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"binding.js","sourceRoot":"","sources":["../../../../src/modules/binding/binding.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAGlD,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAiB,MAAM,oBAAoB,CAAC;AACrF,OAAO,EAAY,eAAe,EAA2C,MAAM,gBAAgB,CAAC;AAEpG,MAAM,OAAO,OAAiB,SAAQ,UAAU;
|
|
1
|
+
{"version":3,"file":"binding.js","sourceRoot":"","sources":["../../../../src/modules/binding/binding.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,10 +10,35 @@ export declare abstract class BaseContainer extends AbstractContainer {
|
|
|
10
10
|
protected isCountingResolutions: boolean;
|
|
11
11
|
/** Whether `startResolutionCounting` has ever run. A report read without it would name every binding, which is a wrong answer rather than an empty one. */
|
|
12
12
|
protected hasStartedResolutionCounting: boolean;
|
|
13
|
+
/** The string each BOUND symbol is stored under: `Symbol('x')` twice is two keys, and both print as "Symbol(x)". */
|
|
14
|
+
protected symbolKeys: Map<symbol, string>;
|
|
15
|
+
/** How many symbols have been bound per description, so a new one gets its suffix in one step. */
|
|
16
|
+
protected symbolDescriptionCounts: Map<string, number>;
|
|
17
|
+
/**
|
|
18
|
+
* Nesting depth of the reads in progress. Past {@link CYCLE_CHECK_DEPTH} the keys are tracked, and
|
|
19
|
+
* a key met again is a cycle: a real graph is far shallower, so the common read pays one counter.
|
|
20
|
+
* Only the synchronous part is checked - a cycle through an `await` is not seen.
|
|
21
|
+
*/
|
|
22
|
+
protected resolutionDepth: number;
|
|
23
|
+
protected resolvingKeys: Set<string>;
|
|
13
24
|
constructor(opts?: {
|
|
14
25
|
scope: string;
|
|
15
26
|
});
|
|
16
27
|
getMetadataRegistry(): import("../index.js").MetadataRegistry;
|
|
28
|
+
/**
|
|
29
|
+
* The string a key is stored under, or `undefined` for a symbol that was never bound - a lookup
|
|
30
|
+
* never records one, so reading with throwaway symbols leaves nothing behind.
|
|
31
|
+
*/
|
|
32
|
+
protected toKeyString(opts: {
|
|
33
|
+
key: TBindingKey | {
|
|
34
|
+
namespace: string;
|
|
35
|
+
key: string;
|
|
36
|
+
};
|
|
37
|
+
}): string | undefined;
|
|
38
|
+
/** A bound symbol's own string: its description, suffixed (`Symbol(x)#2`) when another symbol holds it. */
|
|
39
|
+
protected bindSymbolKey(opts: {
|
|
40
|
+
key: symbol;
|
|
41
|
+
}): string;
|
|
17
42
|
bind<T>(opts: {
|
|
18
43
|
key: TBindingKey;
|
|
19
44
|
}): Binding<T>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../../src/modules/container/base.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChE,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAI7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../../src/modules/container/base.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,8 @@ import { BindingKeys } from '../binding/common/constants.js';
|
|
|
3
3
|
import { getError } from '../error/index.js';
|
|
4
4
|
import { metadataRegistry } from '../registry/registry.js';
|
|
5
5
|
import { AbstractContainer } from './abstract.js';
|
|
6
|
+
/** A dependency graph nests far less than this; deeper is all but certainly a cycle, and is checked. */
|
|
7
|
+
const CYCLE_CHECK_DEPTH = 64;
|
|
6
8
|
/** Storage half of the container, keyed by normalized binding-key strings - resolution (`instantiate`) stays abstract, it is the part an implementation swaps. */
|
|
7
9
|
export class BaseContainer extends AbstractContainer {
|
|
8
10
|
constructor(opts) {
|
|
@@ -14,49 +16,80 @@ export class BaseContainer extends AbstractContainer {
|
|
|
14
16
|
this.isCountingResolutions = false;
|
|
15
17
|
/** Whether `startResolutionCounting` has ever run. A report read without it would name every binding, which is a wrong answer rather than an empty one. */
|
|
16
18
|
this.hasStartedResolutionCounting = false;
|
|
19
|
+
/** The string each BOUND symbol is stored under: `Symbol('x')` twice is two keys, and both print as "Symbol(x)". */
|
|
20
|
+
this.symbolKeys = new Map();
|
|
21
|
+
/** How many symbols have been bound per description, so a new one gets its suffix in one step. */
|
|
22
|
+
this.symbolDescriptionCounts = new Map();
|
|
23
|
+
/**
|
|
24
|
+
* Nesting depth of the reads in progress. Past {@link CYCLE_CHECK_DEPTH} the keys are tracked, and
|
|
25
|
+
* a key met again is a cycle: a real graph is far shallower, so the common read pays one counter.
|
|
26
|
+
* Only the synchronous part is checked - a cycle through an `await` is not seen.
|
|
27
|
+
*/
|
|
28
|
+
this.resolutionDepth = 0;
|
|
29
|
+
this.resolvingKeys = new Set();
|
|
17
30
|
}
|
|
18
31
|
getMetadataRegistry() {
|
|
19
32
|
return metadataRegistry;
|
|
20
33
|
}
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
return binding;
|
|
27
|
-
}
|
|
28
|
-
isBound(opts) {
|
|
34
|
+
/**
|
|
35
|
+
* The string a key is stored under, or `undefined` for a symbol that was never bound - a lookup
|
|
36
|
+
* never records one, so reading with throwaway symbols leaves nothing behind.
|
|
37
|
+
*/
|
|
38
|
+
toKeyString(opts) {
|
|
29
39
|
const { key } = opts;
|
|
30
|
-
|
|
31
|
-
return this.bindings.has(keyStr);
|
|
32
|
-
}
|
|
33
|
-
getBinding(opts) {
|
|
34
|
-
let key;
|
|
35
|
-
switch (typeof opts.key) {
|
|
40
|
+
switch (typeof key) {
|
|
36
41
|
case 'string': {
|
|
37
|
-
|
|
38
|
-
break;
|
|
42
|
+
return key;
|
|
39
43
|
}
|
|
40
44
|
case 'symbol': {
|
|
41
|
-
|
|
42
|
-
break;
|
|
45
|
+
return this.symbolKeys.get(key);
|
|
43
46
|
}
|
|
44
47
|
case 'object': {
|
|
45
|
-
|
|
46
|
-
break;
|
|
48
|
+
return BindingKeys.build(key);
|
|
47
49
|
}
|
|
48
50
|
default: {
|
|
49
51
|
throw getError({
|
|
50
|
-
message: `[getBinding] Invalid binding key type | opts: ${
|
|
52
|
+
message: `[getBinding] Invalid binding key type | opts: ${String(key)} | allowed: [string, symbol, { namespace: string, key: string }]`,
|
|
51
53
|
});
|
|
52
54
|
}
|
|
53
55
|
}
|
|
54
|
-
|
|
56
|
+
}
|
|
57
|
+
/** A bound symbol's own string: its description, suffixed (`Symbol(x)#2`) when another symbol holds it. */
|
|
58
|
+
bindSymbolKey(opts) {
|
|
59
|
+
const { key } = opts;
|
|
60
|
+
const known = this.symbolKeys.get(key);
|
|
61
|
+
if (known !== undefined) {
|
|
62
|
+
return known;
|
|
63
|
+
}
|
|
64
|
+
const description = key.toString();
|
|
65
|
+
const count = (this.symbolDescriptionCounts.get(description) ?? 0) + 1;
|
|
66
|
+
this.symbolDescriptionCounts.set(description, count);
|
|
67
|
+
const keyStr = count === 1 ? description : `${description}#${count}`;
|
|
68
|
+
this.symbolKeys.set(key, keyStr);
|
|
69
|
+
return keyStr;
|
|
70
|
+
}
|
|
71
|
+
bind(opts) {
|
|
72
|
+
const { key } = opts;
|
|
73
|
+
const keyStr = typeof key === 'symbol' ? this.bindSymbolKey({ key }) : key;
|
|
74
|
+
const binding = new Binding({ key: keyStr });
|
|
75
|
+
this.bindings.set(keyStr, binding);
|
|
55
76
|
return binding;
|
|
56
77
|
}
|
|
78
|
+
isBound(opts) {
|
|
79
|
+
const keyStr = this.toKeyString({ key: opts.key });
|
|
80
|
+
return keyStr !== undefined && this.bindings.has(keyStr);
|
|
81
|
+
}
|
|
82
|
+
getBinding(opts) {
|
|
83
|
+
const keyStr = this.toKeyString({ key: opts.key });
|
|
84
|
+
return keyStr === undefined ? undefined : this.bindings.get(keyStr);
|
|
85
|
+
}
|
|
57
86
|
unbind(opts) {
|
|
58
|
-
const key =
|
|
59
|
-
|
|
87
|
+
const { key } = opts;
|
|
88
|
+
const keyStr = this.toKeyString({ key });
|
|
89
|
+
if (typeof key === 'symbol') {
|
|
90
|
+
this.symbolKeys.delete(key);
|
|
91
|
+
}
|
|
92
|
+
return keyStr !== undefined && this.bindings.delete(keyStr);
|
|
60
93
|
}
|
|
61
94
|
set(opts) {
|
|
62
95
|
const { binding } = opts;
|
|
@@ -71,11 +104,34 @@ export class BaseContainer extends AbstractContainer {
|
|
|
71
104
|
if (this.isCountingResolutions) {
|
|
72
105
|
this.resolutionCounts.set(binding.key, (this.resolutionCounts.get(binding.key) ?? 0) + 1);
|
|
73
106
|
}
|
|
74
|
-
|
|
107
|
+
// The hot path: a cached singleton or a value builds nothing, so it cannot be part of a cycle.
|
|
108
|
+
if (binding.isSettled()) {
|
|
109
|
+
return binding.getValue(this);
|
|
110
|
+
}
|
|
111
|
+
this.resolutionDepth++;
|
|
112
|
+
const isTracked = this.resolutionDepth > CYCLE_CHECK_DEPTH;
|
|
113
|
+
if (isTracked && this.resolvingKeys.has(binding.key)) {
|
|
114
|
+
this.resolutionDepth--;
|
|
115
|
+
throw getError({
|
|
116
|
+
message: `Circular dependency | ${[...this.resolvingKeys, binding.key].join(' -> ')}`,
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
if (isTracked) {
|
|
120
|
+
this.resolvingKeys.add(binding.key);
|
|
121
|
+
}
|
|
122
|
+
try {
|
|
123
|
+
return binding.getValue(this);
|
|
124
|
+
}
|
|
125
|
+
finally {
|
|
126
|
+
this.resolutionDepth--;
|
|
127
|
+
if (isTracked) {
|
|
128
|
+
this.resolvingKeys.delete(binding.key);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
75
131
|
}
|
|
76
132
|
if (!isOptional) {
|
|
77
133
|
throw getError({
|
|
78
|
-
message: `Binding key: ${
|
|
134
|
+
message: `Binding key: ${typeof key === 'object' ? BindingKeys.build(key) : String(key)} is not bounded in context!`,
|
|
79
135
|
});
|
|
80
136
|
}
|
|
81
137
|
return undefined;
|
|
@@ -126,6 +182,8 @@ export class BaseContainer extends AbstractContainer {
|
|
|
126
182
|
}
|
|
127
183
|
reset() {
|
|
128
184
|
this.bindings.clear();
|
|
185
|
+
this.symbolKeys.clear();
|
|
186
|
+
this.symbolDescriptionCounts.clear();
|
|
129
187
|
}
|
|
130
188
|
}
|
|
131
189
|
//# sourceMappingURL=base.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../../../src/modules/container/base.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/C,kKAAkK;AAClK,MAAM,OAAgB,aAAc,SAAQ,iBAAiB;
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../../../src/modules/container/base.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,13 +5,20 @@ export declare class Container extends BaseContainer {
|
|
|
5
5
|
constructor(opts?: {
|
|
6
6
|
scope: string;
|
|
7
7
|
});
|
|
8
|
-
/**
|
|
8
|
+
/**
|
|
9
|
+
* The class form reads the key the REGISTRATION recorded, so a call-site override and an imperative
|
|
10
|
+
* `application.service(X)` both resolve. `@inject` takes a key or a class; metadata a framework
|
|
11
|
+
* writes may carry both, and then the class wins and the key is the fallback for a class nothing
|
|
12
|
+
* recorded - one bound by hand with `bind({ key }).toClass(X)`. An optional class with neither
|
|
13
|
+
* resolves to `undefined`, as an optional key would.
|
|
14
|
+
*/
|
|
9
15
|
protected resolveBindingKey(opts: {
|
|
10
16
|
key?: TBindingKey;
|
|
11
17
|
target?: TInjectTarget;
|
|
18
|
+
isOptional?: boolean;
|
|
12
19
|
cls: TClass<AnyType>;
|
|
13
20
|
at: string;
|
|
14
|
-
}): TBindingKey;
|
|
21
|
+
}): TBindingKey | undefined;
|
|
15
22
|
instantiate<T>(cls: TClass<T>): T;
|
|
16
23
|
}
|
|
17
24
|
//# sourceMappingURL=container.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"container.d.ts","sourceRoot":"","sources":["../../../../src/modules/container/container.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE7E,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAEvC,qGAAqG;AACrG,qBAAa,SAAU,SAAQ,aAAa;gBAC9B,IAAI,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE;IAIpC
|
|
1
|
+
{"version":3,"file":"container.d.ts","sourceRoot":"","sources":["../../../../src/modules/container/container.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE7E,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAEvC,qGAAqG;AACrG,qBAAa,SAAU,SAAQ,aAAa;gBAC9B,IAAI,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE;IAIpC;;;;;;OAMG;IACH,SAAS,CAAC,iBAAiB,CAAC,IAAI,EAAE;QAChC,GAAG,CAAC,EAAE,WAAW,CAAC;QAClB,MAAM,CAAC,EAAE,aAAa,CAAC;QACvB,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,GAAG,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QACrB,EAAE,EAAE,MAAM,CAAC;KACZ,GAAG,WAAW,GAAG,SAAS;IAkClB,WAAW,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC;CAyD3C"}
|
|
@@ -6,10 +6,16 @@ export class Container extends BaseContainer {
|
|
|
6
6
|
constructor(opts) {
|
|
7
7
|
super({ scope: opts?.scope ?? Container.name });
|
|
8
8
|
}
|
|
9
|
-
/**
|
|
9
|
+
/**
|
|
10
|
+
* The class form reads the key the REGISTRATION recorded, so a call-site override and an imperative
|
|
11
|
+
* `application.service(X)` both resolve. `@inject` takes a key or a class; metadata a framework
|
|
12
|
+
* writes may carry both, and then the class wins and the key is the fallback for a class nothing
|
|
13
|
+
* recorded - one bound by hand with `bind({ key }).toClass(X)`. An optional class with neither
|
|
14
|
+
* resolves to `undefined`, as an optional key would.
|
|
15
|
+
*/
|
|
10
16
|
resolveBindingKey(opts) {
|
|
11
|
-
const { key, target: declared, cls, at } = opts;
|
|
12
|
-
if (key !== undefined) {
|
|
17
|
+
const { key, target: declared, isOptional = false, cls, at } = opts;
|
|
18
|
+
if (declared === undefined && key !== undefined) {
|
|
13
19
|
return key;
|
|
14
20
|
}
|
|
15
21
|
if (declared === undefined) {
|
|
@@ -23,7 +29,10 @@ export class Container extends BaseContainer {
|
|
|
23
29
|
message: `[${cls.name}] ${at} names a function that did not return a class`,
|
|
24
30
|
});
|
|
25
31
|
}
|
|
26
|
-
const recorded = this.getMetadataRegistry().getBindingKey({ target });
|
|
32
|
+
const recorded = this.getMetadataRegistry().getBindingKey({ target }) ?? key;
|
|
33
|
+
if (recorded === undefined && isOptional) {
|
|
34
|
+
return undefined;
|
|
35
|
+
}
|
|
27
36
|
if (recorded === undefined) {
|
|
28
37
|
throw getError({
|
|
29
38
|
message: `[${cls.name}] ${at} names '${target.name}', which is not registered as an artifact | Decorate it (@service, @repository, ...) or register it on the application before it is injected`,
|
|
@@ -44,13 +53,15 @@ export class Container extends BaseContainer {
|
|
|
44
53
|
message: `[${cls.name}] Constructor parameter ${index} has no @inject | Every parameter of a container-instantiated class must be decorated - the container cannot supply an undecorated one`,
|
|
45
54
|
});
|
|
46
55
|
}
|
|
56
|
+
const isOptional = meta.isOptional ?? false;
|
|
47
57
|
const key = this.resolveBindingKey({
|
|
48
58
|
key: meta.key,
|
|
49
59
|
target: meta.target,
|
|
60
|
+
isOptional,
|
|
50
61
|
cls,
|
|
51
62
|
at: `Constructor parameter ${index}`,
|
|
52
63
|
});
|
|
53
|
-
args[meta.index] = this.get({ key, isOptional
|
|
64
|
+
args[meta.index] = key === undefined ? undefined : this.get({ key, isOptional });
|
|
54
65
|
}
|
|
55
66
|
const instance = new cls(...args);
|
|
56
67
|
const propertyMetadata = registry.getPropertiesMetadata({
|
|
@@ -61,17 +72,16 @@ export class Container extends BaseContainer {
|
|
|
61
72
|
}
|
|
62
73
|
const properties = propertyMetadata.entries();
|
|
63
74
|
for (const [propertyKey, metadata] of properties) {
|
|
75
|
+
const isOptional = metadata.isOptional ?? false;
|
|
64
76
|
const key = this.resolveBindingKey({
|
|
65
77
|
key: metadata.bindingKey,
|
|
66
78
|
target: metadata.target,
|
|
79
|
+
isOptional,
|
|
67
80
|
cls,
|
|
68
81
|
at: `Property '${String(propertyKey)}'`,
|
|
69
82
|
});
|
|
70
|
-
|
|
71
|
-
key,
|
|
72
|
-
isOptional: metadata.isOptional ?? false,
|
|
73
|
-
});
|
|
74
|
-
instance[propertyKey] = dep;
|
|
83
|
+
instance[propertyKey] =
|
|
84
|
+
key === undefined ? undefined : this.get({ key, isOptional });
|
|
75
85
|
}
|
|
76
86
|
return instance;
|
|
77
87
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"container.js","sourceRoot":"","sources":["../../../../src/modules/container/container.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEpC,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAEvC,qGAAqG;AACrG,MAAM,OAAO,SAAU,SAAQ,aAAa;IAC1C,YAAY,IAAwB;QAClC,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;IAClD,CAAC;IAED
|
|
1
|
+
{"version":3,"file":"container.js","sourceRoot":"","sources":["../../../../src/modules/container/container.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../../src/modules/registry/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAErD,OAAO,EAAqB,eAAe,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAEvF,+EAA+E;AAC/E,qBAAa,gBAAiB,SAAQ,UAAU;;IAK9C,MAAM,CAAC,MAAM,SAAS,MAAM,GAAG,MAAM,EAAE,KAAK,GAAG,GAAG,EAAE,IAAI,EAAE;QACxD,MAAM,EAAE,MAAM,CAAC;QACf,GAAG,EAAE,WAAW,CAAC;QACjB,KAAK,EAAE,KAAK,CAAC;KACd,GAAG,IAAI;IAaR,GAAG,CAAC,MAAM,SAAS,MAAM,GAAG,MAAM,EAAE,KAAK,GAAG,GAAG,EAAE,IAAI,EAAE;QACrD,MAAM,EAAE,MAAM,CAAC;QACf,GAAG,EAAE,WAAW,CAAC;KAClB,GAAG,KAAK,GAAG,SAAS;IAKrB,GAAG,CAAC,MAAM,SAAS,MAAM,GAAG,MAAM,EAAE,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,WAAW,CAAA;KAAE,GAAG,OAAO;IAKxF,MAAM,CAAC,MAAM,SAAS,MAAM,GAAG,MAAM,EAAE,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,WAAW,CAAA;KAAE,GAAG,OAAO;IAK3F,OAAO,CAAC,MAAM,SAAS,MAAM,GAAG,MAAM,EAAE,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,WAAW,EAAE;IAShF,cAAc,CAAC,CAAC,GAAG,GAAG,EAAE,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAA;KAAE,GAAG,MAAM,EAAE;IAS9D,aAAa,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,IAAI,EAAE;QAAE,MAAM,EAAE,CAAC,CAAA;KAAE,GAAG,IAAI;IASnE,mBAAmB,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,IAAI,EAAE;QACnD,MAAM,EAAE,CAAC,CAAC;QACV,YAAY,EAAE,MAAM,GAAG,MAAM,CAAC;QAC9B,QAAQ,EAAE,iBAAiB,CAAC;KAC7B,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../../src/modules/registry/registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -44,8 +44,10 @@ export class MetadataRegistry extends BaseHelper {
|
|
|
44
44
|
}
|
|
45
45
|
setPropertyMetadata(opts) {
|
|
46
46
|
const { target, propertyName, metadata } = opts;
|
|
47
|
-
|
|
48
|
-
|
|
47
|
+
// Copy-on-write, as for constructor injection: the inherited map belongs to the parent class and
|
|
48
|
+
// every sibling subclass reads it.
|
|
49
|
+
const own = Reflect.getOwnMetadata(MetadataKeys.PROPERTIES, target.constructor);
|
|
50
|
+
const properties = own ?? new Map(this.getPropertiesMetadata({ target }));
|
|
49
51
|
properties.set(propertyName, metadata);
|
|
50
52
|
Reflect.defineMetadata(MetadataKeys.PROPERTIES, properties, target.constructor);
|
|
51
53
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../../src/modules/registry/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAEzC,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAG5D,+EAA+E;AAC/E,MAAM,OAAO,gBAAiB,SAAQ,UAAU;IAC9C;QACE,KAAK,CAAC,EAAE,KAAK,EAAE,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED,MAAM,CAA8C,IAInD;QACC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;QAEpC,MAAM,CAAC,KAAK,CACV,0DAA0D,EAC1D,MAAM,CAAC,WAAW,CAAC,IAAI,EACvB,GAAG,CAAC,QAAQ,EAAE,EACd,KAAK,CACN,CAAC;QAEF,OAAO,CAAC,cAAc,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IAC7C,CAAC;IAED,GAAG,CAA8C,IAGhD;QACC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;QAC7B,OAAO,OAAO,CAAC,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC1C,CAAC;IAED,GAAG,CAAiC,IAA0C;QAC5E,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;QAC7B,OAAO,OAAO,CAAC,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC1C,CAAC;IAED,MAAM,CAAiC,IAA0C;QAC/E,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;QAC7B,OAAO,OAAO,CAAC,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC7C,CAAC;IAED,OAAO,CAAiC,IAAwB;QAC9D,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QACxB,OAAO,CACL,OAAO,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE;YAC5C,OAAO,OAAO,GAAG,KAAK,QAAQ,IAAI,OAAO,GAAG,KAAK,QAAQ,CAAC;QAC5D,CAAC,CAAC,IAAI,EAAE,CACT,CAAC;IACJ,CAAC;IAED,cAAc,CAAU,IAA2B;QACjD,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QACxB,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;QACnC,MAAM,OAAO,GAAG,MAAM,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC,MAAM,CAC1D,IAAI,CAAC,EAAE,CAAC,IAAI,KAAK,aAAa,IAAI,OAAO,SAAS,CAAC,IAAI,CAAC,KAAK,UAAU,CACxE,CAAC;QACF,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,aAAa,CAA4B,IAAmB;QAC1D,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QACxB,MAAM,IAAI,GAAG,OAAO,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QAE7C,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,OAAO,CAAC,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IAED,mBAAmB,CAA4B,IAI9C;QACC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;QAEhD,
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../../src/modules/registry/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAEzC,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAG5D,+EAA+E;AAC/E,MAAM,OAAO,gBAAiB,SAAQ,UAAU;IAC9C;QACE,KAAK,CAAC,EAAE,KAAK,EAAE,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED,MAAM,CAA8C,IAInD;QACC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;QAEpC,MAAM,CAAC,KAAK,CACV,0DAA0D,EAC1D,MAAM,CAAC,WAAW,CAAC,IAAI,EACvB,GAAG,CAAC,QAAQ,EAAE,EACd,KAAK,CACN,CAAC;QAEF,OAAO,CAAC,cAAc,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IAC7C,CAAC;IAED,GAAG,CAA8C,IAGhD;QACC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;QAC7B,OAAO,OAAO,CAAC,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC1C,CAAC;IAED,GAAG,CAAiC,IAA0C;QAC5E,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;QAC7B,OAAO,OAAO,CAAC,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC1C,CAAC;IAED,MAAM,CAAiC,IAA0C;QAC/E,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;QAC7B,OAAO,OAAO,CAAC,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC7C,CAAC;IAED,OAAO,CAAiC,IAAwB;QAC9D,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QACxB,OAAO,CACL,OAAO,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE;YAC5C,OAAO,OAAO,GAAG,KAAK,QAAQ,IAAI,OAAO,GAAG,KAAK,QAAQ,CAAC;QAC5D,CAAC,CAAC,IAAI,EAAE,CACT,CAAC;IACJ,CAAC;IAED,cAAc,CAAU,IAA2B;QACjD,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QACxB,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;QACnC,MAAM,OAAO,GAAG,MAAM,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC,MAAM,CAC1D,IAAI,CAAC,EAAE,CAAC,IAAI,KAAK,aAAa,IAAI,OAAO,SAAS,CAAC,IAAI,CAAC,KAAK,UAAU,CACxE,CAAC;QACF,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,aAAa,CAA4B,IAAmB;QAC1D,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QACxB,MAAM,IAAI,GAAG,OAAO,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QAE7C,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,OAAO,CAAC,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IAED,mBAAmB,CAA4B,IAI9C;QACC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;QAEhD,iGAAiG;QACjG,mCAAmC;QACnC,MAAM,GAAG,GAAwD,OAAO,CAAC,cAAc,CACrF,YAAY,CAAC,UAAU,EACvB,MAAM,CAAC,WAAW,CACnB,CAAC;QACF,MAAM,UAAU,GAAG,GAAG,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;QAE1E,UAAU,CAAC,GAAG,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;QACvC,OAAO,CAAC,cAAc,CAAC,YAAY,CAAC,UAAU,EAAE,UAAU,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;IAClF,CAAC;IAED,qBAAqB,CAA4B,IAEhD;QACC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QACxB,OAAO,OAAO,CAAC,WAAW,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;IAC1E,CAAC;IAED,mBAAmB,CAA4B,IAG9C;QACC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC;QACtC,MAAM,UAAU,GAAG,IAAI,CAAC,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;QAC1D,OAAO,UAAU,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC;IACvC,CAAC;IAED,iBAAiB,CAA4B,IAI5C;QACC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;QACzC,qGAAqG;QACrG,MAAM,GAAG,GAAkC,OAAO,CAAC,cAAc,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC/F,MAAM,OAAO,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACrF,OAAO,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC;QAC1B,OAAO,CAAC,cAAc,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IAC/D,CAAC;IAED,iBAAiB,CAA4B,IAAmB;QAC9D,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QACxB,OAAO,OAAO,CAAC,WAAW,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1D,CAAC;IAED,oHAAoH;IACpH,aAAa,CAA4B,IAIxC;QACC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,aAAa,GAAG,KAAK,EAAE,GAAG,IAAI,CAAC;QACpD,MAAM,OAAO,GAAkC,OAAO,CAAC,cAAc,CACnE,YAAY,CAAC,WAAW,EACxB,MAAM,CACP,CAAC;QAEF,6FAA6F;QAC7F,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,IAAI,CAAC,aAAa,EAAE,CAAC;YAC7F,MAAM,CAAC,IAAI,CACT,gFAAgF,EAC/E,MAA4B,CAAC,IAAI,EAClC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,EACtB,GAAG,CAAC,QAAQ,EAAE,CACf,CAAC;QACJ,CAAC;QAED,OAAO,CAAC,cAAc,CAAC,YAAY,CAAC,WAAW,EAAE,EAAE,GAAG,EAAE,aAAa,EAAE,EAAE,MAAM,CAAC,CAAC;IACnF,CAAC;IAED,2GAA2G;IAC3G,aAAa,CAA4B,IAAmB;QAC1D,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QACxB,MAAM,MAAM,GAAkC,OAAO,CAAC,cAAc,CAClE,YAAY,CAAC,WAAW,EACxB,MAAM,CACP,CAAC;QACF,OAAO,MAAM,EAAE,GAAG,CAAC;IACrB,CAAC;CACF;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,EAAE,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@venizia/ignis-inversion",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.1-1",
|
|
4
4
|
"description": "Lightweight, high-performance Dependency Injection and Inversion of Control container for TypeScript (~350 lines). Features decorator-based constructor and property injection, fluent Binding API, singleton/transient scoping, namespace auto-tagging, Provider pattern, tag-based discovery, and reflect-metadata integration. Inspired by LoopBack 4 and InversifyJS but simpler. Zero framework lock-in — works standalone or with Ignis.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"architecture",
|
|
@@ -110,7 +110,7 @@
|
|
|
110
110
|
},
|
|
111
111
|
"devDependencies": {
|
|
112
112
|
"@types/bun": "^1.4.1",
|
|
113
|
-
"@venizia/dev-configs": "^0.2.0",
|
|
113
|
+
"@venizia/dev-configs": "^0.2.1-0",
|
|
114
114
|
"eslint": "^10.10.0",
|
|
115
115
|
"prettier": "^3.9.6",
|
|
116
116
|
"tsc-alias": "^1.9.4",
|