@global-cache/core 0.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -0
- package/dist/client/api.d.ts +21 -0
- package/dist/client/api.d.ts.map +1 -0
- package/dist/client/api.js +43 -0
- package/dist/client/api.js.map +1 -0
- package/dist/client/index.d.ts +27 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +135 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/types.d.ts +12 -0
- package/dist/client/types.d.ts.map +1 -0
- package/dist/client/types.js +3 -0
- package/dist/client/types.js.map +1 -0
- package/dist/client/utils/http-error.d.ts +3 -0
- package/dist/client/utils/http-error.d.ts.map +1 -0
- package/dist/client/utils/http-error.js +13 -0
- package/dist/client/utils/http-error.js.map +1 -0
- package/dist/client/utils/http-json.d.ts +14 -0
- package/dist/client/utils/http-json.d.ts.map +1 -0
- package/dist/client/utils/http-json.js +29 -0
- package/dist/client/utils/http-json.js.map +1 -0
- package/dist/client/utils/http-query.d.ts +9 -0
- package/dist/client/utils/http-query.d.ts.map +1 -0
- package/dist/client/utils/http-query.js +25 -0
- package/dist/client/utils/http-query.js.map +1 -0
- package/dist/client/utils/preview-value.d.ts +2 -0
- package/dist/client/utils/preview-value.d.ts.map +1 -0
- package/dist/client/utils/preview-value.js +16 -0
- package/dist/client/utils/preview-value.js.map +1 -0
- package/dist/config.d.ts +28 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +57 -0
- package/dist/config.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/server/config.d.ts +15 -0
- package/dist/server/config.d.ts.map +1 -0
- package/dist/server/config.js +18 -0
- package/dist/server/config.js.map +1 -0
- package/dist/server/error.d.ts +3 -0
- package/dist/server/error.d.ts.map +1 -0
- package/dist/server/error.js +9 -0
- package/dist/server/error.js.map +1 -0
- package/dist/server/getter.d.ts +35 -0
- package/dist/server/getter.d.ts.map +1 -0
- package/dist/server/getter.js +109 -0
- package/dist/server/getter.js.map +1 -0
- package/dist/server/index.d.ts +14 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +73 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/routes/clear.d.ts +2 -0
- package/dist/server/routes/clear.d.ts.map +1 -0
- package/dist/server/routes/clear.js +15 -0
- package/dist/server/routes/clear.js.map +1 -0
- package/dist/server/routes/get-stale-list.d.ts +7 -0
- package/dist/server/routes/get-stale-list.d.ts.map +1 -0
- package/dist/server/routes/get-stale-list.js +20 -0
- package/dist/server/routes/get-stale-list.js.map +1 -0
- package/dist/server/routes/get-stale.d.ts +7 -0
- package/dist/server/routes/get-stale.d.ts.map +1 -0
- package/dist/server/routes/get-stale.js +20 -0
- package/dist/server/routes/get-stale.js.map +1 -0
- package/dist/server/routes/get.d.ts +9 -0
- package/dist/server/routes/get.d.ts.map +1 -0
- package/dist/server/routes/get.js +23 -0
- package/dist/server/routes/get.js.map +1 -0
- package/dist/server/routes/set.d.ts +9 -0
- package/dist/server/routes/set.d.ts.map +1 -0
- package/dist/server/routes/set.js +18 -0
- package/dist/server/routes/set.js.map +1 -0
- package/dist/server/setter.d.ts +12 -0
- package/dist/server/setter.d.ts.map +1 -0
- package/dist/server/setter.js +37 -0
- package/dist/server/setter.js.map +1 -0
- package/dist/server/storage/index.d.ts +6 -0
- package/dist/server/storage/index.d.ts.map +1 -0
- package/dist/server/storage/index.js +14 -0
- package/dist/server/storage/index.js.map +1 -0
- package/dist/server/storage/multi-instance/index.d.ts +9 -0
- package/dist/server/storage/multi-instance/index.d.ts.map +1 -0
- package/dist/server/storage/multi-instance/index.js +10 -0
- package/dist/server/storage/multi-instance/index.js.map +1 -0
- package/dist/server/storage/single-instance/fs.d.ts +16 -0
- package/dist/server/storage/single-instance/fs.d.ts.map +1 -0
- package/dist/server/storage/single-instance/fs.js +59 -0
- package/dist/server/storage/single-instance/fs.js.map +1 -0
- package/dist/server/storage/single-instance/index.d.ts +11 -0
- package/dist/server/storage/single-instance/index.d.ts.map +1 -0
- package/dist/server/storage/single-instance/index.js +33 -0
- package/dist/server/storage/single-instance/index.js.map +1 -0
- package/dist/server/storage/single-instance/memory.d.ts +15 -0
- package/dist/server/storage/single-instance/memory.d.ts.map +1 -0
- package/dist/server/storage/single-instance/memory.js +41 -0
- package/dist/server/storage/single-instance/memory.js.map +1 -0
- package/dist/server/storage/types.d.ts +14 -0
- package/dist/server/storage/types.d.ts.map +1 -0
- package/dist/server/storage/types.js +3 -0
- package/dist/server/storage/types.js.map +1 -0
- package/dist/server/utils/express.d.ts +8 -0
- package/dist/server/utils/express.d.ts.map +1 -0
- package/dist/server/utils/express.js +15 -0
- package/dist/server/utils/express.js.map +1 -0
- package/dist/shared/debug.d.ts +4 -0
- package/dist/shared/debug.d.ts.map +1 -0
- package/dist/shared/debug.js +14 -0
- package/dist/shared/debug.js.map +1 -0
- package/dist/shared/logger.d.ts +2 -0
- package/dist/shared/logger.d.ts.map +1 -0
- package/dist/shared/logger.js +5 -0
- package/dist/shared/logger.js.map +1 -0
- package/dist/shared/sig.d.ts +23 -0
- package/dist/shared/sig.d.ts.map +1 -0
- package/dist/shared/sig.js +53 -0
- package/dist/shared/sig.js.map +1 -0
- package/dist/shared/ttl.d.ts +8 -0
- package/dist/shared/ttl.d.ts.map +1 -0
- package/dist/shared/ttl.js +25 -0
- package/dist/shared/ttl.js.map +1 -0
- package/dist/shared/utils/object.d.ts +2 -0
- package/dist/shared/utils/object.d.ts.map +1 -0
- package/dist/shared/utils/object.js +9 -0
- package/dist/shared/utils/object.js.map +1 -0
- package/dist/shared/value-info.d.ts +18 -0
- package/dist/shared/value-info.d.ts.map +1 -0
- package/dist/shared/value-info.js +32 -0
- package/dist/shared/value-info.js.map +1 -0
- package/package.json +41 -0
- package/src/client/api.ts +51 -0
- package/src/client/index.ts +137 -0
- package/src/client/types.ts +14 -0
- package/src/client/utils/http-error.ts +8 -0
- package/src/client/utils/http-json.ts +32 -0
- package/src/client/utils/http-query.ts +24 -0
- package/src/client/utils/preview-value.ts +10 -0
- package/src/config.ts +79 -0
- package/src/index.ts +2 -0
- package/src/server/config.ts +29 -0
- package/src/server/error.ts +7 -0
- package/src/server/getter.ts +138 -0
- package/src/server/index.ts +81 -0
- package/src/server/routes/clear.ts +15 -0
- package/src/server/routes/get-stale-list.ts +27 -0
- package/src/server/routes/get-stale.ts +27 -0
- package/src/server/routes/get.ts +31 -0
- package/src/server/routes/set.ts +27 -0
- package/src/server/setter.ts +35 -0
- package/src/server/storage/index.ts +16 -0
- package/src/server/storage/multi-instance/index.ts +7 -0
- package/src/server/storage/single-instance/fs.ts +64 -0
- package/src/server/storage/single-instance/index.ts +32 -0
- package/src/server/storage/single-instance/memory.ts +43 -0
- package/src/server/storage/types.ts +13 -0
- package/src/server/utils/express.ts +14 -0
- package/src/shared/debug.ts +7 -0
- package/src/shared/logger.ts +1 -0
- package/src/shared/sig.ts +84 -0
- package/src/shared/ttl.ts +19 -0
- package/src/shared/utils/object.ts +4 -0
- package/src/shared/value-info.ts +40 -0
package/README.md
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { GetStaleParams } from '../server/routes/get-stale';
|
|
2
|
+
import type { GetStaleListParams } from '../server/routes/get-stale-list';
|
|
3
|
+
import { TTL } from '../shared/ttl';
|
|
4
|
+
export declare class StorageApi {
|
|
5
|
+
private http;
|
|
6
|
+
constructor(serverUrl: string, runId: string);
|
|
7
|
+
get({ key, sig, ttl }: {
|
|
8
|
+
key: string;
|
|
9
|
+
sig: string;
|
|
10
|
+
ttl?: TTL;
|
|
11
|
+
}): Promise<import("../server/getter").GetterResult>;
|
|
12
|
+
set({ key, value, error }: {
|
|
13
|
+
key: string;
|
|
14
|
+
value: unknown;
|
|
15
|
+
error?: Error;
|
|
16
|
+
}): Promise<import("../shared/value-info").TestRunValueInfo>;
|
|
17
|
+
getStale({ key }: GetStaleParams): Promise<unknown>;
|
|
18
|
+
getStaleList({ prefix }: GetStaleListParams): Promise<unknown[]>;
|
|
19
|
+
clear(): Promise<void>;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=api.d.ts.map
|
|
@@ -0,0 +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,EAAE,KAAK,EAAE,MAAM;IAKtC,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,KAAK;CAIZ"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.StorageApi = void 0;
|
|
4
|
+
const http_json_1 = require("./utils/http-json");
|
|
5
|
+
const http_query_1 = require("./utils/http-query");
|
|
6
|
+
const http_error_1 = require("./utils/http-error");
|
|
7
|
+
const value_info_1 = require("../shared/value-info");
|
|
8
|
+
class StorageApi {
|
|
9
|
+
constructor(serverUrl, runId) {
|
|
10
|
+
const baseUrl = new URL(`/run/${runId}/`, serverUrl).toString();
|
|
11
|
+
this.http = new http_json_1.HttpJson(baseUrl);
|
|
12
|
+
}
|
|
13
|
+
async get({ key, sig, ttl }) {
|
|
14
|
+
const params = (0, http_query_1.prepareQueryParams)({ key, sig, ttl });
|
|
15
|
+
const res = await this.http.get('get', params);
|
|
16
|
+
await (0, http_error_1.throwIfHttpError)(res, `Failed to get key "${key}":`);
|
|
17
|
+
return (await res.json());
|
|
18
|
+
}
|
|
19
|
+
async set({ key, value, error }) {
|
|
20
|
+
const body = { key, value, error: error?.message };
|
|
21
|
+
const res = await this.http.post('set', body);
|
|
22
|
+
await (0, http_error_1.throwIfHttpError)(res, `Failed to save key "${key}":`);
|
|
23
|
+
return (await res.json());
|
|
24
|
+
}
|
|
25
|
+
async getStale({ key }) {
|
|
26
|
+
const res = await this.http.get('get-stale', { key });
|
|
27
|
+
await (0, http_error_1.throwIfHttpError)(res, `Failed to get stale key "${key}":`);
|
|
28
|
+
const valueInfo = (await res.json());
|
|
29
|
+
return (0, value_info_1.getStaleValue)(valueInfo);
|
|
30
|
+
}
|
|
31
|
+
async getStaleList({ prefix }) {
|
|
32
|
+
const res = await this.http.get('get-stale-list', { prefix });
|
|
33
|
+
await (0, http_error_1.throwIfHttpError)(res, `Failed to get stale list for prefix "${prefix}":`);
|
|
34
|
+
const valueInfoList = (await res.json());
|
|
35
|
+
return valueInfoList.map((valueInfo) => (0, value_info_1.getStaleValue)(valueInfo));
|
|
36
|
+
}
|
|
37
|
+
async clear() {
|
|
38
|
+
const res = await this.http.post('clear');
|
|
39
|
+
await (0, http_error_1.throwIfHttpError)(res, 'Failed to clear session:');
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
exports.StorageApi = StorageApi;
|
|
43
|
+
//# sourceMappingURL=api.js.map
|
|
@@ -0,0 +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,SAAiB,EAAE,KAAa;QAC1C,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,KAAK;QACT,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;AAxCD,gCAwCC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { GlobalCacheConfig } from '../config';
|
|
2
|
+
import { DefaultKeysSchema, GetArgs, StringKeys } from './types';
|
|
3
|
+
export { DefaultKeysSchema };
|
|
4
|
+
export declare class GlobalCacheClient<S extends DefaultKeysSchema = DefaultKeysSchema> {
|
|
5
|
+
#private;
|
|
6
|
+
config(config: GlobalCacheConfig): void;
|
|
7
|
+
private get api();
|
|
8
|
+
/**
|
|
9
|
+
* Get value by key or compute it if not found.
|
|
10
|
+
*/
|
|
11
|
+
get<K extends StringKeys<S>>(...args: GetArgs<K, S>): Promise<S[K]>;
|
|
12
|
+
/**
|
|
13
|
+
* Fetch stale value.
|
|
14
|
+
* - for non-persistant keys it would be the current value
|
|
15
|
+
* - for persistent keys it would be the old value if it was changed during this run
|
|
16
|
+
*/
|
|
17
|
+
getStale<K extends StringKeys<S>>(key: K): Promise<S[K] | undefined>;
|
|
18
|
+
/**
|
|
19
|
+
* Fetch list of stale values by prefix.
|
|
20
|
+
* - for non-persistant keys it would be the current value
|
|
21
|
+
* - for persistent keys it would be the old value if it was changed during this run
|
|
22
|
+
*/
|
|
23
|
+
getStaleList<ValueType>(prefix: string): Promise<ValueType[]>;
|
|
24
|
+
clear(): Promise<void>;
|
|
25
|
+
private computeValue;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +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,GASd;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,KAAK;YAMG,YAAY;CAS3B"}
|
|
@@ -0,0 +1,135 @@
|
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.GlobalCacheClient = void 0;
|
|
16
|
+
const config_1 = require("../config");
|
|
17
|
+
const debug_1 = require("../shared/debug");
|
|
18
|
+
const logger_1 = require("../shared/logger");
|
|
19
|
+
const sig_1 = require("../shared/sig");
|
|
20
|
+
const api_1 = require("./api");
|
|
21
|
+
const preview_value_1 = require("./utils/preview-value");
|
|
22
|
+
class GlobalCacheClient {
|
|
23
|
+
constructor() {
|
|
24
|
+
_GlobalCacheClient_api.set(this, void 0);
|
|
25
|
+
}
|
|
26
|
+
/*
|
|
27
|
+
* Helper method to set global config via storage instance (for conveniency)
|
|
28
|
+
*/
|
|
29
|
+
config(config) {
|
|
30
|
+
config_1.globalConfig.update(config);
|
|
31
|
+
}
|
|
32
|
+
get api() {
|
|
33
|
+
if (!__classPrivateFieldGet(this, _GlobalCacheClient_api, "f")) {
|
|
34
|
+
const { serverUrl, runId } = config_1.globalConfig;
|
|
35
|
+
if (!serverUrl) {
|
|
36
|
+
throw new Error('Global-cache url is empty. Did you run the global-cache setup?');
|
|
37
|
+
}
|
|
38
|
+
__classPrivateFieldSet(this, _GlobalCacheClient_api, new api_1.StorageApi(serverUrl, runId), "f");
|
|
39
|
+
}
|
|
40
|
+
return __classPrivateFieldGet(this, _GlobalCacheClient_api, "f");
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Get value by key or compute it if not found.
|
|
44
|
+
*/
|
|
45
|
+
// eslint-disable-next-line visual/complexity, max-statements
|
|
46
|
+
async get(...args) {
|
|
47
|
+
const { key, params, fn } = resolveGetArgs(args);
|
|
48
|
+
if (config_1.globalConfig.disabled) {
|
|
49
|
+
(0, debug_1.debugKey)(key, `Global cache disabled. Computing...`);
|
|
50
|
+
return fn();
|
|
51
|
+
}
|
|
52
|
+
const ttl = config_1.globalConfig.ignoreTTL ? undefined : params.ttl;
|
|
53
|
+
// keep stack expression in this fn to have correct stack offset
|
|
54
|
+
const stack = new Error().stack?.split('\n')[2]?.trim().replace(process.cwd(), '') || '';
|
|
55
|
+
const sig = (0, sig_1.calcSignature)({ fn, ttl, stack });
|
|
56
|
+
(0, debug_1.debugKey)(key, `Fetching value...`);
|
|
57
|
+
const body = await this.api.get({ key, sig, ttl });
|
|
58
|
+
if (body.result === 'cache-hit') {
|
|
59
|
+
const { value } = body.valueInfo;
|
|
60
|
+
(0, debug_1.debugKey)(key, `${body.result}: ${(0, preview_value_1.previewValue)(value)}`);
|
|
61
|
+
return value;
|
|
62
|
+
}
|
|
63
|
+
if (body.result === 'error') {
|
|
64
|
+
throw new Error(body.message);
|
|
65
|
+
}
|
|
66
|
+
if (body.result === 'sig-mismatch') {
|
|
67
|
+
logger_1.logger.warn(body.message);
|
|
68
|
+
(0, debug_1.debugKey)(key, `${body.result}, computing...`);
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
(0, debug_1.debugKey)(key, `${body.result} (${body.message}), computing...`);
|
|
72
|
+
}
|
|
73
|
+
const { value, error } = await this.computeValue(fn);
|
|
74
|
+
(0, debug_1.debugKey)(key, error ? `Error: ${error.message}` : `Computed: ${(0, preview_value_1.previewValue)(value)}`);
|
|
75
|
+
if (body.result === 'sig-mismatch') {
|
|
76
|
+
(0, debug_1.debugKey)(key, `Not saving value because of signature mismatch.`);
|
|
77
|
+
if (error)
|
|
78
|
+
throw error;
|
|
79
|
+
return value;
|
|
80
|
+
}
|
|
81
|
+
(0, debug_1.debugKey)(key, `Saving value...`);
|
|
82
|
+
const valueInfo = await this.api.set({ key, value, error });
|
|
83
|
+
(0, debug_1.debugKey)(key, `Saved.`);
|
|
84
|
+
if (error)
|
|
85
|
+
throw error;
|
|
86
|
+
// We return 'valueInfo.value' instead of 'value' to have exact the same value
|
|
87
|
+
// as stored (in case of serialization changes).
|
|
88
|
+
return valueInfo.value;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Fetch stale value.
|
|
92
|
+
* - for non-persistant keys it would be the current value
|
|
93
|
+
* - for persistent keys it would be the old value if it was changed during this run
|
|
94
|
+
*/
|
|
95
|
+
async getStale(key) {
|
|
96
|
+
(0, debug_1.debugKey)(key, `Fetching stale value...`);
|
|
97
|
+
const value = await this.api.getStale({ key });
|
|
98
|
+
(0, debug_1.debugKey)(key, `Fetched: ${(0, preview_value_1.previewValue)(value)}`);
|
|
99
|
+
return value;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Fetch list of stale values by prefix.
|
|
103
|
+
* - for non-persistant keys it would be the current value
|
|
104
|
+
* - for persistent keys it would be the old value if it was changed during this run
|
|
105
|
+
*/
|
|
106
|
+
async getStaleList(prefix) {
|
|
107
|
+
(0, debug_1.debugKey)(prefix, `Fetching stale list...`);
|
|
108
|
+
const values = await this.api.getStaleList({ prefix });
|
|
109
|
+
(0, debug_1.debugKey)(prefix, `Fetched: ${values.length} value(s)`);
|
|
110
|
+
return values;
|
|
111
|
+
}
|
|
112
|
+
async clear() {
|
|
113
|
+
(0, debug_1.debug)('Clearing test-run values...');
|
|
114
|
+
await this.api.clear();
|
|
115
|
+
(0, debug_1.debug)('Cleared.');
|
|
116
|
+
}
|
|
117
|
+
async computeValue(fn) {
|
|
118
|
+
try {
|
|
119
|
+
const value = await fn();
|
|
120
|
+
return { value };
|
|
121
|
+
}
|
|
122
|
+
catch (e) {
|
|
123
|
+
const error = e instanceof Error ? e : new Error(String(e));
|
|
124
|
+
return { error };
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
exports.GlobalCacheClient = GlobalCacheClient;
|
|
129
|
+
_GlobalCacheClient_api = new WeakMap();
|
|
130
|
+
function resolveGetArgs(args) {
|
|
131
|
+
return args.length === 2
|
|
132
|
+
? { key: args[0], params: {}, fn: args[1] }
|
|
133
|
+
: { key: args[0], params: { ...args[1] }, fn: args[2] };
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Helper types.
|
|
3
|
+
*/
|
|
4
|
+
import { TTL } from '../shared/ttl';
|
|
5
|
+
export type DefaultKeysSchema = Record<string, any>;
|
|
6
|
+
export type StringKeys<S extends DefaultKeysSchema> = keyof S & string;
|
|
7
|
+
export type ComputeFn<Res> = () => Res | Promise<Res>;
|
|
8
|
+
export type KeyParams = {
|
|
9
|
+
ttl?: TTL;
|
|
10
|
+
};
|
|
11
|
+
export type GetArgs<K extends StringKeys<S>, S extends DefaultKeysSchema> = [K, ComputeFn<S[K]>] | [K, KeyParams, ComputeFn<S[K]>];
|
|
12
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/client/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAGpC,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AACpD,MAAM,MAAM,UAAU,CAAC,CAAC,SAAS,iBAAiB,IAAI,MAAM,CAAC,GAAG,MAAM,CAAC;AAEvE,MAAM,MAAM,SAAS,CAAC,GAAG,IAAI,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;AACtD,MAAM,MAAM,SAAS,GAAG;IAAE,GAAG,CAAC,EAAE,GAAG,CAAA;CAAE,CAAC;AACtC,MAAM,MAAM,OAAO,CAAC,CAAC,SAAS,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,iBAAiB,IACpE,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GACpB,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/client/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-error.d.ts","sourceRoot":"","sources":["../../../src/client/utils/http-error.ts"],"names":[],"mappings":"AAAA,wBAAsB,cAAc,CAAC,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,kBAGjE;AAED,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,iBAEpE"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.buildHttpError = buildHttpError;
|
|
4
|
+
exports.throwIfHttpError = throwIfHttpError;
|
|
5
|
+
async function buildHttpError(res, prefix) {
|
|
6
|
+
const message = (await res.text()) || `${res.status} ${res.statusText}`;
|
|
7
|
+
return new Error(`${prefix} ${message}`);
|
|
8
|
+
}
|
|
9
|
+
async function throwIfHttpError(res, message) {
|
|
10
|
+
if (!res.ok)
|
|
11
|
+
throw await buildHttpError(res, message);
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=http-error.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-error.js","sourceRoot":"","sources":["../../../src/client/utils/http-error.ts"],"names":[],"mappings":";;AAAA,wCAGC;AAED,4CAEC;AAPM,KAAK,UAAU,cAAc,CAAC,GAAa,EAAE,MAAc;IAChE,MAAM,OAAO,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;IACxE,OAAO,IAAI,KAAK,CAAC,GAAG,MAAM,IAAI,OAAO,EAAE,CAAC,CAAC;AAC3C,CAAC;AAEM,KAAK,UAAU,gBAAgB,CAAC,GAAa,EAAE,OAAe;IACnE,IAAI,CAAC,GAAG,CAAC,EAAE;QAAE,MAAM,MAAM,cAAc,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;AACxD,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -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.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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { QueryParams } from './http-json';
|
|
2
|
+
export declare function addSearchParams(url: URL, query?: Record<string, string>): void;
|
|
3
|
+
/**
|
|
4
|
+
* Converts record of parameters to query string format.
|
|
5
|
+
* - undefined values are ignored
|
|
6
|
+
* - values are converted to strings
|
|
7
|
+
*/
|
|
8
|
+
export declare function prepareQueryParams<T extends Record<string, unknown>>(params?: T): QueryParams<T>;
|
|
9
|
+
//# sourceMappingURL=http-query.d.ts.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.addSearchParams = addSearchParams;
|
|
4
|
+
exports.prepareQueryParams = prepareQueryParams;
|
|
5
|
+
function addSearchParams(url, query) {
|
|
6
|
+
const preparedQuery = prepareQueryParams(query || {});
|
|
7
|
+
Object.entries(preparedQuery).forEach(([key, value]) => {
|
|
8
|
+
url.searchParams.append(key, String(value));
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Converts record of parameters to query string format.
|
|
13
|
+
* - undefined values are ignored
|
|
14
|
+
* - values are converted to strings
|
|
15
|
+
*/
|
|
16
|
+
function prepareQueryParams(params) {
|
|
17
|
+
const query = {};
|
|
18
|
+
Object.entries(params || {}).forEach(([key, value]) => {
|
|
19
|
+
if (value !== undefined) {
|
|
20
|
+
query[key] = String(value);
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
return query;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=http-query.js.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preview-value.d.ts","sourceRoot":"","sources":["../../../src/client/utils/preview-value.ts"],"names":[],"mappings":"AAAA,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,UAS1C"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.previewValue = previewValue;
|
|
4
|
+
function previewValue(value) {
|
|
5
|
+
try {
|
|
6
|
+
if (value === undefined)
|
|
7
|
+
return '<undefined>';
|
|
8
|
+
const strValue = JSON.stringify(value);
|
|
9
|
+
return strValue.length > 50 ? `${strValue.slice(0, 50)}...` : strValue;
|
|
10
|
+
}
|
|
11
|
+
catch {
|
|
12
|
+
// Fallback for non-serializable values
|
|
13
|
+
return `<non-serializable>`;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=preview-value.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preview-value.js","sourceRoot":"","sources":["../../../src/client/utils/preview-value.ts"],"names":[],"mappings":";;AAAA,oCASC;AATD,SAAgB,YAAY,CAAC,KAAc;IACzC,IAAI,CAAC;QACH,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO,aAAa,CAAC;QAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACvC,OAAO,QAAQ,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC;IACzE,CAAC;IAAC,MAAM,CAAC;QACP,uCAAuC;QACvC,OAAO,oBAAoB,CAAC;IAC9B,CAAC;AACH,CAAC"}
|
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export type GlobalCacheConfig = {
|
|
2
|
+
ignoreTTL?: boolean;
|
|
3
|
+
basePath?: string;
|
|
4
|
+
disabled?: boolean;
|
|
5
|
+
serverUrl?: string;
|
|
6
|
+
};
|
|
7
|
+
type GlobalConfigInternal = GlobalCacheConfig & {
|
|
8
|
+
serverUrl: string;
|
|
9
|
+
runId: 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 serverUrl(): string;
|
|
21
|
+
get ignoreTTL(): boolean;
|
|
22
|
+
get basePath(): string | undefined;
|
|
23
|
+
get disabled(): boolean;
|
|
24
|
+
get runId(): string;
|
|
25
|
+
}
|
|
26
|
+
export declare const globalConfig: GlobalConfig;
|
|
27
|
+
export {};
|
|
28
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
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,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAGZ;;IAOF,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,oBAAoB,CAAC;IAK5C;;;OAGG;IACH,UAAU;IAIV,IAAI,SAAS,WAEZ;IAED,IAAI,SAAS,YAEZ;IAED,IAAI,QAAQ,uBAEX;IAED,IAAI,QAAQ,YAEX;IAED,IAAI,KAAK,WAER;CACF;AAYD,eAAO,MAAM,YAAY,cAAqB,CAAC"}
|
package/dist/config.js
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
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
|
+
serverUrl: '', // will be set later, when server starts.
|
|
14
|
+
runId: '', // will be set later
|
|
15
|
+
};
|
|
16
|
+
Object.assign(this.config, getConfigFromEnv());
|
|
17
|
+
if (!this.runId)
|
|
18
|
+
this.newTestRun();
|
|
19
|
+
}
|
|
20
|
+
update(config) {
|
|
21
|
+
Object.assign(this.config, (0, object_1.removeUndefined)(config));
|
|
22
|
+
saveConfigToEnv(this.config);
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Generate new runId or re-use from env variable.
|
|
26
|
+
* There can be multiple test runs within single server session.
|
|
27
|
+
*/
|
|
28
|
+
newTestRun() {
|
|
29
|
+
this.update({ runId: process.env.GLOBAL_CACHE_RUN_ID || (0, node_crypto_1.randomUUID)() });
|
|
30
|
+
}
|
|
31
|
+
get serverUrl() {
|
|
32
|
+
return this.config.serverUrl;
|
|
33
|
+
}
|
|
34
|
+
get ignoreTTL() {
|
|
35
|
+
return Boolean(this.config.ignoreTTL);
|
|
36
|
+
}
|
|
37
|
+
get basePath() {
|
|
38
|
+
return this.config.basePath;
|
|
39
|
+
}
|
|
40
|
+
get disabled() {
|
|
41
|
+
return Boolean(this.config.disabled);
|
|
42
|
+
}
|
|
43
|
+
get runId() {
|
|
44
|
+
return this.config.runId;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
exports.GlobalConfig = GlobalConfig;
|
|
48
|
+
function getConfigFromEnv() {
|
|
49
|
+
const configFromEnv = process.env.GLOBAL_STORAGE_CONFIG;
|
|
50
|
+
return configFromEnv ? JSON.parse(configFromEnv) : undefined;
|
|
51
|
+
}
|
|
52
|
+
function saveConfigToEnv(config) {
|
|
53
|
+
process.env.GLOBAL_STORAGE_CONFIG = JSON.stringify(config);
|
|
54
|
+
}
|
|
55
|
+
/* Export singleton instance */
|
|
56
|
+
exports.globalConfig = new GlobalConfig();
|
|
57
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACH,6CAAyC;AACzC,kDAAwD;AAkBxD,MAAa,YAAY;IAMvB;QALQ,WAAM,GAAyB;YACrC,SAAS,EAAE,EAAE,EAAE,yCAAyC;YACxD,KAAK,EAAE,EAAE,EAAE,oBAAoB;SAChC,CAAC;QAGA,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,gBAAgB,EAAE,CAAC,CAAC;QAC/C,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,IAAI,CAAC,UAAU,EAAE,CAAC;IACrC,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,SAAS;QACX,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;IAC/B,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,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;IAC3B,CAAC;CACF;AA3CD,oCA2CC;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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +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"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.globalConfig = exports.GlobalCacheClient = void 0;
|
|
4
|
+
var index_js_1 = require("./client/index.js");
|
|
5
|
+
Object.defineProperty(exports, "GlobalCacheClient", { enumerable: true, get: function () { return index_js_1.GlobalCacheClient; } });
|
|
6
|
+
var config_js_1 = require("./config.js");
|
|
7
|
+
Object.defineProperty(exports, "globalConfig", { enumerable: true, get: function () { return config_js_1.globalConfig; } });
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Global storage server configuration.
|
|
3
|
+
*/
|
|
4
|
+
import { Express } from 'express';
|
|
5
|
+
export type GlobalCacheServerConfig = {
|
|
6
|
+
port?: number;
|
|
7
|
+
basePath?: string;
|
|
8
|
+
multiInstance?: boolean;
|
|
9
|
+
};
|
|
10
|
+
export type GlobalCacheServerConfigResolved = ReturnType<typeof buildResolvedConfig>;
|
|
11
|
+
export declare function setConfig(app: Express, providedConfig: GlobalCacheServerConfig): void;
|
|
12
|
+
export declare function getConfig(app: Express): GlobalCacheServerConfigResolved;
|
|
13
|
+
declare function buildResolvedConfig(providedConfig: GlobalCacheServerConfig): Pick<Required<GlobalCacheServerConfig>, "basePath"> & GlobalCacheServerConfig;
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.setConfig = setConfig;
|
|
4
|
+
exports.getConfig = getConfig;
|
|
5
|
+
const object_1 = require("../shared/utils/object");
|
|
6
|
+
const defaults = {
|
|
7
|
+
basePath: '.global-cache',
|
|
8
|
+
};
|
|
9
|
+
function setConfig(app, providedConfig) {
|
|
10
|
+
app.locals.config = buildResolvedConfig(providedConfig);
|
|
11
|
+
}
|
|
12
|
+
function getConfig(app) {
|
|
13
|
+
return app.locals.config;
|
|
14
|
+
}
|
|
15
|
+
function buildResolvedConfig(providedConfig) {
|
|
16
|
+
return Object.assign({}, defaults, (0, object_1.removeUndefined)(providedConfig));
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../../src/server/error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAG1D,wBAAgB,YAAY,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,QAG3F"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.errorHandler = errorHandler;
|
|
4
|
+
// eslint-disable-next-line max-params
|
|
5
|
+
function errorHandler(err, _req, res, _next) {
|
|
6
|
+
const message = err?.message || String(err);
|
|
7
|
+
res.status(500).send(message);
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=error.js.map
|