@global-cache/core 0.4.0 → 0.5.0

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.
Files changed (49) hide show
  1. package/dist/client/api.d.ts +1 -0
  2. package/dist/client/api.d.ts.map +1 -1
  3. package/dist/client/api.js +5 -0
  4. package/dist/client/api.js.map +1 -1
  5. package/dist/client/index.d.ts +4 -0
  6. package/dist/client/index.d.ts.map +1 -1
  7. package/dist/client/index.js +8 -0
  8. package/dist/client/index.js.map +1 -1
  9. package/dist/index.d.ts +1 -0
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +3 -1
  12. package/dist/index.js.map +1 -1
  13. package/dist/server/getter.d.ts.map +1 -1
  14. package/dist/server/getter.js +9 -2
  15. package/dist/server/getter.js.map +1 -1
  16. package/dist/server/index.d.ts.map +1 -1
  17. package/dist/server/index.js +8 -1
  18. package/dist/server/index.js.map +1 -1
  19. package/dist/server/routes/delete.d.ts +6 -0
  20. package/dist/server/routes/delete.d.ts.map +1 -0
  21. package/dist/server/routes/delete.js +19 -0
  22. package/dist/server/routes/delete.js.map +1 -0
  23. package/dist/server/setter.d.ts.map +1 -1
  24. package/dist/server/setter.js +1 -1
  25. package/dist/server/setter.js.map +1 -1
  26. package/dist/server/storage/single-instance/memory.d.ts +15 -1
  27. package/dist/server/storage/single-instance/memory.d.ts.map +1 -1
  28. package/dist/server/storage/single-instance/memory.js +26 -1
  29. package/dist/server/storage/single-instance/memory.js.map +1 -1
  30. package/dist/server/storage/types.d.ts +3 -1
  31. package/dist/server/storage/types.d.ts.map +1 -1
  32. package/package.json +9 -5
  33. package/src/client/api.ts +7 -0
  34. package/src/client/index.ts +9 -0
  35. package/src/index.ts +1 -0
  36. package/src/server/getter.ts +10 -3
  37. package/src/server/index.ts +8 -1
  38. package/src/server/routes/delete.ts +23 -0
  39. package/src/server/setter.ts +3 -1
  40. package/src/server/storage/single-instance/memory.ts +27 -1
  41. package/src/server/storage/types.ts +3 -1
  42. package/dist/client/utils/http-json.d.ts +0 -14
  43. package/dist/client/utils/http-json.d.ts.map +0 -1
  44. package/dist/client/utils/http-json.js +0 -29
  45. package/dist/client/utils/http-json.js.map +0 -1
  46. package/dist/config.d.ts +0 -30
  47. package/dist/config.d.ts.map +0 -1
  48. package/dist/config.js +0 -63
  49. package/dist/config.js.map +0 -1
@@ -17,5 +17,6 @@ export declare class StorageApi {
17
17
  getStale({ key }: GetStaleParams): Promise<unknown>;
18
18
  getStaleList({ prefix }: GetStaleListParams): Promise<unknown[]>;
19
19
  clearTestRun(): Promise<void>;
20
+ deleteKey(key: string): Promise<void>;
20
21
  }
21
22
  //# sourceMappingURL=api.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/client/api.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAoB,MAAM,4BAA4B,CAAC;AACnF,OAAO,KAAK,EAAE,kBAAkB,EAAwB,MAAM,iCAAiC,CAAC;AAChG,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAMpC,qBAAa,UAAU;IACrB,OAAO,CAAC,IAAI,CAAa;gBAEb,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,KAAK,EAAE,MAAM;IAQlD,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,GAAG,CAAA;KAAE;IAO9D,GAAG,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,KAAK,CAAA;KAAE;IAOzE,QAAQ,CAAC,EAAE,GAAG,EAAE,EAAE,cAAc;IAOhC,YAAY,CAAC,EAAE,MAAM,EAAE,EAAE,kBAAkB;IAO3C,YAAY;CAInB"}
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/client/api.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAoB,MAAM,4BAA4B,CAAC;AACnF,OAAO,KAAK,EAAE,kBAAkB,EAAwB,MAAM,iCAAiC,CAAC;AAEhG,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAMpC,qBAAa,UAAU;IACrB,OAAO,CAAC,IAAI,CAAa;gBAEb,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE,KAAK,EAAE,MAAM;IAQlD,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,GAAG,CAAA;KAAE;IAO9D,GAAG,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,KAAK,CAAA;KAAE;IAOzE,QAAQ,CAAC,EAAE,GAAG,EAAE,EAAE,cAAc;IAOhC,YAAY,CAAC,EAAE,MAAM,EAAE,EAAE,kBAAkB;IAO3C,YAAY;IAKZ,SAAS,CAAC,GAAG,EAAE,MAAM;CAK5B"}
@@ -41,6 +41,11 @@ class StorageApi {
41
41
  const res = await this.http.post('clear');
42
42
  await (0, http_error_1.throwIfHttpError)(res, 'Failed to clear test run:');
43
43
  }
44
+ async deleteKey(key) {
45
+ const body = { key };
46
+ const res = await this.http.post('delete', body);
47
+ await (0, http_error_1.throwIfHttpError)(res, `Failed to delete key "${key}":`);
48
+ }
44
49
  }
45
50
  exports.StorageApi = StorageApi;
46
51
  //# sourceMappingURL=api.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/client/api.ts"],"names":[],"mappings":";;;AAKA,qDAAiD;AACjD,mDAAwD;AACxD,mDAAsD;AACtD,qDAAqD;AAErD,MAAa,UAAU;IAGrB,YAAY,SAA6B,EAAE,KAAa;QACtD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,uEAAuE,CAAC,CAAC;QAC3F,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,QAAQ,KAAK,GAAG,EAAE,SAAS,CAAC,CAAC,QAAQ,EAAE,CAAC;QAChE,IAAI,CAAC,IAAI,GAAG,IAAI,wBAAU,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAA2C;QAClE,MAAM,MAAM,GAAmB,IAAA,+BAAkB,EAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QACrE,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC/C,MAAM,IAAA,6BAAgB,EAAC,GAAG,EAAE,sBAAsB,GAAG,IAAI,CAAC,CAAC;QAC3D,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAqB,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAkD;QAC7E,MAAM,IAAI,GAAmB,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;QACnE,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAC9C,MAAM,IAAA,6BAAgB,EAAC,GAAG,EAAE,uBAAuB,GAAG,IAAI,CAAC,CAAC;QAC5D,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAqB,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAkB;QACpC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;QACtD,MAAM,IAAA,6BAAgB,EAAC,GAAG,EAAE,4BAA4B,GAAG,IAAI,CAAC,CAAC;QACjE,MAAM,SAAS,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAqB,CAAC;QACzD,OAAO,IAAA,0BAAa,EAAC,SAAS,CAAC,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAsB;QAC/C,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QAC9D,MAAM,IAAA,6BAAgB,EAAC,GAAG,EAAE,wCAAwC,MAAM,IAAI,CAAC,CAAC;QAChF,MAAM,aAAa,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAyB,CAAC;QACjE,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,IAAA,0BAAa,EAAC,SAAS,CAAC,CAAC,CAAC;IACpE,CAAC;IAED,KAAK,CAAC,YAAY;QAChB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1C,MAAM,IAAA,6BAAgB,EAAC,GAAG,EAAE,2BAA2B,CAAC,CAAC;IAC3D,CAAC;CACF;AA3CD,gCA2CC"}
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/client/api.ts"],"names":[],"mappings":"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"}
@@ -27,6 +27,10 @@ export declare class GlobalCacheClient<S extends DefaultKeysSchema = DefaultKeys
27
27
  * - for persistent keys it would be the old value if it was changed during this run
