express-memorize 2.3.0 → 2.4.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,28 @@ 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
+ const keys = [...this._store.keys()];
273
+ let count = 0;
274
+ for (let i = 0; i < keys.length; i++) {
275
+ if (this._store.has(keys[i])) {
276
+ this._evict(keys[i], MemorizeEventType_1.MemorizeEventType.Delete);
277
+ count++;
278
+ }
279
+ if ((i + 1) % batchSize === 0 && i + 1 < keys.length) {
280
+ await yieldToEventLoop();
281
+ }
282
+ }
283
+ return count;
284
+ }
176
285
  /**
177
286
  * Returns the number of active cache entries.
178
287
  */
@@ -191,10 +300,12 @@ class MemorizeStore {
191
300
  * Returns aggregate cache statistics.
192
301
  */
193
302
  getStats() {
194
- var _a;
303
+ var _a, _b, _c;
195
304
  return {
196
305
  entries: this._store.size,
197
306
  maxEntries: (_a = this._maxEntries) !== null && _a !== void 0 ? _a : null,
307
+ maxValueBytes: (_b = this._maxValueBytes) !== null && _b !== void 0 ? _b : null,
308
+ maxTotalBytes: (_c = this._maxTotalBytes) !== null && _c !== void 0 ? _c : null,
198
309
  byteSize: this._totalByteSize,
199
310
  };
200
311
  }
@@ -226,20 +337,108 @@ class MemorizeStore {
226
337
  this._evict(firstKey, MemorizeEventType_1.MemorizeEventType.Evict);
227
338
  }
228
339
  }
