@needle-di/core 1.1.2 → 1.1.3
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/context.js +7 -2
- package/dist/context.js.map +1 -1
- package/dist/factory.js +18 -7
- package/dist/factory.js.map +1 -1
- package/package.json +1 -1
package/dist/context.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Container } from "./container.js";
|
|
2
|
+
import { promiseTry } from "./utils.js";
|
|
2
3
|
export function inject(token, options) {
|
|
3
4
|
try {
|
|
4
5
|
return _currentContext.run((container) => container.get(token, options));
|
|
@@ -58,14 +59,18 @@ class InjectionContext {
|
|
|
58
59
|
_currentContext = originalContext;
|
|
59
60
|
}
|
|
60
61
|
}
|
|
61
|
-
|
|
62
|
+
runAsync(block) {
|
|
62
63
|
const originalContext = _currentContext;
|
|
63
64
|
try {
|
|
64
65
|
// eslint-disable-next-line @typescript-eslint/no-this-alias
|
|
65
66
|
_currentContext = this;
|
|
66
|
-
return
|
|
67
|
+
return promiseTry(() => block(this.container));
|
|
67
68
|
}
|
|
68
69
|
finally {
|
|
70
|
+
// The context must be restored synchronously, as soon as the block's synchronous
|
|
71
|
+
// prefix has returned its promise. Holding it across the `await` (i.e. until the
|
|
72
|
+
// promise settles) leaks this context to unrelated code that runs while the block
|
|
73
|
+
// is suspended, making `inject()`/`injectAsync()` resolve from the wrong container.
|
|
69
74
|
_currentContext = originalContext;
|
|
70
75
|
}
|
|
71
76
|
}
|
package/dist/context.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"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"}
|
package/dist/factory.js
CHANGED
|
@@ -3,6 +3,7 @@ import { getToken, toString } from "./tokens.js";
|
|
|
3
3
|
import * as Guards from "./providers.js";
|
|
4
4
|
import { assertNever, retryOn } from "./utils.js";
|
|
5
5
|
import { Container } from "./container.js";
|
|
6
|
+
import { injectionContext } from "./context.js";
|
|
6
7
|
/**
|
|
7
8
|
* @internal
|
|
8
9
|
*/
|
|
@@ -29,12 +30,12 @@ export class Factory {
|
|
|
29
30
|
}
|
|
30
31
|
}
|
|
31
32
|
async constructAsync(provider) {
|
|
33
|
+
if (this.underConstruction.includes(provider)) {
|
|
34
|
+
const dependencyGraph = [...this.underConstruction, provider].map(getToken).map(toString);
|
|
35
|
+
throw new CircularDependencyError(dependencyGraph);
|
|
36
|
+
}
|
|
37
|
+
this.underConstruction.push(provider);
|
|
32
38
|
try {
|
|
33
|
-
if (this.underConstruction.includes(provider)) {
|
|
34
|
-
const dependencyGraph = [...this.underConstruction, provider].map(getToken).map(toString);
|
|
35
|
-
throw new CircularDependencyError(dependencyGraph);
|
|
36
|
-
}
|
|
37
|
-
this.underConstruction.push(provider);
|
|
38
39
|
if (Guards.isAsyncProvider(provider)) {
|
|
39
40
|
return [await provider.useFactory(this.container)];
|
|
40
41
|
}
|
|
@@ -45,7 +46,11 @@ export class Factory {
|
|
|
45
46
|
const create = Guards.isConstructorProvider(provider)
|
|
46
47
|
? () => [new provider()]
|
|
47
48
|
: () => [new provider.useClass()];
|
|
48
|
-
return retryOn(AsyncProvidersInSyncInjectionContextError,
|
|
49
|
+
return retryOn(AsyncProvidersInSyncInjectionContextError,
|
|
50
|
+
// retries run in a later tick, when the original injection context is no longer
|
|
51
|
+
// active, so each attempt must explicitly (re-)enter the injection context for
|
|
52
|
+
// the field initializers' inject() calls to work.
|
|
53
|
+
async () => injectionContext(this.container).run(() => create()), async (error) => {
|
|
49
54
|
await this.container.getAsync(error.token, { multi: true, optional: true });
|
|
50
55
|
});
|
|
51
56
|
}
|
|
@@ -56,7 +61,13 @@ export class Factory {
|
|
|
56
61
|
return this.doConstruct(provider);
|
|
57
62
|
}
|
|
58
63
|
finally {
|
|
59
|
-
|
|
64
|
+
// Concurrent async constructions can settle in any order, so `pop()` might remove
|
|
65
|
+
// another in-flight construction's entry and leave our own entry stranded, causing
|
|
66
|
+
// phantom `CircularDependencyError`s on retries. Remove our own entry by identity instead.
|
|
67
|
+
const index = this.underConstruction.lastIndexOf(provider);
|
|
68
|
+
if (index !== -1) {
|
|
69
|
+
this.underConstruction.splice(index, 1);
|
|
70
|
+
}
|
|
60
71
|
}
|
|
61
72
|
}
|
|
62
73
|
doConstruct(provider) {
|
package/dist/factory.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoC,MAAM,gBAAgB,CAAC;AAClE,OAAO,EAAE,QAAQ,EAAc,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,KAAK,MAAM,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"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"}
|