@global-cache/core 0.3.1 → 0.4.0-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 (57) hide show
  1. package/dist/client/api.d.ts.map +1 -1
  2. package/dist/client/api.js +3 -3
  3. package/dist/client/api.js.map +1 -1
  4. package/dist/client/config.d.ts +30 -0
  5. package/dist/client/config.d.ts.map +1 -0
  6. package/dist/client/config.js +63 -0
  7. package/dist/client/config.js.map +1 -0
  8. package/dist/client/index.d.ts +8 -2
  9. package/dist/client/index.d.ts.map +1 -1
  10. package/dist/client/index.js +12 -24
  11. package/dist/client/index.js.map +1 -1
  12. package/dist/client/utils/http-client.d.ts +11 -0
  13. package/dist/client/utils/http-client.d.ts.map +1 -0
  14. package/dist/client/utils/http-client.js +29 -0
  15. package/dist/client/utils/http-client.js.map +1 -0
  16. package/dist/client/utils/http-query.d.ts +9 -1
  17. package/dist/client/utils/http-query.d.ts.map +1 -1
  18. package/dist/client/utils/http-query.js +6 -0
  19. package/dist/client/utils/http-query.js.map +1 -1
  20. package/dist/config.js +2 -2
  21. package/dist/config.js.map +1 -1
  22. package/dist/index.d.ts +1 -1
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/index.js +1 -1
  25. package/dist/index.js.map +1 -1
  26. package/dist/server/config.d.ts +3 -4
  27. package/dist/server/config.d.ts.map +1 -1
  28. package/dist/server/config.js +4 -3
  29. package/dist/server/config.js.map +1 -1
  30. package/dist/server/index.d.ts +1 -2
  31. package/dist/server/index.d.ts.map +1 -1
  32. package/dist/server/index.js +14 -21
  33. package/dist/server/index.js.map +1 -1
  34. package/dist/server/routes/root.d.ts +3 -0
  35. package/dist/server/routes/root.d.ts.map +1 -0
  36. package/dist/server/routes/root.js +43 -0
  37. package/dist/server/routes/root.js.map +1 -0
  38. package/dist/server/utils/express.d.ts +1 -0
  39. package/dist/server/utils/express.d.ts.map +1 -1
  40. package/dist/server/utils/express.js +6 -0
  41. package/dist/server/utils/express.js.map +1 -1
  42. package/dist/shared/debug.d.ts +5 -1
  43. package/dist/shared/debug.d.ts.map +1 -1
  44. package/dist/shared/debug.js +19 -4
  45. package/dist/shared/debug.js.map +1 -1
  46. package/package.json +10 -1
  47. package/src/client/api.ts +4 -4
  48. package/src/{config.ts → client/config.ts} +3 -3
  49. package/src/client/index.ts +12 -10
  50. package/src/client/utils/{http-json.ts → http-client.ts} +1 -5
  51. package/src/client/utils/http-query.ts +10 -1
  52. package/src/index.ts +1 -1
  53. package/src/server/config.ts +5 -5
  54. package/src/server/index.ts +17 -25
  55. package/src/server/routes/root.ts +40 -0
  56. package/src/server/utils/express.ts +6 -0
  57. package/src/shared/debug.ts +20 -3
@@ -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,CAAW;gBAEX,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;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,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.StorageApi = void 0;
4
- const http_json_1 = require("./utils/http-json");
4
+ const http_client_1 = require("./utils/http-client");
5
5
  const http_query_1 = require("./utils/http-query");
6
6
  const http_error_1 = require("./utils/http-error");
7
7
  const value_info_1 = require("../shared/value-info");
@@ -11,7 +11,7 @@ class StorageApi {
11
11
  throw new Error('Global-cache server URL is empty. Did you run the global-cache setup?');
12
12
  }
13
13
  const baseUrl = new URL(`/run/${runId}/`, serverUrl).toString();
14
- this.http = new http_json_1.HttpJson(baseUrl);
14
+ this.http = new http_client_1.HttpClient(baseUrl);
15
15
  }
16
16
  async get({ key, sig, ttl }) {
17
17
  const params = (0, http_query_1.prepareQueryParams)({ key, sig, ttl });
@@ -39,7 +39,7 @@ class StorageApi {
39
39
  }
40
40
  async clearTestRun() {
41
41
  const res = await this.http.post('clear');
42
- await (0, http_error_1.throwIfHttpError)(res, 'Failed to clear session:');
42
+ await (0, http_error_1.throwIfHttpError)(res, 'Failed to clear test run:');
43
43
  }
44
44
  }
45
45
  exports.StorageApi = StorageApi;
