@mainframework/api-request-worker 1.0.3 → 1.0.4

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.
@@ -1,26 +1,7 @@
1
- import { useRef, useState, useCallback } from 'react';
1
+ import { useRef, useState, useEffect } from 'react';
2
2
  import { createApiWorker } from './vanilla.js';
3
3
 
4
- let idCounter = 0;
5
- const uniqueId = () => {
6
- idCounter += 1;
7
- return idCounter.toString();
8
- };
9
-
10
- const e=e=>"object"==typeof e&&null!==e,t=e=>"function"==typeof e,r=e=>e instanceof Date,n=e=>e instanceof RegExp,o=e=>e instanceof Set,f=e=>e instanceof Map,i=e=>e instanceof String||e instanceof Number||e instanceof Boolean,s=e=>ArrayBuffer.isView(e)&&!(e instanceof DataView),a=e=>Object.getPrototypeOf(e),u=e=>null==e||"object"!=typeof e&&"function"!=typeof e,c=(e,t)=>e.getTime()===t.getTime(),l=(e,t)=>e.source===t.source&&e.flags===t.flags,y=(e,t)=>{if(e.constructor!==t.constructor||e.byteLength!==t.byteLength)return false;const r=new Uint8Array(e.buffer,e.byteOffset,e.byteLength),n=new Uint8Array(t.buffer,t.byteOffset,t.byteLength);for(let e=0;e<r.length;e++)if(r[e]!==n[e])return false;return true},p=(e,t,r,n)=>{if(e.size!==t.size)return false;for(const r of e)if(u(r)&&!t.has(r))return false;const o=Array.from(t),f=new Set;for(const t of e){if(u(t))continue;const e=o.findIndex((e,r)=>!f.has(r)&&t===e);if(-1!==e){f.add(e);continue}let i=false;for(let e=0;e<o.length;e++)if(!f.has(e)&&w(t,o[e],r,n)){f.add(e),i=true;break}if(!i)return false}return true},g=(e,t,r,n)=>{if(e.size!==t.size)return false;const o=Array.from(t),f=new Set;for(const[i,s]of e){if(u(i)){const e=t.get(i);if(void 0===e&&!t.has(i))return false;if(!w(s,e,r,n))return false;continue}let e=false;for(let t=0;t<o.length;t++)if(!f.has(t)){const[a,u]=o[t];if(w(i,a,r,n)&&w(s,u,r,n)){f.add(t),e=true;break}}if(!e)return false}return true},b=(e,t,r,n)=>{if(e.length!==t.length)return false;for(let o=0;o<e.length;o++){if(n.strictSparseArrays){const r=Object.prototype.hasOwnProperty.call(e,o),n=Object.prototype.hasOwnProperty.call(t,o);if(r!==n)return false;if(!r&&!n)continue}if(!w(e[o],t[o],r,n))return false}return true},h=(e,t,r,n)=>{const o=Reflect.ownKeys(e),f=Reflect.ownKeys(t);if(o.length!==f.length)return false;for(const f of o){if(!Object.prototype.hasOwnProperty.call(t,f))return false;if(!w(e[f],t[f],r,n))return false}return true},w=(w,A,m=new WeakMap,O={})=>{if(w===A)return true;if("number"==typeof w&&"number"==typeof A&&Number.isNaN(w)&&Number.isNaN(A))return true;if(O.normalizeBoxedPrimitives&&(i(w)&&(w=w.valueOf()),i(A)&&(A=A.valueOf()),u(w)&&u(A)))return w===A;if(u(w)||u(A))return false;if(t(w)||t(A))return w===A;if(!e(w)||!e(A))return false;let d=m.get(w)??(()=>{const e=new WeakMap;return m.set(w,e),e})();const N=d.get(A);if(void 0!==N)return N;d.set(A,true);const j=a(w),P=a(A);let k;return k=Array.isArray(w)&&Array.isArray(A)?b(w,A,m,O):!Array.isArray(w)&&!Array.isArray(A)&&(r(w)&&r(A)?c(w,A):n(w)&&n(A)?l(w,A):s(w)&&s(A)?y(w,A):o(w)&&o(A)?p(w,A,m,O):f(w)&&f(A)?g(w,A,m,O):!(!O.allowPrototypeMismatch&&j!==P)&&h(w,A,m,O)),d.set(A,k),k},A=(e,t,r)=>w(e,t,new WeakMap,r);
11
-
12
- const useCustomCallback = (callback, dependencies) => {
13
- const refCallback = useRef(callback);
14
- const refDependencies = useRef(dependencies);
15
- if (!dependencies.every((dep, index) => A(dep, refDependencies.current[index]))) {
16
- refDependencies.current = dependencies;
17
- refCallback.current = callback;
18
- }
19
- const stableCallback = useRef(
20
- (...args) => refCallback.current(...args)
21
- ).current;
22
- return stableCallback;
23
- };
4
+ const uniqueId = () => typeof crypto !== "undefined" && typeof crypto.randomUUID === "function" ? crypto.randomUUID() : Math.random().toString(36).slice(2) + Date.now().toString(36);
24
5
 
25
6
  const DEFAULT_CHUNK_BATCH = 5;
26
7
  const toNumber = (val, fallback) => typeof val === "number" && Number.isFinite(val) ? val : fallback;
@@ -31,7 +12,10 @@ let cleanupTimer = null;
31
12
  const STALE_ENTRY_MS = 5e3;
32
13
  const CLEANUP_INTERVAL_MS = 3e4;
33
14
  const normalizeKey = (key) => key.toLocaleLowerCase();
