@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.
@@ -160,8 +160,13 @@ export declare class Container {
160
160
  private resolveProviderDependencyToken;
161
161
  private resolveForwardRefToken;
162
162
  private resolveProviderDeps;
163
- private invalidateCachedEntryInHierarchy;
163
+ private invalidateAffectedCachedEntriesInHierarchy;
164
164
  private isAncestorOf;
165
- private invalidateCachedEntry;
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
@@ -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;IA6DxC;;;;;OAKG;IACH,GAAG,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO;IAI1B;;;;;OAKG;IACH,0BAA0B,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO;IAcjD;;;;;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;YAkBhB,UAAU;IAgCxB,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;IAsB7B,OAAO,CAAC,iCAAiC;IAyBzC,OAAO,CAAC,qCAAqC;IAc7C,OAAO,CAAC,sCAAsC;IAY9C,OAAO,CAAC,mCAAmC;YAa7B,gBAAgB;YAehB,8BAA8B;IAqC5C,OAAO,CAAC,eAAe;YAgBT,kBAAkB;IAMhC,OAAO,CAAC,mCAAmC;YAoB7B,6BAA6B;YAc7B,4BAA4B;IA4B1C,OAAO,CAAC,6BAA6B;YAQvB,gCAAgC;IAuB9C,OAAO,CAAC,kCAAkC;IAY1C,OAAO,CAAC,qBAAqB;IAI7B,OAAO,CAAC,kCAAkC;YAI5B,eAAe;YAwBf,gBAAgB;IAiB9B,OAAO,CAAC,IAAI;IAIZ,OAAO,CAAC,yBAAyB;IAWjC,OAAO,CAAC,oBAAoB;IAM5B,OAAO,CAAC,yBAAyB;IAMjC,OAAO,CAAC,cAAc;IAatB;;;;;;;;;;OAUG;IACH,OAAO,CAAC,QAAQ;IAuBhB,OAAO,CAAC,aAAa;IAuBrB,OAAO,CAAC,qBAAqB;IAI7B,OAAO,CAAC,oBAAoB;YAkBd,YAAY;YAaZ,0BAA0B;YA0B1B,8BAA8B;IAc5C,OAAO,CAAC,mBAAmB;IAa3B,OAAO,CAAC,sBAAsB;IAM9B,OAAO,CAAC,cAAc;IAUtB,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,oBAAoB;IAK5B,OAAO,CAAC,yBAAyB;YAOnB,yBAAyB;IAMvC,OAAO,CAAC,qBAAqB;IAoB7B,OAAO,CAAC,mBAAmB;IAU3B,OAAO,CAAC,oBAAoB;IAS5B,OAAO,CAAC,YAAY;YAIN,WAAW;IA+BzB,OAAO,CAAC,+BAA+B;IAmBvC,OAAO,CAAC,2BAA2B;IAqBnC,OAAO,CAAC,gCAAgC;IAkCxC,OAAO,CAAC,wBAAwB;IA+ChC,OAAO,CAAC,8BAA8B;IAYtC,OAAO,CAAC,sBAAsB;YAUhB,mBAAmB;IAUjC,OAAO,CAAC,gCAAgC;IAgBxC,OAAO,CAAC,YAAY;IAcpB,OAAO,CAAC,qBAAqB;CAmD9B"}
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
- const existing = this.lookupProvider(token);
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
- invalidateCachedEntryInHierarchy(token, scope) {
937
- this.invalidateCachedEntry(token, scope);
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.invalidateCachedEntry(token, scope);
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
- invalidateCachedEntry(token, scope) {
959
- if (this.requestCache?.has(token)) {
960
- const cached = this.requestCache.get(token);
961
- if (cached) {
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.requestCache.delete(token);
961
+ this.scheduleStaleDisposal(cached);
962
+ this.requestCache?.delete(cachedToken);
965
963
  }
966
- if (!this.parent && scope === Scope.DEFAULT) {
967
- const singletonCache = this.singletonCache;
968
- if (singletonCache.has(token)) {
969
- const cached = singletonCache.get(token);
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
- singletonCache.delete(token);
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.provide !== token) {
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.provide !== token) {
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.2",
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.2"
39
+ "@fluojs/core": "^1.0.3"
40
40
  },
41
41
  "devDependencies": {
42
42
  "vitest": "^3.2.4"