@@ -1 +1 @@
1
- {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/client/api.ts"],"names":[],"mappings":";;;AAKA,iDAA6C;AAC7C,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,oBAAQ,CAAC,OAAO,CAAC,CAAC;IACpC,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,0BAA0B,CAAC,CAAC;IAC1D,CAAC;CACF;AA3CD,gCA2CC"}
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"}
@@ -0,0 +1,30 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/client/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"}
@@ -0,0 +1,63 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/client/config.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACH,6CAAyC;AACzC,mDAAyD;AAkBzD,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"}
@@ -1,9 +1,15 @@
1
- import { GlobalCacheConfig } from '../config';
1
+ import { GlobalCacheConfig } from './config';
2
2
  import { DefaultKeysSchema, GetArgs, StringKeys } from './types';
3
3
  export { DefaultKeysSchema };
4
4
  export declare class GlobalCacheClient<S extends DefaultKeysSchema = DefaultKeysSchema> {
5
- #private;
6
5
  config(config: GlobalCacheConfig): void;
6
+ /**
7
+ * Returns API instance.
8
+ * Always return new instance to pick actual config values.
9
+ * Previoulsy, it was stored in a #api property, but it causes a bug when running PW tests in VSCode.
10
+ * After teardown, globalConfig is updated with new serverUrl and runId, but #api still has old values.
11
+ * TODO: apply caching if performance becomes an issue.
12
+ */
7
13
  private get api();
8
14
  /**
9
15
  * Get value by key or compute it if not found.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAK5D,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;;IAM5E,MAAM,CAAC,MAAM,EAAE,iBAAiB;IAIhC,OAAO,KAAK,GAAG,GAMd;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;IAQtC,YAAY;YAMJ,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;IAQtC,YAAY;YAMJ,YAAY;CAS3B"}
@@ -1,40 +1,29 @@
1
1
  "use strict";
2
- var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
3
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
4
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
5
- return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
6
- };
7
- var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
8
- if (kind === "m") throw new TypeError("Private method is not writable");
9
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
10
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
11
- return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
12
- };
13
- var _GlobalCacheClient_api;
14
2
  Object.defineProperty(exports, "__esModule", { value: true });
15
3
  exports.GlobalCacheClient = void 0;
16
- const config_1 = require("../config");
4
+ const config_1 = require("./config");
17
5
  const debug_1 = require("../shared/debug");
18
6
  const logger_1 = require("../shared/logger");
19
7
  const sig_1 = require("../shared/sig");
20
8
  const api_1 = require("./api");
21
9
  const preview_value_1 = require("./utils/preview-value");
22
10
  class GlobalCacheClient {
23
- constructor() {
24
- _GlobalCacheClient_api.set(this, void 0);
25
- }
26
11
  /*
27
12
  * Helper method to set global config via storage instance (for conveniency)
28
13
  */
29
14
  config(config) {
30
15
  config_1.globalConfig.update(config);
31
16
  }
17
+ /**
18
+ * Returns API instance.
19
+ * Always return new instance to pick actual config values.
20
+ * Previoulsy, it was stored in a #api property, but it causes a bug when running PW tests in VSCode.
21
+ * After teardown, globalConfig is updated with new serverUrl and runId, but #api still has old values.
22
+ * TODO: apply caching if performance becomes an issue.
23
+ */
32
24
  get api() {
33
- if (!__classPrivateFieldGet(this, _GlobalCacheClient_api, "f")) {
34
- const { serverUrl, runId } = config_1.globalConfig;
35
- __classPrivateFieldSet(this, _GlobalCacheClient_api, new api_1.StorageApi(serverUrl, runId), "f");
36
- }
37
- return __classPrivateFieldGet(this, _GlobalCacheClient_api, "f");
25
+ const { serverUrl, runId } = config_1.globalConfig;
26
+ return new api_1.StorageApi(serverUrl, runId);
38
27
  }
39
28
  /**
40
29
  * Get value by key or compute it if not found.
@@ -75,9 +64,9 @@ class GlobalCacheClient {
75
64
  throw error;
76
65
  return value;
77
66
  }
78
- (0, debug_1.debugKey)(key, `Saving value...`);
67
+ (0, debug_1.debugKey)(key, `Saving value for ${ttl || 'current run'}...`);
79
68
  const valueInfo = await this.api.set({ key, value, error });
80
- (0, debug_1.debugKey)(key, `Saved.`);
69
+ (0, debug_1.debugKey)(key, `Saving value: done.`);
81
70
  if (error)
82
71
  throw error;
83
72
  // We return 'valueInfo.value' instead of 'value' to have exact the same value
@@ -123,7 +112,6 @@ class GlobalCacheClient {
123
112
  }
124
113
  }
125
114
  exports.GlobalCacheClient = GlobalCacheClient;
126
- _GlobalCacheClient_api = new WeakMap();
127
115
  function resolveGetArgs(args) {
128
116
  return args.length === 2
129
117
  ? { key: args[0], params: {}, fn: args[1] }
@@ -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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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Simple http client for json payloads.
3
+ */
4
+ export declare class HttpClient {
5
+ private baseUrl;
6
+ constructor(baseUrl: string);
7
+ get(pathname: string, query?: Record<string, string>): Promise<Response>;
8
+ post(pathname: string, bodyObj?: Record<string, unknown>): Promise<Response>;
9
+ buildUrl(pathname: string, query?: Record<string, string>): string;
10
+ }
11
+ //# sourceMappingURL=http-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-client.d.ts","sourceRoot":"","sources":["../../../src/client/utils/http-client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,qBAAa,UAAU;IACT,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"}
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ /**
3
+ * Simple http client for json payloads.
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.HttpClient = void 0;
7
+ const http_query_1 = require("./http-query");
8
+ const headers = { 'Content-Type': 'application/json' };
9
+ class HttpClient {
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.HttpClient = HttpClient;
29
+ //# sourceMappingURL=http-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-client.js","sourceRoot":"","sources":["../../../src/client/utils/http-client.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,6CAA+C;AAE/C,MAAM,OAAO,GAAG,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC;AAEvD,MAAa,UAAU;IACrB,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,gCAmBC"}
@@ -1,4 +1,12 @@
1
- import { QueryParams } from './http-json';
1
+ /**
2
+ * Utility functions for working with HTTP query parameters.
3
+ */
4
+ export type QueryParams<T extends Record<string, unknown>> = {
5
+ [K in keyof T]: string;
6
+ };
7
+ /**
8
+ * Adds query parameters to the given URL.
9
+ */
2
10
  export declare function addSearchParams(url: URL, query?: Record<string, string>): void;
3
11
  /**
4
12
  * Converts record of parameters to query string format.
@@ -1 +1 @@
1
- {"version":3,"file":"http-query.d.ts","sourceRoot":"","sources":["../../../src/client/utils/http-query.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,wBAAgB,eAAe,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,QAKvE;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAShG"}
1
+ {"version":3,"file":"http-query.d.ts","sourceRoot":"","sources":["../../../src/client/utils/http-query.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI;KAC1D,CAAC,IAAI,MAAM,CAAC,GAAG,MAAM;CACvB,CAAC;AAEF;;GAEG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,QAKvE;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAShG"}
@@ -1,7 +1,13 @@
1
1
  "use strict";
2
+ /**
3
+ * Utility functions for working with HTTP query parameters.
4
+ */
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
6
  exports.addSearchParams = addSearchParams;
4
7
  exports.prepareQueryParams = prepareQueryParams;
8
+ /**
9
+ * Adds query parameters to the given URL.
10
+ */
5
11
  function addSearchParams(url, query) {
6
12
  const preparedQuery = prepareQueryParams(query || {});
7
13
  Object.entries(preparedQuery).forEach(([key, value]) => {
@@ -1 +1 @@
1
- {"version":3,"file":"http-query.js","sourceRoot":"","sources":["../../../src/client/utils/http-query.ts"],"names":[],"mappings":";;AAEA,0CAKC;AAOD,gDASC;AArBD,SAAgB,eAAe,CAAC,GAAQ,EAAE,KAA8B;IACtE,MAAM,aAAa,GAAG,kBAAkB,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IACtD,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;QACrD,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,SAAgB,kBAAkB,CAAoC,MAAU;IAC9E,MAAM,KAAK,GAAmB,EAAoB,CAAC;IACnD,MAAM,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;QACpD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,KAAK,CAAC,GAAc,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QACxC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,KAAK,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"http-query.js","sourceRoot":"","sources":["../../../src/client/utils/http-query.ts"],"names":[],"mappings":";AAAA;;GAEG;;AASH,0CAKC;AAOD,gDASC;AAxBD;;GAEG;AACH,SAAgB,eAAe,CAAC,GAAQ,EAAE,KAA8B;IACtE,MAAM,aAAa,GAAG,kBAAkB,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IACtD,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;QACrD,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,SAAgB,kBAAkB,CAAoC,MAAU;IAC9E,MAAM,KAAK,GAAmB,EAAoB,CAAC;IACnD,MAAM,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;QACpD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,KAAK,CAAC,GAAc,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QACxC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,KAAK,CAAC;AACf,CAAC"}
package/dist/config.js CHANGED
@@ -52,11 +52,11 @@ class GlobalConfig {
52
52
  }
53
53
  exports.GlobalConfig = GlobalConfig;
54
54
  function getConfigFromEnv() {
55
- const configFromEnv = process.env.GLOBAL_STORAGE_CONFIG;
55
+ const configFromEnv = process.env.GLOBAL_CACHE_CONFIG;
56
56
  return configFromEnv ? JSON.parse(configFromEnv) : undefined;
57
57
  }
58
58
  function saveConfigToEnv(config) {
59
- process.env.GLOBAL_STORAGE_CONFIG = JSON.stringify(config);
59
+ process.env.GLOBAL_CACHE_CONFIG = JSON.stringify(config);
60
60
  }
61
61
  /* Export singleton instance */
62
62
  exports.globalConfig = new GlobalConfig();
@@ -1 +1 @@
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,qBAAqB,CAAC;IACxD,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,qBAAqB,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AAC7D,CAAC;AAED,+BAA+B;AAClB,QAAA,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC"}
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"}
package/dist/index.d.ts CHANGED
@@ -1,3 +1,3 @@
1
1
  export { GlobalCacheClient, DefaultKeysSchema } from './client/index.js';
2
- export { globalConfig, GlobalCacheConfig } from './config.js';
2
+ export { globalConfig, GlobalCacheConfig } from './client/config.js';
3
3
  //# 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,aAAa,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"}
package/dist/index.js CHANGED
@@ -3,6 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  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
- var config_js_1 = require("./config.js");
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
8
  //# 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,yCAA8D;AAArD,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"}
@@ -7,9 +7,8 @@ export type GlobalCacheServerConfig = {
7
7
  basePath?: string;
8
8
  multiInstance?: boolean;
9
9
  };
10
- export type GlobalCacheServerConfigResolved = ReturnType<typeof buildResolvedConfig>;
11
- export declare function setConfig(app: Express, providedConfig: GlobalCacheServerConfig): void;
10
+ export type GlobalCacheServerConfigResolved = ReturnType<typeof resolveConfig>;
11
+ export declare function setConfig(app: Express, config: GlobalCacheServerConfigResolved): void;
12
12
  export declare function getConfig(app: Express): GlobalCacheServerConfigResolved;
13
- declare function buildResolvedConfig(providedConfig: GlobalCacheServerConfig): Pick<Required<GlobalCacheServerConfig>, "basePath"> & GlobalCacheServerConfig;
14
- export {};
13
+ export declare function resolveConfig(providedConfig?: GlobalCacheServerConfig): Pick<Required<GlobalCacheServerConfig>, "basePath"> & GlobalCacheServerConfig;
15
14
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/server/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAGlC,MAAM,MAAM,uBAAuB,GAAG;IACpC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,CAAC;AAMF,MAAM,MAAM,+BAA+B,GAAG,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAErF,wBAAgB,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,cAAc,EAAE,uBAAuB,QAE9E;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,OAAO,GACR,+BAA+B,CAC5D;AAED,iBAAS,mBAAmB,CAAC,cAAc,EAAE,uBAAuB,iFAEnE"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/server/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAGlC,MAAM,MAAM,uBAAuB,GAAG;IACpC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,CAAC;AAMF,MAAM,MAAM,+BAA+B,GAAG,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC;AAE/E,wBAAgB,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,+BAA+B,QAE9E;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,OAAO,GACR,+BAA+B,CAC5D;AAED,wBAAgB,aAAa,CAAC,cAAc,CAAC,EAAE,uBAAuB,iFAErE"}
@@ -2,17 +2,18 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.setConfig = setConfig;
4
4
  exports.getConfig = getConfig;
5
+ exports.resolveConfig = resolveConfig;
5
6
  const object_1 = require("../shared/utils/object");
6
7
  const defaults = {
7
8
  basePath: '.global-cache',
8
9
  };
9
- function setConfig(app, providedConfig) {
10
- app.locals.config = buildResolvedConfig(providedConfig);
10
+ function setConfig(app, config) {
11
+ app.locals.config = config;
11
12
  }
12
13
  function getConfig(app) {
13
14
  return app.locals.config;
14
15
  }
15
- function buildResolvedConfig(providedConfig) {
16
+ function resolveConfig(providedConfig) {
16
17
  return Object.assign({}, defaults, (0, object_1.removeUndefined)(providedConfig));
17
18
  }
18
19
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/server/config.ts"],"names":[],"mappings":";;AAkBA,8BAEC;AAED,8BAEC;AApBD,mDAAyD;AAQzD,MAAM,QAAQ,GAAwD;IACpE,QAAQ,EAAE,eAAe;CAC1B,CAAC;AAIF,SAAgB,SAAS,CAAC,GAAY,EAAE,cAAuC;IAC7E,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,mBAAmB,CAAC,cAAc,CAAC,CAAC;AAC1D,CAAC;AAED,SAAgB,SAAS,CAAC,GAAY;IACpC,OAAO,GAAG,CAAC,MAAM,CAAC,MAAyC,CAAC;AAC9D,CAAC;AAED,SAAS,mBAAmB,CAAC,cAAuC;IAClE,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAA,wBAAe,EAAC,cAAc,CAAC,CAAC,CAAC;AACtE,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/server/config.ts"],"names":[],"mappings":";;AAkBA,8BAEC;AAED,8BAEC;AAED,sCAEC;AAxBD,mDAAyD;AAQzD,MAAM,QAAQ,GAAwD;IACpE,QAAQ,EAAE,eAAe;CAC1B,CAAC;AAIF,SAAgB,SAAS,CAAC,GAAY,EAAE,MAAuC;IAC7E,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;AAC7B,CAAC;AAED,SAAgB,SAAS,CAAC,GAAY;IACpC,OAAO,GAAG,CAAC,MAAM,CAAC,MAAyC,CAAC;AAC9D,CAAC;AAED,SAAgB,aAAa,CAAC,cAAwC;IACpE,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAA,wBAAe,EAAC,cAAc,CAAC,CAAC,CAAC;AACtE,CAAC"}
@@ -6,9 +6,8 @@ export declare class GlobalCacheServer {
6
6
  get port(): number;
7
7
  get localUrl(): string;
8
8
  get isRunning(): boolean;
9
- start(config: GlobalCacheServerConfig): Promise<void>;
9
+ start(providedConfig?: GlobalCacheServerConfig): Promise<void>;
10
10
  stop(): Promise<void>;
11
- clearTestRun(runId: string): Promise<void>;
12
11
  }
13
12
  export declare const globalCacheServer: GlobalCacheServer;
14
13
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAa,uBAAuB,EAAa,MAAM,UAAU,CAAC;AAIzE,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,GAAG,CAAa;IACxB,OAAO,CAAC,MAAM,CAA4B;;IAiB1C,IAAI,IAAI,WAGP;IAED,IAAI,QAAQ,WAEX;IAED,IAAI,SAAS,YAEZ;IAEK,KAAK,CAAC,MAAM,EAAE,uBAAuB;IAQrC,IAAI;IAUJ,YAAY,CAAC,KAAK,EAAE,MAAM;CAMjC;AAGD,eAAO,MAAM,iBAAiB,mBAA0B,CAAC"}
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"}
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.globalCacheServer = exports.GlobalCacheServer = void 0;
7
7
  const express_1 = __importDefault(require("express"));
8
8
  const debug_1 = require("../shared/debug");
9
+ const root_1 = require("./routes/root");
9
10
  const get_1 = require("./routes/get");
10
11
  const set_1 = require("./routes/set");
11
12
  const get_stale_1 = require("./routes/get-stale");
@@ -13,22 +14,18 @@ const get_stale_list_1 = require("./routes/get-stale-list");
13
14
  const clear_1 = require("./routes/clear");
14
15
  const error_1 = require("./error");
15
16
  const config_1 = require("./config");
16
- const storage_1 = require("./storage");
17
17
  const express_2 = require("./utils/express");
18
18
  class GlobalCacheServer {
19
19
  constructor() {
20
20
  this.app = (0, express_1.default)();
21
21
  this.server = null;
22
22
  this.app.use(express_1.default.json());
23
+ this.app.use('/', root_1.router);
23
24
  this.app.use('/', get_1.router);
24
25
  this.app.use('/', set_1.router);
25
26
  this.app.use('/', get_stale_1.router);
26
27
  this.app.use('/', get_stale_list_1.router);
27
28
  this.app.use('/', clear_1.router);
28
- // todo:
29
- // this.app.get('/', (req, res) => {
30
- // res.send('Global Storage Server is running.');
31
- // });
32
29
  // Must be after all other middleware and routes
33
30
  this.app.use(error_1.errorHandler);
34
31
  }
@@ -42,29 +39,25 @@ class GlobalCacheServer {
42
39
  get isRunning() {
43
40
  return Boolean(this.server?.listening);
44
41
  }
45
- async start(config) {
42
+ async start(providedConfig) {
46
43
  // todo: if server is already running?
47
44
  (0, debug_1.debug)('Starting server...');
45
+ const config = (0, config_1.resolveConfig)(providedConfig);
48
46
  (0, config_1.setConfig)(this.app, config);
49
47
  this.server = await (0, express_2.startExpressServer)(this.app, config.port);
50
- (0, debug_1.debug)(`Server started on port: ${this.port}`);
48
+ (0, debug_1.debug)(`Starting server: done on port ${this.port}.`);
51
49
  }
52
50
  async stop() {
53
- if (!this.isRunning)
51
+ if (!this.isRunning || !this.server)
54
52
  return;
55
- (0, debug_1.debug)('Stopping server...');
56
- await new Promise((resolve, reject) => {
57
- this.server?.close((err) => (err ? reject(err) : resolve()));
58
- });
59
- this.server = null;
60
- (0, debug_1.debug)('Server stopped.');
61
- }
62
- async clearTestRun(runId) {
63
- if (!this.isRunning)
64
- return;
65
- const config = (0, config_1.getConfig)(this.app);
66
- const { testRunStorage } = (0, storage_1.getStorage)(config, runId);
67
- await testRunStorage.clear();
53
+ (0, debug_1.debug)(`Stopping server on port: ${this.port}`);
54
+ try {
55
+ await (0, express_2.stopExpressServer)(this.server);
56
+ }
57
+ finally {
58
+ this.server = null;
59
+ }
60
+ (0, debug_1.debug)('Stopping server: done.');
68
61
  }
69
62
  }
70
63
  exports.GlobalCacheServer = GlobalCacheServer;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"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"}
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,iCAAiC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;IACvD,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"}
@@ -0,0 +1,3 @@
1
+ import { Router } from 'express';
2
+ export declare const router: ReturnType<typeof Router>;
3
+ //# sourceMappingURL=root.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"root.d.ts","sourceRoot":"","sources":["../../../src/server/routes/root.ts"],"names":[],"mappings":"AACA,OAAO,EAAW,MAAM,EAAE,MAAM,SAAS,CAAC;AAI1C,eAAO,MAAM,MAAM,EAAE,UAAU,CAAC,OAAO,MAAM,CAAY,CAAC"}
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.router = void 0;
7
+ const node_fs_1 = __importDefault(require("node:fs"));
8
+ const express_1 = require("express");
9
+ const path_1 = require("path");
10
+ const config_1 = require("../config");
11
+ exports.router = (0, express_1.Router)();
12
+ /**
13
+ * Home route.
14
+ */
15
+ exports.router.get('/', async (req, res) => {
16
+ const version = getVersion();
17
+ const config = (0, config_1.getConfig)(req.app);
18
+ res.send(`
19
+ <!DOCTYPE html>
20
+ <html lang="en">
21
+ <head>
22
+ <title>Global Cache Server</title>
23
+ <style>
24
+ body { font-family: Arial, sans-serif; margin: 40px; color: #333; }
25
+ .info { background: #f4f4f4; padding: 20px; border-radius: 5px; }
26
+ </style>
27
+ </head>
28
+ <body>
29
+ <h2>Global Cache Server is running (v${version})</h2>
30
+ <div class="info">
31
+ <h3>Resolved config:</h3>
32
+ <code>${JSON.stringify(config, null, 2)}</code>
33
+ </div>
34
+ </body>
35
+ </html>
36
+ `);
37
+ });
38
+ function getVersion() {
39
+ const packageJsonPath = (0, path_1.join)(__dirname, '../../../package.json');
40
+ const { version } = JSON.parse(node_fs_1.default.readFileSync(packageJsonPath, 'utf-8'));
41
+ return version;
42
+ }
43
+ //# sourceMappingURL=root.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"root.js","sourceRoot":"","sources":["../../../src/server/routes/root.ts"],"names":[],"mappings":";;;;;;AAAA,sDAAyB;AACzB,qCAA0C;AAC1C,+BAA4B;AAC5B,sCAAsC;AAEzB,QAAA,MAAM,GAA8B,IAAA,gBAAM,GAAE,CAAC;AAE1D;;GAEG;AACH,cAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;IACjC,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,MAAM,MAAM,GAAG,IAAA,kBAAS,EAAC,GAAG,CAAC,GAAc,CAAC,CAAC;IAE7C,GAAG,CAAC,IAAI,CAAC;;;;;;;;;;;+CAWoC,OAAO;;;kBAGpC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;;;;GAI9C,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,SAAS,UAAU;IACjB,MAAM,eAAe,GAAG,IAAA,WAAI,EAAC,SAAS,EAAE,uBAAuB,CAAC,CAAC;IACjE,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAE,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAwB,CAAC;IACjG,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -5,4 +5,5 @@ import http from 'node:http';
5
5
  * See: https://github.com/nodejs/node/issues/21482#issuecomment-626025579
6
6
  */
7
7
  export declare function startExpressServer(app: express.Express, port?: number): Promise<http.Server<typeof http.IncomingMessage, typeof http.ServerResponse>>;
8
+ export declare function stopExpressServer(server: http.Server): Promise<void>;
8
9
  //# sourceMappingURL=express.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"express.d.ts","sourceRoot":"","sources":["../../../src/server/utils/express.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,EAAE,IAAI,SAAI,iFAMtE"}
1
+ {"version":3,"file":"express.d.ts","sourceRoot":"","sources":["../../../src/server/utils/express.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,EAAE,IAAI,SAAI,iFAMtE;AAED,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,iBAI1D"}
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.startExpressServer = startExpressServer;
4
+ exports.stopExpressServer = stopExpressServer;
4
5
  /**
5
6
  * Start server.
6
7
  * See: https://github.com/nodejs/node/issues/21482#issuecomment-626025579
@@ -12,4 +13,9 @@ async function startExpressServer(app, port = 0) {
12
13
  server.once('error', reject);
13
14
  });
14
15
  }
16
+ async function stopExpressServer(server) {
17
+ return new Promise((resolve, reject) => {
18
+ server.close((err) => (err ? reject(err) : resolve()));
19
+ });
20
+ }
15
21
  //# sourceMappingURL=express.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"express.js","sourceRoot":"","sources":["../../../src/server/utils/express.ts"],"names":[],"mappings":";;AAOA,gDAMC;AAVD;;;GAGG;AACI,KAAK,UAAU,kBAAkB,CAAC,GAAoB,EAAE,IAAI,GAAG,CAAC;IACrE,OAAO,IAAI,OAAO,CAAc,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAClD,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAChC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;QAChD,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"express.js","sourceRoot":"","sources":["../../../src/server/utils/express.ts"],"names":[],"mappings":";;AAOA,gDAMC;AAED,8CAIC;AAhBD;;;GAGG;AACI,KAAK,UAAU,kBAAkB,CAAC,GAAoB,EAAE,IAAI,GAAG,CAAC;IACrE,OAAO,IAAI,OAAO,CAAc,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAClD,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAChC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;QAChD,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;AACL,CAAC;AAEM,KAAK,UAAU,iBAAiB,CAAC,MAAmB;IACzD,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC3C,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -1,4 +1,8 @@
1
+ /**
2
+ * Debugging.
3
+ * Use lazy debug initialization to pick env variables from runtime (e.g. Playwright config).
4
+ */
1
5
  import Debug from 'debug';
2
- export declare const debug: Debug.Debugger;
6
+ export declare function debug(...args: Parameters<Debug.Debugger>): void;
3
7
  export declare const debugKey: (key: string, message: string) => void;
4
8
  //# sourceMappingURL=debug.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"debug.d.ts","sourceRoot":"","sources":["../../src/shared/debug.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,eAAO,MAAM,KAAK,gBAAwB,CAAC;AAC3C,eAAO,MAAM,QAAQ,GAAI,KAAK,MAAM,EAAE,SAAS,MAAM,SAGpD,CAAC"}
1
+ {"version":3,"file":"debug.d.ts","sourceRoot":"","sources":["../../src/shared/debug.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,wBAAgB,KAAK,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,QAExD;AAED,eAAO,MAAM,QAAQ,GAAI,KAAK,MAAM,EAAE,SAAS,MAAM,SAEpD,CAAC"}
@@ -3,12 +3,27 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.debugKey = exports.debug = void 0;
6
+ exports.debugKey = void 0;
7
+ exports.debug = debug;
8
+ /**
9
+ * Debugging.
10
+ * Use lazy debug initialization to pick env variables from runtime (e.g. Playwright config).
11
+ */
7
12
  const debug_1 = __importDefault(require("debug"));
8
- exports.debug = (0, debug_1.default)('global-cache');
13
+ const cache = new Map();
14
+ function debug(...args) {
15
+ getDebug('global-cache')(...args);
16
+ }
9
17
  const debugKey = (key, message) => {
10
- const debug = (0, debug_1.default)(`global-cache:${key}`);
11
- debug(message);
18
+ getDebug(`global-cache:${key}`)(message);
12
19
  };
13
20
  exports.debugKey = debugKey;
21
+ function getDebug(key) {
22
+ let debug = cache.get(key);
23
+ if (!debug) {
24
+ debug = (0, debug_1.default)(key);
25
+ cache.set(key, debug);
26
+ }
27
+ return debug;
28
+ }
14
29
  //# sourceMappingURL=debug.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"debug.js","sourceRoot":"","sources":["../../src/shared/debug.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAEb,QAAA,KAAK,GAAG,IAAA,eAAK,EAAC,cAAc,CAAC,CAAC;AACpC,MAAM,QAAQ,GAAG,CAAC,GAAW,EAAE,OAAe,EAAE,EAAE;IACvD,MAAM,KAAK,GAAG,IAAA,eAAK,EAAC,gBAAgB,GAAG,EAAE,CAAC,CAAC;IAC3C,KAAK,CAAC,OAAO,CAAC,CAAC;AACjB,CAAC,CAAC;AAHW,QAAA,QAAQ,YAGnB"}
1
+ {"version":3,"file":"debug.js","sourceRoot":"","sources":["../../src/shared/debug.ts"],"names":[],"mappings":";;;;;;AAQA,sBAEC;AAVD;;;GAGG;AACH,kDAA0B;AAE1B,MAAM,KAAK,GAAG,IAAI,GAAG,EAA0B,CAAC;AAEhD,SAAgB,KAAK,CAAC,GAAG,IAAgC;IACvD,QAAQ,CAAC,cAAc,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AACpC,CAAC;AAEM,MAAM,QAAQ,GAAG,CAAC,GAAW,EAAE,OAAe,EAAE,EAAE;IACvD,QAAQ,CAAC,gBAAgB,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;AAC3C,CAAC,CAAC;AAFW,QAAA,QAAQ,YAEnB;AAEF,SAAS,QAAQ,CAAC,GAAW;IAC3B,IAAI,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC3B,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,KAAK,GAAG,IAAA,eAAK,EAAC,GAAG,CAAC,CAAC;QACnB,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACxB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
package/package.json CHANGED
@@ -1,13 +1,22 @@
1
1
  {
2
2
  "name": "@global-cache/core",
3
3
  "description": "Key-value cache for sharing data between parallel workers.",
4
- "version": "0.3.1",
4
+ "version": "0.4.0-0",
5
5
  "type": "commonjs",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
6
8
  "exports": {
7
9
  ".": "./dist/index.js",
8
10
  "./server": "./dist/server/index.js",
9
11
  "./package.json": "./package.json"
10
12
  },
13
+ "typesVersions": {
14
+ "*": {
15
+ "server": [
16
+ "./dist/server/index.d.ts"
17
+ ]
18
+ }
19
+ },
11
20
  "engines": {
12
21
  "node": ">=20"
13
22
  },
package/src/client/api.ts CHANGED
@@ -3,20 +3,20 @@ 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
5
  import { TTL } from '../shared/ttl';
6
- import { HttpJson } from './utils/http-json';
6
+ import { HttpClient } from './utils/http-client';
7
7
  import { prepareQueryParams } from './utils/http-query';
8
8
  import { throwIfHttpError } from './utils/http-error';
9
9
  import { getStaleValue } from '../shared/value-info';
10
10
 
11
11
  export class StorageApi {
12
- private http: HttpJson;
12
+ private http: HttpClient;
13
13
 
14
14
  constructor(serverUrl: string | undefined, runId: string) {
15
15
  if (!serverUrl) {
16
16
  throw new Error('Global-cache server URL is empty. Did you run the global-cache setup?');
17
17
  }
18
18
  const baseUrl = new URL(`/run/${runId}/`, serverUrl).toString();
19
- this.http = new HttpJson(baseUrl);
19
+ this.http = new HttpClient(baseUrl);
20
20
  }
21
21
 
22
22
  async get({ key, sig, ttl }: { key: string; sig: string; ttl?: TTL }) {
@@ -49,6 +49,6 @@ export class StorageApi {
49
49
 
50
50
  async clearTestRun() {
51
51
  const res = await this.http.post('clear');
52
- await throwIfHttpError(res, 'Failed to clear session:');
52
+ await throwIfHttpError(res, 'Failed to clear test run:');
53
53
  }
54
54
  }
@@ -3,7 +3,7 @@
3
3
  * Assumption here is that all runners start workers with the same env.
4
4
  */
5
5
  import { randomUUID } from 'node:crypto';
6
- import { removeUndefined } from './shared/utils/object';
6
+ import { removeUndefined } from '../shared/utils/object';
7
7
 
8
8
  export type GlobalCacheConfig = {
9
9
  /* Forces all values to be non-persistent, usefull for CI */
@@ -74,12 +74,12 @@ export class GlobalConfig {
74
74
  }
75
75
 
76
76
  function getConfigFromEnv() {
77
- const configFromEnv = process.env.GLOBAL_STORAGE_CONFIG;
77
+ const configFromEnv = process.env.GLOBAL_CACHE_CONFIG;
78
78
  return configFromEnv ? (JSON.parse(configFromEnv) as GlobalCacheConfig) : undefined;
79
79
  }
80
80
 
81
81
  function saveConfigToEnv(config: GlobalCacheConfig) {
82
- process.env.GLOBAL_STORAGE_CONFIG = JSON.stringify(config);
82
+ process.env.GLOBAL_CACHE_CONFIG = JSON.stringify(config);
83
83
  }
84
84
 
85
85
  /* Export singleton instance */
@@ -1,4 +1,4 @@
1
- import { globalConfig, GlobalCacheConfig } from '../config';
1
+ import { globalConfig, GlobalCacheConfig } from './config';
2
2
  import { debug, debugKey } from '../shared/debug';
3
3
  import { logger } from '../shared/logger';
4
4
  import { calcSignature } from '../shared/sig';
@@ -9,8 +9,6 @@ import { previewValue } from './utils/preview-value';
9
9
  export { DefaultKeysSchema };
10
10
 
11
11
  export class GlobalCacheClient<S extends DefaultKeysSchema = DefaultKeysSchema> {
12
- #api?: StorageApi;
13
-
14
12
  /*
15
13
  * Helper method to set global config via storage instance (for conveniency)
16
14
  */
@@ -18,12 +16,16 @@ export class GlobalCacheClient<S extends DefaultKeysSchema = DefaultKeysSchema>
18
16
  globalConfig.update(config);
19
17
  }
20
18
 
19
+ /**
20
+ * Returns API instance.
21
+ * Always return new instance to pick actual config values.
22
+ * Previoulsy, it was stored in a #api property, but it causes a bug when running PW tests in VSCode.
23
+ * After teardown, globalConfig is updated with new serverUrl and runId, but #api still has old values.
24
+ * TODO: apply caching if performance becomes an issue.
25
+ */
21
26
  private get api() {
22
- if (!this.#api) {
23
- const { serverUrl, runId } = globalConfig;
24
- this.#api = new StorageApi(serverUrl, runId);
25
- }
26
- return this.#api;
27
+ const { serverUrl, runId } = globalConfig;
28
+ return new StorageApi(serverUrl, runId);
27
29
  }
28
30
 
29
31
  /**
@@ -73,9 +75,9 @@ export class GlobalCacheClient<S extends DefaultKeysSchema = DefaultKeysSchema>
73
75
  return value;
74
76
  }
75
77
 
76
- debugKey(key, `Saving value...`);
78
+ debugKey(key, `Saving value for ${ttl || 'current run'}...`);
77
79
  const valueInfo = await this.api.set({ key, value, error });
78
- debugKey(key, `Saved.`);
80
+ debugKey(key, `Saving value: done.`);
79
81
 
80
82
  if (error) throw error;
81
83
 
@@ -6,11 +6,7 @@ import { addSearchParams } from './http-query';
6
6
 
7
7
  const headers = { 'Content-Type': 'application/json' };
8
8
 
9
- export type QueryParams<T extends Record<string, unknown>> = {
10
- [K in keyof T]: string;
11
- };
12
-
13
- export class HttpJson {
9
+ export class HttpClient {
14
10
  constructor(private baseUrl: string) {}
15
11
 
16
12
  async get(pathname: string, query?: Record<string, string>) {
@@ -1,5 +1,14 @@
1
- import { QueryParams } from './http-json';
1
+ /**
2
+ * Utility functions for working with HTTP query parameters.
3
+ */
4
+
5
+ export type QueryParams<T extends Record<string, unknown>> = {
6
+ [K in keyof T]: string;
7
+ };
2
8
 
9
+ /**
10
+ * Adds query parameters to the given URL.
11
+ */
3
12
  export function addSearchParams(url: URL, query?: Record<string, string>) {
4
13
  const preparedQuery = prepareQueryParams(query || {});
5
14
  Object.entries(preparedQuery).forEach(([key, value]) => {
package/src/index.ts CHANGED
@@ -1,2 +1,2 @@
1
1
  export { GlobalCacheClient, DefaultKeysSchema } from './client/index.js';
2
- export { globalConfig, GlobalCacheConfig } from './config.js';
2
+ export { globalConfig, GlobalCacheConfig } from './client/config.js';
@@ -7,23 +7,23 @@ import { removeUndefined } from '../shared/utils/object';
7
7
  export type GlobalCacheServerConfig = {
8
8
  port?: number;
9
9
  basePath?: string;
10
- multiInstance?: boolean;
10
+ multiInstance?: boolean; // not used now
11
11
  };
12
12
 
13
13
  const defaults: Pick<Required<GlobalCacheServerConfig>, 'basePath'> = {
14
14
  basePath: '.global-cache',
15
15
  };
16
16
 
17
- export type GlobalCacheServerConfigResolved = ReturnType<typeof buildResolvedConfig>;
17
+ export type GlobalCacheServerConfigResolved = ReturnType<typeof resolveConfig>;
18
18
 
19
- export function setConfig(app: Express, providedConfig: GlobalCacheServerConfig) {
20
- app.locals.config = buildResolvedConfig(providedConfig);
19
+ export function setConfig(app: Express, config: GlobalCacheServerConfigResolved) {
20
+ app.locals.config = config;
21
21
  }
22
22
 
23
23
  export function getConfig(app: Express) {
24
24
  return app.locals.config as GlobalCacheServerConfigResolved;
25
25
  }
26
26
 
27
- function buildResolvedConfig(providedConfig: GlobalCacheServerConfig) {
27
+ export function resolveConfig(providedConfig?: GlobalCacheServerConfig) {
28
28
  return Object.assign({}, defaults, removeUndefined(providedConfig));
29
29
  }
@@ -9,15 +9,15 @@ import http from 'node:http';
9
9
  import { AddressInfo } from 'net';
10
10
  import express from 'express';
11
11
  import { debug } from '../shared/debug';
12
+ import { router as routeRoot } from './routes/root';
12
13
  import { router as routeGet } from './routes/get';
13
14
  import { router as routeSet } from './routes/set';
14
15
  import { router as routeGetStale } from './routes/get-stale';
15
16
  import { router as routeGetStaleList } from './routes/get-stale-list';
16
- import { router as routeClearSession } from './routes/clear';
17
+ import { router as routeClearTestRun } from './routes/clear';
17
18
  import { errorHandler } from './error';
18
- import { getConfig, GlobalCacheServerConfig, setConfig } from './config';
19
- import { getStorage } from './storage';
20
- import { startExpressServer } from './utils/express';
19
+ import { GlobalCacheServerConfig, resolveConfig, setConfig } from './config';
20
+ import { startExpressServer, stopExpressServer } from './utils/express';
21
21
 
22
22
  export class GlobalCacheServer {
23
23
  private app = express();
@@ -25,15 +25,12 @@ export class GlobalCacheServer {
25
25
 
26
26
  constructor() {
27
27
  this.app.use(express.json());
28
+ this.app.use('/', routeRoot);
28
29
  this.app.use('/', routeGet);
29
30
  this.app.use('/', routeSet);
30
31
  this.app.use('/', routeGetStale);
31
32
  this.app.use('/', routeGetStaleList);
32
- this.app.use('/', routeClearSession);
33
- // todo:
34
- // this.app.get('/', (req, res) => {
35
- // res.send('Global Storage Server is running.');
36
- // });
33
+ this.app.use('/', routeClearTestRun);
37
34
  // Must be after all other middleware and routes
38
35
  this.app.use(errorHandler);
39
36
  }
@@ -51,29 +48,24 @@ export class GlobalCacheServer {
51
48
  return Boolean(this.server?.listening);
52
49
  }
53
50
 
54
- async start(config: GlobalCacheServerConfig) {
51
+ async start(providedConfig?: GlobalCacheServerConfig) {
55
52
  // todo: if server is already running?
56
53
  debug('Starting server...');
54
+ const config = resolveConfig(providedConfig);
57
55
  setConfig(this.app, config);
58
56
  this.server = await startExpressServer(this.app, config.port);
59
- debug(`Server started on port: ${this.port}`);
57
+ debug(`Starting server: done on port ${this.port}.`);
60
58
  }
61
59
 
62
60
  async stop() {
63
- if (!this.isRunning) return;
64
- debug('Stopping server...');
65
- await new Promise<void>((resolve, reject) => {
66
- this.server?.close((err) => (err ? reject(err) : resolve()));
67
- });
68
- this.server = null;
69
- debug('Server stopped.');
70
- }
71
-
72
- async clearTestRun(runId: string) {
73
- if (!this.isRunning) return;
74
- const config = getConfig(this.app);
75
- const { testRunStorage } = getStorage(config, runId);
76
- await testRunStorage.clear();
61
+ if (!this.isRunning || !this.server) return;
62
+ debug(`Stopping server on port: ${this.port}`);
63
+ try {
64
+ await stopExpressServer(this.server);
65
+ } finally {
66
+ this.server = null;
67
+ }
68
+ debug('Stopping server: done.');
77
69
  }
78
70
  }
79
71
 
@@ -0,0 +1,40 @@
1
+ import fs from 'node:fs';
2
+ import { Express, Router } from 'express';
3
+ import { join } from 'path';
4
+ import { getConfig } from '../config';
5
+
6
+ export const router: ReturnType<typeof Router> = Router();
7
+
8
+ /**
9
+ * Home route.
10
+ */
11
+ router.get('/', async (req, res) => {
12
+ const version = getVersion();
13
+ const config = getConfig(req.app as Express);
14
+
15
+ res.send(`
16
+ <!DOCTYPE html>
17
+ <html lang="en">
18
+ <head>
19
+ <title>Global Cache Server</title>
20
+ <style>
21
+ body { font-family: Arial, sans-serif; margin: 40px; color: #333; }
22
+ .info { background: #f4f4f4; padding: 20px; border-radius: 5px; }
23
+ </style>
24
+ </head>
25
+ <body>
26
+ <h2>Global Cache Server is running (v${version})</h2>
27
+ <div class="info">
28
+ <h3>Resolved config:</h3>
29
+ <code>${JSON.stringify(config, null, 2)}</code>
30
+ </div>
31
+ </body>
32
+ </html>
33
+ `);
34
+ });
35
+
36
+ function getVersion(): string {
37
+ const packageJsonPath = join(__dirname, '../../../package.json');
38
+ const { version } = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8')) as { version: string };
39
+ return version;
40
+ }
@@ -12,3 +12,9 @@ export async function startExpressServer(app: express.Express, port = 0) {
12
12
  server.once('error', reject);
13
13
  });
14
14
  }
15
+
16
+ export async function stopExpressServer(server: http.Server) {
17
+ return new Promise<void>((resolve, reject) => {
18
+ server.close((err) => (err ? reject(err) : resolve()));
19
+ });
20
+ }
@@ -1,7 +1,24 @@
1
+ /**
2
+ * Debugging.
3
+ * Use lazy debug initialization to pick env variables from runtime (e.g. Playwright config).
4
+ */
1
5
  import Debug from 'debug';
2
6
 
3
- export const debug = Debug('global-cache');
7
+ const cache = new Map<string, Debug.Debugger>();
8
+
9
+ export function debug(...args: Parameters<Debug.Debugger>) {
10
+ getDebug('global-cache')(...args);
11
+ }
12
+
4
13
  export const debugKey = (key: string, message: string) => {
5
- const debug = Debug(`global-cache:${key}`);
6
- debug(message);
14
+ getDebug(`global-cache:${key}`)(message);
7
15
  };
16
+
17
+ function getDebug(key: string) {
18
+ let debug = cache.get(key);
19
+ if (!debug) {
20
+ debug = Debug(key);
21
+ cache.set(key, debug);
22
+ }
23
+ return debug;
24
+ }