34
- const cleanupState = { isDeleting: false, lastRun: 0 };
15
+ const cleanupState = {
16
+ isDeleting: false,
17
+ lastRun: 0
18
+ };
35
19
  const runStaleEntryCleanup = () => {
36
20
  const now = Date.now();
37
21
  if (cleanupState.isDeleting || now < cleanupState.lastRun + CLEANUP_INTERVAL_MS) return;
@@ -43,15 +27,21 @@ const runStaleEntryCleanup = () => {
43
27
  const key = keys[i];
44
28
  const entry = responseQueue[key];
45
29
  const streamInProgress = streamThrottleState[key] != null || streamAccumulators[key] != null;
46
- if (entry && !streamInProgress && entry.data != null && entry.lastActivityAt != null && now - entry.lastActivityAt >= STALE_ENTRY_MS) {
47
- entry.loading = null;
48
- entry.data = null;
49
- entry.meta = null;
50
- entry.error = null;
51
- entry.setUpdateTrigger = null;
52
- entry.requestId = null;
53
- delete entry.streamChunks;
54
- delete streamThrottleState[key];
30
+ if (entry && !streamInProgress && entry.lastActivityAt != null && now - entry.lastActivityAt >= STALE_ENTRY_MS) {
31
+ if (entry.setUpdateTriggers.size === 0) {
32
+ delete responseQueue[key];
33
+ delete streamThrottleState[key];
34
+ delete streamAccumulators[key];
35
+ } else if (entry.data != null) {
36
+ entry.loading = null;
37
+ entry.data = null;
38
+ entry.meta = null;
39
+ entry.error = null;
40
+ entry.errorCode = null;
41
+ entry.requestId = null;
42
+ delete entry.streamChunks;
43
+ delete streamThrottleState[key];
44
+ }
55
45
  }
56
46
  i++;
57
47
  }
@@ -69,12 +59,12 @@ const flushStreamBatch = (key, entry) => {
69
59
  if (!state || state.pendingChunks.length === 0) return;
70
60
  entry.streamChunks = state.pendingChunks.slice();
71
61
  state.pendingChunks.length = 0;
72
- entry.setUpdateTrigger?.(updater);
62
+ entry.setUpdateTriggers.forEach((fn) => fn(updater));
73
63
  };
74
64
  const findEntry = (cacheName, hookId) => cacheName ? responseQueue[normalizeKey(cacheName)] : hookId ? Object.values(responseQueue).find((e) => e.hookId === hookId) ?? null : null;
75
65
  const finalizeEntry = (entry) => {
76
66
  entry.requestId = null;
77
- entry.setUpdateTrigger?.(updater);
67
+ entry.setUpdateTriggers.forEach((fn) => fn(updater));
78
68
  };
79
69
  const getApiWorker = () => {
80
70
  if (apiWorker) return apiWorker;
@@ -97,20 +87,31 @@ const ensureWorkerInitialized = () => {
97
87
  if ("stream" in msg && msg.stream) {
98
88
  const entry2 = findEntry(cacheName, hookId);
99
89
  if (!entry2) return;
90
+ if (msg.requestId != null && msg.requestId !== "" && entry2.requestId !== msg.requestId) return;
100
91
  const batchSize = toNumber(entry2.streamChunkBatchSize, DEFAULT_CHUNK_BATCH);
101
92
  switch (msg.stream) {
102
93
  case "start": {
103
- streamAccumulators[key] = { chunks: [], meta: msg.meta ?? null };
104
- streamThrottleState[key] = { pendingChunks: [] };
94
+ streamAccumulators[key] = {
95
+ chunks: [],
96
+ meta: msg.meta ?? null
97
+ };
98
+ streamThrottleState[key] = {
99
+ pendingChunks: []
100
+ };
105
101
  entry2.streamChunks = [];
106
102
  entry2.meta = msg.meta ?? null;
107
- entry2.setUpdateTrigger?.(updater);
103
+ entry2.setUpdateTriggers.forEach((fn) => fn(updater));
108
104
  return;
109
105
  }
110
106
  case "resume":
111
- if (!streamAccumulators[key]) streamAccumulators[key] = { chunks: [], meta: msg.meta ?? null };
107
+ if (!streamAccumulators[key]) streamAccumulators[key] = {
108
+ chunks: [],
109
+ meta: msg.meta ?? null
110
+ };
112
111
  else if (msg.meta) streamAccumulators[key].meta = msg.meta;
113
- if (!streamThrottleState[key]) streamThrottleState[key] = { pendingChunks: [] };
112
+ if (!streamThrottleState[key]) streamThrottleState[key] = {
113
+ pendingChunks: []
114
+ };
114
115
  if (msg.meta) entry2.meta = msg.meta ?? null;
115
116
  return;
116
117
  case "chunk": {
@@ -134,10 +135,14 @@ const ensureWorkerInitialized = () => {
134
135
  const errMsg = error?.message ?? "";
135
136
  if (errMsg !== "") {
136
137
  entry2.error = errMsg;
138
+ entry2.errorCode = error?.code ?? null;
137
139
  } else if (acc) {
138
- entry2.data = new Blob(acc.chunks, acc.meta?.contentType ? { type: acc.meta.contentType } : void 0);
140
+ entry2.data = new Blob(acc.chunks, acc.meta?.contentType ? {
141
+ type: acc.meta.contentType
142
+ } : void 0);
139
143
  entry2.meta = acc.meta ?? null;
140
144
  entry2.error = null;
145
+ entry2.errorCode = null;
141
146
  entry2.lastActivityAt = Date.now();
142
147
  }
143
148
  entry2.loading = false;
@@ -148,15 +153,27 @@ const ensureWorkerInitialized = () => {
148
153
  }
149
154
  const entry = findEntry(cacheName, hookId);
150
155
  if (!entry) return;
156
+ if (msg.requestId != null && msg.requestId !== "" && entry.requestId !== msg.requestId) return;
157
+ if (msg.type === "delete") {
158
+ entry.data = null;
159
+ entry.meta = null;
160
+ entry.error = null;
161
+ entry.errorCode = null;
162
+ entry.loading = false;
163
+ finalizeEntry(entry);
164
+ return;
165
+ }
151
166
  const message = error?.message ?? "";
152
167
  if (message !== "") {
153
168
  entry.error = message;
169
+ entry.errorCode = error?.code ?? null;
154
170
  entry.loading = false;
155
171
  } else {
156
172
  entry.data = msg.data ?? null;
157
173
  entry.meta = msg.meta ?? null;
158
174
  entry.lastActivityAt = Date.now();
159
175
  entry.error = null;
176
+ entry.errorCode = null;
160
177
  entry.loading = false;
161
178
  }
162
179
  finalizeEntry(entry);
@@ -164,7 +181,14 @@ const ensureWorkerInitialized = () => {
164
181
  return worker;
165
182
  };
166
183
  const useApiWorker = (config) => {
167
- const { cacheName, request: requestConfig, data: configData, runMode = "auto", enabled = true } = config;
184
+ if (!window) return null;
185
+ const {
186
+ cacheName,
187
+ request: requestConfig,
188
+ data: configData,
189
+ runMode = "auto",
190
+ enabled = true
191
+ } = config;
168
192
  const worker = ensureWorkerInitialized();
169
193
  const hookIdRef = useRef("");
170
194
  const queueKey = normalizeKey(cacheName);
@@ -172,61 +196,101 @@ const useApiWorker = (config) => {
172
196
  const [, setUpdateTrigger] = useState(0);
173
197
  let storeEntry = responseQueue[queueKey];
174
198
  if (!storeEntry) {
175
- const hookId2 = uniqueId();
199
+ const hookId = uniqueId();
176
200
  storeEntry = responseQueue[queueKey] = {
177
- hookId: hookId2,
201
+ hookId,
178
202
  cacheName,
179
203
  data: null,
180
204
  loading: false,
181
205
  error: null,
182
- setUpdateTrigger: () => {
183
- },
206
+ errorCode: null,
207
+ setUpdateTriggers: /* @__PURE__ */ new Set(),
184
208
  requestId: null,
185
209
  meta: null,
186
210
  lastActivityAt: null
187
211
  };
188
- hookIdRef.current = hookId2;
212
+ hookIdRef.current = hookId;
189
213
  } else {
190
214
  hookIdRef.current = storeEntry.hookId;
191
215
  storeEntry.lastActivityAt = Date.now();
192
216
  }
193
217
  const entry = storeEntry;
194
- entry.setUpdateTrigger = setUpdateTrigger;
195
- const hookId = hookIdRef.current;
196
- const deleteCache = useCallback(() => {
218
+ const hookId_0 = hookIdRef.current;
219
+ useEffect(() => {
220
+ responseQueue[queueKey]?.setUpdateTriggers.add(setUpdateTrigger);
221
+ return () => {
222
+ const storeEntry_0 = responseQueue[queueKey];
223
+ if (!storeEntry_0) return;
224
+ storeEntry_0.setUpdateTriggers.delete(setUpdateTrigger);
225
+ if (storeEntry_0.setUpdateTriggers.size === 0) {
226
+ const requestId = storeEntry_0.requestId;
227
+ if (requestId) {
228
+ worker.postMessage({
229
+ dataRequest: {
230
+ type: "cancel",
231
+ cacheName,
232
+ requestId
233
+ }
234
+ });
235
+ }
236
+ }
237
+ };
238
+ }, [queueKey, cacheName, worker]);
239
+ const deleteCache = () => {
197
240
  if (cacheName) {
198
241
  worker.postMessage({
199
- dataRequest: { type: "delete", cacheName, hookId: hookIdRef.current }
242
+ dataRequest: {
243
+ type: "delete",
244
+ cacheName,
245
+ hookId: hookIdRef.current
246
+ }
200
247
  });
201
248
  }
202
- }, [cacheName, worker]);
203
- const doRequest = useCallback(() => {
204
- const entry2 = responseQueue[queueKey];
205
- if (!entry2 || entry2.loading) return;
206
- entry2.loading = true;
207
- entry2.error = null;
208
- entry2.lastActivityAt = Date.now();
209
- entry2.setUpdateTrigger?.(updater);
249
+ };
250
+ const doRequest = () => {
251
+ const entry_0 = responseQueue[queueKey];
252
+ if (!entry_0 || entry_0.loading) return;
253
+ entry_0.loading = true;
254
+ entry_0.error = null;
255
+ entry_0.errorCode = null;
256
+ entry_0.lastActivityAt = Date.now();
257
+ entry_0.setUpdateTriggers.forEach((fn) => fn(updater));
210
258
  if (requestConfig) {
211
- const requestId = uniqueId();
212
- entry2.requestId = requestId;
213
- const isStream = requestConfig.responseType?.toLowerCase() === "stream";
259
+ const requestId_0 = uniqueId();
260
+ entry_0.requestId = requestId_0;
261
+ const isStream = requestConfig.responseType?.toLocaleLowerCase() === "stream";
214
262
  if (isStream) {
215
- entry2.streamChunkBatchSize = toNumber(requestConfig.streamChunkBatchSize, DEFAULT_CHUNK_BATCH);
263
+ entry_0.streamChunkBatchSize = toNumber(requestConfig.streamChunkBatchSize, DEFAULT_CHUNK_BATCH);
216
264
  }
217
- const request = isStream && requestConfig.retries === void 0 ? { ...requestConfig, retries: 3 } : requestConfig;
265
+ const request = isStream && requestConfig.retries === void 0 ? {
266
+ ...requestConfig,
267
+ retries: 3
268
+ } : requestConfig;
218
269
  worker.postMessage({
219
- dataRequest: { type: "set", cacheName, hookId, requestId, payload: configData, request }
270
+ dataRequest: {
271
+ type: "set",
272
+ cacheName,
273
+ hookId: hookId_0,
274
+ requestId: requestId_0,
275
+ payload: configData,
276
+ request
277
+ }
220
278
  });
221
279
  } else {
222
- worker.postMessage({ dataRequest: { type: "get", cacheName, hookId } });
280
+ worker.postMessage({
281
+ dataRequest: {
282
+ type: "get",
283
+ cacheName,
284
+ hookId: hookId_0
285
+ }
286
+ });
223
287
  }
224
288
  hasExecutedRef.current = true;
225
- }, [queueKey, cacheName, hookId, requestConfig, configData, worker]);
226
- const makeRequest = useCustomCallback(() => {
289
+ };
290
+ const makeRequest = () => {
227
291
  if (!enabled || runMode === "once" && hasExecutedRef.current) return;
228
292
  doRequest();
229
- }, [enabled, runMode, doRequest]);
293
+ };
230
294
  const hasAlreadyRunOnce = runMode === "once" && hasExecutedRef.current;
231
295
  const shouldRun = (runMode === "auto" || runMode === "once") && enabled && (requestConfig || cacheName);
232
296
  if (shouldRun && !hasAlreadyRunOnce && !entry.loading) {
@@ -237,6 +301,7 @@ const useApiWorker = (config) => {
237
301
  meta: entry.meta ?? null,
238
302
  loading: entry.loading ?? false,
239
303
  error: entry.error ?? null,
304
+ errorCode: entry.errorCode ?? null,
240
305
  refetch: makeRequest,
241
306
  deleteCache,
242
307
  streamChunks: toStreamChunks(entry.streamChunks)
@@ -1 +1 @@
1
- {"version":3,"file":"react.js","sources":["../../../src/shared/utils/uniqueId.ts","../../../node_modules/@mainframework/is-deep-equal/dist/index.mjs","../../../src/shared/hooks/useCustomCallback.ts","../../../src/shared/hooks/useApiWorker.ts"],"sourcesContent":["// utils/uniqueId.ts\r\nlet idCounter = 0;\r\n\r\n/**\r\n * Generates a stable, unique string ID.\r\n * SSR-safe and works in any environment.\r\n */\r\nexport const uniqueId = (): string => {\r\n idCounter += 1;\r\n return idCounter.toString();\r\n};\r\n","const e=e=>\"object\"==typeof e&&null!==e,t=e=>\"function\"==typeof e,r=e=>e instanceof Date,n=e=>e instanceof RegExp,o=e=>e instanceof Set,f=e=>e instanceof Map,i=e=>e instanceof String||e instanceof Number||e instanceof Boolean,s=e=>ArrayBuffer.isView(e)&&!(e instanceof DataView),a=e=>Object.getPrototypeOf(e),u=e=>null==e||\"object\"!=typeof e&&\"function\"!=typeof e,c=(e,t)=>e.getTime()===t.getTime(),l=(e,t)=>e.source===t.source&&e.flags===t.flags,y=(e,t)=>{if(e.constructor!==t.constructor||e.byteLength!==t.byteLength)return!1;const r=new Uint8Array(e.buffer,e.byteOffset,e.byteLength),n=new Uint8Array(t.buffer,t.byteOffset,t.byteLength);for(let e=0;e<r.length;e++)if(r[e]!==n[e])return!1;return!0},p=(e,t,r,n)=>{if(e.size!==t.size)return!1;for(const r of e)if(u(r)&&!t.has(r))return!1;const o=Array.from(t),f=new Set;for(const t of e){if(u(t))continue;const e=o.findIndex((e,r)=>!f.has(r)&&t===e);if(-1!==e){f.add(e);continue}let i=!1;for(let e=0;e<o.length;e++)if(!f.has(e)&&w(t,o[e],r,n)){f.add(e),i=!0;break}if(!i)return!1}return!0},g=(e,t,r,n)=>{if(e.size!==t.size)return!1;const o=Array.from(t),f=new Set;for(const[i,s]of e){if(u(i)){const e=t.get(i);if(void 0===e&&!t.has(i))return!1;if(!w(s,e,r,n))return!1;continue}let e=!1;for(let t=0;t<o.length;t++)if(!f.has(t)){const[a,u]=o[t];if(w(i,a,r,n)&&w(s,u,r,n)){f.add(t),e=!0;break}}if(!e)return!1}return!0},b=(e,t,r,n)=>{if(e.length!==t.length)return!1;for(let o=0;o<e.length;o++){if(n.strictSparseArrays){const r=Object.prototype.hasOwnProperty.call(e,o),n=Object.prototype.hasOwnProperty.call(t,o);if(r!==n)return!1;if(!r&&!n)continue}if(!w(e[o],t[o],r,n))return!1}return!0},h=(e,t,r,n)=>{const o=Reflect.ownKeys(e),f=Reflect.ownKeys(t);if(o.length!==f.length)return!1;for(const f of o){if(!Object.prototype.hasOwnProperty.call(t,f))return!1;if(!w(e[f],t[f],r,n))return!1}return!0},w=(w,A,m=new WeakMap,O={})=>{if(w===A)return!0;if(\"number\"==typeof w&&\"number\"==typeof A&&Number.isNaN(w)&&Number.isNaN(A))return!0;if(O.normalizeBoxedPrimitives&&(i(w)&&(w=w.valueOf()),i(A)&&(A=A.valueOf()),u(w)&&u(A)))return w===A;if(u(w)||u(A))return!1;if(t(w)||t(A))return w===A;if(!e(w)||!e(A))return!1;let d=m.get(w)??(()=>{const e=new WeakMap;return m.set(w,e),e})();const N=d.get(A);if(void 0!==N)return N;d.set(A,!0);const j=a(w),P=a(A);let k;return k=Array.isArray(w)&&Array.isArray(A)?b(w,A,m,O):!Array.isArray(w)&&!Array.isArray(A)&&(r(w)&&r(A)?c(w,A):n(w)&&n(A)?l(w,A):s(w)&&s(A)?y(w,A):o(w)&&o(A)?p(w,A,m,O):f(w)&&f(A)?g(w,A,m,O):!(!O.allowPrototypeMismatch&&j!==P)&&h(w,A,m,O)),d.set(A,k),k},A=(e,t,r)=>w(e,t,new WeakMap,r),m=(e,t,r,n)=>w(e,t,r,n);export{b as compareArray,c as compareDate,g as compareMap,h as compareObject,l as compareRegExp,p as compareSet,y as compareTypedArray,a as getPrototypeOf,i as isBoxedPrimitive,r as isDate,A as isEqual,m as isEqualWithSharedMemo,t as isFunction,f as isMap,e as isObject,u as isPrimitive,n as isRegExp,o as isSet,s as isTypedArray};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\r\nimport { useRef } from \"react\";\r\nimport { isEqual } from \"@mainframework/is-deep-equal\";\r\n\r\nexport const useCustomCallback = <T extends (...args: unknown[]) => unknown>(\r\n callback: T,\r\n dependencies: unknown[],\r\n): T => {\r\n const refCallback = useRef<T>(callback);\r\n const refDependencies = useRef<unknown[]>(dependencies);\r\n\r\n // Update refs synchronously during render\r\n if (!dependencies.every((dep, index) => isEqual(dep, refDependencies.current[index]))) {\r\n refDependencies.current = dependencies;\r\n refCallback.current = callback;\r\n }\r\n\r\n // Stable callback, always calls latest callback\r\n const stableCallback = useRef(\r\n (...args: Parameters<T>): ReturnType<T> => refCallback.current(...args) as ReturnType<T>,\r\n ).current;\r\n\r\n return stableCallback as T;\r\n};\r\n","// useApiWorker.ts\r\nimport { useRef, useState, useCallback } from \"react\";\r\nimport { createApiWorker } from \"../utils/createApiWorker\";\r\nimport { uniqueId } from \"../utils/uniqueId\";\r\nimport type {\r\n BinaryResponseMeta,\r\n DataRequest,\r\n QueueEntry,\r\n UseApiWorkerConfig,\r\n UseApiWorkerReturn,\r\n WorkerMessagePayload,\r\n} from \"../types/types\";\r\n\r\ntype StreamAccumulator = { chunks: ArrayBuffer[]; meta: BinaryResponseMeta | null };\r\n\r\ntype StreamThrottleState = {\r\n pendingChunks: ArrayBuffer[];\r\n};\r\n\r\nconst DEFAULT_CHUNK_BATCH = 5;\r\n\r\nconst toNumber = (val: unknown, fallback: number): number =>\r\n typeof val === \"number\" && Number.isFinite(val) ? val : fallback;\r\n\r\nconst toStreamChunks = (val: unknown): ArrayBuffer[] | undefined =>\r\n val === undefined || val === null ? undefined : Array.isArray(val) ? (val as ArrayBuffer[]) : undefined;\r\n\r\nimport { useCustomCallback } from \"./useCustomCallback\";\r\n\r\n// ============================================================================\r\n// MODULE-LEVEL WORKER & QUEUE\r\n// ============================================================================\r\n\r\nlet apiWorker: Worker | null = null;\r\nlet workerInitialized = false;\r\nlet cleanupTimer: ReturnType<typeof setInterval> | null = null;\r\n\r\nconst STALE_ENTRY_MS = 5000;\r\nconst CLEANUP_INTERVAL_MS = 30000;\r\n\r\nconst normalizeKey = (key: string) => key.toLocaleLowerCase();\r\n\r\nconst cleanupState = { isDeleting: false, lastRun: 0 };\r\n\r\nconst runStaleEntryCleanup = (): void => {\r\n const now = Date.now();\r\n if (cleanupState.isDeleting || now < cleanupState.lastRun + CLEANUP_INTERVAL_MS) return;\r\n\r\n cleanupState.isDeleting = true;\r\n\r\n try {\r\n const keys = Object.keys(responseQueue);\r\n let i = 0;\r\n while (i < keys.length) {\r\n const key = keys[i] as string;\r\n const entry = responseQueue[key];\r\n const streamInProgress = streamThrottleState[key] != null || streamAccumulators[key] != null;\r\n if (\r\n entry &&\r\n !streamInProgress &&\r\n entry.data != null &&\r\n entry.lastActivityAt != null &&\r\n now - entry.lastActivityAt >= STALE_ENTRY_MS\r\n ) {\r\n entry.loading = null;\r\n entry.data = null;\r\n entry.meta = null;\r\n entry.error = null;\r\n entry.setUpdateTrigger = null;\r\n entry.requestId = null;\r\n delete entry.streamChunks;\r\n delete streamThrottleState[key];\r\n }\r\n i++;\r\n }\r\n } finally {\r\n cleanupState.isDeleting = false;\r\n cleanupState.lastRun = now;\r\n }\r\n};\r\n\r\nconst responseQueue: Record<string, QueueEntry<unknown>> = {};\r\n\r\nconst streamAccumulators: Record<string, StreamAccumulator> = {};\r\nconst streamThrottleState: Record<string, StreamThrottleState> = {};\r\n\r\nconst updater = (n: number) => n + 1;\r\n\r\nconst flushStreamBatch = (key: string, entry: QueueEntry<unknown>): void => {\r\n const state = streamThrottleState[key];\r\n if (!state || state.pendingChunks.length === 0) return;\r\n entry.streamChunks = state.pendingChunks.slice();\r\n state.pendingChunks.length = 0;\r\n entry.setUpdateTrigger?.(updater);\r\n};\r\n\r\nconst findEntry = (cacheName: string | undefined, hookId: string | undefined) =>\r\n cacheName\r\n ? responseQueue[normalizeKey(cacheName)]\r\n : hookId\r\n ? (Object.values(responseQueue).find((e) => e.hookId === hookId) ?? null)\r\n : null;\r\n\r\nconst finalizeEntry = (entry: QueueEntry<unknown>): void => {\r\n entry.requestId = null;\r\n entry.setUpdateTrigger?.(updater);\r\n};\r\n\r\nconst getApiWorker = (): Worker => {\r\n if (apiWorker) return apiWorker;\r\n apiWorker = createApiWorker();\r\n return apiWorker;\r\n};\r\n\r\nconst ensureWorkerInitialized = (): Worker => {\r\n const worker = getApiWorker();\r\n if (workerInitialized) return worker;\r\n workerInitialized = true;\r\n\r\n if (!cleanupTimer) {\r\n cleanupTimer = setInterval(() => runStaleEntryCleanup(), CLEANUP_INTERVAL_MS);\r\n }\r\n\r\n // Worker always sends error ({ message: string }). Entry is found by cacheName or hookId.\r\n // Stream responses: start → chunk(s) → end; we accumulate chunks then set data = new Blob(chunks) on end.\r\n worker.onmessage = (event: MessageEvent<WorkerMessagePayload>) => {\r\n const msg = event.data;\r\n const cacheName = msg.cacheName;\r\n const hookId = msg.hookId;\r\n const error = msg.error;\r\n const key = cacheName ? normalizeKey(cacheName) : \"\";\r\n\r\n if (\"stream\" in msg && msg.stream) {\r\n const entry = findEntry(cacheName, hookId);\r\n if (!entry) return;\r\n const batchSize = toNumber(entry.streamChunkBatchSize, DEFAULT_CHUNK_BATCH);\r\n switch (msg.stream) {\r\n case \"start\": {\r\n streamAccumulators[key] = { chunks: [], meta: msg.meta ?? null };\r\n streamThrottleState[key] = { pendingChunks: [] };\r\n entry.streamChunks = [];\r\n entry.meta = msg.meta ?? null;\r\n entry.setUpdateTrigger?.(updater);\r\n return;\r\n }\r\n case \"resume\":\r\n if (!streamAccumulators[key]) streamAccumulators[key] = { chunks: [], meta: msg.meta ?? null };\r\n else if (msg.meta) streamAccumulators[key].meta = msg.meta;\r\n if (!streamThrottleState[key]) streamThrottleState[key] = { pendingChunks: [] };\r\n if (msg.meta) entry.meta = msg.meta ?? null;\r\n return;\r\n case \"chunk\": {\r\n const acc = streamAccumulators[key];\r\n const throttle = streamThrottleState[key];\r\n if (acc && msg.data) acc.chunks.push(msg.data);\r\n if (throttle && msg.data) {\r\n throttle.pendingChunks.push(msg.data);\r\n if (throttle.pendingChunks.length >= batchSize) {\r\n flushStreamBatch(key, entry);\r\n }\r\n }\r\n return;\r\n }\r\n case \"end\": {\r\n const acc = streamAccumulators[key];\r\n const throttle = streamThrottleState[key];\r\n if (throttle?.pendingChunks.length) flushStreamBatch(key, entry);\r\n delete streamThrottleState[key];\r\n delete streamAccumulators[key];\r\n const errMsg = error?.message ?? \"\";\r\n if (errMsg !== \"\") {\r\n entry.error = errMsg;\r\n } else if (acc) {\r\n entry.data = new Blob(acc.chunks, acc.meta?.contentType ? { type: acc.meta.contentType } : undefined);\r\n entry.meta = acc.meta ?? null;\r\n entry.error = null;\r\n entry.lastActivityAt = Date.now();\r\n }\r\n entry.loading = false;\r\n finalizeEntry(entry);\r\n return;\r\n }\r\n }\r\n }\r\n\r\n const entry = findEntry(cacheName, hookId);\r\n if (!entry) return;\r\n\r\n const message = error?.message ?? \"\";\r\n if (message !== \"\") {\r\n entry.error = message;\r\n entry.loading = false;\r\n } else {\r\n entry.data = msg.data ?? null;\r\n entry.meta = msg.meta ?? null;\r\n entry.lastActivityAt = Date.now();\r\n entry.error = null;\r\n entry.loading = false;\r\n }\r\n finalizeEntry(entry);\r\n };\r\n\r\n return worker;\r\n};\r\n\r\n// ============================================================================\r\n// HOOK\r\n// ============================================================================\r\n\r\nexport type { RequestConfig, UseApiWorkerConfig, UseApiWorkerReturn } from \"../types/types\";\r\n\r\nexport const useApiWorker = <T>(config: UseApiWorkerConfig): UseApiWorkerReturn<T> => {\r\n const { cacheName, request: requestConfig, data: configData, runMode = \"auto\", enabled = true } = config;\r\n\r\n const worker = ensureWorkerInitialized();\r\n\r\n const hookIdRef = useRef<string>(\"\");\r\n const queueKey = normalizeKey(cacheName);\r\n\r\n const hasExecutedRef = useRef(false);\r\n const [, setUpdateTrigger] = useState(0);\r\n\r\n let storeEntry = responseQueue[queueKey];\r\n\r\n if (!storeEntry) {\r\n const hookId = uniqueId();\r\n storeEntry = responseQueue[queueKey] = {\r\n hookId,\r\n cacheName,\r\n data: null,\r\n loading: false,\r\n error: null,\r\n setUpdateTrigger: () => {},\r\n requestId: null,\r\n meta: null,\r\n lastActivityAt: null,\r\n };\r\n hookIdRef.current = hookId;\r\n } else {\r\n hookIdRef.current = storeEntry.hookId;\r\n storeEntry.lastActivityAt = Date.now();\r\n }\r\n const entry = storeEntry;\r\n entry.setUpdateTrigger = setUpdateTrigger;\r\n\r\n const hookId = hookIdRef.current;\r\n\r\n const deleteCache = useCallback(() => {\r\n if (cacheName) {\r\n worker.postMessage({\r\n dataRequest: { type: \"delete\", cacheName, hookId: hookIdRef.current },\r\n });\r\n }\r\n }, [cacheName, worker]);\r\n\r\n const doRequest = useCallback(() => {\r\n const entry = responseQueue[queueKey];\r\n if (!entry || entry.loading) return;\r\n entry.loading = true;\r\n entry.error = null;\r\n entry.lastActivityAt = Date.now();\r\n entry.setUpdateTrigger?.(updater);\r\n if (requestConfig) {\r\n const requestId = uniqueId();\r\n entry.requestId = requestId;\r\n const isStream = requestConfig.responseType?.toLowerCase() === \"stream\";\r\n if (isStream) {\r\n entry.streamChunkBatchSize = toNumber(requestConfig.streamChunkBatchSize, DEFAULT_CHUNK_BATCH);\r\n }\r\n const request =\r\n isStream && requestConfig.retries === undefined ? { ...requestConfig, retries: 3 } : requestConfig;\r\n worker.postMessage({\r\n dataRequest: { type: \"set\", cacheName, hookId, requestId, payload: configData, request },\r\n });\r\n } else {\r\n worker.postMessage({ dataRequest: { type: \"get\", cacheName, hookId } as DataRequest<unknown> });\r\n }\r\n hasExecutedRef.current = true;\r\n }, [queueKey, cacheName, hookId, requestConfig, configData, worker]);\r\n\r\n const makeRequest = useCustomCallback(() => {\r\n if (!enabled || (runMode === \"once\" && hasExecutedRef.current)) return;\r\n doRequest();\r\n }, [enabled, runMode, doRequest]);\r\n\r\n const hasAlreadyRunOnce = runMode === \"once\" && hasExecutedRef.current;\r\n const shouldRun = (runMode === \"auto\" || runMode === \"once\") && enabled && (requestConfig || cacheName);\r\n if (shouldRun && !hasAlreadyRunOnce && !entry.loading) {\r\n doRequest();\r\n }\r\n return {\r\n data: (entry.data as T) ?? null,\r\n meta: entry.meta ?? null,\r\n loading: entry.loading ?? false,\r\n error: entry.error ?? null,\r\n refetch: makeRequest,\r\n deleteCache,\r\n streamChunks: toStreamChunks(entry.streamChunks),\r\n };\r\n};\r\n"],"names":["isEqual","entry","hookId"],"mappings":";;;AACA,IAAI,SAAA,GAAY,CAAA;AAMT,MAAM,WAAW,MAAc;AACpC,EAAA,SAAA,IAAa,CAAA;AACb,EAAA,OAAO,UAAU,QAAA,EAAS;AAC5B,CAAA;;ACVK,MAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,MAAM,EAAE,CAAC,YAAY,MAAM,EAAE,CAAC,YAAY,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC,OAAM,MAAE,CAAC,MAAM,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAM,MAAE,CAAC,OAAM,KAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,OAAM,MAAE,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAM,MAAE,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAE,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,OAAM,MAAE,CAAC,OAAM,KAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,OAAM,MAAE,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAM,MAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAM,MAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAE,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAE,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAM,MAAE,CAAC,OAAM,KAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,OAAM,MAAE,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAM,MAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAM,MAAE,CAAC,OAAM,KAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,OAAM,MAAE,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAM,MAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAM,MAAE,CAAC,OAAM,KAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAM,KAAE,CAAC,GAAG,QAAQ,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAM,KAAE,CAAC,GAAG,CAAC,CAAC,wBAAwB,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,OAAM,MAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAM,MAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,sBAAsB,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC;;ACI7gF,MAAM,iBAAA,GAAoB,CAC/B,QAAA,EACA,YAAA,KACM;AACN,EAAA,MAAM,WAAA,GAAc,OAAU,QAAQ,CAAA;AACtC,EAAA,MAAM,eAAA,GAAkB,OAAkB,YAAY,CAAA;AAGtD,EAAA,IAAI,CAAC,YAAA,CAAa,KAAA,CAAM,CAAC,GAAA,EAAK,KAAA,KAAUA,CAAA,CAAQ,GAAA,EAAK,eAAA,CAAgB,OAAA,CAAQ,KAAK,CAAC,CAAC,CAAA,EAAG;AACrF,IAAA,eAAA,CAAgB,OAAA,GAAU,YAAA;AAC1B,IAAA,WAAA,CAAY,OAAA,GAAU,QAAA;AAAA,EACxB;AAGA,EAAA,MAAM,cAAA,GAAiB,MAAA;AAAA,IACrB,CAAA,GAAI,IAAA,KAAuC,WAAA,CAAY,OAAA,CAAQ,GAAG,IAAI;AAAA,GACxE,CAAE,OAAA;AAEF,EAAA,OAAO,cAAA;AACT,CAAA;;ACJA,MAAM,mBAAA,GAAsB,CAAA;AAE5B,MAAM,QAAA,GAAW,CAAC,GAAA,EAAc,QAAA,KAC9B,OAAO,GAAA,KAAQ,QAAA,IAAY,MAAA,CAAO,QAAA,CAAS,GAAG,CAAA,GAAI,GAAA,GAAM,QAAA;AAE1D,MAAM,cAAA,GAAiB,CAAC,GAAA,KACtB,GAAA,KAAQ,MAAA,IAAa,GAAA,KAAQ,IAAA,GAAO,MAAA,GAAY,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA,GAAK,GAAA,GAAwB,MAAA;AAQhG,IAAI,SAAA,GAA2B,IAAA;AAC/B,IAAI,iBAAA,GAAoB,KAAA;AACxB,IAAI,YAAA,GAAsD,IAAA;AAE1D,MAAM,cAAA,GAAiB,GAAA;AACvB,MAAM,mBAAA,GAAsB,GAAA;AAE5B,MAAM,YAAA,GAAe,CAAC,GAAA,KAAgB,GAAA,CAAI,iBAAA,EAAkB;AAE5D,MAAM,YAAA,GAAe,EAAE,UAAA,EAAY,KAAA,EAAO,SAAS,CAAA,EAAE;AAErD,MAAM,uBAAuB,MAAY;AACvC,EAAA,MAAM,GAAA,GAAM,KAAK,GAAA,EAAI;AACrB,EAAA,IAAI,YAAA,CAAa,UAAA,IAAc,GAAA,GAAM,YAAA,CAAa,UAAU,mBAAA,EAAqB;AAEjF,EAAA,YAAA,CAAa,UAAA,GAAa,IAAA;AAE1B,EAAA,IAAI;AACF,IAAA,MAAM,IAAA,GAAO,MAAA,CAAO,IAAA,CAAK,aAAa,CAAA;AACtC,IAAA,IAAI,CAAA,GAAI,CAAA;AACR,IAAA,OAAO,CAAA,GAAI,KAAK,MAAA,EAAQ;AACtB,MAAA,MAAM,GAAA,GAAM,KAAK,CAAC,CAAA;AAClB,MAAA,MAAM,KAAA,GAAQ,cAAc,GAAG,CAAA;AAC/B,MAAA,MAAM,mBAAmB,mBAAA,CAAoB,GAAG,KAAK,IAAA,IAAQ,kBAAA,CAAmB,GAAG,CAAA,IAAK,IAAA;AACxF,MAAA,IACE,KAAA,IACA,CAAC,gBAAA,IACD,KAAA,CAAM,IAAA,IAAQ,IAAA,IACd,KAAA,CAAM,cAAA,IAAkB,IAAA,IACxB,GAAA,GAAM,KAAA,CAAM,cAAA,IAAkB,cAAA,EAC9B;AACA,QAAA,KAAA,CAAM,OAAA,GAAU,IAAA;AAChB,QAAA,KAAA,CAAM,IAAA,GAAO,IAAA;AACb,QAAA,KAAA,CAAM,IAAA,GAAO,IAAA;AACb,QAAA,KAAA,CAAM,KAAA,GAAQ,IAAA;AACd,QAAA,KAAA,CAAM,gBAAA,GAAmB,IAAA;AACzB,QAAA,KAAA,CAAM,SAAA,GAAY,IAAA;AAClB,QAAA,OAAO,KAAA,CAAM,YAAA;AACb,QAAA,OAAO,oBAAoB,GAAG,CAAA;AAAA,MAChC;AACA,MAAA,CAAA,EAAA;AAAA,IACF;AAAA,EACF,CAAA,SAAE;AACA,IAAA,YAAA,CAAa,UAAA,GAAa,KAAA;AAC1B,IAAA,YAAA,CAAa,OAAA,GAAU,GAAA;AAAA,EACzB;AACF,CAAA;AAEA,MAAM,gBAAqD,EAAC;AAE5D,MAAM,qBAAwD,EAAC;AAC/D,MAAM,sBAA2D,EAAC;AAElE,MAAM,OAAA,GAAU,CAAC,CAAA,KAAc,CAAA,GAAI,CAAA;AAEnC,MAAM,gBAAA,GAAmB,CAAC,GAAA,EAAa,KAAA,KAAqC;AAC1E,EAAA,MAAM,KAAA,GAAQ,oBAAoB,GAAG,CAAA;AACrC,EAAA,IAAI,CAAC,KAAA,IAAS,KAAA,CAAM,aAAA,CAAc,WAAW,CAAA,EAAG;AAChD,EAAA,KAAA,CAAM,YAAA,GAAe,KAAA,CAAM,aAAA,CAAc,KAAA,EAAM;AAC/C,EAAA,KAAA,CAAM,cAAc,MAAA,GAAS,CAAA;AAC7B,EAAA,KAAA,CAAM,mBAAmB,OAAO,CAAA;AAClC,CAAA;AAEA,MAAM,SAAA,GAAY,CAAC,SAAA,EAA+B,MAAA,KAChD,YACI,aAAA,CAAc,YAAA,CAAa,SAAS,CAAC,CAAA,GACrC,MAAA,GACG,OAAO,MAAA,CAAO,aAAa,EAAE,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,MAAA,KAAW,MAAM,CAAA,IAAK,IAAA,GAClE,IAAA;AAER,MAAM,aAAA,GAAgB,CAAC,KAAA,KAAqC;AAC1D,EAAA,KAAA,CAAM,SAAA,GAAY,IAAA;AAClB,EAAA,KAAA,CAAM,mBAAmB,OAAO,CAAA;AAClC,CAAA;AAEA,MAAM,eAAe,MAAc;AACjC,EAAA,IAAI,WAAW,OAAO,SAAA;AACtB,EAAA,SAAA,GAAY,eAAA,EAAgB;AAC5B,EAAA,OAAO,SAAA;AACT,CAAA;AAEA,MAAM,0BAA0B,MAAc;AAC5C,EAAA,MAAM,SAAS,YAAA,EAAa;AAC5B,EAAA,IAAI,mBAAmB,OAAO,MAAA;AAC9B,EAAA,iBAAA,GAAoB,IAAA;AAEpB,EAAA,IAAI,CAAC,YAAA,EAAc;AACjB,IAAA,YAAA,GAAe,WAAA,CAAY,MAAM,oBAAA,EAAqB,EAAG,mBAAmB,CAAA;AAAA,EAC9E;AAIA,EAAA,MAAA,CAAO,SAAA,GAAY,CAAC,KAAA,KAA8C;AAChE,IAAA,MAAM,MAAM,KAAA,CAAM,IAAA;AAClB,IAAA,MAAM,YAAY,GAAA,CAAI,SAAA;AACtB,IAAA,MAAM,SAAS,GAAA,CAAI,MAAA;AACnB,IAAA,MAAM,QAAQ,GAAA,CAAI,KAAA;AAClB,IAAA,MAAM,GAAA,GAAM,SAAA,GAAY,YAAA,CAAa,SAAS,CAAA,GAAI,EAAA;AAElD,IAAA,IAAI,QAAA,IAAY,GAAA,IAAO,GAAA,CAAI,MAAA,EAAQ;AACjC,MAAA,MAAMC,MAAAA,GAAQ,SAAA,CAAU,SAAA,EAAW,MAAM,CAAA;AACzC,MAAA,IAAI,CAACA,MAAAA,EAAO;AACZ,MAAA,MAAM,SAAA,GAAY,QAAA,CAASA,MAAAA,CAAM,oBAAA,EAAsB,mBAAmB,CAAA;AAC1E,MAAA,QAAQ,IAAI,MAAA;AAAQ,QAClB,KAAK,OAAA,EAAS;AACZ,UAAA,kBAAA,CAAmB,GAAG,IAAI,EAAE,MAAA,EAAQ,EAAC,EAAG,IAAA,EAAM,GAAA,CAAI,IAAA,IAAQ,IAAA,EAAK;AAC/D,UAAA,mBAAA,CAAoB,GAAG,CAAA,GAAI,EAAE,aAAA,EAAe,EAAC,EAAE;AAC/C,UAAAA,MAAAA,CAAM,eAAe,EAAC;AACtB,UAAAA,MAAAA,CAAM,IAAA,GAAO,GAAA,CAAI,IAAA,IAAQ,IAAA;AACzB,UAAAA,MAAAA,CAAM,mBAAmB,OAAO,CAAA;AAChC,UAAA;AAAA,QACF;AAAA,QACA,KAAK,QAAA;AACH,UAAA,IAAI,CAAC,kBAAA,CAAmB,GAAG,CAAA,qBAAsB,GAAG,CAAA,GAAI,EAAE,MAAA,EAAQ,EAAC,EAAG,IAAA,EAAM,GAAA,CAAI,QAAQ,IAAA,EAAK;AAAA,eAAA,IACpF,IAAI,IAAA,EAAM,kBAAA,CAAmB,GAAG,CAAA,CAAE,OAAO,GAAA,CAAI,IAAA;AACtD,UAAA,IAAI,CAAC,mBAAA,CAAoB,GAAG,CAAA,EAAG,mBAAA,CAAoB,GAAG,CAAA,GAAI,EAAE,aAAA,EAAe,EAAC,EAAE;AAC9E,UAAA,IAAI,IAAI,IAAA,EAAMA,MAAAA,CAAM,IAAA,GAAO,IAAI,IAAA,IAAQ,IAAA;AACvC,UAAA;AAAA,QACF,KAAK,OAAA,EAAS;AACZ,UAAA,MAAM,GAAA,GAAM,mBAAmB,GAAG,CAAA;AAClC,UAAA,MAAM,QAAA,GAAW,oBAAoB,GAAG,CAAA;AACxC,UAAA,IAAI,OAAO,GAAA,CAAI,IAAA,MAAU,MAAA,CAAO,IAAA,CAAK,IAAI,IAAI,CAAA;AAC7C,UAAA,IAAI,QAAA,IAAY,IAAI,IAAA,EAAM;AACxB,YAAA,QAAA,CAAS,aAAA,CAAc,IAAA,CAAK,GAAA,CAAI,IAAI,CAAA;AACpC,YAAA,IAAI,QAAA,CAAS,aAAA,CAAc,MAAA,IAAU,SAAA,EAAW;AAC9C,cAAA,gBAAA,CAAiB,KAAKA,MAAK,CAAA;AAAA,YAC7B;AAAA,UACF;AACA,UAAA;AAAA,QACF;AAAA,QACA,KAAK,KAAA,EAAO;AACV,UAAA,MAAM,GAAA,GAAM,mBAAmB,GAAG,CAAA;AAClC,UAAA,MAAM,QAAA,GAAW,oBAAoB,GAAG,CAAA;AACxC,UAAA,IAAI,QAAA,EAAU,aAAA,CAAc,MAAA,EAAQ,gBAAA,CAAiB,KAAKA,MAAK,CAAA;AAC/D,UAAA,OAAO,oBAAoB,GAAG,CAAA;AAC9B,UAAA,OAAO,mBAAmB,GAAG,CAAA;AAC7B,UAAA,MAAM,MAAA,GAAS,OAAO,OAAA,IAAW,EAAA;AACjC,UAAA,IAAI,WAAW,EAAA,EAAI;AACjB,YAAAA,OAAM,KAAA,GAAQ,MAAA;AAAA,UAChB,WAAW,GAAA,EAAK;AACd,YAAAA,MAAAA,CAAM,IAAA,GAAO,IAAI,IAAA,CAAK,IAAI,MAAA,EAAQ,GAAA,CAAI,IAAA,EAAM,WAAA,GAAc,EAAE,IAAA,EAAM,GAAA,CAAI,IAAA,CAAK,WAAA,KAAgB,MAAS,CAAA;AACpG,YAAAA,MAAAA,CAAM,IAAA,GAAO,GAAA,CAAI,IAAA,IAAQ,IAAA;AACzB,YAAAA,OAAM,KAAA,GAAQ,IAAA;AACd,YAAAA,MAAAA,CAAM,cAAA,GAAiB,IAAA,CAAK,GAAA,EAAI;AAAA,UAClC;AACA,UAAAA,OAAM,OAAA,GAAU,KAAA;AAChB,UAAA,aAAA,CAAcA,MAAK,CAAA;AACnB,UAAA;AAAA,QACF;AAAA;AACF,IACF;AAEA,IAAA,MAAM,KAAA,GAAQ,SAAA,CAAU,SAAA,EAAW,MAAM,CAAA;AACzC,IAAA,IAAI,CAAC,KAAA,EAAO;AAEZ,IAAA,MAAM,OAAA,GAAU,OAAO,OAAA,IAAW,EAAA;AAClC,IAAA,IAAI,YAAY,EAAA,EAAI;AAClB,MAAA,KAAA,CAAM,KAAA,GAAQ,OAAA;AACd,MAAA,KAAA,CAAM,OAAA,GAAU,KAAA;AAAA,IAClB,CAAA,MAAO;AACL,MAAA,KAAA,CAAM,IAAA,GAAO,IAAI,IAAA,IAAQ,IAAA;AACzB,MAAA,KAAA,CAAM,IAAA,GAAO,IAAI,IAAA,IAAQ,IAAA;AACzB,MAAA,KAAA,CAAM,cAAA,GAAiB,KAAK,GAAA,EAAI;AAChC,MAAA,KAAA,CAAM,KAAA,GAAQ,IAAA;AACd,MAAA,KAAA,CAAM,OAAA,GAAU,KAAA;AAAA,IAClB;AACA,IAAA,aAAA,CAAc,KAAK,CAAA;AAAA,EACrB,CAAA;AAEA,EAAA,OAAO,MAAA;AACT,CAAA;AAQO,MAAM,YAAA,GAAe,CAAI,MAAA,KAAsD;AACpF,EAAA,MAAM,EAAE,SAAA,EAAW,OAAA,EAAS,aAAA,EAAe,IAAA,EAAM,YAAY,OAAA,GAAU,MAAA,EAAQ,OAAA,GAAU,IAAA,EAAK,GAAI,MAAA;AAElG,EAAA,MAAM,SAAS,uBAAA,EAAwB;AAEvC,EAAA,MAAM,SAAA,GAAY,OAAe,EAAE,CAAA;AACnC,EAAA,MAAM,QAAA,GAAW,aAAa,SAAS,CAAA;AAEvC,EAAA,MAAM,cAAA,GAAiB,OAAO,KAAK,CAAA;AACnC,EAAA,MAAM,GAAG,gBAAgB,CAAA,GAAI,SAAS,CAAC,CAAA;AAEvC,EAAA,IAAI,UAAA,GAAa,cAAc,QAAQ,CAAA;AAEvC,EAAA,IAAI,CAAC,UAAA,EAAY;AACf,IAAA,MAAMC,UAAS,QAAA,EAAS;AACxB,IAAA,UAAA,GAAa,aAAA,CAAc,QAAQ,CAAA,GAAI;AAAA,MACrC,MAAA,EAAAA,OAAAA;AAAA,MACA,SAAA;AAAA,MACA,IAAA,EAAM,IAAA;AAAA,MACN,OAAA,EAAS,KAAA;AAAA,MACT,KAAA,EAAO,IAAA;AAAA,MACP,kBAAkB,MAAM;AAAA,MAAC,CAAA;AAAA,MACzB,SAAA,EAAW,IAAA;AAAA,MACX,IAAA,EAAM,IAAA;AAAA,MACN,cAAA,EAAgB;AAAA,KAClB;AACA,IAAA,SAAA,CAAU,OAAA,GAAUA,OAAAA;AAAA,EACtB,CAAA,MAAO;AACL,IAAA,SAAA,CAAU,UAAU,UAAA,CAAW,MAAA;AAC/B,IAAA,UAAA,CAAW,cAAA,GAAiB,KAAK,GAAA,EAAI;AAAA,EACvC;AACA,EAAA,MAAM,KAAA,GAAQ,UAAA;AACd,EAAA,KAAA,CAAM,gBAAA,GAAmB,gBAAA;AAEzB,EAAA,MAAM,SAAS,SAAA,CAAU,OAAA;AAEzB,EAAA,MAAM,WAAA,GAAc,YAAY,MAAM;AACpC,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,MAAA,CAAO,WAAA,CAAY;AAAA,QACjB,aAAa,EAAE,IAAA,EAAM,UAAU,SAAA,EAAW,MAAA,EAAQ,UAAU,OAAA;AAAQ,OACrE,CAAA;AAAA,IACH;AAAA,EACF,CAAA,EAAG,CAAC,SAAA,EAAW,MAAM,CAAC,CAAA;AAEtB,EAAA,MAAM,SAAA,GAAY,YAAY,MAAM;AAClC,IAAA,MAAMD,MAAAA,GAAQ,cAAc,QAAQ,CAAA;AACpC,IAAA,IAAI,CAACA,MAAAA,IAASA,MAAAA,CAAM,OAAA,EAAS;AAC7B,IAAAA,OAAM,OAAA,GAAU,IAAA;AAChB,IAAAA,OAAM,KAAA,GAAQ,IAAA;AACd,IAAAA,MAAAA,CAAM,cAAA,GAAiB,IAAA,CAAK,GAAA,EAAI;AAChC,IAAAA,MAAAA,CAAM,mBAAmB,OAAO,CAAA;AAChC,IAAA,IAAI,aAAA,EAAe;AACjB,MAAA,MAAM,YAAY,QAAA,EAAS;AAC3B,MAAAA,OAAM,SAAA,GAAY,SAAA;AAClB,MAAA,MAAM,QAAA,GAAW,aAAA,CAAc,YAAA,EAAc,WAAA,EAAY,KAAM,QAAA;AAC/D,MAAA,IAAI,QAAA,EAAU;AACZ,QAAAA,MAAAA,CAAM,oBAAA,GAAuB,QAAA,CAAS,aAAA,CAAc,sBAAsB,mBAAmB,CAAA;AAAA,MAC/F;AACA,MAAA,MAAM,OAAA,GACJ,QAAA,IAAY,aAAA,CAAc,OAAA,KAAY,MAAA,GAAY,EAAE,GAAG,aAAA,EAAe,OAAA,EAAS,CAAA,EAAE,GAAI,aAAA;AACvF,MAAA,MAAA,CAAO,WAAA,CAAY;AAAA,QACjB,WAAA,EAAa,EAAE,IAAA,EAAM,KAAA,EAAO,WAAW,MAAA,EAAQ,SAAA,EAAW,OAAA,EAAS,UAAA,EAAY,OAAA;AAAQ,OACxF,CAAA;AAAA,IACH,CAAA,MAAO;AACL,MAAA,MAAA,CAAO,WAAA,CAAY,EAAE,WAAA,EAAa,EAAE,MAAM,KAAA,EAAO,SAAA,EAAW,MAAA,EAAO,EAA2B,CAAA;AAAA,IAChG;AACA,IAAA,cAAA,CAAe,OAAA,GAAU,IAAA;AAAA,EAC3B,CAAA,EAAG,CAAC,QAAA,EAAU,SAAA,EAAW,QAAQ,aAAA,EAAe,UAAA,EAAY,MAAM,CAAC,CAAA;AAEnE,EAAA,MAAM,WAAA,GAAc,kBAAkB,MAAM;AAC1C,IAAA,IAAI,CAAC,OAAA,IAAY,OAAA,KAAY,MAAA,IAAU,eAAe,OAAA,EAAU;AAChE,IAAA,SAAA,EAAU;AAAA,EACZ,CAAA,EAAG,CAAC,OAAA,EAAS,OAAA,EAAS,SAAS,CAAC,CAAA;AAEhC,EAAA,MAAM,iBAAA,GAAoB,OAAA,KAAY,MAAA,IAAU,cAAA,CAAe,OAAA;AAC/D,EAAA,MAAM,aAAa,OAAA,KAAY,MAAA,IAAU,OAAA,KAAY,MAAA,KAAW,YAAY,aAAA,IAAiB,SAAA,CAAA;AAC7F,EAAA,IAAI,SAAA,IAAa,CAAC,iBAAA,IAAqB,CAAC,MAAM,OAAA,EAAS;AACrD,IAAA,SAAA,EAAU;AAAA,EACZ;AACA,EAAA,OAAO;AAAA,IACL,IAAA,EAAO,MAAM,IAAA,IAAc,IAAA;AAAA,IAC3B,IAAA,EAAM,MAAM,IAAA,IAAQ,IAAA;AAAA,IACpB,OAAA,EAAS,MAAM,OAAA,IAAW,KAAA;AAAA,IAC1B,KAAA,EAAO,MAAM,KAAA,IAAS,IAAA;AAAA,IACtB,OAAA,EAAS,WAAA;AAAA,IACT,WAAA;AAAA,IACA,YAAA,EAAc,cAAA,CAAe,KAAA,CAAM,YAAY;AAAA,GACjD;AACF;;;;","x_google_ignoreList":[1]}
1
+ {"version":3,"file":"react.js","sources":["../../../src/shared/utils/uniqueId.ts","../../../src/shared/hooks/useApiWorker.ts"],"sourcesContent":["// utils/uniqueId.ts\r\n\r\n/**\r\n * Generates a stable, unique string ID.\r\n * Uses crypto.randomUUID() when available (all modern browsers and Node 15+).\r\n * Falls back to a Math.random + timestamp combination for environments without crypto.\r\n */\r\nexport const uniqueId = (): string =>\r\n typeof crypto !== \"undefined\" && typeof crypto.randomUUID === \"function\"\r\n ? crypto.randomUUID()\r\n : Math.random().toString(36).slice(2) + Date.now().toString(36);\r\n","// useApiWorker.ts\r\nimport { useRef, useState, useEffect } from \"react\";\r\nimport { createApiWorker } from \"../utils/createApiWorker\";\r\nimport { uniqueId } from \"../utils/uniqueId\";\r\nimport type {\r\n BinaryResponseMeta,\r\n DataRequest,\r\n QueueEntry,\r\n UseApiWorkerConfig,\r\n UseApiWorkerReturn,\r\n WorkerMessagePayload,\r\n} from \"../types/types\";\r\n\r\ntype StreamAccumulator = { chunks: ArrayBuffer[]; meta: BinaryResponseMeta | null };\r\n\r\ntype StreamThrottleState = {\r\n pendingChunks: ArrayBuffer[];\r\n};\r\n\r\nconst DEFAULT_CHUNK_BATCH = 5;\r\n\r\nconst toNumber = (val: unknown, fallback: number): number =>\r\n typeof val === \"number\" && Number.isFinite(val) ? val : fallback;\r\n\r\nconst toStreamChunks = (val: unknown): ArrayBuffer[] | undefined =>\r\n val === undefined || val === null ? undefined : Array.isArray(val) ? (val as ArrayBuffer[]) : undefined;\r\n\r\n// ============================================================================\r\n// MODULE-LEVEL WORKER & QUEUE\r\n// ============================================================================\r\n\r\nlet apiWorker: Worker | null = null;\r\nlet workerInitialized = false;\r\nlet cleanupTimer: ReturnType<typeof setInterval> | null = null;\r\n\r\nconst STALE_ENTRY_MS = 5000;\r\nconst CLEANUP_INTERVAL_MS = 30000;\r\n\r\nconst normalizeKey = (key: string) => key.toLocaleLowerCase();\r\n\r\nconst cleanupState = { isDeleting: false, lastRun: 0 };\r\n\r\nconst runStaleEntryCleanup = (): void => {\r\n const now = Date.now();\r\n if (cleanupState.isDeleting || now < cleanupState.lastRun + CLEANUP_INTERVAL_MS) return;\r\n\r\n cleanupState.isDeleting = true;\r\n\r\n try {\r\n const keys = Object.keys(responseQueue);\r\n let i = 0;\r\n while (i < keys.length) {\r\n const key = keys[i] as string;\r\n const entry = responseQueue[key];\r\n const streamInProgress = streamThrottleState[key] != null || streamAccumulators[key] != null;\r\n if (entry && !streamInProgress && entry.lastActivityAt != null && now - entry.lastActivityAt >= STALE_ENTRY_MS) {\r\n if (entry.setUpdateTriggers.size === 0) {\r\n delete responseQueue[key];\r\n delete streamThrottleState[key];\r\n delete streamAccumulators[key];\r\n } else if (entry.data != null) {\r\n entry.loading = null;\r\n entry.data = null;\r\n entry.meta = null;\r\n entry.error = null;\r\n entry.errorCode = null;\r\n entry.requestId = null;\r\n delete entry.streamChunks;\r\n delete streamThrottleState[key];\r\n }\r\n }\r\n i++;\r\n }\r\n } finally {\r\n cleanupState.isDeleting = false;\r\n cleanupState.lastRun = now;\r\n }\r\n};\r\n\r\nconst responseQueue: Record<string, QueueEntry<unknown>> = {};\r\n\r\nconst streamAccumulators: Record<string, StreamAccumulator> = {};\r\nconst streamThrottleState: Record<string, StreamThrottleState> = {};\r\n\r\nconst updater = (n: number) => n + 1;\r\n\r\nconst flushStreamBatch = (key: string, entry: QueueEntry<unknown>): void => {\r\n const state = streamThrottleState[key];\r\n if (!state || state.pendingChunks.length === 0) return;\r\n entry.streamChunks = state.pendingChunks.slice();\r\n state.pendingChunks.length = 0;\r\n entry.setUpdateTriggers.forEach((fn) => fn(updater));\r\n};\r\n\r\nconst findEntry = (cacheName: string | undefined, hookId: string | undefined) =>\r\n cacheName\r\n ? responseQueue[normalizeKey(cacheName)]\r\n : hookId\r\n ? (Object.values(responseQueue).find((e) => e.hookId === hookId) ?? null)\r\n : null;\r\n\r\nconst finalizeEntry = (entry: QueueEntry<unknown>): void => {\r\n entry.requestId = null;\r\n entry.setUpdateTriggers.forEach((fn) => fn(updater));\r\n};\r\n\r\nconst getApiWorker = (): Worker => {\r\n if (apiWorker) return apiWorker;\r\n apiWorker = createApiWorker();\r\n return apiWorker;\r\n};\r\n\r\nconst ensureWorkerInitialized = (): Worker => {\r\n const worker = getApiWorker();\r\n if (workerInitialized) return worker;\r\n workerInitialized = true;\r\n\r\n if (!cleanupTimer) {\r\n cleanupTimer = setInterval(() => runStaleEntryCleanup(), CLEANUP_INTERVAL_MS);\r\n }\r\n\r\n // Worker always sends error ({ message: string }). Entry is found by cacheName or hookId.\r\n // Stream responses: start → chunk(s) → end; we accumulate chunks then set data = new Blob(chunks) on end.\r\n worker.onmessage = (event: MessageEvent<WorkerMessagePayload>) => {\r\n const msg = event.data;\r\n const cacheName = msg.cacheName;\r\n const hookId = msg.hookId;\r\n const error = msg.error;\r\n const key = cacheName ? normalizeKey(cacheName) : \"\";\r\n\r\n if (\"stream\" in msg && msg.stream) {\r\n const entry = findEntry(cacheName, hookId);\r\n if (!entry) return;\r\n if (msg.requestId != null && msg.requestId !== \"\" && entry.requestId !== msg.requestId) return;\r\n const batchSize = toNumber(entry.streamChunkBatchSize, DEFAULT_CHUNK_BATCH);\r\n switch (msg.stream) {\r\n case \"start\": {\r\n streamAccumulators[key] = { chunks: [], meta: msg.meta ?? null };\r\n streamThrottleState[key] = { pendingChunks: [] };\r\n entry.streamChunks = [];\r\n entry.meta = msg.meta ?? null;\r\n entry.setUpdateTriggers.forEach((fn) => fn(updater));\r\n return;\r\n }\r\n case \"resume\":\r\n if (!streamAccumulators[key]) streamAccumulators[key] = { chunks: [], meta: msg.meta ?? null };\r\n else if (msg.meta) streamAccumulators[key].meta = msg.meta;\r\n if (!streamThrottleState[key]) streamThrottleState[key] = { pendingChunks: [] };\r\n if (msg.meta) entry.meta = msg.meta ?? null;\r\n return;\r\n case \"chunk\": {\r\n const acc = streamAccumulators[key];\r\n const throttle = streamThrottleState[key];\r\n if (acc && msg.data) acc.chunks.push(msg.data);\r\n if (throttle && msg.data) {\r\n throttle.pendingChunks.push(msg.data);\r\n if (throttle.pendingChunks.length >= batchSize) {\r\n flushStreamBatch(key, entry);\r\n }\r\n }\r\n return;\r\n }\r\n case \"end\": {\r\n const acc = streamAccumulators[key];\r\n const throttle = streamThrottleState[key];\r\n if (throttle?.pendingChunks.length) flushStreamBatch(key, entry);\r\n delete streamThrottleState[key];\r\n delete streamAccumulators[key];\r\n const errMsg = error?.message ?? \"\";\r\n if (errMsg !== \"\") {\r\n entry.error = errMsg;\r\n entry.errorCode = error?.code ?? null;\r\n } else if (acc) {\r\n entry.data = new Blob(acc.chunks, acc.meta?.contentType ? { type: acc.meta.contentType } : undefined);\r\n entry.meta = acc.meta ?? null;\r\n entry.error = null;\r\n entry.errorCode = null;\r\n entry.lastActivityAt = Date.now();\r\n }\r\n entry.loading = false;\r\n finalizeEntry(entry);\r\n return;\r\n }\r\n }\r\n }\r\n\r\n const entry = findEntry(cacheName, hookId);\r\n if (!entry) return;\r\n if (msg.requestId != null && msg.requestId !== \"\" && entry.requestId !== msg.requestId) return;\r\n\r\n if (msg.type === \"delete\") {\r\n entry.data = null;\r\n entry.meta = null;\r\n entry.error = null;\r\n entry.errorCode = null;\r\n entry.loading = false;\r\n finalizeEntry(entry);\r\n return;\r\n }\r\n\r\n const message = error?.message ?? \"\";\r\n if (message !== \"\") {\r\n entry.error = message;\r\n entry.errorCode = error?.code ?? null;\r\n entry.loading = false;\r\n } else {\r\n entry.data = msg.data ?? null;\r\n entry.meta = msg.meta ?? null;\r\n entry.lastActivityAt = Date.now();\r\n entry.error = null;\r\n entry.errorCode = null;\r\n entry.loading = false;\r\n }\r\n finalizeEntry(entry);\r\n };\r\n\r\n return worker;\r\n};\r\n\r\n// ============================================================================\r\n// HOOK\r\n// ============================================================================\r\n\r\nexport type { RequestConfig, UseApiWorkerConfig, UseApiWorkerReturn } from \"../types/types\";\r\n\r\nexport const useApiWorker = <T>(config: UseApiWorkerConfig): UseApiWorkerReturn<T> | null => {\r\n if (!window) return null;\r\n const { cacheName, request: requestConfig, data: configData, runMode = \"auto\", enabled = true } = config;\r\n\r\n const worker = ensureWorkerInitialized();\r\n\r\n const hookIdRef = useRef<string>(\"\");\r\n const queueKey = normalizeKey(cacheName);\r\n\r\n const hasExecutedRef = useRef(false);\r\n const [, setUpdateTrigger] = useState(0);\r\n\r\n let storeEntry = responseQueue[queueKey];\r\n\r\n if (!storeEntry) {\r\n const hookId = uniqueId();\r\n storeEntry = responseQueue[queueKey] = {\r\n hookId,\r\n cacheName,\r\n data: null,\r\n loading: false,\r\n error: null,\r\n errorCode: null,\r\n setUpdateTriggers: new Set(),\r\n requestId: null,\r\n meta: null,\r\n lastActivityAt: null,\r\n };\r\n hookIdRef.current = hookId;\r\n } else {\r\n hookIdRef.current = storeEntry.hookId;\r\n storeEntry.lastActivityAt = Date.now();\r\n }\r\n const entry = storeEntry;\r\n\r\n const hookId = hookIdRef.current;\r\n\r\n useEffect(() => {\r\n responseQueue[queueKey]?.setUpdateTriggers.add(setUpdateTrigger);\r\n return () => {\r\n const storeEntry = responseQueue[queueKey];\r\n if (!storeEntry) return;\r\n storeEntry.setUpdateTriggers.delete(setUpdateTrigger);\r\n if (storeEntry.setUpdateTriggers.size === 0) {\r\n const requestId = storeEntry.requestId;\r\n if (requestId) {\r\n worker.postMessage({ dataRequest: { type: \"cancel\", cacheName, requestId } });\r\n }\r\n }\r\n };\r\n }, [queueKey, cacheName, worker]);\r\n\r\n const deleteCache = () => {\r\n if (cacheName) {\r\n worker.postMessage({\r\n dataRequest: { type: \"delete\", cacheName, hookId: hookIdRef.current },\r\n });\r\n }\r\n };\r\n\r\n const doRequest = () => {\r\n const entry = responseQueue[queueKey];\r\n if (!entry || entry.loading) return;\r\n entry.loading = true;\r\n entry.error = null;\r\n entry.errorCode = null;\r\n entry.lastActivityAt = Date.now();\r\n entry.setUpdateTriggers.forEach((fn) => fn(updater));\r\n if (requestConfig) {\r\n const requestId = uniqueId();\r\n entry.requestId = requestId;\r\n const isStream = requestConfig.responseType?.toLocaleLowerCase() === \"stream\";\r\n if (isStream) {\r\n entry.streamChunkBatchSize = toNumber(requestConfig.streamChunkBatchSize, DEFAULT_CHUNK_BATCH);\r\n }\r\n const request =\r\n isStream && requestConfig.retries === undefined ? { ...requestConfig, retries: 3 } : requestConfig;\r\n worker.postMessage({\r\n dataRequest: { type: \"set\", cacheName, hookId, requestId, payload: configData, request },\r\n });\r\n } else {\r\n worker.postMessage({ dataRequest: { type: \"get\", cacheName, hookId } as DataRequest<unknown> });\r\n }\r\n hasExecutedRef.current = true;\r\n };\r\n\r\n const makeRequest = () => {\r\n if (!enabled || (runMode === \"once\" && hasExecutedRef.current)) return;\r\n doRequest();\r\n };\r\n\r\n const hasAlreadyRunOnce = runMode === \"once\" && hasExecutedRef.current;\r\n const shouldRun = (runMode === \"auto\" || runMode === \"once\") && enabled && (requestConfig || cacheName);\r\n if (shouldRun && !hasAlreadyRunOnce && !entry.loading) {\r\n doRequest();\r\n }\r\n return {\r\n data: (entry.data as T) ?? null,\r\n meta: entry.meta ?? null,\r\n loading: entry.loading ?? false,\r\n error: entry.error ?? null,\r\n errorCode: entry.errorCode ?? null,\r\n refetch: makeRequest,\r\n deleteCache,\r\n streamChunks: toStreamChunks(entry.streamChunks),\r\n };\r\n};\r\n"],"names":["entry","hookId","storeEntry","requestId"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- export { B as BinaryParseResult, b as BinaryResponseMeta, C as ContentType, D as DataRequest, R as RequestConfig, c as ResponseType, d as RunMode, W as WorkerDataRequestType, e as WorkerErrorPayload, f as WorkerMessageData, g as WorkerMessagePayload, h as WorkerResponseMessage } from '../../types-LYmxol0c.js';
1
+ export { B as BinaryParseResult, b as BinaryResponseMeta, D as DataRequest, R as RequestConfig, c as ResponseType, d as RunMode, W as WorkerDataRequestType, e as WorkerErrorCode, f as WorkerErrorPayload, g as WorkerMessageData, h as WorkerMessagePayload, i as WorkerResponseMessage, j as WorkerResponseType } from '../../types-C6nnvGO7.js';
2
2
 
3
3
  /**
4
4
  * Creates a Worker instance for the API request worker.
@@ -1,4 +1,4 @@
1
- const createApiWorker = () => new Worker(new URL("../../workers/api/api.worker.js", import.meta.url), { type: "module" });
1
+ const createApiWorker = () => new Worker(new URL("../workers/api/api.worker.js", import.meta.url), { type: "module" });
2
2
 
3
3
  export { createApiWorker };
4
4
  //# sourceMappingURL=vanilla.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"vanilla.js","sources":["../../../src/shared/utils/createApiWorker.ts"],"sourcesContent":["/**\r\n * Creates a Worker instance for the API request worker.\r\n * Use this for vanilla JS/TS or to build your own framework integration.\r\n */\r\nexport const createApiWorker = (): Worker =>\r\n new Worker(new URL(\"../../workers/api/api.worker.js\", import.meta.url), { type: \"module\" });\r\n"],"names":[],"mappings":"AAIO,MAAM,eAAA,GAAkB,MAC7B,IAAI,MAAA,CAAO,IAAI,GAAA,CAAI,iCAAA,EAAmC,MAAA,CAAA,IAAA,CAAY,GAAG,CAAA,EAAG,EAAE,IAAA,EAAM,UAAU;;;;"}
1
+ {"version":3,"file":"vanilla.js","sources":["../../../src/shared/utils/createApiWorker.ts"],"sourcesContent":["/**\r\n * Creates a Worker instance for the API request worker.\r\n * Use this for vanilla JS/TS or to build your own framework integration.\r\n */\r\nexport const createApiWorker = (): Worker =>\r\n new Worker(new URL(\"../workers/api/api.worker.js\", import.meta.url), { type: \"module\" });\r\n"],"names":[],"mappings":"AAIO,MAAM,eAAA,GAAkB,MAC7B,IAAI,MAAA,CAAO,IAAI,GAAA,CAAI,8BAAA,EAAgC,MAAA,CAAA,IAAA,CAAY,GAAG,CAAA,EAAG,EAAE,IAAA,EAAM,UAAU;;;;"}
@@ -1,4 +1,7 @@
1
- /** When "binary" or "stream", in-flight dedupe is skipped so we always run the request and return real response (no stale). */
1
+ /**
2
+ * When "binary" or "stream", in-flight dedupe is skipped so we always run the request and return real response (no stale).
3
+ * Note: does not affect response parsing — Content-Type always governs the parse path.
4
+ */
2
5
  type ResponseType = "json" | "binary" | "stream";
3
6
  interface RequestConfig {
4
7
  url: string;
@@ -6,7 +9,7 @@ interface RequestConfig {
6
9
  mode?: "cors" | "no-cors" | "navigate" | "same-origin";
7
10
  headers?: Record<string, string>;
8
11
  credentials?: "include" | "same-origin" | "omit";
9
- /** Omit or "json": allow in-flight dedupe. "binary" or "stream": no early return, always process request. */
12
+ /** Omit or "json": allow in-flight dedupe. "binary" or "stream": no early return, always process request. Does not affect response parsing — Content-Type always governs the parse path. */
10
13
  responseType?: ResponseType;
11
14
  /** Abort request after this many milliseconds. */
12
15
  timeoutMs?: number;
@@ -49,72 +52,36 @@ type BinaryParseResult = {
49
52
  data: ArrayBuffer;
50
53
  contentType: string;
51
54
  } & Pick<BinaryResponseMeta, "contentDisposition">;
55
+ type WorkerResponseType = "result" | "delete" | "stream";
56
+ type WorkerErrorCode = "aborted" | "timeout" | "http" | "network" | "validation";
52
57
  /** Worker always sends this shape; no error = { message: "" }. */
53
58
  interface WorkerErrorPayload {
54
59
  message: string;
60
+ code?: WorkerErrorCode;
55
61
  }
56
62
  interface UseApiWorkerReturn<T> {
57
63
  data: T | null;
58
64
  meta: BinaryResponseMeta | null;
59
65
  loading: boolean;
60
66
  error: string | null;
67
+ errorCode: WorkerErrorCode | null;
61
68
  refetch: () => void;
62
69
  deleteCache: () => void;
63
70
  /** For responseType "stream": batch of chunks since last flush. Undefined for non-stream. */
64
71
  streamChunks?: ArrayBuffer[] | undefined;
65
72
  }
66
- /**
67
- * Worker response messages. Use in client onmessage handler:
68
- * - data + meta: binary response (data is ArrayBuffer). Reconstruct: new Blob([data], { type: meta?.contentType })
69
- * - data only: JSON/text response
70
- * - stream: "start" | "chunk" | "end" — client handles chunk sequence then finalizes
71
- * - error: error response with message and code
72
- */
73
- type WorkerResponseMessage = {
74
- cacheName: string;
75
- data: unknown;
76
- error: WorkerErrorPayload;
77
- } | {
78
- cacheName: string;
79
- data: ArrayBuffer;
80
- meta: BinaryResponseMeta;
81
- error: WorkerErrorPayload;
82
- } | {
83
- cacheName: string;
84
- error: WorkerErrorPayload;
85
- } | {
86
- cacheName: string;
87
- stream: "start";
88
- meta: BinaryResponseMeta | null;
89
- hookId?: string;
90
- httpStatus?: number;
91
- error: WorkerErrorPayload;
92
- } | {
93
- cacheName: string;
94
- stream: "resume";
95
- meta: BinaryResponseMeta | null;
96
- hookId?: string;
97
- httpStatus?: number;
98
- error: WorkerErrorPayload;
99
- } | {
100
- cacheName: string;
101
- stream: "chunk";
102
- data: ArrayBuffer;
103
- hookId?: string;
104
- error: WorkerErrorPayload;
105
- } | {
106
- cacheName: string;
107
- stream: "end";
108
- hookId?: string;
109
- error: WorkerErrorPayload;
110
- };
73
+ /** @deprecated Use WorkerMessagePayload. */
74
+ type WorkerResponseMessage = WorkerMessagePayload;
111
75
  /**
112
76
  * Payload shape for worker postMessage. Use for client onmessage:
113
77
  * MessageEvent<WorkerMessagePayload>. The worker always sends error (same shape: { message: string }).
114
78
  * No error = { message: "" }. With error = { message: "..." }.
79
+ * `type` disambiguates result, delete-ack, and stream messages. `requestId` echoes the originating request.
115
80
  * When stream is present, client receives start → chunk(s) → end; cancel via existing requestId/cancel.
116
81
  */
117
82
  type WorkerMessagePayload = {
83
+ type: "result" | "delete";
84
+ requestId?: string;
118
85
  cacheName?: string;
119
86
  data?: unknown;
120
87
  meta?: BinaryResponseMeta;
@@ -122,6 +89,8 @@ type WorkerMessagePayload = {
122
89
  hookId?: string;
123
90
  httpStatus?: number;
124
91
  } | {
92
+ type: "stream";
93
+ requestId?: string;
125
94
  cacheName: string;
126
95
  stream: "start";
127
96
  meta: BinaryResponseMeta | null;
@@ -129,6 +98,8 @@ type WorkerMessagePayload = {
129
98
  httpStatus?: number;
130
99
  error: WorkerErrorPayload;
131
100
  } | {
101
+ type: "stream";
102
+ requestId?: string;
132
103
  cacheName: string;
133
104
  stream: "resume";
134
105
  meta: BinaryResponseMeta | null;
@@ -136,20 +107,23 @@ type WorkerMessagePayload = {
136
107
  httpStatus?: number;
137
108
  error: WorkerErrorPayload;
138
109
  } | {
110
+ type: "stream";
111
+ requestId?: string;
139
112
  cacheName: string;
140
113
  stream: "chunk";
141
114
  data: ArrayBuffer;
142
115
  hookId?: string;
143
116
  error: WorkerErrorPayload;
144
117
  } | {
118
+ type: "stream";
119
+ requestId?: string;
145
120
  cacheName: string;
146
121
  stream: "end";
147
122
  hookId?: string;
148
123
  error: WorkerErrorPayload;
149
124
  };
150
- type ContentType = "application/json" | "application/xml" | "application/x-www-form-urlencoded" | "application/pdf" | "application/zip" | "application/gzip" | "application/octet-stream" | "application/javascript" | "application/ld+json" | "application/vnd.api+json" | "application/vnd.ms-excel" | "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" | "application/vnd.openxmlformats-officedocument.wordprocessingml.document" | "application/vnd.openxmlformats-officedocument.presentationml.presentation" | "text/plain" | "text/html" | "text/css" | "text/csv" | "text/javascript" | "text/xml" | "image/jpeg" | "image/png" | "image/gif" | "image/svg+xml" | "image/webp" | "image/bmp" | "image/tiff" | "image/x-icon" | "image/avif" | "audio/mpeg" | "audio/ogg" | "audio/wav" | "audio/webm" | "audio/aac" | "audio/midi" | "video/mp4" | "video/mpeg" | "video/webm" | "video/ogg" | "video/quicktime" | "video/x-msvideo" | "multipart/form-data" | "multipart/mixed" | "multipart/alternative" | "font/woff" | "font/woff2" | "font/ttf" | "font/otf";
151
125
  type WorkerMessageData = {
152
126
  dataRequest?: DataRequest<unknown>;
153
127
  };
154
128
 
155
- export type { BinaryParseResult as B, ContentType as C, DataRequest as D, RequestConfig as R, UseApiWorkerConfig as U, WorkerDataRequestType as W, UseApiWorkerReturn as a, BinaryResponseMeta as b, ResponseType as c, RunMode as d, WorkerErrorPayload as e, WorkerMessageData as f, WorkerMessagePayload as g, WorkerResponseMessage as h };
129
+ export type { BinaryParseResult as B, DataRequest as D, RequestConfig as R, UseApiWorkerConfig as U, WorkerDataRequestType as W, UseApiWorkerReturn as a, BinaryResponseMeta as b, ResponseType as c, RunMode as d, WorkerErrorCode as e, WorkerErrorPayload as f, WorkerMessageData as g, WorkerMessagePayload as h, WorkerResponseMessage as i, WorkerResponseType as j };