229
- _evict(key, reason) {
230
- if (this._timers.has(key)) {
231
- clearTimeout(this._timers.get(key));
232
- this._timers.delete(key);
340
+ _canStoreSize(size, limit, limitName) {
341
+ if (limit === undefined || size <= limit)
342
+ return true;
343
+ if (this._sizeLimitAction === 'throw') {
344
+ throw new RangeError(`${limitName} exceeded`);
233
345
  }
346
+ return false;
347
+ }
348
+ _removeStoredEntry(key) {
234
349
  const entry = this._store.get(key);
235
- if (entry) {
236
- this._totalByteSize = Math.max(0, this._totalByteSize - entry.size);
237
- }
350
+ if (!entry)
351
+ return null;
352
+ this._totalByteSize = Math.max(0, this._totalByteSize - entry.size);
238
353
  this._store.delete(key);
354
+ return entry;
355
+ }
356
+ _evict(key, reason) {
357
+ const removed = this._removeStoredEntry(key);
239
358
  this._emit(reason, { type: reason, key });
359
+ if (removed && this._store.size === 0) {
360
+ this._emit(MemorizeEventType_1.MemorizeEventType.Empty, { type: MemorizeEventType_1.MemorizeEventType.Empty });
361
+ }
362
+ if (removed) {
363
+ this._scheduleAfterRemoval(removed, key);
364
+ }
365
+ }
366
+ _scheduleAfterRemoval(_removed, key) {
367
+ if (key === this._nextExpiryKey) {
368
+ this._scheduleNextExpiry();
369
+ }
370
+ }
371
+ _scheduleNextExpiry() {
372
+ var _a, _b;
373
+ const next = this._findNextExpiry();
374
+ 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);
375
+ }
376
+ _scheduleExpiryFor(key, expiresAt) {
377
+ if (expiresAt === null)
378
+ return;
379
+ if (this._nextExpiryAt !== null && expiresAt >= this._nextExpiryAt)
380
+ return;
381
+ this._scheduleExpiryAt(key, expiresAt);
382
+ }
383
+ _scheduleExpiryAt(nextExpiryKey, nextExpiryAt) {
384
+ if (nextExpiryKey === this._nextExpiryKey && nextExpiryAt === this._nextExpiryAt)
385
+ return;
386
+ this._clearExpiryTimer();
387
+ this._nextExpiryKey = nextExpiryKey;
388
+ this._nextExpiryAt = nextExpiryAt;
389
+ if (nextExpiryAt === null)
390
+ return;
391
+ const delay = Math.max(0, nextExpiryAt - Date.now());
392
+ const timer = setTimeout(() => {
393
+ this._expiryTimer = null;
394
+ this._nextExpiryKey = null;
395
+ this._nextExpiryAt = null;
396
+ this._evictExpiredEntries();
397
+ }, delay);
398
+ if (typeof timer === 'object' && 'unref' in timer)
399
+ timer.unref();
400
+ this._expiryTimer = timer;
401
+ }
402
+ _clearExpiryTimer() {
403
+ if (!this._expiryTimer)
404
+ return;
405
+ clearTimeout(this._expiryTimer);
406
+ this._expiryTimer = null;
407
+ }
408
+ _findNextExpiry() {
409
+ let nextKey = null;
410
+ let nextExpiryAt = null;
411
+ for (const [key, entry] of this._store) {
412
+ if (entry.expiresAt === null)
413
+ continue;
414
+ if (nextExpiryAt === null || entry.expiresAt < nextExpiryAt) {
415
+ nextKey = key;
416
+ nextExpiryAt = entry.expiresAt;
417
+ }
418
+ }
419
+ return nextKey === null || nextExpiryAt === null ? null : { key: nextKey, expiresAt: nextExpiryAt };
420
+ }
421
+ _evictExpiredEntries() {
422
+ const now = Date.now();
423
+ let expired = false;
424
+ for (const [key, entry] of [...this._store]) {
425
+ if (entry.expiresAt !== null && now >= entry.expiresAt) {
426
+ expired = this._evictExpiredEntry(key) || expired;
427
+ }
428
+ }
429
+ if (expired) {
430
+ this._scheduleNextExpiry();
431
+ }
432
+ }
433
+ _evictExpiredEntry(key) {
434
+ const removed = this._removeStoredEntry(key);
435
+ if (!removed)
436
+ return false;
437
+ this._emit(MemorizeEventType_1.MemorizeEventType.Expire, { type: MemorizeEventType_1.MemorizeEventType.Expire, key });
240
438
  if (this._store.size === 0) {
241
439
  this._emit(MemorizeEventType_1.MemorizeEventType.Empty, { type: MemorizeEventType_1.MemorizeEventType.Empty });
242
440
  }
441
+ return true;
243
442
  }
244
443
  _emit(event, payload) {
245
444
  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":"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"}
@@ -0,0 +1,20 @@
1
+ import type { SerializerOption } from './serializer';
2
+ export type AsyncSerializerMode = 'yield' | 'worker';
3
+ export declare class WorkerAsyncSerializer {
4
+ private readonly _serializer;
5
+ private _worker;
6
+ private _idleTimer;
7
+ private _nextId;
8
+ private readonly _pending;
9
+ constructor(_serializer: 'json' | 'v8' | 'auto');
10
+ serialize(value: unknown): Promise<string | Buffer>;
11
+ deserialize(data: string | Buffer): Promise<unknown>;
12
+ private _request;
13
+ private _getWorker;
14
+ private _handleMessage;
15
+ private _rejectAll;
16
+ private _scheduleIdleShutdown;
17
+ private _clearIdleTimer;
18
+ }
19
+ export declare function createWorkerAsyncSerializer(option: SerializerOption | undefined): WorkerAsyncSerializer | null;
20
+ //# 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;AA2BrD,MAAM,MAAM,mBAAmB,GAAG,OAAO,GAAG,QAAQ,CAAC;AAmDrD,qBAAa,qBAAqB;IAMpB,OAAO,CAAC,QAAQ,CAAC,WAAW;IALxC,OAAO,CAAC,OAAO,CAA2B;IAC1C,OAAO,CAAC,UAAU,CAA8C;IAChE,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAqC;gBAEjC,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM;IAEhE,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;IAgBhB,OAAO,CAAC,UAAU;IAalB,OAAO,CAAC,cAAc;IAiBtB,OAAO,CAAC,UAAU;IASlB,OAAO,CAAC,qBAAqB;IAe7B,OAAO,CAAC,eAAe;CAKxB;AAED,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,gBAAgB,GAAG,SAAS,GAAG,qBAAqB,GAAG,IAAI,CAG9G"}
@@ -0,0 +1,147 @@
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 normalizeWorkerResult(result) {
46
+ if (typeof result === 'string')
47
+ return result;
48
+ if (Buffer.isBuffer(result))
49
+ return result;
50
+ if (result instanceof Uint8Array)
51
+ return Buffer.from(result);
52
+ throw new TypeError('worker serializer returned an unsupported value');
53
+ }
54
+ class WorkerAsyncSerializer {
55
+ constructor(_serializer) {
56
+ this._serializer = _serializer;
57
+ this._worker = null;
58
+ this._idleTimer = null;
59
+ this._nextId = 1;
60
+ this._pending = new Map();
61
+ }
62
+ serialize(value) {
63
+ return this._request({ id: 0, action: 'serialize', serializer: this._serializer, value })
64
+ .then(normalizeWorkerResult);
65
+ }
66
+ deserialize(data) {
67
+ return this._request({ id: 0, action: 'deserialize', serializer: this._serializer, data });
68
+ }
69
+ _request(message) {
70
+ const id = this._nextId++;
71
+ const request = { ...message, id };
72
+ return new Promise((resolve, reject) => {
73
+ this._clearIdleTimer();
74
+ this._pending.set(id, { resolve, reject });
75
+ try {
76
+ this._getWorker().postMessage(request);
77
+ }
78
+ catch (error) {
79
+ this._pending.delete(id);
80
+ reject(error instanceof Error ? error : new Error(String(error)));
81
+ }
82
+ });
83
+ }
84
+ _getWorker() {
85
+ var _a;
86
+ if (this._worker)
87
+ return this._worker;
88
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
89
+ const { Worker } = require('node:worker_threads');
90
+ const worker = new Worker(WORKER_SOURCE, { eval: true });
91
+ (_a = worker.unref) === null || _a === void 0 ? void 0 : _a.call(worker);
92
+ worker.on('message', (message) => this._handleMessage(message));
93
+ worker.on('error', (error) => this._rejectAll(error));
94
+ this._worker = worker;
95
+ return worker;
96
+ }
97
+ _handleMessage(message) {
98
+ var _a, _b;
99
+ const pending = this._pending.get(message.id);
100
+ if (!pending)
101
+ return;
102
+ this._pending.delete(message.id);
103
+ if ('error' in message) {
104
+ const error = new Error((_a = message.error.message) !== null && _a !== void 0 ? _a : 'worker serializer failed');
105
+ error.name = (_b = message.error.name) !== null && _b !== void 0 ? _b : 'Error';
106
+ pending.reject(error);
107
+ this._scheduleIdleShutdown();
108
+ return;
109
+ }
110
+ pending.resolve(message.result);
111
+ this._scheduleIdleShutdown();
112
+ }
113
+ _rejectAll(error) {
114
+ this._clearIdleTimer();
115
+ for (const [id, pending] of this._pending) {
116
+ this._pending.delete(id);
117
+ pending.reject(error);
118
+ }
119
+ this._worker = null;
120
+ }
121
+ _scheduleIdleShutdown() {
122
+ if (this._pending.size > 0 || !this._worker)
123
+ return;
124
+ this._idleTimer = setTimeout(() => {
125
+ const worker = this._worker;
126
+ this._worker = null;
127
+ this._idleTimer = null;
128
+ void (worker === null || worker === void 0 ? void 0 : worker.terminate());
129
+ }, 50);
130
+ if (typeof this._idleTimer === 'object' && 'unref' in this._idleTimer) {
131
+ this._idleTimer.unref();
132
+ }
133
+ }
134
+ _clearIdleTimer() {
135
+ if (!this._idleTimer)
136
+ return;
137
+ clearTimeout(this._idleTimer);
138
+ this._idleTimer = null;
139
+ }
140
+ }
141
+ exports.WorkerAsyncSerializer = WorkerAsyncSerializer;
142
+ function createWorkerAsyncSerializer(option) {
143
+ if (!isWorkerSerializer(option))
144
+ return null;
145
+ return new WorkerAsyncSerializer(option !== null && option !== void 0 ? option : 'auto');
146
+ }
147
+ //# sourceMappingURL=asyncSerializer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"asyncSerializer.js","sourceRoot":"","sources":["../src/asyncSerializer.ts"],"names":[],"mappings":";;;AA4KA,kEAGC;AAlJD,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoCrB,CAAC;AAEF,SAAS,kBAAkB,CAAC,MAAoC;IAC9D,OAAO,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,MAAM,CAAC;AAC3F,CAAC;AAED,SAAS,qBAAqB,CAAC,MAAe;IAC5C,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC;IAC9C,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,MAAM,CAAC;IAC3C,IAAI,MAAM,YAAY,UAAU;QAAE,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC7D,MAAM,IAAI,SAAS,CAAC,iDAAiD,CAAC,CAAC;AACzE,CAAC;AAED,MAAa,qBAAqB;IAMhC,YAA6B,WAAmC;QAAnC,gBAAW,GAAX,WAAW,CAAwB;QALxD,YAAO,GAAsB,IAAI,CAAC;QAClC,eAAU,GAAyC,IAAI,CAAC;QACxD,YAAO,GAAG,CAAC,CAAC;QACH,aAAQ,GAAG,IAAI,GAAG,EAA0B,CAAC;IAEK,CAAC;IAEpE,SAAS,CAAC,KAAc;QACtB,OAAO,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,CAAC;aACtF,IAAI,CAAC,qBAAqB,CAAC,CAAC;IACjC,CAAC;IAED,WAAW,CAAC,IAAqB;QAC/B,OAAO,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7F,CAAC;IAEO,QAAQ,CAAC,OAA+B;QAC9C,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAC1B,MAAM,OAAO,GAAG,EAAE,GAAG,OAAO,EAAE,EAAE,EAA4B,CAAC;QAE7D,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,IAAI,CAAC,eAAe,EAAE,CAAC;YACvB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;YAC3C,IAAI,CAAC;gBACH,IAAI,CAAC,UAAU,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YACzC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBACzB,MAAM,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACpE,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,UAAU;;QAChB,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC,OAAO,CAAC;QAEtC,iEAAiE;QACjE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,qBAAqB,CAAkC,CAAC;QACnF,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,aAAa,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACzD,MAAA,MAAM,CAAC,KAAK,sDAAI,CAAC;QACjB,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;QAChE,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;QACtD,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,cAAc,CAAC,OAAgC;;QACrD,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC9C,IAAI,CAAC,OAAO;YAAE,OAAO;QACrB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAEjC,IAAI,OAAO,IAAI,OAAO,EAAE,CAAC;YACvB,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,MAAA,OAAO,CAAC,KAAK,CAAC,OAAO,mCAAI,0BAA0B,CAAC,CAAC;YAC7E,KAAK,CAAC,IAAI,GAAG,MAAA,OAAO,CAAC,KAAK,CAAC,IAAI,mCAAI,OAAO,CAAC;YAC3C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACtB,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC7B,OAAO;QACT,CAAC;QAED,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAChC,IAAI,CAAC,qBAAqB,EAAE,CAAC;IAC/B,CAAC;IAEO,UAAU,CAAC,KAAY;QAC7B,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,KAAK,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC1C,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACzB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACxB,CAAC;QACD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;IACtB,CAAC;IAEO,qBAAqB;QAC3B,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO;QAEpD,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,GAAG,EAAE;YAChC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;YAC5B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;YACpB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;YACvB,KAAK,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,SAAS,EAAE,CAAA,CAAC;QAC3B,CAAC,EAAE,EAAE,CAAC,CAAC;QAEP,IAAI,OAAO,IAAI,CAAC,UAAU,KAAK,QAAQ,IAAI,OAAO,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACtE,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QAC1B,CAAC;IACH,CAAC;IAEO,eAAe;QACrB,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE,OAAO;QAC7B,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC9B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;IACzB,CAAC;CACF;AA5FD,sDA4FC;AAED,SAAgB,2BAA2B,CAAC,MAAoC;IAC9E,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7C,OAAO,IAAI,qBAAqB,CAAC,MAAM,aAAN,MAAM,cAAN,MAAM,GAAI,MAAM,CAAC,CAAC;AACrD,CAAC"}