@venizia/ignis-inversion 0.2.0-9 → 0.2.1-0
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/LICENSE.md +0 -1
- package/README.md +83 -117
- package/dist/cjs/common/utilities.d.ts +31 -3
- package/dist/cjs/common/utilities.d.ts.map +1 -1
- package/dist/cjs/common/utilities.js +61 -5
- package/dist/cjs/common/utilities.js.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/binding/common/constants.d.ts.map +1 -1
- package/dist/cjs/modules/binding/common/constants.js +2 -6
- package/dist/cjs/modules/binding/common/constants.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 +21 -11
- package/dist/cjs/modules/container/container.js.map +1 -1
- package/dist/cjs/modules/error/app-error.js +2 -5
- package/dist/cjs/modules/error/app-error.js.map +1 -1
- package/dist/cjs/modules/registry/registry.d.ts.map +1 -1
- package/dist/cjs/modules/registry/registry.js +7 -3
- package/dist/cjs/modules/registry/registry.js.map +1 -1
- package/dist/esm/common/index.d.ts +4 -4
- package/dist/esm/common/index.js +4 -4
- package/dist/esm/common/utilities.d.ts +32 -4
- package/dist/esm/common/utilities.d.ts.map +1 -1
- package/dist/esm/common/utilities.js +58 -4
- package/dist/esm/common/utilities.js.map +1 -1
- package/dist/esm/index.d.ts +2 -2
- package/dist/esm/index.js +4 -4
- package/dist/esm/modules/binding/binding.d.ts +8 -5
- package/dist/esm/modules/binding/binding.d.ts.map +1 -1
- package/dist/esm/modules/binding/binding.js +12 -10
- package/dist/esm/modules/binding/binding.js.map +1 -1
- package/dist/esm/modules/binding/common/constants.d.ts +1 -1
- package/dist/esm/modules/binding/common/constants.d.ts.map +1 -1
- package/dist/esm/modules/binding/common/constants.js +3 -4
- package/dist/esm/modules/binding/common/constants.js.map +1 -1
- package/dist/esm/modules/binding/common/index.d.ts +2 -2
- package/dist/esm/modules/binding/common/index.js +2 -2
- package/dist/esm/modules/binding/common/types.d.ts +3 -3
- package/dist/esm/modules/binding/index.d.ts +2 -2
- package/dist/esm/modules/binding/index.js +2 -2
- package/dist/esm/modules/container/abstract.d.ts +5 -5
- package/dist/esm/modules/container/abstract.js +1 -1
- package/dist/esm/modules/container/base.d.ts +29 -4
- package/dist/esm/modules/container/base.d.ts.map +1 -1
- package/dist/esm/modules/container/base.js +89 -31
- package/dist/esm/modules/container/base.js.map +1 -1
- package/dist/esm/modules/container/common/index.d.ts +1 -1
- package/dist/esm/modules/container/common/index.js +1 -1
- package/dist/esm/modules/container/common/types.d.ts +3 -3
- package/dist/esm/modules/container/container.d.ts +11 -4
- package/dist/esm/modules/container/container.d.ts.map +1 -1
- package/dist/esm/modules/container/container.js +24 -14
- package/dist/esm/modules/container/container.js.map +1 -1
- package/dist/esm/modules/container/index.d.ts +4 -4
- package/dist/esm/modules/container/index.js +4 -4
- package/dist/esm/modules/error/app-error.d.ts +1 -1
- package/dist/esm/modules/error/app-error.js +3 -3
- package/dist/esm/modules/error/app-error.js.map +1 -1
- package/dist/esm/modules/error/common/index.d.ts +1 -1
- package/dist/esm/modules/error/common/index.js +1 -1
- package/dist/esm/modules/error/common/types.d.ts +1 -1
- package/dist/esm/modules/error/definition.d.ts +1 -1
- package/dist/esm/modules/error/index.d.ts +4 -4
- package/dist/esm/modules/error/index.js +4 -4
- package/dist/esm/modules/error/message-code.d.ts +2 -2
- package/dist/esm/modules/index.d.ts +5 -5
- package/dist/esm/modules/index.js +5 -5
- package/dist/esm/modules/metadata/common/index.d.ts +1 -1
- package/dist/esm/modules/metadata/common/index.js +1 -1
- package/dist/esm/modules/metadata/index.d.ts +2 -2
- package/dist/esm/modules/metadata/index.js +2 -2
- package/dist/esm/modules/metadata/injectors.d.ts +2 -2
- package/dist/esm/modules/metadata/injectors.js +2 -2
- package/dist/esm/modules/registry/common/index.d.ts +1 -1
- package/dist/esm/modules/registry/common/index.js +1 -1
- package/dist/esm/modules/registry/common/types.d.ts +1 -1
- package/dist/esm/modules/registry/index.d.ts +2 -2
- package/dist/esm/modules/registry/index.js +2 -2
- package/dist/esm/modules/registry/registry.d.ts +3 -3
- package/dist/esm/modules/registry/registry.d.ts.map +1 -1
- package/dist/esm/modules/registry/registry.js +10 -6
- package/dist/esm/modules/registry/registry.js.map +1 -1
- package/dist/esm/package.json +6 -0
- package/package.json +3 -5
|
@@ -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) {
|
|
@@ -20,13 +26,16 @@ class Container extends base_1.BaseContainer {
|
|
|
20
26
|
message: `[${cls.name}] ${at} has neither an @inject key nor a class`,
|
|
21
27
|
});
|
|
22
28
|
}
|
|
23
|
-
const target = (0, utilities_1.resolveInjectTarget)(declared);
|
|
29
|
+
const target = (0, utilities_1.resolveInjectTarget)({ target: declared });
|
|
24
30
|
if (target === undefined) {
|
|
25
31
|
throw (0, error_1.getError)({
|
|
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":"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"}
|
|
@@ -1,10 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
3
|
exports.isApplicationError = exports.fromError = exports.getError = exports.ApplicationError = void 0;
|
|
7
|
-
const
|
|
4
|
+
const utilities_1 = require("../../common/utilities");
|
|
8
5
|
const message_code_1 = require("./message-code");
|
|
9
6
|
/** Consumed keys. Everything else rides into `extra`. */
|
|
10
7
|
const KNOWN_KEYS = [
|
|
@@ -35,7 +32,7 @@ class ApplicationError extends Error {
|
|
|
35
32
|
this.logLevel = logLevel;
|
|
36
33
|
// Explicit `extra` wins over swept keys.
|
|
37
34
|
const merged = {
|
|
38
|
-
...(0,
|
|
35
|
+
...(0, utilities_1.omit)({ source: opts, keys: KNOWN_KEYS }),
|
|
39
36
|
...extra,
|
|
40
37
|
};
|
|
41
38
|
this.extra = Object.keys(merged).length > 0 ? merged : undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-error.js","sourceRoot":"","sources":["../../../../src/modules/error/app-error.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"app-error.js","sourceRoot":"","sources":["../../../../src/modules/error/app-error.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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"}
|
|
@@ -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
|
}
|
|
@@ -63,7 +65,9 @@ class MetadataRegistry extends base_helper_1.BaseHelper {
|
|
|
63
65
|
}
|
|
64
66
|
setInjectMetadata(opts) {
|
|
65
67
|
const { target, index, metadata } = opts;
|
|
66
|
-
|
|
68
|
+
// Copy-on-write: the inherited list belongs to the parent class and every sibling subclass reads it.
|
|
69
|
+
const own = Reflect.getOwnMetadata(constants_1.MetadataKeys.INJECT, target);
|
|
70
|
+
const injects = own ?? [...(Reflect.getMetadata(constants_1.MetadataKeys.INJECT, target) ?? [])];
|
|
67
71
|
injects[index] = metadata;
|
|
68
72
|
Reflect.defineMetadata(constants_1.MetadataKeys.INJECT, injects, target);
|
|
69
73
|
}
|
|
@@ -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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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export * from './base-helper';
|
|
2
|
-
export * from './logger';
|
|
3
|
-
export * from './types';
|
|
4
|
-
export * from './utilities';
|
|
1
|
+
export * from './base-helper.js';
|
|
2
|
+
export * from './logger.js';
|
|
3
|
+
export * from './types.js';
|
|
4
|
+
export * from './utilities.js';
|
|
5
5
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/esm/common/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export * from './base-helper';
|
|
2
|
-
export * from './logger';
|
|
3
|
-
export * from './types';
|
|
4
|
-
export * from './utilities';
|
|
1
|
+
export * from './base-helper.js';
|
|
2
|
+
export * from './logger.js';
|
|
3
|
+
export * from './types.js';
|
|
4
|
+
export * from './utilities.js';
|
|
5
5
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,10 +1,38 @@
|
|
|
1
|
-
import type { AnyType, TClass, TInjectTarget, TValueOrAsyncResolver, TValueOrResolver } from './types';
|
|
1
|
+
import type { AnyType, TClass, TInjectTarget, TValueOrAsyncResolver, TValueOrResolver } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* True for a value carrying nothing: `null`/`undefined`, an empty string, array, `Map`, `Set`, or an
|
|
4
|
+
* object with no own enumerable keys. A number, boolean or function is empty too - it holds no
|
|
5
|
+
* entries.
|
|
6
|
+
*
|
|
7
|
+
* Hand-written rather than `lodash/isEmpty`, and NOT a plain `!value`: `!{}` is `false` while an
|
|
8
|
+
* empty object IS empty, so the two disagree on exactly the case a swap would silently flip.
|
|
9
|
+
*/
|
|
10
|
+
export declare const isEmpty: (opts: {
|
|
11
|
+
value: unknown;
|
|
12
|
+
}) => boolean;
|
|
13
|
+
/**
|
|
14
|
+
* A shallow copy without `keys`.
|
|
15
|
+
*
|
|
16
|
+
* Hand-written rather than `lodash/omit`: this package is bundled for browsers, where importing
|
|
17
|
+
* lodash for one function costs 24 KB. Matches lodash on the shapes we pass it - a flat key list,
|
|
18
|
+
* never a nested path.
|
|
19
|
+
*/
|
|
20
|
+
export declare const omit: <T extends object, K extends PropertyKey>(opts: {
|
|
21
|
+
source: T;
|
|
22
|
+
keys: readonly K[];
|
|
23
|
+
}) => Omit<T, Extract<K, keyof T>>;
|
|
2
24
|
/** Tells a CONSTRUCTOR from a RESOLVER via source text - `prototype !== undefined` is true of every non-arrow function. Sound only on ES2020+ output (classes emit as `class`); ES5 bundling breaks it. */
|
|
3
25
|
export declare const isClass: <T>(target: any) => target is TClass<T>;
|
|
4
26
|
/** Reads a value-or-resolver. A class constructor is returned as-is; only a plain function is called. */
|
|
5
|
-
export declare const resolveValue: <T>(
|
|
27
|
+
export declare const resolveValue: <T>(opts: {
|
|
28
|
+
value: TValueOrResolver<T>;
|
|
29
|
+
}) => T;
|
|
6
30
|
/** `resolveValue` for a resolver that may answer a promise. */
|
|
7
|
-
export declare const resolveValueAsync: <T>(
|
|
31
|
+
export declare const resolveValueAsync: <T>(opts: {
|
|
32
|
+
value: TValueOrAsyncResolver<T>;
|
|
33
|
+
}) => Promise<T>;
|
|
8
34
|
/** Reads what `@inject({ target })` named. The function form is called HERE, never at decoration: that is what lets a class reached through an import cycle be named at all. Answers `undefined` when the function hands back something that is not a class. The container resolves synchronously, so there is no async form. */
|
|
9
|
-
export declare const resolveInjectTarget: (
|
|
35
|
+
export declare const resolveInjectTarget: (opts: {
|
|
36
|
+
target: TInjectTarget;
|
|
37
|
+
}) => TClass<AnyType> | undefined;
|
|
10
38
|
//# sourceMappingURL=utilities.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utilities.d.ts","sourceRoot":"","sources":["../../../src/common/utilities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,OAAO,EAEP,MAAM,EACN,aAAa,EAEb,qBAAqB,EACrB,gBAAgB,EACjB,MAAM,SAAS,CAAC;AAEjB,2MAA2M;AAC3M,eAAO,MAAM,OAAO,GAAI,CAAC,EAAE,QAAQ,GAAG,KAAG,MAAM,IAAI,MAAM,CAAC,CAAC,CAM1D,CAAC;AAMF,yGAAyG;AACzG,eAAO,MAAM,YAAY,GAAI,CAAC,EAAE,
|
|
1
|
+
{"version":3,"file":"utilities.d.ts","sourceRoot":"","sources":["../../../src/common/utilities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,OAAO,EAEP,MAAM,EACN,aAAa,EAEb,qBAAqB,EACrB,gBAAgB,EACjB,MAAM,SAAS,CAAC;AAEjB;;;;;;;GAOG;AACH,eAAO,MAAM,OAAO,GAAI,MAAM;IAAE,KAAK,EAAE,OAAO,CAAA;CAAE,KAAG,OAwBlD,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,IAAI,GAAI,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,WAAW,EAAE,MAAM;IAClE,MAAM,EAAE,CAAC,CAAC;IACV,IAAI,EAAE,SAAS,CAAC,EAAE,CAAC;CACpB,KAAG,IAAI,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAe9B,CAAC;AAEF,2MAA2M;AAC3M,eAAO,MAAM,OAAO,GAAI,CAAC,EAAE,QAAQ,GAAG,KAAG,MAAM,IAAI,MAAM,CAAC,CAAC,CAM1D,CAAC;AAMF,yGAAyG;AACzG,eAAO,MAAM,YAAY,GAAI,CAAC,EAAE,MAAM;IAAE,KAAK,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAA;CAAE,KAAG,CAGtE,CAAC;AAOF,+DAA+D;AAC/D,eAAO,MAAM,iBAAiB,GAAU,CAAC,EAAE,MAAM;IAC/C,KAAK,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC;CACjC,KAAG,OAAO,CAAC,CAAC,CAGZ,CAAC;AAEF,iUAAiU;AACjU,eAAO,MAAM,mBAAmB,GAAI,MAAM;IACxC,MAAM,EAAE,aAAa,CAAC;CACvB,KAAG,MAAM,CAAC,OAAO,CAAC,GAAG,SAGrB,CAAC"}
|
|
@@ -1,3 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* True for a value carrying nothing: `null`/`undefined`, an empty string, array, `Map`, `Set`, or an
|
|
3
|
+
* object with no own enumerable keys. A number, boolean or function is empty too - it holds no
|
|
4
|
+
* entries.
|
|
5
|
+
*
|
|
6
|
+
* Hand-written rather than `lodash/isEmpty`, and NOT a plain `!value`: `!{}` is `false` while an
|
|
7
|
+
* empty object IS empty, so the two disagree on exactly the case a swap would silently flip.
|
|
8
|
+
*/
|
|
9
|
+
export const isEmpty = (opts) => {
|
|
10
|
+
const { value } = opts;
|
|
11
|
+
if (value === null || value === undefined) {
|
|
12
|
+
return true;
|
|
13
|
+
}
|
|
14
|
+
// The types that carry a MEANINGFUL length. Duck-typing on `.length` instead would call
|
|
15
|
+
// `{ length: 0 }` empty, which it is not - it has an own key.
|
|
16
|
+
if (typeof value === 'string' || Array.isArray(value) || ArrayBuffer.isView(value)) {
|
|
17
|
+
return value.length === 0;
|
|
18
|
+
}
|
|
19
|
+
if (value instanceof Map || value instanceof Set) {
|
|
20
|
+
return value.size === 0;
|
|
21
|
+
}
|
|
22
|
+
if (typeof value !== 'object') {
|
|
23
|
+
return true;
|
|
24
|
+
}
|
|
25
|
+
// Own keys only: `for...in` would walk the prototype chain and call an object with an inherited
|
|
26
|
+
// property non-empty.
|
|
27
|
+
return Object.keys(value).length === 0;
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* A shallow copy without `keys`.
|
|
31
|
+
*
|
|
32
|
+
* Hand-written rather than `lodash/omit`: this package is bundled for browsers, where importing
|
|
33
|
+
* lodash for one function costs 24 KB. Matches lodash on the shapes we pass it - a flat key list,
|
|
34
|
+
* never a nested path.
|
|
35
|
+
*/
|
|
36
|
+
export const omit = (opts) => {
|
|
37
|
+
const { source, keys } = opts;
|
|
38
|
+
const dropped = new Set(keys);
|
|
39
|
+
const kept = {};
|
|
40
|
+
const entries = Object.entries(source);
|
|
41
|
+
for (const [key, value] of entries) {
|
|
42
|
+
if (dropped.has(key)) {
|
|
43
|
+
continue;
|
|
44
|
+
}
|
|
45
|
+
kept[key] = value;
|
|
46
|
+
}
|
|
47
|
+
return kept;
|
|
48
|
+
};
|
|
1
49
|
/** Tells a CONSTRUCTOR from a RESOLVER via source text - `prototype !== undefined` is true of every non-arrow function. Sound only on ES2020+ output (classes emit as `class`); ES5 bundling breaks it. */
|
|
2
50
|
export const isClass = (target) => {
|
|
3
51
|
if (typeof target !== 'function' || target.prototype === undefined) {
|
|
@@ -8,13 +56,19 @@ export const isClass = (target) => {
|
|
|
8
56
|
/** A resolver is anything callable that is not a class - a class is a value here, never a factory. */
|
|
9
57
|
const isResolver = (valueOrResolver) => typeof valueOrResolver === 'function' && !isClass(valueOrResolver);
|
|
10
58
|
/** Reads a value-or-resolver. A class constructor is returned as-is; only a plain function is called. */
|
|
11
|
-
export const resolveValue = (
|
|
59
|
+
export const resolveValue = (opts) => {
|
|
60
|
+
const { value } = opts;
|
|
61
|
+
return isResolver(value) ? value() : value;
|
|
62
|
+
};
|
|
12
63
|
const isAsyncResolver = (valueOrResolver) => typeof valueOrResolver === 'function' && !isClass(valueOrResolver);
|
|
13
64
|
/** `resolveValue` for a resolver that may answer a promise. */
|
|
14
|
-
export const resolveValueAsync = async (
|
|
65
|
+
export const resolveValueAsync = async (opts) => {
|
|
66
|
+
const { value } = opts;
|
|
67
|
+
return isAsyncResolver(value) ? value() : value;
|
|
68
|
+
};
|
|
15
69
|
/** Reads what `@inject({ target })` named. The function form is called HERE, never at decoration: that is what lets a class reached through an import cycle be named at all. Answers `undefined` when the function hands back something that is not a class. The container resolves synchronously, so there is no async form. */
|
|
16
|
-
export const resolveInjectTarget = (
|
|
17
|
-
const resolved = resolveValue(target);
|
|
70
|
+
export const resolveInjectTarget = (opts) => {
|
|
71
|
+
const resolved = resolveValue({ value: opts.target });
|
|
18
72
|
return isClass(resolved) ? resolved : undefined;
|
|
19
73
|
};
|
|
20
74
|
//# sourceMappingURL=utilities.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utilities.js","sourceRoot":"","sources":["../../../src/common/utilities.ts"],"names":[],"mappings":"AAUA,2MAA2M;AAC3M,MAAM,CAAC,MAAM,OAAO,GAAG,CAAI,MAAW,EAAuB,EAAE;IAC7D,IAAI,OAAO,MAAM,KAAK,UAAU,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QACnE,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AACtE,CAAC,CAAC;AAEF,sGAAsG;AACtG,MAAM,UAAU,GAAG,CAAI,eAAoC,EAAmC,EAAE,CAC9F,OAAO,eAAe,KAAK,UAAU,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;AAErE,yGAAyG;AACzG,MAAM,CAAC,MAAM,YAAY,GAAG,CAAI,
|
|
1
|
+
{"version":3,"file":"utilities.js","sourceRoot":"","sources":["../../../src/common/utilities.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/index.d.ts
CHANGED
package/dist/esm/index.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import 'reflect-metadata';
|
|
2
|
-
import { getError } from './modules/error/app-error';
|
|
3
|
-
import { MessageCode } from './modules/error/message-code';
|
|
4
|
-
export * from './common';
|
|
5
|
-
export * from './modules';
|
|
2
|
+
import { getError } from './modules/error/app-error.js';
|
|
3
|
+
import { MessageCode } from './modules/error/message-code.js';
|
|
4
|
+
export * from './common/index.js';
|
|
5
|
+
export * from './modules/index.js';
|
|
6
6
|
// Lives in the package entry, the one module every consumer evaluates and the only one
|
|
7
7
|
// declared in `sideEffects`: a bundler keeps it, so MessageCode throws ApplicationError in a
|
|
8
8
|
// bundle too.
|