jiren 3.1.0 → 3.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/README.md +1 -9
  2. package/components/client-node-native.ts +150 -292
  3. package/components/client.ts +385 -286
  4. package/components/index.ts +0 -2
  5. package/components/native-cache-node.ts +0 -3
  6. package/components/native-cache.ts +0 -8
  7. package/components/native-node.ts +142 -4
  8. package/components/native.ts +33 -65
  9. package/components/types.ts +25 -41
  10. package/dist/components/client-node-native.d.ts +0 -1
  11. package/dist/components/client-node-native.d.ts.map +1 -1
  12. package/dist/components/client-node-native.js +84 -202
  13. package/dist/components/client-node-native.js.map +1 -1
  14. package/dist/components/native-cache-node.d.ts.map +1 -1
  15. package/dist/components/native-cache-node.js +0 -1
  16. package/dist/components/native-cache-node.js.map +1 -1
  17. package/dist/components/native-node.d.ts +78 -0
  18. package/dist/components/native-node.d.ts.map +1 -1
  19. package/dist/components/native-node.js +125 -2
  20. package/dist/components/native-node.js.map +1 -1
  21. package/dist/components/types.d.ts +5 -13
  22. package/dist/components/types.d.ts.map +1 -1
  23. package/lib/libhttpclient.dylib +0 -0
  24. package/package.json +3 -3
  25. package/components/cache.ts +0 -451
  26. package/components/native-json.ts +0 -195
  27. package/components/persistent-worker.ts +0 -67
  28. package/components/subprocess-worker.ts +0 -60
  29. package/components/worker-pool.ts +0 -153
  30. package/components/worker.ts +0 -154
  31. package/dist/components/cache.d.ts +0 -32
  32. package/dist/components/cache.d.ts.map +0 -1
  33. package/dist/components/cache.js +0 -374
  34. package/dist/components/cache.js.map +0 -1
