express-memorize 2.3.1 → 2.5.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.
@@ -5,6 +5,7 @@ const globToRegex_1 = require("./utils/globToRegex");
5
5
  const MemorizeEventType_1 = require("./domain/MemorizeEventType");
6
6
  Object.defineProperty(exports, "MemorizeEventType", { enumerable: true, get: function () { return MemorizeEventType_1.MemorizeEventType; } });
7
7
  const DEFAULT_TTL = 60000;
8
+ const DEFAULT_BATCH_SIZE = 1000;
8
9
  function estimateByteSize(value) {
9
10
  var _a;
10
11
  if (typeof value === 'string')
@@ -24,7 +25,7 @@ function estimateByteSize(value) {
24
25
  }
25
26
  function normalizeTtl(ttl) {
26
27
  if (ttl === Infinity) {
27
- return { expiresAt: null, timerTtl: null };
28
+ return { expiresAt: null };
28
29
  }
29
30
  const effectiveTtl = ttl !== null && ttl !== void 0 ? ttl : DEFAULT_TTL;
30
31
  if (typeof effectiveTtl !== 'number' || Number.isNaN(effectiveTtl) || !Number.isFinite(effectiveTtl)) {
@@ -33,7 +34,26 @@ function normalizeTtl(ttl) {
33
34
  if (effectiveTtl < 0) {
34
35
  throw new RangeError('ttl must be greater than or equal to 0');
35
36
  }
36
- return { expiresAt: Date.now() + effectiveTtl, timerTtl: effectiveTtl };
37
+ return { expiresAt: Date.now() + effectiveTtl };
38
+ }
39
+ function normalizeBatchSize(options) {
40
+ var _a;
41
+ const batchSize = (_a = options === null || options === void 0 ? void 0 : options.batchSize) !== null && _a !== void 0 ? _a : DEFAULT_BATCH_SIZE;
42
+ if (!Number.isInteger(batchSize) || batchSize <= 0) {
43
+ throw new RangeError('batchSize must be a positive integer');
44
+ }
45
+ return batchSize;
46
+ }
47
+ function normalizeByteLimit(name, value) {
48
+ if (value === undefined)
49
+ return undefined;
50
+ if (!Number.isFinite(value) || value < 0) {
51
+ throw new RangeError(`${name} must be greater than or equal to 0`);
52
+ }
53
+ return value;
54
+ }
55
+ function yieldToEventLoop() {
56
+ return new Promise((resolve) => setImmediate(resolve));
37
57
  }
38
58
  /**
39
59
  * Low-level in-memory key-value store with optional TTL, LRU eviction, and event emission.
@@ -42,10 +62,12 @@ function normalizeTtl(ttl) {
42
62
  * instead, which wraps this store in an Express middleware.
43
63
  */
44
64
  class MemorizeStore {
45
- constructor(_maxEntries) {
46
- this._maxEntries = _maxEntries;
65
+ constructor(maxEntriesOrOptions) {
66
+ var _a;
47
67
  this._store = new Map();
48
- this._timers = new Map();
68
+ this._expiryTimer = null;
69
+ this._nextExpiryAt = null;
70
+ this._nextExpiryKey = null;
49
71
  this._totalByteSize = 0;
50
72
  this._listeners = {
51
73
  [MemorizeEventType_1.MemorizeEventType.Set]: [],
@@ -54,6 +76,13 @@ class MemorizeStore {
54
76
  [MemorizeEventType_1.MemorizeEventType.Empty]: [],
55
77
  [MemorizeEventType_1.MemorizeEventType.Evict]: [],
56
78
  };
79
+ const options = typeof maxEntriesOrOptions === 'number'
80
+ ? { maxEntries: maxEntriesOrOptions }
81
+ : maxEntriesOrOptions !== null && maxEntriesOrOptions !== void 0 ? maxEntriesOrOptions : {};
82
+ this._maxEntries = options.maxEntries;
83
+ this._maxValueBytes = normalizeByteLimit('maxValueBytes', options.maxValueBytes);
84
+ this._maxTotalBytes = normalizeByteLimit('maxTotalBytes', options.maxTotalBytes);
85
+ this._sizeLimitAction = (_a = options.sizeLimitAction) !== null && _a !== void 0 ? _a : 'skip';
57
86
  }
58
87
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
59
88
  on(event, handler) {
@@ -72,31 +101,31 @@ class MemorizeStore {
72
101
  * Pass `Infinity` for no expiry.
73
102
  */
74
103
  set(key, entry, ttl) {
75
- if (this._maxEntries && !this._store.has(key) && this._store.size >= this._maxEntries) {
104
+ var _a;
105
+ const size = (_a = entry.size) !== null && _a !== void 0 ? _a : estimateByteSize(entry.body);
106
+ const existing = this._store.get(key);
107
+ if (!this._canStoreSize(size, this._maxValueBytes, 'maxValueBytes'))
108
+ return;
109
+ if (!this._canStoreSize(size, this._maxTotalBytes, 'maxTotalBytes'))
110
+ return;
111
+ const removed = existing ? this._removeStoredEntry(key) : null;
112
+ if (this._maxEntries && this._store.size >= this._maxEntries) {
76
113
  this._evictLRU();
77
114
  }
78
- if (this._timers.has(key)) {
79
- clearTimeout(this._timers.get(key));
80
- this._timers.delete(key);
81
- }
82
- const existing = this._store.get(key);
83
- if (existing) {
84
- this._totalByteSize -= existing.size;
115
+ while (this._maxTotalBytes !== undefined &&
116
+ this._totalByteSize + size > this._maxTotalBytes &&
117
+ this._store.size > 0) {
118
+ this._evictLRU();
85
119
  }
86
- const { expiresAt, timerTtl } = normalizeTtl(ttl);
87
- const size = estimateByteSize(entry.body);
120
+ const { expiresAt } = normalizeTtl(ttl);
88
121
  const stored = { ...entry, expiresAt, hits: 1, size };
89
122
  this._store.set(key, stored);
90
123
  this._totalByteSize += size;
91
124
  this._emit(MemorizeEventType_1.MemorizeEventType.Set, { type: MemorizeEventType_1.MemorizeEventType.Set, key, ...entry, expiresAt, size });
92
- if (timerTtl !== null) {
93
- const timer = setTimeout(() => {
94
- this._evict(key, MemorizeEventType_1.MemorizeEventType.Expire);
95
- }, timerTtl);
96
- if (typeof timer === 'object' && 'unref' in timer)
97
- timer.unref();
98
- this._timers.set(key, timer);
125
+ if (removed && key === this._nextExpiryKey) {
126
+ this._scheduleNextExpiry();
99
127
  }
128
+ this._scheduleExpiryFor(key, expiresAt);
100
129
  }
101
130
  /**
102
131
  * Returns the formatted {@link CacheInfo} for the given key, or `null` if the
@@ -120,13 +149,46 @@ class MemorizeStore {
120
149
  */
121
150
  getAll() {
122
151
  const result = {};
152
+ let expired = false;
123
153
  for (const [key, entry] of this._store) {
124
154
  if (entry.expiresAt && Date.now() >= entry.expiresAt) {
125
- this._evict(key, MemorizeEventType_1.MemorizeEventType.Expire);
155
+ expired = this._evictExpiredEntry(key) || expired;
126
156
  continue;
127
157
  }
128
158
  result[key] = this._format(key, entry);
129
159
  }
160
+ if (expired) {
161
+ this._scheduleNextExpiry();
162
+ }
163
+ return result;
164
+ }
165
+ /**
166
+ * Async variant of {@link getAll} that yields between batches to reduce
167
+ * event-loop blocking on large stores.
168
+ *
169
+ * @param options - Batch options.
170
+ * @returns All active cache entries keyed by cache key.
171
+ */
172
+ async getAllAsync(options) {
173
+ const batchSize = normalizeBatchSize(options);
174
+ const result = {};
175
+ let scanned = 0;
176
+ let expired = false;
177
+ for (const [key, entry] of this._store) {
178
+ if (entry.expiresAt && Date.now() >= entry.expiresAt) {
179
+ expired = this._evictExpiredEntry(key) || expired;
180
+ }
181
+ else {
182
+ result[key] = this._format(key, entry);
183
+ }
184
+ scanned++;
185
+ if (scanned % batchSize === 0) {
186
+ await yieldToEventLoop();
187
+ }
188
+ }
189
+ if (expired) {
190
+ this._scheduleNextExpiry();
191
+ }
130
192
  return result;
131
193
  }
132
194
  /**
@@ -164,6 +226,31 @@ class MemorizeStore {
164
226
  }
165
227
  return count;
166
228
  }
229
+ /**
230
+ * Async variant of {@link deleteMatching} that yields between batches to
231
+ * reduce event-loop blocking on large stores.
232
+ *
233
+ * @param pattern - Glob pattern to match against cache keys.
234
+ * @param options - Batch options.
235
+ * @returns The number of entries removed.
236
+ */
237
+ async deleteMatchingAsync(pattern, options) {
238
+ const regex = (0, globToRegex_1.globToRegex)(pattern);
239
+ const batchSize = normalizeBatchSize(options);
240
+ let count = 0;
241
+ let scanned = 0;
242
+ for (const key of this._store.keys()) {
243
+ if (regex.test(key) && this._store.has(key)) {
244
+ this._evict(key, MemorizeEventType_1.MemorizeEventType.Delete);
245
+ count++;
246
+ }
247
+ scanned++;
248
+ if (scanned % batchSize === 0) {
249
+ await yieldToEventLoop();
250
+ }
251
+ }
252
+ return count;
253
+ }
167
254
  /**
168
255
  * Removes all entries from the cache. Emits a {@link MemorizeEventType.Delete} event
169
256
  * for each entry.
@@ -173,6 +260,42 @@ class MemorizeStore {
173
260
  this._evict(key, MemorizeEventType_1.MemorizeEventType.Delete);
174
261
  }
175
262
  }
263
+ /**
264
+ * Async variant of {@link clear} that yields between batches to reduce
265
+ * event-loop blocking on large stores.
266
+ *
267
+ * @param options - Batch options.
268
+ * @returns The number of entries removed.
269
+ */
270
+ async clearAsync(options) {
271
+ const batchSize = normalizeBatchSize(options);
272
+ let count = 0;
273
+ while (this._store.size > 0) {
274
+ const keys = this._takeKeys(batchSize);
275
+ if (keys.length === 0)
276
+ break;
277
+ for (const key of keys) {
278
+ if (this._store.has(key)) {
279
+ this._evict(key, MemorizeEventType_1.MemorizeEventType.Delete);
280
+ count++;
281
+ }
282
+ }
283
+ if (this._store.size > 0) {
284
+ await yieldToEventLoop();
285
+ }
286
+ }
287
+ return count;
288
+ }
289
+ _takeKeys(limit) {
290
+ const keys = [];
291
+ for (const key of this._store.keys()) {
292
+ keys.push(key);
293
+ if (keys.length >= limit) {
294
+ break;
295
+ }
296
+ }
297
+ return keys;
298
+ }
176
299
  /**
177
300
  * Returns the number of active cache entries.
178
301
  */
@@ -191,10 +314,12 @@ class MemorizeStore {
191
314
  * Returns aggregate cache statistics.
192
315
  */
193
316
  getStats() {
194
- var _a;
317
+ var _a, _b, _c;
195
318
  return {
196
319
  entries: this._store.size,
197
320
  maxEntries: (_a = this._maxEntries) !== null && _a !== void 0 ? _a : null,
321
+ maxValueBytes: (_b = this._maxValueBytes) !== null && _b !== void 0 ? _b : null,
322
+ maxTotalBytes: (_c = this._maxTotalBytes) !== null && _c !== void 0 ? _c : null,
198
323
  byteSize: this._totalByteSize,
199
324
  };
200
325
  }
@@ -226,20 +351,108 @@ class MemorizeStore {
226
351
  this._evict(firstKey, MemorizeEventType_1.MemorizeEventType.Evict);
227
352
  }
228
353
  }
229
- _evict(key, reason) {
230
- if (this._timers.has(key)) {
231
- clearTimeout(this._timers.get(key));
232
- this._timers.delete(key);
354
+ _canStoreSize(size, limit, limitName) {
355
+ if (limit === undefined || size <= limit)
356
+ return true;
357
+ if (this._sizeLimitAction === 'throw') {
358
+ throw new RangeError(`${limitName} exceeded`);
233
359
  }
360
+ return false;
361
+ }
362
+ _removeStoredEntry(key) {
234
363
  const entry = this._store.get(key);
235
- if (entry) {
236
- this._totalByteSize = Math.max(0, this._totalByteSize - entry.size);
237
- }
364
+ if (!entry)
365
+ return null;
366
+ this._totalByteSize = Math.max(0, this._totalByteSize - entry.size);
238
367
  this._store.delete(key);
368
+ return entry;
369
+ }
370
+ _evict(key, reason) {
371
+ const removed = this._removeStoredEntry(key);
239
372
  this._emit(reason, { type: reason, key });
373
+ if (removed && this._store.size === 0) {
374
+ this._emit(MemorizeEventType_1.MemorizeEventType.Empty, { type: MemorizeEventType_1.MemorizeEventType.Empty });
375
+ }
376
+ if (removed) {
377
+ this._scheduleAfterRemoval(removed, key);
378
+ }
379
+ }
380
+ _scheduleAfterRemoval(_removed, key) {
381
+ if (key === this._nextExpiryKey) {
382
+ this._scheduleNextExpiry();
383
+ }
384
+ }
385
+ _scheduleNextExpiry() {
386
+ var _a, _b;
387
+ const next = this._findNextExpiry();
388
+ this._scheduleExpiryAt((_a = next === null || next === void 0 ? void 0 : next.key) !== null && _a !== void 0 ? _a : null, (_b = next === null || next === void 0 ? void 0 : next.expiresAt) !== null && _b !== void 0 ? _b : null);
389
+ }
390
+ _scheduleExpiryFor(key, expiresAt) {
391
+ if (expiresAt === null)
392
+ return;
393
+ if (this._nextExpiryAt !== null && expiresAt >= this._nextExpiryAt)
394
+ return;
395
+ this._scheduleExpiryAt(key, expiresAt);
396
+ }
397
+ _scheduleExpiryAt(nextExpiryKey, nextExpiryAt) {
398
+ if (nextExpiryKey === this._nextExpiryKey && nextExpiryAt === this._nextExpiryAt)
399
+ return;
400
+ this._clearExpiryTimer();
401
+ this._nextExpiryKey = nextExpiryKey;
402
+ this._nextExpiryAt = nextExpiryAt;
403
+ if (nextExpiryAt === null)
404
+ return;
405
+ const delay = Math.max(0, nextExpiryAt - Date.now());
406
+ const timer = setTimeout(() => {
407
+ this._expiryTimer = null;
408
+ this._nextExpiryKey = null;
409
+ this._nextExpiryAt = null;
410
+ this._evictExpiredEntries();
411
+ }, delay);
412
+ if (typeof timer === 'object' && 'unref' in timer)
413
+ timer.unref();
414
+ this._expiryTimer = timer;
415
+ }
416
+ _clearExpiryTimer() {
417
+ if (!this._expiryTimer)
418
+ return;
419
+ clearTimeout(this._expiryTimer);
420
+ this._expiryTimer = null;
421
+ }
422
+ _findNextExpiry() {
423
+ let nextKey = null;
424
+ let nextExpiryAt = null;
425
+ for (const [key, entry] of this._store) {
426
+ if (entry.expiresAt === null)
427
+ continue;
428
+ if (nextExpiryAt === null || entry.expiresAt < nextExpiryAt) {
429
+ nextKey = key;
430
+ nextExpiryAt = entry.expiresAt;
431
+ }
432
+ }
433
+ return nextKey === null || nextExpiryAt === null ? null : { key: nextKey, expiresAt: nextExpiryAt };
434
+ }
435
+ _evictExpiredEntries() {
436
+ const now = Date.now();
437
+ let expired = false;
438
+ for (const [key, entry] of [...this._store]) {
439
+ if (entry.expiresAt !== null && now >= entry.expiresAt) {
440
+ expired = this._evictExpiredEntry(key) || expired;
441
+ }
442
+ }
443
+ if (expired) {
444
+ this._scheduleNextExpiry();
445
+ }
446
+ }
447
+ _evictExpiredEntry(key) {
448
+ const removed = this._removeStoredEntry(key);
449
+ if (!removed)
450
+ return false;
451
+ this._emit(MemorizeEventType_1.MemorizeEventType.Expire, { type: MemorizeEventType_1.MemorizeEventType.Expire, key });
240
452
  if (this._store.size === 0) {
241
453
  this._emit(MemorizeEventType_1.MemorizeEventType.Empty, { type: MemorizeEventType_1.MemorizeEventType.Empty });
242
454
  }
455
+ return true;
243
456
  }
244
457
  _emit(event, payload) {
245
458
  for (const handler of this._listeners[event]) {
@@ -1 +1 @@
1
- {"version":3,"file":"MemorizeStore.js","sourceRoot":"","sources":["../src/MemorizeStore.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MemorizeStore.js","sourceRoot":"","sources":["../src/MemorizeStore.ts"],"names":[],"mappings":";;;AAAA,qDAAkD;AAIlD,kEAA+D;AAoBtD,kGApBA,qCAAiB,OAoBA;AAqB1B,MAAM,WAAW,GAAG,KAAM,CAAC;AAC3B,MAAM,kBAAkB,GAAG,IAAK,CAAC;AAEjC,SAAS,gBAAgB,CAAC,KAAc;;IACtC,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IAC/D,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,UAAU,CAAC;IACpD,IAAI,KAAK,YAAY,WAAW;QAAE,OAAO,KAAK,CAAC,UAAU,CAAC;IAC1D,IAAI,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC;QAAE,OAAQ,KAAyB,CAAC,UAAU,CAAC;IAC5E,IAAI,CAAC;QACH,OAAO,MAAM,CAAC,UAAU,CAAC,MAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,mCAAI,EAAE,CAAC,CAAC;IACxD,CAAC;IAAC,WAAM,CAAC;QACP,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,GAAmB;IACvC,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;QACrB,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IAC7B,CAAC;IAED,MAAM,YAAY,GAAG,GAAG,aAAH,GAAG,cAAH,GAAG,GAAI,WAAW,CAAC;IAExC,IAAI,OAAO,YAAY,KAAK,QAAQ,IAAI,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;QACrG,MAAM,IAAI,SAAS,CAAC,yCAAyC,CAAC,CAAC;IACjE,CAAC;IAED,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;QACrB,MAAM,IAAI,UAAU,CAAC,wCAAwC,CAAC,CAAC;IACjE,CAAC;IAED,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,YAAY,EAAE,CAAC;AAClD,CAAC;AAED,SAAS,kBAAkB,CAAC,OAA8B;;IACxD,MAAM,SAAS,GAAG,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,SAAS,mCAAI,kBAAkB,CAAC;IAE3D,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;QACnD,MAAM,IAAI,UAAU,CAAC,sCAAsC,CAAC,CAAC;IAC/D,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAY,EAAE,KAAyB;IACjE,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAE1C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QACzC,MAAM,IAAI,UAAU,CAAC,GAAG,IAAI,qCAAqC,CAAC,CAAC;IACrE,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,gBAAgB;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;AACzD,CAAC;AAED;;;;;GAKG;AACH,MAAa,aAAa;IAmBxB,YAAY,mBAAmD;;QAlBvD,WAAM,GAAG,IAAI,GAAG,EAAsB,CAAC;QACvC,iBAAY,GAAyC,IAAI,CAAC;QAC1D,kBAAa,GAAkB,IAAI,CAAC;QACpC,mBAAc,GAAkB,IAAI,CAAC;QACrC,mBAAc,GAAG,CAAC,CAAC;QACnB,eAAU,GAAgB;YAChC,CAAC,qCAAiB,CAAC,GAAG,CAAC,EAAK,EAAE;YAC9B,CAAC,qCAAiB,CAAC,MAAM,CAAC,EAAE,EAAE;YAC9B,CAAC,qCAAiB,CAAC,MAAM,CAAC,EAAE,EAAE;YAC9B,CAAC,qCAAiB,CAAC,KAAK,CAAC,EAAG,EAAE;YAC9B,CAAC,qCAAiB,CAAC,KAAK,CAAC,EAAG,EAAE;SAC/B,CAAC;QAQA,MAAM,OAAO,GAAG,OAAO,mBAAmB,KAAK,QAAQ;YACrD,CAAC,CAAC,EAAE,UAAU,EAAE,mBAAmB,EAAE;YACrC,CAAC,CAAC,mBAAmB,aAAnB,mBAAmB,cAAnB,mBAAmB,GAAI,EAAE,CAAC;QAE9B,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;QACtC,IAAI,CAAC,cAAc,GAAG,kBAAkB,CAAC,eAAe,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;QACjF,IAAI,CAAC,cAAc,GAAG,kBAAkB,CAAC,eAAe,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;QACjF,IAAI,CAAC,gBAAgB,GAAG,MAAA,OAAO,CAAC,eAAe,mCAAI,MAAM,CAAC;IAC5D,CAAC;IAmBD,8DAA8D;IAC9D,EAAE,CAAC,KAAwB,EAAE,OAAyB;QACpD,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACvC,CAAC;IAED;;;;;;;;;;;OAWG;IACH,GAAG,CAAC,GAAW,EAAE,KAAsB,EAAE,GAAmB;;QAC1D,MAAM,IAAI,GAAG,MAAA,KAAK,CAAC,IAAI,mCAAI,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACxD,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAEtC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,EAAE,eAAe,CAAC;YAAE,OAAO;QAC5E,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,EAAE,eAAe,CAAC;YAAE,OAAO;QAE5E,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAE/D,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YAC7D,IAAI,CAAC,SAAS,EAAE,CAAC;QACnB,CAAC;QAED,OACE,IAAI,CAAC,cAAc,KAAK,SAAS;YACjC,IAAI,CAAC,cAAc,GAAG,IAAI,GAAG,IAAI,CAAC,cAAc;YAChD,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,EACpB,CAAC;YACD,IAAI,CAAC,SAAS,EAAE,CAAC;QACnB,CAAC;QAED,MAAM,EAAE,SAAS,EAAE,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;QACxC,MAAM,MAAM,GAAe,EAAE,GAAG,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC;QAClE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAC7B,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC;QAE5B,IAAI,CAAC,KAAK,CAAC,qCAAiB,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,qCAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAEnG,IAAI,OAAO,IAAI,GAAG,KAAK,IAAI,CAAC,cAAc,EAAE,CAAC;YAC3C,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC7B,CAAC;QACD,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IAC1C,CAAC;IAED;;;;;OAKG;IACH,GAAG,CAAC,GAAW;QACb,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACnC,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QAExB,IAAI,KAAK,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;YACrD,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,qCAAiB,CAAC,MAAM,CAAC,CAAC;YAC3C,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAClC,CAAC;IAED;;;OAGG;IACH,MAAM;QACJ,MAAM,MAAM,GAA8B,EAAE,CAAC;QAC7C,IAAI,OAAO,GAAG,KAAK,CAAC;QAEpB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACvC,IAAI,KAAK,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;gBACrD,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC;gBAClD,SAAS;YACX,CAAC;YACD,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACzC,CAAC;QAED,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC7B,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,WAAW,CAAC,OAA8B;QAC9C,MAAM,SAAS,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;QAC9C,MAAM,MAAM,GAA8B,EAAE,CAAC;QAC7C,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,IAAI,OAAO,GAAG,KAAK,CAAC;QAEpB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACvC,IAAI,KAAK,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;gBACrD,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC;YACpD,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YACzC,CAAC;YAED,OAAO,EAAE,CAAC;YACV,IAAI,OAAO,GAAG,SAAS,KAAK,CAAC,EAAE,CAAC;gBAC9B,MAAM,gBAAgB,EAAE,CAAC;YAC3B,CAAC;QACH,CAAC;QAED,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC7B,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,GAAW;QAChB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC;QACxC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,qCAAiB,CAAC,MAAM,CAAC,CAAC;QAC3C,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;;;;;;;OAWG;IACH,cAAc,CAAC,OAAe;QAC5B,MAAM,KAAK,GAAG,IAAA,yBAAW,EAAC,OAAO,CAAC,CAAC;QACnC,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,MAAM,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;YAC1C,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBACpB,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,qCAAiB,CAAC,MAAM,CAAC,CAAC;gBAC3C,KAAK,EAAE,CAAC;YACV,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,mBAAmB,CAAC,OAAe,EAAE,OAA8B;QACvE,MAAM,KAAK,GAAG,IAAA,yBAAW,EAAC,OAAO,CAAC,CAAC;QACnC,MAAM,SAAS,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;QAC9C,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,OAAO,GAAG,CAAC,CAAC;QAEhB,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;YACrC,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC5C,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,qCAAiB,CAAC,MAAM,CAAC,CAAC;gBAC3C,KAAK,EAAE,CAAC;YACV,CAAC;YAED,OAAO,EAAE,CAAC;YACV,IAAI,OAAO,GAAG,SAAS,KAAK,CAAC,EAAE,CAAC;gBAC9B,MAAM,gBAAgB,EAAE,CAAC;YAC3B,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;OAGG;IACH,KAAK;QACH,KAAK,MAAM,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;YAC1C,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,qCAAiB,CAAC,MAAM,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,UAAU,CAAC,OAA8B;QAC7C,MAAM,SAAS,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;QAC9C,IAAI,KAAK,GAAG,CAAC,CAAC;QAEd,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;YACvC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;gBAAE,MAAM;YAE7B,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;gBACvB,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;oBACzB,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,qCAAiB,CAAC,MAAM,CAAC,CAAC;oBAC3C,KAAK,EAAE,CAAC;gBACV,CAAC;YACH,CAAC;YAED,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;gBACzB,MAAM,gBAAgB,EAAE,CAAC;YAC3B,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,SAAS,CAAC,KAAa;QAC7B,MAAM,IAAI,GAAa,EAAE,CAAC;QAE1B,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;YACrC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACf,IAAI,IAAI,CAAC,MAAM,IAAI,KAAK,EAAE,CAAC;gBACzB,MAAM;YACR,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,IAAI;QACF,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;IAC1B,CAAC;IAED;;;;OAIG;IACH,QAAQ;QACN,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,QAAQ;;QACN,OAAO;YACL,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;YACzB,UAAU,EAAE,MAAA,IAAI,CAAC,WAAW,mCAAI,IAAI;YACpC,aAAa,EAAE,MAAA,IAAI,CAAC,cAAc,mCAAI,IAAI;YAC1C,aAAa,EAAE,MAAA,IAAI,CAAC,cAAc,mCAAI,IAAI;YAC1C,QAAQ,EAAE,IAAI,CAAC,cAAc;SAC9B,CAAC;IACJ,CAAC;IAED;;;;;;;OAOG;IACH,MAAM,CAAC,GAAW;QAChB,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACnC,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QAExB,IAAI,KAAK,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;YACrD,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,qCAAiB,CAAC,MAAM,CAAC,CAAC;YAC3C,OAAO,IAAI,CAAC;QACd,CAAC;QAED,uDAAuD;QACvD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACxB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAE5B,KAAK,CAAC,IAAI,EAAE,CAAC;QACb,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,SAAS;QACf,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAA2B,CAAC;QACvE,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,qCAAiB,CAAC,KAAK,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IAEO,aAAa,CAAC,IAAY,EAAE,KAAyB,EAAE,SAAiB;QAC9E,IAAI,KAAK,KAAK,SAAS,IAAI,IAAI,IAAI,KAAK;YAAE,OAAO,IAAI,CAAC;QAEtD,IAAI,IAAI,CAAC,gBAAgB,KAAK,OAAO,EAAE,CAAC;YACtC,MAAM,IAAI,UAAU,CAAC,GAAG,SAAS,WAAW,CAAC,CAAC;QAChD,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,kBAAkB,CAAC,GAAW;QACpC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACnC,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QACxB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;QACpE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACxB,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,MAAM,CAAC,GAAW,EAAE,MAAqF;QAC/G,MAAM,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC;QAC7C,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QAC1C,IAAI,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACtC,IAAI,CAAC,KAAK,CAAC,qCAAiB,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,qCAAiB,CAAC,KAAK,EAAE,CAAC,CAAC;QACzE,CAAC;QACD,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,CAAC,qBAAqB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IAEO,qBAAqB,CAAC,QAAoB,EAAE,GAAW;QAC7D,IAAI,GAAG,KAAK,IAAI,CAAC,cAAc,EAAE,CAAC;YAChC,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC7B,CAAC;IACH,CAAC;IAEO,mBAAmB;;QACzB,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QACpC,IAAI,CAAC,iBAAiB,CAAC,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,GAAG,mCAAI,IAAI,EAAE,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,SAAS,mCAAI,IAAI,CAAC,CAAC;IACrE,CAAC;IAEO,kBAAkB,CAAC,GAAW,EAAE,SAAwB;QAC9D,IAAI,SAAS,KAAK,IAAI;YAAE,OAAO;QAC/B,IAAI,IAAI,CAAC,aAAa,KAAK,IAAI,IAAI,SAAS,IAAI,IAAI,CAAC,aAAa;YAAE,OAAO;QAC3E,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IACzC,CAAC;IAEO,iBAAiB,CAAC,aAA4B,EAAE,YAA2B;QACjF,IAAI,aAAa,KAAK,IAAI,CAAC,cAAc,IAAI,YAAY,KAAK,IAAI,CAAC,aAAa;YAAE,OAAO;QAEzF,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC;QACpC,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC;QAElC,IAAI,YAAY,KAAK,IAAI;YAAE,OAAO;QAElC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QACrD,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC5B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YACzB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;YAC3B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;YAC1B,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC9B,CAAC,EAAE,KAAK,CAAC,CAAC;QAEV,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,IAAI,KAAK;YAAE,KAAK,CAAC,KAAK,EAAE,CAAC;QACjE,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;IAC5B,CAAC;IAEO,iBAAiB;QACvB,IAAI,CAAC,IAAI,CAAC,YAAY;YAAE,OAAO;QAC/B,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAChC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;IAC3B,CAAC;IAEO,eAAe;QACrB,IAAI,OAAO,GAAkB,IAAI,CAAC;QAClC,IAAI,YAAY,GAAkB,IAAI,CAAC;QAEvC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACvC,IAAI,KAAK,CAAC,SAAS,KAAK,IAAI;gBAAE,SAAS;YACvC,IAAI,YAAY,KAAK,IAAI,IAAI,KAAK,CAAC,SAAS,GAAG,YAAY,EAAE,CAAC;gBAC5D,OAAO,GAAG,GAAG,CAAC;gBACd,YAAY,GAAG,KAAK,CAAC,SAAS,CAAC;YACjC,CAAC;QACH,CAAC;QAED,OAAO,OAAO,KAAK,IAAI,IAAI,YAAY,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC;IACtG,CAAC;IAEO,oBAAoB;QAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,OAAO,GAAG,KAAK,CAAC;QAEpB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YAC5C,IAAI,KAAK,CAAC,SAAS,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;gBACvD,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC;YACpD,CAAC;QACH,CAAC;QAED,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC7B,CAAC;IACH,CAAC;IAEO,kBAAkB,CAAC,GAAW;QACpC,MAAM,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC;QAC7C,IAAI,CAAC,OAAO;YAAE,OAAO,KAAK,CAAC;QAE3B,IAAI,CAAC,KAAK,CAAC,qCAAiB,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,qCAAiB,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QAC9E,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YAC3B,IAAI,CAAC,KAAK,CAAC,qCAAiB,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,qCAAiB,CAAC,KAAK,EAAE,CAAC,CAAC;QACzE,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,KAAK,CAAC,KAAwB,EAAE,OAAsB;QAC5D,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAsC,EAAE,CAAC;YAClF,OAAO,CAAC,OAAO,CAAC,CAAC;QACnB,CAAC;IACH,CAAC;IAEO,OAAO,CAAC,GAAW,EAAE,KAAiB;QAC5C,OAAO;YACL,GAAG;YACH,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,YAAY,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI;SACjF,CAAC;IACJ,CAAC;CACF;AApeD,sCAoeC"}
@@ -0,0 +1,25 @@
1
+ import type { SerializerOption } from './serializer';
2
+ type BuiltInSerializerOption = 'json' | 'v8' | 'auto';
3
+ export type AsyncSerializerMode = 'yield' | 'worker';
4
+ export declare class WorkerAsyncSerializer {
5
+ private readonly _serializer;
6
+ private _nextId;
7
+ private readonly _slots;
8
+ private _WorkerCtor;
9
+ readonly workerCount: number;
10
+ constructor(_serializer: BuiltInSerializerOption, workers?: number | 'auto');
11
+ serialize(value: unknown): Promise<string | Buffer>;
12
+ deserialize(data: string | Buffer): Promise<unknown>;
13
+ private _request;
14
+ private _getSlot;
15
+ private _createSlot;
16
+ private _getWorkerConstructor;
17
+ private _handleMessage;
18
+ private _rejectAll;
19
+ private _scheduleIdleShutdown;
20
+ private _clearIdleTimer;
21
+ private _removeSlot;
22
+ }
23
+ export declare function createWorkerAsyncSerializer(option: SerializerOption | undefined, workers?: number | 'auto'): WorkerAsyncSerializer | null;
24
+ export {};
25
+ //# sourceMappingURL=asyncSerializer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"asyncSerializer.d.ts","sourceRoot":"","sources":["../src/asyncSerializer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAErD,KAAK,uBAAuB,GAAG,MAAM,GAAG,IAAI,GAAG,MAAM,CAAC;AAiCtD,MAAM,MAAM,mBAAmB,GAAG,OAAO,GAAG,QAAQ,CAAC;AAyErD,qBAAa,qBAAqB;IAO9B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAN9B,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoB;IAC3C,OAAO,CAAC,WAAW,CAAuC;IAC1D,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;gBAGV,WAAW,EAAE,uBAAuB,EACrD,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM;IAK3B,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;IAKnD,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIpD,OAAO,CAAC,QAAQ;IAiBhB,OAAO,CAAC,QAAQ;IAWhB,OAAO,CAAC,WAAW;IAUnB,OAAO,CAAC,qBAAqB;IAiB7B,OAAO,CAAC,cAAc;IAiBtB,OAAO,CAAC,UAAU;IASlB,OAAO,CAAC,qBAAqB;IAa7B,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,WAAW;CAKpB;AAED,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,gBAAgB,GAAG,SAAS,EACpC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GACxB,qBAAqB,GAAG,IAAI,CAG9B"}
@@ -0,0 +1,194 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WorkerAsyncSerializer = void 0;
4
+ exports.createWorkerAsyncSerializer = createWorkerAsyncSerializer;
5
+ const WORKER_SOURCE = `
6
+ const { parentPort } = require('node:worker_threads');
7
+ const v8 = require('node:v8');
8
+
9
+ function normalizeBuffer(data) {
10
+ return Buffer.isBuffer(data) ? data : Buffer.from(data);
11
+ }
12
+
13
+ function serialize(serializer, value) {
14
+ if (serializer === 'json') return JSON.stringify(value);
15
+ return v8.serialize(value);
16
+ }
17
+
18
+ function deserialize(serializer, data) {
19
+ if (serializer === 'json') {
20
+ return JSON.parse(typeof data === 'string' ? data : normalizeBuffer(data).toString());
21
+ }
22
+ return v8.deserialize(normalizeBuffer(data));
23
+ }
24
+
25
+ parentPort.on('message', (message) => {
26
+ try {
27
+ const result = message.action === 'serialize'
28
+ ? serialize(message.serializer, message.value)
29
+ : deserialize(message.serializer, message.data);
30
+ parentPort.postMessage({ id: message.id, result });
31
+ } catch (error) {
32
+ parentPort.postMessage({
33
+ id: message.id,
34
+ error: {
35
+ name: error && error.name,
36
+ message: error && error.message ? error.message : String(error),
37
+ },
38
+ });
39
+ }
40
+ });
41
+ `;
42
+ function isWorkerSerializer(option) {
43
+ return option === undefined || option === 'json' || option === 'v8' || option === 'auto';
44
+ }
45
+ function getAvailableParallelism() {
46
+ var _a, _b;
47
+ try {
48
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
49
+ const os = require('node:os');
50
+ return (_b = (_a = os.availableParallelism) === null || _a === void 0 ? void 0 : _a.call(os)) !== null && _b !== void 0 ? _b : os.cpus().length;
51
+ }
52
+ catch (_c) {
53
+ return 1;
54
+ }
55
+ }
56
+ function normalizeWorkerCount(workers) {
57
+ const available = Math.max(1, getAvailableParallelism());
58
+ const auto = Math.max(1, Math.min(4, available - 1 || 1));
59
+ const requested = workers === undefined || workers === 'auto' ? auto : workers;
60
+ if (!Number.isInteger(requested) || requested <= 0) {
61
+ throw new RangeError('asyncSerializerWorkers must be a positive integer or "auto"');
62
+ }
63
+ return Math.max(1, Math.min(requested, available, 8));
64
+ }
65
+ function normalizeWorkerResult(result) {
66
+ if (typeof result === 'string')
67
+ return result;
68
+ if (Buffer.isBuffer(result))
69
+ return result;
70
+ if (result instanceof Uint8Array)
71
+ return Buffer.from(result);
72
+ throw new TypeError('worker serializer returned an unsupported value');
73
+ }
74
+ class WorkerAsyncSerializer {
75
+ constructor(_serializer, workers) {
76
+ this._serializer = _serializer;
77
+ this._nextId = 1;
78
+ this._slots = [];
79
+ this.workerCount = normalizeWorkerCount(workers);
80
+ }
81
+ serialize(value) {
82
+ return this._request({ id: 0, action: 'serialize', serializer: this._serializer, value })
83
+ .then(normalizeWorkerResult);
84
+ }
85
+ deserialize(data) {
86
+ return this._request({ id: 0, action: 'deserialize', serializer: this._serializer, data });
87
+ }
88
+ _request(message) {
89
+ const id = this._nextId++;
90
+ const request = { ...message, id };
91
+ return new Promise((resolve, reject) => {
92
+ const slot = this._getSlot();
93
+ this._clearIdleTimer(slot);
94
+ slot.pending.set(id, { resolve, reject });
95
+ try {
96
+ slot.worker.postMessage(request);
97
+ }
98
+ catch (error) {
99
+ slot.pending.delete(id);
100
+ reject(error instanceof Error ? error : new Error(String(error)));
101
+ }
102
+ });
103
+ }
104
+ _getSlot() {
105
+ const available = this._slots.find((slot) => slot.pending.size === 0);
106
+ if (available)
107
+ return available;
108
+ if (this._slots.length < this.workerCount) {
109
+ return this._createSlot();
110
+ }
111
+ return this._slots.reduce((best, slot) => slot.pending.size < best.pending.size ? slot : best);
112
+ }
113
+ _createSlot() {
114
+ var _a;
115
+ const worker = new (this._getWorkerConstructor())(WORKER_SOURCE, { eval: true });
116
+ (_a = worker.unref) === null || _a === void 0 ? void 0 : _a.call(worker);
117
+ const slot = { worker, pending: new Map(), idleTimer: null };
118
+ worker.on('message', (message) => this._handleMessage(slot, message));
119
+ worker.on('error', (error) => this._rejectAll(slot, error));
120
+ this._slots.push(slot);
121
+ return slot;
122
+ }
123
+ _getWorkerConstructor() {
124
+ if (this._WorkerCtor !== undefined) {
125
+ if (!this._WorkerCtor)
126
+ throw new Error('node:worker_threads is not available');
127
+ return this._WorkerCtor;
128
+ }
129
+ try {
130
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
131
+ const { Worker } = require('node:worker_threads');
132
+ this._WorkerCtor = Worker;
133
+ return Worker;
134
+ }
135
+ catch (_a) {
136
+ this._WorkerCtor = null;
137
+ throw new Error('node:worker_threads is not available');
138
+ }
139
+ }
140
+ _handleMessage(slot, message) {
141
+ var _a, _b;
142
+ const pending = slot.pending.get(message.id);
143
+ if (!pending)
144
+ return;
145
+ slot.pending.delete(message.id);
146
+ if ('error' in message) {
147
+ const error = new Error((_a = message.error.message) !== null && _a !== void 0 ? _a : 'worker serializer failed');
148
+ error.name = (_b = message.error.name) !== null && _b !== void 0 ? _b : 'Error';
149
+ pending.reject(error);
150
+ this._scheduleIdleShutdown(slot);
151
+ return;
152
+ }
153
+ pending.resolve(message.result);
154
+ this._scheduleIdleShutdown(slot);
155
+ }
156
+ _rejectAll(slot, error) {
157
+ this._clearIdleTimer(slot);
158
+ for (const [id, pending] of slot.pending) {
159
+ slot.pending.delete(id);
160
+ pending.reject(error);
161
+ }
162
+ this._removeSlot(slot);
163
+ }
164
+ _scheduleIdleShutdown(slot) {
165
+ if (slot.pending.size > 0)
166
+ return;
167
+ slot.idleTimer = setTimeout(() => {
168
+ this._removeSlot(slot);
169
+ void slot.worker.terminate();
170
+ }, 50);
171
+ if (typeof slot.idleTimer === 'object' && 'unref' in slot.idleTimer) {
172
+ slot.idleTimer.unref();
173
+ }
174
+ }
175
+ _clearIdleTimer(slot) {
176
+ if (!slot.idleTimer)
177
+ return;
178
+ clearTimeout(slot.idleTimer);
179
+ slot.idleTimer = null;
180
+ }
181
+ _removeSlot(slot) {
182
+ this._clearIdleTimer(slot);
183
+ const index = this._slots.indexOf(slot);
184
+ if (index !== -1)
185
+ this._slots.splice(index, 1);
186
+ }
187
+ }
188
+ exports.WorkerAsyncSerializer = WorkerAsyncSerializer;
189
+ function createWorkerAsyncSerializer(option, workers) {
190
+ if (!isWorkerSerializer(option))
191
+ return null;
192
+ return new WorkerAsyncSerializer(option !== null && option !== void 0 ? option : 'auto', workers);
193
+ }
194
+ //# sourceMappingURL=asyncSerializer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"asyncSerializer.js","sourceRoot":"","sources":["../src/asyncSerializer.ts"],"names":[],"mappings":"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"}