@orkify/cli 1.0.0-beta.5 → 1.0.0-beta.6
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 +10 -5
- package/package.json +8 -31
- package/packages/cache/README.md +0 -114
- package/packages/cache/dist/CacheClient.d.ts +0 -26
- package/packages/cache/dist/CacheClient.d.ts.map +0 -1
- package/packages/cache/dist/CacheClient.js +0 -174
- package/packages/cache/dist/CacheClient.js.map +0 -1
- package/packages/cache/dist/CacheFileStore.d.ts +0 -45
- package/packages/cache/dist/CacheFileStore.d.ts.map +0 -1
- package/packages/cache/dist/CacheFileStore.js +0 -446
- package/packages/cache/dist/CacheFileStore.js.map +0 -1
- package/packages/cache/dist/CachePersistence.d.ts +0 -9
- package/packages/cache/dist/CachePersistence.d.ts.map +0 -1
- package/packages/cache/dist/CachePersistence.js +0 -67
- package/packages/cache/dist/CachePersistence.js.map +0 -1
- package/packages/cache/dist/CachePrimary.d.ts +0 -25
- package/packages/cache/dist/CachePrimary.d.ts.map +0 -1
- package/packages/cache/dist/CachePrimary.js +0 -155
- package/packages/cache/dist/CachePrimary.js.map +0 -1
- package/packages/cache/dist/CacheStore.d.ts +0 -50
- package/packages/cache/dist/CacheStore.d.ts.map +0 -1
- package/packages/cache/dist/CacheStore.js +0 -271
- package/packages/cache/dist/CacheStore.js.map +0 -1
- package/packages/cache/dist/constants.d.ts +0 -6
- package/packages/cache/dist/constants.d.ts.map +0 -1
- package/packages/cache/dist/constants.js +0 -9
- package/packages/cache/dist/constants.js.map +0 -1
- package/packages/cache/dist/index.d.ts +0 -16
- package/packages/cache/dist/index.d.ts.map +0 -1
- package/packages/cache/dist/index.js +0 -86
- package/packages/cache/dist/index.js.map +0 -1
- package/packages/cache/dist/serialize.d.ts +0 -9
- package/packages/cache/dist/serialize.d.ts.map +0 -1
- package/packages/cache/dist/serialize.js +0 -40
- package/packages/cache/dist/serialize.js.map +0 -1
- package/packages/cache/dist/types.d.ts +0 -123
- package/packages/cache/dist/types.d.ts.map +0 -1
- package/packages/cache/dist/types.js +0 -2
- package/packages/cache/dist/types.js.map +0 -1
- package/packages/cache/package.json +0 -27
- package/packages/cache/src/CacheClient.ts +0 -227
- package/packages/cache/src/CacheFileStore.ts +0 -528
- package/packages/cache/src/CachePersistence.ts +0 -89
- package/packages/cache/src/CachePrimary.ts +0 -172
- package/packages/cache/src/CacheStore.ts +0 -308
- package/packages/cache/src/constants.ts +0 -10
- package/packages/cache/src/index.ts +0 -100
- package/packages/cache/src/serialize.ts +0 -49
- package/packages/cache/src/types.ts +0 -156
- package/packages/cache/tsconfig.json +0 -18
- package/packages/cache/tsconfig.tsbuildinfo +0 -1
- package/packages/next/README.md +0 -166
- package/packages/next/dist/error-capture.d.ts +0 -34
- package/packages/next/dist/error-capture.d.ts.map +0 -1
- package/packages/next/dist/error-capture.js +0 -130
- package/packages/next/dist/error-capture.js.map +0 -1
- package/packages/next/dist/error-handler.d.ts +0 -10
- package/packages/next/dist/error-handler.d.ts.map +0 -1
- package/packages/next/dist/error-handler.js +0 -186
- package/packages/next/dist/error-handler.js.map +0 -1
- package/packages/next/dist/isr-cache.d.ts +0 -9
- package/packages/next/dist/isr-cache.d.ts.map +0 -1
- package/packages/next/dist/isr-cache.js +0 -86
- package/packages/next/dist/isr-cache.js.map +0 -1
- package/packages/next/dist/stream.d.ts +0 -5
- package/packages/next/dist/stream.d.ts.map +0 -1
- package/packages/next/dist/stream.js +0 -22
- package/packages/next/dist/stream.js.map +0 -1
- package/packages/next/dist/types.d.ts +0 -33
- package/packages/next/dist/types.d.ts.map +0 -1
- package/packages/next/dist/types.js +0 -6
- package/packages/next/dist/types.js.map +0 -1
- package/packages/next/dist/use-cache.d.ts +0 -4
- package/packages/next/dist/use-cache.d.ts.map +0 -1
- package/packages/next/dist/use-cache.js +0 -86
- package/packages/next/dist/use-cache.js.map +0 -1
- package/packages/next/dist/utils.d.ts +0 -32
- package/packages/next/dist/utils.d.ts.map +0 -1
- package/packages/next/dist/utils.js +0 -88
- package/packages/next/dist/utils.js.map +0 -1
- package/packages/next/package.json +0 -52
- package/packages/next/src/error-capture.ts +0 -177
- package/packages/next/src/error-handler.ts +0 -221
- package/packages/next/src/isr-cache.ts +0 -100
- package/packages/next/src/stream.ts +0 -23
- package/packages/next/src/types.ts +0 -33
- package/packages/next/src/use-cache.ts +0 -99
- package/packages/next/src/utils.ts +0 -102
- package/packages/next/tsconfig.json +0 -19
- package/packages/next/tsconfig.tsbuildinfo +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"serialize.d.ts","sourceRoot":"","sources":["../src/serialize.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,IAAI,CAAC;AAErC,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,QAAQ,CAAC;CACpB;AAmBD,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,UAAU,CAWpD;AAED,wBAAgB,WAAW,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,UAAU,GAAG,OAAO,CAGnE;AAED,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,UAAU,GAAG,MAAM,CAI1D"}
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
import v8 from 'node:v8';
|
|
2
|
-
function needsV8(value) {
|
|
3
|
-
if (value instanceof Map ||
|
|
4
|
-
value instanceof Set ||
|
|
5
|
-
value instanceof Date ||
|
|
6
|
-
value instanceof RegExp ||
|
|
7
|
-
value instanceof Error)
|
|
8
|
-
return true;
|
|
9
|
-
if (ArrayBuffer.isView(value) || value instanceof ArrayBuffer)
|
|
10
|
-
return true;
|
|
11
|
-
if (Array.isArray(value))
|
|
12
|
-
return value.some(needsV8);
|
|
13
|
-
if (value !== null && typeof value === 'object') {
|
|
14
|
-
return Object.values(value).some(needsV8);
|
|
15
|
-
}
|
|
16
|
-
return false;
|
|
17
|
-
}
|
|
18
|
-
export function serialize(value) {
|
|
19
|
-
if (typeof value === 'function') {
|
|
20
|
-
throw new Error('cache: functions are not serializable');
|
|
21
|
-
}
|
|
22
|
-
if (typeof value === 'symbol') {
|
|
23
|
-
throw new Error('cache: symbols are not serializable');
|
|
24
|
-
}
|
|
25
|
-
if (needsV8(value)) {
|
|
26
|
-
return { data: v8.serialize(value).toString('base64'), encoding: 'v8' };
|
|
27
|
-
}
|
|
28
|
-
return { data: JSON.stringify(value), encoding: 'json' };
|
|
29
|
-
}
|
|
30
|
-
export function deserialize({ data, encoding }) {
|
|
31
|
-
if (encoding === 'v8')
|
|
32
|
-
return v8.deserialize(Buffer.from(data, 'base64'));
|
|
33
|
-
return JSON.parse(data);
|
|
34
|
-
}
|
|
35
|
-
export function serializedByteLength(s) {
|
|
36
|
-
return s.encoding === 'v8'
|
|
37
|
-
? Math.ceil((s.data.length * 3) / 4) // base64 → raw bytes
|
|
38
|
-
: Buffer.byteLength(s.data, 'utf-8');
|
|
39
|
-
}
|
|
40
|
-
//# sourceMappingURL=serialize.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"serialize.js","sourceRoot":"","sources":["../src/serialize.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AASzB,SAAS,OAAO,CAAC,KAAc;IAC7B,IACE,KAAK,YAAY,GAAG;QACpB,KAAK,YAAY,GAAG;QACpB,KAAK,YAAY,IAAI;QACrB,KAAK,YAAY,MAAM;QACvB,KAAK,YAAY,KAAK;QAEtB,OAAO,IAAI,CAAC;IACd,IAAI,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,KAAK,YAAY,WAAW;QAAE,OAAO,IAAI,CAAC;IAC3E,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACrD,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAChD,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,KAAc;IACtC,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC3D,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;IACzD,CAAC;IACD,IAAI,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACnB,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC1E,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAc;IACxD,IAAI,QAAQ,KAAK,IAAI;QAAE,OAAO,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC1E,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,CAAa;IAChD,OAAO,CAAC,CAAC,QAAQ,KAAK,IAAI;QACxB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,qBAAqB;QAC1D,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACzC,CAAC"}
|
|
@@ -1,123 +0,0 @@
|
|
|
1
|
-
export interface CacheConfig {
|
|
2
|
-
defaultTtl?: number;
|
|
3
|
-
fileBacked?: boolean;
|
|
4
|
-
maxEntries?: number;
|
|
5
|
-
maxMemorySize?: number;
|
|
6
|
-
maxValueSize?: number;
|
|
7
|
-
}
|
|
8
|
-
export interface CacheSetOptions {
|
|
9
|
-
tags?: string[];
|
|
10
|
-
ttl?: number;
|
|
11
|
-
}
|
|
12
|
-
export interface CacheStats {
|
|
13
|
-
diskSize?: number;
|
|
14
|
-
hitRate: number;
|
|
15
|
-
hits: number;
|
|
16
|
-
misses: number;
|
|
17
|
-
size: number;
|
|
18
|
-
totalBytes: number;
|
|
19
|
-
}
|
|
20
|
-
export interface CacheEntry {
|
|
21
|
-
byteSize: number;
|
|
22
|
-
expiresAt?: number;
|
|
23
|
-
lastAccessedAt: number;
|
|
24
|
-
tags?: string[];
|
|
25
|
-
value: unknown;
|
|
26
|
-
}
|
|
27
|
-
export interface SerializedCacheEntry {
|
|
28
|
-
expiresAt?: number;
|
|
29
|
-
tags?: string[];
|
|
30
|
-
value: unknown;
|
|
31
|
-
}
|
|
32
|
-
export interface CacheSnapshot {
|
|
33
|
-
entries: Array<[string, SerializedCacheEntry]>;
|
|
34
|
-
tagTimestamps: Array<[string, number]>;
|
|
35
|
-
}
|
|
36
|
-
export type EvictReason = 'expired' | 'lru';
|
|
37
|
-
export interface ICacheStore {
|
|
38
|
-
applyDelete(key: string): void;
|
|
39
|
-
applySet(key: string, value: unknown, expiresAt?: number, tags?: string[]): void;
|
|
40
|
-
applySnapshot(snapshot: CacheSnapshot): void;
|
|
41
|
-
applyTagTimestamp(tag: string, timestamp: number): void;
|
|
42
|
-
clear(): void;
|
|
43
|
-
delete(key: string): boolean;
|
|
44
|
-
destroy(): void;
|
|
45
|
-
get<T>(key: string): T | undefined;
|
|
46
|
-
getAsync<T>(key: string): Promise<T | undefined>;
|
|
47
|
-
getTagExpiration(tags: string[]): number;
|
|
48
|
-
has(key: string): boolean;
|
|
49
|
-
invalidateTag(tag: string): string[];
|
|
50
|
-
serialize(): CacheSnapshot;
|
|
51
|
-
set(key: string, value: unknown, expiresAt?: number, tags?: string[], precomputedByteSize?: number): void;
|
|
52
|
-
stats(): CacheStats;
|
|
53
|
-
}
|
|
54
|
-
export interface CacheSetMessage {
|
|
55
|
-
__orkify: true;
|
|
56
|
-
key: string;
|
|
57
|
-
tags?: string[];
|
|
58
|
-
ttl?: number;
|
|
59
|
-
type: 'cache:set';
|
|
60
|
-
value: unknown;
|
|
61
|
-
}
|
|
62
|
-
export interface CacheDeleteMessage {
|
|
63
|
-
__orkify: true;
|
|
64
|
-
key: string;
|
|
65
|
-
type: 'cache:delete';
|
|
66
|
-
}
|
|
67
|
-
export interface CacheClearMessage {
|
|
68
|
-
__orkify: true;
|
|
69
|
-
type: 'cache:clear';
|
|
70
|
-
}
|
|
71
|
-
export interface CacheInvalidateTagMessage {
|
|
72
|
-
__orkify: true;
|
|
73
|
-
tag: string;
|
|
74
|
-
type: 'cache:invalidate-tag';
|
|
75
|
-
}
|
|
76
|
-
export interface CacheUpdateTagTimestampMessage {
|
|
77
|
-
__orkify: true;
|
|
78
|
-
tag: string;
|
|
79
|
-
tagTimestamp: number;
|
|
80
|
-
type: 'cache:update-tag-timestamp';
|
|
81
|
-
}
|
|
82
|
-
export interface CacheConfigureMessage {
|
|
83
|
-
__orkify: true;
|
|
84
|
-
config: CacheConfig;
|
|
85
|
-
type: 'cache:configure';
|
|
86
|
-
}
|
|
87
|
-
export type CacheWorkerMessage = CacheClearMessage | CacheConfigureMessage | CacheDeleteMessage | CacheInvalidateTagMessage | CacheSetMessage | CacheUpdateTagTimestampMessage;
|
|
88
|
-
export interface CacheBroadcastSetMessage {
|
|
89
|
-
__orkify: true;
|
|
90
|
-
expiresAt?: number;
|
|
91
|
-
key: string;
|
|
92
|
-
tags?: string[];
|
|
93
|
-
type: 'cache:set';
|
|
94
|
-
value: unknown;
|
|
95
|
-
}
|
|
96
|
-
export interface CacheBroadcastDeleteMessage {
|
|
97
|
-
__orkify: true;
|
|
98
|
-
key: string;
|
|
99
|
-
type: 'cache:delete';
|
|
100
|
-
}
|
|
101
|
-
export interface CacheBroadcastClearMessage {
|
|
102
|
-
__orkify: true;
|
|
103
|
-
type: 'cache:clear';
|
|
104
|
-
}
|
|
105
|
-
export interface CacheBroadcastInvalidateTagMessage {
|
|
106
|
-
__orkify: true;
|
|
107
|
-
tag: string;
|
|
108
|
-
tagTimestamp: number;
|
|
109
|
-
type: 'cache:invalidate-tag';
|
|
110
|
-
}
|
|
111
|
-
export interface CacheBroadcastUpdateTagTimestampMessage {
|
|
112
|
-
__orkify: true;
|
|
113
|
-
tag: string;
|
|
114
|
-
tagTimestamp: number;
|
|
115
|
-
type: 'cache:update-tag-timestamp';
|
|
116
|
-
}
|
|
117
|
-
export interface CacheSnapshotMessage {
|
|
118
|
-
__orkify: true;
|
|
119
|
-
entries: Array<[string, SerializedCacheEntry]>;
|
|
120
|
-
tagTimestamps: Array<[string, number]>;
|
|
121
|
-
type: 'cache:snapshot';
|
|
122
|
-
}
|
|
123
|
-
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@orkify/cache",
|
|
3
|
-
"version": "1.0.0-beta.1",
|
|
4
|
-
"private": true,
|
|
5
|
-
"description": "Framework-agnostic shared cache for orkify-managed processes",
|
|
6
|
-
"type": "module",
|
|
7
|
-
"exports": {
|
|
8
|
-
".": {
|
|
9
|
-
"types": "./src/index.ts",
|
|
10
|
-
"import": "./dist/index.js",
|
|
11
|
-
"default": "./dist/index.js"
|
|
12
|
-
},
|
|
13
|
-
"./primary": {
|
|
14
|
-
"types": "./src/CachePrimary.ts",
|
|
15
|
-
"import": "./dist/CachePrimary.js",
|
|
16
|
-
"default": "./dist/CachePrimary.js"
|
|
17
|
-
},
|
|
18
|
-
"./types": {
|
|
19
|
-
"types": "./src/types.ts",
|
|
20
|
-
"import": "./dist/types.js",
|
|
21
|
-
"default": "./dist/types.js"
|
|
22
|
-
}
|
|
23
|
-
},
|
|
24
|
-
"scripts": {
|
|
25
|
-
"build": "tsc"
|
|
26
|
-
}
|
|
27
|
-
}
|
|
@@ -1,227 +0,0 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
CacheBroadcastClearMessage,
|
|
3
|
-
CacheBroadcastDeleteMessage,
|
|
4
|
-
CacheBroadcastInvalidateTagMessage,
|
|
5
|
-
CacheBroadcastSetMessage,
|
|
6
|
-
CacheBroadcastUpdateTagTimestampMessage,
|
|
7
|
-
CacheConfig,
|
|
8
|
-
CacheSetOptions,
|
|
9
|
-
CacheSnapshotMessage,
|
|
10
|
-
CacheStats,
|
|
11
|
-
ICacheStore,
|
|
12
|
-
} from './types.js';
|
|
13
|
-
import { CACHE_DEFAULT_MAX_VALUE_SIZE } from './constants.js';
|
|
14
|
-
import { CacheFileStore } from './CacheFileStore.js';
|
|
15
|
-
import { CacheStore } from './CacheStore.js';
|
|
16
|
-
import { serialize, serializedByteLength } from './serialize.js';
|
|
17
|
-
|
|
18
|
-
type CacheInboundMessage =
|
|
19
|
-
| CacheBroadcastClearMessage
|
|
20
|
-
| CacheBroadcastDeleteMessage
|
|
21
|
-
| CacheBroadcastInvalidateTagMessage
|
|
22
|
-
| CacheBroadcastSetMessage
|
|
23
|
-
| CacheBroadcastUpdateTagTimestampMessage
|
|
24
|
-
| CacheSnapshotMessage;
|
|
25
|
-
|
|
26
|
-
export class CacheClient {
|
|
27
|
-
private clusterMode: boolean;
|
|
28
|
-
private defaultTtl: number | undefined;
|
|
29
|
-
private maxValueSize: number;
|
|
30
|
-
private messageHandler: ((msg: unknown) => void) | undefined;
|
|
31
|
-
private store: ICacheStore;
|
|
32
|
-
|
|
33
|
-
constructor(config?: CacheConfig, bufferedMessages?: unknown[]) {
|
|
34
|
-
this.defaultTtl = config?.defaultTtl;
|
|
35
|
-
this.maxValueSize = config?.maxValueSize ?? CACHE_DEFAULT_MAX_VALUE_SIZE;
|
|
36
|
-
this.clusterMode =
|
|
37
|
-
process.env.ORKIFY_CLUSTER_MODE === 'true' && typeof process.send === 'function';
|
|
38
|
-
|
|
39
|
-
// File-backed: CacheFileStore for disk cold layer.
|
|
40
|
-
// In cluster mode workers are readOnly (reads from disk, writes go through IPC to primary).
|
|
41
|
-
// In standalone/fork mode the store has full read/write access.
|
|
42
|
-
const fileBacked = config?.fileBacked === true;
|
|
43
|
-
this.store = fileBacked
|
|
44
|
-
? new CacheFileStore(
|
|
45
|
-
process.env.ORKIFY_PROCESS_NAME ?? 'default',
|
|
46
|
-
config,
|
|
47
|
-
this.clusterMode ? { readOnly: true } : undefined
|
|
48
|
-
)
|
|
49
|
-
: new CacheStore(config);
|
|
50
|
-
|
|
51
|
-
// In fork/standalone mode, flush file-backed cache on process exit so all
|
|
52
|
-
// entries (not just evicted ones) survive restarts. Uses synchronous I/O
|
|
53
|
-
// since the 'exit' event doesn't support async operations.
|
|
54
|
-
if (!this.clusterMode && fileBacked) {
|
|
55
|
-
const fileStore = this.store as CacheFileStore;
|
|
56
|
-
|
|
57
|
-
// IPC flush for graceful shutdown (works cross-platform including Windows
|
|
58
|
-
// where SIGTERM doesn't trigger exit handlers)
|
|
59
|
-
process.on('message', (msg: unknown) => {
|
|
60
|
-
const m = msg as { __orkify?: boolean; type?: string };
|
|
61
|
-
if (m?.__orkify && m.type === 'cache:flush') {
|
|
62
|
-
fileStore.flushSync();
|
|
63
|
-
try {
|
|
64
|
-
process.send?.({ __orkify: true, type: 'cache:flushed' });
|
|
65
|
-
} catch {
|
|
66
|
-
// parent may have disconnected
|
|
67
|
-
}
|
|
68
|
-
process.exit(0);
|
|
69
|
-
}
|
|
70
|
-
});
|
|
71
|
-
|
|
72
|
-
// Fallback: also flush on exit event (works on Unix via SIGTERM → exit)
|
|
73
|
-
process.on('exit', () => fileStore.flushSync());
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
if (this.clusterMode) {
|
|
77
|
-
this.messageHandler = (msg: unknown) => this.handleMessage(msg);
|
|
78
|
-
process.on('message', this.messageHandler);
|
|
79
|
-
|
|
80
|
-
// Drain any IPC messages that arrived before this client was created
|
|
81
|
-
if (bufferedMessages) {
|
|
82
|
-
for (const msg of bufferedMessages) {
|
|
83
|
-
this.handleMessage(msg);
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
// Notify the cluster primary about file-backed config so it can upgrade its store
|
|
88
|
-
if (process.send && fileBacked) {
|
|
89
|
-
this.trySend({
|
|
90
|
-
__orkify: true,
|
|
91
|
-
type: 'cache:configure',
|
|
92
|
-
config: { ...config, fileBacked: true },
|
|
93
|
-
});
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
/** Configure cache options. Must be called before any other method. Intercepted by the proxy in `cache/index.ts`. */
|
|
99
|
-
configure(_config: CacheConfig): void {
|
|
100
|
-
throw new Error('orkify/cache: configure() must be called via the cache singleton proxy');
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
get<T>(key: string): T | undefined {
|
|
104
|
-
return this.store.get<T>(key);
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
async getAsync<T>(key: string): Promise<T | undefined> {
|
|
108
|
-
return this.store.getAsync<T>(key);
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
set(key: string, value: unknown, opts?: CacheSetOptions): void {
|
|
112
|
-
if (opts?.ttl !== undefined && opts.ttl <= 0) {
|
|
113
|
-
throw new Error(`cache.set(): ttl must be positive, got ${opts.ttl}`);
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
// Validate serializability and size
|
|
117
|
-
const serialized = serialize(value);
|
|
118
|
-
const byteLength = serializedByteLength(serialized);
|
|
119
|
-
if (byteLength > this.maxValueSize) {
|
|
120
|
-
throw new Error(
|
|
121
|
-
`cache.set(): value for key "${key}" is ${byteLength} bytes, exceeds max ${this.maxValueSize} bytes`
|
|
122
|
-
);
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
const ttl = opts?.ttl ?? this.defaultTtl;
|
|
126
|
-
const expiresAt = ttl ? Date.now() + ttl * 1000 : undefined;
|
|
127
|
-
const tags = opts?.tags;
|
|
128
|
-
this.store.set(key, value, expiresAt, tags, byteLength);
|
|
129
|
-
|
|
130
|
-
if (this.clusterMode) {
|
|
131
|
-
this.trySend({ __orkify: true, type: 'cache:set', key, value, ttl, tags });
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
delete(key: string): void {
|
|
136
|
-
this.store.delete(key);
|
|
137
|
-
|
|
138
|
-
if (this.clusterMode) {
|
|
139
|
-
this.trySend({ __orkify: true, type: 'cache:delete', key });
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
clear(): void {
|
|
144
|
-
this.store.clear();
|
|
145
|
-
|
|
146
|
-
if (this.clusterMode) {
|
|
147
|
-
this.trySend({ __orkify: true, type: 'cache:clear' });
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
has(key: string): boolean {
|
|
152
|
-
return this.store.has(key);
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
stats(): CacheStats {
|
|
156
|
-
return this.store.stats();
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
getTagExpiration(tags: string[]): number {
|
|
160
|
-
return this.store.getTagExpiration(tags);
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
invalidateTag(tag: string): void {
|
|
164
|
-
this.store.invalidateTag(tag);
|
|
165
|
-
|
|
166
|
-
if (this.clusterMode) {
|
|
167
|
-
this.trySend({ __orkify: true, type: 'cache:invalidate-tag', tag });
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
updateTagTimestamp(tag: string, timestamp?: number): void {
|
|
172
|
-
const ts = timestamp ?? Date.now();
|
|
173
|
-
this.store.applyTagTimestamp(tag, ts);
|
|
174
|
-
|
|
175
|
-
if (this.clusterMode) {
|
|
176
|
-
this.trySend({ __orkify: true, type: 'cache:update-tag-timestamp', tag, tagTimestamp: ts });
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
destroy(): void {
|
|
181
|
-
if (this.messageHandler) {
|
|
182
|
-
process.removeListener('message', this.messageHandler);
|
|
183
|
-
this.messageHandler = undefined;
|
|
184
|
-
}
|
|
185
|
-
this.store.destroy();
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
/** Send an IPC message to the cluster primary, silently ignoring failures (e.g. closed channel). */
|
|
189
|
-
private trySend(msg: Record<string, unknown>): void {
|
|
190
|
-
try {
|
|
191
|
-
process.send?.(msg);
|
|
192
|
-
} catch {
|
|
193
|
-
// IPC channel closed — primary died or worker is shutting down
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
private handleMessage(msg: unknown): void {
|
|
198
|
-
const m = msg as { __orkify?: boolean; type?: string };
|
|
199
|
-
if (!m?.__orkify || !m.type?.startsWith('cache:')) return;
|
|
200
|
-
|
|
201
|
-
const message = msg as CacheInboundMessage;
|
|
202
|
-
switch (message.type) {
|
|
203
|
-
case 'cache:set':
|
|
204
|
-
this.store.applySet(message.key, message.value, message.expiresAt, message.tags);
|
|
205
|
-
break;
|
|
206
|
-
case 'cache:delete':
|
|
207
|
-
this.store.applyDelete(message.key);
|
|
208
|
-
break;
|
|
209
|
-
case 'cache:clear':
|
|
210
|
-
this.store.clear();
|
|
211
|
-
break;
|
|
212
|
-
case 'cache:invalidate-tag':
|
|
213
|
-
this.store.invalidateTag(message.tag);
|
|
214
|
-
this.store.applyTagTimestamp(message.tag, message.tagTimestamp);
|
|
215
|
-
break;
|
|
216
|
-
case 'cache:update-tag-timestamp':
|
|
217
|
-
this.store.applyTagTimestamp(message.tag, message.tagTimestamp);
|
|
218
|
-
break;
|
|
219
|
-
case 'cache:snapshot':
|
|
220
|
-
this.store.applySnapshot({
|
|
221
|
-
entries: message.entries,
|
|
222
|
-
tagTimestamps: message.tagTimestamps,
|
|
223
|
-
});
|
|
224
|
-
break;
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
}
|