@@ -1,374 +0,0 @@
1
- import { existsSync, mkdirSync, readFileSync, writeFileSync, unlinkSync, readdirSync, statSync, } from "fs";
2
- import { gzipSync, gunzipSync } from "zlib";
3
- import { createHash } from "crypto";
4
- import { join } from "path";
5
- function reconstructBody(bodyData, isText) {
6
- let buffer;
7
- if (isText) {
8
- // Text data stored directly
9
- const encoder = new TextEncoder();
10
- buffer = encoder.encode(bodyData).buffer;
11
- }
12
- else {
13
- // Binary data stored as base64
14
- const binaryString = atob(bodyData);
15
- const bytes = new Uint8Array(binaryString.length);
16
- for (let i = 0; i < binaryString.length; i++) {
17
- bytes[i] = binaryString.charCodeAt(i);
18
- }
19
- buffer = bytes.buffer;
20
- }
21
- return {
22
- bodyUsed: false,
23
- text: async () => {
24
- if (isText)
25
- return bodyData;
26
- const decoder = new TextDecoder();
27
- return decoder.decode(buffer);
28
- },
29
- json: async () => {
30
- const text = isText ? bodyData : new TextDecoder().decode(buffer);
31
- return JSON.parse(text);
32
- },
33
- arrayBuffer: async () => buffer,
34
- jsonFields: async (_fields) => ({}),
35
- blob: async () => new Blob([buffer]),
36
- };
37
- }
38
- class L1MemoryCache {
39
- capacity;
40
- cache = new Map();
41
- head = null; // Most recently used
42
- tail = null; // Least recently used
43
- // Stats
44
- hits = 0;
45
- misses = 0;
46
- constructor(capacity = 100) {
47
- this.capacity = capacity;
48
- }
49
- get(key) {
50
- const node = this.cache.get(key);
51
- if (!node) {
52
- this.misses++;
53
- return null;
54
- }
55
- // Check if expired
56
- const now = Date.now();
57
- if (now - node.entry.timestamp > node.entry.ttl) {
58
- this.delete(key);
59
- this.misses++;
60
- return null;
61
- }
62
- // Move to front (most recently used)
63
- this.moveToFront(node);
64
- this.hits++;
65
- return node.entry;
66
- }
67
- set(key, entry) {
68
- // If key exists, update and move to front
69
- const existing = this.cache.get(key);
70
- if (existing) {
71
- existing.entry = entry;
72
- this.moveToFront(existing);
73
- return;
74
- }
75
- // Create new node
76
- const node = {
77
- key,
78
- entry,
79
- prev: null,
80
- next: this.head,
81
- };
82
- // Add to front
83
- if (this.head) {
84
- this.head.prev = node;
85
- }
86
- this.head = node;
87
- if (!this.tail) {
88
- this.tail = node;
89
- }
90
- this.cache.set(key, node);
91
- // Evict LRU if over capacity
92
- if (this.cache.size > this.capacity) {
93
- this.evictLRU();
94
- }
95
- }
96
- delete(key) {
97
- const node = this.cache.get(key);
98
- if (!node)
99
- return;
100
- this.removeNode(node);
101
- this.cache.delete(key);
102
- }
103
- clear() {
104
- this.cache.clear();
105
- this.head = null;
106
- this.tail = null;
107
- }
108
- stats() {
109
- return {
110
- size: this.cache.size,
111
- capacity: this.capacity,
112
- hits: this.hits,
113
- misses: this.misses,
114
- hitRate: this.hits + this.misses > 0
115
- ? ((this.hits / (this.hits + this.misses)) * 100).toFixed(2) + "%"
116
- : "0%",
117
- };
118
- }
119
- moveToFront(node) {
120
- if (node === this.head)
121
- return; // Already at front
122
- this.removeNode(node);
123
- // Add to front
124
- node.prev = null;
125
- node.next = this.head;
126
- if (this.head) {
127
- this.head.prev = node;
128
- }
129
- this.head = node;
130
- if (!this.tail) {
131
- this.tail = node;
132
- }
133
- }
134
- removeNode(node) {
135
- if (node.prev) {
136
- node.prev.next = node.next;
137
- }
138
- else {
139
- this.head = node.next;
140
- }
141
- if (node.next) {
142
- node.next.prev = node.prev;
143
- }
144
- else {
145
- this.tail = node.prev;
146
- }
147
- }
148
- evictLRU() {
149
- if (!this.tail)
150
- return;
151
- const key = this.tail.key;
152
- this.removeNode(this.tail);
153
- this.cache.delete(key);
154
- }
155
- }
156
- export class ResponseCache {
157
- l1;
158
- cacheDir;
159
- maxDiskSize;
160
- constructor(l1Capacity = 100, cacheDir = ".cache/jiren", maxDiskSize = 100) {
161
- this.l1 = new L1MemoryCache(l1Capacity);
162
- this.maxDiskSize = maxDiskSize;
163
- this.cacheDir = cacheDir;
164
- // Create cache directory if it doesn't exist
165
- if (!existsSync(this.cacheDir)) {
166
- mkdirSync(this.cacheDir, { recursive: true });
167
- }
168
- }
169
- generateKey(url, path, options) {
170
- const fullUrl = path ? `${url}${path}` : url;
171
- const method = options?.method || "GET";
172
- const headers = JSON.stringify(options?.headers || {});
173
- const key = `${method}:${fullUrl}:${headers}`;
174
- // Hash the key to create a valid filename
175
- return createHash("md5").update(key).digest("hex");
176
- }
177
- getCacheFilePath(key) {
178
- return join(this.cacheDir, `${key}.json.gz`);
179
- }
180
- preloadL1(url, path, options) {
181
- const key = this.generateKey(url, path, options);
182
- // Check if already in L1
183
- if (this.l1.get(key)) {
184
- return true;
185
- }
186
- // Try to load from L2 disk
187
- const l2Entry = this.getFromDisk(key);
188
- if (l2Entry) {
189
- this.l1.set(key, l2Entry);
190
- return true;
191
- }
192
- return false;
193
- }
194
- get(url, path, options) {
195
- const key = this.generateKey(url, path, options);
196
- // L1: Check in-memory cache first (~0.001ms)
197
- const l1Entry = this.l1.get(key);
198
- if (l1Entry) {
199
- return l1Entry.response;
200
- }
201
- // L2: Check disk cache (~5ms)
202
- const l2Entry = this.getFromDisk(key);
203
- if (l2Entry) {
204
- // Promote to L1 for faster future access
205
- this.l1.set(key, l2Entry);
206
- return l2Entry.response;
207
- }
208
- return null;
209
- }
210
- getFromDisk(key) {
211
- const filePath = this.getCacheFilePath(key);
212
- if (!existsSync(filePath))
213
- return null;
214
- try {
215
- // Read compressed file
216
- const compressed = readFileSync(filePath);
217
- // Decompress
218
- const decompressed = gunzipSync(compressed);
219
- const data = decompressed.toString("utf-8");
220
- const serialized = JSON.parse(data);
221
- // Check if expired
222
- const now = Date.now();
223
- if (now - serialized.timestamp > serialized.ttl) {
224
- // Delete expired cache file
225
- try {
226
- unlinkSync(filePath);
227
- }
228
- catch { }
229
- return null;
230
- }
231
- // Reconstruct the response with working body methods
232
- const response = {
233
- status: serialized.status,
234
- statusText: serialized.statusText,
235
- headers: serialized.headers,
236
- url: serialized.url,
237
- ok: serialized.ok,
238
- redirected: serialized.redirected,
239
- type: serialized.type || "default",
240
- body: reconstructBody(serialized.bodyData, serialized.bodyIsText),
241
- };
242
- return {
243
- response,
244
- timestamp: serialized.timestamp,
245
- ttl: serialized.ttl,
246
- };
247
- }
248
- catch (error) {
249
- // Invalid cache file, delete it
250
- try {
251
- unlinkSync(filePath);
252
- }
253
- catch { }
254
- return null;
255
- }
256
- }
257
- set(url, response, ttl, path, options) {
258
- const key = this.generateKey(url, path, options);
259
- const entry = {
260
- response,
261
- timestamp: Date.now(),
262
- ttl,
263
- };
264
- // L1: Store in memory (~0.001ms)
265
- this.l1.set(key, entry);
266
- // L2: Store on disk (async-ish, for persistence)
267
- this.setToDisk(key, entry);
268
- }
269
- async setToDisk(key, entry) {
270
- const filePath = this.getCacheFilePath(key);
271
- try {
272
- // Extract body text for serialization
273
- let bodyData;
274
- let bodyIsText = true;
275
- try {
276
- bodyData = await entry.response.body.text();
277
- }
278
- catch {
279
- // If text fails, try arrayBuffer and convert to base64
280
- try {
281
- const buffer = await entry.response.body.arrayBuffer();
282
- const bytes = new Uint8Array(buffer);
283
- let binary = "";
284
- for (let i = 0; i < bytes.length; i++) {
285
- binary += String.fromCharCode(bytes[i]);
286
- }
287
- bodyData = btoa(binary);
288
- bodyIsText = false;
289
- }
290
- catch {
291
- bodyData = "";
292
- }
293
- }
294
- // Create serializable entry
295
- const serialized = {
296
- status: entry.response.status,
297
- statusText: entry.response.statusText,
298
- headers: entry.response.headers,
299
- url: entry.response.url,
300
- ok: entry.response.ok,
301
- redirected: entry.response.redirected,
302
- type: entry.response.type || "default",
303
- bodyData,
304
- bodyIsText,
305
- timestamp: entry.timestamp,
306
- ttl: entry.ttl,
307
- };
308
- // Convert to JSON
309
- const json = JSON.stringify(serialized);
310
- // Compress with gzip
311
- const compressed = gzipSync(json);
312
- // Write compressed file
313
- writeFileSync(filePath, compressed);
314
- }
315
- catch (error) {
316
- // Silently fail if can't write cache
317
- console.warn("Failed to write cache:", error);
318
- }
319
- }
320
- clear(url) {
321
- // Clear L1
322
- this.l1.clear();
323
- // Clear L2
324
- if (url) {
325
- // Clear all cache files for this URL
326
- // This is approximate since we hash the keys
327
- // For now, just clear all to be safe
328
- this.clearAllDisk();
329
- }
330
- else {
331
- this.clearAllDisk();
332
- }
333
- }
334
- clearAllDisk() {
335
- try {
336
- const files = readdirSync(this.cacheDir);
337
- for (const file of files) {
338
- if (file.endsWith(".json.gz")) {
339
- unlinkSync(join(this.cacheDir, file));
340
- }
341
- }
342
- }
343
- catch (error) {
344
- // Silently fail
345
- }
346
- }
347
- stats() {
348
- const l1Stats = this.l1.stats();
349
- // L2 disk stats
350
- let diskSize = 0;
351
- let diskFiles = 0;
352
- let totalDiskBytes = 0;
353
- try {
354
- const files = readdirSync(this.cacheDir);
355
- const cacheFiles = files.filter((f) => f.endsWith(".json.gz"));
356
- diskFiles = cacheFiles.length;
357
- for (const file of cacheFiles) {
358
- const stats = statSync(join(this.cacheDir, file));
359
- totalDiskBytes += stats.size;
360
- }
361
- }
362
- catch { }
363
- return {
364
- l1: l1Stats,
365
- l2: {
366
- size: diskFiles,
367
- maxSize: this.maxDiskSize,
368
- cacheDir: this.cacheDir,
369
- totalSizeKB: (totalDiskBytes / 1024).toFixed(2),
370
- },
371
- };
372
- }
373
- }
374
- //# sourceMappingURL=cache.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../components/cache.ts"],"names":[],"mappings":"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"}