28
28
  */
29
29
  getStaleList<ValueType>(prefix: string): Promise<ValueType[]>;
30
+ /**
31
+ * Delete a cached value by key, forcing re-computation on the next get() call.
32
+ */
33
+ delete<K extends StringKeys<S>>(key: K): Promise<void>;
30
34
  /**
31
35
  * Reset current test run:
32
36
  * - clear all non-persistent values
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAK3D,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAGjE,OAAO,EAAE,iBAAiB,EAAE,CAAC;AAE7B,qBAAa,iBAAiB,CAAC,CAAC,SAAS,iBAAiB,GAAG,iBAAiB;IAI5E,MAAM,CAAC,MAAM,EAAE,iBAAiB;IAIhC;;;;;;OAMG;IACH,OAAO,KAAK,GAAG,GAGd;IAED;;OAEG;IAEG,GAAG,CAAC,CAAC,SAAS,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAsDzE;;;;OAIG;IACG,QAAQ,CAAC,CAAC,SAAS,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC;IAQ9C;;;;OAIG;IACG,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM;IAQ5C;;;;OAIG;IACG,YAAY;YA8BJ,YAAY;CAS3B"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAK3D,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAGjE,OAAO,EAAE,iBAAiB,EAAE,CAAC;AAE7B,qBAAa,iBAAiB,CAAC,CAAC,SAAS,iBAAiB,GAAG,iBAAiB;IAI5E,MAAM,CAAC,MAAM,EAAE,iBAAiB;IAIhC;;;;;;OAMG;IACH,OAAO,KAAK,GAAG,GAGd;IAED;;OAEG;IAEG,GAAG,CAAC,CAAC,SAAS,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAsDzE;;;;OAIG;IACG,QAAQ,CAAC,CAAC,SAAS,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC;IAQ9C;;;;OAIG;IACG,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM;IAQ5C;;OAEG;IACG,MAAM,CAAC,CAAC,SAAS,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC;IAM5C;;;;OAIG;IACG,YAAY;YA8BJ,YAAY;CAS3B"}
@@ -95,6 +95,14 @@ class GlobalCacheClient {
95
95
  (0, debug_1.debugKey)(prefix, `Fetched: ${values.length} value(s)`);
96
96
  return values;
97
97
  }
98
+ /**
99
+ * Delete a cached value by key, forcing re-computation on the next get() call.
100
+ */
101
+ async delete(key) {
102
+ (0, debug_1.debugKey)(key, `Deleting value...`);
103
+ await this.api.deleteKey(key);
104
+ (0, debug_1.debugKey)(key, `Deleted.`);
105
+ }
98
106
  /**
99
107
  * Reset current test run:
100
108
  * - clear all non-persistent values
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,3 +1,4 @@
1
1
  export { GlobalCacheClient, DefaultKeysSchema } from './client/index.js';
2
2
  export { globalConfig, GlobalCacheConfig } from './client/config.js';
3
+ export { logger } from './shared/logger.js';
3
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACrE,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC"}
package/dist/index.js CHANGED
@@ -1,8 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.globalConfig = exports.GlobalCacheClient = void 0;
3
+ exports.logger = exports.globalConfig = exports.GlobalCacheClient = void 0;
4
4
  var index_js_1 = require("./client/index.js");
5
5
  Object.defineProperty(exports, "GlobalCacheClient", { enumerable: true, get: function () { return index_js_1.GlobalCacheClient; } });
6
6
  var config_js_1 = require("./client/config.js");
7
7
  Object.defineProperty(exports, "globalConfig", { enumerable: true, get: function () { return config_js_1.globalConfig; } });
8
+ var logger_js_1 = require("./shared/logger.js");
9
+ Object.defineProperty(exports, "logger", { enumerable: true, get: function () { return logger_js_1.logger; } });
8
10
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,8CAAyE;AAAhE,6GAAA,iBAAiB,OAAA;AAC1B,gDAAqE;AAA5D,yGAAA,YAAY,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,8CAAyE;AAAhE,6GAAA,iBAAiB,OAAA;AAC1B,gDAAqE;AAA5D,yGAAA,YAAY,OAAA;AACrB,gDAA4C;AAAnC,mGAAA,MAAM,OAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"getter.d.ts","sourceRoot":"","sources":["../../src/server/getter.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEtE,KAAK,eAAe,GAAG;IAAE,MAAM,EAAE,YAAY,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AACjE,KAAK,cAAc,GAAG;IAAE,MAAM,EAAE,WAAW,CAAC;IAAC,SAAS,EAAE,gBAAgB,CAAA;CAAE,CAAC;AAC3E,KAAK,WAAW,GAAG;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AACxD,KAAK,uBAAuB,GAAG;IAAE,MAAM,EAAE,cAAc,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3E,MAAM,MAAM,YAAY,GAAG,eAAe,GAAG,cAAc,GAAG,WAAW,GAAG,uBAAuB,CAAC;AAEpG,qBAAa,MAAM;IAEf,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,iBAAiB;gBADjB,cAAc,EAAE,eAAe,EAC/B,iBAAiB,EAAE,kBAAkB;IAIzC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAmDxE,OAAO,CAAC,uBAAuB;IAO/B,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,WAAW;YAIL,sBAAsB;YAetB,aAAa;YAUb,aAAa;YAKb,aAAa;YAMb,eAAe;CAI9B"}
1
+ {"version":3,"file":"getter.d.ts","sourceRoot":"","sources":["../../src/server/getter.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEtE,KAAK,eAAe,GAAG;IAAE,MAAM,EAAE,YAAY,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AACjE,KAAK,cAAc,GAAG;IAAE,MAAM,EAAE,WAAW,CAAC;IAAC,SAAS,EAAE,gBAAgB,CAAA;CAAE,CAAC;AAC3E,KAAK,WAAW,GAAG;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AACxD,KAAK,uBAAuB,GAAG;IAAE,MAAM,EAAE,cAAc,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3E,MAAM,MAAM,YAAY,GAAG,eAAe,GAAG,cAAc,GAAG,WAAW,GAAG,uBAAuB,CAAC;AAEpG,qBAAa,MAAM;IAEf,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,iBAAiB;gBADjB,cAAc,EAAE,eAAe,EAC/B,iBAAiB,EAAE,kBAAkB;IAIzC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAmDxE,OAAO,CAAC,uBAAuB;IAO/B,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,WAAW;YAIL,sBAAsB;YAetB,aAAa;YAUb,aAAa;YAYb,aAAa;YAMb,eAAe;CAI9B"}
@@ -23,7 +23,7 @@ class Getter {
23
23
  }
24
24
  // wait if computing
25
25
  if (valueInfo?.state === 'computing') {
26
- valueInfo = await this.testRunStorage.wait(key);
26
+ valueInfo = await this.testRunStorage.waitForComputed(key);
27
27
  return valueInfo.state === 'computed'
28
28
  ? this.handleComputed(valueInfo)
29
29
  : this.handleError(valueInfo);
@@ -84,7 +84,14 @@ class Getter {
84
84
  return { result: 'cache-miss', message: `expired: ${ttl}` };
85
85
  }
86
86
  async handleNoValue(key, sig, ttl) {
87
- await this.updateValueInfo({ key, state: 'computing', sig, persistent: Boolean(ttl) });
87
+ const valueInfo = { key, state: 'computing', sig, persistent: Boolean(ttl) };
88
+ const claimed = this.testRunStorage.claimForComputing(valueInfo);
89
+ if (!claimed) {
90
+ const resolved = await this.testRunStorage.waitForComputed(key);
91
+ return resolved.state === 'computed'
92
+ ? this.handleComputed(resolved)
93
+ : this.handleError(resolved);
94
+ }
88
95
  return { result: 'cache-miss', message: 'no cached value' };
89
96
  }
90
97
  async handleDefault(valueInfo) {
@@ -1 +1 @@
1
- {"version":3,"file":"getter.js","sourceRoot":"","sources":["../../src/server/getter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"getter.js","sourceRoot":"","sources":["../../src/server/getter.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACH,uCAAkE;AAClE,uCAA0C;AAW1C,MAAa,MAAM;IACjB,YACU,cAA+B,EAC/B,iBAAqC;QADrC,mBAAc,GAAd,cAAc,CAAiB;QAC/B,sBAAiB,GAAjB,iBAAiB,CAAoB;IAC5C,CAAC;IAEJ,6DAA6D;IAC7D,KAAK,CAAC,GAAG,CAAC,GAAW,EAAE,GAAW,EAAE,GAAY;QAC9C,IAAI,SAAS,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAEpD,+CAA+C;QAC/C,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,iBAAiB,GAAG,IAAA,oBAAc,EAAC,GAAG,EAAE,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAClE,IAAI,iBAAiB,EAAE,CAAC;gBACtB,OAAO,IAAI,CAAC,uBAAuB,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC;QAED,oBAAoB;QACpB,IAAI,SAAS,EAAE,KAAK,KAAK,WAAW,EAAE,CAAC;YACrC,SAAS,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;YAC3D,OAAO,SAAS,CAAC,KAAK,KAAK,UAAU;gBACnC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC;gBAChC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QAClC,CAAC;QAED,+BAA+B;QAC/B,IAAI,CAAC,SAAS,IAAI,GAAG,EAAE,CAAC;YACtB,SAAS,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACnD,IAAI,SAAS,EAAE,CAAC;gBACd,MAAM,iBAAiB,GAAG,IAAA,oBAAc,EAAC,GAAG,EAAE,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;gBAClE,qCAAqC;gBACrC,IAAI,iBAAiB,EAAE,CAAC;oBACtB,OAAO,IAAI,CAAC,sBAAsB,CAAC,SAAS,EAAE,GAAG,EAAE,iBAAiB,CAAC,CAAC;gBACxE,CAAC;YACH,CAAC;QACH,CAAC;QAED,gBAAgB;QAChB,IAAI,SAAS,EAAE,KAAK,KAAK,UAAU,IAAI,SAAS,CAAC,UAAU,IAAI,GAAG,EAAE,CAAC;YACnE,IAAI,IAAA,eAAS,EAAC,SAAS,CAAC,UAAU,EAAE,GAAG,CAAC,EAAE,CAAC;gBACzC,OAAO,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;YAC5C,CAAC;QACH,CAAC;QAED,mBAAmB;QACnB,IAAI,SAAS,EAAE,KAAK,KAAK,UAAU,EAAE,CAAC;YACpC,OAAO,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QACxC,CAAC;QAED,WAAW;QACX,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QAC3C,CAAC;QAED,OAAO,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;IACvC,CAAC;IAEO,uBAAuB,CAC7B,GAAW,EACX,iBAAoC;QAEpC,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,mBAAmB,CAAC,GAAG,EAAE,iBAAiB,CAAC,EAAE,CAAC;IAC1F,CAAC;IAEO,cAAc,CAAC,SAA2B;QAChD,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC;IAC5C,CAAC;IAEO,WAAW,CAAC,SAA2B;QAC7C,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC,YAAY,IAAI,eAAe,EAAE,CAAC;IACjF,CAAC;IAEO,KAAK,CAAC,sBAAsB,CAClC,eAAiC,EACjC,MAAc,EACd,EAAE,KAAK,EAAqB;QAE5B,MAAM,IAAI,CAAC,eAAe,CAAC,eAAe,EAAE;YAC1C,KAAK,EAAE,WAAW;YAClB,GAAG,EAAE,MAAM;YACX,SAAS,EAAE,eAAe,CAAC,KAAK;YAChC,KAAK,EAAE,SAAS;YAChB,UAAU,EAAE,SAAS;SACtB,CAAC,CAAC;QACH,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,sBAAsB,KAAK,EAAE,EAAE,CAAC;IAC1E,CAAC;IAEO,KAAK,CAAC,aAAa,CAAC,SAA2B,EAAE,GAAW;QAClE,MAAM,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE;YACpC,KAAK,EAAE,WAAW;YAClB,SAAS,EAAE,SAAS,CAAC,KAAK;YAC1B,KAAK,EAAE,SAAS;YAChB,UAAU,EAAE,SAAS;SACtB,CAAC,CAAC;QACH,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,YAAY,GAAG,EAAE,EAAE,CAAC;IAC9D,CAAC;IAEO,KAAK,CAAC,aAAa,CAAC,GAAW,EAAE,GAAW,EAAE,GAAY;QAChE,MAAM,SAAS,GAAqB,EAAE,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/F,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;QACjE,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;YAChE,OAAO,QAAQ,CAAC,KAAK,KAAK,UAAU;gBAClC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC;gBAC/B,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QACjC,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC9D,CAAC;IAEO,KAAK,CAAC,aAAa,CAAC,SAA2B;QACrD,MAAM,OAAO,GAAG,cAAc,SAAS,CAAC,KAAK,EAAE,CAAC;QAChD,MAAM,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;QAC9D,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC;IAC3C,CAAC;IAEO,KAAK,CAAC,eAAe,CAAC,SAA2B,EAAE,KAAiC;QAC1F,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAChC,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC5C,CAAC;CACF;AAxHD,wBAwHC;AAED,SAAS,mBAAmB,CAAC,GAAW,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAqB;IACpF,OAAO;QACL,uBAAuB,KAAK,KAAK;QACjC,iDAAiD,GAAG,4BAA4B;QAChF,aAAa,KAAK,KAAK,MAAM,IAAI;QACjC,aAAa,KAAK,KAAK,MAAM,EAAE;KAChC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACb,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAkBA,OAAO,EAAE,uBAAuB,EAA4B,MAAM,UAAU,CAAC;AAG7E,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,GAAG,CAAa;IACxB,OAAO,CAAC,MAAM,CAA4B;;IAc1C,IAAI,IAAI,WAGP;IAED,IAAI,QAAQ,WAEX;IAED,IAAI,SAAS,YAEZ;IAEK,KAAK,CAAC,cAAc,CAAC,EAAE,uBAAuB;IAS9C,IAAI;CAUX;AAGD,eAAO,MAAM,iBAAiB,mBAA0B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAE,uBAAuB,EAA4B,MAAM,UAAU,CAAC;AAG7E,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,GAAG,CAAa;IACxB,OAAO,CAAC,MAAM,CAA4B;;IAe1C,IAAI,IAAI,WAGP;IAED,IAAI,QAAQ,WAEX;IAED,IAAI,SAAS,YAEZ;IAEK,KAAK,CAAC,cAAc,CAAC,EAAE,uBAAuB;IAc9C,IAAI;CAUX;AAGD,eAAO,MAAM,iBAAiB,mBAA0B,CAAC"}
@@ -12,6 +12,7 @@ const set_1 = require("./routes/set");
12
12
  const get_stale_1 = require("./routes/get-stale");
13
13
  const get_stale_list_1 = require("./routes/get-stale-list");
14
14
  const clear_1 = require("./routes/clear");
15
+ const delete_1 = require("./routes/delete");
15
16
  const error_1 = require("./error");
16
17
  const config_1 = require("./config");
17
18
  const express_2 = require("./utils/express");
@@ -19,13 +20,14 @@ class GlobalCacheServer {
19
20
  constructor() {
20
21
  this.app = (0, express_1.default)();
21
22
  this.server = null;
22
- this.app.use(express_1.default.json());
23
+ this.app.use(express_1.default.json({ limit: '10mb' }));
23
24
  this.app.use('/', root_1.router);
24
25
  this.app.use('/', get_1.router);
25
26
  this.app.use('/', set_1.router);
26
27
  this.app.use('/', get_stale_1.router);
27
28
  this.app.use('/', get_stale_list_1.router);
28
29
  this.app.use('/', clear_1.router);
30
+ this.app.use('/', delete_1.router);
29
31
  // Must be after all other middleware and routes
30
32
  this.app.use(error_1.errorHandler);
31
33
  }
@@ -45,6 +47,11 @@ class GlobalCacheServer {
45
47
  const config = (0, config_1.resolveConfig)(providedConfig);
46
48
  (0, config_1.setConfig)(this.app, config);
47
49
  this.server = await (0, express_2.startExpressServer)(this.app, config.port);
50
+ // unref() so the server does not prevent the Node.js process from exiting
51
+ // naturally when all other work is done (e.g. in CLI mode after tests finish).
52
+ // In VSCode / UI mode the process is kept alive by Playwright's own IPC
53
+ // channels, so the server stays up automatically for subsequent runs.
54
+ this.server.unref();
48
55
  (0, debug_1.debug)(`Starting server: done ${this.localUrl}`);
49
56
  }
50
57
  async stop() {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":";;;;;;AASA,sDAA8B;AAC9B,2CAAwC;AACxC,wCAAoD;AACpD,sCAAkD;AAClD,sCAAkD;AAClD,kDAA6D;AAC7D,4DAAsE;AACtE,0CAA6D;AAC7D,mCAAuC;AACvC,qCAA6E;AAC7E,6CAAwE;AAExE,MAAa,iBAAiB;IAI5B;QAHQ,QAAG,GAAG,IAAA,iBAAO,GAAE,CAAC;QAChB,WAAM,GAAuB,IAAI,CAAC;QAGxC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,iBAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QAC7B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,aAAS,CAAC,CAAC;QAC7B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,YAAQ,CAAC,CAAC;QAC5B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,YAAQ,CAAC,CAAC;QAC5B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,kBAAa,CAAC,CAAC;QACjC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,uBAAiB,CAAC,CAAC;QACrC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,cAAiB,CAAC,CAAC;QACrC,gDAAgD;QAChD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,oBAAY,CAAC,CAAC;IAC7B,CAAC;IAED,IAAI,IAAI;QACN,MAAM,EAAE,IAAI,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAkB,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/E,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,QAAQ;QACV,OAAO,oBAAoB,IAAI,CAAC,IAAI,EAAE,CAAC;IACzC,CAAC;IAED,IAAI,SAAS;QACX,OAAO,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,cAAwC;QAClD,sCAAsC;QACtC,IAAA,aAAK,EAAC,oBAAoB,CAAC,CAAC;QAC5B,MAAM,MAAM,GAAG,IAAA,sBAAa,EAAC,cAAc,CAAC,CAAC;QAC7C,IAAA,kBAAS,EAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAC5B,IAAI,CAAC,MAAM,GAAG,MAAM,IAAA,4BAAkB,EAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QAC9D,IAAA,aAAK,EAAC,yBAAyB,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;IAClD,CAAC;IAED,KAAK,CAAC,IAAI;QACR,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO;QAC5C,IAAA,aAAK,EAAC,4BAA4B,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAC/C,IAAI,CAAC;YACH,MAAM,IAAA,2BAAiB,EAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACvC,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACrB,CAAC;QACD,IAAA,aAAK,EAAC,wBAAwB,CAAC,CAAC;IAClC,CAAC;CACF;AAhDD,8CAgDC;AAED,sDAAsD;AACzC,QAAA,iBAAiB,GAAG,IAAI,iBAAiB,EAAE,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { Router } from 'express';
2
+ export declare const router: ReturnType<typeof Router>;
3
+ export type DeleteValueParams = {
4
+ key: string;
5
+ };
6
+ //# sourceMappingURL=delete.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../../src/server/routes/delete.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,MAAM,EAAE,MAAM,SAAS,CAAC;AAI1C,eAAO,MAAM,MAAM,EAAE,UAAU,CAAC,OAAO,MAAM,CAAY,CAAC;AAE1D,MAAM,MAAM,iBAAiB,GAAG;IAC9B,GAAG,EAAE,MAAM,CAAC;CACb,CAAC"}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.router = void 0;
4
+ const express_1 = require("express");
5
+ const config_1 = require("../config");
6
+ const storage_1 = require("../storage");
7
+ exports.router = (0, express_1.Router)();
8
+ exports.router.post('/run/:runId/delete', async (req, res) => {
9
+ const { runId } = req.params;
10
+ const { key } = req.body;
11
+ const config = (0, config_1.getConfig)(req.app);
12
+ const { testRunStorage, persistentStorage } = (0, storage_1.getStorage)(config, runId);
13
+ const valueInfo = await testRunStorage.load(key);
14
+ await testRunStorage.delete(key);
15
+ if (valueInfo?.persistent)
16
+ await persistentStorage.delete(key);
17
+ res.end();
18
+ });
19
+ //# sourceMappingURL=delete.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete.js","sourceRoot":"","sources":["../../../src/server/routes/delete.ts"],"names":[],"mappings":";;;AAAA,qCAA0C;AAC1C,sCAAsC;AACtC,wCAAwC;AAE3B,QAAA,MAAM,GAA8B,IAAA,gBAAM,GAAE,CAAC;AAM1D,cAAM,CAAC,IAAI,CAAC,oBAAoB,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;IACnD,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC;IAC7B,MAAM,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,IAAyB,CAAC;IAC9C,MAAM,MAAM,GAAG,IAAA,kBAAS,EAAC,GAAG,CAAC,GAAc,CAAC,CAAC;IAE7C,MAAM,EAAE,cAAc,EAAE,iBAAiB,EAAE,GAAG,IAAA,oBAAU,EAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAExE,MAAM,SAAS,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACjD,MAAM,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACjC,IAAI,SAAS,EAAE,UAAU;QAAE,MAAM,iBAAiB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAE/D,GAAG,CAAC,GAAG,EAAE,CAAC;AACZ,CAAC,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"setter.d.ts","sourceRoot":"","sources":["../../src/server/setter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEtE,qBAAa,MAAM;IAEf,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,iBAAiB;gBADjB,cAAc,EAAE,eAAe,EAC/B,iBAAiB,EAAE,kBAAkB;IAIzC,GAAG,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE;CAwBlF"}
1
+ {"version":3,"file":"setter.d.ts","sourceRoot":"","sources":["../../src/server/setter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEtE,qBAAa,MAAM;IAEf,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,iBAAiB;gBADjB,cAAc,EAAE,eAAe,EAC/B,iBAAiB,EAAE,kBAAkB;IAIzC,GAAG,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE;CA0BlF"}
@@ -15,7 +15,7 @@ class Setter {
15
15
  throw new Error(`Cannot set value for key "${key}" that is not loaded.`);
16
16
  }
17
17
  if (valueInfo.state !== 'computing') {
18
- throw new Error(`Cannot set value for key "${key}" that is not in "computing" state.`);
18
+ throw new Error(`Cannot set value for key "${key}" that is not in "computing" state (${valueInfo.state}).`);
19
19
  }
20
20
  if (error) {
21
21
  (0, value_info_1.setError)(valueInfo, error);
@@ -1 +1 @@
1
- {"version":3,"file":"setter.js","sourceRoot":"","sources":["../../src/server/setter.ts"],"names":[],"mappings":";;;AAAA,qDAA6D;AAG7D,MAAa,MAAM;IACjB,YACU,cAA+B,EAC/B,iBAAqC;QADrC,mBAAc,GAAd,cAAc,CAAiB;QAC/B,sBAAiB,GAAjB,iBAAiB,CAAoB;IAC5C,CAAC;IAEJ,6DAA6D;IAC7D,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAoD;QAC/E,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAEtD,6BAA6B;QAC7B,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,6BAA6B,GAAG,uBAAuB,CAAC,CAAC;QAC3E,CAAC;QACD,IAAI,SAAS,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,6BAA6B,GAAG,qCAAqC,CAAC,CAAC;QACzF,CAAC;QAED,IAAI,KAAK,EAAE,CAAC;YACV,IAAA,qBAAQ,EAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YAC3B,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;YAC5D,yEAAyE;YACzE,IAAI,SAAS,CAAC,UAAU;gBAAE,MAAM,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACrE,CAAC;aAAM,CAAC;YACN,IAAA,wBAAW,EAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YAC9B,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;YAC5D,IAAI,SAAS,CAAC,UAAU;gBAAE,MAAM,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACzE,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;CACF;AA/BD,wBA+BC"}
1
+ {"version":3,"file":"setter.js","sourceRoot":"","sources":["../../src/server/setter.ts"],"names":[],"mappings":";;;AAAA,qDAA6D;AAG7D,MAAa,MAAM;IACjB,YACU,cAA+B,EAC/B,iBAAqC;QADrC,mBAAc,GAAd,cAAc,CAAiB;QAC/B,sBAAiB,GAAjB,iBAAiB,CAAoB;IAC5C,CAAC;IAEJ,6DAA6D;IAC7D,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAoD;QAC/E,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAEtD,6BAA6B;QAC7B,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,6BAA6B,GAAG,uBAAuB,CAAC,CAAC;QAC3E,CAAC;QACD,IAAI,SAAS,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CACb,6BAA6B,GAAG,uCAAuC,SAAS,CAAC,KAAK,IAAI,CAC3F,CAAC;QACJ,CAAC;QAED,IAAI,KAAK,EAAE,CAAC;YACV,IAAA,qBAAQ,EAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YAC3B,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;YAC5D,yEAAyE;YACzE,IAAI,SAAS,CAAC,UAAU;gBAAE,MAAM,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACrE,CAAC;aAAM,CAAC;YACN,IAAA,wBAAW,EAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YAC9B,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;YAC5D,IAAI,SAAS,CAAC,UAAU;gBAAE,MAAM,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACzE,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;CACF;AAjCD,wBAiCC"}
@@ -8,8 +8,22 @@ export declare class MemoryStorage implements ITestRunStorage {
8
8
  save(valueInfo: TestRunValueInfo, { notify }?: {
9
9
  notify?: boolean | undefined;
10
10
  }): Promise<void>;
11
+ delete(key: string): Promise<void>;
11
12
  clear(): Promise<void>;
12
- wait(key: string): Promise<TestRunValueInfo>;
13
+ /**
14
+ * Atomically claims the key for computing if it is not yet present.
15
+ *
16
+ * Concurrent workers all call `await testRunStorage.load(key)`, which yields the event loop,
17
+ * so all of them can see `undefined` simultaneously. Using async `save()` for the initial
18
+ * write would let every worker return `cache-miss`, compute in parallel, and collide in
19
+ * `setter.set()` — which only accepts a single `'computing'` caller.
20
+ *
21
+ * Because this method has no `await`, Node.js's single-threaded event loop makes
22
+ * `Map.has()` + `Map.set()` atomic. Only the first caller gets `true` (proceeds to compute);
23
+ * all subsequent callers get `false` (and wait).
24
+ */
25
+ claimForComputing(valueInfo: TestRunValueInfo): boolean;
26
+ waitForComputed(key: string): Promise<TestRunValueInfo>;
13
27
  private notify;
