@fluojs/di 1.0.0-beta.4 → 1.0.0-beta.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.ko.md +1 -0
- package/README.md +1 -0
- package/dist/container.d.ts +11 -0
- package/dist/container.d.ts.map +1 -1
- package/dist/container.js +55 -0
- package/package.json +1 -1
package/README.ko.md
CHANGED
|
@@ -145,6 +145,7 @@ const service = await container.resolve(DataService);
|
|
|
145
145
|
| `resolve<T>(token)` | 토큰을 인스턴스로 비동기 해석합니다. |
|
|
146
146
|
| `createRequestScope()` | 요청 스코프 의존성을 위한 자식 컨테이너를 생성합니다. |
|
|
147
147
|
| `has(token)` | 컨테이너나 부모에 토큰이 등록되어 있는지 확인합니다. |
|
|
148
|
+
| `hasRequestScopedDependency(token)` | 토큰 해석 시 provider 그래프에 request-scoped 의존성이나 순환이 있어 request-scope 컨테이너가 필요할 수 있는지 확인합니다. |
|
|
148
149
|
|
|
149
150
|
## 관련 패키지
|
|
150
151
|
|
package/README.md
CHANGED
|
@@ -145,6 +145,7 @@ Ensure all required providers are registered in the container. If you use `creat
|
|
|
145
145
|
| `resolve<T>(token)` | Asynchronously resolves a token to an instance. |
|
|
146
146
|
| `createRequestScope()` | Creates a child container for request-scoped dependencies. |
|
|
147
147
|
| `has(token)` | Checks if a token is registered in the container or its parents. |
|
|
148
|
+
| `hasRequestScopedDependency(token)` | Checks whether resolving a token may require a request-scope container because its provider graph contains request-scoped dependencies or is cyclic. |
|
|
148
149
|
|
|
149
150
|
## Related Packages
|
|
150
151
|
|
package/dist/container.d.ts
CHANGED
|
@@ -54,6 +54,13 @@ export declare class Container {
|
|
|
54
54
|
* @returns `true` when a single or multi provider exists for the token.
|
|
55
55
|
*/
|
|
56
56
|
has(token: Token): boolean;
|
|
57
|
+
/**
|
|
58
|
+
* Returns whether resolving a token may require a request-scope container.
|
|
59
|
+
*
|
|
60
|
+
* @param token Provider token to inspect through aliases, multi providers, and dependencies.
|
|
61
|
+
* @returns `true` when the provider graph contains request-scoped dependencies or is cyclic.
|
|
62
|
+
*/
|
|
63
|
+
hasRequestScopedDependency(token: Token): boolean;
|
|
57
64
|
/**
|
|
58
65
|
* Creates a child request-scope container that shares root singleton cache.
|
|
59
66
|
*
|
|
@@ -88,6 +95,10 @@ export declare class Container {
|
|
|
88
95
|
private hasAncestorMultiRegistration;
|
|
89
96
|
private hasMultiRegistration;
|
|
90
97
|
private collectMultiProviders;
|
|
98
|
+
private providerGraphRequiresRequestScope;
|
|
99
|
+
private unregisteredClassRequiresRequestScope;
|
|
100
|
+
private normalizedProviderRequiresRequestScope;
|
|
101
|
+
private dependencyEntryRequiresRequestScope;
|
|
91
102
|
private resolveWithChain;
|
|
92
103
|
private resolveFromRegisteredProviders;
|
|
93
104
|
private requireProvider;
|
package/dist/container.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"container.d.ts","sourceRoot":"","sources":["../src/container.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmC,KAAK,KAAK,EAAE,MAAM,cAAc,CAAC;AAW3E,OAAO,KAAK,EASV,QAAQ,EAET,MAAM,YAAY,CAAC;AAuIpB;;GAEG;AACH,qBAAa,SAAS;IAiBlB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;IACxB,OAAO,CAAC,QAAQ,CAAC,mBAAmB;IAjBtC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAwC;IACtE,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAA0C;IAC7E,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAoB;IAC1D,OAAO,CAAC,YAAY,CAA2C;IAC/D,OAAO,CAAC,iBAAiB,CAAwD;IACjF,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAmD;IACvF,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAA4B;IAC/D,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAiB;IACrD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA+B;IAC9D,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAsC;IAC3E,OAAO,CAAC,WAAW,CAA6B;IAChD,OAAO,CAAC,cAAc,CAA4B;IAClD,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,aAAa,CAAS;gBAGX,MAAM,CAAC,EAAE,SAAS,YAAA,EAClB,mBAAmB,UAAQ,EAC5C,cAAc,CAAC,EAAE,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAK/C;;;;;;;;;OASG;IACH,QAAQ,CAAC,GAAG,SAAS,EAAE,QAAQ,EAAE,GAAG,IAAI;IAyCxC;;;;;;;;;;;;;OAaG;IACH,QAAQ,CAAC,GAAG,SAAS,EAAE,QAAQ,EAAE,GAAG,IAAI;IA6BxC;;;;;OAKG;IACH,GAAG,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO;IAI1B;;;;;OAKG;IACH,kBAAkB,IAAI,SAAS;IAW/B;;;;;;;;;OASG;IACG,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAW7C;;;;;OAKG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;YAiBhB,UAAU;IAiBxB,OAAO,CAAC,qBAAqB;IAQ7B,OAAO,CAAC,QAAQ;IAMhB,OAAO,CAAC,4BAA4B;IAsBpC,OAAO,CAAC,6BAA6B;IAIrC,OAAO,CAAC,qBAAqB;IAM7B,OAAO,CAAC,4BAA4B;IAIpC,OAAO,CAAC,oBAAoB;IAM5B,OAAO,CAAC,qBAAqB;
|
|
1
|
+
{"version":3,"file":"container.d.ts","sourceRoot":"","sources":["../src/container.ts"],"names":[],"mappings":"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"}
|
package/dist/container.js
CHANGED
|
@@ -223,6 +223,16 @@ export class Container {
|
|
|
223
223
|
return this.lookupProvider(token) !== undefined || this.hasMulti(token);
|
|
224
224
|
}
|
|
225
225
|
|
|
226
|
+
/**
|
|
227
|
+
* Returns whether resolving a token may require a request-scope container.
|
|
228
|
+
*
|
|
229
|
+
* @param token Provider token to inspect through aliases, multi providers, and dependencies.
|
|
230
|
+
* @returns `true` when the provider graph contains request-scoped dependencies or is cyclic.
|
|
231
|
+
*/
|
|
232
|
+
hasRequestScopedDependency(token) {
|
|
233
|
+
return this.providerGraphRequiresRequestScope(token, new Set());
|
|
234
|
+
}
|
|
235
|
+
|
|
226
236
|
/**
|
|
227
237
|
* Creates a child request-scope container that shares root singleton cache.
|
|
228
238
|
*
|
|
@@ -345,6 +355,51 @@ export class Container {
|
|
|
345
355
|
}
|
|
346
356
|
return fromParent;
|
|
347
357
|
}
|
|
358
|
+
providerGraphRequiresRequestScope(token, visited) {
|
|
359
|
+
if (visited.has(token)) {
|
|
360
|
+
return true;
|
|
361
|
+
}
|
|
362
|
+
visited.add(token);
|
|
363
|
+
try {
|
|
364
|
+
const provider = this.lookupProvider(token);
|
|
365
|
+
const multiProviders = this.collectMultiProviders(token);
|
|
366
|
+
if (!provider && multiProviders.length === 0) {
|
|
367
|
+
return this.unregisteredClassRequiresRequestScope(token, visited);
|
|
368
|
+
}
|
|
369
|
+
if (provider && this.normalizedProviderRequiresRequestScope(provider, visited)) {
|
|
370
|
+
return true;
|
|
371
|
+
}
|
|
372
|
+
return multiProviders.some(multiProvider => this.normalizedProviderRequiresRequestScope(multiProvider, visited));
|
|
373
|
+
} finally {
|
|
374
|
+
visited.delete(token);
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
unregisteredClassRequiresRequestScope(token, visited) {
|
|
378
|
+
if (typeof token !== 'function') {
|
|
379
|
+
return false;
|
|
380
|
+
}
|
|
381
|
+
const metadata = getClassDiMetadata(token);
|
|
382
|
+
if (metadata?.scope === Scope.REQUEST) {
|
|
383
|
+
return true;
|
|
384
|
+
}
|
|
385
|
+
return (metadata?.inject ?? []).some(depEntry => this.dependencyEntryRequiresRequestScope(depEntry, visited));
|
|
386
|
+
}
|
|
387
|
+
normalizedProviderRequiresRequestScope(provider, visited) {
|
|
388
|
+
if (provider.scope === Scope.REQUEST) {
|
|
389
|
+
return true;
|
|
390
|
+
}
|
|
391
|
+
if (provider.type === 'existing' && provider.useExisting !== undefined) {
|
|
392
|
+
return this.providerGraphRequiresRequestScope(provider.useExisting, visited);
|
|
393
|
+
}
|
|
394
|
+
return provider.inject.some(depEntry => this.dependencyEntryRequiresRequestScope(depEntry, visited));
|
|
395
|
+
}
|
|
396
|
+
dependencyEntryRequiresRequestScope(depEntry, visited) {
|
|
397
|
+
const depToken = this.resolveProviderDependencyToken(depEntry);
|
|
398
|
+
if (isOptionalToken(depEntry) && !this.has(depToken)) {
|
|
399
|
+
return false;
|
|
400
|
+
}
|
|
401
|
+
return this.providerGraphRequiresRequestScope(depToken, visited);
|
|
402
|
+
}
|
|
348
403
|
async resolveWithChain(token, chain, activeTokens, allowForwardRef = false) {
|
|
349
404
|
const cachedForwardRef = this.resolveForwardRefCircularDependency(token, chain, activeTokens, allowForwardRef);
|
|
350
405
|
if (cachedForwardRef !== undefined) {
|