auklet 0.3.1 → 0.3.2

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.
@@ -30,7 +30,9 @@ export declare class ModuleStyleGraphRequestCache {
30
30
  private readonly contexts;
31
31
  private readonly loadResults;
32
32
  private readonly settledLoadResults;
33
+ private readonly loadResultsByPackage;
33
34
  private readonly loadResultDependencies;
35
+ private readonly loadResultDependents;
34
36
  private readonly loadResultVersions;
35
37
  private readonly loadAukletConfig;
36
38
  private readonly persistentCache;
@@ -100,5 +102,8 @@ export declare class ModuleStyleGraphRequestCache {
100
102
  private getGraphVersion;
101
103
  private bumpGraphVersion;
102
104
  private bumpLoadResultVersion;
105
+ private addLoadResultKey;
106
+ private deleteLoadResultKey;
107
+ private replaceLoadResultDependencies;
103
108
  }
104
109
  export {};
@@ -9,7 +9,9 @@ export class ModuleStyleGraphRequestCache {
9
9
  contexts = new Map();
10
10
  loadResults = new Map();
11
11
  settledLoadResults = new Map();
12
+ loadResultsByPackage = new Map();
12
13
  loadResultDependencies = new Map();
14
+ loadResultDependents = new Map();
13
15
  loadResultVersions = new Map();
14
16
  loadAukletConfig;
15
17
  persistentCache;
@@ -41,6 +43,7 @@ export class ModuleStyleGraphRequestCache {
41
43
  if (cachedResult)
42
44
  return cachedResult;
43
45
  const version = this.bumpLoadResultVersion(key);
46
+ this.addLoadResultKey(this.loadResultsByPackage, parsed.packageName, key);
44
47
  const graphVersion = this.getGraphVersion();
45
48
  let result;
46
49
  result = create()
@@ -54,7 +57,7 @@ export class ModuleStyleGraphRequestCache {
54
57
  return this.getLoadResult(parsed, create);
55
58
  }
56
59
  if (this.loadResultVersions.get(key) === version) {
57
- this.loadResultDependencies.set(key, new Set(entry.result.dependencyPackages ?? []));
60
+ this.replaceLoadResultDependencies(key, entry.result.dependencyPackages ?? []);
58
61
  }
59
62
  try {
60
63
  const committedResult = entry.commit?.();
@@ -226,39 +229,46 @@ export class ModuleStyleGraphRequestCache {
226
229
  return key.split('\0')[0];
227
230
  }
228
231
  invalidateLoadResults(packageName) {
229
- const invalidPackageNames = new Set([packageName]);
230
- let changed = true;
231
- while (changed) {
232
- changed = false;
233
- for (const [key, dependencyPackages] of this.loadResultDependencies) {
234
- const resultPackageName = this.getLoadResultPackageName(key);
235
- const shouldInvalidate = invalidPackageNames.has(resultPackageName) ||
236
- Array.from(dependencyPackages).some((dependencyPackage) => invalidPackageNames.has(dependencyPackage));
237
- if (!shouldInvalidate)
238
- continue;
239
- if (!invalidPackageNames.has(resultPackageName)) {
240
- invalidPackageNames.add(resultPackageName);
241
- changed = true;
242
- }
243
- }
244
- }
245
- for (const key of this.loadResults.keys()) {
246
- if (!invalidPackageNames.has(this.getLoadResultPackageName(key))) {
247
- const dependencyPackages = this.loadResultDependencies.get(key);
248
- if (!dependencyPackages ||
249
- !Array.from(dependencyPackages).some((dependencyPackage) => invalidPackageNames.has(dependencyPackage))) {
232
+ const pendingKeys = [
233
+ ...(this.loadResultsByPackage.get(packageName) ?? []),
234
+ ...(this.loadResultDependents.get(packageName) ?? []),
235
+ ];
236
+ const processedKeys = new Set();
237
+ while (pendingKeys.length) {
238
+ const key = pendingKeys.pop();
239
+ if (!key || processedKeys.has(key))
240
+ continue;
241
+ processedKeys.add(key);
242
+ const dependentPackageName = this.discardLoadResult(key);
243
+ if (!dependentPackageName)
244
+ continue;
245
+ for (const dependentKey of Array.from(this.loadResultDependents.get(dependentPackageName) ?? [])) {
246
+ if (processedKeys.has(dependentKey))
250
247
  continue;
251
- }
248
+ pendingKeys.push(dependentKey);
252
249
  }
253
- this.discardLoadResult(key);
254
250
  }
255
251
  }
256
252
  discardLoadResult(key) {
253
+ const packageName = this.getLoadResultPackageName(key);
254
+ const dependencyPackages = this.loadResultDependencies.get(key);
255
+ const settledResult = this.loadResults.get(key) ?? null;
256
+ if (!settledResult &&
257
+ !dependencyPackages &&
258
+ !this.settledLoadResults.has(key)) {
259
+ return null;
260
+ }
257
261
  this.bumpGraphVersion();
258
262
  this.bumpLoadResultVersion(key);
259
263
  this.loadResults.delete(key);
260
- this.loadResultDependencies.delete(key);
261
264
  this.settledLoadResults.delete(key);
265
+ this.deleteLoadResultKey(this.loadResultsByPackage, packageName, key);
266
+ const previousDependencies = dependencyPackages ?? new Set();
267
+ for (const dependencyPackage of previousDependencies) {
268
+ this.deleteLoadResultKey(this.loadResultDependents, dependencyPackage, key);
269
+ }
270
+ this.loadResultDependencies.delete(key);
271
+ return packageName;
262
272
  }
263
273
  peekLoadResult(parsed) {
264
274
  return this.settledLoadResults.get(this.getLoadResultKey(parsed)) ?? null;
@@ -275,4 +285,33 @@ export class ModuleStyleGraphRequestCache {
275
285
  this.loadResultVersions.set(key, nextVersion);
276
286
  return nextVersion;
277
287
  }
288
+ addLoadResultKey(map, key, value) {
289
+ const values = map.get(key) ?? new Set();
290
+ values.add(value);
291
+ map.set(key, values);
292
+ }
293
+ deleteLoadResultKey(map, key, value) {
294
+ const values = map.get(key);
295
+ if (!values)
296
+ return;
297
+ values.delete(value);
298
+ if (!values.size) {
299
+ map.delete(key);
300
+ }
301
+ }
302
+ replaceLoadResultDependencies(key, dependencyPackages) {
303
+ const nextDependencies = new Set(dependencyPackages);
304
+ const previousDependencies = this.loadResultDependencies.get(key);
305
+ if (previousDependencies) {
306
+ for (const dependencyPackage of previousDependencies) {
307
+ if (nextDependencies.has(dependencyPackage))
308
+ continue;
309
+ this.deleteLoadResultKey(this.loadResultDependents, dependencyPackage, key);
310
+ }
311
+ }
312
+ this.loadResultDependencies.set(key, nextDependencies);
313
+ for (const dependencyPackage of nextDependencies) {
314
+ this.addLoadResultKey(this.loadResultDependents, dependencyPackage, key);
315
+ }
316
+ }
278
317
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "auklet",
3
- "version": "0.3.1",
3
+ "version": "0.3.2",
4
4
  "type": "module",
5
5
  "author": "chentao.arthur",
6
6
  "description": "Build utilities for TypeScript packages and module CSS output.",