@mainframework/api-request-worker 1.0.2 → 1.0.3
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.
- package/dist/shared/output/react.d.ts +2 -2
- package/dist/shared/output/react.js +2 -2
- package/dist/shared/output/react.js.map +1 -1
- package/dist/shared/output/vanilla.d.ts +1 -1
- package/dist/{types-Bbz0QMYB.d.ts → types-LYmxol0c.d.ts} +1 -1
- package/dist/workers/api/api.worker.js +93 -48
- package/dist/workers/api/api.worker.js.map +1 -1
- package/package.json +14 -14
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { U as UseApiWorkerConfig,
|
|
2
|
-
export { R as RequestConfig } from '../../types-
|
|
1
|
+
import { U as UseApiWorkerConfig, a as UseApiWorkerReturn } from '../../types-LYmxol0c.js';
|
|
2
|
+
export { R as RequestConfig } from '../../types-LYmxol0c.js';
|
|
3
3
|
|
|
4
4
|
declare const useApiWorker: <T>(config: UseApiWorkerConfig) => UseApiWorkerReturn<T>;
|
|
5
5
|
|
|
@@ -7,12 +7,12 @@ const uniqueId = () => {
|
|
|
7
7
|
return idCounter.toString();
|
|
8
8
|
};
|
|
9
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,
|
|
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
11
|
|
|
12
12
|
const useCustomCallback = (callback, dependencies) => {
|
|
13
13
|
const refCallback = useRef(callback);
|
|
14
14
|
const refDependencies = useRef(dependencies);
|
|
15
|
-
if (!dependencies.every((dep, index) =>
|
|
15
|
+
if (!dependencies.every((dep, index) => A(dep, refDependencies.current[index]))) {
|
|
16
16
|
refDependencies.current = dependencies;
|
|
17
17
|
refCallback.current = callback;
|
|
18
18
|
}
|
|
@@ -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,a=e=>ArrayBuffer.isView(e)&&!(e instanceof DataView),s=e=>Object.getPrototypeOf(e),u=e=>null==e||\"object\"!=typeof e&&\"function\"!=typeof e,c=(l,y,p=new WeakMap,b={})=>{if(l===y)return!0;if(\"number\"==typeof l&&\"number\"==typeof y&&Number.isNaN(l)&&Number.isNaN(y))return!0;if(b.normalizeBoxedPrimitives&&(i(l)&&(l=l.valueOf()),i(y)&&(y=y.valueOf()),u(l)&&u(y)))return l===y;if(u(l)||u(y))return!1;if(t(l)||t(y))return l===y;if(!e(l)||!e(y))return!1;let g=p.get(l)??(()=>{const e=new WeakMap;return p.set(l,e),e})();const h=g.get(y);if(void 0!==h)return h;g.set(y,!0);const w=s(l),A=s(y);let m;return m=Array.isArray(l)&&Array.isArray(y)?((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(!c(e[o],t[o],r,n))return!1}return!0})(l,y,p,b):!Array.isArray(l)&&!Array.isArray(y)&&(r(l)&&r(y)?((e,t)=>e.getTime()===t.getTime())(l,y):n(l)&&n(y)?((e,t)=>e.source===t.source&&e.flags===t.flags)(l,y):a(l)&&a(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})(l,y):o(l)&&o(y)?((e,t,r,n)=>{if(e.size!==t.size)return!1;const o=Array.from(t),f=new Set;for(const t of e){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)&&c(t,o[e],r,n)){f.add(e),i=!0;break}if(!i)return!1}return!0})(l,y,p,b):f(l)&&f(y)?((e,t,r,n)=>{if(e.size!==t.size)return!1;const o=Array.from(t),f=new Set;for(const[i,a]of e){if(u(i)){const e=t.get(i);if(void 0===e&&!t.has(i))return!1;if(!c(a,e,r,n))return!1;continue}let e=!1;for(let t=0;t<o.length;t++)if(!f.has(t)){const[s,u]=o[t];if(c(i,s,r,n)&&c(a,u,r,n)){f.add(t),e=!0;break}}if(!e)return!1}return!0})(l,y,p,b):!(!b.allowPrototypeMismatch&&w!==A)&&((e,t,r,n)=>{let o=0;for(const f of Reflect.ownKeys(e)){if(!Object.prototype.hasOwnProperty.call(t,f))return!1;if(!c(e[f],t[f],r,n))return!1;o++}return Reflect.ownKeys(t).length===o})(l,y,p,b)),g.set(y,m),m},l=(e,t,r)=>c(e,t,new WeakMap,r);export{l as isEqual};\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":"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","x_google_ignoreList":[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":"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","x_google_ignoreList":[1]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { B as BinaryParseResult,
|
|
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';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* Creates a Worker instance for the API request worker.
|
|
@@ -152,4 +152,4 @@ type WorkerMessageData = {
|
|
|
152
152
|
dataRequest?: DataRequest<unknown>;
|
|
153
153
|
};
|
|
154
154
|
|
|
155
|
-
export type { BinaryParseResult as B, ContentType as C, DataRequest as D, RequestConfig as R, UseApiWorkerConfig as U, WorkerDataRequestType as W,
|
|
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 };
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
const BINARY_MARKER = /* @__PURE__ */ Symbol.for("WorkerApiBinary");
|
|
2
2
|
const DEFAULT_FILES_FIELD = "Files";
|
|
3
|
+
const EMPTY_BUFFER = new ArrayBuffer(0);
|
|
3
4
|
const NO_ERROR = { message: "" };
|
|
5
|
+
const DEFAULT_ERROR = "An error occurred";
|
|
4
6
|
const callerResponse = (cacheName, data, hookId, httpStatus, error = NO_ERROR) => {
|
|
5
7
|
self.postMessage({
|
|
6
8
|
cacheName,
|
|
@@ -12,18 +14,32 @@ const callerResponse = (cacheName, data, hookId, httpStatus, error = NO_ERROR) =
|
|
|
12
14
|
};
|
|
13
15
|
const makeError = (message) => ({ message });
|
|
14
16
|
const callerResponseBinary = (cacheName, data, meta, hookId, httpStatus, error = NO_ERROR) => {
|
|
15
|
-
const buffer = data
|
|
17
|
+
const buffer = data.byteLength ? data : EMPTY_BUFFER;
|
|
16
18
|
const payload = { cacheName, data: buffer, meta, hookId, httpStatus, error };
|
|
17
19
|
self.postMessage(payload, buffer.byteLength > 0 ? [buffer] : []);
|
|
18
20
|
};
|
|
19
21
|
const callerResponseStreamStart = (cacheName, meta, hookId, httpStatus, error = NO_ERROR) => {
|
|
20
|
-
self.postMessage({
|
|
22
|
+
self.postMessage({
|
|
23
|
+
cacheName,
|
|
24
|
+
stream: "start",
|
|
25
|
+
meta,
|
|
26
|
+
hookId,
|
|
27
|
+
httpStatus,
|
|
28
|
+
error
|
|
29
|
+
});
|
|
21
30
|
};
|
|
22
31
|
const callerResponseStreamResume = (cacheName, meta, hookId, httpStatus, error = NO_ERROR) => {
|
|
23
|
-
self.postMessage({
|
|
32
|
+
self.postMessage({
|
|
33
|
+
cacheName,
|
|
34
|
+
stream: "resume",
|
|
35
|
+
meta,
|
|
36
|
+
hookId,
|
|
37
|
+
httpStatus,
|
|
38
|
+
error
|
|
39
|
+
});
|
|
24
40
|
};
|
|
25
41
|
const callerResponseStreamChunk = (cacheName, data, hookId, error = NO_ERROR) => {
|
|
26
|
-
const buffer = data
|
|
42
|
+
const buffer = data.byteLength ? data : EMPTY_BUFFER;
|
|
27
43
|
const payload = { cacheName, stream: "chunk", data: buffer, hookId, error };
|
|
28
44
|
self.postMessage(payload, buffer.byteLength > 0 ? [buffer] : []);
|
|
29
45
|
};
|
|
@@ -53,7 +69,7 @@ const commit = (cacheName, data, hookId, httpStatus) => {
|
|
|
53
69
|
callerResponse("", null, hookId, void 0, makeError("Invalid commit: cacheName is required"));
|
|
54
70
|
return;
|
|
55
71
|
}
|
|
56
|
-
set(
|
|
72
|
+
set(cacheName, data);
|
|
57
73
|
callerResponse(cacheName, data, hookId, httpStatus);
|
|
58
74
|
};
|
|
59
75
|
const parseResponseByContentType = async (response) => {
|
|
@@ -63,7 +79,11 @@ const parseResponseByContentType = async (response) => {
|
|
|
63
79
|
return null;
|
|
64
80
|
}
|
|
65
81
|
if (contentType.includes("json")) {
|
|
66
|
-
|
|
82
|
+
const text = await response.text();
|
|
83
|
+
if (text.trim() === "") {
|
|
84
|
+
return null;
|
|
85
|
+
}
|
|
86
|
+
return JSON.parse(text);
|
|
67
87
|
}
|
|
68
88
|
if (contentType.startsWith("text/") || contentType.includes("xml") || contentType.includes("javascript") || contentType.includes("x-www-form-urlencoded")) {
|
|
69
89
|
return await response.text();
|
|
@@ -103,22 +123,20 @@ const appendToFormData = (formData, key, value, fileFieldName = DEFAULT_FILES_FI
|
|
|
103
123
|
let ki = 0;
|
|
104
124
|
while (ki < keys.length) {
|
|
105
125
|
const k = keys[ki];
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
) || hasFile;
|
|
114
|
-
}
|
|
126
|
+
hasFile = appendToFormData(
|
|
127
|
+
formData,
|
|
128
|
+
key ? `${key}.${k}` : k,
|
|
129
|
+
value[k],
|
|
130
|
+
fileFieldName,
|
|
131
|
+
set2
|
|
132
|
+
) || hasFile;
|
|
115
133
|
ki++;
|
|
116
134
|
}
|
|
117
135
|
return hasFile;
|
|
118
136
|
}
|
|
119
137
|
if (value !== void 0 && value !== null) {
|
|
120
138
|
const primitive = value;
|
|
121
|
-
formData.append(key, primitive);
|
|
139
|
+
formData.append(key, String(primitive));
|
|
122
140
|
}
|
|
123
141
|
return false;
|
|
124
142
|
};
|
|
@@ -151,13 +169,32 @@ const getPayloadType = (payload) => {
|
|
|
151
169
|
}
|
|
152
170
|
};
|
|
153
171
|
const buildJsonBody = (payload) => JSON.stringify(payload);
|
|
154
|
-
const buildUrlEncodedBody = (payload) =>
|
|
172
|
+
const buildUrlEncodedBody = (payload) => {
|
|
173
|
+
const params = new URLSearchParams();
|
|
174
|
+
const keys = Object.keys(payload);
|
|
175
|
+
let i = 0;
|
|
176
|
+
while (i < keys.length) {
|
|
177
|
+
const key = keys[i];
|
|
178
|
+
const value = payload[key];
|
|
179
|
+
if (value !== null && value !== void 0) {
|
|
180
|
+
if (typeof value === "object") {
|
|
181
|
+
throw new Error(`Cannot url-encode non-primitive value for key "${key}"`);
|
|
182
|
+
}
|
|
183
|
+
params.append(key, value.toString());
|
|
184
|
+
}
|
|
185
|
+
i++;
|
|
186
|
+
}
|
|
187
|
+
return params.toString();
|
|
188
|
+
};
|
|
155
189
|
const buildTextBody = (payload) => String(payload);
|
|
156
190
|
const prepareRequestBody = (payload, headers, options) => {
|
|
157
191
|
const payloadType = getPayloadType(payload);
|
|
158
192
|
switch (payloadType) {
|
|
159
193
|
case "formdata":
|
|
160
|
-
return {
|
|
194
|
+
return {
|
|
195
|
+
body: payload,
|
|
196
|
+
headers: omitContentType({ ...headers })
|
|
197
|
+
};
|
|
161
198
|
case "blob":
|
|
162
199
|
return { body: payload, headers: { ...headers } };
|
|
163
200
|
case "arraybuffer":
|
|
@@ -165,28 +202,31 @@ const prepareRequestBody = (payload, headers, options) => {
|
|
|
165
202
|
case "arraybufferview":
|
|
166
203
|
return { body: payload, headers: { ...headers } };
|
|
167
204
|
case "stream":
|
|
168
|
-
return {
|
|
205
|
+
return {
|
|
206
|
+
body: payload,
|
|
207
|
+
headers: { ...headers }
|
|
208
|
+
};
|
|
169
209
|
case "string":
|
|
170
210
|
return { body: payload, headers: { ...headers } };
|
|
171
211
|
case "object": {
|
|
172
|
-
const h = { ...headers };
|
|
173
|
-
const contentType = getContentType(h);
|
|
174
212
|
const fileFieldName = options?.formDataFileFieldName ?? DEFAULT_FILES_FIELD;
|
|
175
213
|
const formDataKey = options?.formDataKey ?? DEFAULT_FILES_FIELD;
|
|
214
|
+
const formData = createFormDataIfBlobOrFile(payload, fileFieldName, formDataKey);
|
|
215
|
+
if (formData) {
|
|
216
|
+
return { body: formData, headers: omitContentType({ ...headers }) };
|
|
217
|
+
}
|
|
218
|
+
const h = { ...headers };
|
|
219
|
+
let contentType = getContentType(h);
|
|
220
|
+
if (contentType.includes("multipart/form-data")) {
|
|
221
|
+
contentType = "application/json";
|
|
222
|
+
delete h["Content-Type"];
|
|
223
|
+
delete h["content-type"];
|
|
224
|
+
}
|
|
176
225
|
let body;
|
|
177
|
-
if (contentType.includes("application/
|
|
178
|
-
body = buildJsonBody(payload);
|
|
179
|
-
} else if (contentType.includes("application/x-www-form-urlencoded")) {
|
|
226
|
+
if (contentType.includes("application/x-www-form-urlencoded")) {
|
|
180
227
|
body = buildUrlEncodedBody(payload);
|
|
181
228
|
} else if (contentType.startsWith("text/") || contentType.includes("xml")) {
|
|
182
229
|
body = buildTextBody(payload);
|
|
183
|
-
} else if (contentType.includes("multipart/form-data")) {
|
|
184
|
-
const formData = createFormDataIfBlobOrFile(payload, fileFieldName, formDataKey);
|
|
185
|
-
if (formData) {
|
|
186
|
-
return { body: formData, headers: omitContentType(h) };
|
|
187
|
-
}
|
|
188
|
-
body = buildJsonBody(payload);
|
|
189
|
-
h["Content-Type"] = "application/json";
|
|
190
230
|
} else {
|
|
191
231
|
body = buildJsonBody(payload);
|
|
192
232
|
}
|
|
@@ -242,18 +282,18 @@ const apiRequest = async (cacheName, payload, {
|
|
|
242
282
|
credentials,
|
|
243
283
|
signal: controller.signal
|
|
244
284
|
};
|
|
245
|
-
if (methodLower !== "get" && payload != null) {
|
|
246
|
-
const prepareOptions = {};
|
|
247
|
-
if (formDataFileFieldName != null && formDataFileFieldName !== "")
|
|
248
|
-
prepareOptions.formDataFileFieldName = formDataFileFieldName;
|
|
249
|
-
if (formDataKey != null && formDataKey !== "") prepareOptions.formDataKey = formDataKey;
|
|
250
|
-
const { body, headers: processedHeaders } = prepareRequestBody(payload, headers, prepareOptions);
|
|
251
|
-
if (body !== void 0) fetchOptions.body = body;
|
|
252
|
-
fetchOptions.headers = processedHeaders;
|
|
253
|
-
} else {
|
|
254
|
-
fetchOptions.headers = omitContentType({ ...headers });
|
|
255
|
-
}
|
|
256
285
|
try {
|
|
286
|
+
if (methodLower !== "get" && payload != null) {
|
|
287
|
+
const prepareOptions = {};
|
|
288
|
+
if (formDataFileFieldName != null && formDataFileFieldName !== "")
|
|
289
|
+
prepareOptions.formDataFileFieldName = formDataFileFieldName;
|
|
290
|
+
if (formDataKey != null && formDataKey !== "") prepareOptions.formDataKey = formDataKey;
|
|
291
|
+
const { body, headers: processedHeaders } = prepareRequestBody(payload, headers, prepareOptions);
|
|
292
|
+
if (body !== void 0) fetchOptions.body = body;
|
|
293
|
+
fetchOptions.headers = processedHeaders;
|
|
294
|
+
} else {
|
|
295
|
+
fetchOptions.headers = omitContentType({ ...headers });
|
|
296
|
+
}
|
|
257
297
|
if (responseTypeLower === "stream") {
|
|
258
298
|
const maxRetries = Math.min(retries ?? 3, 5);
|
|
259
299
|
let bytesReceived = 0;
|
|
@@ -261,11 +301,14 @@ const apiRequest = async (cacheName, payload, {
|
|
|
261
301
|
let attempt = 0;
|
|
262
302
|
while (attempt <= maxRetries) {
|
|
263
303
|
try {
|
|
264
|
-
const reqHeaders = methodLower === "get" ? omitContentType({ ...fetchOptions.headers }) : fetchOptions.headers;
|
|
304
|
+
const reqHeaders = methodLower === "get" ? omitContentType({ ...fetchOptions.headers }) : { ...fetchOptions.headers };
|
|
265
305
|
if (bytesReceived > 0) reqHeaders["Range"] = `bytes=${bytesReceived}-`;
|
|
266
|
-
const streamResponse = await fetch(url, {
|
|
306
|
+
const streamResponse = await fetch(url, {
|
|
307
|
+
...fetchOptions,
|
|
308
|
+
headers: reqHeaders
|
|
309
|
+
});
|
|
267
310
|
if (streamResponse.status >= 400) {
|
|
268
|
-
streamError = makeError(streamResponse.statusText);
|
|
311
|
+
streamError = makeError(streamResponse.statusText || DEFAULT_ERROR);
|
|
269
312
|
break;
|
|
270
313
|
}
|
|
271
314
|
if (streamResponse.status === 204) {
|
|
@@ -318,11 +361,11 @@ const apiRequest = async (cacheName, payload, {
|
|
|
318
361
|
}
|
|
319
362
|
const response = await fetch(url, fetchOptions);
|
|
320
363
|
if (response.status >= 400) {
|
|
321
|
-
callerResponse(cacheName, null, hookId, response.status, makeError(response.statusText));
|
|
364
|
+
callerResponse(cacheName, null, hookId, response.status, makeError(response.statusText || DEFAULT_ERROR));
|
|
322
365
|
return;
|
|
323
366
|
}
|
|
324
367
|
if (response.status === 204) {
|
|
325
|
-
set(
|
|
368
|
+
set(cacheName, null);
|
|
326
369
|
callerResponse(cacheName, null, hookId, 204);
|
|
327
370
|
return;
|
|
328
371
|
}
|
|
@@ -356,7 +399,9 @@ const apiRequest = async (cacheName, payload, {
|
|
|
356
399
|
inFlightByCacheName.delete(cacheName);
|
|
357
400
|
}
|
|
358
401
|
})();
|
|
359
|
-
|
|
402
|
+
if (!skipInFlightDedupe) {
|
|
403
|
+
inFlightByCacheName.set(cacheName, promise);
|
|
404
|
+
}
|
|
360
405
|
await promise;
|
|
361
406
|
};
|
|
362
407
|
const onRequest = (dataRequest) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.worker.js","sources":["../../../src/shared/workers/api/api.worker.ts"],"sourcesContent":["/// <reference lib=\"webworker\" />\r\n\r\nimport type {\r\n AbortControllers,\r\n BinaryParseResult,\r\n BinaryResponseMeta,\r\n DataRequest,\r\n WorkerApiRequest,\r\n WorkerErrorPayload,\r\n WorkerMessageData,\r\n} from \"../../types/types\";\r\n\r\nexport const BINARY_MARKER = Symbol.for(\"WorkerApiBinary\");\r\n\r\nconst DEFAULT_FILES_FIELD = \"Files\";\r\n\r\nconst NO_ERROR: WorkerErrorPayload = { message: \"\" };\r\n\r\nconst callerResponse = (\r\n cacheName: string,\r\n data: unknown,\r\n hookId?: string | null,\r\n httpStatus?: number,\r\n error: WorkerErrorPayload = NO_ERROR,\r\n): void => {\r\n self.postMessage({\r\n cacheName,\r\n data: error.message !== \"\" ? null : (data ?? null),\r\n hookId,\r\n httpStatus,\r\n error,\r\n });\r\n};\r\n\r\nconst makeError = (message: string): WorkerErrorPayload => ({ message });\r\n\r\n/**\r\n * Binary response - transferred via postMessage, not stored in cache.\r\n * Client receives ArrayBuffer + meta for reconstruction (e.g. new Blob([data], { type })).\r\n * Always sends a message; empty/zero-length body uses an empty ArrayBuffer so the client does not hang.\r\n */\r\nconst callerResponseBinary = (\r\n cacheName: string,\r\n data: ArrayBuffer,\r\n meta: BinaryResponseMeta,\r\n hookId?: string | null,\r\n httpStatus?: number,\r\n error: WorkerErrorPayload = NO_ERROR,\r\n): void => {\r\n const buffer = data?.byteLength ? data : new ArrayBuffer(0);\r\n const payload = { cacheName, data: buffer, meta, hookId, httpStatus, error };\r\n self.postMessage(payload, buffer.byteLength > 0 ? [buffer] : []);\r\n};\r\n\r\nconst callerResponseStreamStart = (\r\n cacheName: string,\r\n meta: BinaryResponseMeta | null,\r\n hookId?: string | null,\r\n httpStatus?: number,\r\n error: WorkerErrorPayload = NO_ERROR,\r\n): void => {\r\n self.postMessage({ cacheName, stream: \"start\", meta, hookId, httpStatus, error });\r\n};\r\n\r\nconst callerResponseStreamResume = (\r\n cacheName: string,\r\n meta: BinaryResponseMeta | null,\r\n hookId?: string | null,\r\n httpStatus?: number,\r\n error: WorkerErrorPayload = NO_ERROR,\r\n): void => {\r\n self.postMessage({ cacheName, stream: \"resume\", meta, hookId, httpStatus, error });\r\n};\r\n\r\nconst callerResponseStreamChunk = (\r\n cacheName: string,\r\n data: ArrayBuffer,\r\n hookId?: string | null,\r\n error: WorkerErrorPayload = NO_ERROR,\r\n): void => {\r\n const buffer = data?.byteLength ? data : new ArrayBuffer(0);\r\n const payload = { cacheName, stream: \"chunk\", data: buffer, hookId, error };\r\n self.postMessage(payload, buffer.byteLength > 0 ? [buffer] : []);\r\n};\r\n\r\nconst callerResponseStreamEnd = (\r\n cacheName: string,\r\n hookId?: string | null,\r\n error: WorkerErrorPayload = NO_ERROR,\r\n): void => {\r\n self.postMessage({ cacheName, stream: \"end\", hookId, error });\r\n};\r\n\r\nconst transferableBuffer = (view: Uint8Array): ArrayBuffer =>\r\n view.byteOffset === 0 && view.byteLength === view.buffer.byteLength\r\n ? (view.buffer as ArrayBuffer)\r\n : view.slice(0).buffer;\r\n\r\nconst store = Object.create(null) as Record<string, unknown>;\r\nconst normalizeKey = (key: string) => key.toLocaleLowerCase();\r\nconst get = <TData>(key: string): TData | undefined => store[normalizeKey(key)] as TData | undefined;\r\nconst set = <TData>(key: string, value: TData): void => {\r\n store[normalizeKey(key)] = value;\r\n};\r\nconst remove = (key: string): void => {\r\n delete store[normalizeKey(key)];\r\n};\r\n\r\nconst isNonEmptyString = (v: unknown): v is string => typeof v === \"string\" && v.trim() !== \"\";\r\n\r\n/** Returns headers without Content-Type (either casing). Use when FormData sets it automatically. */\r\nconst omitContentType = (headers: Record<string, string>): Record<string, string> => {\r\n const rest = { ...headers };\r\n delete rest[\"Content-Type\"];\r\n delete rest[\"content-type\"];\r\n return rest;\r\n};\r\n\r\nconst isBinaryResponse = (r: unknown): r is BinaryParseResult =>\r\n typeof r === \"object\" &&\r\n r !== null &&\r\n BINARY_MARKER in r &&\r\n (r as unknown as BinaryParseResult).data instanceof ArrayBuffer;\r\n\r\nconst commit = <TData>(cacheName: string, data: TData, hookId?: string | null, httpStatus?: number): void => {\r\n if (!cacheName) {\r\n callerResponse(\"\", null, hookId, undefined, makeError(\"Invalid commit: cacheName is required\"));\r\n return;\r\n }\r\n set(normalizeKey(cacheName), data);\r\n callerResponse(cacheName, data, hookId, httpStatus);\r\n};\r\n\r\n/**\r\n * Parses response based on content-type.\r\n * Returns parsed data for JSON/text, or binary result with BINARY_MARKER, data (ArrayBuffer), contentType, contentDisposition.\r\n */\r\nconst parseResponseByContentType = async (response: Response): Promise<unknown> => {\r\n const contentType = response.headers.get(\"content-type\")?.toLocaleLowerCase() || \"\";\r\n const contentLength = response.headers.get(\"content-length\");\r\n\r\n // No content\r\n if (response.status === 204 || contentLength === \"0\") {\r\n return null;\r\n }\r\n\r\n // JSON types - let it throw if malformed\r\n if (contentType.includes(\"json\")) {\r\n return await response.json();\r\n }\r\n\r\n // Text-based types\r\n if (\r\n contentType.startsWith(\"text/\") ||\r\n contentType.includes(\"xml\") ||\r\n contentType.includes(\"javascript\") ||\r\n contentType.includes(\"x-www-form-urlencoded\")\r\n ) {\r\n return await response.text();\r\n }\r\n\r\n // Binary types (known or fallback) - use arrayBuffer for zero-copy transfer to client\r\n const arrayBuffer = await response.arrayBuffer();\r\n return {\r\n [BINARY_MARKER]: true as const,\r\n data: arrayBuffer,\r\n contentType,\r\n contentDisposition: response.headers.get(\"content-disposition\"),\r\n };\r\n};\r\n\r\n/** File/Blob use fileFieldName (default \"Files\"); all other fields use property name (key). */\r\nconst appendToFormData = (\r\n formData: FormData,\r\n key: string,\r\n value: unknown,\r\n fileFieldName: string = DEFAULT_FILES_FIELD,\r\n visited?: WeakSet<object>,\r\n): boolean => {\r\n if (value instanceof File) {\r\n formData.append(fileFieldName, value, value.name);\r\n return true;\r\n }\r\n\r\n if (value instanceof Blob) {\r\n formData.append(fileFieldName, value, \"blob\");\r\n return true;\r\n }\r\n\r\n if (value !== null && value !== undefined && typeof value === \"object\") {\r\n const set = visited ?? new WeakSet<object>();\r\n if (set.has(value)) return false;\r\n set.add(value);\r\n if (Array.isArray(value)) {\r\n let hasFile = false;\r\n let i = 0;\r\n while (i < value.length) {\r\n hasFile = appendToFormData(formData, key ? `${key}.${i}` : String(i), value[i], fileFieldName, set) || hasFile;\r\n i++;\r\n }\r\n return hasFile;\r\n }\r\n let hasFile = false;\r\n const keys = Object.keys(value);\r\n let ki = 0;\r\n while (ki < keys.length) {\r\n const k = keys[ki] as string;\r\n if (Object.prototype.hasOwnProperty.call(value, k)) {\r\n hasFile =\r\n appendToFormData(\r\n formData,\r\n key ? `${key}.${k}` : k,\r\n (value as Record<string, unknown>)[k],\r\n fileFieldName,\r\n set,\r\n ) || hasFile;\r\n }\r\n ki++;\r\n }\r\n return hasFile;\r\n }\r\n\r\n if (value !== undefined && value !== null) {\r\n const primitive = value as string | number | boolean | bigint | symbol;\r\n formData.append(key, primitive as string | Blob);\r\n }\r\n return false;\r\n};\r\n\r\nconst createFormDataIfBlobOrFile = (\r\n payload: unknown,\r\n fileFieldName: string = DEFAULT_FILES_FIELD,\r\n formDataKey: string = DEFAULT_FILES_FIELD,\r\n): FormData | null => {\r\n if (payload === null || payload === undefined || typeof payload !== \"object\") {\r\n return null;\r\n }\r\n\r\n const formData = new FormData();\r\n const visited = new WeakSet<object>();\r\n const hasFile = appendToFormData(formData, formDataKey, payload, fileFieldName, visited);\r\n return hasFile ? formData : null;\r\n};\r\n\r\nconst getContentType = (headers: Record<string, string> = {}): string =>\r\n headers[\"Content-Type\"] || headers[\"content-type\"] || \"application/json\";\r\n\r\nconst getPayloadType = (payload: unknown): string => {\r\n switch (true) {\r\n case payload instanceof FormData:\r\n return \"formdata\";\r\n case payload instanceof Blob:\r\n return \"blob\";\r\n case payload instanceof ArrayBuffer:\r\n return \"arraybuffer\";\r\n case ArrayBuffer.isView(payload):\r\n return \"arraybufferview\";\r\n case typeof ReadableStream !== \"undefined\" && payload instanceof ReadableStream:\r\n return \"stream\";\r\n case typeof payload === \"string\":\r\n return \"string\";\r\n default:\r\n return \"object\";\r\n }\r\n};\r\n\r\nconst buildJsonBody = (payload: unknown): BodyInit => JSON.stringify(payload);\r\nconst buildUrlEncodedBody = (payload: Record<string, string>): BodyInit => new URLSearchParams(payload).toString();\r\nconst buildTextBody = (payload: unknown): BodyInit => String(payload);\r\n\r\n/**\r\n * Builds body and headers for fetch. Each branch handles one payload type; add new cases here for new body types.\r\n */\r\nconst prepareRequestBody = (\r\n payload: unknown,\r\n headers: Record<string, string>,\r\n options?: { formDataFileFieldName?: string; formDataKey?: string },\r\n): { body?: BodyInit; headers: Record<string, string> } => {\r\n const payloadType = getPayloadType(payload);\r\n\r\n switch (payloadType) {\r\n case \"formdata\":\r\n return { body: payload as FormData, headers: omitContentType({ ...headers }) };\r\n case \"blob\":\r\n return { body: payload as Blob, headers: { ...headers } };\r\n case \"arraybuffer\":\r\n return { body: payload as ArrayBuffer, headers: { ...headers } };\r\n case \"arraybufferview\":\r\n return { body: payload as BodyInit, headers: { ...headers } };\r\n case \"stream\":\r\n return { body: payload as ReadableStream<Uint8Array>, headers: { ...headers } };\r\n case \"string\":\r\n return { body: payload as string, headers: { ...headers } };\r\n case \"object\": {\r\n const h = { ...headers };\r\n const contentType = getContentType(h);\r\n const fileFieldName = options?.formDataFileFieldName ?? DEFAULT_FILES_FIELD;\r\n const formDataKey = options?.formDataKey ?? DEFAULT_FILES_FIELD;\r\n\r\n let body: BodyInit;\r\n if (contentType.includes(\"application/json\")) {\r\n body = buildJsonBody(payload);\r\n } else if (contentType.includes(\"application/x-www-form-urlencoded\")) {\r\n body = buildUrlEncodedBody(payload as Record<string, string>);\r\n } else if (contentType.startsWith(\"text/\") || contentType.includes(\"xml\")) {\r\n body = buildTextBody(payload);\r\n } else if (contentType.includes(\"multipart/form-data\")) {\r\n const formData = createFormDataIfBlobOrFile(payload, fileFieldName, formDataKey);\r\n if (formData) {\r\n return { body: formData, headers: omitContentType(h) };\r\n }\r\n body = buildJsonBody(payload);\r\n h[\"Content-Type\"] = \"application/json\";\r\n } else {\r\n body = buildJsonBody(payload);\r\n }\r\n\r\n if (!h[\"Content-Type\"] && !h[\"content-type\"]) {\r\n h[\"Content-Type\"] = contentType;\r\n }\r\n return { body, headers: h };\r\n }\r\n\r\n default:\r\n return { headers: { ...headers } };\r\n }\r\n};\r\n\r\nconst inFlightControllers: AbortControllers = new Map();\r\nconst inFlightByCacheName = new Map<string, Promise<void>>();\r\n\r\nconst apiRequest = async <TData>(\r\n cacheName: string,\r\n payload: TData | FormData | null,\r\n {\r\n url,\r\n method,\r\n headers = {},\r\n mode = \"cors\",\r\n credentials = \"same-origin\",\r\n responseType,\r\n timeoutMs,\r\n formDataFileFieldName,\r\n formDataKey,\r\n retries,\r\n }: WorkerApiRequest,\r\n requestId?: string | null,\r\n hookId?: string | null,\r\n): Promise<void> => {\r\n const methodLower = method.toLocaleLowerCase();\r\n const responseTypeLower = responseType?.toLocaleLowerCase();\r\n\r\n // Early return (cached then fresh) allowed for any HTTP method, except when response is binary or streaming.\r\n const skipInFlightDedupe = responseTypeLower === \"binary\" || responseTypeLower === \"stream\";\r\n if (!skipInFlightDedupe) {\r\n const existing = inFlightByCacheName.get(cacheName);\r\n if (existing) {\r\n const cached = get(cacheName);\r\n if (cached !== undefined) callerResponse(cacheName, cached, hookId);\r\n await existing;\r\n const fresh = get(cacheName);\r\n if (fresh !== undefined) callerResponse(cacheName, fresh, hookId);\r\n return;\r\n }\r\n }\r\n\r\n const controller = new AbortController();\r\n if (requestId) {\r\n inFlightControllers.set(requestId, controller);\r\n }\r\n\r\n let timeoutId: ReturnType<typeof setTimeout> | undefined;\r\n if (timeoutMs != null && timeoutMs > 0) {\r\n timeoutId = setTimeout(() => controller.abort(), timeoutMs);\r\n }\r\n\r\n const promise = (async (): Promise<void> => {\r\n const fetchOptions: RequestInit = {\r\n method,\r\n mode,\r\n credentials,\r\n signal: controller.signal,\r\n };\r\n\r\n if (methodLower !== \"get\" && payload != null) {\r\n const prepareOptions: { formDataFileFieldName?: string; formDataKey?: string } = {};\r\n if (formDataFileFieldName != null && formDataFileFieldName !== \"\")\r\n prepareOptions.formDataFileFieldName = formDataFileFieldName;\r\n if (formDataKey != null && formDataKey !== \"\") prepareOptions.formDataKey = formDataKey;\r\n const { body, headers: processedHeaders } = prepareRequestBody(payload, headers, prepareOptions);\r\n if (body !== undefined) fetchOptions.body = body;\r\n fetchOptions.headers = processedHeaders;\r\n } else {\r\n fetchOptions.headers = omitContentType({ ...headers });\r\n }\r\n\r\n try {\r\n if (responseTypeLower === \"stream\") {\r\n const maxRetries = Math.min(retries ?? 3, 5);\r\n let bytesReceived = 0;\r\n let streamError: WorkerErrorPayload = NO_ERROR;\r\n let attempt = 0;\r\n while (attempt <= maxRetries) {\r\n try {\r\n const reqHeaders =\r\n methodLower === \"get\" ? omitContentType({ ...fetchOptions.headers }) : fetchOptions.headers;\r\n if (bytesReceived > 0) reqHeaders[\"Range\"] = `bytes=${bytesReceived}-`;\r\n const streamResponse = await fetch(url, { ...fetchOptions, headers: reqHeaders });\r\n if (streamResponse.status >= 400) {\r\n streamError = makeError(streamResponse.statusText);\r\n break;\r\n }\r\n if (streamResponse.status === 204) {\r\n callerResponseStreamEnd(cacheName, hookId);\r\n return;\r\n }\r\n if (streamResponse.status === 416) break;\r\n const contentType = streamResponse.headers.get(\"content-type\") ?? undefined;\r\n const meta: BinaryResponseMeta = {\r\n contentDisposition: streamResponse.headers.get(\"content-disposition\") ?? null,\r\n ...(contentType !== undefined && { contentType }),\r\n };\r\n if (bytesReceived === 0) callerResponseStreamStart(cacheName, meta, hookId, streamResponse.status);\r\n else callerResponseStreamResume(cacheName, meta, hookId, streamResponse.status);\r\n const body = streamResponse.body;\r\n if (!body) {\r\n callerResponseStreamEnd(cacheName, hookId);\r\n return;\r\n }\r\n const reader = body.getReader();\r\n let skipRemaining = streamResponse.status === 200 && bytesReceived > 0 ? bytesReceived : 0;\r\n while (true) {\r\n const { done, value } = await reader.read();\r\n if (done) break;\r\n if (!value || value.byteLength === 0) continue;\r\n if (skipRemaining > 0) {\r\n if (value.byteLength <= skipRemaining) {\r\n skipRemaining -= value.byteLength;\r\n continue;\r\n }\r\n const offset = skipRemaining;\r\n skipRemaining = 0;\r\n const tail = value.subarray(offset);\r\n callerResponseStreamChunk(cacheName, transferableBuffer(tail), hookId);\r\n bytesReceived += tail.byteLength;\r\n } else {\r\n callerResponseStreamChunk(cacheName, transferableBuffer(value), hookId);\r\n bytesReceived += value.byteLength;\r\n }\r\n }\r\n break;\r\n } catch (err) {\r\n streamError =\r\n (err as Error).name === \"AbortError\" ? makeError(\"Request aborted\") : makeError((err as Error).message);\r\n if (attempt === maxRetries) break;\r\n }\r\n attempt++;\r\n }\r\n callerResponseStreamEnd(cacheName, hookId, streamError);\r\n return;\r\n }\r\n\r\n const response = await fetch(url, fetchOptions);\r\n\r\n if (response.status >= 400) {\r\n callerResponse(cacheName, null, hookId, response.status, makeError(response.statusText));\r\n return;\r\n }\r\n\r\n if (response.status === 204) {\r\n set(normalizeKey(cacheName), null);\r\n callerResponse(cacheName, null, hookId, 204);\r\n return;\r\n }\r\n\r\n const responseData = await parseResponseByContentType(response);\r\n\r\n if (isBinaryResponse(responseData)) {\r\n callerResponseBinary(\r\n cacheName,\r\n responseData.data,\r\n {\r\n contentType: responseData.contentType,\r\n contentDisposition: responseData.contentDisposition ?? null,\r\n },\r\n hookId,\r\n response.status,\r\n );\r\n } else {\r\n commit(cacheName, responseData, hookId, response.status);\r\n }\r\n } catch (error) {\r\n if ((error as Error).name === \"AbortError\") {\r\n callerResponse(cacheName, null, hookId, undefined, makeError(\"Request aborted\"));\r\n return;\r\n }\r\n const err = error as Error;\r\n callerResponse(cacheName, null, hookId, undefined, makeError(err.message));\r\n } finally {\r\n if (timeoutId != null) clearTimeout(timeoutId);\r\n if (requestId) {\r\n inFlightControllers.delete(requestId);\r\n }\r\n inFlightByCacheName.delete(cacheName);\r\n }\r\n })();\r\n\r\n inFlightByCacheName.set(cacheName, promise);\r\n await promise;\r\n};\r\n\r\nconst onRequest = <TData>(dataRequest: DataRequest<TData>): void => {\r\n const { cacheName, type, payload, request, requestId, hookId } = dataRequest;\r\n const responseCacheName = dataRequest.cacheName ?? \"\";\r\n\r\n if (!isNonEmptyString(type)) {\r\n callerResponse(responseCacheName, null, hookId, undefined, makeError(\"Invalid request: type is required\"));\r\n return;\r\n }\r\n const lowerType = normalizeKey(type);\r\n\r\n if (lowerType === \"cancel\") {\r\n if (requestId) onCancel(requestId);\r\n return;\r\n }\r\n\r\n if (!isNonEmptyString(cacheName)) {\r\n callerResponse(responseCacheName, null, hookId, undefined, makeError(\"Invalid request: cacheName is required\"));\r\n return;\r\n }\r\n const lowerCacheName = normalizeKey(cacheName);\r\n\r\n if (lowerType === \"get\") {\r\n const requestedData = get(lowerCacheName);\r\n if (requestedData === undefined) {\r\n callerResponse(lowerCacheName, null, hookId, undefined, makeError(\"Cache miss\"));\r\n } else {\r\n callerResponse(lowerCacheName, requestedData, hookId);\r\n }\r\n } else if (lowerType === \"set\") {\r\n if (!request) {\r\n if (payload == null) {\r\n callerResponse(\r\n responseCacheName,\r\n null,\r\n hookId,\r\n undefined,\r\n makeError(\"Invalid request: payload is required for set\"),\r\n );\r\n return;\r\n }\r\n set(lowerCacheName, payload);\r\n } else {\r\n const methodLower = normalizeKey(request.method);\r\n if (methodLower !== \"get\" && payload == null) {\r\n callerResponse(\r\n responseCacheName,\r\n null,\r\n hookId,\r\n undefined,\r\n makeError(\"Invalid request: payload is required for non-GET API request\"),\r\n );\r\n return;\r\n }\r\n void apiRequest(lowerCacheName, payload ?? null, request, requestId, hookId);\r\n }\r\n } else if (lowerType === \"delete\") {\r\n remove(lowerCacheName);\r\n callerResponse(lowerCacheName, { deleted: true }, hookId);\r\n }\r\n};\r\n\r\nconst onCancel = (requestId: string): void => {\r\n const controller = inFlightControllers.get(requestId);\r\n if (controller) {\r\n controller.abort();\r\n inFlightControllers.delete(requestId);\r\n }\r\n};\r\n\r\n/**\r\n * Incoming messages from the main thread. Expects payload shape { dataRequest?: DataRequest }.\r\n * Responses via postMessage: { cacheName, data?, meta?, hookId?, httpStatus?, error }.\r\n * error is always present: { message: \"\" } when no error, { message: \"...\" } when the request failed.\r\n */\r\nonmessage = (event: MessageEvent<WorkerMessageData>): void => {\r\n const payload = event.data;\r\n if (payload === null || typeof payload !== \"object\") return;\r\n const dataRequest = payload.dataRequest;\r\n if (dataRequest !== undefined) onRequest(dataRequest);\r\n};\r\n"],"names":["set","hasFile"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"api.worker.js","sources":["../../../src/shared/workers/api/api.worker.ts"],"sourcesContent":["/// <reference lib=\"webworker\" />\r\n\r\nimport type {\r\n AbortControllers,\r\n BinaryParseResult,\r\n BinaryResponseMeta,\r\n DataRequest,\r\n WorkerApiRequest,\r\n WorkerErrorPayload,\r\n WorkerMessageData,\r\n} from \"../../types/types\";\r\n\r\nexport const BINARY_MARKER = Symbol.for(\"WorkerApiBinary\");\r\n\r\nconst DEFAULT_FILES_FIELD = \"Files\";\r\nconst EMPTY_BUFFER = new ArrayBuffer(0);\r\nconst NO_ERROR: WorkerErrorPayload = { message: \"\" };\r\nconst DEFAULT_ERROR = \"An error occurred\";\r\n\r\nconst callerResponse = (\r\n cacheName: string,\r\n data: unknown,\r\n hookId?: string | null,\r\n httpStatus?: number,\r\n error: WorkerErrorPayload = NO_ERROR,\r\n): void => {\r\n self.postMessage({\r\n cacheName,\r\n data: error.message !== \"\" ? null : (data ?? null),\r\n hookId,\r\n httpStatus,\r\n error,\r\n });\r\n};\r\n\r\nconst makeError = (message: string): WorkerErrorPayload => ({ message });\r\n\r\n/**\r\n * Binary response - transferred via postMessage, not stored in cache.\r\n * Client receives ArrayBuffer + meta for reconstruction (e.g. new Blob([data], { type })).\r\n * Always sends a message; empty/zero-length body uses an empty ArrayBuffer so the client does not hang.\r\n */\r\nconst callerResponseBinary = (\r\n cacheName: string,\r\n data: ArrayBuffer,\r\n meta: BinaryResponseMeta,\r\n hookId?: string | null,\r\n httpStatus?: number,\r\n error: WorkerErrorPayload = NO_ERROR,\r\n): void => {\r\n const buffer = data.byteLength ? data : EMPTY_BUFFER;\r\n const payload = { cacheName, data: buffer, meta, hookId, httpStatus, error };\r\n self.postMessage(payload, buffer.byteLength > 0 ? [buffer] : []);\r\n};\r\n\r\nconst callerResponseStreamStart = (\r\n cacheName: string,\r\n meta: BinaryResponseMeta | null,\r\n hookId?: string | null,\r\n httpStatus?: number,\r\n error: WorkerErrorPayload = NO_ERROR,\r\n): void => {\r\n self.postMessage({\r\n cacheName,\r\n stream: \"start\",\r\n meta,\r\n hookId,\r\n httpStatus,\r\n error,\r\n });\r\n};\r\n\r\nconst callerResponseStreamResume = (\r\n cacheName: string,\r\n meta: BinaryResponseMeta | null,\r\n hookId?: string | null,\r\n httpStatus?: number,\r\n error: WorkerErrorPayload = NO_ERROR,\r\n): void => {\r\n self.postMessage({\r\n cacheName,\r\n stream: \"resume\",\r\n meta,\r\n hookId,\r\n httpStatus,\r\n error,\r\n });\r\n};\r\n\r\nconst callerResponseStreamChunk = (\r\n cacheName: string,\r\n data: ArrayBuffer,\r\n hookId?: string | null,\r\n error: WorkerErrorPayload = NO_ERROR,\r\n): void => {\r\n const buffer = data.byteLength ? data : EMPTY_BUFFER;\r\n const payload = { cacheName, stream: \"chunk\", data: buffer, hookId, error };\r\n self.postMessage(payload, buffer.byteLength > 0 ? [buffer] : []);\r\n};\r\n\r\nconst callerResponseStreamEnd = (\r\n cacheName: string,\r\n hookId?: string | null,\r\n error: WorkerErrorPayload = NO_ERROR,\r\n): void => {\r\n self.postMessage({ cacheName, stream: \"end\", hookId, error });\r\n};\r\n\r\nconst transferableBuffer = (view: Uint8Array): ArrayBuffer =>\r\n view.byteOffset === 0 && view.byteLength === view.buffer.byteLength\r\n ? (view.buffer as ArrayBuffer)\r\n : view.slice(0).buffer;\r\n\r\nconst store = Object.create(null) as Record<string, unknown>;\r\nconst normalizeKey = (key: string) => key.toLocaleLowerCase();\r\nconst get = <TData>(key: string): TData | undefined => store[normalizeKey(key)] as TData | undefined;\r\nconst set = <TData>(key: string, value: TData): void => {\r\n store[normalizeKey(key)] = value;\r\n};\r\nconst remove = (key: string): void => {\r\n delete store[normalizeKey(key)];\r\n};\r\n\r\nconst isNonEmptyString = (v: unknown): v is string => typeof v === \"string\" && v.trim() !== \"\";\r\n\r\n/** Returns headers without Content-Type (either casing). Use when FormData sets it automatically. */\r\nconst omitContentType = (headers: Record<string, string>): Record<string, string> => {\r\n const rest = { ...headers };\r\n delete rest[\"Content-Type\"];\r\n delete rest[\"content-type\"];\r\n return rest;\r\n};\r\n\r\nconst isBinaryResponse = (r: unknown): r is BinaryParseResult =>\r\n typeof r === \"object\" &&\r\n r !== null &&\r\n BINARY_MARKER in r &&\r\n (r as unknown as BinaryParseResult).data instanceof ArrayBuffer;\r\n\r\nconst commit = <TData>(cacheName: string, data: TData, hookId?: string | null, httpStatus?: number): void => {\r\n if (!cacheName) {\r\n callerResponse(\"\", null, hookId, undefined, makeError(\"Invalid commit: cacheName is required\"));\r\n return;\r\n }\r\n set(cacheName, data); // set() normalizes internally - avoid double-normalizing here\r\n callerResponse(cacheName, data, hookId, httpStatus);\r\n};\r\n\r\n/**\r\n * Parses response based on content-type.\r\n * Returns parsed data for JSON/text, or binary result with BINARY_MARKER, data (ArrayBuffer), contentType, contentDisposition.\r\n */\r\nconst parseResponseByContentType = async (response: Response): Promise<unknown> => {\r\n const contentType = response.headers.get(\"content-type\")?.toLocaleLowerCase() || \"\";\r\n const contentLength = response.headers.get(\"content-length\");\r\n\r\n // No content\r\n if (response.status === 204 || contentLength === \"0\") {\r\n return null;\r\n }\r\n\r\n // JSON types - read as text first since chunked responses (no Content-Length) can still be\r\n // empty; parsing \"\" directly with response.json() throws even though an empty JSON body is\r\n // a legitimate, recoverable case rather than a real parse failure.\r\n if (contentType.includes(\"json\")) {\r\n const text = await response.text();\r\n if (text.trim() === \"\") {\r\n return null;\r\n }\r\n return JSON.parse(text);\r\n }\r\n\r\n // Text-based types\r\n if (\r\n contentType.startsWith(\"text/\") ||\r\n contentType.includes(\"xml\") ||\r\n contentType.includes(\"javascript\") ||\r\n contentType.includes(\"x-www-form-urlencoded\")\r\n ) {\r\n return await response.text();\r\n }\r\n\r\n // Binary types (known or fallback) - use arrayBuffer for zero-copy transfer to client\r\n const arrayBuffer = await response.arrayBuffer();\r\n return {\r\n [BINARY_MARKER]: true as const,\r\n data: arrayBuffer,\r\n contentType,\r\n contentDisposition: response.headers.get(\"content-disposition\"),\r\n };\r\n};\r\n\r\n/** File/Blob use fileFieldName (default \"Files\"); all other fields use property name (key). */\r\nconst appendToFormData = (\r\n formData: FormData,\r\n key: string,\r\n value: unknown,\r\n fileFieldName: string = DEFAULT_FILES_FIELD,\r\n visited?: WeakSet<object>,\r\n): boolean => {\r\n if (value instanceof File) {\r\n formData.append(fileFieldName, value, value.name);\r\n return true;\r\n }\r\n\r\n if (value instanceof Blob) {\r\n formData.append(fileFieldName, value, \"blob\");\r\n return true;\r\n }\r\n\r\n if (value !== null && value !== undefined && typeof value === \"object\") {\r\n const set = visited ?? new WeakSet<object>();\r\n if (set.has(value)) return false;\r\n set.add(value);\r\n if (Array.isArray(value)) {\r\n let hasFile = false;\r\n let i = 0;\r\n while (i < value.length) {\r\n hasFile = appendToFormData(formData, key ? `${key}.${i}` : String(i), value[i], fileFieldName, set) || hasFile;\r\n i++;\r\n }\r\n return hasFile;\r\n }\r\n let hasFile = false;\r\n const keys = Object.keys(value);\r\n let ki = 0;\r\n while (ki < keys.length) {\r\n const k = keys[ki] as string;\r\n hasFile =\r\n appendToFormData(\r\n formData,\r\n key ? `${key}.${k}` : k,\r\n (value as Record<string, unknown>)[k],\r\n fileFieldName,\r\n set,\r\n ) || hasFile;\r\n\r\n ki++;\r\n }\r\n return hasFile;\r\n }\r\n\r\n if (value !== undefined && value !== null) {\r\n const primitive = value as string | number | boolean | bigint;\r\n formData.append(key, String(primitive));\r\n }\r\n return false;\r\n};\r\n\r\nconst createFormDataIfBlobOrFile = (\r\n payload: unknown,\r\n fileFieldName: string = DEFAULT_FILES_FIELD,\r\n formDataKey: string = DEFAULT_FILES_FIELD,\r\n): FormData | null => {\r\n if (payload === null || payload === undefined || typeof payload !== \"object\") {\r\n return null;\r\n }\r\n\r\n const formData = new FormData();\r\n const visited = new WeakSet<object>();\r\n const hasFile = appendToFormData(formData, formDataKey, payload, fileFieldName, visited);\r\n return hasFile ? formData : null;\r\n};\r\n\r\nconst getContentType = (headers: Record<string, string> = {}): string =>\r\n headers[\"Content-Type\"] || headers[\"content-type\"] || \"application/json\";\r\n\r\nconst getPayloadType = (payload: unknown): string => {\r\n switch (true) {\r\n case payload instanceof FormData:\r\n return \"formdata\";\r\n case payload instanceof Blob:\r\n return \"blob\";\r\n case payload instanceof ArrayBuffer:\r\n return \"arraybuffer\";\r\n case ArrayBuffer.isView(payload):\r\n return \"arraybufferview\";\r\n case typeof ReadableStream !== \"undefined\" && payload instanceof ReadableStream:\r\n return \"stream\";\r\n case typeof payload === \"string\":\r\n return \"string\";\r\n default:\r\n return \"object\";\r\n }\r\n};\r\n\r\nconst buildJsonBody = (payload: unknown): BodyInit => JSON.stringify(payload);\r\n\r\n/**\r\n * Builds a URL-encoded body from a flat object. Values must be primitives (string/number/boolean) -\r\n * nested objects/arrays cannot be represented and throw rather than silently serializing to\r\n * \"[object Object]\". null/undefined values are skipped.\r\n */\r\nconst buildUrlEncodedBody = (payload: Record<string, unknown>): BodyInit => {\r\n const params = new URLSearchParams();\r\n const keys = Object.keys(payload);\r\n let i = 0;\r\n while (i < keys.length) {\r\n const key = keys[i] as string;\r\n const value = payload[key];\r\n if (value !== null && value !== undefined) {\r\n if (typeof value === \"object\") {\r\n throw new Error(`Cannot url-encode non-primitive value for key \"${key}\"`);\r\n }\r\n //params.append(key, String(value as string | number | boolean | bigint));\r\n // params.append(key, String(value));\r\n params.append(key, (value as string | number | boolean | bigint).toString());\r\n }\r\n i++;\r\n }\r\n return params.toString();\r\n};\r\n\r\nconst buildTextBody = (payload: unknown): BodyInit => String(payload);\r\n\r\n/**\r\n * Builds body and headers for fetch. Each branch handles one payload type; add new cases here for new body types.\r\n *\r\n * Object payloads are always checked for nested File/Blob values first (createFormDataIfBlobOrFile).\r\n * If any are found, the request is automatically sent as multipart/form-data and any Content-Type\r\n * header the caller passed in is overwritten/omitted - the browser must set its own Content-Type\r\n * (including the multipart boundary) for the body to be parsed correctly server-side. Callers no\r\n * longer need to manually set Content-Type: multipart/form-data to get file uploads to work; it is\r\n * detected automatically, including files nested arbitrarily deep in the payload (e.g.\r\n * { photos: File[], videos: File[] }). Every File/Blob found is appended under the same\r\n * fileFieldName (default \"Files\", override via formDataFileFieldName) regardless of which property\r\n * it came from - this matches the common API convention of collecting all uploaded files under one\r\n * repeated field name. If a caller does pass Content-Type: multipart/form-data but the payload has\r\n * no actual File/Blob in it, we fall back to JSON and correct the header rather than sending a JSON\r\n * body mislabeled as multipart.\r\n */\r\nconst prepareRequestBody = (\r\n payload: unknown,\r\n headers: Record<string, string>,\r\n options?: { formDataFileFieldName?: string; formDataKey?: string },\r\n): { body?: BodyInit; headers: Record<string, string> } => {\r\n const payloadType = getPayloadType(payload);\r\n\r\n switch (payloadType) {\r\n case \"formdata\":\r\n return {\r\n body: payload as FormData,\r\n headers: omitContentType({ ...headers }),\r\n };\r\n case \"blob\":\r\n return { body: payload as Blob, headers: { ...headers } };\r\n case \"arraybuffer\":\r\n return { body: payload as ArrayBuffer, headers: { ...headers } };\r\n case \"arraybufferview\":\r\n return { body: payload as BodyInit, headers: { ...headers } };\r\n case \"stream\":\r\n return {\r\n body: payload as ReadableStream<Uint8Array>,\r\n headers: { ...headers },\r\n };\r\n case \"string\":\r\n return { body: payload as string, headers: { ...headers } };\r\n case \"object\": {\r\n const fileFieldName = options?.formDataFileFieldName ?? DEFAULT_FILES_FIELD;\r\n const formDataKey = options?.formDataKey ?? DEFAULT_FILES_FIELD;\r\n\r\n // Auto-detect File/Blob anywhere in the payload (including nested, e.g. { photos: File[] }).\r\n // If found, always send as multipart/form-data - Content-Type is omitted so the browser\r\n // sets it itself (including the boundary).\r\n const formData = createFormDataIfBlobOrFile(payload, fileFieldName, formDataKey);\r\n if (formData) {\r\n return { body: formData, headers: omitContentType({ ...headers }) };\r\n }\r\n\r\n const h = { ...headers };\r\n let contentType = getContentType(h);\r\n\r\n // No File/Blob found: a declared multipart/form-data would produce an invalid body\r\n // (JSON string labeled as multipart), so fall back to JSON and fix the header.\r\n if (contentType.includes(\"multipart/form-data\")) {\r\n contentType = \"application/json\";\r\n delete h[\"Content-Type\"];\r\n delete h[\"content-type\"];\r\n }\r\n\r\n let body: BodyInit;\r\n if (contentType.includes(\"application/x-www-form-urlencoded\")) {\r\n body = buildUrlEncodedBody(payload as Record<string, unknown>);\r\n } else if (contentType.startsWith(\"text/\") || contentType.includes(\"xml\")) {\r\n body = buildTextBody(payload);\r\n } else {\r\n body = buildJsonBody(payload);\r\n }\r\n\r\n if (!h[\"Content-Type\"] && !h[\"content-type\"]) {\r\n h[\"Content-Type\"] = contentType;\r\n }\r\n return { body, headers: h };\r\n }\r\n\r\n default:\r\n return { headers: { ...headers } };\r\n }\r\n};\r\n\r\nconst inFlightControllers: AbortControllers = new Map();\r\nconst inFlightByCacheName = new Map<string, Promise<void>>();\r\n\r\nconst apiRequest = async <TData>(\r\n cacheName: string,\r\n payload: TData | FormData | null,\r\n {\r\n url,\r\n method,\r\n headers = {},\r\n mode = \"cors\",\r\n credentials = \"same-origin\",\r\n responseType,\r\n timeoutMs,\r\n formDataFileFieldName,\r\n formDataKey,\r\n retries,\r\n }: WorkerApiRequest,\r\n requestId?: string | null,\r\n hookId?: string | null,\r\n): Promise<void> => {\r\n const methodLower = method.toLocaleLowerCase();\r\n const responseTypeLower = responseType?.toLocaleLowerCase();\r\n\r\n // Early return (cached then fresh) allowed for any HTTP method, except when response is binary or streaming.\r\n const skipInFlightDedupe = responseTypeLower === \"binary\" || responseTypeLower === \"stream\";\r\n if (!skipInFlightDedupe) {\r\n const existing = inFlightByCacheName.get(cacheName);\r\n if (existing) {\r\n // Joining an in-flight request by cacheName: this caller does not get its own\r\n // AbortController registered (only the original request's requestId is tracked in\r\n // inFlightControllers below), so calling cancel with this caller's requestId is a no-op -\r\n // the original in-flight request keeps running for whoever else is awaiting it too.\r\n const cached = get(cacheName);\r\n if (cached !== undefined) callerResponse(cacheName, cached, hookId);\r\n await existing;\r\n const fresh = get(cacheName);\r\n if (fresh !== undefined) callerResponse(cacheName, fresh, hookId);\r\n return;\r\n }\r\n }\r\n\r\n const controller = new AbortController();\r\n if (requestId) {\r\n inFlightControllers.set(requestId, controller);\r\n }\r\n\r\n let timeoutId: ReturnType<typeof setTimeout> | undefined;\r\n if (timeoutMs != null && timeoutMs > 0) {\r\n timeoutId = setTimeout(() => controller.abort(), timeoutMs);\r\n }\r\n\r\n const promise = (async (): Promise<void> => {\r\n const fetchOptions: RequestInit = {\r\n method,\r\n mode,\r\n credentials,\r\n signal: controller.signal,\r\n };\r\n\r\n try {\r\n if (methodLower !== \"get\" && payload != null) {\r\n const prepareOptions: {\r\n formDataFileFieldName?: string;\r\n formDataKey?: string;\r\n } = {};\r\n if (formDataFileFieldName != null && formDataFileFieldName !== \"\")\r\n prepareOptions.formDataFileFieldName = formDataFileFieldName;\r\n if (formDataKey != null && formDataKey !== \"\") prepareOptions.formDataKey = formDataKey;\r\n // Body preparation (JSON.stringify, FormData building, url-encoding) can throw\r\n // synchronously (e.g. circular references, non-primitive url-encoded values). This must\r\n // stay inside the try/catch below - a throw here previously rejected this IIFE with no\r\n // handler, left the caller waiting on a postMessage that never arrives, and skipped the\r\n // finally block, permanently leaking this cacheName/requestId from the in-flight maps.\r\n const { body, headers: processedHeaders } = prepareRequestBody(payload, headers, prepareOptions);\r\n if (body !== undefined) fetchOptions.body = body;\r\n fetchOptions.headers = processedHeaders;\r\n } else {\r\n fetchOptions.headers = omitContentType({ ...headers });\r\n }\r\n\r\n if (responseTypeLower === \"stream\") {\r\n const maxRetries = Math.min(retries ?? 3, 5);\r\n let bytesReceived = 0;\r\n let streamError: WorkerErrorPayload = NO_ERROR;\r\n let attempt = 0;\r\n while (attempt <= maxRetries) {\r\n try {\r\n const reqHeaders =\r\n methodLower === \"get\" ? omitContentType({ ...fetchOptions.headers }) : { ...fetchOptions.headers };\r\n if (bytesReceived > 0) reqHeaders[\"Range\"] = `bytes=${bytesReceived}-`;\r\n const streamResponse = await fetch(url, {\r\n ...fetchOptions,\r\n headers: reqHeaders,\r\n });\r\n if (streamResponse.status >= 400) {\r\n streamError = makeError(streamResponse.statusText || DEFAULT_ERROR);\r\n break;\r\n }\r\n if (streamResponse.status === 204) {\r\n callerResponseStreamEnd(cacheName, hookId);\r\n return;\r\n }\r\n if (streamResponse.status === 416) break;\r\n const contentType = streamResponse.headers.get(\"content-type\") ?? undefined;\r\n const meta: BinaryResponseMeta = {\r\n contentDisposition: streamResponse.headers.get(\"content-disposition\") ?? null,\r\n ...(contentType !== undefined && { contentType }),\r\n };\r\n if (bytesReceived === 0) callerResponseStreamStart(cacheName, meta, hookId, streamResponse.status);\r\n else callerResponseStreamResume(cacheName, meta, hookId, streamResponse.status);\r\n const body = streamResponse.body;\r\n if (!body) {\r\n callerResponseStreamEnd(cacheName, hookId);\r\n return;\r\n }\r\n const reader = body.getReader();\r\n let skipRemaining = streamResponse.status === 200 && bytesReceived > 0 ? bytesReceived : 0;\r\n while (true) {\r\n const { done, value } = await reader.read();\r\n if (done) break;\r\n if (!value || value.byteLength === 0) continue;\r\n if (skipRemaining > 0) {\r\n if (value.byteLength <= skipRemaining) {\r\n skipRemaining -= value.byteLength;\r\n continue;\r\n }\r\n const offset = skipRemaining;\r\n skipRemaining = 0;\r\n const tail = value.subarray(offset);\r\n callerResponseStreamChunk(cacheName, transferableBuffer(tail), hookId);\r\n bytesReceived += tail.byteLength;\r\n } else {\r\n callerResponseStreamChunk(cacheName, transferableBuffer(value), hookId);\r\n bytesReceived += value.byteLength;\r\n }\r\n }\r\n break;\r\n } catch (err) {\r\n streamError =\r\n (err as Error).name === \"AbortError\" ? makeError(\"Request aborted\") : makeError((err as Error).message);\r\n if (attempt === maxRetries) break;\r\n }\r\n attempt++;\r\n }\r\n callerResponseStreamEnd(cacheName, hookId, streamError);\r\n return;\r\n }\r\n\r\n const response = await fetch(url, fetchOptions);\r\n\r\n if (response.status >= 400) {\r\n callerResponse(cacheName, null, hookId, response.status, makeError(response.statusText || DEFAULT_ERROR));\r\n return;\r\n }\r\n\r\n if (response.status === 204) {\r\n set(cacheName, null); // set() normalizes internally - avoid double-normalizing here\r\n callerResponse(cacheName, null, hookId, 204);\r\n return;\r\n }\r\n\r\n const responseData = await parseResponseByContentType(response);\r\n\r\n if (isBinaryResponse(responseData)) {\r\n callerResponseBinary(\r\n cacheName,\r\n responseData.data,\r\n {\r\n contentType: responseData.contentType,\r\n contentDisposition: responseData.contentDisposition ?? null,\r\n },\r\n hookId,\r\n response.status,\r\n );\r\n } else {\r\n commit(cacheName, responseData, hookId, response.status);\r\n }\r\n } catch (error) {\r\n if ((error as Error).name === \"AbortError\") {\r\n callerResponse(cacheName, null, hookId, undefined, makeError(\"Request aborted\"));\r\n return;\r\n }\r\n const err = error as Error;\r\n callerResponse(cacheName, null, hookId, undefined, makeError(err.message));\r\n } finally {\r\n if (timeoutId != null) clearTimeout(timeoutId);\r\n if (requestId) {\r\n inFlightControllers.delete(requestId);\r\n }\r\n inFlightByCacheName.delete(cacheName);\r\n }\r\n })();\r\n\r\n if (!skipInFlightDedupe) {\r\n inFlightByCacheName.set(cacheName, promise);\r\n }\r\n\r\n await promise;\r\n};\r\n\r\nconst onRequest = <TData>(dataRequest: DataRequest<TData>): void => {\r\n const { cacheName, type, payload, request, requestId, hookId } = dataRequest;\r\n const responseCacheName = dataRequest.cacheName ?? \"\";\r\n\r\n if (!isNonEmptyString(type)) {\r\n callerResponse(responseCacheName, null, hookId, undefined, makeError(\"Invalid request: type is required\"));\r\n return;\r\n }\r\n const lowerType = normalizeKey(type);\r\n\r\n if (lowerType === \"cancel\") {\r\n if (requestId) onCancel(requestId);\r\n return;\r\n }\r\n\r\n if (!isNonEmptyString(cacheName)) {\r\n callerResponse(responseCacheName, null, hookId, undefined, makeError(\"Invalid request: cacheName is required\"));\r\n return;\r\n }\r\n const lowerCacheName = normalizeKey(cacheName);\r\n\r\n if (lowerType === \"get\") {\r\n const requestedData = get(lowerCacheName);\r\n if (requestedData === undefined) {\r\n callerResponse(lowerCacheName, null, hookId, undefined, makeError(\"Cache miss\"));\r\n } else {\r\n callerResponse(lowerCacheName, requestedData, hookId);\r\n }\r\n } else if (lowerType === \"set\") {\r\n if (!request) {\r\n if (payload == null) {\r\n callerResponse(\r\n responseCacheName,\r\n null,\r\n hookId,\r\n undefined,\r\n makeError(\"Invalid request: payload is required for set\"),\r\n );\r\n return;\r\n }\r\n set(lowerCacheName, payload);\r\n } else {\r\n const methodLower = normalizeKey(request.method);\r\n if (methodLower !== \"get\" && payload == null) {\r\n callerResponse(\r\n responseCacheName,\r\n null,\r\n hookId,\r\n undefined,\r\n makeError(\"Invalid request: payload is required for non-GET API request\"),\r\n );\r\n return;\r\n }\r\n void apiRequest(lowerCacheName, payload ?? null, request, requestId, hookId);\r\n }\r\n } else if (lowerType === \"delete\") {\r\n remove(lowerCacheName);\r\n callerResponse(lowerCacheName, { deleted: true }, hookId);\r\n }\r\n};\r\n\r\n/**\r\n * Aborts the in-flight request registered under requestId, if any. Note: if that request was\r\n * joined/deduped by another caller via inFlightByCacheName (same cacheName, request already in\r\n * flight), this only aborts the original request's controller - the joined caller was never\r\n * registered with its own controller/requestId, so it has nothing to cancel independently.\r\n */\r\nconst onCancel = (requestId: string): void => {\r\n const controller = inFlightControllers.get(requestId);\r\n if (controller) {\r\n controller.abort();\r\n inFlightControllers.delete(requestId);\r\n }\r\n};\r\n\r\n/**\r\n * Incoming messages from the main thread. Expects payload shape { dataRequest?: DataRequest }.\r\n * Responses via postMessage: { cacheName, data?, meta?, hookId?, httpStatus?, error }.\r\n * error is always present: { message: \"\" } when no error, { message: \"...\" } when the request failed.\r\n */\r\nonmessage = (event: MessageEvent<WorkerMessageData>): void => {\r\n const payload = event.data;\r\n if (payload === null || typeof payload !== \"object\") return;\r\n const dataRequest = payload.dataRequest;\r\n if (dataRequest !== undefined) onRequest(dataRequest);\r\n};\r\n"],"names":["set","hasFile"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mainframework/api-request-worker",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.3",
|
|
4
4
|
"description": "Offloads API requests and application state to a Web Worker to keep the UI thread fast.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/shared/output/vanilla.js",
|
|
@@ -65,30 +65,30 @@
|
|
|
65
65
|
"license": "MIT",
|
|
66
66
|
"devDependencies": {
|
|
67
67
|
"@eslint/js": "^10.0.1",
|
|
68
|
-
"@mainframework/is-deep-equal": "^1.0.
|
|
68
|
+
"@mainframework/is-deep-equal": "^1.0.11",
|
|
69
69
|
"@rollup/plugin-node-resolve": "^16.0.3",
|
|
70
70
|
"@rollup/plugin-replace": "^6.0.3",
|
|
71
71
|
"@testing-library/dom": "^10.4.1",
|
|
72
72
|
"@testing-library/react": "^16.3.2",
|
|
73
|
-
"@types/react": "^19.2.
|
|
74
|
-
"@typescript-eslint/eslint-plugin": "^8.
|
|
75
|
-
"@typescript-eslint/parser": "^8.
|
|
76
|
-
"esbuild": "^0.28.
|
|
77
|
-
"eslint": "10.
|
|
73
|
+
"@types/react": "^19.2.17",
|
|
74
|
+
"@typescript-eslint/eslint-plugin": "^8.62.1",
|
|
75
|
+
"@typescript-eslint/parser": "^8.62.1",
|
|
76
|
+
"esbuild": "^0.28.1",
|
|
77
|
+
"eslint": "10.6.0",
|
|
78
78
|
"eslint-plugin-react": "^7.37.5",
|
|
79
79
|
"eslint-plugin-react-hooks": "^7.1.1",
|
|
80
|
-
"globals": "^17.
|
|
80
|
+
"globals": "^17.7.0",
|
|
81
81
|
"husky": "^9.1.7",
|
|
82
|
-
"lint-staged": "^17.0.
|
|
83
|
-
"prettier": "^3.
|
|
84
|
-
"react": "^19.2.
|
|
85
|
-
"react-dom": "^19.2.
|
|
82
|
+
"lint-staged": "^17.0.8",
|
|
83
|
+
"prettier": "^3.9.4",
|
|
84
|
+
"react": "^19.2.7",
|
|
85
|
+
"react-dom": "^19.2.7",
|
|
86
86
|
"rimraf": "^6.1.3",
|
|
87
|
-
"rollup": "^4.
|
|
87
|
+
"rollup": "^4.62.2",
|
|
88
88
|
"rollup-plugin-dts": "^6.4.1",
|
|
89
89
|
"rollup-plugin-esbuild": "^6.2.1",
|
|
90
90
|
"tslib": "^2.8.1",
|
|
91
91
|
"typescript": "^6.0.3",
|
|
92
|
-
"typescript-eslint": "^8.
|
|
92
|
+
"typescript-eslint": "^8.62.1"
|
|
93
93
|
}
|
|
94
94
|
}
|