@squoosh-kit/resize 0.0.14 → 0.0.16
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/bridge.browser.mjs +3 -3
- package/dist/bridge.browser.mjs.map +3 -3
- package/dist/bridge.bun.js +3 -3
- package/dist/bridge.bun.js.map +3 -3
- package/dist/bridge.d.ts.map +1 -1
- package/dist/bridge.node.cjs +2 -2
- package/dist/bridge.node.cjs.map +3 -3
- package/dist/bridge.node.mjs +3 -3
- package/dist/bridge.node.mjs.map +3 -3
- package/dist/chunk-6qec3cgc.js +5 -0
- package/dist/{chunk-fyfa8ceq.js.map → chunk-6qec3cgc.js.map} +2 -2
- package/dist/chunk-cg8pk3a2.js +3 -0
- package/dist/{chunk-atxx2y4c.js.map → chunk-cg8pk3a2.js.map} +2 -2
- package/dist/chunk-dfj7cgx8.js +4 -0
- package/dist/{chunk-pn10n1jn.js.map → chunk-dfj7cgx8.js.map} +2 -2
- package/dist/chunk-xrd0djzj.js +4 -0
- package/dist/{chunk-x4xgrxwp.js.map → chunk-xrd0djzj.js.map} +2 -2
- package/dist/index.browser.mjs +1 -1
- package/dist/index.browser.mjs.map +2 -2
- package/dist/index.bun.js +1 -1
- package/dist/index.bun.js.map +2 -2
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.node.cjs.map +2 -2
- package/dist/index.node.mjs +1 -1
- package/dist/index.node.mjs.map +2 -2
- package/dist/resize.worker.browser.mjs +2 -2
- package/dist/resize.worker.browser.mjs.map +1 -1
- package/dist/resize.worker.bun.js +2 -2
- package/dist/resize.worker.bun.js.map +1 -1
- package/dist/resize.worker.node.mjs +2 -2
- package/dist/resize.worker.node.mjs.map +1 -1
- package/package.json +2 -2
- package/dist/chunk-1zf4xag4.js +0 -3
- package/dist/chunk-1zf4xag4.js.map +0 -10
- package/dist/chunk-33kv1dx2.js +0 -5
- package/dist/chunk-33kv1dx2.js.map +0 -10
- package/dist/chunk-atxx2y4c.js +0 -4
- package/dist/chunk-fyfa8ceq.js +0 -3
- package/dist/chunk-n9ax3x9w.js +0 -4
- package/dist/chunk-n9ax3x9w.js.map +0 -10
- package/dist/chunk-pn10n1jn.js +0 -5
- package/dist/chunk-x4xgrxwp.js +0 -4
- package/dist/chunk-z14a3d02.js +0 -4
- package/dist/chunk-z14a3d02.js.map +0 -10
package/dist/bridge.browser.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{b as
|
|
2
|
-
export{
|
|
1
|
+
import{b as q,c as T,d as P}from"./chunk-xrd0djzj.js";function U(){return typeof Bun<"u"}var R=0;async function A(G,J,V,K,H){return new Promise((L,X)=>{let Q=++R;if(K?.aborted){X(new DOMException("Aborted","AbortError"));return}let Z=(O)=>{let D=O.data;if(D.id!==Q)return;if($(),D.ok&&D.data!==void 0)L(D.data);else X(Error(D.error||"Unknown worker error"))},x=(O)=>{$(),X(Error(`Worker error: ${O.message}`))},_=()=>{$(),X(new DOMException("Aborted","AbortError"))},$=()=>{G.removeEventListener("message",Z),G.removeEventListener("error",x),K?.removeEventListener("abort",_)};G.addEventListener("message",Z),G.addEventListener("error",x),K?.addEventListener("abort",_);let Y={type:J,id:Q,payload:V};if(H&&H.length>0)G.postMessage(Y,H);else G.postMessage(Y)})}function W(G){let J=G.endsWith(".js")?G:`${G}.js`,V={"resize.worker.js":{package:"@squoosh-kit/resize",specifier:"resize.worker.js"},"webp.worker.js":{package:"@squoosh-kit/webp",specifier:"webp.worker.js"}},K=V[J];if(!K)throw Error(`Unknown worker: ${J}. Supported workers: ${Object.keys(V).join(", ")}`);try{if(typeof window<"u"){let Q=K.package.split("/")[1],Z=J.replace(".js",".browser.mjs"),x=[`../../${Q}/dist/${Z}`,`../../../node_modules/@squoosh-kit/${Q}/dist/${Z}`,`../../../${Q}/dist/${Z}`],_=null;for(let $ of x)try{let Y=new URL($,import.meta.url);return new Worker(Y,{type:"module"})}catch(Y){_=Y instanceof Error?Y:Error(String(Y))}if(_)throw _;throw Error(`Could not resolve worker ${J} using any available path strategy`)}if(typeof import.meta.resolve==="function")try{let Q=import.meta.resolve(`${K.package}/${K.specifier}`);return new Worker(Q,{type:"module"})}catch{}let H=U()?".bun.js":".node.mjs",L=J.replace(".js",""),X=K.package.includes("resize")?`../../resize/dist/${L}.${H.slice(1)}`:`../../webp/dist/${L}.${H.slice(1)}`;return new Worker(new URL(X,import.meta.url),{type:"module"})}catch(H){let L=H instanceof Error?H.message:String(H);throw Error(`Failed to create worker from ${J}: ${L}. Ensure the @squoosh-kit/resize and @squoosh-kit/webp packages are installed. If you're using Vite, ensure the worker files are not being optimized as dependencies.`)}}function I(G,J=1e4){return new Promise((V,K)=>{let H=setTimeout(()=>{K(Error(`Worker initialization timeout after ${J}ms. Worker file: ${G}`))},J),L;try{L=W(G)}catch(Q){clearTimeout(H),K(Q);return}let X=(Q)=>{if(Q.data?.type==="worker:ready")clearTimeout(H),L.removeEventListener("message",X),V(L)};L.addEventListener("message",X),L.postMessage({type:"worker:ping"})})}class S{async resize(G,J,V){let H=(await import("./resize.worker.browser.mjs")).resizeClient;return H(G,J,V)}async terminate(){}}class B{worker=null;workerReady=null;async getWorker(){if(!this.worker){if(!this.workerReady)this.workerReady=this.createWorker();this.worker=await this.workerReady}return this.worker}async createWorker(){return I("resize.worker")}async resize(G,J,V){let K=await this.getWorker();P(G);try{return await A(K,"resize:run",{image:G,options:J},V)}catch(H){throw console.error("Resize error:",H),H}}async terminate(){if(this.worker)this.worker.terminate(),this.worker=null,this.workerReady=null}}function y(G){return G==="client"?new S:new B}export{y as createBridge};
|
|
2
|
+
export{y as a};
|
|
3
3
|
|
|
4
|
-
//# debugId=
|
|
4
|
+
//# debugId=6634460D4A0F992064756E2164756E21
|
|
@@ -5,9 +5,9 @@
|
|
|
5
5
|
"/**\n * Runtime environment detection utilities\n */\n\n/**\n * Detect if running in a Web Worker context\n */\nexport function isWorker(): boolean {\n return (\n typeof self !== 'undefined' &&\n typeof (globalThis as unknown as { DedicatedWorkerGlobalScope?: unknown })\n .DedicatedWorkerGlobalScope !== 'undefined'\n );\n}\n\n/**\n * Detect if running in a browser context\n */\nexport function isBrowser(): boolean {\n return typeof window !== 'undefined' && typeof document !== 'undefined';\n}\n\n/**\n * Detect if running in Bun\n */\nexport function isBun(): boolean {\n return typeof Bun !== 'undefined';\n}\n\n/**\n * Detect if running in Node.js\n */\nexport function isNode(): boolean {\n return (\n typeof process !== 'undefined' &&\n process.versions != null &&\n process.versions.node != null\n );\n}\n\n/**\n * Check if ImageData is available in the current environment\n */\nexport function hasImageData(): boolean {\n return typeof ImageData !== 'undefined';\n}\n",
|
|
6
6
|
"/**\n * Generic worker communication helper with support for transferables and AbortSignal\n */\n\nexport interface WorkerRequest<T = unknown> {\n type: string;\n id: number;\n payload: T;\n}\n\nexport interface WorkerResponse<T = unknown> {\n id: number;\n ok: boolean;\n data?: T;\n error?: string;\n}\n\nlet requestId = 0;\n\n/**\n * Call a worker with a typed request and wait for response\n *\n * @param worker - The worker instance to call\n * @param type - The message type\n * @param payload - The payload to send\n * @param signal - Optional AbortSignal to cancel the operation\n * @param transfer - Optional list of Transferable objects to transfer\n * @returns Promise that resolves with the worker's response data\n */\nexport async function callWorker<TPayload, TResponse>(\n worker: Worker,\n type: string,\n payload: TPayload,\n signal?: AbortSignal,\n transfer?: Transferable[]\n): Promise<TResponse> {\n return new Promise<TResponse>((resolve, reject) => {\n const id = ++requestId;\n\n // Check if already aborted\n if (signal?.aborted) {\n reject(new DOMException('Aborted', 'AbortError'));\n return;\n }\n\n const handleMessage = (event: MessageEvent) => {\n const response = event.data as WorkerResponse<TResponse>;\n if (response.id !== id) return;\n\n cleanup();\n\n if (response.ok && response.data !== undefined) {\n resolve(response.data);\n } else {\n reject(new Error(response.error || 'Unknown worker error'));\n }\n };\n\n const handleError = (error: ErrorEvent) => {\n cleanup();\n reject(new Error(`Worker error: ${error.message}`));\n };\n\n const handleAbort = () => {\n cleanup();\n reject(new DOMException('Aborted', 'AbortError'));\n };\n\n const cleanup = () => {\n worker.removeEventListener('message', handleMessage);\n worker.removeEventListener('error', handleError);\n signal?.removeEventListener('abort', handleAbort);\n };\n\n // Set up listeners\n worker.addEventListener('message', handleMessage);\n worker.addEventListener('error', handleError);\n signal?.addEventListener('abort', handleAbort);\n\n // Send the request\n const request: WorkerRequest<TPayload> = { type, id, payload };\n\n if (transfer && transfer.length > 0) {\n worker.postMessage(request, transfer);\n } else {\n worker.postMessage(request);\n }\n });\n}\n",
|
|
7
7
|
"/**\n * Worker helper utilities for creating and managing Web Workers\n *\n * This module provides centralized logic for creating worker instances\n * in different environments (browser, Node.js, Bun) using import.meta.resolve\n * for server-side and package-relative paths for browsers.\n */\n\nimport { isBun } from './env';\n\n/**\n * Create a Web Worker for a specific codec\n *\n * In Node.js/Bun environments, uses import.meta.resolve to locate worker files.\n * In browser environments, uses relative paths within node_modules that Vite can resolve.\n *\n * @param workerFilename - The name of the worker file (e.g., 'resize.worker' or 'webp.worker')\n * @returns Worker instance\n * @throws Error if worker creation fails with detailed error message\n */\nexport function createCodecWorker(workerFilename: string): Worker {\n // Ensure filename has correct format\n const normalizedName = workerFilename.endsWith('.js')\n ? workerFilename\n : `${workerFilename}.js`;\n\n // Map worker filenames to their package and export\n const workerMap: Record<string, { package: string; specifier: string }> = {\n 'resize.worker.js': {\n package: '@squoosh-kit/resize',\n specifier: 'resize.worker.js',\n },\n 'webp.worker.js': {\n package: '@squoosh-kit/webp',\n specifier: 'webp.worker.js',\n },\n };\n\n const workerConfig = workerMap[normalizedName];\n if (!workerConfig) {\n throw new Error(\n `Unknown worker: ${normalizedName}. ` +\n `Supported workers: ${Object.keys(workerMap).join(', ')}`\n );\n }\n\n try {\n // In browser contexts, use relative paths within the installed packages\n if (typeof window !== 'undefined') {\n const packageName = workerConfig.package.split('/')[1]; // Extract 'resize' or 'webp'\n const workerFile = normalizedName.replace('.js', '.browser.mjs');\n\n // Try multiple path strategies to support both:\n // 1. Monorepo development structure: ../../{package}/dist/{workerFile}\n // 2. npm installed structure: ../../../{package}/dist/{workerFile}\n const pathStrategies = [\n // First try monorepo structure (when runtime is at packages/runtime/src)\n `../../${packageName}/dist/${workerFile}`,\n // Then try npm structure (when runtime is at node_modules/@squoosh-kit/runtime)\n `../../../node_modules/@squoosh-kit/${packageName}/dist/${workerFile}`,\n // Alternative npm structure for cases where packages are flattened\n `../../../${packageName}/dist/${workerFile}`,\n ];\n\n let lastError: Error | null = null;\n\n for (const relPath of pathStrategies) {\n try {\n const workerUrl = new URL(relPath, import.meta.url);\n return new Worker(workerUrl, {\n type: 'module',\n });\n } catch (error) {\n lastError = error instanceof Error ? error : new Error(String(error));\n // Continue to next strategy\n }\n }\n\n // If all strategies failed, throw the last error\n if (lastError) {\n throw lastError;\n }\n throw new Error(\n `Could not resolve worker ${normalizedName} using any available path strategy`\n );\n }\n\n // Node.js/Bun: use import.meta.resolve if available\n if (typeof import.meta.resolve === 'function') {\n try {\n const resolved = import.meta.resolve(\n `${workerConfig.package}/${workerConfig.specifier}`\n );\n return new Worker(resolved, { type: 'module' });\n } catch {\n // Fallback if resolve fails - use relative path as last resort\n }\n }\n\n // Fallback for Bun: use relative path from this file's location\n const platformExt = isBun() ? '.bun.js' : '.node.mjs';\n const baseName = normalizedName.replace('.js', '');\n const relPath = workerConfig.package.includes('resize')\n ? `../../resize/dist/${baseName}.${platformExt.slice(1)}`\n : `../../webp/dist/${baseName}.${platformExt.slice(1)}`;\n\n return new Worker(new URL(relPath, import.meta.url), { type: 'module' });\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n throw new Error(\n `Failed to create worker from ${normalizedName}: ${errorMessage}. ` +\n `Ensure the @squoosh-kit/resize and @squoosh-kit/webp packages are installed. ` +\n `If you're using Vite, ensure the worker files are not being optimized as dependencies.`\n );\n }\n}\n\n/**\n * Create a worker with initialization timeout and ready signal handling\n *\n * This is a higher-level function that creates a worker and waits for it\n * to signal that it's ready to receive messages.\n *\n * @param workerFilename - The name of the worker file\n * @param timeoutMs - Timeout in milliseconds (default: 10000)\n * @returns Promise that resolves to a ready Worker instance\n * @throws Error if worker creation fails or times out\n */\nexport function createReadyWorker(\n workerFilename: string,\n timeoutMs: number = 10000\n): Promise<Worker> {\n return new Promise((resolve, reject) => {\n const timeout = setTimeout(() => {\n reject(\n new Error(\n `Worker initialization timeout after ${timeoutMs}ms. Worker file: ${workerFilename}`\n )\n );\n }, timeoutMs);\n\n let worker: Worker;\n try {\n worker = createCodecWorker(workerFilename);\n } catch (error) {\n clearTimeout(timeout);\n reject(error);\n return;\n }\n\n const handleMessage = (event: MessageEvent) => {\n if (event.data?.type === 'worker:ready') {\n clearTimeout(timeout);\n worker.removeEventListener('message', handleMessage);\n resolve(worker);\n }\n };\n\n worker.addEventListener('message', handleMessage);\n worker.postMessage({ type: 'worker:ping' });\n });\n}\n",
|
|
8
|
-
"/**\n * Bridge implementation for the Resize package, handling worker and client modes.\n */\n\nimport {\n callWorker,\n createReadyWorker,\n type ImageInput,\n} from '@squoosh-kit/runtime';\nimport {
|
|
8
|
+
"/**\n * Bridge implementation for the Resize package, handling worker and client modes.\n */\n\nimport {\n callWorker,\n createReadyWorker,\n type ImageInput,\n} from '@squoosh-kit/runtime';\nimport { validateImageInput } from '@squoosh-kit/runtime';\nimport type { ResizeOptions } from './types.ts';\n\ninterface ResizeBridge {\n resize(\n image: ImageInput,\n options: ResizeOptions,\n signal?: AbortSignal\n ): Promise<ImageInput>;\n terminate(): Promise<void>;\n}\n\nclass ResizeClientBridge implements ResizeBridge {\n async resize(\n image: ImageInput,\n options: ResizeOptions,\n signal?: AbortSignal\n ): Promise<ImageInput> {\n // Dynamically import the client resizer to avoid module loading issues in Vite\n const module = await import('./resize.worker.ts');\n const resizeClient = module.resizeClient as (\n image: ImageInput,\n options: ResizeOptions,\n signal?: AbortSignal\n ) => Promise<ImageInput>;\n return resizeClient(image, options, signal);\n }\n\n async terminate(): Promise<void> {\n // Client mode has nothing to terminate\n }\n}\n\nclass ResizeWorkerBridge implements ResizeBridge {\n private worker: Worker | null = null;\n private workerReady: Promise<Worker> | null = null;\n\n private async getWorker(): Promise<Worker> {\n if (!this.worker) {\n if (!this.workerReady) {\n this.workerReady = this.createWorker();\n }\n this.worker = await this.workerReady;\n }\n return this.worker;\n }\n\n private async createWorker(): Promise<Worker> {\n // Use the centralized worker helper for robust path resolution\n return createReadyWorker('resize.worker');\n }\n\n async resize(\n image: ImageInput,\n options: ResizeOptions,\n signal?: AbortSignal\n ): Promise<ImageInput> {\n const worker = await this.getWorker();\n\n validateImageInput(image);\n\n try {\n const result = await callWorker<\n { image: ImageInput; options: ResizeOptions },\n ImageInput\n >(worker, 'resize:run', { image, options }, signal);\n\n return result;\n } catch (error) {\n console.error('Resize error:', error);\n throw error;\n }\n }\n\n async terminate(): Promise<void> {\n if (this.worker) {\n this.worker.terminate();\n this.worker = null;\n this.workerReady = null;\n }\n }\n}\n\nexport function createBridge(mode: 'worker' | 'client'): ResizeBridge {\n return mode === 'client'\n ? new ResizeClientBridge()\n : new ResizeWorkerBridge();\n}\n"
|
|
9
9
|
],
|
|
10
|
-
"mappings": "
|
|
11
|
-
"debugId": "
|
|
10
|
+
"mappings": "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",
|
|
11
|
+
"debugId": "6634460D4A0F992064756E2164756E21",
|
|
12
12
|
"names": []
|
|
13
13
|
}
|
package/dist/bridge.bun.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{b as
|
|
3
|
-
export{
|
|
2
|
+
import{b as q,c as T,d as P}from"./chunk-6qec3cgc.js";function U(){return typeof Bun<"u"}var R=0;async function A(G,J,V,K,H){return new Promise((L,X)=>{let Q=++R;if(K?.aborted){X(new DOMException("Aborted","AbortError"));return}let Z=(O)=>{let D=O.data;if(D.id!==Q)return;if($(),D.ok&&D.data!==void 0)L(D.data);else X(Error(D.error||"Unknown worker error"))},x=(O)=>{$(),X(Error(`Worker error: ${O.message}`))},_=()=>{$(),X(new DOMException("Aborted","AbortError"))},$=()=>{G.removeEventListener("message",Z),G.removeEventListener("error",x),K?.removeEventListener("abort",_)};G.addEventListener("message",Z),G.addEventListener("error",x),K?.addEventListener("abort",_);let Y={type:J,id:Q,payload:V};if(H&&H.length>0)G.postMessage(Y,H);else G.postMessage(Y)})}function W(G){let J=G.endsWith(".js")?G:`${G}.js`,V={"resize.worker.js":{package:"@squoosh-kit/resize",specifier:"resize.worker.js"},"webp.worker.js":{package:"@squoosh-kit/webp",specifier:"webp.worker.js"}},K=V[J];if(!K)throw Error(`Unknown worker: ${J}. Supported workers: ${Object.keys(V).join(", ")}`);try{if(typeof window<"u"){let Q=K.package.split("/")[1],Z=J.replace(".js",".browser.mjs"),x=[`../../${Q}/dist/${Z}`,`../../../node_modules/@squoosh-kit/${Q}/dist/${Z}`,`../../../${Q}/dist/${Z}`],_=null;for(let $ of x)try{let Y=new URL($,import.meta.url);return new Worker(Y,{type:"module"})}catch(Y){_=Y instanceof Error?Y:Error(String(Y))}if(_)throw _;throw Error(`Could not resolve worker ${J} using any available path strategy`)}if(typeof import.meta.resolve==="function")try{let Q=import.meta.resolve(`${K.package}/${K.specifier}`);return new Worker(Q,{type:"module"})}catch{}let H=U()?".bun.js":".node.mjs",L=J.replace(".js",""),X=K.package.includes("resize")?`../../resize/dist/${L}.${H.slice(1)}`:`../../webp/dist/${L}.${H.slice(1)}`;return new Worker(new URL(X,import.meta.url),{type:"module"})}catch(H){let L=H instanceof Error?H.message:String(H);throw Error(`Failed to create worker from ${J}: ${L}. Ensure the @squoosh-kit/resize and @squoosh-kit/webp packages are installed. If you're using Vite, ensure the worker files are not being optimized as dependencies.`)}}function I(G,J=1e4){return new Promise((V,K)=>{let H=setTimeout(()=>{K(Error(`Worker initialization timeout after ${J}ms. Worker file: ${G}`))},J),L;try{L=W(G)}catch(Q){clearTimeout(H),K(Q);return}let X=(Q)=>{if(Q.data?.type==="worker:ready")clearTimeout(H),L.removeEventListener("message",X),V(L)};L.addEventListener("message",X),L.postMessage({type:"worker:ping"})})}class S{async resize(G,J,V){let H=(await import("./resize.worker.bun.js")).resizeClient;return H(G,J,V)}async terminate(){}}class B{worker=null;workerReady=null;async getWorker(){if(!this.worker){if(!this.workerReady)this.workerReady=this.createWorker();this.worker=await this.workerReady}return this.worker}async createWorker(){return I("resize.worker")}async resize(G,J,V){let K=await this.getWorker();P(G);try{return await A(K,"resize:run",{image:G,options:J},V)}catch(H){throw console.error("Resize error:",H),H}}async terminate(){if(this.worker)this.worker.terminate(),this.worker=null,this.workerReady=null}}function y(G){return G==="client"?new S:new B}export{y as createBridge};
|
|
3
|
+
export{y as a};
|
|
4
4
|
|
|
5
|
-
//# debugId=
|
|
5
|
+
//# debugId=4458478E1B29708B64756E2164756E21
|
package/dist/bridge.bun.js.map
CHANGED
|
@@ -5,9 +5,9 @@
|
|
|
5
5
|
"/**\n * Runtime environment detection utilities\n */\n\n/**\n * Detect if running in a Web Worker context\n */\nexport function isWorker(): boolean {\n return (\n typeof self !== 'undefined' &&\n typeof (globalThis as unknown as { DedicatedWorkerGlobalScope?: unknown })\n .DedicatedWorkerGlobalScope !== 'undefined'\n );\n}\n\n/**\n * Detect if running in a browser context\n */\nexport function isBrowser(): boolean {\n return typeof window !== 'undefined' && typeof document !== 'undefined';\n}\n\n/**\n * Detect if running in Bun\n */\nexport function isBun(): boolean {\n return typeof Bun !== 'undefined';\n}\n\n/**\n * Detect if running in Node.js\n */\nexport function isNode(): boolean {\n return (\n typeof process !== 'undefined' &&\n process.versions != null &&\n process.versions.node != null\n );\n}\n\n/**\n * Check if ImageData is available in the current environment\n */\nexport function hasImageData(): boolean {\n return typeof ImageData !== 'undefined';\n}\n",
|
|
6
6
|
"/**\n * Generic worker communication helper with support for transferables and AbortSignal\n */\n\nexport interface WorkerRequest<T = unknown> {\n type: string;\n id: number;\n payload: T;\n}\n\nexport interface WorkerResponse<T = unknown> {\n id: number;\n ok: boolean;\n data?: T;\n error?: string;\n}\n\nlet requestId = 0;\n\n/**\n * Call a worker with a typed request and wait for response\n *\n * @param worker - The worker instance to call\n * @param type - The message type\n * @param payload - The payload to send\n * @param signal - Optional AbortSignal to cancel the operation\n * @param transfer - Optional list of Transferable objects to transfer\n * @returns Promise that resolves with the worker's response data\n */\nexport async function callWorker<TPayload, TResponse>(\n worker: Worker,\n type: string,\n payload: TPayload,\n signal?: AbortSignal,\n transfer?: Transferable[]\n): Promise<TResponse> {\n return new Promise<TResponse>((resolve, reject) => {\n const id = ++requestId;\n\n // Check if already aborted\n if (signal?.aborted) {\n reject(new DOMException('Aborted', 'AbortError'));\n return;\n }\n\n const handleMessage = (event: MessageEvent) => {\n const response = event.data as WorkerResponse<TResponse>;\n if (response.id !== id) return;\n\n cleanup();\n\n if (response.ok && response.data !== undefined) {\n resolve(response.data);\n } else {\n reject(new Error(response.error || 'Unknown worker error'));\n }\n };\n\n const handleError = (error: ErrorEvent) => {\n cleanup();\n reject(new Error(`Worker error: ${error.message}`));\n };\n\n const handleAbort = () => {\n cleanup();\n reject(new DOMException('Aborted', 'AbortError'));\n };\n\n const cleanup = () => {\n worker.removeEventListener('message', handleMessage);\n worker.removeEventListener('error', handleError);\n signal?.removeEventListener('abort', handleAbort);\n };\n\n // Set up listeners\n worker.addEventListener('message', handleMessage);\n worker.addEventListener('error', handleError);\n signal?.addEventListener('abort', handleAbort);\n\n // Send the request\n const request: WorkerRequest<TPayload> = { type, id, payload };\n\n if (transfer && transfer.length > 0) {\n worker.postMessage(request, transfer);\n } else {\n worker.postMessage(request);\n }\n });\n}\n",
|
|
7
7
|
"/**\n * Worker helper utilities for creating and managing Web Workers\n *\n * This module provides centralized logic for creating worker instances\n * in different environments (browser, Node.js, Bun) using import.meta.resolve\n * for server-side and package-relative paths for browsers.\n */\n\nimport { isBun } from './env';\n\n/**\n * Create a Web Worker for a specific codec\n *\n * In Node.js/Bun environments, uses import.meta.resolve to locate worker files.\n * In browser environments, uses relative paths within node_modules that Vite can resolve.\n *\n * @param workerFilename - The name of the worker file (e.g., 'resize.worker' or 'webp.worker')\n * @returns Worker instance\n * @throws Error if worker creation fails with detailed error message\n */\nexport function createCodecWorker(workerFilename: string): Worker {\n // Ensure filename has correct format\n const normalizedName = workerFilename.endsWith('.js')\n ? workerFilename\n : `${workerFilename}.js`;\n\n // Map worker filenames to their package and export\n const workerMap: Record<string, { package: string; specifier: string }> = {\n 'resize.worker.js': {\n package: '@squoosh-kit/resize',\n specifier: 'resize.worker.js',\n },\n 'webp.worker.js': {\n package: '@squoosh-kit/webp',\n specifier: 'webp.worker.js',\n },\n };\n\n const workerConfig = workerMap[normalizedName];\n if (!workerConfig) {\n throw new Error(\n `Unknown worker: ${normalizedName}. ` +\n `Supported workers: ${Object.keys(workerMap).join(', ')}`\n );\n }\n\n try {\n // In browser contexts, use relative paths within the installed packages\n if (typeof window !== 'undefined') {\n const packageName = workerConfig.package.split('/')[1]; // Extract 'resize' or 'webp'\n const workerFile = normalizedName.replace('.js', '.browser.mjs');\n\n // Try multiple path strategies to support both:\n // 1. Monorepo development structure: ../../{package}/dist/{workerFile}\n // 2. npm installed structure: ../../../{package}/dist/{workerFile}\n const pathStrategies = [\n // First try monorepo structure (when runtime is at packages/runtime/src)\n `../../${packageName}/dist/${workerFile}`,\n // Then try npm structure (when runtime is at node_modules/@squoosh-kit/runtime)\n `../../../node_modules/@squoosh-kit/${packageName}/dist/${workerFile}`,\n // Alternative npm structure for cases where packages are flattened\n `../../../${packageName}/dist/${workerFile}`,\n ];\n\n let lastError: Error | null = null;\n\n for (const relPath of pathStrategies) {\n try {\n const workerUrl = new URL(relPath, import.meta.url);\n return new Worker(workerUrl, {\n type: 'module',\n });\n } catch (error) {\n lastError = error instanceof Error ? error : new Error(String(error));\n // Continue to next strategy\n }\n }\n\n // If all strategies failed, throw the last error\n if (lastError) {\n throw lastError;\n }\n throw new Error(\n `Could not resolve worker ${normalizedName} using any available path strategy`\n );\n }\n\n // Node.js/Bun: use import.meta.resolve if available\n if (typeof import.meta.resolve === 'function') {\n try {\n const resolved = import.meta.resolve(\n `${workerConfig.package}/${workerConfig.specifier}`\n );\n return new Worker(resolved, { type: 'module' });\n } catch {\n // Fallback if resolve fails - use relative path as last resort\n }\n }\n\n // Fallback for Bun: use relative path from this file's location\n const platformExt = isBun() ? '.bun.js' : '.node.mjs';\n const baseName = normalizedName.replace('.js', '');\n const relPath = workerConfig.package.includes('resize')\n ? `../../resize/dist/${baseName}.${platformExt.slice(1)}`\n : `../../webp/dist/${baseName}.${platformExt.slice(1)}`;\n\n return new Worker(new URL(relPath, import.meta.url), { type: 'module' });\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n throw new Error(\n `Failed to create worker from ${normalizedName}: ${errorMessage}. ` +\n `Ensure the @squoosh-kit/resize and @squoosh-kit/webp packages are installed. ` +\n `If you're using Vite, ensure the worker files are not being optimized as dependencies.`\n );\n }\n}\n\n/**\n * Create a worker with initialization timeout and ready signal handling\n *\n * This is a higher-level function that creates a worker and waits for it\n * to signal that it's ready to receive messages.\n *\n * @param workerFilename - The name of the worker file\n * @param timeoutMs - Timeout in milliseconds (default: 10000)\n * @returns Promise that resolves to a ready Worker instance\n * @throws Error if worker creation fails or times out\n */\nexport function createReadyWorker(\n workerFilename: string,\n timeoutMs: number = 10000\n): Promise<Worker> {\n return new Promise((resolve, reject) => {\n const timeout = setTimeout(() => {\n reject(\n new Error(\n `Worker initialization timeout after ${timeoutMs}ms. Worker file: ${workerFilename}`\n )\n );\n }, timeoutMs);\n\n let worker: Worker;\n try {\n worker = createCodecWorker(workerFilename);\n } catch (error) {\n clearTimeout(timeout);\n reject(error);\n return;\n }\n\n const handleMessage = (event: MessageEvent) => {\n if (event.data?.type === 'worker:ready') {\n clearTimeout(timeout);\n worker.removeEventListener('message', handleMessage);\n resolve(worker);\n }\n };\n\n worker.addEventListener('message', handleMessage);\n worker.postMessage({ type: 'worker:ping' });\n });\n}\n",
|
|
8
|
-
"/**\n * Bridge implementation for the Resize package, handling worker and client modes.\n */\n\nimport {\n callWorker,\n createReadyWorker,\n type ImageInput,\n} from '@squoosh-kit/runtime';\nimport {
|
|
8
|
+
"/**\n * Bridge implementation for the Resize package, handling worker and client modes.\n */\n\nimport {\n callWorker,\n createReadyWorker,\n type ImageInput,\n} from '@squoosh-kit/runtime';\nimport { validateImageInput } from '@squoosh-kit/runtime';\nimport type { ResizeOptions } from './types.ts';\n\ninterface ResizeBridge {\n resize(\n image: ImageInput,\n options: ResizeOptions,\n signal?: AbortSignal\n ): Promise<ImageInput>;\n terminate(): Promise<void>;\n}\n\nclass ResizeClientBridge implements ResizeBridge {\n async resize(\n image: ImageInput,\n options: ResizeOptions,\n signal?: AbortSignal\n ): Promise<ImageInput> {\n // Dynamically import the client resizer to avoid module loading issues in Vite\n const module = await import('./resize.worker.ts');\n const resizeClient = module.resizeClient as (\n image: ImageInput,\n options: ResizeOptions,\n signal?: AbortSignal\n ) => Promise<ImageInput>;\n return resizeClient(image, options, signal);\n }\n\n async terminate(): Promise<void> {\n // Client mode has nothing to terminate\n }\n}\n\nclass ResizeWorkerBridge implements ResizeBridge {\n private worker: Worker | null = null;\n private workerReady: Promise<Worker> | null = null;\n\n private async getWorker(): Promise<Worker> {\n if (!this.worker) {\n if (!this.workerReady) {\n this.workerReady = this.createWorker();\n }\n this.worker = await this.workerReady;\n }\n return this.worker;\n }\n\n private async createWorker(): Promise<Worker> {\n // Use the centralized worker helper for robust path resolution\n return createReadyWorker('resize.worker');\n }\n\n async resize(\n image: ImageInput,\n options: ResizeOptions,\n signal?: AbortSignal\n ): Promise<ImageInput> {\n const worker = await this.getWorker();\n\n validateImageInput(image);\n\n try {\n const result = await callWorker<\n { image: ImageInput; options: ResizeOptions },\n ImageInput\n >(worker, 'resize:run', { image, options }, signal);\n\n return result;\n } catch (error) {\n console.error('Resize error:', error);\n throw error;\n }\n }\n\n async terminate(): Promise<void> {\n if (this.worker) {\n this.worker.terminate();\n this.worker = null;\n this.workerReady = null;\n }\n }\n}\n\nexport function createBridge(mode: 'worker' | 'client'): ResizeBridge {\n return mode === 'client'\n ? new ResizeClientBridge()\n : new ResizeWorkerBridge();\n}\n"
|
|
9
9
|
],
|
|
10
|
-
"mappings": ";
|
|
11
|
-
"debugId": "
|
|
10
|
+
"mappings": "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",
|
|
11
|
+
"debugId": "4458478E1B29708B64756E2164756E21",
|
|
12
12
|
"names": []
|
|
13
13
|
}
|
package/dist/bridge.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../src/bridge.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAGL,KAAK,UAAU,EAChB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,UAAU,YAAY;IACpB,MAAM,CACJ,KAAK,EAAE,UAAU,EACjB,OAAO,EAAE,aAAa,EACtB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC,CAAC;IACvB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B;
|
|
1
|
+
{"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../src/bridge.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAGL,KAAK,UAAU,EAChB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,UAAU,YAAY;IACpB,MAAM,CACJ,KAAK,EAAE,UAAU,EACjB,OAAO,EAAE,aAAa,EACtB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC,CAAC;IACvB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B;AAyED,wBAAgB,YAAY,CAAC,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,YAAY,CAIpE"}
|
package/dist/bridge.node.cjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
var
|
|
1
|
+
var N={};E(N,{createBridge:()=>b});module.exports=T(N);function U(){return typeof Bun<"u"}var R=0;async function A(G,J,V,K,H){return new Promise((L,X)=>{let Q=++R;if(K?.aborted){X(new DOMException("Aborted","AbortError"));return}let Z=(O)=>{let D=O.data;if(D.id!==Q)return;if($(),D.ok&&D.data!==void 0)L(D.data);else X(Error(D.error||"Unknown worker error"))},x=(O)=>{$(),X(Error(`Worker error: ${O.message}`))},_=()=>{$(),X(new DOMException("Aborted","AbortError"))},$=()=>{G.removeEventListener("message",Z),G.removeEventListener("error",x),K?.removeEventListener("abort",_)};G.addEventListener("message",Z),G.addEventListener("error",x),K?.addEventListener("abort",_);let Y={type:J,id:Q,payload:V};if(H&&H.length>0)G.postMessage(Y,H);else G.postMessage(Y)})}function W(G){let J=G.endsWith(".js")?G:`${G}.js`,V={"resize.worker.js":{package:"@squoosh-kit/resize",specifier:"resize.worker.js"},"webp.worker.js":{package:"@squoosh-kit/webp",specifier:"webp.worker.js"}},K=V[J];if(!K)throw Error(`Unknown worker: ${J}. Supported workers: ${Object.keys(V).join(", ")}`);try{if(typeof window<"u"){let Q=K.package.split("/")[1],Z=J.replace(".js",".browser.mjs"),x=[`../../${Q}/dist/${Z}`,`../../../node_modules/@squoosh-kit/${Q}/dist/${Z}`,`../../../${Q}/dist/${Z}`],_=null;for(let $ of x)try{let Y=new URL($,"file:///home/bnowak/repos/squoosh-kit/packages/runtime/src/worker-helper.ts");return new Worker(Y,{type:"module"})}catch(Y){_=Y instanceof Error?Y:Error(String(Y))}if(_)throw _;throw Error(`Could not resolve worker ${J} using any available path strategy`)}if(typeof import.meta.resolve==="function")try{let Q=import.meta.resolve(`${K.package}/${K.specifier}`);return new Worker(Q,{type:"module"})}catch{}let H=U()?".bun.js":".node.mjs",L=J.replace(".js",""),X=K.package.includes("resize")?`../../resize/dist/${L}.${H.slice(1)}`:`../../webp/dist/${L}.${H.slice(1)}`;return new Worker(new URL(X,"file:///home/bnowak/repos/squoosh-kit/packages/runtime/src/worker-helper.ts"),{type:"module"})}catch(H){let L=H instanceof Error?H.message:String(H);throw Error(`Failed to create worker from ${J}: ${L}. Ensure the @squoosh-kit/resize and @squoosh-kit/webp packages are installed. If you're using Vite, ensure the worker files are not being optimized as dependencies.`)}}function I(G,J=1e4){return new Promise((V,K)=>{let H=setTimeout(()=>{K(Error(`Worker initialization timeout after ${J}ms. Worker file: ${G}`))},J),L;try{L=W(G)}catch(Q){clearTimeout(H),K(Q);return}let X=(Q)=>{if(Q.data?.type==="worker:ready")clearTimeout(H),L.removeEventListener("message",X),V(L)};L.addEventListener("message",X),L.postMessage({type:"worker:ping"})})}class S{async resize(G,J,V){let H=(await import("./resize.worker.node.cjs")).resizeClient;return H(G,J,V)}async terminate(){}}class B{worker=null;workerReady=null;async getWorker(){if(!this.worker){if(!this.workerReady)this.workerReady=this.createWorker();this.worker=await this.workerReady}return this.worker}async createWorker(){return I("resize.worker")}async resize(G,J,V){let K=await this.getWorker();P(G);try{return await A(K,"resize:run",{image:G,options:J},V)}catch(H){throw console.error("Resize error:",H),H}}async terminate(){if(this.worker)this.worker.terminate(),this.worker=null,this.workerReady=null}}function b(G){return G==="client"?new S:new B}
|
|
2
2
|
|
|
3
|
-
//# debugId=
|
|
3
|
+
//# debugId=9F70E4784071D18A64756E2164756E21
|
package/dist/bridge.node.cjs.map
CHANGED
|
@@ -5,9 +5,9 @@
|
|
|
5
5
|
"/**\n * Runtime environment detection utilities\n */\n\n/**\n * Detect if running in a Web Worker context\n */\nexport function isWorker(): boolean {\n return (\n typeof self !== 'undefined' &&\n typeof (globalThis as unknown as { DedicatedWorkerGlobalScope?: unknown })\n .DedicatedWorkerGlobalScope !== 'undefined'\n );\n}\n\n/**\n * Detect if running in a browser context\n */\nexport function isBrowser(): boolean {\n return typeof window !== 'undefined' && typeof document !== 'undefined';\n}\n\n/**\n * Detect if running in Bun\n */\nexport function isBun(): boolean {\n return typeof Bun !== 'undefined';\n}\n\n/**\n * Detect if running in Node.js\n */\nexport function isNode(): boolean {\n return (\n typeof process !== 'undefined' &&\n process.versions != null &&\n process.versions.node != null\n );\n}\n\n/**\n * Check if ImageData is available in the current environment\n */\nexport function hasImageData(): boolean {\n return typeof ImageData !== 'undefined';\n}\n",
|
|
6
6
|
"/**\n * Generic worker communication helper with support for transferables and AbortSignal\n */\n\nexport interface WorkerRequest<T = unknown> {\n type: string;\n id: number;\n payload: T;\n}\n\nexport interface WorkerResponse<T = unknown> {\n id: number;\n ok: boolean;\n data?: T;\n error?: string;\n}\n\nlet requestId = 0;\n\n/**\n * Call a worker with a typed request and wait for response\n *\n * @param worker - The worker instance to call\n * @param type - The message type\n * @param payload - The payload to send\n * @param signal - Optional AbortSignal to cancel the operation\n * @param transfer - Optional list of Transferable objects to transfer\n * @returns Promise that resolves with the worker's response data\n */\nexport async function callWorker<TPayload, TResponse>(\n worker: Worker,\n type: string,\n payload: TPayload,\n signal?: AbortSignal,\n transfer?: Transferable[]\n): Promise<TResponse> {\n return new Promise<TResponse>((resolve, reject) => {\n const id = ++requestId;\n\n // Check if already aborted\n if (signal?.aborted) {\n reject(new DOMException('Aborted', 'AbortError'));\n return;\n }\n\n const handleMessage = (event: MessageEvent) => {\n const response = event.data as WorkerResponse<TResponse>;\n if (response.id !== id) return;\n\n cleanup();\n\n if (response.ok && response.data !== undefined) {\n resolve(response.data);\n } else {\n reject(new Error(response.error || 'Unknown worker error'));\n }\n };\n\n const handleError = (error: ErrorEvent) => {\n cleanup();\n reject(new Error(`Worker error: ${error.message}`));\n };\n\n const handleAbort = () => {\n cleanup();\n reject(new DOMException('Aborted', 'AbortError'));\n };\n\n const cleanup = () => {\n worker.removeEventListener('message', handleMessage);\n worker.removeEventListener('error', handleError);\n signal?.removeEventListener('abort', handleAbort);\n };\n\n // Set up listeners\n worker.addEventListener('message', handleMessage);\n worker.addEventListener('error', handleError);\n signal?.addEventListener('abort', handleAbort);\n\n // Send the request\n const request: WorkerRequest<TPayload> = { type, id, payload };\n\n if (transfer && transfer.length > 0) {\n worker.postMessage(request, transfer);\n } else {\n worker.postMessage(request);\n }\n });\n}\n",
|
|
7
7
|
"/**\n * Worker helper utilities for creating and managing Web Workers\n *\n * This module provides centralized logic for creating worker instances\n * in different environments (browser, Node.js, Bun) using import.meta.resolve\n * for server-side and package-relative paths for browsers.\n */\n\nimport { isBun } from './env';\n\n/**\n * Create a Web Worker for a specific codec\n *\n * In Node.js/Bun environments, uses import.meta.resolve to locate worker files.\n * In browser environments, uses relative paths within node_modules that Vite can resolve.\n *\n * @param workerFilename - The name of the worker file (e.g., 'resize.worker' or 'webp.worker')\n * @returns Worker instance\n * @throws Error if worker creation fails with detailed error message\n */\nexport function createCodecWorker(workerFilename: string): Worker {\n // Ensure filename has correct format\n const normalizedName = workerFilename.endsWith('.js')\n ? workerFilename\n : `${workerFilename}.js`;\n\n // Map worker filenames to their package and export\n const workerMap: Record<string, { package: string; specifier: string }> = {\n 'resize.worker.js': {\n package: '@squoosh-kit/resize',\n specifier: 'resize.worker.js',\n },\n 'webp.worker.js': {\n package: '@squoosh-kit/webp',\n specifier: 'webp.worker.js',\n },\n };\n\n const workerConfig = workerMap[normalizedName];\n if (!workerConfig) {\n throw new Error(\n `Unknown worker: ${normalizedName}. ` +\n `Supported workers: ${Object.keys(workerMap).join(', ')}`\n );\n }\n\n try {\n // In browser contexts, use relative paths within the installed packages\n if (typeof window !== 'undefined') {\n const packageName = workerConfig.package.split('/')[1]; // Extract 'resize' or 'webp'\n const workerFile = normalizedName.replace('.js', '.browser.mjs');\n\n // Try multiple path strategies to support both:\n // 1. Monorepo development structure: ../../{package}/dist/{workerFile}\n // 2. npm installed structure: ../../../{package}/dist/{workerFile}\n const pathStrategies = [\n // First try monorepo structure (when runtime is at packages/runtime/src)\n `../../${packageName}/dist/${workerFile}`,\n // Then try npm structure (when runtime is at node_modules/@squoosh-kit/runtime)\n `../../../node_modules/@squoosh-kit/${packageName}/dist/${workerFile}`,\n // Alternative npm structure for cases where packages are flattened\n `../../../${packageName}/dist/${workerFile}`,\n ];\n\n let lastError: Error | null = null;\n\n for (const relPath of pathStrategies) {\n try {\n const workerUrl = new URL(relPath, import.meta.url);\n return new Worker(workerUrl, {\n type: 'module',\n });\n } catch (error) {\n lastError = error instanceof Error ? error : new Error(String(error));\n // Continue to next strategy\n }\n }\n\n // If all strategies failed, throw the last error\n if (lastError) {\n throw lastError;\n }\n throw new Error(\n `Could not resolve worker ${normalizedName} using any available path strategy`\n );\n }\n\n // Node.js/Bun: use import.meta.resolve if available\n if (typeof import.meta.resolve === 'function') {\n try {\n const resolved = import.meta.resolve(\n `${workerConfig.package}/${workerConfig.specifier}`\n );\n return new Worker(resolved, { type: 'module' });\n } catch {\n // Fallback if resolve fails - use relative path as last resort\n }\n }\n\n // Fallback for Bun: use relative path from this file's location\n const platformExt = isBun() ? '.bun.js' : '.node.mjs';\n const baseName = normalizedName.replace('.js', '');\n const relPath = workerConfig.package.includes('resize')\n ? `../../resize/dist/${baseName}.${platformExt.slice(1)}`\n : `../../webp/dist/${baseName}.${platformExt.slice(1)}`;\n\n return new Worker(new URL(relPath, import.meta.url), { type: 'module' });\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n throw new Error(\n `Failed to create worker from ${normalizedName}: ${errorMessage}. ` +\n `Ensure the @squoosh-kit/resize and @squoosh-kit/webp packages are installed. ` +\n `If you're using Vite, ensure the worker files are not being optimized as dependencies.`\n );\n }\n}\n\n/**\n * Create a worker with initialization timeout and ready signal handling\n *\n * This is a higher-level function that creates a worker and waits for it\n * to signal that it's ready to receive messages.\n *\n * @param workerFilename - The name of the worker file\n * @param timeoutMs - Timeout in milliseconds (default: 10000)\n * @returns Promise that resolves to a ready Worker instance\n * @throws Error if worker creation fails or times out\n */\nexport function createReadyWorker(\n workerFilename: string,\n timeoutMs: number = 10000\n): Promise<Worker> {\n return new Promise((resolve, reject) => {\n const timeout = setTimeout(() => {\n reject(\n new Error(\n `Worker initialization timeout after ${timeoutMs}ms. Worker file: ${workerFilename}`\n )\n );\n }, timeoutMs);\n\n let worker: Worker;\n try {\n worker = createCodecWorker(workerFilename);\n } catch (error) {\n clearTimeout(timeout);\n reject(error);\n return;\n }\n\n const handleMessage = (event: MessageEvent) => {\n if (event.data?.type === 'worker:ready') {\n clearTimeout(timeout);\n worker.removeEventListener('message', handleMessage);\n resolve(worker);\n }\n };\n\n worker.addEventListener('message', handleMessage);\n worker.postMessage({ type: 'worker:ping' });\n });\n}\n",
|
|
8
|
-
"/**\n * Bridge implementation for the Resize package, handling worker and client modes.\n */\n\nimport {\n callWorker,\n createReadyWorker,\n type ImageInput,\n} from '@squoosh-kit/runtime';\nimport {
|
|
8
|
+
"/**\n * Bridge implementation for the Resize package, handling worker and client modes.\n */\n\nimport {\n callWorker,\n createReadyWorker,\n type ImageInput,\n} from '@squoosh-kit/runtime';\nimport { validateImageInput } from '@squoosh-kit/runtime';\nimport type { ResizeOptions } from './types.ts';\n\ninterface ResizeBridge {\n resize(\n image: ImageInput,\n options: ResizeOptions,\n signal?: AbortSignal\n ): Promise<ImageInput>;\n terminate(): Promise<void>;\n}\n\nclass ResizeClientBridge implements ResizeBridge {\n async resize(\n image: ImageInput,\n options: ResizeOptions,\n signal?: AbortSignal\n ): Promise<ImageInput> {\n // Dynamically import the client resizer to avoid module loading issues in Vite\n const module = await import('./resize.worker.ts');\n const resizeClient = module.resizeClient as (\n image: ImageInput,\n options: ResizeOptions,\n signal?: AbortSignal\n ) => Promise<ImageInput>;\n return resizeClient(image, options, signal);\n }\n\n async terminate(): Promise<void> {\n // Client mode has nothing to terminate\n }\n}\n\nclass ResizeWorkerBridge implements ResizeBridge {\n private worker: Worker | null = null;\n private workerReady: Promise<Worker> | null = null;\n\n private async getWorker(): Promise<Worker> {\n if (!this.worker) {\n if (!this.workerReady) {\n this.workerReady = this.createWorker();\n }\n this.worker = await this.workerReady;\n }\n return this.worker;\n }\n\n private async createWorker(): Promise<Worker> {\n // Use the centralized worker helper for robust path resolution\n return createReadyWorker('resize.worker');\n }\n\n async resize(\n image: ImageInput,\n options: ResizeOptions,\n signal?: AbortSignal\n ): Promise<ImageInput> {\n const worker = await this.getWorker();\n\n validateImageInput(image);\n\n try {\n const result = await callWorker<\n { image: ImageInput; options: ResizeOptions },\n ImageInput\n >(worker, 'resize:run', { image, options }, signal);\n\n return result;\n } catch (error) {\n console.error('Resize error:', error);\n throw error;\n }\n }\n\n async terminate(): Promise<void> {\n if (this.worker) {\n this.worker.terminate();\n this.worker = null;\n this.workerReady = null;\n }\n }\n}\n\nexport function createBridge(mode: 'worker' | 'client'): ResizeBridge {\n return mode === 'client'\n ? new ResizeClientBridge()\n : new ResizeWorkerBridge();\n}\n"
|
|
9
9
|
],
|
|
10
|
-
"mappings": "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
|
|
11
|
-
"debugId": "
|
|
10
|
+
"mappings": "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",
|
|
11
|
+
"debugId": "9F70E4784071D18A64756E2164756E21",
|
|
12
12
|
"names": []
|
|
13
13
|
}
|
package/dist/bridge.node.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{b as
|
|
2
|
-
export{
|
|
1
|
+
import{b as q,c as T,d as P}from"./chunk-dfj7cgx8.js";function U(){return typeof Bun<"u"}var R=0;async function A(G,J,V,K,H){return new Promise((L,X)=>{let Q=++R;if(K?.aborted){X(new DOMException("Aborted","AbortError"));return}let Z=(O)=>{let D=O.data;if(D.id!==Q)return;if($(),D.ok&&D.data!==void 0)L(D.data);else X(Error(D.error||"Unknown worker error"))},x=(O)=>{$(),X(Error(`Worker error: ${O.message}`))},_=()=>{$(),X(new DOMException("Aborted","AbortError"))},$=()=>{G.removeEventListener("message",Z),G.removeEventListener("error",x),K?.removeEventListener("abort",_)};G.addEventListener("message",Z),G.addEventListener("error",x),K?.addEventListener("abort",_);let Y={type:J,id:Q,payload:V};if(H&&H.length>0)G.postMessage(Y,H);else G.postMessage(Y)})}function W(G){let J=G.endsWith(".js")?G:`${G}.js`,V={"resize.worker.js":{package:"@squoosh-kit/resize",specifier:"resize.worker.js"},"webp.worker.js":{package:"@squoosh-kit/webp",specifier:"webp.worker.js"}},K=V[J];if(!K)throw Error(`Unknown worker: ${J}. Supported workers: ${Object.keys(V).join(", ")}`);try{if(typeof window<"u"){let Q=K.package.split("/")[1],Z=J.replace(".js",".browser.mjs"),x=[`../../${Q}/dist/${Z}`,`../../../node_modules/@squoosh-kit/${Q}/dist/${Z}`,`../../../${Q}/dist/${Z}`],_=null;for(let $ of x)try{let Y=new URL($,import.meta.url);return new Worker(Y,{type:"module"})}catch(Y){_=Y instanceof Error?Y:Error(String(Y))}if(_)throw _;throw Error(`Could not resolve worker ${J} using any available path strategy`)}if(typeof import.meta.resolve==="function")try{let Q=import.meta.resolve(`${K.package}/${K.specifier}`);return new Worker(Q,{type:"module"})}catch{}let H=U()?".bun.js":".node.mjs",L=J.replace(".js",""),X=K.package.includes("resize")?`../../resize/dist/${L}.${H.slice(1)}`:`../../webp/dist/${L}.${H.slice(1)}`;return new Worker(new URL(X,import.meta.url),{type:"module"})}catch(H){let L=H instanceof Error?H.message:String(H);throw Error(`Failed to create worker from ${J}: ${L}. Ensure the @squoosh-kit/resize and @squoosh-kit/webp packages are installed. If you're using Vite, ensure the worker files are not being optimized as dependencies.`)}}function I(G,J=1e4){return new Promise((V,K)=>{let H=setTimeout(()=>{K(Error(`Worker initialization timeout after ${J}ms. Worker file: ${G}`))},J),L;try{L=W(G)}catch(Q){clearTimeout(H),K(Q);return}let X=(Q)=>{if(Q.data?.type==="worker:ready")clearTimeout(H),L.removeEventListener("message",X),V(L)};L.addEventListener("message",X),L.postMessage({type:"worker:ping"})})}class S{async resize(G,J,V){let H=(await import("./resize.worker.node.mjs")).resizeClient;return H(G,J,V)}async terminate(){}}class B{worker=null;workerReady=null;async getWorker(){if(!this.worker){if(!this.workerReady)this.workerReady=this.createWorker();this.worker=await this.workerReady}return this.worker}async createWorker(){return I("resize.worker")}async resize(G,J,V){let K=await this.getWorker();P(G);try{return await A(K,"resize:run",{image:G,options:J},V)}catch(H){throw console.error("Resize error:",H),H}}async terminate(){if(this.worker)this.worker.terminate(),this.worker=null,this.workerReady=null}}function y(G){return G==="client"?new S:new B}export{y as createBridge};
|
|
2
|
+
export{y as a};
|
|
3
3
|
|
|
4
|
-
//# debugId=
|
|
4
|
+
//# debugId=A2C3BE58EBB546F564756E2164756E21
|
package/dist/bridge.node.mjs.map
CHANGED
|
@@ -5,9 +5,9 @@
|
|
|
5
5
|
"/**\n * Runtime environment detection utilities\n */\n\n/**\n * Detect if running in a Web Worker context\n */\nexport function isWorker(): boolean {\n return (\n typeof self !== 'undefined' &&\n typeof (globalThis as unknown as { DedicatedWorkerGlobalScope?: unknown })\n .DedicatedWorkerGlobalScope !== 'undefined'\n );\n}\n\n/**\n * Detect if running in a browser context\n */\nexport function isBrowser(): boolean {\n return typeof window !== 'undefined' && typeof document !== 'undefined';\n}\n\n/**\n * Detect if running in Bun\n */\nexport function isBun(): boolean {\n return typeof Bun !== 'undefined';\n}\n\n/**\n * Detect if running in Node.js\n */\nexport function isNode(): boolean {\n return (\n typeof process !== 'undefined' &&\n process.versions != null &&\n process.versions.node != null\n );\n}\n\n/**\n * Check if ImageData is available in the current environment\n */\nexport function hasImageData(): boolean {\n return typeof ImageData !== 'undefined';\n}\n",
|
|
6
6
|
"/**\n * Generic worker communication helper with support for transferables and AbortSignal\n */\n\nexport interface WorkerRequest<T = unknown> {\n type: string;\n id: number;\n payload: T;\n}\n\nexport interface WorkerResponse<T = unknown> {\n id: number;\n ok: boolean;\n data?: T;\n error?: string;\n}\n\nlet requestId = 0;\n\n/**\n * Call a worker with a typed request and wait for response\n *\n * @param worker - The worker instance to call\n * @param type - The message type\n * @param payload - The payload to send\n * @param signal - Optional AbortSignal to cancel the operation\n * @param transfer - Optional list of Transferable objects to transfer\n * @returns Promise that resolves with the worker's response data\n */\nexport async function callWorker<TPayload, TResponse>(\n worker: Worker,\n type: string,\n payload: TPayload,\n signal?: AbortSignal,\n transfer?: Transferable[]\n): Promise<TResponse> {\n return new Promise<TResponse>((resolve, reject) => {\n const id = ++requestId;\n\n // Check if already aborted\n if (signal?.aborted) {\n reject(new DOMException('Aborted', 'AbortError'));\n return;\n }\n\n const handleMessage = (event: MessageEvent) => {\n const response = event.data as WorkerResponse<TResponse>;\n if (response.id !== id) return;\n\n cleanup();\n\n if (response.ok && response.data !== undefined) {\n resolve(response.data);\n } else {\n reject(new Error(response.error || 'Unknown worker error'));\n }\n };\n\n const handleError = (error: ErrorEvent) => {\n cleanup();\n reject(new Error(`Worker error: ${error.message}`));\n };\n\n const handleAbort = () => {\n cleanup();\n reject(new DOMException('Aborted', 'AbortError'));\n };\n\n const cleanup = () => {\n worker.removeEventListener('message', handleMessage);\n worker.removeEventListener('error', handleError);\n signal?.removeEventListener('abort', handleAbort);\n };\n\n // Set up listeners\n worker.addEventListener('message', handleMessage);\n worker.addEventListener('error', handleError);\n signal?.addEventListener('abort', handleAbort);\n\n // Send the request\n const request: WorkerRequest<TPayload> = { type, id, payload };\n\n if (transfer && transfer.length > 0) {\n worker.postMessage(request, transfer);\n } else {\n worker.postMessage(request);\n }\n });\n}\n",
|
|
7
7
|
"/**\n * Worker helper utilities for creating and managing Web Workers\n *\n * This module provides centralized logic for creating worker instances\n * in different environments (browser, Node.js, Bun) using import.meta.resolve\n * for server-side and package-relative paths for browsers.\n */\n\nimport { isBun } from './env';\n\n/**\n * Create a Web Worker for a specific codec\n *\n * In Node.js/Bun environments, uses import.meta.resolve to locate worker files.\n * In browser environments, uses relative paths within node_modules that Vite can resolve.\n *\n * @param workerFilename - The name of the worker file (e.g., 'resize.worker' or 'webp.worker')\n * @returns Worker instance\n * @throws Error if worker creation fails with detailed error message\n */\nexport function createCodecWorker(workerFilename: string): Worker {\n // Ensure filename has correct format\n const normalizedName = workerFilename.endsWith('.js')\n ? workerFilename\n : `${workerFilename}.js`;\n\n // Map worker filenames to their package and export\n const workerMap: Record<string, { package: string; specifier: string }> = {\n 'resize.worker.js': {\n package: '@squoosh-kit/resize',\n specifier: 'resize.worker.js',\n },\n 'webp.worker.js': {\n package: '@squoosh-kit/webp',\n specifier: 'webp.worker.js',\n },\n };\n\n const workerConfig = workerMap[normalizedName];\n if (!workerConfig) {\n throw new Error(\n `Unknown worker: ${normalizedName}. ` +\n `Supported workers: ${Object.keys(workerMap).join(', ')}`\n );\n }\n\n try {\n // In browser contexts, use relative paths within the installed packages\n if (typeof window !== 'undefined') {\n const packageName = workerConfig.package.split('/')[1]; // Extract 'resize' or 'webp'\n const workerFile = normalizedName.replace('.js', '.browser.mjs');\n\n // Try multiple path strategies to support both:\n // 1. Monorepo development structure: ../../{package}/dist/{workerFile}\n // 2. npm installed structure: ../../../{package}/dist/{workerFile}\n const pathStrategies = [\n // First try monorepo structure (when runtime is at packages/runtime/src)\n `../../${packageName}/dist/${workerFile}`,\n // Then try npm structure (when runtime is at node_modules/@squoosh-kit/runtime)\n `../../../node_modules/@squoosh-kit/${packageName}/dist/${workerFile}`,\n // Alternative npm structure for cases where packages are flattened\n `../../../${packageName}/dist/${workerFile}`,\n ];\n\n let lastError: Error | null = null;\n\n for (const relPath of pathStrategies) {\n try {\n const workerUrl = new URL(relPath, import.meta.url);\n return new Worker(workerUrl, {\n type: 'module',\n });\n } catch (error) {\n lastError = error instanceof Error ? error : new Error(String(error));\n // Continue to next strategy\n }\n }\n\n // If all strategies failed, throw the last error\n if (lastError) {\n throw lastError;\n }\n throw new Error(\n `Could not resolve worker ${normalizedName} using any available path strategy`\n );\n }\n\n // Node.js/Bun: use import.meta.resolve if available\n if (typeof import.meta.resolve === 'function') {\n try {\n const resolved = import.meta.resolve(\n `${workerConfig.package}/${workerConfig.specifier}`\n );\n return new Worker(resolved, { type: 'module' });\n } catch {\n // Fallback if resolve fails - use relative path as last resort\n }\n }\n\n // Fallback for Bun: use relative path from this file's location\n const platformExt = isBun() ? '.bun.js' : '.node.mjs';\n const baseName = normalizedName.replace('.js', '');\n const relPath = workerConfig.package.includes('resize')\n ? `../../resize/dist/${baseName}.${platformExt.slice(1)}`\n : `../../webp/dist/${baseName}.${platformExt.slice(1)}`;\n\n return new Worker(new URL(relPath, import.meta.url), { type: 'module' });\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error);\n throw new Error(\n `Failed to create worker from ${normalizedName}: ${errorMessage}. ` +\n `Ensure the @squoosh-kit/resize and @squoosh-kit/webp packages are installed. ` +\n `If you're using Vite, ensure the worker files are not being optimized as dependencies.`\n );\n }\n}\n\n/**\n * Create a worker with initialization timeout and ready signal handling\n *\n * This is a higher-level function that creates a worker and waits for it\n * to signal that it's ready to receive messages.\n *\n * @param workerFilename - The name of the worker file\n * @param timeoutMs - Timeout in milliseconds (default: 10000)\n * @returns Promise that resolves to a ready Worker instance\n * @throws Error if worker creation fails or times out\n */\nexport function createReadyWorker(\n workerFilename: string,\n timeoutMs: number = 10000\n): Promise<Worker> {\n return new Promise((resolve, reject) => {\n const timeout = setTimeout(() => {\n reject(\n new Error(\n `Worker initialization timeout after ${timeoutMs}ms. Worker file: ${workerFilename}`\n )\n );\n }, timeoutMs);\n\n let worker: Worker;\n try {\n worker = createCodecWorker(workerFilename);\n } catch (error) {\n clearTimeout(timeout);\n reject(error);\n return;\n }\n\n const handleMessage = (event: MessageEvent) => {\n if (event.data?.type === 'worker:ready') {\n clearTimeout(timeout);\n worker.removeEventListener('message', handleMessage);\n resolve(worker);\n }\n };\n\n worker.addEventListener('message', handleMessage);\n worker.postMessage({ type: 'worker:ping' });\n });\n}\n",
|
|
8
|
-
"/**\n * Bridge implementation for the Resize package, handling worker and client modes.\n */\n\nimport {\n callWorker,\n createReadyWorker,\n type ImageInput,\n} from '@squoosh-kit/runtime';\nimport {
|
|
8
|
+
"/**\n * Bridge implementation for the Resize package, handling worker and client modes.\n */\n\nimport {\n callWorker,\n createReadyWorker,\n type ImageInput,\n} from '@squoosh-kit/runtime';\nimport { validateImageInput } from '@squoosh-kit/runtime';\nimport type { ResizeOptions } from './types.ts';\n\ninterface ResizeBridge {\n resize(\n image: ImageInput,\n options: ResizeOptions,\n signal?: AbortSignal\n ): Promise<ImageInput>;\n terminate(): Promise<void>;\n}\n\nclass ResizeClientBridge implements ResizeBridge {\n async resize(\n image: ImageInput,\n options: ResizeOptions,\n signal?: AbortSignal\n ): Promise<ImageInput> {\n // Dynamically import the client resizer to avoid module loading issues in Vite\n const module = await import('./resize.worker.ts');\n const resizeClient = module.resizeClient as (\n image: ImageInput,\n options: ResizeOptions,\n signal?: AbortSignal\n ) => Promise<ImageInput>;\n return resizeClient(image, options, signal);\n }\n\n async terminate(): Promise<void> {\n // Client mode has nothing to terminate\n }\n}\n\nclass ResizeWorkerBridge implements ResizeBridge {\n private worker: Worker | null = null;\n private workerReady: Promise<Worker> | null = null;\n\n private async getWorker(): Promise<Worker> {\n if (!this.worker) {\n if (!this.workerReady) {\n this.workerReady = this.createWorker();\n }\n this.worker = await this.workerReady;\n }\n return this.worker;\n }\n\n private async createWorker(): Promise<Worker> {\n // Use the centralized worker helper for robust path resolution\n return createReadyWorker('resize.worker');\n }\n\n async resize(\n image: ImageInput,\n options: ResizeOptions,\n signal?: AbortSignal\n ): Promise<ImageInput> {\n const worker = await this.getWorker();\n\n validateImageInput(image);\n\n try {\n const result = await callWorker<\n { image: ImageInput; options: ResizeOptions },\n ImageInput\n >(worker, 'resize:run', { image, options }, signal);\n\n return result;\n } catch (error) {\n console.error('Resize error:', error);\n throw error;\n }\n }\n\n async terminate(): Promise<void> {\n if (this.worker) {\n this.worker.terminate();\n this.worker = null;\n this.workerReady = null;\n }\n }\n}\n\nexport function createBridge(mode: 'worker' | 'client'): ResizeBridge {\n return mode === 'client'\n ? new ResizeClientBridge()\n : new ResizeWorkerBridge();\n}\n"
|
|
9
9
|
],
|
|
10
|
-
"mappings": "
|
|
11
|
-
"debugId": "
|
|
10
|
+
"mappings": "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",
|
|
11
|
+
"debugId": "A2C3BE58EBB546F564756E2164756E21",
|
|
12
12
|
"names": []
|
|
13
13
|
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
var K=Object.create;var{getPrototypeOf:L,defineProperty:J,getOwnPropertyNames:N}=Object;var P=Object.prototype.hasOwnProperty;var Q=(E,D,F)=>{F=E!=null?K(L(E)):{};let G=D||!E||!E.__esModule?J(F,"default",{value:E,enumerable:!0}):F;for(let H of N(E))if(!P.call(G,H))J(G,H,{get:()=>E[H],enumerable:!0});return G};var R=import.meta.require;function U(E){if(!E||typeof E!=="object")throw TypeError("image must be an object");let D=E;if(!("data"in D))throw TypeError("image.data is required");let{data:F}=D;if(!(F instanceof Uint8Array||F instanceof Uint8ClampedArray))throw TypeError("image.data must be Uint8Array or Uint8ClampedArray");if(!("width"in D)||!("height"in D))throw TypeError("image.width and image.height are required");let{width:G,height:H}=D;if(typeof G!=="number"||!Number.isInteger(G)||G<=0)throw RangeError(`image.width must be a positive integer, got ${G}`);if(typeof H!=="number"||!Number.isInteger(H)||H<=0)throw RangeError(`image.height must be a positive integer, got ${H}`);let I=G*H*4;if(F.length<I)throw RangeError(`image.data too small: ${F.length} bytes, expected at least ${I} bytes for ${G}x${H} RGBA image`)}function V(E){if(typeof E!=="object"||E===null)throw TypeError("options must be an object");let D=E;if(D.width!==void 0){if(typeof D.width!=="number"||!Number.isInteger(D.width)||D.width<=0)throw RangeError(`options.width must be a positive integer, got ${D.width}`)}if(D.height!==void 0){if(typeof D.height!=="number"||!Number.isInteger(D.height)||D.height<=0)throw RangeError(`options.height must be a positive integer, got ${D.height}`)}if(D.method!==void 0){let F=["triangular","catrom","mitchell","lanczos3"];if(!F.includes(D.method))throw TypeError(`options.method must be one of: ${F.join(", ")}, got ${D.method}`)}if(D.premultiply!==void 0&&typeof D.premultiply!=="boolean")throw TypeError(`options.premultiply must be boolean, got ${typeof D.premultiply}`);if(D.linearRGB!==void 0&&typeof D.linearRGB!=="boolean")throw TypeError(`options.linearRGB must be boolean, got ${typeof D.linearRGB}`)}
|
|
3
|
+
export{Q as b,R as c,U as d,V as e};
|
|
4
|
+
|
|
5
|
+
//# debugId=2AF77CE99218FC9F64756E2164756E21
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"import type { ImageInput } from './types.js';\n\nexport function validateArrayBuffer(\n buffer: unknown\n): asserts buffer is ArrayBuffer {\n // Check if SharedArrayBuffer is defined in the current environment before using it\n if (\n typeof SharedArrayBuffer !== 'undefined' &&\n buffer instanceof SharedArrayBuffer\n ) {\n throw new Error(\n 'SharedArrayBuffer is not supported. ' +\n 'Use regular ArrayBuffer or Uint8Array instead.'\n );\n }\n\n if (!(buffer instanceof ArrayBuffer)) {\n throw new TypeError('image.data.buffer must be an ArrayBuffer');\n }\n}\n\nexport function validateImageInput(\n image: unknown\n): asserts image is ImageInput {\n if (!image || typeof image !== 'object') {\n throw new TypeError('image must be an object');\n }\n\n const imageObj = image as Record<string, unknown>;\n\n if (!('data' in imageObj)) {\n throw new TypeError('image.data is required');\n }\n\n const { data } = imageObj;\n if (!(data instanceof Uint8Array || data instanceof Uint8ClampedArray)) {\n throw new TypeError('image.data must be Uint8Array or Uint8ClampedArray');\n }\n\n if (!('width' in imageObj) || !('height' in imageObj)) {\n throw new TypeError('image.width and image.height are required');\n }\n\n const { width, height } = imageObj;\n\n if (typeof width !== 'number' || !Number.isInteger(width) || width <= 0) {\n throw new RangeError(\n `image.width must be a positive integer, got ${width}`\n );\n }\n\n if (typeof height !== 'number' || !Number.isInteger(height) || height <= 0) {\n throw new RangeError(\n `image.height must be a positive integer, got ${height}`\n );\n }\n\n const expectedSize = width * height * 4;\n if (data.length < expectedSize) {\n throw new RangeError(\n `image.data too small: ${data.length} bytes, expected at least ${expectedSize} bytes for ${width}x${height} RGBA image`\n );\n }\n}\n\nexport function validateResizeOptions(options: unknown): asserts options is {\n width?: number;\n height?: number;\n method?: 'triangular' | 'catrom' | 'mitchell' | 'lanczos3';\n premultiply?: boolean;\n linearRGB?: boolean;\n} {\n if (typeof options !== 'object' || options === null) {\n throw new TypeError('options must be an object');\n }\n\n const opts = options as Record<string, unknown>;\n\n if (opts.width !== undefined) {\n if (\n typeof opts.width !== 'number' ||\n !Number.isInteger(opts.width) ||\n opts.width <= 0\n ) {\n throw new RangeError(\n `options.width must be a positive integer, got ${opts.width}`\n );\n }\n }\n\n if (opts.height !== undefined) {\n if (\n typeof opts.height !== 'number' ||\n !Number.isInteger(opts.height) ||\n opts.height <= 0\n ) {\n throw new RangeError(\n `options.height must be a positive integer, got ${opts.height}`\n );\n }\n }\n\n if (opts.method !== undefined) {\n const validMethods = ['triangular', 'catrom', 'mitchell', 'lanczos3'];\n if (!validMethods.includes(opts.method as string)) {\n throw new TypeError(\n `options.method must be one of: ${validMethods.join(', ')}, got ${opts.method}`\n );\n }\n }\n\n if (opts.premultiply !== undefined && typeof opts.premultiply !== 'boolean') {\n throw new TypeError(\n `options.premultiply must be boolean, got ${typeof opts.premultiply}`\n );\n }\n\n if (opts.linearRGB !== undefined && typeof opts.linearRGB !== 'boolean') {\n throw new TypeError(\n `options.linearRGB must be boolean, got ${typeof opts.linearRGB}`\n );\n }\n}\n\nexport function validateWebpOptions(\n options: unknown\n): asserts options is Record<string, unknown> | undefined {\n if (options === undefined) {\n return;\n }\n\n if (typeof options !== 'object' || options === null) {\n throw new TypeError('options must be an object or undefined');\n }\n\n const opts = options as Record<string, unknown>;\n\n if ('quality' in opts && opts.quality !== undefined) {\n const quality = opts.quality;\n\n if (Number.isNaN(quality)) {\n throw new RangeError(\n 'quality must be a valid number in the range 0-100, got NaN'\n );\n }\n\n if (typeof quality !== 'number') {\n throw new TypeError('quality must be a number');\n }\n\n if (!Number.isInteger(quality)) {\n throw new RangeError(\n 'quality must be an integer in the range 0-100, got floating point'\n );\n }\n\n if (quality < 0 || quality > 100) {\n throw new RangeError(\n `quality must be in the range 0-100, got ${quality}`\n );\n }\n }\n}\n"
|
|
6
6
|
],
|
|
7
|
-
"mappings": "
|
|
8
|
-
"debugId": "
|
|
7
|
+
"mappings": ";iVAqBO,SAAS,CAAkB,CAChC,EAC6B,CAC7B,GAAI,CAAC,GAAS,OAAO,IAAU,SAC7B,MAAU,UAAU,yBAAyB,EAG/C,IAAM,EAAW,EAEjB,GAAI,EAAE,SAAU,GACd,MAAU,UAAU,wBAAwB,EAG9C,IAAQ,QAAS,EACjB,GAAI,EAAE,aAAgB,YAAc,aAAgB,mBAClD,MAAU,UAAU,oDAAoD,EAG1E,GAAI,EAAE,UAAW,IAAa,EAAE,WAAY,GAC1C,MAAU,UAAU,2CAA2C,EAGjE,IAAQ,QAAO,UAAW,EAE1B,GAAI,OAAO,IAAU,UAAY,CAAC,OAAO,UAAU,CAAK,GAAK,GAAS,EACpE,MAAU,WACR,+CAA+C,GACjD,EAGF,GAAI,OAAO,IAAW,UAAY,CAAC,OAAO,UAAU,CAAM,GAAK,GAAU,EACvE,MAAU,WACR,gDAAgD,GAClD,EAGF,IAAM,EAAe,EAAQ,EAAS,EACtC,GAAI,EAAK,OAAS,EAChB,MAAU,WACR,yBAAyB,EAAK,mCAAmC,eAA0B,KAAS,cACtG,EAIG,SAAS,CAAqB,CAAC,EAMpC,CACA,GAAI,OAAO,IAAY,UAAY,IAAY,KAC7C,MAAU,UAAU,2BAA2B,EAGjD,IAAM,EAAO,EAEb,GAAI,EAAK,QAAU,QACjB,GACE,OAAO,EAAK,QAAU,UACtB,CAAC,OAAO,UAAU,EAAK,KAAK,GAC5B,EAAK,OAAS,EAEd,MAAU,WACR,iDAAiD,EAAK,OACxD,EAIJ,GAAI,EAAK,SAAW,QAClB,GACE,OAAO,EAAK,SAAW,UACvB,CAAC,OAAO,UAAU,EAAK,MAAM,GAC7B,EAAK,QAAU,EAEf,MAAU,WACR,kDAAkD,EAAK,QACzD,EAIJ,GAAI,EAAK,SAAW,OAAW,CAC7B,IAAM,EAAe,CAAC,aAAc,SAAU,WAAY,UAAU,EACpE,GAAI,CAAC,EAAa,SAAS,EAAK,MAAgB,EAC9C,MAAU,UACR,kCAAkC,EAAa,KAAK,IAAI,UAAU,EAAK,QACzE,EAIJ,GAAI,EAAK,cAAgB,QAAa,OAAO,EAAK,cAAgB,UAChE,MAAU,UACR,4CAA4C,OAAO,EAAK,aAC1D,EAGF,GAAI,EAAK,YAAc,QAAa,OAAO,EAAK,YAAc,UAC5D,MAAU,UACR,0CAA0C,OAAO,EAAK,WACxD",
|
|
8
|
+
"debugId": "2AF77CE99218FC9F64756E2164756E21",
|
|
9
9
|
"names": []
|
|
10
10
|
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
function J(E){if(!E||typeof E!=="object")throw TypeError("image must be an object");let D=E;if(!("data"in D))throw TypeError("image.data is required");let{data:F}=D;if(!(F instanceof Uint8Array||F instanceof Uint8ClampedArray))throw TypeError("image.data must be Uint8Array or Uint8ClampedArray");if(!("width"in D)||!("height"in D))throw TypeError("image.width and image.height are required");let{width:G,height:H}=D;if(typeof G!=="number"||!Number.isInteger(G)||G<=0)throw RangeError(`image.width must be a positive integer, got ${G}`);if(typeof H!=="number"||!Number.isInteger(H)||H<=0)throw RangeError(`image.height must be a positive integer, got ${H}`);let I=G*H*4;if(F.length<I)throw RangeError(`image.data too small: ${F.length} bytes, expected at least ${I} bytes for ${G}x${H} RGBA image`)}function K(E){if(typeof E!=="object"||E===null)throw TypeError("options must be an object");let D=E;if(D.width!==void 0){if(typeof D.width!=="number"||!Number.isInteger(D.width)||D.width<=0)throw RangeError(`options.width must be a positive integer, got ${D.width}`)}if(D.height!==void 0){if(typeof D.height!=="number"||!Number.isInteger(D.height)||D.height<=0)throw RangeError(`options.height must be a positive integer, got ${D.height}`)}if(D.method!==void 0){let F=["triangular","catrom","mitchell","lanczos3"];if(!F.includes(D.method))throw TypeError(`options.method must be one of: ${F.join(", ")}, got ${D.method}`)}if(D.premultiply!==void 0&&typeof D.premultiply!=="boolean")throw TypeError(`options.premultiply must be boolean, got ${typeof D.premultiply}`);if(D.linearRGB!==void 0&&typeof D.linearRGB!=="boolean")throw TypeError(`options.linearRGB must be boolean, got ${typeof D.linearRGB}`)}
|
|
2
|
+
|
|
3
|
+
//# debugId=1B44534118BBDD2864756E2164756E21
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"import type { ImageInput } from './types.js';\n\nexport function validateArrayBuffer(\n buffer: unknown\n): asserts buffer is ArrayBuffer {\n // Check if SharedArrayBuffer is defined in the current environment before using it\n if (\n typeof SharedArrayBuffer !== 'undefined' &&\n buffer instanceof SharedArrayBuffer\n ) {\n throw new Error(\n 'SharedArrayBuffer is not supported. ' +\n 'Use regular ArrayBuffer or Uint8Array instead.'\n );\n }\n\n if (!(buffer instanceof ArrayBuffer)) {\n throw new TypeError('image.data.buffer must be an ArrayBuffer');\n }\n}\n\nexport function validateImageInput(\n image: unknown\n): asserts image is ImageInput {\n if (!image || typeof image !== 'object') {\n throw new TypeError('image must be an object');\n }\n\n const imageObj = image as Record<string, unknown>;\n\n if (!('data' in imageObj)) {\n throw new TypeError('image.data is required');\n }\n\n const { data } = imageObj;\n if (!(data instanceof Uint8Array || data instanceof Uint8ClampedArray)) {\n throw new TypeError('image.data must be Uint8Array or Uint8ClampedArray');\n }\n\n if (!('width' in imageObj) || !('height' in imageObj)) {\n throw new TypeError('image.width and image.height are required');\n }\n\n const { width, height } = imageObj;\n\n if (typeof width !== 'number' || !Number.isInteger(width) || width <= 0) {\n throw new RangeError(\n `image.width must be a positive integer, got ${width}`\n );\n }\n\n if (typeof height !== 'number' || !Number.isInteger(height) || height <= 0) {\n throw new RangeError(\n `image.height must be a positive integer, got ${height}`\n );\n }\n\n const expectedSize = width * height * 4;\n if (data.length < expectedSize) {\n throw new RangeError(\n `image.data too small: ${data.length} bytes, expected at least ${expectedSize} bytes for ${width}x${height} RGBA image`\n );\n }\n}\n\nexport function validateResizeOptions(options: unknown): asserts options is {\n width?: number;\n height?: number;\n method?: 'triangular' | 'catrom' | 'mitchell' | 'lanczos3';\n premultiply?: boolean;\n linearRGB?: boolean;\n} {\n if (typeof options !== 'object' || options === null) {\n throw new TypeError('options must be an object');\n }\n\n const opts = options as Record<string, unknown>;\n\n if (opts.width !== undefined) {\n if (\n typeof opts.width !== 'number' ||\n !Number.isInteger(opts.width) ||\n opts.width <= 0\n ) {\n throw new RangeError(\n `options.width must be a positive integer, got ${opts.width}`\n );\n }\n }\n\n if (opts.height !== undefined) {\n if (\n typeof opts.height !== 'number' ||\n !Number.isInteger(opts.height) ||\n opts.height <= 0\n ) {\n throw new RangeError(\n `options.height must be a positive integer, got ${opts.height}`\n );\n }\n }\n\n if (opts.method !== undefined) {\n const validMethods = ['triangular', 'catrom', 'mitchell', 'lanczos3'];\n if (!validMethods.includes(opts.method as string)) {\n throw new TypeError(\n `options.method must be one of: ${validMethods.join(', ')}, got ${opts.method}`\n );\n }\n }\n\n if (opts.premultiply !== undefined && typeof opts.premultiply !== 'boolean') {\n throw new TypeError(\n `options.premultiply must be boolean, got ${typeof opts.premultiply}`\n );\n }\n\n if (opts.linearRGB !== undefined && typeof opts.linearRGB !== 'boolean') {\n throw new TypeError(\n `options.linearRGB must be boolean, got ${typeof opts.linearRGB}`\n );\n }\n}\n\nexport function validateWebpOptions(\n options: unknown\n): asserts options is Record<string, unknown> | undefined {\n if (options === undefined) {\n return;\n }\n\n if (typeof options !== 'object' || options === null) {\n throw new TypeError('options must be an object or undefined');\n }\n\n const opts = options as Record<string, unknown>;\n\n if ('quality' in opts && opts.quality !== undefined) {\n const quality = opts.quality;\n\n if (Number.isNaN(quality)) {\n throw new RangeError(\n 'quality must be a valid number in the range 0-100, got NaN'\n );\n }\n\n if (typeof quality !== 'number') {\n throw new TypeError('quality must be a number');\n }\n\n if (!Number.isInteger(quality)) {\n throw new RangeError(\n 'quality must be an integer in the range 0-100, got floating point'\n );\n }\n\n if (quality < 0 || quality > 100) {\n throw new RangeError(\n `quality must be in the range 0-100, got ${quality}`\n );\n }\n }\n}\n"
|
|
6
6
|
],
|
|
7
|
-
"mappings": "
|
|
8
|
-
"debugId": "
|
|
7
|
+
"mappings": "AAqBO,SAAS,CAAkB,CAChC,EAC6B,CAC7B,GAAI,CAAC,GAAS,OAAO,IAAU,SAC7B,MAAU,UAAU,yBAAyB,EAG/C,IAAM,EAAW,EAEjB,GAAI,EAAE,SAAU,GACd,MAAU,UAAU,wBAAwB,EAG9C,IAAQ,QAAS,EACjB,GAAI,EAAE,aAAgB,YAAc,aAAgB,mBAClD,MAAU,UAAU,oDAAoD,EAG1E,GAAI,EAAE,UAAW,IAAa,EAAE,WAAY,GAC1C,MAAU,UAAU,2CAA2C,EAGjE,IAAQ,QAAO,UAAW,EAE1B,GAAI,OAAO,IAAU,UAAY,CAAC,OAAO,UAAU,CAAK,GAAK,GAAS,EACpE,MAAU,WACR,+CAA+C,GACjD,EAGF,GAAI,OAAO,IAAW,UAAY,CAAC,OAAO,UAAU,CAAM,GAAK,GAAU,EACvE,MAAU,WACR,gDAAgD,GAClD,EAGF,IAAM,EAAe,EAAQ,EAAS,EACtC,GAAI,EAAK,OAAS,EAChB,MAAU,WACR,yBAAyB,EAAK,mCAAmC,eAA0B,KAAS,cACtG,EAIG,SAAS,CAAqB,CAAC,EAMpC,CACA,GAAI,OAAO,IAAY,UAAY,IAAY,KAC7C,MAAU,UAAU,2BAA2B,EAGjD,IAAM,EAAO,EAEb,GAAI,EAAK,QAAU,QACjB,GACE,OAAO,EAAK,QAAU,UACtB,CAAC,OAAO,UAAU,EAAK,KAAK,GAC5B,EAAK,OAAS,EAEd,MAAU,WACR,iDAAiD,EAAK,OACxD,EAIJ,GAAI,EAAK,SAAW,QAClB,GACE,OAAO,EAAK,SAAW,UACvB,CAAC,OAAO,UAAU,EAAK,MAAM,GAC7B,EAAK,QAAU,EAEf,MAAU,WACR,kDAAkD,EAAK,QACzD,EAIJ,GAAI,EAAK,SAAW,OAAW,CAC7B,IAAM,EAAe,CAAC,aAAc,SAAU,WAAY,UAAU,EACpE,GAAI,CAAC,EAAa,SAAS,EAAK,MAAgB,EAC9C,MAAU,UACR,kCAAkC,EAAa,KAAK,IAAI,UAAU,EAAK,QACzE,EAIJ,GAAI,EAAK,cAAgB,QAAa,OAAO,EAAK,cAAgB,UAChE,MAAU,UACR,4CAA4C,OAAO,EAAK,aAC1D,EAGF,GAAI,EAAK,YAAc,QAAa,OAAO,EAAK,YAAc,UAC5D,MAAU,UACR,0CAA0C,OAAO,EAAK,WACxD",
|
|
8
|
+
"debugId": "1B44534118BBDD2864756E2164756E21",
|
|
9
9
|
"names": []
|
|
10
10
|
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import{createRequire as Q}from"node:module";var K=Object.create;var{getPrototypeOf:L,defineProperty:J,getOwnPropertyNames:N}=Object;var P=Object.prototype.hasOwnProperty;var R=(E,D,F)=>{F=E!=null?K(L(E)):{};let G=D||!E||!E.__esModule?J(F,"default",{value:E,enumerable:!0}):F;for(let H of N(E))if(!P.call(G,H))J(G,H,{get:()=>E[H],enumerable:!0});return G};var U=Q(import.meta.url);function W(E){if(!E||typeof E!=="object")throw TypeError("image must be an object");let D=E;if(!("data"in D))throw TypeError("image.data is required");let{data:F}=D;if(!(F instanceof Uint8Array||F instanceof Uint8ClampedArray))throw TypeError("image.data must be Uint8Array or Uint8ClampedArray");if(!("width"in D)||!("height"in D))throw TypeError("image.width and image.height are required");let{width:G,height:H}=D;if(typeof G!=="number"||!Number.isInteger(G)||G<=0)throw RangeError(`image.width must be a positive integer, got ${G}`);if(typeof H!=="number"||!Number.isInteger(H)||H<=0)throw RangeError(`image.height must be a positive integer, got ${H}`);let I=G*H*4;if(F.length<I)throw RangeError(`image.data too small: ${F.length} bytes, expected at least ${I} bytes for ${G}x${H} RGBA image`)}function X(E){if(typeof E!=="object"||E===null)throw TypeError("options must be an object");let D=E;if(D.width!==void 0){if(typeof D.width!=="number"||!Number.isInteger(D.width)||D.width<=0)throw RangeError(`options.width must be a positive integer, got ${D.width}`)}if(D.height!==void 0){if(typeof D.height!=="number"||!Number.isInteger(D.height)||D.height<=0)throw RangeError(`options.height must be a positive integer, got ${D.height}`)}if(D.method!==void 0){let F=["triangular","catrom","mitchell","lanczos3"];if(!F.includes(D.method))throw TypeError(`options.method must be one of: ${F.join(", ")}, got ${D.method}`)}if(D.premultiply!==void 0&&typeof D.premultiply!=="boolean")throw TypeError(`options.premultiply must be boolean, got ${typeof D.premultiply}`);if(D.linearRGB!==void 0&&typeof D.linearRGB!=="boolean")throw TypeError(`options.linearRGB must be boolean, got ${typeof D.linearRGB}`)}
|
|
2
|
+
export{R as b,U as c,W as d,X as e};
|
|
3
|
+
|
|
4
|
+
//# debugId=8E552EE3B73172BB64756E2164756E21
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"import type { ImageInput } from './types.js';\n\nexport function validateArrayBuffer(\n buffer: unknown\n): asserts buffer is ArrayBuffer {\n // Check if SharedArrayBuffer is defined in the current environment before using it\n if (\n typeof SharedArrayBuffer !== 'undefined' &&\n buffer instanceof SharedArrayBuffer\n ) {\n throw new Error(\n 'SharedArrayBuffer is not supported. ' +\n 'Use regular ArrayBuffer or Uint8Array instead.'\n );\n }\n\n if (!(buffer instanceof ArrayBuffer)) {\n throw new TypeError('image.data.buffer must be an ArrayBuffer');\n }\n}\n\nexport function validateImageInput(\n image: unknown\n): asserts image is ImageInput {\n if (!image || typeof image !== 'object') {\n throw new TypeError('image must be an object');\n }\n\n const imageObj = image as Record<string, unknown>;\n\n if (!('data' in imageObj)) {\n throw new TypeError('image.data is required');\n }\n\n const { data } = imageObj;\n if (!(data instanceof Uint8Array || data instanceof Uint8ClampedArray)) {\n throw new TypeError('image.data must be Uint8Array or Uint8ClampedArray');\n }\n\n if (!('width' in imageObj) || !('height' in imageObj)) {\n throw new TypeError('image.width and image.height are required');\n }\n\n const { width, height } = imageObj;\n\n if (typeof width !== 'number' || !Number.isInteger(width) || width <= 0) {\n throw new RangeError(\n `image.width must be a positive integer, got ${width}`\n );\n }\n\n if (typeof height !== 'number' || !Number.isInteger(height) || height <= 0) {\n throw new RangeError(\n `image.height must be a positive integer, got ${height}`\n );\n }\n\n const expectedSize = width * height * 4;\n if (data.length < expectedSize) {\n throw new RangeError(\n `image.data too small: ${data.length} bytes, expected at least ${expectedSize} bytes for ${width}x${height} RGBA image`\n );\n }\n}\n\nexport function validateResizeOptions(options: unknown): asserts options is {\n width?: number;\n height?: number;\n method?: 'triangular' | 'catrom' | 'mitchell' | 'lanczos3';\n premultiply?: boolean;\n linearRGB?: boolean;\n} {\n if (typeof options !== 'object' || options === null) {\n throw new TypeError('options must be an object');\n }\n\n const opts = options as Record<string, unknown>;\n\n if (opts.width !== undefined) {\n if (\n typeof opts.width !== 'number' ||\n !Number.isInteger(opts.width) ||\n opts.width <= 0\n ) {\n throw new RangeError(\n `options.width must be a positive integer, got ${opts.width}`\n );\n }\n }\n\n if (opts.height !== undefined) {\n if (\n typeof opts.height !== 'number' ||\n !Number.isInteger(opts.height) ||\n opts.height <= 0\n ) {\n throw new RangeError(\n `options.height must be a positive integer, got ${opts.height}`\n );\n }\n }\n\n if (opts.method !== undefined) {\n const validMethods = ['triangular', 'catrom', 'mitchell', 'lanczos3'];\n if (!validMethods.includes(opts.method as string)) {\n throw new TypeError(\n `options.method must be one of: ${validMethods.join(', ')}, got ${opts.method}`\n );\n }\n }\n\n if (opts.premultiply !== undefined && typeof opts.premultiply !== 'boolean') {\n throw new TypeError(\n `options.premultiply must be boolean, got ${typeof opts.premultiply}`\n );\n }\n\n if (opts.linearRGB !== undefined && typeof opts.linearRGB !== 'boolean') {\n throw new TypeError(\n `options.linearRGB must be boolean, got ${typeof opts.linearRGB}`\n );\n }\n}\n\nexport function validateWebpOptions(\n options: unknown\n): asserts options is Record<string, unknown> | undefined {\n if (options === undefined) {\n return;\n }\n\n if (typeof options !== 'object' || options === null) {\n throw new TypeError('options must be an object or undefined');\n }\n\n const opts = options as Record<string, unknown>;\n\n if ('quality' in opts && opts.quality !== undefined) {\n const quality = opts.quality;\n\n if (Number.isNaN(quality)) {\n throw new RangeError(\n 'quality must be a valid number in the range 0-100, got NaN'\n );\n }\n\n if (typeof quality !== 'number') {\n throw new TypeError('quality must be a number');\n }\n\n if (!Number.isInteger(quality)) {\n throw new RangeError(\n 'quality must be an integer in the range 0-100, got floating point'\n );\n }\n\n if (quality < 0 || quality > 100) {\n throw new RangeError(\n `quality must be in the range 0-100, got ${quality}`\n );\n }\n }\n}\n"
|
|
6
6
|
],
|
|
7
|
-
"mappings": "
|
|
8
|
-
"debugId": "
|
|
7
|
+
"mappings": "4XAqBO,SAAS,CAAkB,CAChC,EAC6B,CAC7B,GAAI,CAAC,GAAS,OAAO,IAAU,SAC7B,MAAU,UAAU,yBAAyB,EAG/C,IAAM,EAAW,EAEjB,GAAI,EAAE,SAAU,GACd,MAAU,UAAU,wBAAwB,EAG9C,IAAQ,QAAS,EACjB,GAAI,EAAE,aAAgB,YAAc,aAAgB,mBAClD,MAAU,UAAU,oDAAoD,EAG1E,GAAI,EAAE,UAAW,IAAa,EAAE,WAAY,GAC1C,MAAU,UAAU,2CAA2C,EAGjE,IAAQ,QAAO,UAAW,EAE1B,GAAI,OAAO,IAAU,UAAY,CAAC,OAAO,UAAU,CAAK,GAAK,GAAS,EACpE,MAAU,WACR,+CAA+C,GACjD,EAGF,GAAI,OAAO,IAAW,UAAY,CAAC,OAAO,UAAU,CAAM,GAAK,GAAU,EACvE,MAAU,WACR,gDAAgD,GAClD,EAGF,IAAM,EAAe,EAAQ,EAAS,EACtC,GAAI,EAAK,OAAS,EAChB,MAAU,WACR,yBAAyB,EAAK,mCAAmC,eAA0B,KAAS,cACtG,EAIG,SAAS,CAAqB,CAAC,EAMpC,CACA,GAAI,OAAO,IAAY,UAAY,IAAY,KAC7C,MAAU,UAAU,2BAA2B,EAGjD,IAAM,EAAO,EAEb,GAAI,EAAK,QAAU,QACjB,GACE,OAAO,EAAK,QAAU,UACtB,CAAC,OAAO,UAAU,EAAK,KAAK,GAC5B,EAAK,OAAS,EAEd,MAAU,WACR,iDAAiD,EAAK,OACxD,EAIJ,GAAI,EAAK,SAAW,QAClB,GACE,OAAO,EAAK,SAAW,UACvB,CAAC,OAAO,UAAU,EAAK,MAAM,GAC7B,EAAK,QAAU,EAEf,MAAU,WACR,kDAAkD,EAAK,QACzD,EAIJ,GAAI,EAAK,SAAW,OAAW,CAC7B,IAAM,EAAe,CAAC,aAAc,SAAU,WAAY,UAAU,EACpE,GAAI,CAAC,EAAa,SAAS,EAAK,MAAgB,EAC9C,MAAU,UACR,kCAAkC,EAAa,KAAK,IAAI,UAAU,EAAK,QACzE,EAIJ,GAAI,EAAK,cAAgB,QAAa,OAAO,EAAK,cAAgB,UAChE,MAAU,UACR,4CAA4C,OAAO,EAAK,aAC1D,EAGF,GAAI,EAAK,YAAc,QAAa,OAAO,EAAK,YAAc,UAC5D,MAAU,UACR,0CAA0C,OAAO,EAAK,WACxD",
|
|
8
|
+
"debugId": "8E552EE3B73172BB64756E2164756E21",
|
|
9
9
|
"names": []
|
|
10
10
|
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
var K=Object.create;var{getPrototypeOf:L,defineProperty:J,getOwnPropertyNames:N}=Object;var P=Object.prototype.hasOwnProperty;var Q=(E,D,F)=>{F=E!=null?K(L(E)):{};let G=D||!E||!E.__esModule?J(F,"default",{value:E,enumerable:!0}):F;for(let H of N(E))if(!P.call(G,H))J(G,H,{get:()=>E[H],enumerable:!0});return G};var R=((E)=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(E,{get:(D,F)=>(typeof require<"u"?require:D)[F]}):E)(function(E){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+E+'" is not supported')});function U(E){if(!E||typeof E!=="object")throw TypeError("image must be an object");let D=E;if(!("data"in D))throw TypeError("image.data is required");let{data:F}=D;if(!(F instanceof Uint8Array||F instanceof Uint8ClampedArray))throw TypeError("image.data must be Uint8Array or Uint8ClampedArray");if(!("width"in D)||!("height"in D))throw TypeError("image.width and image.height are required");let{width:G,height:H}=D;if(typeof G!=="number"||!Number.isInteger(G)||G<=0)throw RangeError(`image.width must be a positive integer, got ${G}`);if(typeof H!=="number"||!Number.isInteger(H)||H<=0)throw RangeError(`image.height must be a positive integer, got ${H}`);let I=G*H*4;if(F.length<I)throw RangeError(`image.data too small: ${F.length} bytes, expected at least ${I} bytes for ${G}x${H} RGBA image`)}function V(E){if(typeof E!=="object"||E===null)throw TypeError("options must be an object");let D=E;if(D.width!==void 0){if(typeof D.width!=="number"||!Number.isInteger(D.width)||D.width<=0)throw RangeError(`options.width must be a positive integer, got ${D.width}`)}if(D.height!==void 0){if(typeof D.height!=="number"||!Number.isInteger(D.height)||D.height<=0)throw RangeError(`options.height must be a positive integer, got ${D.height}`)}if(D.method!==void 0){let F=["triangular","catrom","mitchell","lanczos3"];if(!F.includes(D.method))throw TypeError(`options.method must be one of: ${F.join(", ")}, got ${D.method}`)}if(D.premultiply!==void 0&&typeof D.premultiply!=="boolean")throw TypeError(`options.premultiply must be boolean, got ${typeof D.premultiply}`);if(D.linearRGB!==void 0&&typeof D.linearRGB!=="boolean")throw TypeError(`options.linearRGB must be boolean, got ${typeof D.linearRGB}`)}
|
|
2
|
+
export{Q as b,R as c,U as d,V as e};
|
|
3
|
+
|
|
4
|
+
//# debugId=13DED32B169ADD1364756E2164756E21
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"import type { ImageInput } from './types.js';\n\nexport function validateArrayBuffer(\n buffer: unknown\n): asserts buffer is ArrayBuffer {\n // Check if SharedArrayBuffer is defined in the current environment before using it\n if (\n typeof SharedArrayBuffer !== 'undefined' &&\n buffer instanceof SharedArrayBuffer\n ) {\n throw new Error(\n 'SharedArrayBuffer is not supported. ' +\n 'Use regular ArrayBuffer or Uint8Array instead.'\n );\n }\n\n if (!(buffer instanceof ArrayBuffer)) {\n throw new TypeError('image.data.buffer must be an ArrayBuffer');\n }\n}\n\nexport function validateImageInput(\n image: unknown\n): asserts image is ImageInput {\n if (!image || typeof image !== 'object') {\n throw new TypeError('image must be an object');\n }\n\n const imageObj = image as Record<string, unknown>;\n\n if (!('data' in imageObj)) {\n throw new TypeError('image.data is required');\n }\n\n const { data } = imageObj;\n if (!(data instanceof Uint8Array || data instanceof Uint8ClampedArray)) {\n throw new TypeError('image.data must be Uint8Array or Uint8ClampedArray');\n }\n\n if (!('width' in imageObj) || !('height' in imageObj)) {\n throw new TypeError('image.width and image.height are required');\n }\n\n const { width, height } = imageObj;\n\n if (typeof width !== 'number' || !Number.isInteger(width) || width <= 0) {\n throw new RangeError(\n `image.width must be a positive integer, got ${width}`\n );\n }\n\n if (typeof height !== 'number' || !Number.isInteger(height) || height <= 0) {\n throw new RangeError(\n `image.height must be a positive integer, got ${height}`\n );\n }\n\n const expectedSize = width * height * 4;\n if (data.length < expectedSize) {\n throw new RangeError(\n `image.data too small: ${data.length} bytes, expected at least ${expectedSize} bytes for ${width}x${height} RGBA image`\n );\n }\n}\n\nexport function validateResizeOptions(options: unknown): asserts options is {\n width?: number;\n height?: number;\n method?: 'triangular' | 'catrom' | 'mitchell' | 'lanczos3';\n premultiply?: boolean;\n linearRGB?: boolean;\n} {\n if (typeof options !== 'object' || options === null) {\n throw new TypeError('options must be an object');\n }\n\n const opts = options as Record<string, unknown>;\n\n if (opts.width !== undefined) {\n if (\n typeof opts.width !== 'number' ||\n !Number.isInteger(opts.width) ||\n opts.width <= 0\n ) {\n throw new RangeError(\n `options.width must be a positive integer, got ${opts.width}`\n );\n }\n }\n\n if (opts.height !== undefined) {\n if (\n typeof opts.height !== 'number' ||\n !Number.isInteger(opts.height) ||\n opts.height <= 0\n ) {\n throw new RangeError(\n `options.height must be a positive integer, got ${opts.height}`\n );\n }\n }\n\n if (opts.method !== undefined) {\n const validMethods = ['triangular', 'catrom', 'mitchell', 'lanczos3'];\n if (!validMethods.includes(opts.method as string)) {\n throw new TypeError(\n `options.method must be one of: ${validMethods.join(', ')}, got ${opts.method}`\n );\n }\n }\n\n if (opts.premultiply !== undefined && typeof opts.premultiply !== 'boolean') {\n throw new TypeError(\n `options.premultiply must be boolean, got ${typeof opts.premultiply}`\n );\n }\n\n if (opts.linearRGB !== undefined && typeof opts.linearRGB !== 'boolean') {\n throw new TypeError(\n `options.linearRGB must be boolean, got ${typeof opts.linearRGB}`\n );\n }\n}\n\nexport function validateWebpOptions(\n options: unknown\n): asserts options is Record<string, unknown> | undefined {\n if (options === undefined) {\n return;\n }\n\n if (typeof options !== 'object' || options === null) {\n throw new TypeError('options must be an object or undefined');\n }\n\n const opts = options as Record<string, unknown>;\n\n if ('quality' in opts && opts.quality !== undefined) {\n const quality = opts.quality;\n\n if (Number.isNaN(quality)) {\n throw new RangeError(\n 'quality must be a valid number in the range 0-100, got NaN'\n );\n }\n\n if (typeof quality !== 'number') {\n throw new TypeError('quality must be a number');\n }\n\n if (!Number.isInteger(quality)) {\n throw new RangeError(\n 'quality must be an integer in the range 0-100, got floating point'\n );\n }\n\n if (quality < 0 || quality > 100) {\n throw new RangeError(\n `quality must be in the range 0-100, got ${quality}`\n );\n }\n }\n}\n"
|
|
6
6
|
],
|
|
7
|
-
"mappings": "
|
|
8
|
-
"debugId": "
|
|
7
|
+
"mappings": "kjBAqBO,SAAS,CAAkB,CAChC,EAC6B,CAC7B,GAAI,CAAC,GAAS,OAAO,IAAU,SAC7B,MAAU,UAAU,yBAAyB,EAG/C,IAAM,EAAW,EAEjB,GAAI,EAAE,SAAU,GACd,MAAU,UAAU,wBAAwB,EAG9C,IAAQ,QAAS,EACjB,GAAI,EAAE,aAAgB,YAAc,aAAgB,mBAClD,MAAU,UAAU,oDAAoD,EAG1E,GAAI,EAAE,UAAW,IAAa,EAAE,WAAY,GAC1C,MAAU,UAAU,2CAA2C,EAGjE,IAAQ,QAAO,UAAW,EAE1B,GAAI,OAAO,IAAU,UAAY,CAAC,OAAO,UAAU,CAAK,GAAK,GAAS,EACpE,MAAU,WACR,+CAA+C,GACjD,EAGF,GAAI,OAAO,IAAW,UAAY,CAAC,OAAO,UAAU,CAAM,GAAK,GAAU,EACvE,MAAU,WACR,gDAAgD,GAClD,EAGF,IAAM,EAAe,EAAQ,EAAS,EACtC,GAAI,EAAK,OAAS,EAChB,MAAU,WACR,yBAAyB,EAAK,mCAAmC,eAA0B,KAAS,cACtG,EAIG,SAAS,CAAqB,CAAC,EAMpC,CACA,GAAI,OAAO,IAAY,UAAY,IAAY,KAC7C,MAAU,UAAU,2BAA2B,EAGjD,IAAM,EAAO,EAEb,GAAI,EAAK,QAAU,QACjB,GACE,OAAO,EAAK,QAAU,UACtB,CAAC,OAAO,UAAU,EAAK,KAAK,GAC5B,EAAK,OAAS,EAEd,MAAU,WACR,iDAAiD,EAAK,OACxD,EAIJ,GAAI,EAAK,SAAW,QAClB,GACE,OAAO,EAAK,SAAW,UACvB,CAAC,OAAO,UAAU,EAAK,MAAM,GAC7B,EAAK,QAAU,EAEf,MAAU,WACR,kDAAkD,EAAK,QACzD,EAIJ,GAAI,EAAK,SAAW,OAAW,CAC7B,IAAM,EAAe,CAAC,aAAc,SAAU,WAAY,UAAU,EACpE,GAAI,CAAC,EAAa,SAAS,EAAK,MAAgB,EAC9C,MAAU,UACR,kCAAkC,EAAa,KAAK,IAAI,UAAU,EAAK,QACzE,EAIJ,GAAI,EAAK,cAAgB,QAAa,OAAO,EAAK,cAAgB,UAChE,MAAU,UACR,4CAA4C,OAAO,EAAK,aAC1D,EAGF,GAAI,EAAK,YAAc,QAAa,OAAO,EAAK,YAAc,UAC5D,MAAU,UACR,0CAA0C,OAAO,EAAK,WACxD",
|
|
8
|
+
"debugId": "13DED32B169ADD1364756E2164756E21",
|
|
9
9
|
"names": []
|
|
10
10
|
}
|
package/dist/index.browser.mjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{a as E}from"./bridge.browser.mjs";import"./chunk-
|
|
1
|
+
import{a as E}from"./bridge.browser.mjs";import"./chunk-xrd0djzj.js";var y=null;async function J(v,j,q){if(!y)y=E("worker");return y.resize(v,j,q)}function K(v="worker"){let j=E(v),q=(F,G,H)=>{return j.resize(F,G,H)};return q.terminate=async()=>{await j.terminate()},q}export{J as resize,K as createResizer};
|
|
2
2
|
|
|
3
3
|
//# debugId=1FB4560D622A5BC164756E2164756E21
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/index.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"/**\n * @squoosh-kit/resize public API\n */\n\nimport type { ImageInput } from '@squoosh-kit/runtime';\nimport { createBridge } from './bridge';\nimport type { ResizeOptions } from './types';\n\nexport type { ImageInput, ResizeOptions };\n\n// Global bridge instance for reuse\nlet globalClientBridge: ReturnType<typeof createBridge> | null = null;\n\n/**\n * A resizable image processor that can be reused for multiple operations.\n * Can be terminated to clean up associated resources (especially workers).\n */\nexport type ResizerFactory = ((\n imageData: ImageInput,\n options: ResizeOptions,\n signal?: AbortSignal\n) => Promise<ImageInput>) & {\n /**\n * Terminates the resizer and cleans up resources.\n * Important for worker mode to prevent memory leaks.\n *\n * @example\n * const resizer = createResizer('worker');\n * try {\n * const result = await resizer(imageData, options);\n * } finally {\n * await resizer.terminate();\n * }\n */\n terminate(): Promise<void>;\n};\n\n/**\n * Resizes an image. Uses worker mode for UI responsiveness.\n *\n * @param imageData - The image data to resize.\n * @param options - Resize options.\n * @param signal - (Optional) AbortSignal to cancel the resizing operation.\n * If provided, you can cancel the operation by calling\n * `controller.abort()` on the associated AbortController.\n * If not provided, the operation cannot be cancelled.\n * @returns A Promise resolving to the resized image data.\n *\n * @example\n * // With cancellation support\n * const controller = new AbortController();\n * const result = await resize(imageData, { width: 800 }, controller.signal);\n * setTimeout(() => controller.abort(), 5000);\n *\n * @example\n * // Without cancellation (operation cannot be stopped)\n * const result = await resize(imageData, { width: 800 });\n */\nexport async function resize(\n imageData: ImageInput,\n options: ResizeOptions,\n signal?: AbortSignal\n): Promise<ImageInput> {\n // Use worker mode for UI responsiveness - prevents blocking the main thread\n if (!globalClientBridge) {\n globalClientBridge = createBridge('worker');\n }\n\n return globalClientBridge.resize(imageData, options, signal);\n}\n\n/**\n * Creates a reusable resizer function for a specific execution mode.\n *\n * @param mode - The execution mode, either 'worker' or 'client'.\n * @returns A function that resizes an image with optional AbortSignal.\n */\nexport function createResizer(
|
|
5
|
+
"/**\n * @squoosh-kit/resize public API\n */\n\nimport type { ImageInput } from '@squoosh-kit/runtime';\nimport { createBridge } from './bridge';\nimport type { ResizeOptions } from './types';\n\nexport type { ImageInput, ResizeOptions };\n\n// Global bridge instance for reuse\nlet globalClientBridge: ReturnType<typeof createBridge> | null = null;\n\n/**\n * A resizable image processor that can be reused for multiple operations.\n * Can be terminated to clean up associated resources (especially workers).\n */\nexport type ResizerFactory = ((\n imageData: ImageInput,\n options: ResizeOptions,\n signal?: AbortSignal\n) => Promise<ImageInput>) & {\n /**\n * Terminates the resizer and cleans up resources.\n * Important for worker mode to prevent memory leaks.\n *\n * @example\n * const resizer = createResizer('worker');\n * try {\n * const result = await resizer(imageData, options);\n * } finally {\n * await resizer.terminate();\n * }\n */\n terminate(): Promise<void>;\n};\n\n/**\n * Resizes an image. Uses worker mode for UI responsiveness.\n *\n * @param imageData - The image data to resize.\n * @param options - Resize options.\n * @param signal - (Optional) AbortSignal to cancel the resizing operation.\n * If provided, you can cancel the operation by calling\n * `controller.abort()` on the associated AbortController.\n * If not provided, the operation cannot be cancelled.\n * @returns A Promise resolving to the resized image data.\n *\n * @example\n * // With cancellation support\n * const controller = new AbortController();\n * const result = await resize(imageData, { width: 800 }, controller.signal);\n * setTimeout(() => controller.abort(), 5000);\n *\n * @example\n * // Without cancellation (operation cannot be stopped)\n * const result = await resize(imageData, { width: 800 });\n */\nexport async function resize(\n imageData: ImageInput,\n options: ResizeOptions,\n signal?: AbortSignal\n): Promise<ImageInput> {\n // Use worker mode for UI responsiveness - prevents blocking the main thread\n if (!globalClientBridge) {\n globalClientBridge = createBridge('worker');\n }\n\n return globalClientBridge.resize(imageData, options, signal);\n}\n\n/**\n * Creates a reusable resizer function for a specific execution mode.\n *\n * @param mode - The execution mode, either 'worker' or 'client'.\n * @returns A function that resizes an image with optional AbortSignal.\n */\nexport function createResizer(mode: 'worker' | 'client' = 'worker') {\n const bridge = createBridge(mode);\n\n const resizer = (\n imageData: ImageInput,\n options: ResizeOptions,\n signal?: AbortSignal\n ) => {\n return bridge.resize(imageData, options, signal);\n };\n\n resizer.terminate = async () => {\n await bridge.terminate();\n };\n\n return resizer;\n}\n"
|
|
6
6
|
],
|
|
7
|
-
"mappings": "2EAWA,FAAI,EAA6D,KA+CjE,eAAsB,CAAM,CAC1B,EACA,EACA,EACqB,CAErB,GAAI,CAAC,EACH,EAAqB,EAAa,QAAQ,EAG5C,OAAO,EAAmB,OAAO,EAAW,EAAS,CAAM,EAStD,SAAS,CAAa,
|
|
7
|
+
"mappings": "2EAWA,FAAI,EAA6D,KA+CjE,eAAsB,CAAM,CAC1B,EACA,EACA,EACqB,CAErB,GAAI,CAAC,EACH,EAAqB,EAAa,QAAQ,EAG5C,OAAO,EAAmB,OAAO,EAAW,EAAS,CAAM,EAStD,SAAS,CAAa,CAAC,EAA4B,SAAU,CAClE,IAAM,EAAS,EAAa,CAAI,EAE1B,EAAU,CACd,EACA,EACA,IACG,CACH,OAAO,EAAO,OAAO,EAAW,EAAS,CAAM,GAOjD,OAJA,EAAQ,UAAY,SAAY,CAC9B,MAAM,EAAO,UAAU,GAGlB",
|
|
8
8
|
"debugId": "1FB4560D622A5BC164756E2164756E21",
|
|
9
9
|
"names": []
|
|
10
10
|
}
|
package/dist/index.bun.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{a as E}from"./bridge.bun.js";import"./chunk-
|
|
2
|
+
import{a as E}from"./bridge.bun.js";import"./chunk-6qec3cgc.js";var y=null;async function J(v,j,q){if(!y)y=E("worker");return y.resize(v,j,q)}function K(v="worker"){let j=E(v),q=(F,G,H)=>{return j.resize(F,G,H)};return q.terminate=async()=>{await j.terminate()},q}export{J as resize,K as createResizer};
|
|
3
3
|
|
|
4
4
|
//# debugId=19508812115D7B3764756E2164756E21
|
package/dist/index.bun.js.map
CHANGED
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/index.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"/**\n * @squoosh-kit/resize public API\n */\n\nimport type { ImageInput } from '@squoosh-kit/runtime';\nimport { createBridge } from './bridge';\nimport type { ResizeOptions } from './types';\n\nexport type { ImageInput, ResizeOptions };\n\n// Global bridge instance for reuse\nlet globalClientBridge: ReturnType<typeof createBridge> | null = null;\n\n/**\n * A resizable image processor that can be reused for multiple operations.\n * Can be terminated to clean up associated resources (especially workers).\n */\nexport type ResizerFactory = ((\n imageData: ImageInput,\n options: ResizeOptions,\n signal?: AbortSignal\n) => Promise<ImageInput>) & {\n /**\n * Terminates the resizer and cleans up resources.\n * Important for worker mode to prevent memory leaks.\n *\n * @example\n * const resizer = createResizer('worker');\n * try {\n * const result = await resizer(imageData, options);\n * } finally {\n * await resizer.terminate();\n * }\n */\n terminate(): Promise<void>;\n};\n\n/**\n * Resizes an image. Uses worker mode for UI responsiveness.\n *\n * @param imageData - The image data to resize.\n * @param options - Resize options.\n * @param signal - (Optional) AbortSignal to cancel the resizing operation.\n * If provided, you can cancel the operation by calling\n * `controller.abort()` on the associated AbortController.\n * If not provided, the operation cannot be cancelled.\n * @returns A Promise resolving to the resized image data.\n *\n * @example\n * // With cancellation support\n * const controller = new AbortController();\n * const result = await resize(imageData, { width: 800 }, controller.signal);\n * setTimeout(() => controller.abort(), 5000);\n *\n * @example\n * // Without cancellation (operation cannot be stopped)\n * const result = await resize(imageData, { width: 800 });\n */\nexport async function resize(\n imageData: ImageInput,\n options: ResizeOptions,\n signal?: AbortSignal\n): Promise<ImageInput> {\n // Use worker mode for UI responsiveness - prevents blocking the main thread\n if (!globalClientBridge) {\n globalClientBridge = createBridge('worker');\n }\n\n return globalClientBridge.resize(imageData, options, signal);\n}\n\n/**\n * Creates a reusable resizer function for a specific execution mode.\n *\n * @param mode - The execution mode, either 'worker' or 'client'.\n * @returns A function that resizes an image with optional AbortSignal.\n */\nexport function createResizer(
|
|
5
|
+
"/**\n * @squoosh-kit/resize public API\n */\n\nimport type { ImageInput } from '@squoosh-kit/runtime';\nimport { createBridge } from './bridge';\nimport type { ResizeOptions } from './types';\n\nexport type { ImageInput, ResizeOptions };\n\n// Global bridge instance for reuse\nlet globalClientBridge: ReturnType<typeof createBridge> | null = null;\n\n/**\n * A resizable image processor that can be reused for multiple operations.\n * Can be terminated to clean up associated resources (especially workers).\n */\nexport type ResizerFactory = ((\n imageData: ImageInput,\n options: ResizeOptions,\n signal?: AbortSignal\n) => Promise<ImageInput>) & {\n /**\n * Terminates the resizer and cleans up resources.\n * Important for worker mode to prevent memory leaks.\n *\n * @example\n * const resizer = createResizer('worker');\n * try {\n * const result = await resizer(imageData, options);\n * } finally {\n * await resizer.terminate();\n * }\n */\n terminate(): Promise<void>;\n};\n\n/**\n * Resizes an image. Uses worker mode for UI responsiveness.\n *\n * @param imageData - The image data to resize.\n * @param options - Resize options.\n * @param signal - (Optional) AbortSignal to cancel the resizing operation.\n * If provided, you can cancel the operation by calling\n * `controller.abort()` on the associated AbortController.\n * If not provided, the operation cannot be cancelled.\n * @returns A Promise resolving to the resized image data.\n *\n * @example\n * // With cancellation support\n * const controller = new AbortController();\n * const result = await resize(imageData, { width: 800 }, controller.signal);\n * setTimeout(() => controller.abort(), 5000);\n *\n * @example\n * // Without cancellation (operation cannot be stopped)\n * const result = await resize(imageData, { width: 800 });\n */\nexport async function resize(\n imageData: ImageInput,\n options: ResizeOptions,\n signal?: AbortSignal\n): Promise<ImageInput> {\n // Use worker mode for UI responsiveness - prevents blocking the main thread\n if (!globalClientBridge) {\n globalClientBridge = createBridge('worker');\n }\n\n return globalClientBridge.resize(imageData, options, signal);\n}\n\n/**\n * Creates a reusable resizer function for a specific execution mode.\n *\n * @param mode - The execution mode, either 'worker' or 'client'.\n * @returns A function that resizes an image with optional AbortSignal.\n */\nexport function createResizer(mode: 'worker' | 'client' = 'worker') {\n const bridge = createBridge(mode);\n\n const resizer = (\n imageData: ImageInput,\n options: ResizeOptions,\n signal?: AbortSignal\n ) => {\n return bridge.resize(imageData, options, signal);\n };\n\n resizer.terminate = async () => {\n await bridge.terminate();\n };\n\n return resizer;\n}\n"
|
|
6
6
|
],
|
|
7
|
-
"mappings": ";sEAWA,FAAI,EAA6D,KA+CjE,eAAsB,CAAM,CAC1B,EACA,EACA,EACqB,CAErB,GAAI,CAAC,EACH,EAAqB,EAAa,QAAQ,EAG5C,OAAO,EAAmB,OAAO,EAAW,EAAS,CAAM,EAStD,SAAS,CAAa,
|
|
7
|
+
"mappings": ";sEAWA,FAAI,EAA6D,KA+CjE,eAAsB,CAAM,CAC1B,EACA,EACA,EACqB,CAErB,GAAI,CAAC,EACH,EAAqB,EAAa,QAAQ,EAG5C,OAAO,EAAmB,OAAO,EAAW,EAAS,CAAM,EAStD,SAAS,CAAa,CAAC,EAA4B,SAAU,CAClE,IAAM,EAAS,EAAa,CAAI,EAE1B,EAAU,CACd,EACA,EACA,IACG,CACH,OAAO,EAAO,OAAO,EAAW,EAAS,CAAM,GAOjD,OAJA,EAAQ,UAAY,SAAY,CAC9B,MAAM,EAAO,UAAU,GAGlB",
|
|
8
8
|
"debugId": "19508812115D7B3764756E2164756E21",
|
|
9
9
|
"names": []
|
|
10
10
|
}
|
package/dist/index.d.ts
CHANGED
|
@@ -51,5 +51,8 @@ export declare function resize(imageData: ImageInput, options: ResizeOptions, si
|
|
|
51
51
|
* @param mode - The execution mode, either 'worker' or 'client'.
|
|
52
52
|
* @returns A function that resizes an image with optional AbortSignal.
|
|
53
53
|
*/
|
|
54
|
-
export declare function createResizer(mode?: 'worker' | 'client'):
|
|
54
|
+
export declare function createResizer(mode?: 'worker' | 'client'): {
|
|
55
|
+
(imageData: ImageInput, options: ResizeOptions, signal?: AbortSignal): Promise<ImageInput>;
|
|
56
|
+
terminate(): Promise<void>;
|
|
57
|
+
};
|
|
55
58
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7C,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,CAAC;AAK1C;;;GAGG;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,CAC5B,SAAS,EAAE,UAAU,EACrB,OAAO,EAAE,aAAa,EACtB,MAAM,CAAC,EAAE,WAAW,KACjB,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG;IAC1B;;;;;;;;;;;OAWG;IACH,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,MAAM,CAC1B,SAAS,EAAE,UAAU,EACrB,OAAO,EAAE,aAAa,EACtB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC,CAOrB;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7C,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,CAAC;AAK1C;;;GAGG;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,CAC5B,SAAS,EAAE,UAAU,EACrB,OAAO,EAAE,aAAa,EACtB,MAAM,CAAC,EAAE,WAAW,KACjB,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG;IAC1B;;;;;;;;;;;OAWG;IACH,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,MAAM,CAC1B,SAAS,EAAE,UAAU,EACrB,OAAO,EAAE,aAAa,EACtB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC,CAOrB;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,IAAI,GAAE,QAAQ,GAAG,QAAmB;gBAInD,UAAU,WACZ,aAAa,WACb,WAAW;;EAUvB"}
|
package/dist/index.node.cjs.map
CHANGED
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/index.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"/**\n * @squoosh-kit/resize public API\n */\n\nimport type { ImageInput } from '@squoosh-kit/runtime';\nimport { createBridge } from './bridge';\nimport type { ResizeOptions } from './types';\n\nexport type { ImageInput, ResizeOptions };\n\n// Global bridge instance for reuse\nlet globalClientBridge: ReturnType<typeof createBridge> | null = null;\n\n/**\n * A resizable image processor that can be reused for multiple operations.\n * Can be terminated to clean up associated resources (especially workers).\n */\nexport type ResizerFactory = ((\n imageData: ImageInput,\n options: ResizeOptions,\n signal?: AbortSignal\n) => Promise<ImageInput>) & {\n /**\n * Terminates the resizer and cleans up resources.\n * Important for worker mode to prevent memory leaks.\n *\n * @example\n * const resizer = createResizer('worker');\n * try {\n * const result = await resizer(imageData, options);\n * } finally {\n * await resizer.terminate();\n * }\n */\n terminate(): Promise<void>;\n};\n\n/**\n * Resizes an image. Uses worker mode for UI responsiveness.\n *\n * @param imageData - The image data to resize.\n * @param options - Resize options.\n * @param signal - (Optional) AbortSignal to cancel the resizing operation.\n * If provided, you can cancel the operation by calling\n * `controller.abort()` on the associated AbortController.\n * If not provided, the operation cannot be cancelled.\n * @returns A Promise resolving to the resized image data.\n *\n * @example\n * // With cancellation support\n * const controller = new AbortController();\n * const result = await resize(imageData, { width: 800 }, controller.signal);\n * setTimeout(() => controller.abort(), 5000);\n *\n * @example\n * // Without cancellation (operation cannot be stopped)\n * const result = await resize(imageData, { width: 800 });\n */\nexport async function resize(\n imageData: ImageInput,\n options: ResizeOptions,\n signal?: AbortSignal\n): Promise<ImageInput> {\n // Use worker mode for UI responsiveness - prevents blocking the main thread\n if (!globalClientBridge) {\n globalClientBridge = createBridge('worker');\n }\n\n return globalClientBridge.resize(imageData, options, signal);\n}\n\n/**\n * Creates a reusable resizer function for a specific execution mode.\n *\n * @param mode - The execution mode, either 'worker' or 'client'.\n * @returns A function that resizes an image with optional AbortSignal.\n */\nexport function createResizer(
|
|
5
|
+
"/**\n * @squoosh-kit/resize public API\n */\n\nimport type { ImageInput } from '@squoosh-kit/runtime';\nimport { createBridge } from './bridge';\nimport type { ResizeOptions } from './types';\n\nexport type { ImageInput, ResizeOptions };\n\n// Global bridge instance for reuse\nlet globalClientBridge: ReturnType<typeof createBridge> | null = null;\n\n/**\n * A resizable image processor that can be reused for multiple operations.\n * Can be terminated to clean up associated resources (especially workers).\n */\nexport type ResizerFactory = ((\n imageData: ImageInput,\n options: ResizeOptions,\n signal?: AbortSignal\n) => Promise<ImageInput>) & {\n /**\n * Terminates the resizer and cleans up resources.\n * Important for worker mode to prevent memory leaks.\n *\n * @example\n * const resizer = createResizer('worker');\n * try {\n * const result = await resizer(imageData, options);\n * } finally {\n * await resizer.terminate();\n * }\n */\n terminate(): Promise<void>;\n};\n\n/**\n * Resizes an image. Uses worker mode for UI responsiveness.\n *\n * @param imageData - The image data to resize.\n * @param options - Resize options.\n * @param signal - (Optional) AbortSignal to cancel the resizing operation.\n * If provided, you can cancel the operation by calling\n * `controller.abort()` on the associated AbortController.\n * If not provided, the operation cannot be cancelled.\n * @returns A Promise resolving to the resized image data.\n *\n * @example\n * // With cancellation support\n * const controller = new AbortController();\n * const result = await resize(imageData, { width: 800 }, controller.signal);\n * setTimeout(() => controller.abort(), 5000);\n *\n * @example\n * // Without cancellation (operation cannot be stopped)\n * const result = await resize(imageData, { width: 800 });\n */\nexport async function resize(\n imageData: ImageInput,\n options: ResizeOptions,\n signal?: AbortSignal\n): Promise<ImageInput> {\n // Use worker mode for UI responsiveness - prevents blocking the main thread\n if (!globalClientBridge) {\n globalClientBridge = createBridge('worker');\n }\n\n return globalClientBridge.resize(imageData, options, signal);\n}\n\n/**\n * Creates a reusable resizer function for a specific execution mode.\n *\n * @param mode - The execution mode, either 'worker' or 'client'.\n * @returns A function that resizes an image with optional AbortSignal.\n */\nexport function createResizer(mode: 'worker' | 'client' = 'worker') {\n const bridge = createBridge(mode);\n\n const resizer = (\n imageData: ImageInput,\n options: ResizeOptions,\n signal?: AbortSignal\n ) => {\n return bridge.resize(imageData, options, signal);\n };\n\n resizer.terminate = async () => {\n await bridge.terminate();\n };\n\n return resizer;\n}\n"
|
|
6
6
|
],
|
|
7
|
-
"mappings": "qEAWA,IAAI,EAA6D,KA+CjE,eAAsB,CAAM,CAC1B,EACA,EACA,EACqB,CAErB,GAAI,CAAC,EACH,EAAqB,EAAa,QAAQ,EAG5C,OAAO,EAAmB,OAAO,EAAW,EAAS,CAAM,EAStD,SAAS,CAAa,
|
|
7
|
+
"mappings": "qEAWA,IAAI,EAA6D,KA+CjE,eAAsB,CAAM,CAC1B,EACA,EACA,EACqB,CAErB,GAAI,CAAC,EACH,EAAqB,EAAa,QAAQ,EAG5C,OAAO,EAAmB,OAAO,EAAW,EAAS,CAAM,EAStD,SAAS,CAAa,CAAC,EAA4B,SAAU,CAClE,IAAM,EAAS,EAAa,CAAI,EAE1B,EAAU,CACd,EACA,EACA,IACG,CACH,OAAO,EAAO,OAAO,EAAW,EAAS,CAAM,GAOjD,OAJA,EAAQ,UAAY,SAAY,CAC9B,MAAM,EAAO,UAAU,GAGlB",
|
|
8
8
|
"debugId": "E500F0EBCC628D0F64756E2164756E21",
|
|
9
9
|
"names": []
|
|
10
10
|
}
|
package/dist/index.node.mjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{a as E}from"./bridge.node.mjs";import"./chunk-
|
|
1
|
+
import{a as E}from"./bridge.node.mjs";import"./chunk-dfj7cgx8.js";var y=null;async function J(v,j,q){if(!y)y=E("worker");return y.resize(v,j,q)}function K(v="worker"){let j=E(v),q=(F,G,H)=>{return j.resize(F,G,H)};return q.terminate=async()=>{await j.terminate()},q}export{J as resize,K as createResizer};
|
|
2
2
|
|
|
3
3
|
//# debugId=38F583F7E607D41664756E2164756E21
|
package/dist/index.node.mjs.map
CHANGED
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/index.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"/**\n * @squoosh-kit/resize public API\n */\n\nimport type { ImageInput } from '@squoosh-kit/runtime';\nimport { createBridge } from './bridge';\nimport type { ResizeOptions } from './types';\n\nexport type { ImageInput, ResizeOptions };\n\n// Global bridge instance for reuse\nlet globalClientBridge: ReturnType<typeof createBridge> | null = null;\n\n/**\n * A resizable image processor that can be reused for multiple operations.\n * Can be terminated to clean up associated resources (especially workers).\n */\nexport type ResizerFactory = ((\n imageData: ImageInput,\n options: ResizeOptions,\n signal?: AbortSignal\n) => Promise<ImageInput>) & {\n /**\n * Terminates the resizer and cleans up resources.\n * Important for worker mode to prevent memory leaks.\n *\n * @example\n * const resizer = createResizer('worker');\n * try {\n * const result = await resizer(imageData, options);\n * } finally {\n * await resizer.terminate();\n * }\n */\n terminate(): Promise<void>;\n};\n\n/**\n * Resizes an image. Uses worker mode for UI responsiveness.\n *\n * @param imageData - The image data to resize.\n * @param options - Resize options.\n * @param signal - (Optional) AbortSignal to cancel the resizing operation.\n * If provided, you can cancel the operation by calling\n * `controller.abort()` on the associated AbortController.\n * If not provided, the operation cannot be cancelled.\n * @returns A Promise resolving to the resized image data.\n *\n * @example\n * // With cancellation support\n * const controller = new AbortController();\n * const result = await resize(imageData, { width: 800 }, controller.signal);\n * setTimeout(() => controller.abort(), 5000);\n *\n * @example\n * // Without cancellation (operation cannot be stopped)\n * const result = await resize(imageData, { width: 800 });\n */\nexport async function resize(\n imageData: ImageInput,\n options: ResizeOptions,\n signal?: AbortSignal\n): Promise<ImageInput> {\n // Use worker mode for UI responsiveness - prevents blocking the main thread\n if (!globalClientBridge) {\n globalClientBridge = createBridge('worker');\n }\n\n return globalClientBridge.resize(imageData, options, signal);\n}\n\n/**\n * Creates a reusable resizer function for a specific execution mode.\n *\n * @param mode - The execution mode, either 'worker' or 'client'.\n * @returns A function that resizes an image with optional AbortSignal.\n */\nexport function createResizer(
|
|
5
|
+
"/**\n * @squoosh-kit/resize public API\n */\n\nimport type { ImageInput } from '@squoosh-kit/runtime';\nimport { createBridge } from './bridge';\nimport type { ResizeOptions } from './types';\n\nexport type { ImageInput, ResizeOptions };\n\n// Global bridge instance for reuse\nlet globalClientBridge: ReturnType<typeof createBridge> | null = null;\n\n/**\n * A resizable image processor that can be reused for multiple operations.\n * Can be terminated to clean up associated resources (especially workers).\n */\nexport type ResizerFactory = ((\n imageData: ImageInput,\n options: ResizeOptions,\n signal?: AbortSignal\n) => Promise<ImageInput>) & {\n /**\n * Terminates the resizer and cleans up resources.\n * Important for worker mode to prevent memory leaks.\n *\n * @example\n * const resizer = createResizer('worker');\n * try {\n * const result = await resizer(imageData, options);\n * } finally {\n * await resizer.terminate();\n * }\n */\n terminate(): Promise<void>;\n};\n\n/**\n * Resizes an image. Uses worker mode for UI responsiveness.\n *\n * @param imageData - The image data to resize.\n * @param options - Resize options.\n * @param signal - (Optional) AbortSignal to cancel the resizing operation.\n * If provided, you can cancel the operation by calling\n * `controller.abort()` on the associated AbortController.\n * If not provided, the operation cannot be cancelled.\n * @returns A Promise resolving to the resized image data.\n *\n * @example\n * // With cancellation support\n * const controller = new AbortController();\n * const result = await resize(imageData, { width: 800 }, controller.signal);\n * setTimeout(() => controller.abort(), 5000);\n *\n * @example\n * // Without cancellation (operation cannot be stopped)\n * const result = await resize(imageData, { width: 800 });\n */\nexport async function resize(\n imageData: ImageInput,\n options: ResizeOptions,\n signal?: AbortSignal\n): Promise<ImageInput> {\n // Use worker mode for UI responsiveness - prevents blocking the main thread\n if (!globalClientBridge) {\n globalClientBridge = createBridge('worker');\n }\n\n return globalClientBridge.resize(imageData, options, signal);\n}\n\n/**\n * Creates a reusable resizer function for a specific execution mode.\n *\n * @param mode - The execution mode, either 'worker' or 'client'.\n * @returns A function that resizes an image with optional AbortSignal.\n */\nexport function createResizer(mode: 'worker' | 'client' = 'worker') {\n const bridge = createBridge(mode);\n\n const resizer = (\n imageData: ImageInput,\n options: ResizeOptions,\n signal?: AbortSignal\n ) => {\n return bridge.resize(imageData, options, signal);\n };\n\n resizer.terminate = async () => {\n await bridge.terminate();\n };\n\n return resizer;\n}\n"
|
|
6
6
|
],
|
|
7
|
-
"mappings": "wEAWA,FAAI,EAA6D,KA+CjE,eAAsB,CAAM,CAC1B,EACA,EACA,EACqB,CAErB,GAAI,CAAC,EACH,EAAqB,EAAa,QAAQ,EAG5C,OAAO,EAAmB,OAAO,EAAW,EAAS,CAAM,EAStD,SAAS,CAAa,
|
|
7
|
+
"mappings": "wEAWA,FAAI,EAA6D,KA+CjE,eAAsB,CAAM,CAC1B,EACA,EACA,EACqB,CAErB,GAAI,CAAC,EACH,EAAqB,EAAa,QAAQ,EAG5C,OAAO,EAAmB,OAAO,EAAW,EAAS,CAAM,EAStD,SAAS,CAAa,CAAC,EAA4B,SAAU,CAClE,IAAM,EAAS,EAAa,CAAI,EAE1B,EAAU,CACd,EACA,EACA,IACG,CACH,OAAO,EAAO,OAAO,EAAW,EAAS,CAAM,GAOjD,OAJA,EAAQ,UAAY,SAAY,CAC9B,MAAM,EAAO,UAAU,GAGlB",
|
|
8
8
|
"debugId": "38F583F7E607D41664756E2164756E21",
|
|
9
9
|
"names": []
|
|
10
10
|
}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{b as U,c as W,
|
|
1
|
+
import{b as U,c as W,d as I,e as R}from"./chunk-xrd0djzj.js";async function B(j){try{if(typeof process<"u"&&process.versions?.node){let D=await import("fs/promises"),J=new URL(j,import.meta.url).pathname,K=await D.readFile(J);return K.buffer.slice(K.byteOffset,K.byteOffset+K.byteLength)}}catch(D){}try{let D=new URL(j,import.meta.url),G=await fetch(D);if(!G.ok)throw Error(`Failed to fetch WASM binary: ${G.status} ${G.statusText}`);return await G.arrayBuffer()}catch(D){throw Error(`Failed to load WASM binary from "${j}": ${D instanceof Error?D.message:String(D)}`)}}var Y,$=null;function v(){if($===null||$.buffer!==Y.memory.buffer)$=new Uint8Array(Y.memory.buffer);return $}var T=0;function M(j,D){let G=D(j.length*1);return v().set(j,G/1),T=j.length,G}var k=null;function A(){if(k===null||k.buffer!==Y.memory.buffer)k=new Int32Array(Y.memory.buffer);return k}var F=null;function P(){if(F===null||F.buffer!==Y.memory.buffer)F=new Uint8ClampedArray(Y.memory.buffer);return F}function f(j,D){return P().subarray(j/1,j/1+D)}function z(j,D,G,J,K,Q,X,V){try{let q=Y.__wbindgen_add_to_stack_pointer(-16);var L=M(j,Y.__wbindgen_malloc),E=T;Y.resize(q,L,E,D,G,J,K,Q,X,V);var O=A()[q/4+0],S=A()[q/4+1],b=f(O,S).slice();return Y.__wbindgen_free(O,S*1),b}finally{Y.__wbindgen_add_to_stack_pointer(16)}}async function w(j,D){if(typeof Response==="function"&&j instanceof Response){if(typeof WebAssembly.instantiateStreaming==="function")try{return await WebAssembly.instantiateStreaming(j,D)}catch(J){if(j.headers.get("Content-Type")!="application/wasm")console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n",J);else throw J}let G=await j.arrayBuffer();return await WebAssembly.instantiate(G,D)}else{let G=await WebAssembly.instantiate(j,D);if(G instanceof WebAssembly.Instance)return{instance:G,module:j};else return G}}async function H(j){if(typeof j>"u")j=new URL("squoosh_resize_bg.wasm",import.meta.url);let D={};if(typeof j==="string"||typeof Request==="function"&&j instanceof Request||typeof URL==="function"&&j instanceof URL)j=fetch(j);let{instance:G,module:J}=await w(await j,D);return Y=G.exports,H.__wbindgen_wasm_module=J,Y}var x=H;var N=null,Z=null;async function y(){if(N)return;if(Z)return Z;return Z=(async()=>{try{let j=null,D=[new URL("./wasm/squoosh_resize_bg.wasm",import.meta.url).href,new URL("../wasm/squoosh_resize_bg.wasm",import.meta.url).href],G=null;for(let J of D)try{j=await B(J);break}catch(K){G=K instanceof Error?K:Error(String(K))}if(!j)throw G||Error("Could not load WASM binary from any path");try{await x(j)}catch(J){if(J instanceof Error&&(J.message.includes("SharedArrayBuffer")||J.message.includes("first argument must be"))){if(typeof SharedArrayBuffer>"u")globalThis.SharedArrayBuffer=ArrayBuffer;try{await x(j)}catch(K){throw Error(`WASM module initialization failed even with polyfill: ${K instanceof Error?K.message:String(K)}`)}}else throw J}N=z}catch(j){throw Z=null,Error(`Failed to initialize resize WASM module: ${j instanceof Error?j.message:String(j)}`)}})(),Z}async function C(j,D){if(I(j),R(D),await y(),!N)throw Error("Resize module not initialized");let{data:G,width:J,height:K}=j,Q=D.width??J,X=D.height??K;if(D.width&&!D.height)X=Math.max(1,Math.round(K*D.width/J));else if(D.height&&!D.width)Q=Math.max(1,Math.round(J*D.height/K));if(Q<1||X<1)throw RangeError(`Output dimensions must be at least 1x1, got ${Q}x${X}`);let V=G instanceof Uint8ClampedArray?new Uint8Array(G.buffer,G.byteOffset,G.length):new Uint8Array(G.buffer,G.byteOffset,G.length);return{data:N(V,J,K,Q,X,c(D),D.premultiply??!0,D.linearRGB??!0),width:Q,height:X}}async function h(j,D,G){if(G?.aborted)throw new DOMException("Aborted","AbortError");return C(j,D)}function c(j){return{triangular:0,catrom:1,mitchell:2,lanczos3:3}[j?.method??"lanczos3"]??3}if(typeof self<"u")self.onmessage=async(j)=>{let D=j.data;if(D?.type==="worker:ping"){self.postMessage({type:"worker:ready"});return}let{id:G,type:J,payload:K}=D,Q={id:G,ok:!1};try{if(J!=="resize:run")throw Error(`Unknown message type: ${J}`);let X=await C(K.image,K.options);Q.ok=!0,Q.data=X,self.postMessage(Q)}catch(X){Q.error=X instanceof Error?X.message:String(X),self.postMessage(Q)}};export{h as resizeClient};
|
|
2
2
|
|
|
3
|
-
//# debugId=
|
|
3
|
+
//# debugId=46601F45412E8F4C64756E2164756E21
|
|
@@ -7,6 +7,6 @@
|
|
|
7
7
|
"/**\n * Resize processor - single-source worker/client implementation\n */\n\nimport {\n type WorkerRequest,\n type WorkerResponse,\n type ImageInput,\n loadWasmBinary,\n validateImageInput,\n validateResizeOptions,\n} from '@squoosh-kit/runtime';\nimport type { ResizeOptions } from './types';\nimport * as squoosh_resize_module from '../wasm/squoosh_resize';\n\n// Define the type locally to avoid module resolution issues with the linter\ntype SquooshWasmResize = (\n input_image: Uint8Array,\n input_width: number,\n input_height: number,\n output_width: number,\n output_height: number,\n typ_idx: number,\n premultiply: boolean,\n color_space_conversion: boolean\n) => Uint8ClampedArray;\n\nlet wasmResize: SquooshWasmResize | null = null;\nlet initPromise: Promise<void> | null = null;\n\nasync function init(): Promise<void> {\n if (wasmResize) {\n return;\n }\n\n if (initPromise) {\n return initPromise;\n }\n\n initPromise = (async () => {\n try {\n // Load WASM binary with robust fallback strategies\n // Try multiple paths to support both development (../wasm) and npm installed (./wasm) scenarios\n let wasmBuffer: ArrayBuffer | null = null;\n const pathsToTry = [\n new URL(\n /* @vite-ignore */ './wasm/squoosh_resize_bg.wasm',\n import.meta.url\n ).href,\n new URL(\n /* @vite-ignore */ '../wasm/squoosh_resize_bg.wasm',\n import.meta.url\n ).href,\n ];\n\n let lastError: Error | null = null;\n for (const path of pathsToTry) {\n try {\n wasmBuffer = await loadWasmBinary(path);\n break;\n } catch (error) {\n lastError = error instanceof Error ? error : new Error(String(error));\n // Continue to next path\n }\n }\n\n if (!wasmBuffer) {\n throw (\n lastError || new Error('Could not load WASM binary from any path')\n );\n }\n\n // Initialize WASM module with the binary buffer\n try {\n await squoosh_resize_module.default(wasmBuffer);\n } catch (initError: unknown) {\n // If initialization fails due to SharedArrayBuffer issues, try with polyfill\n if (\n initError instanceof Error &&\n (initError.message.includes('SharedArrayBuffer') ||\n initError.message.includes('first argument must be'))\n ) {\n // Apply polyfill and retry\n if (typeof SharedArrayBuffer === 'undefined') {\n (\n globalThis as unknown as Record<string, typeof ArrayBuffer>\n ).SharedArrayBuffer = ArrayBuffer;\n }\n // Reload the module with polyfill in place\n try {\n await squoosh_resize_module.default(wasmBuffer);\n } catch (retryError) {\n throw new Error(\n `WASM module initialization failed even with polyfill: ${retryError instanceof Error ? retryError.message : String(retryError)}`\n );\n }\n } else {\n throw initError;\n }\n }\n // After initialization, the module's exported resize function is ready to use\n wasmResize = squoosh_resize_module.resize as unknown as SquooshWasmResize;\n } catch (error) {\n initPromise = null;\n throw new Error(\n `Failed to initialize resize WASM module: ${error instanceof Error ? error.message : String(error)}`\n );\n }\n })();\n\n return initPromise;\n}\n\nasync function _resizeCore(\n image: ImageInput,\n options: ResizeOptions\n): Promise<ImageInput> {\n validateImageInput(image);\n validateResizeOptions(options);\n\n await init();\n if (!wasmResize) {\n throw new Error('Resize module not initialized');\n }\n\n const { data, width: inputWidth, height: inputHeight } = image;\n\n let outputWidth = options.width ?? inputWidth;\n let outputHeight = options.height ?? inputHeight;\n\n if (options.width && !options.height) {\n outputHeight = Math.max(\n 1,\n Math.round((inputHeight * options.width) / inputWidth)\n );\n } else if (options.height && !options.width) {\n outputWidth = Math.max(\n 1,\n Math.round((inputWidth * options.height) / inputHeight)\n );\n }\n\n if (outputWidth < 1 || outputHeight < 1) {\n throw new RangeError(\n `Output dimensions must be at least 1x1, got ${outputWidth}x${outputHeight}`\n );\n }\n\n // Create a zero-copy Uint8Array view if needed\n // (don't copy the buffer - just create a view on the same memory)\n const dataArray =\n data instanceof Uint8ClampedArray\n ? new Uint8Array(data.buffer as ArrayBuffer, data.byteOffset, data.length)\n : new Uint8Array(\n data.buffer as ArrayBuffer,\n data.byteOffset,\n data.length\n );\n\n const result = wasmResize(\n dataArray,\n inputWidth,\n inputHeight,\n outputWidth,\n outputHeight,\n getResizeMethod(options),\n options.premultiply ?? true,\n options.linearRGB ?? true\n );\n\n return {\n data: result,\n width: outputWidth,\n height: outputHeight,\n };\n}\n\nexport async function resizeClient(\n image: ImageInput,\n options: ResizeOptions,\n signal?: AbortSignal\n): Promise<ImageInput> {\n if (signal?.aborted) {\n throw new DOMException('Aborted', 'AbortError');\n }\n return _resizeCore(image, options);\n}\n\n/**\n * Map ResizeOptions method to WASM typ_idx parameter\n * typ_idx values (from Squoosh):\n * 0: Triangular - fastest, lowest quality\n * 1: Catrom - medium quality and speed\n * 2: Mitchell - good balance (default)\n * 3: Lanczos3 - highest quality, slowest\n */\nfunction getResizeMethod(options?: ResizeOptions): number {\n const methodMap: Record<string, number> = {\n triangular: 0,\n catrom: 1,\n mitchell: 2,\n lanczos3: 3,\n };\n return methodMap[options?.method ?? 'lanczos3'] ?? 3;\n}\n\n/**\n * Worker message handler\n */\nif (typeof self !== 'undefined') {\n self.onmessage = async (event: MessageEvent) => {\n const data = event.data;\n\n // Handle worker ping for initialization\n if (data?.type === 'worker:ping') {\n self.postMessage({ type: 'worker:ready' });\n return;\n }\n\n const { id, type, payload } = data as WorkerRequest<{\n image: ImageInput;\n options: ResizeOptions;\n }>;\n\n const response: WorkerResponse<ImageInput> = { id, ok: false };\n\n try {\n if (type !== 'resize:run') {\n throw new Error(`Unknown message type: ${type}`);\n }\n\n const resultImage = await _resizeCore(payload.image, payload.options);\n\n response.ok = true;\n response.data = resultImage;\n\n // Post the response without transferring - the ImageInput with data will be cloned\n // Transfer is only used for incoming requests (image.data buffer from client)\n self.postMessage(response);\n } catch (error) {\n response.error = error instanceof Error ? error.message : String(error);\n self.postMessage(response);\n }\n };\n}\n"
|
|
8
8
|
],
|
|
9
9
|
"mappings": "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",
|
|
10
|
-
"debugId": "
|
|
10
|
+
"debugId": "46601F45412E8F4C64756E2164756E21",
|
|
11
11
|
"names": []
|
|
12
12
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{b as U,c as W,
|
|
2
|
+
import{b as U,c as W,d as I,e as R}from"./chunk-6qec3cgc.js";async function B(j){try{if(typeof process<"u"&&process.versions?.node){let D=await import("fs/promises"),J=new URL(j,import.meta.url).pathname,K=await D.readFile(J);return K.buffer.slice(K.byteOffset,K.byteOffset+K.byteLength)}}catch(D){}try{let D=new URL(j,import.meta.url),G=await fetch(D);if(!G.ok)throw Error(`Failed to fetch WASM binary: ${G.status} ${G.statusText}`);return await G.arrayBuffer()}catch(D){throw Error(`Failed to load WASM binary from "${j}": ${D instanceof Error?D.message:String(D)}`)}}var Y,$=null;function v(){if($===null||$.buffer!==Y.memory.buffer)$=new Uint8Array(Y.memory.buffer);return $}var T=0;function M(j,D){let G=D(j.length*1);return v().set(j,G/1),T=j.length,G}var k=null;function A(){if(k===null||k.buffer!==Y.memory.buffer)k=new Int32Array(Y.memory.buffer);return k}var F=null;function P(){if(F===null||F.buffer!==Y.memory.buffer)F=new Uint8ClampedArray(Y.memory.buffer);return F}function f(j,D){return P().subarray(j/1,j/1+D)}function z(j,D,G,J,K,Q,X,V){try{let q=Y.__wbindgen_add_to_stack_pointer(-16);var L=M(j,Y.__wbindgen_malloc),E=T;Y.resize(q,L,E,D,G,J,K,Q,X,V);var O=A()[q/4+0],S=A()[q/4+1],b=f(O,S).slice();return Y.__wbindgen_free(O,S*1),b}finally{Y.__wbindgen_add_to_stack_pointer(16)}}async function w(j,D){if(typeof Response==="function"&&j instanceof Response){if(typeof WebAssembly.instantiateStreaming==="function")try{return await WebAssembly.instantiateStreaming(j,D)}catch(J){if(j.headers.get("Content-Type")!="application/wasm")console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n",J);else throw J}let G=await j.arrayBuffer();return await WebAssembly.instantiate(G,D)}else{let G=await WebAssembly.instantiate(j,D);if(G instanceof WebAssembly.Instance)return{instance:G,module:j};else return G}}async function H(j){if(typeof j>"u")j=new URL("squoosh_resize_bg.wasm",import.meta.url);let D={};if(typeof j==="string"||typeof Request==="function"&&j instanceof Request||typeof URL==="function"&&j instanceof URL)j=fetch(j);let{instance:G,module:J}=await w(await j,D);return Y=G.exports,H.__wbindgen_wasm_module=J,Y}var x=H;var N=null,Z=null;async function y(){if(N)return;if(Z)return Z;return Z=(async()=>{try{let j=null,D=[new URL("./wasm/squoosh_resize_bg.wasm",import.meta.url).href,new URL("../wasm/squoosh_resize_bg.wasm",import.meta.url).href],G=null;for(let J of D)try{j=await B(J);break}catch(K){G=K instanceof Error?K:Error(String(K))}if(!j)throw G||Error("Could not load WASM binary from any path");try{await x(j)}catch(J){if(J instanceof Error&&(J.message.includes("SharedArrayBuffer")||J.message.includes("first argument must be"))){if(typeof SharedArrayBuffer>"u")globalThis.SharedArrayBuffer=ArrayBuffer;try{await x(j)}catch(K){throw Error(`WASM module initialization failed even with polyfill: ${K instanceof Error?K.message:String(K)}`)}}else throw J}N=z}catch(j){throw Z=null,Error(`Failed to initialize resize WASM module: ${j instanceof Error?j.message:String(j)}`)}})(),Z}async function C(j,D){if(I(j),R(D),await y(),!N)throw Error("Resize module not initialized");let{data:G,width:J,height:K}=j,Q=D.width??J,X=D.height??K;if(D.width&&!D.height)X=Math.max(1,Math.round(K*D.width/J));else if(D.height&&!D.width)Q=Math.max(1,Math.round(J*D.height/K));if(Q<1||X<1)throw RangeError(`Output dimensions must be at least 1x1, got ${Q}x${X}`);let V=G instanceof Uint8ClampedArray?new Uint8Array(G.buffer,G.byteOffset,G.length):new Uint8Array(G.buffer,G.byteOffset,G.length);return{data:N(V,J,K,Q,X,c(D),D.premultiply??!0,D.linearRGB??!0),width:Q,height:X}}async function h(j,D,G){if(G?.aborted)throw new DOMException("Aborted","AbortError");return C(j,D)}function c(j){return{triangular:0,catrom:1,mitchell:2,lanczos3:3}[j?.method??"lanczos3"]??3}if(typeof self<"u")self.onmessage=async(j)=>{let D=j.data;if(D?.type==="worker:ping"){self.postMessage({type:"worker:ready"});return}let{id:G,type:J,payload:K}=D,Q={id:G,ok:!1};try{if(J!=="resize:run")throw Error(`Unknown message type: ${J}`);let X=await C(K.image,K.options);Q.ok=!0,Q.data=X,self.postMessage(Q)}catch(X){Q.error=X instanceof Error?X.message:String(X),self.postMessage(Q)}};export{h as resizeClient};
|
|
3
3
|
|
|
4
|
-
//# debugId=
|
|
4
|
+
//# debugId=AB37651B1101F9E964756E2164756E21
|
|
@@ -7,6 +7,6 @@
|
|
|
7
7
|
"/**\n * Resize processor - single-source worker/client implementation\n */\n\nimport {\n type WorkerRequest,\n type WorkerResponse,\n type ImageInput,\n loadWasmBinary,\n validateImageInput,\n validateResizeOptions,\n} from '@squoosh-kit/runtime';\nimport type { ResizeOptions } from './types';\nimport * as squoosh_resize_module from '../wasm/squoosh_resize';\n\n// Define the type locally to avoid module resolution issues with the linter\ntype SquooshWasmResize = (\n input_image: Uint8Array,\n input_width: number,\n input_height: number,\n output_width: number,\n output_height: number,\n typ_idx: number,\n premultiply: boolean,\n color_space_conversion: boolean\n) => Uint8ClampedArray;\n\nlet wasmResize: SquooshWasmResize | null = null;\nlet initPromise: Promise<void> | null = null;\n\nasync function init(): Promise<void> {\n if (wasmResize) {\n return;\n }\n\n if (initPromise) {\n return initPromise;\n }\n\n initPromise = (async () => {\n try {\n // Load WASM binary with robust fallback strategies\n // Try multiple paths to support both development (../wasm) and npm installed (./wasm) scenarios\n let wasmBuffer: ArrayBuffer | null = null;\n const pathsToTry = [\n new URL(\n /* @vite-ignore */ './wasm/squoosh_resize_bg.wasm',\n import.meta.url\n ).href,\n new URL(\n /* @vite-ignore */ '../wasm/squoosh_resize_bg.wasm',\n import.meta.url\n ).href,\n ];\n\n let lastError: Error | null = null;\n for (const path of pathsToTry) {\n try {\n wasmBuffer = await loadWasmBinary(path);\n break;\n } catch (error) {\n lastError = error instanceof Error ? error : new Error(String(error));\n // Continue to next path\n }\n }\n\n if (!wasmBuffer) {\n throw (\n lastError || new Error('Could not load WASM binary from any path')\n );\n }\n\n // Initialize WASM module with the binary buffer\n try {\n await squoosh_resize_module.default(wasmBuffer);\n } catch (initError: unknown) {\n // If initialization fails due to SharedArrayBuffer issues, try with polyfill\n if (\n initError instanceof Error &&\n (initError.message.includes('SharedArrayBuffer') ||\n initError.message.includes('first argument must be'))\n ) {\n // Apply polyfill and retry\n if (typeof SharedArrayBuffer === 'undefined') {\n (\n globalThis as unknown as Record<string, typeof ArrayBuffer>\n ).SharedArrayBuffer = ArrayBuffer;\n }\n // Reload the module with polyfill in place\n try {\n await squoosh_resize_module.default(wasmBuffer);\n } catch (retryError) {\n throw new Error(\n `WASM module initialization failed even with polyfill: ${retryError instanceof Error ? retryError.message : String(retryError)}`\n );\n }\n } else {\n throw initError;\n }\n }\n // After initialization, the module's exported resize function is ready to use\n wasmResize = squoosh_resize_module.resize as unknown as SquooshWasmResize;\n } catch (error) {\n initPromise = null;\n throw new Error(\n `Failed to initialize resize WASM module: ${error instanceof Error ? error.message : String(error)}`\n );\n }\n })();\n\n return initPromise;\n}\n\nasync function _resizeCore(\n image: ImageInput,\n options: ResizeOptions\n): Promise<ImageInput> {\n validateImageInput(image);\n validateResizeOptions(options);\n\n await init();\n if (!wasmResize) {\n throw new Error('Resize module not initialized');\n }\n\n const { data, width: inputWidth, height: inputHeight } = image;\n\n let outputWidth = options.width ?? inputWidth;\n let outputHeight = options.height ?? inputHeight;\n\n if (options.width && !options.height) {\n outputHeight = Math.max(\n 1,\n Math.round((inputHeight * options.width) / inputWidth)\n );\n } else if (options.height && !options.width) {\n outputWidth = Math.max(\n 1,\n Math.round((inputWidth * options.height) / inputHeight)\n );\n }\n\n if (outputWidth < 1 || outputHeight < 1) {\n throw new RangeError(\n `Output dimensions must be at least 1x1, got ${outputWidth}x${outputHeight}`\n );\n }\n\n // Create a zero-copy Uint8Array view if needed\n // (don't copy the buffer - just create a view on the same memory)\n const dataArray =\n data instanceof Uint8ClampedArray\n ? new Uint8Array(data.buffer as ArrayBuffer, data.byteOffset, data.length)\n : new Uint8Array(\n data.buffer as ArrayBuffer,\n data.byteOffset,\n data.length\n );\n\n const result = wasmResize(\n dataArray,\n inputWidth,\n inputHeight,\n outputWidth,\n outputHeight,\n getResizeMethod(options),\n options.premultiply ?? true,\n options.linearRGB ?? true\n );\n\n return {\n data: result,\n width: outputWidth,\n height: outputHeight,\n };\n}\n\nexport async function resizeClient(\n image: ImageInput,\n options: ResizeOptions,\n signal?: AbortSignal\n): Promise<ImageInput> {\n if (signal?.aborted) {\n throw new DOMException('Aborted', 'AbortError');\n }\n return _resizeCore(image, options);\n}\n\n/**\n * Map ResizeOptions method to WASM typ_idx parameter\n * typ_idx values (from Squoosh):\n * 0: Triangular - fastest, lowest quality\n * 1: Catrom - medium quality and speed\n * 2: Mitchell - good balance (default)\n * 3: Lanczos3 - highest quality, slowest\n */\nfunction getResizeMethod(options?: ResizeOptions): number {\n const methodMap: Record<string, number> = {\n triangular: 0,\n catrom: 1,\n mitchell: 2,\n lanczos3: 3,\n };\n return methodMap[options?.method ?? 'lanczos3'] ?? 3;\n}\n\n/**\n * Worker message handler\n */\nif (typeof self !== 'undefined') {\n self.onmessage = async (event: MessageEvent) => {\n const data = event.data;\n\n // Handle worker ping for initialization\n if (data?.type === 'worker:ping') {\n self.postMessage({ type: 'worker:ready' });\n return;\n }\n\n const { id, type, payload } = data as WorkerRequest<{\n image: ImageInput;\n options: ResizeOptions;\n }>;\n\n const response: WorkerResponse<ImageInput> = { id, ok: false };\n\n try {\n if (type !== 'resize:run') {\n throw new Error(`Unknown message type: ${type}`);\n }\n\n const resultImage = await _resizeCore(payload.image, payload.options);\n\n response.ok = true;\n response.data = resultImage;\n\n // Post the response without transferring - the ImageInput with data will be cloned\n // Transfer is only used for incoming requests (image.data buffer from client)\n self.postMessage(response);\n } catch (error) {\n response.error = error instanceof Error ? error.message : String(error);\n self.postMessage(response);\n }\n };\n}\n"
|
|
8
8
|
],
|
|
9
9
|
"mappings": "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",
|
|
10
|
-
"debugId": "
|
|
10
|
+
"debugId": "AB37651B1101F9E964756E2164756E21",
|
|
11
11
|
"names": []
|
|
12
12
|
}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{b as U,c as W,
|
|
1
|
+
import{b as U,c as W,d as I,e as R}from"./chunk-dfj7cgx8.js";async function B(j){try{if(typeof process<"u"&&process.versions?.node){let D=await import("fs/promises"),J=new URL(j,import.meta.url).pathname,K=await D.readFile(J);return K.buffer.slice(K.byteOffset,K.byteOffset+K.byteLength)}}catch(D){}try{let D=new URL(j,import.meta.url),G=await fetch(D);if(!G.ok)throw Error(`Failed to fetch WASM binary: ${G.status} ${G.statusText}`);return await G.arrayBuffer()}catch(D){throw Error(`Failed to load WASM binary from "${j}": ${D instanceof Error?D.message:String(D)}`)}}var Y,$=null;function v(){if($===null||$.buffer!==Y.memory.buffer)$=new Uint8Array(Y.memory.buffer);return $}var T=0;function M(j,D){let G=D(j.length*1);return v().set(j,G/1),T=j.length,G}var k=null;function A(){if(k===null||k.buffer!==Y.memory.buffer)k=new Int32Array(Y.memory.buffer);return k}var F=null;function P(){if(F===null||F.buffer!==Y.memory.buffer)F=new Uint8ClampedArray(Y.memory.buffer);return F}function f(j,D){return P().subarray(j/1,j/1+D)}function z(j,D,G,J,K,Q,X,V){try{let q=Y.__wbindgen_add_to_stack_pointer(-16);var L=M(j,Y.__wbindgen_malloc),E=T;Y.resize(q,L,E,D,G,J,K,Q,X,V);var O=A()[q/4+0],S=A()[q/4+1],b=f(O,S).slice();return Y.__wbindgen_free(O,S*1),b}finally{Y.__wbindgen_add_to_stack_pointer(16)}}async function w(j,D){if(typeof Response==="function"&&j instanceof Response){if(typeof WebAssembly.instantiateStreaming==="function")try{return await WebAssembly.instantiateStreaming(j,D)}catch(J){if(j.headers.get("Content-Type")!="application/wasm")console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n",J);else throw J}let G=await j.arrayBuffer();return await WebAssembly.instantiate(G,D)}else{let G=await WebAssembly.instantiate(j,D);if(G instanceof WebAssembly.Instance)return{instance:G,module:j};else return G}}async function H(j){if(typeof j>"u")j=new URL("squoosh_resize_bg.wasm",import.meta.url);let D={};if(typeof j==="string"||typeof Request==="function"&&j instanceof Request||typeof URL==="function"&&j instanceof URL)j=fetch(j);let{instance:G,module:J}=await w(await j,D);return Y=G.exports,H.__wbindgen_wasm_module=J,Y}var x=H;var N=null,Z=null;async function y(){if(N)return;if(Z)return Z;return Z=(async()=>{try{let j=null,D=[new URL("./wasm/squoosh_resize_bg.wasm",import.meta.url).href,new URL("../wasm/squoosh_resize_bg.wasm",import.meta.url).href],G=null;for(let J of D)try{j=await B(J);break}catch(K){G=K instanceof Error?K:Error(String(K))}if(!j)throw G||Error("Could not load WASM binary from any path");try{await x(j)}catch(J){if(J instanceof Error&&(J.message.includes("SharedArrayBuffer")||J.message.includes("first argument must be"))){if(typeof SharedArrayBuffer>"u")globalThis.SharedArrayBuffer=ArrayBuffer;try{await x(j)}catch(K){throw Error(`WASM module initialization failed even with polyfill: ${K instanceof Error?K.message:String(K)}`)}}else throw J}N=z}catch(j){throw Z=null,Error(`Failed to initialize resize WASM module: ${j instanceof Error?j.message:String(j)}`)}})(),Z}async function C(j,D){if(I(j),R(D),await y(),!N)throw Error("Resize module not initialized");let{data:G,width:J,height:K}=j,Q=D.width??J,X=D.height??K;if(D.width&&!D.height)X=Math.max(1,Math.round(K*D.width/J));else if(D.height&&!D.width)Q=Math.max(1,Math.round(J*D.height/K));if(Q<1||X<1)throw RangeError(`Output dimensions must be at least 1x1, got ${Q}x${X}`);let V=G instanceof Uint8ClampedArray?new Uint8Array(G.buffer,G.byteOffset,G.length):new Uint8Array(G.buffer,G.byteOffset,G.length);return{data:N(V,J,K,Q,X,c(D),D.premultiply??!0,D.linearRGB??!0),width:Q,height:X}}async function h(j,D,G){if(G?.aborted)throw new DOMException("Aborted","AbortError");return C(j,D)}function c(j){return{triangular:0,catrom:1,mitchell:2,lanczos3:3}[j?.method??"lanczos3"]??3}if(typeof self<"u")self.onmessage=async(j)=>{let D=j.data;if(D?.type==="worker:ping"){self.postMessage({type:"worker:ready"});return}let{id:G,type:J,payload:K}=D,Q={id:G,ok:!1};try{if(J!=="resize:run")throw Error(`Unknown message type: ${J}`);let X=await C(K.image,K.options);Q.ok=!0,Q.data=X,self.postMessage(Q)}catch(X){Q.error=X instanceof Error?X.message:String(X),self.postMessage(Q)}};export{h as resizeClient};
|
|
2
2
|
|
|
3
|
-
//# debugId=
|
|
3
|
+
//# debugId=667B2AE49DB72B1464756E2164756E21
|
|
@@ -7,6 +7,6 @@
|
|
|
7
7
|
"/**\n * Resize processor - single-source worker/client implementation\n */\n\nimport {\n type WorkerRequest,\n type WorkerResponse,\n type ImageInput,\n loadWasmBinary,\n validateImageInput,\n validateResizeOptions,\n} from '@squoosh-kit/runtime';\nimport type { ResizeOptions } from './types';\nimport * as squoosh_resize_module from '../wasm/squoosh_resize';\n\n// Define the type locally to avoid module resolution issues with the linter\ntype SquooshWasmResize = (\n input_image: Uint8Array,\n input_width: number,\n input_height: number,\n output_width: number,\n output_height: number,\n typ_idx: number,\n premultiply: boolean,\n color_space_conversion: boolean\n) => Uint8ClampedArray;\n\nlet wasmResize: SquooshWasmResize | null = null;\nlet initPromise: Promise<void> | null = null;\n\nasync function init(): Promise<void> {\n if (wasmResize) {\n return;\n }\n\n if (initPromise) {\n return initPromise;\n }\n\n initPromise = (async () => {\n try {\n // Load WASM binary with robust fallback strategies\n // Try multiple paths to support both development (../wasm) and npm installed (./wasm) scenarios\n let wasmBuffer: ArrayBuffer | null = null;\n const pathsToTry = [\n new URL(\n /* @vite-ignore */ './wasm/squoosh_resize_bg.wasm',\n import.meta.url\n ).href,\n new URL(\n /* @vite-ignore */ '../wasm/squoosh_resize_bg.wasm',\n import.meta.url\n ).href,\n ];\n\n let lastError: Error | null = null;\n for (const path of pathsToTry) {\n try {\n wasmBuffer = await loadWasmBinary(path);\n break;\n } catch (error) {\n lastError = error instanceof Error ? error : new Error(String(error));\n // Continue to next path\n }\n }\n\n if (!wasmBuffer) {\n throw (\n lastError || new Error('Could not load WASM binary from any path')\n );\n }\n\n // Initialize WASM module with the binary buffer\n try {\n await squoosh_resize_module.default(wasmBuffer);\n } catch (initError: unknown) {\n // If initialization fails due to SharedArrayBuffer issues, try with polyfill\n if (\n initError instanceof Error &&\n (initError.message.includes('SharedArrayBuffer') ||\n initError.message.includes('first argument must be'))\n ) {\n // Apply polyfill and retry\n if (typeof SharedArrayBuffer === 'undefined') {\n (\n globalThis as unknown as Record<string, typeof ArrayBuffer>\n ).SharedArrayBuffer = ArrayBuffer;\n }\n // Reload the module with polyfill in place\n try {\n await squoosh_resize_module.default(wasmBuffer);\n } catch (retryError) {\n throw new Error(\n `WASM module initialization failed even with polyfill: ${retryError instanceof Error ? retryError.message : String(retryError)}`\n );\n }\n } else {\n throw initError;\n }\n }\n // After initialization, the module's exported resize function is ready to use\n wasmResize = squoosh_resize_module.resize as unknown as SquooshWasmResize;\n } catch (error) {\n initPromise = null;\n throw new Error(\n `Failed to initialize resize WASM module: ${error instanceof Error ? error.message : String(error)}`\n );\n }\n })();\n\n return initPromise;\n}\n\nasync function _resizeCore(\n image: ImageInput,\n options: ResizeOptions\n): Promise<ImageInput> {\n validateImageInput(image);\n validateResizeOptions(options);\n\n await init();\n if (!wasmResize) {\n throw new Error('Resize module not initialized');\n }\n\n const { data, width: inputWidth, height: inputHeight } = image;\n\n let outputWidth = options.width ?? inputWidth;\n let outputHeight = options.height ?? inputHeight;\n\n if (options.width && !options.height) {\n outputHeight = Math.max(\n 1,\n Math.round((inputHeight * options.width) / inputWidth)\n );\n } else if (options.height && !options.width) {\n outputWidth = Math.max(\n 1,\n Math.round((inputWidth * options.height) / inputHeight)\n );\n }\n\n if (outputWidth < 1 || outputHeight < 1) {\n throw new RangeError(\n `Output dimensions must be at least 1x1, got ${outputWidth}x${outputHeight}`\n );\n }\n\n // Create a zero-copy Uint8Array view if needed\n // (don't copy the buffer - just create a view on the same memory)\n const dataArray =\n data instanceof Uint8ClampedArray\n ? new Uint8Array(data.buffer as ArrayBuffer, data.byteOffset, data.length)\n : new Uint8Array(\n data.buffer as ArrayBuffer,\n data.byteOffset,\n data.length\n );\n\n const result = wasmResize(\n dataArray,\n inputWidth,\n inputHeight,\n outputWidth,\n outputHeight,\n getResizeMethod(options),\n options.premultiply ?? true,\n options.linearRGB ?? true\n );\n\n return {\n data: result,\n width: outputWidth,\n height: outputHeight,\n };\n}\n\nexport async function resizeClient(\n image: ImageInput,\n options: ResizeOptions,\n signal?: AbortSignal\n): Promise<ImageInput> {\n if (signal?.aborted) {\n throw new DOMException('Aborted', 'AbortError');\n }\n return _resizeCore(image, options);\n}\n\n/**\n * Map ResizeOptions method to WASM typ_idx parameter\n * typ_idx values (from Squoosh):\n * 0: Triangular - fastest, lowest quality\n * 1: Catrom - medium quality and speed\n * 2: Mitchell - good balance (default)\n * 3: Lanczos3 - highest quality, slowest\n */\nfunction getResizeMethod(options?: ResizeOptions): number {\n const methodMap: Record<string, number> = {\n triangular: 0,\n catrom: 1,\n mitchell: 2,\n lanczos3: 3,\n };\n return methodMap[options?.method ?? 'lanczos3'] ?? 3;\n}\n\n/**\n * Worker message handler\n */\nif (typeof self !== 'undefined') {\n self.onmessage = async (event: MessageEvent) => {\n const data = event.data;\n\n // Handle worker ping for initialization\n if (data?.type === 'worker:ping') {\n self.postMessage({ type: 'worker:ready' });\n return;\n }\n\n const { id, type, payload } = data as WorkerRequest<{\n image: ImageInput;\n options: ResizeOptions;\n }>;\n\n const response: WorkerResponse<ImageInput> = { id, ok: false };\n\n try {\n if (type !== 'resize:run') {\n throw new Error(`Unknown message type: ${type}`);\n }\n\n const resultImage = await _resizeCore(payload.image, payload.options);\n\n response.ok = true;\n response.data = resultImage;\n\n // Post the response without transferring - the ImageInput with data will be cloned\n // Transfer is only used for incoming requests (image.data buffer from client)\n self.postMessage(response);\n } catch (error) {\n response.error = error instanceof Error ? error.message : String(error);\n self.postMessage(response);\n }\n };\n}\n"
|
|
8
8
|
],
|
|
9
9
|
"mappings": "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",
|
|
10
|
-
"debugId": "
|
|
10
|
+
"debugId": "667B2AE49DB72B1464756E2164756E21",
|
|
11
11
|
"names": []
|
|
12
12
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@squoosh-kit/resize",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.16",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Image resize module for squoosh-kit.",
|
|
6
6
|
"author": "Bartosz Nowak <bnowak008@gmail.com>",
|
|
@@ -45,6 +45,6 @@
|
|
|
45
45
|
"test": "bun test"
|
|
46
46
|
},
|
|
47
47
|
"dependencies": {
|
|
48
|
-
"@squoosh-kit/runtime": "0.0.
|
|
48
|
+
"@squoosh-kit/runtime": "0.0.15"
|
|
49
49
|
}
|
|
50
50
|
}
|
package/dist/chunk-1zf4xag4.js
DELETED
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
function a(t){if(t instanceof SharedArrayBuffer)throw Error("SharedArrayBuffer is not supported. Use regular ArrayBuffer or Uint8Array instead.");if(!(t instanceof ArrayBuffer))throw TypeError("image.data.buffer must be an ArrayBuffer")}function s(t){if(!t||typeof t!=="object")throw TypeError("image must be an object");let e=t;if(!("data"in e))throw TypeError("image.data is required");let{data:r}=e;if(!(r instanceof Uint8Array||r instanceof Uint8ClampedArray))throw TypeError("image.data must be Uint8Array or Uint8ClampedArray");if(!("width"in e)||!("height"in e))throw TypeError("image.width and image.height are required");let{width:n,height:i}=e;if(typeof n!=="number"||!Number.isInteger(n)||n<=0)throw RangeError(`image.width must be a positive integer, got ${n}`);if(typeof i!=="number"||!Number.isInteger(i)||i<=0)throw RangeError(`image.height must be a positive integer, got ${i}`);let o=n*i*4;if(r.length<o)throw RangeError(`image.data too small: ${r.length} bytes, expected at least ${o} bytes for ${n}x${i} RGBA image`)}function u(t){if(typeof t!=="object"||t===null)throw TypeError("options must be an object");let e=t;if(e.width!==void 0){if(typeof e.width!=="number"||!Number.isInteger(e.width)||e.width<=0)throw RangeError(`options.width must be a positive integer, got ${e.width}`)}if(e.height!==void 0){if(typeof e.height!=="number"||!Number.isInteger(e.height)||e.height<=0)throw RangeError(`options.height must be a positive integer, got ${e.height}`)}if(e.method!==void 0){let r=["triangular","catrom","mitchell","lanczos3"];if(!r.includes(e.method))throw TypeError(`options.method must be one of: ${r.join(", ")}, got ${e.method}`)}if(e.premultiply!==void 0&&typeof e.premultiply!=="boolean")throw TypeError(`options.premultiply must be boolean, got ${typeof e.premultiply}`);if(e.linearRGB!==void 0&&typeof e.linearRGB!=="boolean")throw TypeError(`options.linearRGB must be boolean, got ${typeof e.linearRGB}`)}
|
|
2
|
-
|
|
3
|
-
//# debugId=AA2F330D7629EA1964756E2164756E21
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../runtime/src/validators.ts"],
|
|
4
|
-
"sourcesContent": [
|
|
5
|
-
"import type { ImageInput } from './types.js';\n\nexport function validateArrayBuffer(\n buffer: unknown\n): asserts buffer is ArrayBuffer {\n if (buffer instanceof SharedArrayBuffer) {\n throw new Error(\n 'SharedArrayBuffer is not supported. ' +\n 'Use regular ArrayBuffer or Uint8Array instead.'\n );\n }\n\n if (!(buffer instanceof ArrayBuffer)) {\n throw new TypeError('image.data.buffer must be an ArrayBuffer');\n }\n}\n\nexport function validateImageInput(\n image: unknown\n): asserts image is ImageInput {\n if (!image || typeof image !== 'object') {\n throw new TypeError('image must be an object');\n }\n\n const imageObj = image as Record<string, unknown>;\n\n if (!('data' in imageObj)) {\n throw new TypeError('image.data is required');\n }\n\n const { data } = imageObj;\n if (!(data instanceof Uint8Array || data instanceof Uint8ClampedArray)) {\n throw new TypeError('image.data must be Uint8Array or Uint8ClampedArray');\n }\n\n if (!('width' in imageObj) || !('height' in imageObj)) {\n throw new TypeError('image.width and image.height are required');\n }\n\n const { width, height } = imageObj;\n\n if (typeof width !== 'number' || !Number.isInteger(width) || width <= 0) {\n throw new RangeError(\n `image.width must be a positive integer, got ${width}`\n );\n }\n\n if (typeof height !== 'number' || !Number.isInteger(height) || height <= 0) {\n throw new RangeError(\n `image.height must be a positive integer, got ${height}`\n );\n }\n\n const expectedSize = width * height * 4;\n if (data.length < expectedSize) {\n throw new RangeError(\n `image.data too small: ${data.length} bytes, expected at least ${expectedSize} bytes for ${width}x${height} RGBA image`\n );\n }\n}\n\nexport function validateResizeOptions(options: unknown): asserts options is {\n width?: number;\n height?: number;\n method?: 'triangular' | 'catrom' | 'mitchell' | 'lanczos3';\n premultiply?: boolean;\n linearRGB?: boolean;\n} {\n if (typeof options !== 'object' || options === null) {\n throw new TypeError('options must be an object');\n }\n\n const opts = options as Record<string, unknown>;\n\n if (opts.width !== undefined) {\n if (\n typeof opts.width !== 'number' ||\n !Number.isInteger(opts.width) ||\n opts.width <= 0\n ) {\n throw new RangeError(\n `options.width must be a positive integer, got ${opts.width}`\n );\n }\n }\n\n if (opts.height !== undefined) {\n if (\n typeof opts.height !== 'number' ||\n !Number.isInteger(opts.height) ||\n opts.height <= 0\n ) {\n throw new RangeError(\n `options.height must be a positive integer, got ${opts.height}`\n );\n }\n }\n\n if (opts.method !== undefined) {\n const validMethods = ['triangular', 'catrom', 'mitchell', 'lanczos3'];\n if (!validMethods.includes(opts.method as string)) {\n throw new TypeError(\n `options.method must be one of: ${validMethods.join(', ')}, got ${opts.method}`\n );\n }\n }\n\n if (opts.premultiply !== undefined && typeof opts.premultiply !== 'boolean') {\n throw new TypeError(\n `options.premultiply must be boolean, got ${typeof opts.premultiply}`\n );\n }\n\n if (opts.linearRGB !== undefined && typeof opts.linearRGB !== 'boolean') {\n throw new TypeError(\n `options.linearRGB must be boolean, got ${typeof opts.linearRGB}`\n );\n }\n}\n\nexport function validateWebpOptions(\n options: unknown\n): asserts options is Record<string, unknown> | undefined {\n if (options === undefined) {\n return;\n }\n\n if (typeof options !== 'object' || options === null) {\n throw new TypeError('options must be an object or undefined');\n }\n\n const opts = options as Record<string, unknown>;\n\n if ('quality' in opts && opts.quality !== undefined) {\n const quality = opts.quality;\n\n if (Number.isNaN(quality)) {\n throw new RangeError(\n 'quality must be a valid number in the range 0-100, got NaN'\n );\n }\n\n if (typeof quality !== 'number') {\n throw new TypeError('quality must be a number');\n }\n\n if (!Number.isInteger(quality)) {\n throw new RangeError(\n 'quality must be an integer in the range 0-100, got floating point'\n );\n }\n\n if (quality < 0 || quality > 100) {\n throw new RangeError(\n `quality must be in the range 0-100, got ${quality}`\n );\n }\n }\n}\n"
|
|
6
|
-
],
|
|
7
|
-
"mappings": "AAEO,SAAS,CAAmB,CACjC,EAC+B,CAC/B,GAAI,aAAkB,kBACpB,MAAU,MACR,oFAEF,EAGF,GAAI,EAAE,aAAkB,aACtB,MAAU,UAAU,0CAA0C,EAI3D,SAAS,CAAkB,CAChC,EAC6B,CAC7B,GAAI,CAAC,GAAS,OAAO,IAAU,SAC7B,MAAU,UAAU,yBAAyB,EAG/C,IAAM,EAAW,EAEjB,GAAI,EAAE,SAAU,GACd,MAAU,UAAU,wBAAwB,EAG9C,IAAQ,QAAS,EACjB,GAAI,EAAE,aAAgB,YAAc,aAAgB,mBAClD,MAAU,UAAU,oDAAoD,EAG1E,GAAI,EAAE,UAAW,IAAa,EAAE,WAAY,GAC1C,MAAU,UAAU,2CAA2C,EAGjE,IAAQ,QAAO,UAAW,EAE1B,GAAI,OAAO,IAAU,UAAY,CAAC,OAAO,UAAU,CAAK,GAAK,GAAS,EACpE,MAAU,WACR,+CAA+C,GACjD,EAGF,GAAI,OAAO,IAAW,UAAY,CAAC,OAAO,UAAU,CAAM,GAAK,GAAU,EACvE,MAAU,WACR,gDAAgD,GAClD,EAGF,IAAM,EAAe,EAAQ,EAAS,EACtC,GAAI,EAAK,OAAS,EAChB,MAAU,WACR,yBAAyB,EAAK,mCAAmC,eAA0B,KAAS,cACtG,EAIG,SAAS,CAAqB,CAAC,EAMpC,CACA,GAAI,OAAO,IAAY,UAAY,IAAY,KAC7C,MAAU,UAAU,2BAA2B,EAGjD,IAAM,EAAO,EAEb,GAAI,EAAK,QAAU,QACjB,GACE,OAAO,EAAK,QAAU,UACtB,CAAC,OAAO,UAAU,EAAK,KAAK,GAC5B,EAAK,OAAS,EAEd,MAAU,WACR,iDAAiD,EAAK,OACxD,EAIJ,GAAI,EAAK,SAAW,QAClB,GACE,OAAO,EAAK,SAAW,UACvB,CAAC,OAAO,UAAU,EAAK,MAAM,GAC7B,EAAK,QAAU,EAEf,MAAU,WACR,kDAAkD,EAAK,QACzD,EAIJ,GAAI,EAAK,SAAW,OAAW,CAC7B,IAAM,EAAe,CAAC,aAAc,SAAU,WAAY,UAAU,EACpE,GAAI,CAAC,EAAa,SAAS,EAAK,MAAgB,EAC9C,MAAU,UACR,kCAAkC,EAAa,KAAK,IAAI,UAAU,EAAK,QACzE,EAIJ,GAAI,EAAK,cAAgB,QAAa,OAAO,EAAK,cAAgB,UAChE,MAAU,UACR,4CAA4C,OAAO,EAAK,aAC1D,EAGF,GAAI,EAAK,YAAc,QAAa,OAAO,EAAK,YAAc,UAC5D,MAAU,UACR,0CAA0C,OAAO,EAAK,WACxD",
|
|
8
|
-
"debugId": "AA2F330D7629EA1964756E2164756E21",
|
|
9
|
-
"names": []
|
|
10
|
-
}
|
package/dist/chunk-33kv1dx2.js
DELETED
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
// @bun
|
|
2
|
-
var s=Object.create;var{getPrototypeOf:u,defineProperty:a,getOwnPropertyNames:f}=Object;var h=Object.prototype.hasOwnProperty;var g=(t,e,r)=>{r=t!=null?s(u(t)):{};let n=e||!t||!t.__esModule?a(r,"default",{value:t,enumerable:!0}):r;for(let i of f(t))if(!h.call(n,i))a(n,i,{get:()=>t[i],enumerable:!0});return n};var d=import.meta.require;function p(t){if(t instanceof SharedArrayBuffer)throw Error("SharedArrayBuffer is not supported. Use regular ArrayBuffer or Uint8Array instead.");if(!(t instanceof ArrayBuffer))throw TypeError("image.data.buffer must be an ArrayBuffer")}function w(t){if(!t||typeof t!=="object")throw TypeError("image must be an object");let e=t;if(!("data"in e))throw TypeError("image.data is required");let{data:r}=e;if(!(r instanceof Uint8Array||r instanceof Uint8ClampedArray))throw TypeError("image.data must be Uint8Array or Uint8ClampedArray");if(!("width"in e)||!("height"in e))throw TypeError("image.width and image.height are required");let{width:n,height:i}=e;if(typeof n!=="number"||!Number.isInteger(n)||n<=0)throw RangeError(`image.width must be a positive integer, got ${n}`);if(typeof i!=="number"||!Number.isInteger(i)||i<=0)throw RangeError(`image.height must be a positive integer, got ${i}`);let o=n*i*4;if(r.length<o)throw RangeError(`image.data too small: ${r.length} bytes, expected at least ${o} bytes for ${n}x${i} RGBA image`)}function l(t){if(typeof t!=="object"||t===null)throw TypeError("options must be an object");let e=t;if(e.width!==void 0){if(typeof e.width!=="number"||!Number.isInteger(e.width)||e.width<=0)throw RangeError(`options.width must be a positive integer, got ${e.width}`)}if(e.height!==void 0){if(typeof e.height!=="number"||!Number.isInteger(e.height)||e.height<=0)throw RangeError(`options.height must be a positive integer, got ${e.height}`)}if(e.method!==void 0){let r=["triangular","catrom","mitchell","lanczos3"];if(!r.includes(e.method))throw TypeError(`options.method must be one of: ${r.join(", ")}, got ${e.method}`)}if(e.premultiply!==void 0&&typeof e.premultiply!=="boolean")throw TypeError(`options.premultiply must be boolean, got ${typeof e.premultiply}`);if(e.linearRGB!==void 0&&typeof e.linearRGB!=="boolean")throw TypeError(`options.linearRGB must be boolean, got ${typeof e.linearRGB}`)}
|
|
3
|
-
export{g as b,d as c,p as d,w as e,l as f};
|
|
4
|
-
|
|
5
|
-
//# debugId=0B50B907EDB6654964756E2164756E21
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../runtime/src/validators.ts"],
|
|
4
|
-
"sourcesContent": [
|
|
5
|
-
"import type { ImageInput } from './types.js';\n\nexport function validateArrayBuffer(\n buffer: unknown\n): asserts buffer is ArrayBuffer {\n if (buffer instanceof SharedArrayBuffer) {\n throw new Error(\n 'SharedArrayBuffer is not supported. ' +\n 'Use regular ArrayBuffer or Uint8Array instead.'\n );\n }\n\n if (!(buffer instanceof ArrayBuffer)) {\n throw new TypeError('image.data.buffer must be an ArrayBuffer');\n }\n}\n\nexport function validateImageInput(\n image: unknown\n): asserts image is ImageInput {\n if (!image || typeof image !== 'object') {\n throw new TypeError('image must be an object');\n }\n\n const imageObj = image as Record<string, unknown>;\n\n if (!('data' in imageObj)) {\n throw new TypeError('image.data is required');\n }\n\n const { data } = imageObj;\n if (!(data instanceof Uint8Array || data instanceof Uint8ClampedArray)) {\n throw new TypeError('image.data must be Uint8Array or Uint8ClampedArray');\n }\n\n if (!('width' in imageObj) || !('height' in imageObj)) {\n throw new TypeError('image.width and image.height are required');\n }\n\n const { width, height } = imageObj;\n\n if (typeof width !== 'number' || !Number.isInteger(width) || width <= 0) {\n throw new RangeError(\n `image.width must be a positive integer, got ${width}`\n );\n }\n\n if (typeof height !== 'number' || !Number.isInteger(height) || height <= 0) {\n throw new RangeError(\n `image.height must be a positive integer, got ${height}`\n );\n }\n\n const expectedSize = width * height * 4;\n if (data.length < expectedSize) {\n throw new RangeError(\n `image.data too small: ${data.length} bytes, expected at least ${expectedSize} bytes for ${width}x${height} RGBA image`\n );\n }\n}\n\nexport function validateResizeOptions(options: unknown): asserts options is {\n width?: number;\n height?: number;\n method?: 'triangular' | 'catrom' | 'mitchell' | 'lanczos3';\n premultiply?: boolean;\n linearRGB?: boolean;\n} {\n if (typeof options !== 'object' || options === null) {\n throw new TypeError('options must be an object');\n }\n\n const opts = options as Record<string, unknown>;\n\n if (opts.width !== undefined) {\n if (\n typeof opts.width !== 'number' ||\n !Number.isInteger(opts.width) ||\n opts.width <= 0\n ) {\n throw new RangeError(\n `options.width must be a positive integer, got ${opts.width}`\n );\n }\n }\n\n if (opts.height !== undefined) {\n if (\n typeof opts.height !== 'number' ||\n !Number.isInteger(opts.height) ||\n opts.height <= 0\n ) {\n throw new RangeError(\n `options.height must be a positive integer, got ${opts.height}`\n );\n }\n }\n\n if (opts.method !== undefined) {\n const validMethods = ['triangular', 'catrom', 'mitchell', 'lanczos3'];\n if (!validMethods.includes(opts.method as string)) {\n throw new TypeError(\n `options.method must be one of: ${validMethods.join(', ')}, got ${opts.method}`\n );\n }\n }\n\n if (opts.premultiply !== undefined && typeof opts.premultiply !== 'boolean') {\n throw new TypeError(\n `options.premultiply must be boolean, got ${typeof opts.premultiply}`\n );\n }\n\n if (opts.linearRGB !== undefined && typeof opts.linearRGB !== 'boolean') {\n throw new TypeError(\n `options.linearRGB must be boolean, got ${typeof opts.linearRGB}`\n );\n }\n}\n\nexport function validateWebpOptions(\n options: unknown\n): asserts options is Record<string, unknown> | undefined {\n if (options === undefined) {\n return;\n }\n\n if (typeof options !== 'object' || options === null) {\n throw new TypeError('options must be an object or undefined');\n }\n\n const opts = options as Record<string, unknown>;\n\n if ('quality' in opts && opts.quality !== undefined) {\n const quality = opts.quality;\n\n if (Number.isNaN(quality)) {\n throw new RangeError(\n 'quality must be a valid number in the range 0-100, got NaN'\n );\n }\n\n if (typeof quality !== 'number') {\n throw new TypeError('quality must be a number');\n }\n\n if (!Number.isInteger(quality)) {\n throw new RangeError(\n 'quality must be an integer in the range 0-100, got floating point'\n );\n }\n\n if (quality < 0 || quality > 100) {\n throw new RangeError(\n `quality must be in the range 0-100, got ${quality}`\n );\n }\n }\n}\n"
|
|
6
|
-
],
|
|
7
|
-
"mappings": ";iVAEO,SAAS,CAAmB,CACjC,EAC+B,CAC/B,GAAI,aAAkB,kBACpB,MAAU,MACR,oFAEF,EAGF,GAAI,EAAE,aAAkB,aACtB,MAAU,UAAU,0CAA0C,EAI3D,SAAS,CAAkB,CAChC,EAC6B,CAC7B,GAAI,CAAC,GAAS,OAAO,IAAU,SAC7B,MAAU,UAAU,yBAAyB,EAG/C,IAAM,EAAW,EAEjB,GAAI,EAAE,SAAU,GACd,MAAU,UAAU,wBAAwB,EAG9C,IAAQ,QAAS,EACjB,GAAI,EAAE,aAAgB,YAAc,aAAgB,mBAClD,MAAU,UAAU,oDAAoD,EAG1E,GAAI,EAAE,UAAW,IAAa,EAAE,WAAY,GAC1C,MAAU,UAAU,2CAA2C,EAGjE,IAAQ,QAAO,UAAW,EAE1B,GAAI,OAAO,IAAU,UAAY,CAAC,OAAO,UAAU,CAAK,GAAK,GAAS,EACpE,MAAU,WACR,+CAA+C,GACjD,EAGF,GAAI,OAAO,IAAW,UAAY,CAAC,OAAO,UAAU,CAAM,GAAK,GAAU,EACvE,MAAU,WACR,gDAAgD,GAClD,EAGF,IAAM,EAAe,EAAQ,EAAS,EACtC,GAAI,EAAK,OAAS,EAChB,MAAU,WACR,yBAAyB,EAAK,mCAAmC,eAA0B,KAAS,cACtG,EAIG,SAAS,CAAqB,CAAC,EAMpC,CACA,GAAI,OAAO,IAAY,UAAY,IAAY,KAC7C,MAAU,UAAU,2BAA2B,EAGjD,IAAM,EAAO,EAEb,GAAI,EAAK,QAAU,QACjB,GACE,OAAO,EAAK,QAAU,UACtB,CAAC,OAAO,UAAU,EAAK,KAAK,GAC5B,EAAK,OAAS,EAEd,MAAU,WACR,iDAAiD,EAAK,OACxD,EAIJ,GAAI,EAAK,SAAW,QAClB,GACE,OAAO,EAAK,SAAW,UACvB,CAAC,OAAO,UAAU,EAAK,MAAM,GAC7B,EAAK,QAAU,EAEf,MAAU,WACR,kDAAkD,EAAK,QACzD,EAIJ,GAAI,EAAK,SAAW,OAAW,CAC7B,IAAM,EAAe,CAAC,aAAc,SAAU,WAAY,UAAU,EACpE,GAAI,CAAC,EAAa,SAAS,EAAK,MAAgB,EAC9C,MAAU,UACR,kCAAkC,EAAa,KAAK,IAAI,UAAU,EAAK,QACzE,EAIJ,GAAI,EAAK,cAAgB,QAAa,OAAO,EAAK,cAAgB,UAChE,MAAU,UACR,4CAA4C,OAAO,EAAK,aAC1D,EAGF,GAAI,EAAK,YAAc,QAAa,OAAO,EAAK,YAAc,UAC5D,MAAU,UACR,0CAA0C,OAAO,EAAK,WACxD",
|
|
8
|
-
"debugId": "0B50B907EDB6654964756E2164756E21",
|
|
9
|
-
"names": []
|
|
10
|
-
}
|
package/dist/chunk-atxx2y4c.js
DELETED
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import{createRequire as Q}from"node:module";var K=Object.create;var{getPrototypeOf:L,defineProperty:J,getOwnPropertyNames:N}=Object;var P=Object.prototype.hasOwnProperty;var R=(E,D,F)=>{F=E!=null?K(L(E)):{};let G=D||!E||!E.__esModule?J(F,"default",{value:E,enumerable:!0}):F;for(let H of N(E))if(!P.call(G,H))J(G,H,{get:()=>E[H],enumerable:!0});return G};var U=Q(import.meta.url);function W(E){if(typeof SharedArrayBuffer<"u"&&E instanceof SharedArrayBuffer)throw Error("SharedArrayBuffer is not supported. Use regular ArrayBuffer or Uint8Array instead.");if(!(E instanceof ArrayBuffer))throw TypeError("image.data.buffer must be an ArrayBuffer")}function X(E){if(!E||typeof E!=="object")throw TypeError("image must be an object");let D=E;if(!("data"in D))throw TypeError("image.data is required");let{data:F}=D;if(!(F instanceof Uint8Array||F instanceof Uint8ClampedArray))throw TypeError("image.data must be Uint8Array or Uint8ClampedArray");if(!("width"in D)||!("height"in D))throw TypeError("image.width and image.height are required");let{width:G,height:H}=D;if(typeof G!=="number"||!Number.isInteger(G)||G<=0)throw RangeError(`image.width must be a positive integer, got ${G}`);if(typeof H!=="number"||!Number.isInteger(H)||H<=0)throw RangeError(`image.height must be a positive integer, got ${H}`);let I=G*H*4;if(F.length<I)throw RangeError(`image.data too small: ${F.length} bytes, expected at least ${I} bytes for ${G}x${H} RGBA image`)}function Y(E){if(typeof E!=="object"||E===null)throw TypeError("options must be an object");let D=E;if(D.width!==void 0){if(typeof D.width!=="number"||!Number.isInteger(D.width)||D.width<=0)throw RangeError(`options.width must be a positive integer, got ${D.width}`)}if(D.height!==void 0){if(typeof D.height!=="number"||!Number.isInteger(D.height)||D.height<=0)throw RangeError(`options.height must be a positive integer, got ${D.height}`)}if(D.method!==void 0){let F=["triangular","catrom","mitchell","lanczos3"];if(!F.includes(D.method))throw TypeError(`options.method must be one of: ${F.join(", ")}, got ${D.method}`)}if(D.premultiply!==void 0&&typeof D.premultiply!=="boolean")throw TypeError(`options.premultiply must be boolean, got ${typeof D.premultiply}`);if(D.linearRGB!==void 0&&typeof D.linearRGB!=="boolean")throw TypeError(`options.linearRGB must be boolean, got ${typeof D.linearRGB}`)}
|
|
2
|
-
export{R as b,U as c,W as d,X as e,Y as f};
|
|
3
|
-
|
|
4
|
-
//# debugId=79A4E722518A72CB64756E2164756E21
|
package/dist/chunk-fyfa8ceq.js
DELETED
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
function J(E){if(typeof SharedArrayBuffer<"u"&&E instanceof SharedArrayBuffer)throw Error("SharedArrayBuffer is not supported. Use regular ArrayBuffer or Uint8Array instead.");if(!(E instanceof ArrayBuffer))throw TypeError("image.data.buffer must be an ArrayBuffer")}function K(E){if(!E||typeof E!=="object")throw TypeError("image must be an object");let D=E;if(!("data"in D))throw TypeError("image.data is required");let{data:F}=D;if(!(F instanceof Uint8Array||F instanceof Uint8ClampedArray))throw TypeError("image.data must be Uint8Array or Uint8ClampedArray");if(!("width"in D)||!("height"in D))throw TypeError("image.width and image.height are required");let{width:G,height:H}=D;if(typeof G!=="number"||!Number.isInteger(G)||G<=0)throw RangeError(`image.width must be a positive integer, got ${G}`);if(typeof H!=="number"||!Number.isInteger(H)||H<=0)throw RangeError(`image.height must be a positive integer, got ${H}`);let I=G*H*4;if(F.length<I)throw RangeError(`image.data too small: ${F.length} bytes, expected at least ${I} bytes for ${G}x${H} RGBA image`)}function L(E){if(typeof E!=="object"||E===null)throw TypeError("options must be an object");let D=E;if(D.width!==void 0){if(typeof D.width!=="number"||!Number.isInteger(D.width)||D.width<=0)throw RangeError(`options.width must be a positive integer, got ${D.width}`)}if(D.height!==void 0){if(typeof D.height!=="number"||!Number.isInteger(D.height)||D.height<=0)throw RangeError(`options.height must be a positive integer, got ${D.height}`)}if(D.method!==void 0){let F=["triangular","catrom","mitchell","lanczos3"];if(!F.includes(D.method))throw TypeError(`options.method must be one of: ${F.join(", ")}, got ${D.method}`)}if(D.premultiply!==void 0&&typeof D.premultiply!=="boolean")throw TypeError(`options.premultiply must be boolean, got ${typeof D.premultiply}`);if(D.linearRGB!==void 0&&typeof D.linearRGB!=="boolean")throw TypeError(`options.linearRGB must be boolean, got ${typeof D.linearRGB}`)}
|
|
2
|
-
|
|
3
|
-
//# debugId=6329D3052D6C5BE664756E2164756E21
|
package/dist/chunk-n9ax3x9w.js
DELETED
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
var s=Object.create;var{getPrototypeOf:u,defineProperty:a,getOwnPropertyNames:f}=Object;var h=Object.prototype.hasOwnProperty;var g=(t,e,r)=>{r=t!=null?s(u(t)):{};let n=e||!t||!t.__esModule?a(r,"default",{value:t,enumerable:!0}):r;for(let i of f(t))if(!h.call(n,i))a(n,i,{get:()=>t[i],enumerable:!0});return n};var d=((t)=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(t,{get:(e,r)=>(typeof require<"u"?require:e)[r]}):t)(function(t){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+t+'" is not supported')});function p(t){if(t instanceof SharedArrayBuffer)throw Error("SharedArrayBuffer is not supported. Use regular ArrayBuffer or Uint8Array instead.");if(!(t instanceof ArrayBuffer))throw TypeError("image.data.buffer must be an ArrayBuffer")}function w(t){if(!t||typeof t!=="object")throw TypeError("image must be an object");let e=t;if(!("data"in e))throw TypeError("image.data is required");let{data:r}=e;if(!(r instanceof Uint8Array||r instanceof Uint8ClampedArray))throw TypeError("image.data must be Uint8Array or Uint8ClampedArray");if(!("width"in e)||!("height"in e))throw TypeError("image.width and image.height are required");let{width:n,height:i}=e;if(typeof n!=="number"||!Number.isInteger(n)||n<=0)throw RangeError(`image.width must be a positive integer, got ${n}`);if(typeof i!=="number"||!Number.isInteger(i)||i<=0)throw RangeError(`image.height must be a positive integer, got ${i}`);let o=n*i*4;if(r.length<o)throw RangeError(`image.data too small: ${r.length} bytes, expected at least ${o} bytes for ${n}x${i} RGBA image`)}function l(t){if(typeof t!=="object"||t===null)throw TypeError("options must be an object");let e=t;if(e.width!==void 0){if(typeof e.width!=="number"||!Number.isInteger(e.width)||e.width<=0)throw RangeError(`options.width must be a positive integer, got ${e.width}`)}if(e.height!==void 0){if(typeof e.height!=="number"||!Number.isInteger(e.height)||e.height<=0)throw RangeError(`options.height must be a positive integer, got ${e.height}`)}if(e.method!==void 0){let r=["triangular","catrom","mitchell","lanczos3"];if(!r.includes(e.method))throw TypeError(`options.method must be one of: ${r.join(", ")}, got ${e.method}`)}if(e.premultiply!==void 0&&typeof e.premultiply!=="boolean")throw TypeError(`options.premultiply must be boolean, got ${typeof e.premultiply}`);if(e.linearRGB!==void 0&&typeof e.linearRGB!=="boolean")throw TypeError(`options.linearRGB must be boolean, got ${typeof e.linearRGB}`)}
|
|
2
|
-
export{g as b,d as c,p as d,w as e,l as f};
|
|
3
|
-
|
|
4
|
-
//# debugId=453C5EB72DA98CF064756E2164756E21
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../runtime/src/validators.ts"],
|
|
4
|
-
"sourcesContent": [
|
|
5
|
-
"import type { ImageInput } from './types.js';\n\nexport function validateArrayBuffer(\n buffer: unknown\n): asserts buffer is ArrayBuffer {\n if (buffer instanceof SharedArrayBuffer) {\n throw new Error(\n 'SharedArrayBuffer is not supported. ' +\n 'Use regular ArrayBuffer or Uint8Array instead.'\n );\n }\n\n if (!(buffer instanceof ArrayBuffer)) {\n throw new TypeError('image.data.buffer must be an ArrayBuffer');\n }\n}\n\nexport function validateImageInput(\n image: unknown\n): asserts image is ImageInput {\n if (!image || typeof image !== 'object') {\n throw new TypeError('image must be an object');\n }\n\n const imageObj = image as Record<string, unknown>;\n\n if (!('data' in imageObj)) {\n throw new TypeError('image.data is required');\n }\n\n const { data } = imageObj;\n if (!(data instanceof Uint8Array || data instanceof Uint8ClampedArray)) {\n throw new TypeError('image.data must be Uint8Array or Uint8ClampedArray');\n }\n\n if (!('width' in imageObj) || !('height' in imageObj)) {\n throw new TypeError('image.width and image.height are required');\n }\n\n const { width, height } = imageObj;\n\n if (typeof width !== 'number' || !Number.isInteger(width) || width <= 0) {\n throw new RangeError(\n `image.width must be a positive integer, got ${width}`\n );\n }\n\n if (typeof height !== 'number' || !Number.isInteger(height) || height <= 0) {\n throw new RangeError(\n `image.height must be a positive integer, got ${height}`\n );\n }\n\n const expectedSize = width * height * 4;\n if (data.length < expectedSize) {\n throw new RangeError(\n `image.data too small: ${data.length} bytes, expected at least ${expectedSize} bytes for ${width}x${height} RGBA image`\n );\n }\n}\n\nexport function validateResizeOptions(options: unknown): asserts options is {\n width?: number;\n height?: number;\n method?: 'triangular' | 'catrom' | 'mitchell' | 'lanczos3';\n premultiply?: boolean;\n linearRGB?: boolean;\n} {\n if (typeof options !== 'object' || options === null) {\n throw new TypeError('options must be an object');\n }\n\n const opts = options as Record<string, unknown>;\n\n if (opts.width !== undefined) {\n if (\n typeof opts.width !== 'number' ||\n !Number.isInteger(opts.width) ||\n opts.width <= 0\n ) {\n throw new RangeError(\n `options.width must be a positive integer, got ${opts.width}`\n );\n }\n }\n\n if (opts.height !== undefined) {\n if (\n typeof opts.height !== 'number' ||\n !Number.isInteger(opts.height) ||\n opts.height <= 0\n ) {\n throw new RangeError(\n `options.height must be a positive integer, got ${opts.height}`\n );\n }\n }\n\n if (opts.method !== undefined) {\n const validMethods = ['triangular', 'catrom', 'mitchell', 'lanczos3'];\n if (!validMethods.includes(opts.method as string)) {\n throw new TypeError(\n `options.method must be one of: ${validMethods.join(', ')}, got ${opts.method}`\n );\n }\n }\n\n if (opts.premultiply !== undefined && typeof opts.premultiply !== 'boolean') {\n throw new TypeError(\n `options.premultiply must be boolean, got ${typeof opts.premultiply}`\n );\n }\n\n if (opts.linearRGB !== undefined && typeof opts.linearRGB !== 'boolean') {\n throw new TypeError(\n `options.linearRGB must be boolean, got ${typeof opts.linearRGB}`\n );\n }\n}\n\nexport function validateWebpOptions(\n options: unknown\n): asserts options is Record<string, unknown> | undefined {\n if (options === undefined) {\n return;\n }\n\n if (typeof options !== 'object' || options === null) {\n throw new TypeError('options must be an object or undefined');\n }\n\n const opts = options as Record<string, unknown>;\n\n if ('quality' in opts && opts.quality !== undefined) {\n const quality = opts.quality;\n\n if (Number.isNaN(quality)) {\n throw new RangeError(\n 'quality must be a valid number in the range 0-100, got NaN'\n );\n }\n\n if (typeof quality !== 'number') {\n throw new TypeError('quality must be a number');\n }\n\n if (!Number.isInteger(quality)) {\n throw new RangeError(\n 'quality must be an integer in the range 0-100, got floating point'\n );\n }\n\n if (quality < 0 || quality > 100) {\n throw new RangeError(\n `quality must be in the range 0-100, got ${quality}`\n );\n }\n }\n}\n"
|
|
6
|
-
],
|
|
7
|
-
"mappings": "kjBAEO,SAAS,CAAmB,CACjC,EAC+B,CAC/B,GAAI,aAAkB,kBACpB,MAAU,MACR,oFAEF,EAGF,GAAI,EAAE,aAAkB,aACtB,MAAU,UAAU,0CAA0C,EAI3D,SAAS,CAAkB,CAChC,EAC6B,CAC7B,GAAI,CAAC,GAAS,OAAO,IAAU,SAC7B,MAAU,UAAU,yBAAyB,EAG/C,IAAM,EAAW,EAEjB,GAAI,EAAE,SAAU,GACd,MAAU,UAAU,wBAAwB,EAG9C,IAAQ,QAAS,EACjB,GAAI,EAAE,aAAgB,YAAc,aAAgB,mBAClD,MAAU,UAAU,oDAAoD,EAG1E,GAAI,EAAE,UAAW,IAAa,EAAE,WAAY,GAC1C,MAAU,UAAU,2CAA2C,EAGjE,IAAQ,QAAO,UAAW,EAE1B,GAAI,OAAO,IAAU,UAAY,CAAC,OAAO,UAAU,CAAK,GAAK,GAAS,EACpE,MAAU,WACR,+CAA+C,GACjD,EAGF,GAAI,OAAO,IAAW,UAAY,CAAC,OAAO,UAAU,CAAM,GAAK,GAAU,EACvE,MAAU,WACR,gDAAgD,GAClD,EAGF,IAAM,EAAe,EAAQ,EAAS,EACtC,GAAI,EAAK,OAAS,EAChB,MAAU,WACR,yBAAyB,EAAK,mCAAmC,eAA0B,KAAS,cACtG,EAIG,SAAS,CAAqB,CAAC,EAMpC,CACA,GAAI,OAAO,IAAY,UAAY,IAAY,KAC7C,MAAU,UAAU,2BAA2B,EAGjD,IAAM,EAAO,EAEb,GAAI,EAAK,QAAU,QACjB,GACE,OAAO,EAAK,QAAU,UACtB,CAAC,OAAO,UAAU,EAAK,KAAK,GAC5B,EAAK,OAAS,EAEd,MAAU,WACR,iDAAiD,EAAK,OACxD,EAIJ,GAAI,EAAK,SAAW,QAClB,GACE,OAAO,EAAK,SAAW,UACvB,CAAC,OAAO,UAAU,EAAK,MAAM,GAC7B,EAAK,QAAU,EAEf,MAAU,WACR,kDAAkD,EAAK,QACzD,EAIJ,GAAI,EAAK,SAAW,OAAW,CAC7B,IAAM,EAAe,CAAC,aAAc,SAAU,WAAY,UAAU,EACpE,GAAI,CAAC,EAAa,SAAS,EAAK,MAAgB,EAC9C,MAAU,UACR,kCAAkC,EAAa,KAAK,IAAI,UAAU,EAAK,QACzE,EAIJ,GAAI,EAAK,cAAgB,QAAa,OAAO,EAAK,cAAgB,UAChE,MAAU,UACR,4CAA4C,OAAO,EAAK,aAC1D,EAGF,GAAI,EAAK,YAAc,QAAa,OAAO,EAAK,YAAc,UAC5D,MAAU,UACR,0CAA0C,OAAO,EAAK,WACxD",
|
|
8
|
-
"debugId": "453C5EB72DA98CF064756E2164756E21",
|
|
9
|
-
"names": []
|
|
10
|
-
}
|
package/dist/chunk-pn10n1jn.js
DELETED
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
// @bun
|
|
2
|
-
var K=Object.create;var{getPrototypeOf:L,defineProperty:J,getOwnPropertyNames:N}=Object;var P=Object.prototype.hasOwnProperty;var Q=(E,D,F)=>{F=E!=null?K(L(E)):{};let G=D||!E||!E.__esModule?J(F,"default",{value:E,enumerable:!0}):F;for(let H of N(E))if(!P.call(G,H))J(G,H,{get:()=>E[H],enumerable:!0});return G};var R=import.meta.require;function U(E){if(typeof SharedArrayBuffer<"u"&&E instanceof SharedArrayBuffer)throw Error("SharedArrayBuffer is not supported. Use regular ArrayBuffer or Uint8Array instead.");if(!(E instanceof ArrayBuffer))throw TypeError("image.data.buffer must be an ArrayBuffer")}function V(E){if(!E||typeof E!=="object")throw TypeError("image must be an object");let D=E;if(!("data"in D))throw TypeError("image.data is required");let{data:F}=D;if(!(F instanceof Uint8Array||F instanceof Uint8ClampedArray))throw TypeError("image.data must be Uint8Array or Uint8ClampedArray");if(!("width"in D)||!("height"in D))throw TypeError("image.width and image.height are required");let{width:G,height:H}=D;if(typeof G!=="number"||!Number.isInteger(G)||G<=0)throw RangeError(`image.width must be a positive integer, got ${G}`);if(typeof H!=="number"||!Number.isInteger(H)||H<=0)throw RangeError(`image.height must be a positive integer, got ${H}`);let I=G*H*4;if(F.length<I)throw RangeError(`image.data too small: ${F.length} bytes, expected at least ${I} bytes for ${G}x${H} RGBA image`)}function W(E){if(typeof E!=="object"||E===null)throw TypeError("options must be an object");let D=E;if(D.width!==void 0){if(typeof D.width!=="number"||!Number.isInteger(D.width)||D.width<=0)throw RangeError(`options.width must be a positive integer, got ${D.width}`)}if(D.height!==void 0){if(typeof D.height!=="number"||!Number.isInteger(D.height)||D.height<=0)throw RangeError(`options.height must be a positive integer, got ${D.height}`)}if(D.method!==void 0){let F=["triangular","catrom","mitchell","lanczos3"];if(!F.includes(D.method))throw TypeError(`options.method must be one of: ${F.join(", ")}, got ${D.method}`)}if(D.premultiply!==void 0&&typeof D.premultiply!=="boolean")throw TypeError(`options.premultiply must be boolean, got ${typeof D.premultiply}`);if(D.linearRGB!==void 0&&typeof D.linearRGB!=="boolean")throw TypeError(`options.linearRGB must be boolean, got ${typeof D.linearRGB}`)}
|
|
3
|
-
export{Q as b,R as c,U as d,V as e,W as f};
|
|
4
|
-
|
|
5
|
-
//# debugId=3948CBA7CA5C27B064756E2164756E21
|
package/dist/chunk-x4xgrxwp.js
DELETED
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
var K=Object.create;var{getPrototypeOf:L,defineProperty:J,getOwnPropertyNames:N}=Object;var P=Object.prototype.hasOwnProperty;var Q=(E,D,F)=>{F=E!=null?K(L(E)):{};let G=D||!E||!E.__esModule?J(F,"default",{value:E,enumerable:!0}):F;for(let H of N(E))if(!P.call(G,H))J(G,H,{get:()=>E[H],enumerable:!0});return G};var R=((E)=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(E,{get:(D,F)=>(typeof require<"u"?require:D)[F]}):E)(function(E){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+E+'" is not supported')});function U(E){if(typeof SharedArrayBuffer<"u"&&E instanceof SharedArrayBuffer)throw Error("SharedArrayBuffer is not supported. Use regular ArrayBuffer or Uint8Array instead.");if(!(E instanceof ArrayBuffer))throw TypeError("image.data.buffer must be an ArrayBuffer")}function V(E){if(!E||typeof E!=="object")throw TypeError("image must be an object");let D=E;if(!("data"in D))throw TypeError("image.data is required");let{data:F}=D;if(!(F instanceof Uint8Array||F instanceof Uint8ClampedArray))throw TypeError("image.data must be Uint8Array or Uint8ClampedArray");if(!("width"in D)||!("height"in D))throw TypeError("image.width and image.height are required");let{width:G,height:H}=D;if(typeof G!=="number"||!Number.isInteger(G)||G<=0)throw RangeError(`image.width must be a positive integer, got ${G}`);if(typeof H!=="number"||!Number.isInteger(H)||H<=0)throw RangeError(`image.height must be a positive integer, got ${H}`);let I=G*H*4;if(F.length<I)throw RangeError(`image.data too small: ${F.length} bytes, expected at least ${I} bytes for ${G}x${H} RGBA image`)}function W(E){if(typeof E!=="object"||E===null)throw TypeError("options must be an object");let D=E;if(D.width!==void 0){if(typeof D.width!=="number"||!Number.isInteger(D.width)||D.width<=0)throw RangeError(`options.width must be a positive integer, got ${D.width}`)}if(D.height!==void 0){if(typeof D.height!=="number"||!Number.isInteger(D.height)||D.height<=0)throw RangeError(`options.height must be a positive integer, got ${D.height}`)}if(D.method!==void 0){let F=["triangular","catrom","mitchell","lanczos3"];if(!F.includes(D.method))throw TypeError(`options.method must be one of: ${F.join(", ")}, got ${D.method}`)}if(D.premultiply!==void 0&&typeof D.premultiply!=="boolean")throw TypeError(`options.premultiply must be boolean, got ${typeof D.premultiply}`);if(D.linearRGB!==void 0&&typeof D.linearRGB!=="boolean")throw TypeError(`options.linearRGB must be boolean, got ${typeof D.linearRGB}`)}
|
|
2
|
-
export{Q as b,R as c,U as d,V as e,W as f};
|
|
3
|
-
|
|
4
|
-
//# debugId=C4416751B3C628B764756E2164756E21
|
package/dist/chunk-z14a3d02.js
DELETED
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import{createRequire as g}from"node:module";var s=Object.create;var{getPrototypeOf:u,defineProperty:a,getOwnPropertyNames:f}=Object;var h=Object.prototype.hasOwnProperty;var d=(t,e,r)=>{r=t!=null?s(u(t)):{};let n=e||!t||!t.__esModule?a(r,"default",{value:t,enumerable:!0}):r;for(let i of f(t))if(!h.call(n,i))a(n,i,{get:()=>t[i],enumerable:!0});return n};var p=g(import.meta.url);function l(t){if(t instanceof SharedArrayBuffer)throw Error("SharedArrayBuffer is not supported. Use regular ArrayBuffer or Uint8Array instead.");if(!(t instanceof ArrayBuffer))throw TypeError("image.data.buffer must be an ArrayBuffer")}function y(t){if(!t||typeof t!=="object")throw TypeError("image must be an object");let e=t;if(!("data"in e))throw TypeError("image.data is required");let{data:r}=e;if(!(r instanceof Uint8Array||r instanceof Uint8ClampedArray))throw TypeError("image.data must be Uint8Array or Uint8ClampedArray");if(!("width"in e)||!("height"in e))throw TypeError("image.width and image.height are required");let{width:n,height:i}=e;if(typeof n!=="number"||!Number.isInteger(n)||n<=0)throw RangeError(`image.width must be a positive integer, got ${n}`);if(typeof i!=="number"||!Number.isInteger(i)||i<=0)throw RangeError(`image.height must be a positive integer, got ${i}`);let o=n*i*4;if(r.length<o)throw RangeError(`image.data too small: ${r.length} bytes, expected at least ${o} bytes for ${n}x${i} RGBA image`)}function b(t){if(typeof t!=="object"||t===null)throw TypeError("options must be an object");let e=t;if(e.width!==void 0){if(typeof e.width!=="number"||!Number.isInteger(e.width)||e.width<=0)throw RangeError(`options.width must be a positive integer, got ${e.width}`)}if(e.height!==void 0){if(typeof e.height!=="number"||!Number.isInteger(e.height)||e.height<=0)throw RangeError(`options.height must be a positive integer, got ${e.height}`)}if(e.method!==void 0){let r=["triangular","catrom","mitchell","lanczos3"];if(!r.includes(e.method))throw TypeError(`options.method must be one of: ${r.join(", ")}, got ${e.method}`)}if(e.premultiply!==void 0&&typeof e.premultiply!=="boolean")throw TypeError(`options.premultiply must be boolean, got ${typeof e.premultiply}`);if(e.linearRGB!==void 0&&typeof e.linearRGB!=="boolean")throw TypeError(`options.linearRGB must be boolean, got ${typeof e.linearRGB}`)}
|
|
2
|
-
export{d as b,p as c,l as d,y as e,b as f};
|
|
3
|
-
|
|
4
|
-
//# debugId=7FE26A13CEE3336C64756E2164756E21
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../runtime/src/validators.ts"],
|
|
4
|
-
"sourcesContent": [
|
|
5
|
-
"import type { ImageInput } from './types.js';\n\nexport function validateArrayBuffer(\n buffer: unknown\n): asserts buffer is ArrayBuffer {\n if (buffer instanceof SharedArrayBuffer) {\n throw new Error(\n 'SharedArrayBuffer is not supported. ' +\n 'Use regular ArrayBuffer or Uint8Array instead.'\n );\n }\n\n if (!(buffer instanceof ArrayBuffer)) {\n throw new TypeError('image.data.buffer must be an ArrayBuffer');\n }\n}\n\nexport function validateImageInput(\n image: unknown\n): asserts image is ImageInput {\n if (!image || typeof image !== 'object') {\n throw new TypeError('image must be an object');\n }\n\n const imageObj = image as Record<string, unknown>;\n\n if (!('data' in imageObj)) {\n throw new TypeError('image.data is required');\n }\n\n const { data } = imageObj;\n if (!(data instanceof Uint8Array || data instanceof Uint8ClampedArray)) {\n throw new TypeError('image.data must be Uint8Array or Uint8ClampedArray');\n }\n\n if (!('width' in imageObj) || !('height' in imageObj)) {\n throw new TypeError('image.width and image.height are required');\n }\n\n const { width, height } = imageObj;\n\n if (typeof width !== 'number' || !Number.isInteger(width) || width <= 0) {\n throw new RangeError(\n `image.width must be a positive integer, got ${width}`\n );\n }\n\n if (typeof height !== 'number' || !Number.isInteger(height) || height <= 0) {\n throw new RangeError(\n `image.height must be a positive integer, got ${height}`\n );\n }\n\n const expectedSize = width * height * 4;\n if (data.length < expectedSize) {\n throw new RangeError(\n `image.data too small: ${data.length} bytes, expected at least ${expectedSize} bytes for ${width}x${height} RGBA image`\n );\n }\n}\n\nexport function validateResizeOptions(options: unknown): asserts options is {\n width?: number;\n height?: number;\n method?: 'triangular' | 'catrom' | 'mitchell' | 'lanczos3';\n premultiply?: boolean;\n linearRGB?: boolean;\n} {\n if (typeof options !== 'object' || options === null) {\n throw new TypeError('options must be an object');\n }\n\n const opts = options as Record<string, unknown>;\n\n if (opts.width !== undefined) {\n if (\n typeof opts.width !== 'number' ||\n !Number.isInteger(opts.width) ||\n opts.width <= 0\n ) {\n throw new RangeError(\n `options.width must be a positive integer, got ${opts.width}`\n );\n }\n }\n\n if (opts.height !== undefined) {\n if (\n typeof opts.height !== 'number' ||\n !Number.isInteger(opts.height) ||\n opts.height <= 0\n ) {\n throw new RangeError(\n `options.height must be a positive integer, got ${opts.height}`\n );\n }\n }\n\n if (opts.method !== undefined) {\n const validMethods = ['triangular', 'catrom', 'mitchell', 'lanczos3'];\n if (!validMethods.includes(opts.method as string)) {\n throw new TypeError(\n `options.method must be one of: ${validMethods.join(', ')}, got ${opts.method}`\n );\n }\n }\n\n if (opts.premultiply !== undefined && typeof opts.premultiply !== 'boolean') {\n throw new TypeError(\n `options.premultiply must be boolean, got ${typeof opts.premultiply}`\n );\n }\n\n if (opts.linearRGB !== undefined && typeof opts.linearRGB !== 'boolean') {\n throw new TypeError(\n `options.linearRGB must be boolean, got ${typeof opts.linearRGB}`\n );\n }\n}\n\nexport function validateWebpOptions(\n options: unknown\n): asserts options is Record<string, unknown> | undefined {\n if (options === undefined) {\n return;\n }\n\n if (typeof options !== 'object' || options === null) {\n throw new TypeError('options must be an object or undefined');\n }\n\n const opts = options as Record<string, unknown>;\n\n if ('quality' in opts && opts.quality !== undefined) {\n const quality = opts.quality;\n\n if (Number.isNaN(quality)) {\n throw new RangeError(\n 'quality must be a valid number in the range 0-100, got NaN'\n );\n }\n\n if (typeof quality !== 'number') {\n throw new TypeError('quality must be a number');\n }\n\n if (!Number.isInteger(quality)) {\n throw new RangeError(\n 'quality must be an integer in the range 0-100, got floating point'\n );\n }\n\n if (quality < 0 || quality > 100) {\n throw new RangeError(\n `quality must be in the range 0-100, got ${quality}`\n );\n }\n }\n}\n"
|
|
6
|
-
],
|
|
7
|
-
"mappings": "4XAEO,SAAS,CAAmB,CACjC,EAC+B,CAC/B,GAAI,aAAkB,kBACpB,MAAU,MACR,oFAEF,EAGF,GAAI,EAAE,aAAkB,aACtB,MAAU,UAAU,0CAA0C,EAI3D,SAAS,CAAkB,CAChC,EAC6B,CAC7B,GAAI,CAAC,GAAS,OAAO,IAAU,SAC7B,MAAU,UAAU,yBAAyB,EAG/C,IAAM,EAAW,EAEjB,GAAI,EAAE,SAAU,GACd,MAAU,UAAU,wBAAwB,EAG9C,IAAQ,QAAS,EACjB,GAAI,EAAE,aAAgB,YAAc,aAAgB,mBAClD,MAAU,UAAU,oDAAoD,EAG1E,GAAI,EAAE,UAAW,IAAa,EAAE,WAAY,GAC1C,MAAU,UAAU,2CAA2C,EAGjE,IAAQ,QAAO,UAAW,EAE1B,GAAI,OAAO,IAAU,UAAY,CAAC,OAAO,UAAU,CAAK,GAAK,GAAS,EACpE,MAAU,WACR,+CAA+C,GACjD,EAGF,GAAI,OAAO,IAAW,UAAY,CAAC,OAAO,UAAU,CAAM,GAAK,GAAU,EACvE,MAAU,WACR,gDAAgD,GAClD,EAGF,IAAM,EAAe,EAAQ,EAAS,EACtC,GAAI,EAAK,OAAS,EAChB,MAAU,WACR,yBAAyB,EAAK,mCAAmC,eAA0B,KAAS,cACtG,EAIG,SAAS,CAAqB,CAAC,EAMpC,CACA,GAAI,OAAO,IAAY,UAAY,IAAY,KAC7C,MAAU,UAAU,2BAA2B,EAGjD,IAAM,EAAO,EAEb,GAAI,EAAK,QAAU,QACjB,GACE,OAAO,EAAK,QAAU,UACtB,CAAC,OAAO,UAAU,EAAK,KAAK,GAC5B,EAAK,OAAS,EAEd,MAAU,WACR,iDAAiD,EAAK,OACxD,EAIJ,GAAI,EAAK,SAAW,QAClB,GACE,OAAO,EAAK,SAAW,UACvB,CAAC,OAAO,UAAU,EAAK,MAAM,GAC7B,EAAK,QAAU,EAEf,MAAU,WACR,kDAAkD,EAAK,QACzD,EAIJ,GAAI,EAAK,SAAW,OAAW,CAC7B,IAAM,EAAe,CAAC,aAAc,SAAU,WAAY,UAAU,EACpE,GAAI,CAAC,EAAa,SAAS,EAAK,MAAgB,EAC9C,MAAU,UACR,kCAAkC,EAAa,KAAK,IAAI,UAAU,EAAK,QACzE,EAIJ,GAAI,EAAK,cAAgB,QAAa,OAAO,EAAK,cAAgB,UAChE,MAAU,UACR,4CAA4C,OAAO,EAAK,aAC1D,EAGF,GAAI,EAAK,YAAc,QAAa,OAAO,EAAK,YAAc,UAC5D,MAAU,UACR,0CAA0C,OAAO,EAAK,WACxD",
|
|
8
|
-
"debugId": "7FE26A13CEE3336C64756E2164756E21",
|
|
9
|
-
"names": []
|
|
10
|
-
}
|