14
28
  }
15
29
  //# sourceMappingURL=memory.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../../../src/server/storage/single-instance/memory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAI3C,qBAAa,aAAc,YAAW,eAAe;IACnD,OAAO,CAAC,MAAM,CAAuC;IACrD,OAAO,CAAC,SAAS,CAA2C;IAEtD,IAAI,CAAC,GAAG,EAAE,MAAM;IAIhB,YAAY,CAAC,MAAM,EAAE,MAAM;IAI3B,IAAI,CAAC,SAAS,EAAE,gBAAgB,EAAE,EAAE,MAAc,EAAE;;KAAK;IAKzD,KAAK;IAIL,IAAI,CAAC,GAAG,EAAE,MAAM;IAQtB,OAAO,CAAC,MAAM;CAQf"}
1
+ {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../../../src/server/storage/single-instance/memory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAI3C,qBAAa,aAAc,YAAW,eAAe;IACnD,OAAO,CAAC,MAAM,CAAuC;IACrD,OAAO,CAAC,SAAS,CAA2C;IAEtD,IAAI,CAAC,GAAG,EAAE,MAAM;IAIhB,YAAY,CAAC,MAAM,EAAE,MAAM;IAI3B,IAAI,CAAC,SAAS,EAAE,gBAAgB,EAAE,EAAE,MAAc,EAAE;;KAAK;IAKzD,MAAM,CAAC,GAAG,EAAE,MAAM;IAIlB,KAAK;IAIX;;;;;;;;;;;OAWG;IACH,iBAAiB,CAAC,SAAS,EAAE,gBAAgB,GAAG,OAAO;IAMjD,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAY7D,OAAO,CAAC,MAAM;CAQf"}
@@ -17,10 +17,35 @@ class MemoryStorage {
17
17
  if (notify)
18
18
  this.notify(valueInfo);
19
19
  }
20
+ async delete(key) {
21
+ this.values.delete(key);
22
+ }
20
23
  async clear() {
21
24
  this.values.clear();
22
25
  }
23
- async wait(key) {
26
+ /**
27
+ * Atomically claims the key for computing if it is not yet present.
28
+ *
29
+ * Concurrent workers all call `await testRunStorage.load(key)`, which yields the event loop,
30
+ * so all of them can see `undefined` simultaneously. Using async `save()` for the initial
31
+ * write would let every worker return `cache-miss`, compute in parallel, and collide in
32
+ * `setter.set()` — which only accepts a single `'computing'` caller.
33
+ *
34
+ * Because this method has no `await`, Node.js's single-threaded event loop makes
35
+ * `Map.has()` + `Map.set()` atomic. Only the first caller gets `true` (proceeds to compute);
36
+ * all subsequent callers get `false` (and wait).
37
+ */
38
+ claimForComputing(valueInfo) {
39
+ if (this.values.has(valueInfo.key))
40
+ return false;
41
+ this.values.set(valueInfo.key, valueInfo);
42
+ return true;
43
+ }
44
+ async waitForComputed(key) {
45
+ // Guard: if notify already fired before we registered, return immediately.
46
+ const existing = this.values.get(key);
47
+ if (existing && existing.state !== 'computing')
48
+ return existing;
24
49
  return new Promise((resolve) => {
25
50
  const listeners = this.listeners.get(key) || [];
26
51
  listeners.push(resolve);
@@ -1 +1 @@
1
- {"version":3,"file":"memory.js","sourceRoot":"","sources":["../../../../src/server/storage/single-instance/memory.ts"],"names":[],"mappings":";;;AAKA,MAAa,aAAa;IAA1B;QACU,WAAM,GAAG,IAAI,GAAG,EAA4B,CAAC;QAC7C,cAAS,GAAG,IAAI,GAAG,EAAgC,CAAC;IAmC9D,CAAC;IAjCC,KAAK,CAAC,IAAI,CAAC,GAAW;QACpB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,MAAc;QAC/B,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;IAC3F,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,SAA2B,EAAE,EAAE,MAAM,GAAG,KAAK,EAAE,GAAG,EAAE;QAC7D,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QAC1C,IAAI,MAAM;YAAE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACrC,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IACtB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,GAAW;QACpB,OAAO,IAAI,OAAO,CAAmB,CAAC,OAAO,EAAE,EAAE;YAC/C,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;YAChD,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACxB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,MAAM,CAAC,SAA2B;QACxC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QACpD,IAAI,CAAC;YACH,SAAS,EAAE,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;QACtD,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;CACF;AArCD,sCAqCC"}
1
+ {"version":3,"file":"memory.js","sourceRoot":"","sources":["../../../../src/server/storage/single-instance/memory.ts"],"names":[],"mappings":";;;AAKA,MAAa,aAAa;IAA1B;QACU,WAAM,GAAG,IAAI,GAAG,EAA4B,CAAC;QAC7C,cAAS,GAAG,IAAI,GAAG,EAAgC,CAAC;IA6D9D,CAAC;IA3DC,KAAK,CAAC,IAAI,CAAC,GAAW;QACpB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,MAAc;QAC/B,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;IAC3F,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,SAA2B,EAAE,EAAE,MAAM,GAAG,KAAK,EAAE,GAAG,EAAE;QAC7D,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QAC1C,IAAI,MAAM;YAAE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACrC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,GAAW;QACtB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IACtB,CAAC;IAED;;;;;;;;;;;OAWG;IACH,iBAAiB,CAAC,SAA2B;QAC3C,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC;QACjD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QAC1C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,GAAW;QAC/B,2EAA2E;QAC3E,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACtC,IAAI,QAAQ,IAAI,QAAQ,CAAC,KAAK,KAAK,WAAW;YAAE,OAAO,QAAQ,CAAC;QAEhE,OAAO,IAAI,OAAO,CAAmB,CAAC,OAAO,EAAE,EAAE;YAC/C,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;YAChD,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACxB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,MAAM,CAAC,SAA2B;QACxC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QACpD,IAAI,CAAC;YACH,SAAS,EAAE,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;QACtD,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;CACF;AA/DD,sCA+DC"}
@@ -4,7 +4,9 @@ export type ITestRunStorage = {
4
4
  save(valueInfo: TestRunValueInfo, options?: {
5
5
  notify?: boolean;
6
6
  }): Promise<void>;
7
- wait(key: string): Promise<TestRunValueInfo>;
7
+ delete(key: string): Promise<void>;
8
+ waitForComputed(key: string): Promise<TestRunValueInfo>;
9
+ claimForComputing(valueInfo: TestRunValueInfo): boolean;
8
10
  };
9
11
  export type IPersistentStorage = {
10
12
  load(key: string): Promise<TestRunValueInfo | undefined>;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/server/storage/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE3D,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC,CAAC;IACzD,IAAI,CAAC,SAAS,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjF,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;CAC9C,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC,CAAC;IACzD,IAAI,CAAC,SAAS,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACpC,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/server/storage/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE3D,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC,CAAC;IACzD,IAAI,CAAC,SAAS,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjF,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACxD,iBAAiB,CAAC,SAAS,EAAE,gBAAgB,GAAG,OAAO,CAAC;CACzD,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC,CAAC;IACzD,IAAI,CAAC,SAAS,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACpC,CAAC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@global-cache/core",
3
3
  "description": "Key-value cache for sharing data between parallel workers.",
4
- "version": "0.4.0",
4
+ "version": "0.5.0",
5
5
  "type": "commonjs",
6
6
  "main": "./dist/index.js",
7
7
  "types": "./dist/index.d.ts",
@@ -17,6 +17,10 @@
17
17
  ]
18
18
  }
19
19
  },
20
+ "repository": {
21
+ "type": "git",
22
+ "url": "git+https://github.com/vitalets/global-cache.git"
23
+ },
20
24
  "engines": {
21
25
  "node": ">=20"
22
26
  },
@@ -26,11 +30,11 @@
26
30
  "README.md"
27
31
  ],
28
32
  "dependencies": {
29
- "@types/debug": "^4.1.12",
30
- "@types/express": "^5.0.3",
33
+ "@types/debug": "^4.1.13",
34
+ "@types/express": "^5.0.6",
31
35
  "@types/ms": "^2.1.0",
32
- "debug": "^4.4.1",
33
- "express": "^5.1.0",
36
+ "debug": "^4.4.3",
37
+ "express": "^5.2.1",
34
38
  "ms": "^2.1.3"
35
39
  },
36
40
  "publishConfig": {
package/src/client/api.ts CHANGED
@@ -2,6 +2,7 @@ import type { GetValueParams, GetValueResponse } from '../server/routes/get';
2
2
  import type { SetValueParams, SetValueResponse } from '../server/routes/set';
3
3
  import type { GetStaleParams, SetStaleResponse } from '../server/routes/get-stale';
4
4
  import type { GetStaleListParams, SetStaleListResponse } from '../server/routes/get-stale-list';
5
+ import type { DeleteValueParams } from '../server/routes/delete';
5
6
  import { TTL } from '../shared/ttl';
6
7
  import { HttpClient } from './utils/http-client';
7
8
  import { prepareQueryParams } from './utils/http-query';
@@ -51,4 +52,10 @@ export class StorageApi {
51
52
  const res = await this.http.post('clear');
52
53
  await throwIfHttpError(res, 'Failed to clear test run:');
53
54
  }
55
+
56
+ async deleteKey(key: string) {
57
+ const body: DeleteValueParams = { key };
58
+ const res = await this.http.post('delete', body);
59
+ await throwIfHttpError(res, `Failed to delete key "${key}":`);
60
+ }
54
61
  }
@@ -112,6 +112,15 @@ export class GlobalCacheClient<S extends DefaultKeysSchema = DefaultKeysSchema>
112
112
  return values as ValueType[];
113
113
  }
114
114
 
115
+ /**
116
+ * Delete a cached value by key, forcing re-computation on the next get() call.
117
+ */
118
+ async delete<K extends StringKeys<S>>(key: K) {
119
+ debugKey(key, `Deleting value...`);
120
+ await this.api.deleteKey(key);
121
+ debugKey(key, `Deleted.`);
122
+ }
123
+
115
124
  /**
116
125
  * Reset current test run:
117
126
  * - clear all non-persistent values
package/src/index.ts CHANGED
@@ -1,2 +1,3 @@
1
1
  export { GlobalCacheClient, DefaultKeysSchema } from './client/index.js';
2
2
  export { globalConfig, GlobalCacheConfig } from './client/config.js';
3
+ export { logger } from './shared/logger.js';
@@ -33,7 +33,7 @@ export class Getter {
33
33
 
34
34
  // wait if computing
35
35
  if (valueInfo?.state === 'computing') {
36
- valueInfo = await this.testRunStorage.wait(key);
36
+ valueInfo = await this.testRunStorage.waitForComputed(key);
37
37
  return valueInfo.state === 'computed'
38
38
  ? this.handleComputed(valueInfo)
39
39
  : this.handleError(valueInfo);
@@ -111,8 +111,15 @@ export class Getter {
111
111
  return { result: 'cache-miss', message: `expired: ${ttl}` };
112
112
  }
113
113
 
114
- private async handleNoValue(key: string, sig: string, ttl?: number): Promise<GetterCacheMiss> {
115
- await this.updateValueInfo({ key, state: 'computing', sig, persistent: Boolean(ttl) });
114
+ private async handleNoValue(key: string, sig: string, ttl?: number): Promise<GetterResult> {
115
+ const valueInfo: TestRunValueInfo = { key, state: 'computing', sig, persistent: Boolean(ttl) };
116
+ const claimed = this.testRunStorage.claimForComputing(valueInfo);
117
+ if (!claimed) {
118
+ const resolved = await this.testRunStorage.waitForComputed(key);
119
+ return resolved.state === 'computed'
120
+ ? this.handleComputed(resolved)
121
+ : this.handleError(resolved);
122
+ }
116
123
  return { result: 'cache-miss', message: 'no cached value' };
117
124
  }
118
125
 
@@ -15,6 +15,7 @@ import { router as routeSet } from './routes/set';
15
15
  import { router as routeGetStale } from './routes/get-stale';
16
16
  import { router as routeGetStaleList } from './routes/get-stale-list';
17
17
  import { router as routeClearTestRun } from './routes/clear';
18
+ import { router as routeDeleteValue } from './routes/delete';
18
19
  import { errorHandler } from './error';
19
20
  import { GlobalCacheServerConfig, resolveConfig, setConfig } from './config';
20
21
  import { startExpressServer, stopExpressServer } from './utils/express';
@@ -24,13 +25,14 @@ export class GlobalCacheServer {
24
25
  private server: http.Server | null = null;
25
26
 
26
27
  constructor() {
27
- this.app.use(express.json());
28
+ this.app.use(express.json({ limit: '10mb' }));
28
29
  this.app.use('/', routeRoot);
29
30
  this.app.use('/', routeGet);
30
31
  this.app.use('/', routeSet);
31
32
  this.app.use('/', routeGetStale);
32
33
  this.app.use('/', routeGetStaleList);
33
34
  this.app.use('/', routeClearTestRun);
35
+ this.app.use('/', routeDeleteValue);
34
36
  // Must be after all other middleware and routes
35
37
  this.app.use(errorHandler);
36
38
  }
@@ -54,6 +56,11 @@ export class GlobalCacheServer {
54
56
  const config = resolveConfig(providedConfig);
55
57
  setConfig(this.app, config);
56
58
  this.server = await startExpressServer(this.app, config.port);
59
+ // unref() so the server does not prevent the Node.js process from exiting
60
+ // naturally when all other work is done (e.g. in CLI mode after tests finish).
61
+ // In VSCode / UI mode the process is kept alive by Playwright's own IPC
62
+ // channels, so the server stays up automatically for subsequent runs.
63
+ this.server.unref();
57
64
  debug(`Starting server: done ${this.localUrl}`);
58
65
  }
59
66
 
@@ -0,0 +1,23 @@
1
+ import { Express, Router } from 'express';
2
+ import { getConfig } from '../config';
3
+ import { getStorage } from '../storage';
4
+
5
+ export const router: ReturnType<typeof Router> = Router();
6
+
7
+ export type DeleteValueParams = {
8
+ key: string;
9
+ };
10
+
11
+ router.post('/run/:runId/delete', async (req, res) => {
12
+ const { runId } = req.params;
13
+ const { key } = req.body as DeleteValueParams;
14
+ const config = getConfig(req.app as Express);
15
+
16
+ const { testRunStorage, persistentStorage } = getStorage(config, runId);
17
+
18
+ const valueInfo = await testRunStorage.load(key);
19
+ await testRunStorage.delete(key);
20
+ if (valueInfo?.persistent) await persistentStorage.delete(key);
21
+
22
+ res.end();
23
+ });
@@ -16,7 +16,9 @@ export class Setter {
16
16
  throw new Error(`Cannot set value for key "${key}" that is not loaded.`);
17
17
  }
18
18
  if (valueInfo.state !== 'computing') {
19
- throw new Error(`Cannot set value for key "${key}" that is not in "computing" state.`);
19
+ throw new Error(
20
+ `Cannot set value for key "${key}" that is not in "computing" state (${valueInfo.state}).`,
21
+ );
20
22
  }
21
23
 
22
24
  if (error) {
@@ -20,11 +20,37 @@ export class MemoryStorage implements ITestRunStorage {
20
20
  if (notify) this.notify(valueInfo);
21
21
  }
22
22
 
23
+ async delete(key: string) {
24
+ this.values.delete(key);
25
+ }
26
+
23
27
  async clear() {
24
28
  this.values.clear();
25
29
  }
26
30
 
27
- async wait(key: string) {
31
+ /**
32
+ * Atomically claims the key for computing if it is not yet present.
33
+ *
34
+ * Concurrent workers all call `await testRunStorage.load(key)`, which yields the event loop,
35
+ * so all of them can see `undefined` simultaneously. Using async `save()` for the initial
36
+ * write would let every worker return `cache-miss`, compute in parallel, and collide in
37
+ * `setter.set()` — which only accepts a single `'computing'` caller.
38
+ *
39
+ * Because this method has no `await`, Node.js's single-threaded event loop makes
40
+ * `Map.has()` + `Map.set()` atomic. Only the first caller gets `true` (proceeds to compute);
41
+ * all subsequent callers get `false` (and wait).
42
+ */
43
+ claimForComputing(valueInfo: TestRunValueInfo): boolean {
44
+ if (this.values.has(valueInfo.key)) return false;
45
+ this.values.set(valueInfo.key, valueInfo);
46
+ return true;
47
+ }
48
+
49
+ async waitForComputed(key: string): Promise<TestRunValueInfo> {
50
+ // Guard: if notify already fired before we registered, return immediately.
51
+ const existing = this.values.get(key);
52
+ if (existing && existing.state !== 'computing') return existing;
53
+
28
54
  return new Promise<TestRunValueInfo>((resolve) => {
29
55
  const listeners = this.listeners.get(key) || [];
30
56
  listeners.push(resolve);
@@ -3,7 +3,9 @@ import { TestRunValueInfo } from '../../shared/value-info';
3
3
  export type ITestRunStorage = {
4
4
  load(key: string): Promise<TestRunValueInfo | undefined>;
5
5
  save(valueInfo: TestRunValueInfo, options?: { notify?: boolean }): Promise<void>;
6
- wait(key: string): Promise<TestRunValueInfo>;
6
+ delete(key: string): Promise<void>;
7
+ waitForComputed(key: string): Promise<TestRunValueInfo>;
8
+ claimForComputing(valueInfo: TestRunValueInfo): boolean;
7
9
  };
8
10
 
9
11
  export type IPersistentStorage = {
@@ -1,14 +0,0 @@
1
- /**
2
- * Simple http client for json payloads.
3
- */
4
- export type QueryParams<T extends Record<string, unknown>> = {
5
- [K in keyof T]: string;
6
- };
7
- export declare class HttpJson {
8
- private baseUrl;
9
- constructor(baseUrl: string);
10
- get(pathname: string, query?: Record<string, string>): Promise<Response>;
11
- post(pathname: string, bodyObj?: Record<string, unknown>): Promise<Response>;
12
- buildUrl(pathname: string, query?: Record<string, string>): string;
13
- }
14
- //# sourceMappingURL=http-json.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"http-json.d.ts","sourceRoot":"","sources":["../../../src/client/utils/http-json.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI;KAC1D,CAAC,IAAI,MAAM,CAAC,GAAG,MAAM;CACvB,CAAC;AAEF,qBAAa,QAAQ;IACP,OAAO,CAAC,OAAO;gBAAP,OAAO,EAAE,MAAM;IAE7B,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAKpD,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAM9D,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;CAK1D"}
@@ -1,29 +0,0 @@
1
- "use strict";
2
- /**
3
- * Simple http client for json payloads.
4
- */
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.HttpJson = void 0;
7
- const http_query_1 = require("./http-query");
8
- const headers = { 'Content-Type': 'application/json' };
9
- class HttpJson {
10
- constructor(baseUrl) {
11
- this.baseUrl = baseUrl;
12
- }
13
- async get(pathname, query) {
14
- const url = this.buildUrl(pathname, query);
15
- return fetch(url, { method: 'GET', headers });
16
- }
17
- async post(pathname, bodyObj) {
18
- const url = this.buildUrl(pathname);
19
- const body = bodyObj ? JSON.stringify(bodyObj) : undefined;
20
- return fetch(url, { method: 'POST', headers, body });
21
- }
22
- buildUrl(pathname, query) {
23
- const url = new URL(pathname, this.baseUrl);
24
- (0, http_query_1.addSearchParams)(url, query);
25
- return url.toString();
26
- }
27
- }
28
- exports.HttpJson = HttpJson;
29
- //# sourceMappingURL=http-json.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"http-json.js","sourceRoot":"","sources":["../../../src/client/utils/http-json.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,6CAA+C;AAE/C,MAAM,OAAO,GAAG,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC;AAMvD,MAAa,QAAQ;IACnB,YAAoB,OAAe;QAAf,YAAO,GAAP,OAAO,CAAQ;IAAG,CAAC;IAEvC,KAAK,CAAC,GAAG,CAAC,QAAgB,EAAE,KAA8B;QACxD,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAC3C,OAAO,KAAK,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,QAAgB,EAAE,OAAiC;QAC5D,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACpC,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC3D,OAAO,KAAK,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,QAAQ,CAAC,QAAgB,EAAE,KAA8B;QACvD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAC5C,IAAA,4BAAe,EAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC5B,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;IACxB,CAAC;CACF;AAnBD,4BAmBC"}
package/dist/config.d.ts DELETED
@@ -1,30 +0,0 @@
1
- export type GlobalCacheConfig = {
2
- ignoreTTL?: boolean;
3
- basePath?: string;
4
- disabled?: boolean;
5
- serverUrl?: string;
6
- };
7
- type GlobalConfigInternal = GlobalCacheConfig & {
8
- runId?: string;
9
- localServerUrl?: string;
10
- };
11
- export declare class GlobalConfig {
12
- private config;
13
- constructor();
14
- update(config: Partial<GlobalConfigInternal>): void;
15
- /**
16
- * Generate new runId or re-use from env variable.
17
- * There can be multiple test runs within single server session.
18
- */
19
- newTestRun(): void;
20
- get localServerUrl(): string | undefined;
21
- get externalServerUrl(): string | undefined;
22
- get serverUrl(): string | undefined;
23
- get ignoreTTL(): boolean;
24
- get basePath(): string | undefined;
25
- get disabled(): boolean;
26
- get runId(): string;
27
- }
28
- export declare const globalConfig: GlobalConfig;
29
- export {};
30
- //# sourceMappingURL=config.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,iBAAiB,GAAG;IAE9B,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,KAAK,oBAAoB,GAAG,iBAAiB,GAAG;IAC9C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAA4B;;IAO1C,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,oBAAoB,CAAC;IAK5C;;;OAGG;IACH,UAAU;IAIV,IAAI,cAAc,uBAEjB;IAED,IAAI,iBAAiB,uBAEpB;IAED,IAAI,SAAS,uBAEZ;IAED,IAAI,SAAS,YAEZ;IAED,IAAI,QAAQ,uBAEX;IAED,IAAI,QAAQ,YAEX;IAED,IAAI,KAAK,WAIR;CACF;AAYD,eAAO,MAAM,YAAY,cAAqB,CAAC"}
package/dist/config.js DELETED
@@ -1,63 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.globalConfig = exports.GlobalConfig = void 0;
4
- /**
5
- * Global config is shared across host and all workers via env variables.
6
- * Assumption here is that all runners start workers with the same env.
7
- */
8
- const node_crypto_1 = require("node:crypto");
9
- const object_1 = require("./shared/utils/object");
10
- class GlobalConfig {
11
- constructor() {
12
- this.config = {};
13
- Object.assign(this.config, getConfigFromEnv());
14
- if (!this.config.runId)
15
- this.newTestRun();
16
- }
17
- update(config) {
18
- Object.assign(this.config, (0, object_1.removeUndefined)(config));
19
- saveConfigToEnv(this.config);
20
- }
21
- /**
22
- * Generate new runId or re-use from env variable.
23
- * There can be multiple test runs within single server session.
24
- */
25
- newTestRun() {
26
- this.update({ runId: process.env.GLOBAL_CACHE_RUN_ID || (0, node_crypto_1.randomUUID)() });
27
- }
28
- get localServerUrl() {
29
- return this.config.localServerUrl;
30
- }
31
- get externalServerUrl() {
32
- return this.config.serverUrl;
33
- }
34
- get serverUrl() {
35
- return this.externalServerUrl || this.localServerUrl;
36
- }
37
- get ignoreTTL() {
38
- return Boolean(this.config.ignoreTTL);
39
- }
40
- get basePath() {
41
- return this.config.basePath;
42
- }
43
- get disabled() {
44
- return Boolean(this.config.disabled);
45
- }
46
- get runId() {
47
- const { runId } = this.config;
48
- if (!runId)
49
- throw new Error('RunId is not set.');
50
- return runId;
51
- }
52
- }
53
- exports.GlobalConfig = GlobalConfig;
54
- function getConfigFromEnv() {
55
- const configFromEnv = process.env.GLOBAL_CACHE_CONFIG;
56
- return configFromEnv ? JSON.parse(configFromEnv) : undefined;
57
- }
58
- function saveConfigToEnv(config) {
59
- process.env.GLOBAL_CACHE_CONFIG = JSON.stringify(config);
60
- }
61
- /* Export singleton instance */
62
- exports.globalConfig = new GlobalConfig();
63
- //# sourceMappingURL=config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACH,6CAAyC;AACzC,kDAAwD;AAkBxD,MAAa,YAAY;IAGvB;QAFQ,WAAM,GAAyB,EAAE,CAAC;QAGxC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,gBAAgB,EAAE,CAAC,CAAC;QAC/C,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK;YAAE,IAAI,CAAC,UAAU,EAAE,CAAC;IAC5C,CAAC;IAED,MAAM,CAAC,MAAqC;QAC1C,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,IAAA,wBAAe,EAAC,MAAM,CAAC,CAAC,CAAC;QACpD,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC;IAED;;;OAGG;IACH,UAAU;QACR,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,IAAA,wBAAU,GAAE,EAAE,CAAC,CAAC;IAC1E,CAAC;IAED,IAAI,cAAc;QAChB,OAAO,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC;IACpC,CAAC;IAED,IAAI,iBAAiB;QACnB,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;IAC/B,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,cAAc,CAAC;IACvD,CAAC;IAED,IAAI,SAAS;QACX,OAAO,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACxC,CAAC;IAED,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;IAC9B,CAAC;IAED,IAAI,QAAQ;QACV,OAAO,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACvC,CAAC;IAED,IAAI,KAAK;QACP,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC;QAC9B,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;QACjD,OAAO,KAAK,CAAC;IACf,CAAC;CACF;AAlDD,oCAkDC;AAED,SAAS,gBAAgB;IACvB,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;IACtD,OAAO,aAAa,CAAC,CAAC,CAAE,IAAI,CAAC,KAAK,CAAC,aAAa,CAAuB,CAAC,CAAC,CAAC,SAAS,CAAC;AACtF,CAAC;AAED,SAAS,eAAe,CAAC,MAAyB;IAChD,OAAO,CAAC,GAAG,CAAC,mBAAmB,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AAC3D,CAAC;AAED,+BAA+B;AAClB,QAAA,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC"}