@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.
Files changed (90) hide show
  1. package/README.md +10 -5
  2. package/package.json +8 -31
  3. package/packages/cache/README.md +0 -114
  4. package/packages/cache/dist/CacheClient.d.ts +0 -26
  5. package/packages/cache/dist/CacheClient.d.ts.map +0 -1
  6. package/packages/cache/dist/CacheClient.js +0 -174
  7. package/packages/cache/dist/CacheClient.js.map +0 -1
  8. package/packages/cache/dist/CacheFileStore.d.ts +0 -45
  9. package/packages/cache/dist/CacheFileStore.d.ts.map +0 -1
  10. package/packages/cache/dist/CacheFileStore.js +0 -446
  11. package/packages/cache/dist/CacheFileStore.js.map +0 -1
  12. package/packages/cache/dist/CachePersistence.d.ts +0 -9
  13. package/packages/cache/dist/CachePersistence.d.ts.map +0 -1
  14. package/packages/cache/dist/CachePersistence.js +0 -67
  15. package/packages/cache/dist/CachePersistence.js.map +0 -1
  16. package/packages/cache/dist/CachePrimary.d.ts +0 -25
  17. package/packages/cache/dist/CachePrimary.d.ts.map +0 -1
  18. package/packages/cache/dist/CachePrimary.js +0 -155
  19. package/packages/cache/dist/CachePrimary.js.map +0 -1
  20. package/packages/cache/dist/CacheStore.d.ts +0 -50
  21. package/packages/cache/dist/CacheStore.d.ts.map +0 -1
  22. package/packages/cache/dist/CacheStore.js +0 -271
  23. package/packages/cache/dist/CacheStore.js.map +0 -1
  24. package/packages/cache/dist/constants.d.ts +0 -6
  25. package/packages/cache/dist/constants.d.ts.map +0 -1
  26. package/packages/cache/dist/constants.js +0 -9
  27. package/packages/cache/dist/constants.js.map +0 -1
  28. package/packages/cache/dist/index.d.ts +0 -16
  29. package/packages/cache/dist/index.d.ts.map +0 -1
  30. package/packages/cache/dist/index.js +0 -86
  31. package/packages/cache/dist/index.js.map +0 -1
  32. package/packages/cache/dist/serialize.d.ts +0 -9
  33. package/packages/cache/dist/serialize.d.ts.map +0 -1
  34. package/packages/cache/dist/serialize.js +0 -40
  35. package/packages/cache/dist/serialize.js.map +0 -1
  36. package/packages/cache/dist/types.d.ts +0 -123
  37. package/packages/cache/dist/types.d.ts.map +0 -1
  38. package/packages/cache/dist/types.js +0 -2
  39. package/packages/cache/dist/types.js.map +0 -1
  40. package/packages/cache/package.json +0 -27
  41. package/packages/cache/src/CacheClient.ts +0 -227
  42. package/packages/cache/src/CacheFileStore.ts +0 -528
  43. package/packages/cache/src/CachePersistence.ts +0 -89
  44. package/packages/cache/src/CachePrimary.ts +0 -172
  45. package/packages/cache/src/CacheStore.ts +0 -308
  46. package/packages/cache/src/constants.ts +0 -10
  47. package/packages/cache/src/index.ts +0 -100
  48. package/packages/cache/src/serialize.ts +0 -49
  49. package/packages/cache/src/types.ts +0 -156
  50. package/packages/cache/tsconfig.json +0 -18
  51. package/packages/cache/tsconfig.tsbuildinfo +0 -1
  52. package/packages/next/README.md +0 -166
  53. package/packages/next/dist/error-capture.d.ts +0 -34
  54. package/packages/next/dist/error-capture.d.ts.map +0 -1
  55. package/packages/next/dist/error-capture.js +0 -130
  56. package/packages/next/dist/error-capture.js.map +0 -1
  57. package/packages/next/dist/error-handler.d.ts +0 -10
  58. package/packages/next/dist/error-handler.d.ts.map +0 -1
  59. package/packages/next/dist/error-handler.js +0 -186
  60. package/packages/next/dist/error-handler.js.map +0 -1
  61. package/packages/next/dist/isr-cache.d.ts +0 -9
  62. package/packages/next/dist/isr-cache.d.ts.map +0 -1
  63. package/packages/next/dist/isr-cache.js +0 -86
  64. package/packages/next/dist/isr-cache.js.map +0 -1
  65. package/packages/next/dist/stream.d.ts +0 -5
  66. package/packages/next/dist/stream.d.ts.map +0 -1
  67. package/packages/next/dist/stream.js +0 -22
  68. package/packages/next/dist/stream.js.map +0 -1
  69. package/packages/next/dist/types.d.ts +0 -33
  70. package/packages/next/dist/types.d.ts.map +0 -1
  71. package/packages/next/dist/types.js +0 -6
  72. package/packages/next/dist/types.js.map +0 -1
  73. package/packages/next/dist/use-cache.d.ts +0 -4
  74. package/packages/next/dist/use-cache.d.ts.map +0 -1
  75. package/packages/next/dist/use-cache.js +0 -86
  76. package/packages/next/dist/use-cache.js.map +0 -1
  77. package/packages/next/dist/utils.d.ts +0 -32
  78. package/packages/next/dist/utils.d.ts.map +0 -1
  79. package/packages/next/dist/utils.js +0 -88
  80. package/packages/next/dist/utils.js.map +0 -1
  81. package/packages/next/package.json +0 -52
  82. package/packages/next/src/error-capture.ts +0 -177
  83. package/packages/next/src/error-handler.ts +0 -221
  84. package/packages/next/src/isr-cache.ts +0 -100
  85. package/packages/next/src/stream.ts +0 -23
  86. package/packages/next/src/types.ts +0 -33
  87. package/packages/next/src/use-cache.ts +0 -99
  88. package/packages/next/src/utils.ts +0 -102
  89. package/packages/next/tsconfig.json +0 -19
  90. 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,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=types.js.map
@@ -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
- }