@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
package/README.md CHANGED
@@ -2,9 +2,9 @@
2
2
 
3
3
  [![Beta](https://img.shields.io/badge/status-beta-yellow)](https://github.com/orkify/orkify)
4
4
  [![CI](https://github.com/orkify/orkify/actions/workflows/ci.yml/badge.svg)](https://github.com/orkify/orkify/actions/workflows/ci.yml)
5
- [![npm](https://img.shields.io/npm/v/orkify)](https://www.npmjs.com/package/orkify)
6
- [![Node](https://img.shields.io/node/v/orkify)](https://nodejs.org/)
7
- [![License](https://img.shields.io/npm/l/orkify)](https://github.com/orkify/orkify/blob/main/LICENSE)
5
+ [![npm](https://img.shields.io/npm/v/@orkify/cli)](https://www.npmjs.com/package/@orkify/cli)
6
+ [![Node](https://img.shields.io/node/v/@orkify/cli)](https://nodejs.org/)
7
+ [![License](https://img.shields.io/npm/l/@orkify/cli)](https://github.com/orkify/orkify/blob/main/LICENSE)
8
8
  [![TypeScript](https://img.shields.io/badge/TypeScript-%E2%89%A55.9-blue?logo=typescript&logoColor=white)](https://www.typescriptlang.org/)
9
9
 
10
10
  Modern JS process orchestration and deployment for your own infrastructure.
@@ -59,8 +59,13 @@ Modern JS process orchestration and deployment for your own infrastructure.
59
59
  ## Installation
60
60
 
61
61
  ```bash
62
- npm install
63
- npm run build
62
+ npm install -g @orkify/cli
63
+ ```
64
+
65
+ Or run directly with npx:
66
+
67
+ ```bash
68
+ npx @orkify/cli up app.js
64
69
  ```
65
70
 
66
71
  ## Quick Start
package/package.json CHANGED
@@ -1,36 +1,14 @@
1
1
  {
2
2
  "name": "@orkify/cli",
3
- "version": "1.0.0-beta.5",
3
+ "version": "1.0.0-beta.6",
4
4
  "description": "Modern JS process orchestration and deployment for your own infrastructure",
5
5
  "type": "module",
6
+ "workspaces": [
7
+ "packages/*"
8
+ ],
6
9
  "main": "dist/cli/index.js",
7
10
  "exports": {
8
- ".": "./dist/cli/index.js",
9
- "./cache": {
10
- "types": "./packages/cache/src/index.ts",
11
- "import": "./packages/cache/dist/index.js",
12
- "default": "./packages/cache/dist/index.js"
13
- },
14
- "./next/use-cache": {
15
- "types": "./packages/next/src/use-cache.ts",
16
- "import": "./packages/next/dist/use-cache.js",
17
- "default": "./packages/next/dist/use-cache.js"
18
- },
19
- "./next/isr-cache": {
20
- "types": "./packages/next/src/isr-cache.ts",
21
- "import": "./packages/next/dist/isr-cache.js",
22
- "default": "./packages/next/dist/isr-cache.js"
23
- },
24
- "./next/error-capture": {
25
- "types": "./packages/next/src/error-capture.ts",
26
- "import": "./packages/next/dist/error-capture.js",
27
- "default": "./packages/next/dist/error-capture.js"
28
- },
29
- "./next/error-handler": {
30
- "types": "./packages/next/src/error-handler.ts",
31
- "import": "./packages/next/dist/error-handler.js",
32
- "default": "./packages/next/dist/error-handler.js"
33
- }
11
+ ".": "./dist/cli/index.js"
34
12
  },
35
13
  "bin": {
36
14
  "orkify": "./bin/orkify"
@@ -39,8 +17,7 @@
39
17
  "bin/",
40
18
  "boot/",
41
19
  "dist/**/*.js",
42
- "dist/**/*.d.ts",
43
- "packages/"
20
+ "dist/**/*.d.ts"
44
21
  ],
45
22
  "scripts": {
46
23
  "build": "tsc -p packages/cache/tsconfig.json && tsc -p packages/next/tsconfig.json && tsc",
@@ -96,8 +73,8 @@
96
73
  },
97
74
  "dependencies": {
98
75
  "@modelcontextprotocol/sdk": "^1.25.3",
99
- "@orkify/cache": "file:./packages/cache",
100
- "@orkify/next": "file:./packages/next",
76
+ "@orkify/cache": "^1.0.0-beta.6",
77
+ "@orkify/next": "^1.0.0-beta.6",
101
78
  "@socket.io/cluster-adapter": "^0.3.0",
102
79
  "@socket.io/sticky": "^1.0.4",
103
80
  "chalk": "^5.3.0",
@@ -1,114 +0,0 @@
1
- # @orkify/cache
2
-
3
- [![npm](https://img.shields.io/npm/v/@orkify/cache)](https://www.npmjs.com/package/@orkify/cache)
4
- [![Node](https://img.shields.io/node/v/orkify)](https://nodejs.org/)
5
- [![License](https://img.shields.io/npm/l/orkify)](https://github.com/orkify/orkify/blob/main/LICENSE)
6
- [![TypeScript](https://img.shields.io/badge/TypeScript-%E2%89%A55.9-blue?logo=typescript&logoColor=white)](https://www.typescriptlang.org/)
7
-
8
- Framework-agnostic shared cache for [orkify](https://orkify.com)-managed Node.js processes.
9
-
10
- ## Installation
11
-
12
- ```bash
13
- npm install @orkify/cache
14
- ```
15
-
16
- ## Usage
17
-
18
- ```typescript
19
- import { cache } from '@orkify/cache';
20
-
21
- // Set a value
22
- cache.set('user:123', { name: 'Alice', role: 'admin' });
23
-
24
- // Set with TTL (seconds) and tags
25
- cache.set('post:456', postData, { ttl: 300, tags: ['posts', 'user:123'] });
26
-
27
- // Get a value (synchronous, local memory)
28
- const user = cache.get<User>('user:123');
29
-
30
- // Get with async fallback (checks file-backed cold layer)
31
- const post = await cache.getAsync<Post>('post:456');
32
-
33
- // Check existence
34
- cache.has('user:123');
35
-
36
- // Delete + broadcast to all workers
37
- cache.delete('user:123');
38
-
39
- // Clear all entries + broadcast
40
- cache.clear();
41
-
42
- // Invalidate all entries with a tag + record timestamp
43
- cache.invalidateTag('posts');
44
-
45
- // Query when a tag was last invalidated
46
- cache.getTagExpiration(['posts']);
47
-
48
- // Record a timestamp without deleting entries (stale-while-revalidate)
49
- cache.updateTagTimestamp('posts');
50
-
51
- // Cache stats
52
- const stats = cache.stats();
53
- // { size, hits, misses, hitRate, totalBytes, diskSize }
54
- ```
55
-
56
- `get()` reads from memory only — always sync, zero overhead. `getAsync()` checks memory first, then falls back to disk if file-backed mode is enabled.
57
-
58
- ## Configuration
59
-
60
- Optional — call `cache.configure()` before the first use, or defaults apply:
61
-
62
- ```typescript
63
- import { cache } from '@orkify/cache';
64
-
65
- cache.configure({
66
- maxEntries: 50_000, // Default: 10,000
67
- defaultTtl: 300, // Default: undefined (no expiry, seconds)
68
- maxMemorySize: 128 * 1024 * 1024, // Default: 64 MB per worker
69
- maxValueSize: 2 << 20, // Default: 1 MB
70
- fileBacked: true, // Default: true — evicted entries spill to disk
71
- });
72
- ```
73
-
74
- | Option | Default | Description |
75
- | --------------- | ----------------------- | ------------------------------------------------------------------------ |
76
- | `maxEntries` | `10,000` | Maximum entries before LRU eviction kicks in |
77
- | `defaultTtl` | `undefined` (no expiry) | Default TTL in seconds for entries without an explicit `ttl` |
78
- | `maxMemorySize` | `64 MB` | Maximum memory per worker before byte-based LRU eviction |
79
- | `maxValueSize` | `1 MB` | Maximum byte size of a single value (rejects larger with an error) |
80
- | `fileBacked` | `true` | Persist evicted entries to disk, survive restarts, read via `getAsync()` |
81
-
82
- ## How It Works
83
-
84
- | Mode | Behavior |
85
- | -------------------------- | ------------------------------------------------------- |
86
- | `npm run dev` (standalone) | Local cache + disk cold layer, no IPC |
87
- | `orkify up -w 1` (fork) | Local cache + disk cold layer, no IPC |
88
- | `orkify up -w 4` (cluster) | Broadcast cache — writes sync via IPC, reads stay local |
89
- | `orkify run` (foreground) | Local cache + disk cold layer, no IPC |
90
-
91
- The API is identical in every mode. In standalone or fork mode, it degrades gracefully to a plain local cache — no errors, no code changes needed. Deploy with `orkify up -w 4` and the same code syncs across workers automatically.
92
-
93
- ## Features
94
-
95
- - LRU eviction (entry-count and byte-based)
96
- - TTL expiration
97
- - Tag-based group invalidation with timestamps
98
- - V8 serialization (supports Map, Set, Date, RegExp, Error, ArrayBuffer, TypedArray)
99
- - Value validation — rejects functions, symbols, and oversized values with descriptive errors
100
- - Two-tier architecture: hot memory layer + cold file-backed layer
101
- - Cluster-safe: automatic IPC synchronization across workers
102
- - Snapshots sent to new workers on spawn
103
- - Eventual consistency: other workers may read stale values for one IPC round trip after a write
104
-
105
- For full details on eviction, persistence lifecycle, and cluster behavior, see the [main orkify README](https://github.com/orkify/orkify#shared-cluster-cache).
106
-
107
- ## Requirements
108
-
109
- - Node.js 22+
110
- - Must run under [orkify](https://github.com/orkify/orkify) for cluster mode features
111
-
112
- ## License
113
-
114
- Apache-2.0
@@ -1,26 +0,0 @@
1
- import type { CacheConfig, CacheSetOptions, CacheStats } from './types.js';
2
- export declare class CacheClient {
3
- private clusterMode;
4
- private defaultTtl;
5
- private maxValueSize;
6
- private messageHandler;
7
- private store;
8
- constructor(config?: CacheConfig, bufferedMessages?: unknown[]);
9
- /** Configure cache options. Must be called before any other method. Intercepted by the proxy in `cache/index.ts`. */
10
- configure(_config: CacheConfig): void;
11
- get<T>(key: string): T | undefined;
12
- getAsync<T>(key: string): Promise<T | undefined>;
13
- set(key: string, value: unknown, opts?: CacheSetOptions): void;
14
- delete(key: string): void;
15
- clear(): void;
16
- has(key: string): boolean;
17
- stats(): CacheStats;
18
- getTagExpiration(tags: string[]): number;
19
- invalidateTag(tag: string): void;
20
- updateTagTimestamp(tag: string, timestamp?: number): void;
21
- destroy(): void;
22
- /** Send an IPC message to the cluster primary, silently ignoring failures (e.g. closed channel). */
23
- private trySend;
24
- private handleMessage;
25
- }
26
- //# sourceMappingURL=CacheClient.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CacheClient.d.ts","sourceRoot":"","sources":["../src/CacheClient.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAMV,WAAW,EACX,eAAe,EAEf,UAAU,EAEX,MAAM,YAAY,CAAC;AAcpB,qBAAa,WAAW;IACtB,OAAO,CAAC,WAAW,CAAU;IAC7B,OAAO,CAAC,UAAU,CAAqB;IACvC,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,cAAc,CAAuC;IAC7D,OAAO,CAAC,KAAK,CAAc;gBAEf,MAAM,CAAC,EAAE,WAAW,EAAE,gBAAgB,CAAC,EAAE,OAAO,EAAE;IAiE9D,qHAAqH;IACrH,SAAS,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IAIrC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAI5B,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAItD,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,eAAe,GAAG,IAAI;IAwB9D,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAQzB,KAAK,IAAI,IAAI;IAQb,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIzB,KAAK,IAAI,UAAU;IAInB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM;IAIxC,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAQhC,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI;IASzD,OAAO,IAAI,IAAI;IAQf,oGAAoG;IACpG,OAAO,CAAC,OAAO;IAQf,OAAO,CAAC,aAAa;CA8BtB"}
@@ -1,174 +0,0 @@
1
- import { CACHE_DEFAULT_MAX_VALUE_SIZE } from './constants.js';
2
- import { CacheFileStore } from './CacheFileStore.js';
3
- import { CacheStore } from './CacheStore.js';
4
- import { serialize, serializedByteLength } from './serialize.js';
5
- export class CacheClient {
6
- clusterMode;
7
- defaultTtl;
8
- maxValueSize;
9
- messageHandler;
10
- store;
11
- constructor(config, bufferedMessages) {
12
- this.defaultTtl = config?.defaultTtl;
13
- this.maxValueSize = config?.maxValueSize ?? CACHE_DEFAULT_MAX_VALUE_SIZE;
14
- this.clusterMode =
15
- process.env.ORKIFY_CLUSTER_MODE === 'true' && typeof process.send === 'function';
16
- // File-backed: CacheFileStore for disk cold layer.
17
- // In cluster mode workers are readOnly (reads from disk, writes go through IPC to primary).
18
- // In standalone/fork mode the store has full read/write access.
19
- const fileBacked = config?.fileBacked === true;
20
- this.store = fileBacked
21
- ? new CacheFileStore(process.env.ORKIFY_PROCESS_NAME ?? 'default', config, this.clusterMode ? { readOnly: true } : undefined)
22
- : new CacheStore(config);
23
- // In fork/standalone mode, flush file-backed cache on process exit so all
24
- // entries (not just evicted ones) survive restarts. Uses synchronous I/O
25
- // since the 'exit' event doesn't support async operations.
26
- if (!this.clusterMode && fileBacked) {
27
- const fileStore = this.store;
28
- // IPC flush for graceful shutdown (works cross-platform including Windows
29
- // where SIGTERM doesn't trigger exit handlers)
30
- process.on('message', (msg) => {
31
- const m = msg;
32
- if (m?.__orkify && m.type === 'cache:flush') {
33
- fileStore.flushSync();
34
- try {
35
- process.send?.({ __orkify: true, type: 'cache:flushed' });
36
- }
37
- catch {
38
- // parent may have disconnected
39
- }
40
- process.exit(0);
41
- }
42
- });
43
- // Fallback: also flush on exit event (works on Unix via SIGTERM → exit)
44
- process.on('exit', () => fileStore.flushSync());
45
- }
46
- if (this.clusterMode) {
47
- this.messageHandler = (msg) => this.handleMessage(msg);
48
- process.on('message', this.messageHandler);
49
- // Drain any IPC messages that arrived before this client was created
50
- if (bufferedMessages) {
51
- for (const msg of bufferedMessages) {
52
- this.handleMessage(msg);
53
- }
54
- }
55
- // Notify the cluster primary about file-backed config so it can upgrade its store
56
- if (process.send && fileBacked) {
57
- this.trySend({
58
- __orkify: true,
59
- type: 'cache:configure',
60
- config: { ...config, fileBacked: true },
61
- });
62
- }
63
- }
64
- }
65
- /** Configure cache options. Must be called before any other method. Intercepted by the proxy in `cache/index.ts`. */
66
- configure(_config) {
67
- throw new Error('orkify/cache: configure() must be called via the cache singleton proxy');
68
- }
69
- get(key) {
70
- return this.store.get(key);
71
- }
72
- async getAsync(key) {
73
- return this.store.getAsync(key);
74
- }
75
- set(key, value, opts) {
76
- if (opts?.ttl !== undefined && opts.ttl <= 0) {
77
- throw new Error(`cache.set(): ttl must be positive, got ${opts.ttl}`);
78
- }
79
- // Validate serializability and size
80
- const serialized = serialize(value);
81
- const byteLength = serializedByteLength(serialized);
82
- if (byteLength > this.maxValueSize) {
83
- throw new Error(`cache.set(): value for key "${key}" is ${byteLength} bytes, exceeds max ${this.maxValueSize} bytes`);
84
- }
85
- const ttl = opts?.ttl ?? this.defaultTtl;
86
- const expiresAt = ttl ? Date.now() + ttl * 1000 : undefined;
87
- const tags = opts?.tags;
88
- this.store.set(key, value, expiresAt, tags, byteLength);
89
- if (this.clusterMode) {
90
- this.trySend({ __orkify: true, type: 'cache:set', key, value, ttl, tags });
91
- }
92
- }
93
- delete(key) {
94
- this.store.delete(key);
95
- if (this.clusterMode) {
96
- this.trySend({ __orkify: true, type: 'cache:delete', key });
97
- }
98
- }
99
- clear() {
100
- this.store.clear();
101
- if (this.clusterMode) {
102
- this.trySend({ __orkify: true, type: 'cache:clear' });
103
- }
104
- }
105
- has(key) {
106
- return this.store.has(key);
107
- }
108
- stats() {
109
- return this.store.stats();
110
- }
111
- getTagExpiration(tags) {
112
- return this.store.getTagExpiration(tags);
113
- }
114
- invalidateTag(tag) {
115
- this.store.invalidateTag(tag);
116
- if (this.clusterMode) {
117
- this.trySend({ __orkify: true, type: 'cache:invalidate-tag', tag });
118
- }
119
- }
120
- updateTagTimestamp(tag, timestamp) {
121
- const ts = timestamp ?? Date.now();
122
- this.store.applyTagTimestamp(tag, ts);
123
- if (this.clusterMode) {
124
- this.trySend({ __orkify: true, type: 'cache:update-tag-timestamp', tag, tagTimestamp: ts });
125
- }
126
- }
127
- destroy() {
128
- if (this.messageHandler) {
129
- process.removeListener('message', this.messageHandler);
130
- this.messageHandler = undefined;
131
- }
132
- this.store.destroy();
133
- }
134
- /** Send an IPC message to the cluster primary, silently ignoring failures (e.g. closed channel). */
135
- trySend(msg) {
136
- try {
137
- process.send?.(msg);
138
- }
139
- catch {
140
- // IPC channel closed — primary died or worker is shutting down
141
- }
142
- }
143
- handleMessage(msg) {
144
- const m = msg;
145
- if (!m?.__orkify || !m.type?.startsWith('cache:'))
146
- return;
147
- const message = msg;
148
- switch (message.type) {
149
- case 'cache:set':
150
- this.store.applySet(message.key, message.value, message.expiresAt, message.tags);
151
- break;
152
- case 'cache:delete':
153
- this.store.applyDelete(message.key);
154
- break;
155
- case 'cache:clear':
156
- this.store.clear();
157
- break;
158
- case 'cache:invalidate-tag':
159
- this.store.invalidateTag(message.tag);
160
- this.store.applyTagTimestamp(message.tag, message.tagTimestamp);
161
- break;
162
- case 'cache:update-tag-timestamp':
163
- this.store.applyTagTimestamp(message.tag, message.tagTimestamp);
164
- break;
165
- case 'cache:snapshot':
166
- this.store.applySnapshot({
167
- entries: message.entries,
168
- tagTimestamps: message.tagTimestamps,
169
- });
170
- break;
171
- }
172
- }
173
- }
174
- //# sourceMappingURL=CacheClient.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CacheClient.js","sourceRoot":"","sources":["../src/CacheClient.ts"],"names":[],"mappings":"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"}
@@ -1,45 +0,0 @@
1
- import type { CacheConfig, CacheSnapshot, CacheStats, ICacheStore } from './types.js';
2
- export declare class CacheFileStore implements ICacheStore {
3
- private cacheDir;
4
- private diskIndex;
5
- private diskSweepTimer;
6
- private diskTagIndex;
7
- private entriesDir;
8
- private indexPath;
9
- private indexDirty;
10
- private loadIndexPromise;
11
- private persistPromise;
12
- private readOnly;
13
- private store;
14
- private tagTimestamps;
15
- constructor(processName: string, config?: CacheConfig, options?: {
16
- readOnly?: boolean;
17
- });
18
- get<T>(key: string): T | undefined;
19
- getAsync<T>(key: string): Promise<T | undefined>;
20
- set(key: string, value: unknown, expiresAt?: number, tags?: string[], precomputedByteSize?: number): void;
21
- delete(key: string): boolean;
22
- clear(): void;
23
- has(key: string): boolean;
24
- stats(): CacheStats;
25
- invalidateTag(tag: string): string[];
26
- getTagExpiration(tags: string[]): number;
27
- applyTagTimestamp(tag: string, timestamp: number): void;
28
- applySet(key: string, value: unknown, expiresAt?: number, tags?: string[]): void;
29
- applyDelete(key: string): void;
30
- applySnapshot(snapshot: CacheSnapshot): void;
31
- serialize(): CacheSnapshot;
32
- destroy(): void;
33
- /** Flush all in-memory entries to disk (called on graceful shutdown). No-op in readOnly mode. */
34
- flush(): Promise<void>;
35
- /** Synchronous flush for use in process 'exit' handlers where async I/O is unavailable. */
36
- flushSync(): void;
37
- /** Load disk index on startup (values are loaded lazily on access). No-op in readOnly mode. */
38
- loadIndex(): Promise<void>;
39
- private writeToDisk;
40
- private deleteFromDisk;
41
- private removeDiskMeta;
42
- private sweepDisk;
43
- private persistIndex;
44
- }
45
- //# sourceMappingURL=CacheFileStore.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CacheFileStore.d.ts","sourceRoot":"","sources":["../src/CacheFileStore.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAc,aAAa,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AA4BlG,qBAAa,cAAe,YAAW,WAAW;IAChD,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,SAAS,CAA+B;IAChD,OAAO,CAAC,cAAc,CAA6C;IACnE,OAAO,CAAC,YAAY,CAAkC;IACtD,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,gBAAgB,CAA4B;IACpD,OAAO,CAAC,cAAc,CAA4B;IAClD,OAAO,CAAC,QAAQ,CAAU;IAC1B,OAAO,CAAC,KAAK,CAAa;IAC1B,OAAO,CAAC,aAAa,CAA6B;gBAEtC,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE;IAuCvF,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAI5B,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IA+DtD,GAAG,CACD,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,OAAO,EACd,SAAS,CAAC,EAAE,MAAM,EAClB,IAAI,CAAC,EAAE,MAAM,EAAE,EACf,mBAAmB,CAAC,EAAE,MAAM,GAC3B,IAAI;IAQP,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAS5B,KAAK,IAAI,IAAI;IAcb,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAWzB,KAAK,IAAI,UAAU;IAKnB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE;IAkBpC,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM;IAaxC,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAKvD,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI;IAOhF,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAO9B,aAAa,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI;IAiB5C,SAAS,IAAI,aAAa;IAI1B,OAAO,IAAI,IAAI;IAaf,iGAAiG;IAC3F,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAmB5B,2FAA2F;IAC3F,SAAS,IAAI,IAAI;IA2CjB,+FAA+F;IACzF,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;YA8ClB,WAAW;YA+CX,cAAc;IAmB5B,OAAO,CAAC,cAAc;YAqBR,SAAS;YAST,YAAY;CA+B3B"}