@fluojs/di 1.0.2 → 1.0.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/container.d.ts +7 -2
- package/dist/container.d.ts.map +1 -1
- package/dist/container.js +57 -21
- package/package.json +2 -2
package/dist/container.d.ts
CHANGED
|
@@ -160,8 +160,13 @@ export declare class Container {
|
|
|
160
160
|
private resolveProviderDependencyToken;
|
|
161
161
|
private resolveForwardRefToken;
|
|
162
162
|
private resolveProviderDeps;
|
|
163
|
-
private
|
|
163
|
+
private invalidateAffectedCachedEntriesInHierarchy;
|
|
164
164
|
private isAncestorOf;
|
|
165
|
-
private
|
|
165
|
+
private invalidateAffectedCachedEntries;
|
|
166
|
+
private shouldInvalidateCachedToken;
|
|
167
|
+
private shouldInvalidateCachedProvider;
|
|
168
|
+
private providerDependsOnToken;
|
|
169
|
+
private dependencyEntryReferencesToken;
|
|
170
|
+
private dependencyTokenReferencesToken;
|
|
166
171
|
}
|
|
167
172
|
//# sourceMappingURL=container.d.ts.map
|
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;AA4IpB;;GAEG;AACH,qBAAa,SAAS;IAsBlB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;IACxB,OAAO,CAAC,QAAQ,CAAC,mBAAmB;IAtBtC,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,QAAQ,CAAC,uBAAuB,CAA0E;IAClH,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAyE;IAChH,OAAO,CAAC,QAAQ,CAAC,4BAA4B,CAAmD;IAChG,OAAO,CAAC,QAAQ,CAAC,0BAA0B,CAA0E;IACrH,OAAO,CAAC,WAAW,CAA6B;IAChD,OAAO,CAAC,cAAc,CAA4B;IAClD,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,aAAa,CAAK;gBAGP,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;IA4CxC;;;;;;;;;;;;;OAaG;IACH,QAAQ,CAAC,GAAG,SAAS,EAAE,QAAQ,EAAE,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"container.d.ts","sourceRoot":"","sources":["../src/container.ts"],"names":[],"mappings":"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"}
|
package/dist/container.js
CHANGED
|
@@ -225,11 +225,9 @@ export class Container {
|
|
|
225
225
|
if (!containsMultiProvider && normalizedProviders.length > 1) {
|
|
226
226
|
throw new DuplicateProviderError(token);
|
|
227
227
|
}
|
|
228
|
-
|
|
229
|
-
const existingMultiProviders = this.collectMultiProviders(token);
|
|
228
|
+
this.invalidateAffectedCachedEntriesInHierarchy(token);
|
|
230
229
|
this.registrations.delete(token);
|
|
231
230
|
this.multiRegistrations.delete(token);
|
|
232
|
-
this.invalidateCachedEntryInHierarchy(token, existing?.scope ?? existingMultiProviders[0]?.scope ?? firstProvider.scope);
|
|
233
231
|
if (containsMultiProvider) {
|
|
234
232
|
this.multiRegistrations.set(token, normalizedProviders);
|
|
235
233
|
this.multiOverriddenTokens.add(token);
|
|
@@ -933,15 +931,15 @@ export class Container {
|
|
|
933
931
|
}
|
|
934
932
|
return deps;
|
|
935
933
|
}
|
|
936
|
-
|
|
937
|
-
this.
|
|
934
|
+
invalidateAffectedCachedEntriesInHierarchy(token) {
|
|
935
|
+
this.invalidateAffectedCachedEntries(token);
|
|
938
936
|
const childScopes = this.root().childScopes;
|
|
939
937
|
if (!childScopes) {
|
|
940
938
|
return;
|
|
941
939
|
}
|
|
942
940
|
for (const childScope of childScopes) {
|
|
943
941
|
if (this.isAncestorOf(childScope)) {
|
|
944
|
-
childScope.
|
|
942
|
+
childScope.invalidateAffectedCachedEntries(token);
|
|
945
943
|
}
|
|
946
944
|
}
|
|
947
945
|
}
|
|
@@ -955,27 +953,26 @@ export class Container {
|
|
|
955
953
|
}
|
|
956
954
|
return false;
|
|
957
955
|
}
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
this.scheduleStaleDisposal(cached);
|
|
956
|
+
invalidateAffectedCachedEntries(token) {
|
|
957
|
+
for (const [cachedToken, cached] of this.requestCache?.entries() ?? []) {
|
|
958
|
+
if (!this.shouldInvalidateCachedToken(cachedToken, token)) {
|
|
959
|
+
continue;
|
|
963
960
|
}
|
|
964
|
-
this.
|
|
961
|
+
this.scheduleStaleDisposal(cached);
|
|
962
|
+
this.requestCache?.delete(cachedToken);
|
|
965
963
|
}
|
|
966
|
-
if (!this.parent
|
|
967
|
-
const
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
if (cached) {
|
|
971
|
-
this.scheduleStaleDisposal(cached);
|
|
964
|
+
if (!this.parent) {
|
|
965
|
+
for (const [cachedToken, cached] of this.singletonCache.entries()) {
|
|
966
|
+
if (!this.shouldInvalidateCachedToken(cachedToken, token)) {
|
|
967
|
+
continue;
|
|
972
968
|
}
|
|
973
|
-
|
|
969
|
+
this.scheduleStaleDisposal(cached);
|
|
970
|
+
this.singletonCache.delete(cachedToken);
|
|
974
971
|
}
|
|
975
972
|
}
|
|
976
973
|
if (!this.parent) {
|
|
977
974
|
for (const [provider, cached] of this.multiSingletonCache.entries()) {
|
|
978
|
-
if (provider
|
|
975
|
+
if (!this.shouldInvalidateCachedProvider(provider, token)) {
|
|
979
976
|
continue;
|
|
980
977
|
}
|
|
981
978
|
this.scheduleStaleDisposal(cached);
|
|
@@ -987,11 +984,50 @@ export class Container {
|
|
|
987
984
|
return;
|
|
988
985
|
}
|
|
989
986
|
for (const [provider, cached] of multiRequestCache.entries()) {
|
|
990
|
-
if (provider
|
|
987
|
+
if (!this.shouldInvalidateCachedProvider(provider, token)) {
|
|
991
988
|
continue;
|
|
992
989
|
}
|
|
993
990
|
this.scheduleStaleDisposal(cached);
|
|
994
991
|
multiRequestCache.delete(provider);
|
|
995
992
|
}
|
|
996
993
|
}
|
|
994
|
+
shouldInvalidateCachedToken(cachedToken, overriddenToken) {
|
|
995
|
+
if (cachedToken === overriddenToken) {
|
|
996
|
+
return true;
|
|
997
|
+
}
|
|
998
|
+
const provider = this.lookupProvider(cachedToken);
|
|
999
|
+
const multiProviders = this.collectMultiProviders(cachedToken);
|
|
1000
|
+
if (provider && this.providerDependsOnToken(provider, overriddenToken, new Set([provider.provide]))) {
|
|
1001
|
+
return true;
|
|
1002
|
+
}
|
|
1003
|
+
return multiProviders.some(multiProvider => this.providerDependsOnToken(multiProvider, overriddenToken, new Set([multiProvider.provide])));
|
|
1004
|
+
}
|
|
1005
|
+
shouldInvalidateCachedProvider(provider, overriddenToken) {
|
|
1006
|
+
return provider.provide === overriddenToken || this.providerDependsOnToken(provider, overriddenToken, new Set([provider.provide]));
|
|
1007
|
+
}
|
|
1008
|
+
providerDependsOnToken(provider, token, visited) {
|
|
1009
|
+
if (provider.type === 'existing' && provider.useExisting !== undefined) {
|
|
1010
|
+
return this.dependencyTokenReferencesToken(provider.useExisting, token, visited);
|
|
1011
|
+
}
|
|
1012
|
+
return provider.inject.some(depEntry => this.dependencyEntryReferencesToken(depEntry, token, visited));
|
|
1013
|
+
}
|
|
1014
|
+
dependencyEntryReferencesToken(depEntry, token, visited) {
|
|
1015
|
+
return this.dependencyTokenReferencesToken(this.resolveProviderDependencyToken(depEntry), token, visited);
|
|
1016
|
+
}
|
|
1017
|
+
dependencyTokenReferencesToken(depToken, token, visited) {
|
|
1018
|
+
if (depToken === token) {
|
|
1019
|
+
return true;
|
|
1020
|
+
}
|
|
1021
|
+
if (visited.has(depToken)) {
|
|
1022
|
+
return false;
|
|
1023
|
+
}
|
|
1024
|
+
visited.add(depToken);
|
|
1025
|
+
try {
|
|
1026
|
+
const provider = this.lookupProvider(depToken);
|
|
1027
|
+
const multiProviders = this.collectMultiProviders(depToken);
|
|
1028
|
+
return (provider ? this.providerDependsOnToken(provider, token, visited) : false) || multiProviders.some(multiProvider => this.providerDependsOnToken(multiProvider, token, visited));
|
|
1029
|
+
} finally {
|
|
1030
|
+
visited.delete(depToken);
|
|
1031
|
+
}
|
|
1032
|
+
}
|
|
997
1033
|
}
|
package/package.json
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
"container",
|
|
10
10
|
"provider"
|
|
11
11
|
],
|
|
12
|
-
"version": "1.0.
|
|
12
|
+
"version": "1.0.3",
|
|
13
13
|
"private": false,
|
|
14
14
|
"license": "MIT",
|
|
15
15
|
"repository": {
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
"dist"
|
|
37
37
|
],
|
|
38
38
|
"dependencies": {
|
|
39
|
-
"@fluojs/core": "^1.0.
|
|
39
|
+
"@fluojs/core": "^1.0.3"
|
|
40
40
|
},
|
|
41
41
|
"devDependencies": {
|
|
42
42
|
"vitest": "^3.2.4"
|