@squoosh-kit/visdif 0.2.8 → 0.2.9
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.d.ts +2 -2
- package/dist/bridge.d.ts.map +1 -1
- package/dist/index.browser.mjs +25 -5
- package/dist/index.browser.mjs.map +7 -6
- package/dist/index.bun.js +25 -5
- package/dist/index.bun.js.map +7 -6
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.node.cjs +25 -5
- package/dist/index.node.cjs.map +7 -6
- package/dist/index.node.mjs +25 -5
- package/dist/index.node.mjs.map +7 -6
- package/dist/visdif.worker.browser.mjs +20 -1
- package/dist/visdif.worker.browser.mjs.map +5 -4
- package/dist/visdif.worker.bun.js +20 -1
- package/dist/visdif.worker.bun.js.map +5 -4
- package/dist/visdif.worker.node.cjs +20 -1
- package/dist/visdif.worker.node.cjs.map +5 -4
- package/dist/visdif.worker.node.mjs +20 -1
- package/dist/visdif.worker.node.mjs.map +5 -4
- package/package.json +2 -2
package/dist/bridge.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Bridge implementation for the visdif package, handling worker and client modes.
|
|
3
3
|
*/
|
|
4
|
-
import { type ImageInput } from '@squoosh-kit/runtime';
|
|
4
|
+
import { type ImageInput, type BridgeMode } from '@squoosh-kit/runtime';
|
|
5
5
|
export type BridgeOptions = {
|
|
6
6
|
/**
|
|
7
7
|
* Public URL prefix for worker and WASM files.
|
|
@@ -13,6 +13,6 @@ interface VisDifBridge {
|
|
|
13
13
|
compare(image1: ImageInput, image2: ImageInput, signal?: AbortSignal): Promise<number>;
|
|
14
14
|
terminate(): Promise<void>;
|
|
15
15
|
}
|
|
16
|
-
export declare function createBridge(mode
|
|
16
|
+
export declare function createBridge(mode?: BridgeMode, options?: BridgeOptions): VisDifBridge;
|
|
17
17
|
export {};
|
|
18
18
|
//# sourceMappingURL=bridge.d.ts.map
|
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,MAAM,MAAM,aAAa,GAAG;IAC1B;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,UAAU,YAAY;IACpB,OAAO,CACL,MAAM,EAAE,UAAU,EAClB,MAAM,EAAE,UAAU,EAClB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,MAAM,CAAC,CAAC;IACnB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B;AA6DD,wBAAgB,YAAY,CAC1B,IAAI,
|
|
1
|
+
{"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../src/bridge.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAGL,KAAK,UAAU,EAEf,KAAK,UAAU,EAChB,MAAM,sBAAsB,CAAC;AAE9B,MAAM,MAAM,aAAa,GAAG;IAC1B;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,UAAU,YAAY;IACpB,OAAO,CACL,MAAM,EAAE,UAAU,EAClB,MAAM,EAAE,UAAU,EAClB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,MAAM,CAAC,CAAC;IACnB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B;AA6DD,wBAAgB,YAAY,CAC1B,IAAI,GAAE,UAAmB,EACzB,OAAO,CAAC,EAAE,aAAa,GACtB,YAAY,CAMd"}
|
package/dist/index.browser.mjs
CHANGED
|
@@ -15,10 +15,28 @@ var __export = (target, all) => {
|
|
|
15
15
|
var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
|
|
16
16
|
|
|
17
17
|
// ../runtime/src/env.ts
|
|
18
|
+
function isWorker() {
|
|
19
|
+
return typeof self !== "undefined" && typeof globalThis.DedicatedWorkerGlobalScope !== "undefined";
|
|
20
|
+
}
|
|
21
|
+
function isBrowser() {
|
|
22
|
+
return typeof window !== "undefined" && typeof document !== "undefined";
|
|
23
|
+
}
|
|
18
24
|
function isBun() {
|
|
19
25
|
return typeof Bun !== "undefined";
|
|
20
26
|
}
|
|
21
27
|
|
|
28
|
+
// ../runtime/src/bridge-mode.ts
|
|
29
|
+
function resolveBridgeMode(mode = "auto") {
|
|
30
|
+
if (mode === "worker" || mode === "client") {
|
|
31
|
+
return mode;
|
|
32
|
+
}
|
|
33
|
+
if (isBrowser() && !isWorker()) {
|
|
34
|
+
return "worker";
|
|
35
|
+
}
|
|
36
|
+
return "client";
|
|
37
|
+
}
|
|
38
|
+
var init_bridge_mode = () => {};
|
|
39
|
+
|
|
22
40
|
// ../runtime/src/worker-call.ts
|
|
23
41
|
async function callWorker(worker, type, payload, signal, transfer) {
|
|
24
42
|
return new Promise((resolve, reject) => {
|
|
@@ -312,6 +330,7 @@ var init_simd_detector = () => {};
|
|
|
312
330
|
|
|
313
331
|
// ../runtime/src/index.ts
|
|
314
332
|
var init_src = __esm(() => {
|
|
333
|
+
init_bridge_mode();
|
|
315
334
|
init_worker_helper();
|
|
316
335
|
init_simd_detector();
|
|
317
336
|
});
|
|
@@ -474,8 +493,9 @@ class VisDifWorkerBridge {
|
|
|
474
493
|
}
|
|
475
494
|
}
|
|
476
495
|
}
|
|
477
|
-
function createBridge(mode, options) {
|
|
478
|
-
|
|
496
|
+
function createBridge(mode = "auto", options) {
|
|
497
|
+
const resolvedMode = resolveBridgeMode(mode);
|
|
498
|
+
if (resolvedMode === "worker") {
|
|
479
499
|
return new VisDifWorkerBridge(options);
|
|
480
500
|
}
|
|
481
501
|
return new VisDifClientBridge;
|
|
@@ -485,11 +505,11 @@ function createBridge(mode, options) {
|
|
|
485
505
|
var globalBridge = null;
|
|
486
506
|
async function compare(image1, image2, signal) {
|
|
487
507
|
if (!globalBridge) {
|
|
488
|
-
globalBridge = createBridge("
|
|
508
|
+
globalBridge = createBridge("auto");
|
|
489
509
|
}
|
|
490
510
|
return globalBridge.compare(image1, image2, signal);
|
|
491
511
|
}
|
|
492
|
-
function createVisDiff(mode = "
|
|
512
|
+
function createVisDiff(mode = "auto", options) {
|
|
493
513
|
const bridge = createBridge(mode, options);
|
|
494
514
|
return Object.assign((image1, image2, signal) => {
|
|
495
515
|
return bridge.compare(image1, image2, signal);
|
|
@@ -504,4 +524,4 @@ export {
|
|
|
504
524
|
compare
|
|
505
525
|
};
|
|
506
526
|
|
|
507
|
-
//# debugId=
|
|
527
|
+
//# debugId=C6C9D95D0E5F86EB64756E2164756E21
|
|
@@ -1,17 +1,18 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../runtime/src/env.ts", "../../runtime/src/worker-call.ts", "../../runtime/src/worker-helper.ts", "../../runtime/src/wasm-loader.ts", "../../runtime/src/index.ts", "../src/visdif.worker.ts", "../src/bridge.ts", "../src/index.ts"],
|
|
3
|
+
"sources": ["../../runtime/src/env.ts", "../../runtime/src/bridge-mode.ts", "../../runtime/src/worker-call.ts", "../../runtime/src/worker-helper.ts", "../../runtime/src/wasm-loader.ts", "../../runtime/src/index.ts", "../src/visdif.worker.ts", "../src/bridge.ts", "../src/index.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
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
|
+
"import { isBrowser, isWorker } from './env';\n\nexport type BridgeMode = 'worker' | 'client' | 'auto';\n\nexport type ResolvedBridgeMode = 'worker' | 'client';\n\nexport function resolveBridgeMode(\n mode: BridgeMode = 'auto'\n): ResolvedBridgeMode {\n if (mode === 'worker' || mode === 'client') {\n return mode;\n }\n\n if (isBrowser() && !isWorker()) {\n return 'worker';\n }\n\n return 'client';\n}\n",
|
|
6
7
|
"/**\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
8
|
"/**\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\nexport const DEFAULT_BROWSER_ASSET_PATH = '/squoosh-kit';\n\ntype WorkerPackageConfig = {\n package: string;\n specifier: string;\n};\n\nfunction scriptUrlToPath(scriptUrl: string | URL): string {\n const href = typeof scriptUrl === 'string' ? scriptUrl : scriptUrl.href;\n if (href.startsWith('file://')) {\n return decodeURIComponent(\n href.startsWith('file:///') ? href.slice(7) : href.slice(5)\n );\n }\n return href;\n}\n\nfunction workerScriptExists(scriptUrl: string | URL): boolean {\n if (typeof window !== 'undefined') {\n return false;\n }\n\n const path = scriptUrlToPath(scriptUrl);\n\n if (typeof Bun !== 'undefined') {\n return (\n Bun.spawnSync(['test', '-f', path], {\n stdout: 'ignore',\n stderr: 'ignore',\n }).exitCode === 0\n );\n }\n\n try {\n const existsSync = Function('return require(\"node:fs\").existsSync')() as (\n filePath: string\n ) => boolean;\n return existsSync(path);\n } catch {\n return false;\n }\n}\n\nexport function resolveServerWorkerScript(\n workerConfig: WorkerPackageConfig,\n normalizedName: string\n): string | URL {\n const platformExt = isBun() ? 'bun.js' : 'node.mjs';\n const baseName = normalizedName.replace('.js', '');\n const pkgName = workerConfig.package.split('/')[1];\n\n if (typeof import.meta.resolve === 'function') {\n try {\n const resolved = import.meta.resolve(\n `${workerConfig.package}/${workerConfig.specifier}`\n );\n if (workerScriptExists(resolved)) {\n return resolved;\n }\n } catch {\n // Continue to monorepo fallbacks\n }\n }\n\n const candidates = [\n new URL(\n `../../${pkgName}/dist/${baseName}.${platformExt}`,\n import.meta.url\n ),\n new URL(`../../${pkgName}/src/${baseName}.ts`, import.meta.url),\n ];\n\n for (const candidate of candidates) {\n if (workerScriptExists(candidate)) {\n return candidate;\n }\n }\n\n throw new Error(\n `Failed to resolve worker script for ${normalizedName}. ` +\n `Tried import.meta.resolve, dist output, and TypeScript source. ` +\n `Ensure ${workerConfig.package} is installed.`\n );\n}\n\nexport type CreateWorkerOptions = {\n /**\n * Public URL prefix for worker and WASM files.\n * Defaults to `/squoosh-kit` in the browser (the path used by\n * `@squoosh-kit/vite-plugin`). Pass an empty string to resolve workers\n * relative to the installed package instead.\n */\n assetPath?: string;\n};\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 browsers, workers load from `/squoosh-kit/{package}/` by default.\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(\n workerFilename: string,\n options?: CreateWorkerOptions\n): 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 'avif.worker.js': {\n package: '@squoosh-kit/avif',\n specifier: 'avif.worker.js',\n },\n 'mozjpeg.worker.js': {\n package: '@squoosh-kit/mozjpeg',\n specifier: 'mozjpeg.worker.js',\n },\n 'jxl.worker.js': {\n package: '@squoosh-kit/jxl',\n specifier: 'jxl.worker.js',\n },\n 'oxipng.worker.js': {\n package: '@squoosh-kit/oxipng',\n specifier: 'oxipng.worker.js',\n },\n 'png.worker.js': {\n package: '@squoosh-kit/png',\n specifier: 'png.worker.js',\n },\n 'imagequant.worker.js': {\n package: '@squoosh-kit/imagequant',\n specifier: 'imagequant.worker.js',\n },\n 'qoi.worker.js': {\n package: '@squoosh-kit/qoi',\n specifier: 'qoi.worker.js',\n },\n 'wp2.worker.js': {\n package: '@squoosh-kit/wp2',\n specifier: 'wp2.worker.js',\n },\n 'hqx.worker.js': {\n package: '@squoosh-kit/hqx',\n specifier: 'hqx.worker.js',\n },\n 'rotate.worker.js': {\n package: '@squoosh-kit/rotate',\n specifier: 'rotate.worker.js',\n },\n 'visdif.worker.js': {\n package: '@squoosh-kit/visdif',\n specifier: 'visdif.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 browsers, workers load from /squoosh-kit by default\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 console.log(\n `[worker-helper] In browser environment. Trying to create worker:`\n );\n console.log(`[worker-helper] - Package Name: ${packageName}`);\n console.log(`[worker-helper] - Worker File: ${workerFile}`);\n\n const assetPath =\n options?.assetPath === undefined\n ? DEFAULT_BROWSER_ASSET_PATH\n : options.assetPath;\n\n if (assetPath) {\n let normalizedAssetPath = assetPath;\n if (!normalizedAssetPath.startsWith('/')) {\n normalizedAssetPath = '/' + normalizedAssetPath;\n }\n if (normalizedAssetPath.endsWith('/')) {\n normalizedAssetPath = normalizedAssetPath.slice(0, -1);\n }\n\n // Construct absolute URL: {origin}{assetPath}/{package}/{workerFile}\n const workerPath = `${normalizedAssetPath}/${packageName}/${workerFile}`;\n const workerUrl = new URL(workerPath, window.location.origin).href;\n\n console.log(\n `[worker-helper] Using assetPath. Full Worker URL: ${workerUrl}`\n );\n try {\n const worker = new Worker(workerUrl, { type: 'module' });\n console.log(\n `[worker-helper] Successfully created worker with assetPath: ${workerUrl}`\n );\n return worker;\n } catch (e) {\n console.error(\n `[worker-helper] Failed to load worker from assetPath URL: ${workerUrl}`,\n e\n );\n throw new Error(\n `Worker failed to load from ${workerUrl}: ${e instanceof Error ? e.message : String(e)}`,\n { cause: e }\n );\n }\n }\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 console.log('relPath:', relPath);\n console.log('import.meta.url:', import.meta.url);\n try {\n const workerUrl = new URL(relPath, import.meta.url);\n console.log(\n `[worker-helper] Trying path strategy. Full Worker URL: ${workerUrl.href}`\n );\n const worker = new Worker(workerUrl, {\n type: 'module',\n });\n console.log(\n `[worker-helper] Successfully created worker with URL: ${workerUrl.href}`\n );\n return worker;\n } catch (error) {\n console.warn(\n `[worker-helper] Path strategy failed for ${relPath}:`,\n error\n );\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 console.error('[worker-helper] All path strategies failed.', lastError);\n throw lastError;\n }\n throw new Error(\n `Could not resolve worker ${normalizedName} using any available path strategy`\n );\n }\n\n const workerScript = resolveServerWorkerScript(\n workerConfig,\n normalizedName\n );\n return new Worker(workerScript, { 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 { cause: error }\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 options?: CreateWorkerOptions,\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, options);\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 worker.removeEventListener('error', handleError);\n worker.removeEventListener('messageerror', handleMessageError);\n resolve(worker);\n }\n };\n\n const handleError = (event: ErrorEvent) => {\n clearTimeout(timeout);\n worker.removeEventListener('message', handleMessage);\n worker.removeEventListener('error', handleError);\n worker.removeEventListener('messageerror', handleMessageError);\n reject(\n new Error(\n `Worker failed to start: ${event?.message || 'Unknown error'}. Worker file: ${workerFilename}`\n )\n );\n };\n\n const handleMessageError = () => {\n clearTimeout(timeout);\n worker.removeEventListener('message', handleMessage);\n worker.removeEventListener('error', handleError);\n worker.removeEventListener('messageerror', handleMessageError);\n reject(\n new Error(\n `Worker message error during initialization. Worker file: ${workerFilename}`\n )\n );\n };\n\n worker.addEventListener('message', handleMessage);\n worker.addEventListener('error', handleError);\n worker.addEventListener('messageerror', handleMessageError);\n worker.postMessage({ type: 'worker:ping' });\n });\n}\n",
|
|
8
9
|
"/**\n * Load WASM binary from various sources with fallback strategies\n *\n * Supports:\n * - Node.js (fs/promises)\n * - Browsers (fetch)\n * - Workers (fetch)\n */\nexport async function loadWasmBinary(\n relativePath: string,\n baseUrlOverride?: string | URL\n): Promise<ArrayBuffer> {\n // Get the base URL depending on the environment (worker or main thread)\n // If a base URL is provided, use it; otherwise use import.meta.url from this module\n // In a worker, import.meta.url is the worker's own URL.\n // In the main thread, it's the URL of the current module.\n const baseUrl = baseUrlOverride\n ? typeof baseUrlOverride === 'string'\n ? new URL('.', baseUrlOverride)\n : new URL('.', baseUrlOverride.href)\n : new URL('.', import.meta.url);\n const fullUrl = new URL(relativePath, baseUrl);\n\n console.log(`[WasmLoader] Loading WASM from relative path: ${relativePath}`);\n console.log(`[WasmLoader] Base URL (import.meta.url): ${baseUrl.href}`);\n console.log(`[WasmLoader] Constructed full URL: ${fullUrl.href}`);\n\n try {\n const response = await fetch(fullUrl.href);\n\n console.log(\n `[WasmLoader] Fetch response status for ${fullUrl.href}: ${response.status}`\n );\n\n if (!response.ok) {\n const responseText = await response.text();\n console.error(\n `[WasmLoader] Fetch response text (first 500 chars):`,\n responseText.substring(0, 500)\n );\n throw new Error(\n `Failed to fetch WASM module at ${fullUrl.href}: ${response.status} ${response.statusText}`\n );\n }\n\n const contentType = response.headers.get('content-type');\n console.log(`[WasmLoader] Response Content-Type: ${contentType}`);\n if (!contentType || !contentType.includes('application/wasm')) {\n console.warn(\n `[WasmLoader] Warning: WASM module at ${fullUrl.href} served with incorrect MIME type: \"${contentType}\". Should be \"application/wasm\".`\n );\n }\n\n return await response.arrayBuffer();\n } catch (error) {\n console.error(\n `[WasmLoader] CRITICAL: Fetching WASM binary from ${fullUrl.href} failed.`,\n error\n );\n throw error;\n }\n}\n\n/**\n * Load WASM JavaScript module with fallback strategies\n *\n * Strategy 1: Static relative import (works everywhere)\n * Strategy 2: import.meta.resolve (Node.js 22+)\n * Strategy 3: URL-based import (browsers/workers)\n */\nexport async function loadWasmModule(\n modulePath: string\n): Promise<WebAssembly.Module> {\n // Strategy 1: Try direct static import\n try {\n return await import(/* @vite-ignore */ modulePath);\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (e1) {\n // Continue to next strategy\n }\n\n // Strategy 2: Try import.meta.resolve (Node.js 22+)\n try {\n const resolvedPath = await import.meta.resolve(modulePath);\n\n return await import(/* @vite-ignore */ resolvedPath);\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (e2) {\n // Continue to next strategy\n }\n\n // Strategy 3: Try URL-based import\n try {\n const url = new URL(/* @vite-ignore */ modulePath, import.meta.url);\n\n return await import(/* @vite-ignore */ url.href);\n } catch (e3) {\n throw new Error(\n `Failed to load WASM module from \"${modulePath}\". ` +\n `Ensure WASM files are in the expected location and the module can be resolved.`,\n { cause: e3 }\n );\n }\n}\n",
|
|
9
|
-
"/**\n * @squoosh-kit/runtime\n *\n * Core runtime logic for squoosh-kit, including environment utilities\n * and worker communication helpers.\n */\n\nexport * from './env.js';\nexport * from './worker-call.js';\nexport * from './types.js';\nexport * from './worker-helper.js';\nexport * from './wasm-loader.js';\nexport * from './validators.js';\nexport * from './simd-detector.js';\nexport * from './image-data-polyfill.js';\n",
|
|
10
|
+
"/**\n * @squoosh-kit/runtime\n *\n * Core runtime logic for squoosh-kit, including environment utilities\n * and worker communication helpers.\n */\n\nexport * from './bridge-mode.js';\nexport * from './env.js';\nexport * from './worker-call.js';\nexport * from './types.js';\nexport * from './worker-helper.js';\nexport * from './wasm-loader.js';\nexport * from './validators.js';\nexport * from './simd-detector.js';\nexport * from './image-data-polyfill.js';\n",
|
|
10
11
|
"/**\n * VisDif Butteraugli comparison - Emscripten-based worker/client implementation\n */\n\nimport { loadWasmBinary } from '@squoosh-kit/runtime';\nimport type {\n WorkerRequest,\n WorkerResponse,\n ImageInput,\n} from '@squoosh-kit/runtime';\n\ntype VisDifModuleInstance = {\n VisDiff: new (\n data: string,\n w: number,\n h: number\n ) => { distance: (d: string) => number };\n};\n\nlet cachedModule: VisDifModuleInstance | null = null;\n\nasync function loadVisDifModule(): Promise<VisDifModuleInstance> {\n if (cachedModule) return cachedModule;\n\n // Apply Emscripten polyfills\n const globalSelf = typeof self !== 'undefined' ? self : globalThis;\n if (!globalSelf.location) {\n (globalSelf as { location?: { href: string } }).location = {\n href: import.meta.url,\n };\n }\n if (typeof self === 'undefined' && typeof globalThis !== 'undefined') {\n (globalThis as { self?: typeof globalThis }).self = globalThis;\n }\n\n const workerBaseUrl = new URL('.', import.meta.url);\n const isSource = import.meta.url.includes('/src/');\n const jsPaths = isSource\n ? ['../wasm/visdif/visdif.js', './wasm/visdif/visdif.js']\n : ['./wasm/visdif/visdif.js', '../wasm/visdif/visdif.js'];\n\n let moduleFactory:\n ((config: Record<string, unknown>) => Promise<unknown>) | null = null;\n let lastJsError: Error | null = null;\n for (const jsPath of jsPaths) {\n try {\n moduleFactory = (await import(/* @vite-ignore */ jsPath)).default;\n break;\n } catch (error) {\n lastJsError = error instanceof Error ? error : new Error(String(error));\n }\n }\n if (!moduleFactory) {\n throw lastJsError || new Error('Could not load VisDif JS module');\n }\n\n const wasmPaths = isSource\n ? ['../wasm/visdif/visdif.wasm', './wasm/visdif/visdif.wasm']\n : ['./wasm/visdif/visdif.wasm', '../wasm/visdif/visdif.wasm'];\n\n let wasmBinary: ArrayBuffer | null = null;\n let lastWasmError: Error | null = null;\n for (const wasmPath of wasmPaths) {\n try {\n wasmBinary = await loadWasmBinary(wasmPath, workerBaseUrl);\n break;\n } catch (error) {\n lastWasmError = error instanceof Error ? error : new Error(String(error));\n }\n }\n if (!wasmBinary) {\n throw lastWasmError || new Error('Could not load VisDif WASM');\n }\n\n // Re-apply polyfills right before factory call (Emscripten checks during init)\n const globalSelf2 = typeof self !== 'undefined' ? self : globalThis;\n if (!globalSelf2.location) {\n (globalSelf2 as { location?: { href: string } }).location = {\n href: import.meta.url,\n };\n }\n if (typeof self === 'undefined' && typeof globalThis !== 'undefined') {\n (globalThis as { self?: typeof globalThis }).self = globalThis;\n }\n\n cachedModule = (await moduleFactory({\n noInitialRun: true,\n wasmBinary,\n })) as VisDifModuleInstance;\n return cachedModule;\n}\n\nfunction imageToString(image: ImageInput): string {\n // Convert RGBA pixel data to a string (Emscripten std::string format)\n const { data } = image;\n const bytes = new Uint8Array(\n data.buffer as ArrayBuffer,\n data.byteOffset,\n data.byteLength\n );\n\n // Build string from char codes\n let result = '';\n for (let i = 0; i < bytes.length; i++) {\n result += String.fromCharCode(bytes[i]);\n }\n return result;\n}\n\nexport async function visdifCompareClient(\n image1: ImageInput,\n image2: ImageInput,\n signal?: AbortSignal\n): Promise<number> {\n if (signal?.aborted) {\n throw new DOMException('Aborted', 'AbortError');\n }\n\n if (image1.width !== image2.width || image1.height !== image2.height) {\n throw new Error('Images must have the same dimensions for comparison');\n }\n\n const module = await loadVisDifModule();\n\n if (signal?.aborted) {\n throw new DOMException('Aborted', 'AbortError');\n }\n\n const data1 = imageToString(image1);\n const data2 = imageToString(image2);\n\n const visDiff = new module.VisDiff(data1, image1.width, image1.height);\n return visDiff.distance(data2);\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 request = data as WorkerRequest<{\n image1: ImageInput;\n image2: ImageInput;\n }>;\n const response: WorkerResponse<number> = { id: request.id, ok: false };\n\n try {\n if (request.type === 'visdif:compare') {\n const result = await visdifCompareClient(\n request.payload.image1,\n request.payload.image2\n );\n response.ok = true;\n response.data = result;\n self.postMessage(response);\n } else {\n response.error = `Unknown message type: ${request.type}`;\n self.postMessage(response);\n }\n } catch (error) {\n response.error = error instanceof Error ? error.message : String(error);\n self.postMessage(response);\n }\n };\n}\n",
|
|
11
|
-
"/**\n * Bridge implementation for the visdif package, handling worker and client modes.\n */\n\nimport {\n callWorker,\n createReadyWorker,\n type ImageInput,\n} from '@squoosh-kit/runtime';\n\nexport type BridgeOptions = {\n /**\n * Public URL prefix for worker and WASM files.\n * Defaults to `/squoosh-kit` in the browser.\n */\n assetPath?: string;\n};\n\ninterface VisDifBridge {\n compare(\n image1: ImageInput,\n image2: ImageInput,\n signal?: AbortSignal\n ): Promise<number>;\n terminate(): Promise<void>;\n}\n\nclass VisDifClientBridge implements VisDifBridge {\n async compare(\n image1: ImageInput,\n image2: ImageInput,\n signal?: AbortSignal\n ): Promise<number> {\n const module = await import('./visdif.worker.js');\n const visdifCompareClient = module.visdifCompareClient as (\n image1: ImageInput,\n image2: ImageInput,\n signal?: AbortSignal\n ) => Promise<number>;\n return visdifCompareClient(image1, image2, signal);\n }\n\n async terminate(): Promise<void> {\n // Client mode has nothing to terminate\n }\n}\n\nclass VisDifWorkerBridge implements VisDifBridge {\n private worker: Worker | null = null;\n private workerReady: Promise<Worker> | null = null;\n private options?: BridgeOptions;\n\n constructor(options?: BridgeOptions) {\n this.options = options;\n }\n\n private async getWorker(): Promise<Worker> {\n if (!this.workerReady) {\n this.workerReady = this.createWorker();\n }\n return this.workerReady;\n }\n\n private async createWorker(): Promise<Worker> {\n this.worker = await createReadyWorker('visdif.worker.js', this.options);\n return this.worker;\n }\n\n async compare(\n image1: ImageInput,\n image2: ImageInput,\n signal?: AbortSignal\n ): Promise<number> {\n const worker = await this.getWorker();\n return callWorker(worker, 'visdif:compare', { image1, image2 }, signal);\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(\n mode:
|
|
12
|
-
"/**\n * @squoosh-kit/visdif public API\n */\n\nimport type { ImageInput } from '@squoosh-kit/runtime';\nimport { createBridge, type BridgeOptions } from './bridge';\n\nexport type { ImageInput };\nexport type { VisDifModule } from './types';\n\n// Global bridge instance for reuse\nlet globalBridge: ReturnType<typeof createBridge> | null = null;\n\n/**\n * A reusable VisDif comparison function.\n * Can be terminated to clean up associated resources (especially workers).\n */\nexport type VisDifFactory = ((\n image1: ImageInput,\n image2: ImageInput,\n signal?: AbortSignal\n) => Promise<number>) & {\n /**\n * Terminates the VisDif instance and cleans up resources.\n * Important for worker mode to prevent memory leaks.\n *\n * @example\n * const visdif = createVisDiff('worker');\n * try {\n * const distance = await visdif(image1, image2);\n * } finally {\n * await visdif.terminate();\n * }\n */\n terminate(): Promise<void>;\n};\n\n/**\n * Computes the Butteraugli perceptual distance between two images.\n * Uses worker mode for UI responsiveness.\n *\n * @param image1 - The reference image.\n * @param image2 - The image to compare against the reference.\n * @param signal - (Optional) AbortSignal to cancel the operation.\n * @returns A Promise resolving to the Butteraugli distance (0 = identical).\n *\n * @example\n * const distance = await compare(referenceImage, comparedImage);\n * console.log(`Butteraugli distance: ${distance}`);\n */\nexport async function compare(\n image1: ImageInput,\n image2: ImageInput,\n signal?: AbortSignal\n): Promise<number> {\n if (!globalBridge) {\n globalBridge = createBridge('
|
|
12
|
+
"/**\n * Bridge implementation for the visdif package, handling worker and client modes.\n */\n\nimport {\n callWorker,\n createReadyWorker,\n type ImageInput,\n resolveBridgeMode,\n type BridgeMode,\n} from '@squoosh-kit/runtime';\n\nexport type BridgeOptions = {\n /**\n * Public URL prefix for worker and WASM files.\n * Defaults to `/squoosh-kit` in the browser.\n */\n assetPath?: string;\n};\n\ninterface VisDifBridge {\n compare(\n image1: ImageInput,\n image2: ImageInput,\n signal?: AbortSignal\n ): Promise<number>;\n terminate(): Promise<void>;\n}\n\nclass VisDifClientBridge implements VisDifBridge {\n async compare(\n image1: ImageInput,\n image2: ImageInput,\n signal?: AbortSignal\n ): Promise<number> {\n const module = await import('./visdif.worker.js');\n const visdifCompareClient = module.visdifCompareClient as (\n image1: ImageInput,\n image2: ImageInput,\n signal?: AbortSignal\n ) => Promise<number>;\n return visdifCompareClient(image1, image2, signal);\n }\n\n async terminate(): Promise<void> {\n // Client mode has nothing to terminate\n }\n}\n\nclass VisDifWorkerBridge implements VisDifBridge {\n private worker: Worker | null = null;\n private workerReady: Promise<Worker> | null = null;\n private options?: BridgeOptions;\n\n constructor(options?: BridgeOptions) {\n this.options = options;\n }\n\n private async getWorker(): Promise<Worker> {\n if (!this.workerReady) {\n this.workerReady = this.createWorker();\n }\n return this.workerReady;\n }\n\n private async createWorker(): Promise<Worker> {\n this.worker = await createReadyWorker('visdif.worker.js', this.options);\n return this.worker;\n }\n\n async compare(\n image1: ImageInput,\n image2: ImageInput,\n signal?: AbortSignal\n ): Promise<number> {\n const worker = await this.getWorker();\n return callWorker(worker, 'visdif:compare', { image1, image2 }, signal);\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(\n mode: BridgeMode = 'auto',\n options?: BridgeOptions\n): VisDifBridge {\n const resolvedMode = resolveBridgeMode(mode);\n if (resolvedMode === 'worker') {\n return new VisDifWorkerBridge(options);\n }\n return new VisDifClientBridge();\n}\n",
|
|
13
|
+
"/**\n * @squoosh-kit/visdif public API\n */\n\nimport type { BridgeMode, ImageInput } from '@squoosh-kit/runtime';\nimport { createBridge, type BridgeOptions } from './bridge';\n\nexport type { ImageInput };\nexport type { VisDifModule } from './types';\n\n// Global bridge instance for reuse\nlet globalBridge: ReturnType<typeof createBridge> | null = null;\n\n/**\n * A reusable VisDif comparison function.\n * Can be terminated to clean up associated resources (especially workers).\n */\nexport type VisDifFactory = ((\n image1: ImageInput,\n image2: ImageInput,\n signal?: AbortSignal\n) => Promise<number>) & {\n /**\n * Terminates the VisDif instance and cleans up resources.\n * Important for worker mode to prevent memory leaks.\n *\n * @example\n * const visdif = createVisDiff('worker');\n * try {\n * const distance = await visdif(image1, image2);\n * } finally {\n * await visdif.terminate();\n * }\n */\n terminate(): Promise<void>;\n};\n\n/**\n * Computes the Butteraugli perceptual distance between two images.\n * Uses worker mode for UI responsiveness.\n *\n * @param image1 - The reference image.\n * @param image2 - The image to compare against the reference.\n * @param signal - (Optional) AbortSignal to cancel the operation.\n * @returns A Promise resolving to the Butteraugli distance (0 = identical).\n *\n * @example\n * const distance = await compare(referenceImage, comparedImage);\n * console.log(`Butteraugli distance: ${distance}`);\n */\nexport async function compare(\n image1: ImageInput,\n image2: ImageInput,\n signal?: AbortSignal\n): Promise<number> {\n if (!globalBridge) {\n globalBridge = createBridge('auto');\n }\n return globalBridge.compare(image1, image2, signal);\n}\n\n/**\n * Creates a reusable VisDif comparison function for a specific execution mode.\n *\n * @param mode - The execution mode, either 'worker' or 'client'.\n * @param options - Optional bridge options.\n * @returns A function that computes Butteraugli distance between two images.\n *\n * @example\n * const visdiff = createVisDiff('client');\n * const distance = await visdiff(image1, image2);\n * console.log(`Butteraugli distance: ${distance}`);\n * await visdiff.terminate();\n */\nexport function createVisDiff(\n mode: BridgeMode = 'auto',\n options?: BridgeOptions\n): VisDifFactory {\n const bridge = createBridge(mode, options);\n\n return Object.assign(\n (image1: ImageInput, image2: ImageInput, signal?: AbortSignal) => {\n return bridge.compare(image1, image2, signal);\n },\n {\n terminate: async () => {\n await bridge.terminate();\n },\n }\n );\n}\n"
|
|
13
14
|
],
|
|
14
|
-
"mappings": "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",
|
|
15
|
-
"debugId": "
|
|
15
|
+
"mappings": "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",
|
|
16
|
+
"debugId": "C6C9D95D0E5F86EB64756E2164756E21",
|
|
16
17
|
"names": []
|
|
17
18
|
}
|
package/dist/index.bun.js
CHANGED
|
@@ -16,10 +16,28 @@ var __export = (target, all) => {
|
|
|
16
16
|
var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
|
|
17
17
|
|
|
18
18
|
// ../runtime/src/env.ts
|
|
19
|
+
function isWorker() {
|
|
20
|
+
return typeof self !== "undefined" && typeof globalThis.DedicatedWorkerGlobalScope !== "undefined";
|
|
21
|
+
}
|
|
22
|
+
function isBrowser() {
|
|
23
|
+
return typeof window !== "undefined" && typeof document !== "undefined";
|
|
24
|
+
}
|
|
19
25
|
function isBun() {
|
|
20
26
|
return typeof Bun !== "undefined";
|
|
21
27
|
}
|
|
22
28
|
|
|
29
|
+
// ../runtime/src/bridge-mode.ts
|
|
30
|
+
function resolveBridgeMode(mode = "auto") {
|
|
31
|
+
if (mode === "worker" || mode === "client") {
|
|
32
|
+
return mode;
|
|
33
|
+
}
|
|
34
|
+
if (isBrowser() && !isWorker()) {
|
|
35
|
+
return "worker";
|
|
36
|
+
}
|
|
37
|
+
return "client";
|
|
38
|
+
}
|
|
39
|
+
var init_bridge_mode = () => {};
|
|
40
|
+
|
|
23
41
|
// ../runtime/src/worker-call.ts
|
|
24
42
|
async function callWorker(worker, type, payload, signal, transfer) {
|
|
25
43
|
return new Promise((resolve, reject) => {
|
|
@@ -313,6 +331,7 @@ var init_simd_detector = () => {};
|
|
|
313
331
|
|
|
314
332
|
// ../runtime/src/index.ts
|
|
315
333
|
var init_src = __esm(() => {
|
|
334
|
+
init_bridge_mode();
|
|
316
335
|
init_worker_helper();
|
|
317
336
|
init_simd_detector();
|
|
318
337
|
});
|
|
@@ -475,8 +494,9 @@ class VisDifWorkerBridge {
|
|
|
475
494
|
}
|
|
476
495
|
}
|
|
477
496
|
}
|
|
478
|
-
function createBridge(mode, options) {
|
|
479
|
-
|
|
497
|
+
function createBridge(mode = "auto", options) {
|
|
498
|
+
const resolvedMode = resolveBridgeMode(mode);
|
|
499
|
+
if (resolvedMode === "worker") {
|
|
480
500
|
return new VisDifWorkerBridge(options);
|
|
481
501
|
}
|
|
482
502
|
return new VisDifClientBridge;
|
|
@@ -486,11 +506,11 @@ function createBridge(mode, options) {
|
|
|
486
506
|
var globalBridge = null;
|
|
487
507
|
async function compare(image1, image2, signal) {
|
|
488
508
|
if (!globalBridge) {
|
|
489
|
-
globalBridge = createBridge("
|
|
509
|
+
globalBridge = createBridge("auto");
|
|
490
510
|
}
|
|
491
511
|
return globalBridge.compare(image1, image2, signal);
|
|
492
512
|
}
|
|
493
|
-
function createVisDiff(mode = "
|
|
513
|
+
function createVisDiff(mode = "auto", options) {
|
|
494
514
|
const bridge = createBridge(mode, options);
|
|
495
515
|
return Object.assign((image1, image2, signal) => {
|
|
496
516
|
return bridge.compare(image1, image2, signal);
|
|
@@ -505,4 +525,4 @@ export {
|
|
|
505
525
|
compare
|
|
506
526
|
};
|
|
507
527
|
|
|
508
|
-
//# debugId=
|
|
528
|
+
//# debugId=67551A793F035A8D64756E2164756E21
|
package/dist/index.bun.js.map
CHANGED
|
@@ -1,17 +1,18 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../runtime/src/env.ts", "../../runtime/src/worker-call.ts", "../../runtime/src/worker-helper.ts", "../../runtime/src/wasm-loader.ts", "../../runtime/src/index.ts", "../src/visdif.worker.ts", "../src/bridge.ts", "../src/index.ts"],
|
|
3
|
+
"sources": ["../../runtime/src/env.ts", "../../runtime/src/bridge-mode.ts", "../../runtime/src/worker-call.ts", "../../runtime/src/worker-helper.ts", "../../runtime/src/wasm-loader.ts", "../../runtime/src/index.ts", "../src/visdif.worker.ts", "../src/bridge.ts", "../src/index.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
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
|
+
"import { isBrowser, isWorker } from './env';\n\nexport type BridgeMode = 'worker' | 'client' | 'auto';\n\nexport type ResolvedBridgeMode = 'worker' | 'client';\n\nexport function resolveBridgeMode(\n mode: BridgeMode = 'auto'\n): ResolvedBridgeMode {\n if (mode === 'worker' || mode === 'client') {\n return mode;\n }\n\n if (isBrowser() && !isWorker()) {\n return 'worker';\n }\n\n return 'client';\n}\n",
|
|
6
7
|
"/**\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
8
|
"/**\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\nexport const DEFAULT_BROWSER_ASSET_PATH = '/squoosh-kit';\n\ntype WorkerPackageConfig = {\n package: string;\n specifier: string;\n};\n\nfunction scriptUrlToPath(scriptUrl: string | URL): string {\n const href = typeof scriptUrl === 'string' ? scriptUrl : scriptUrl.href;\n if (href.startsWith('file://')) {\n return decodeURIComponent(\n href.startsWith('file:///') ? href.slice(7) : href.slice(5)\n );\n }\n return href;\n}\n\nfunction workerScriptExists(scriptUrl: string | URL): boolean {\n if (typeof window !== 'undefined') {\n return false;\n }\n\n const path = scriptUrlToPath(scriptUrl);\n\n if (typeof Bun !== 'undefined') {\n return (\n Bun.spawnSync(['test', '-f', path], {\n stdout: 'ignore',\n stderr: 'ignore',\n }).exitCode === 0\n );\n }\n\n try {\n const existsSync = Function('return require(\"node:fs\").existsSync')() as (\n filePath: string\n ) => boolean;\n return existsSync(path);\n } catch {\n return false;\n }\n}\n\nexport function resolveServerWorkerScript(\n workerConfig: WorkerPackageConfig,\n normalizedName: string\n): string | URL {\n const platformExt = isBun() ? 'bun.js' : 'node.mjs';\n const baseName = normalizedName.replace('.js', '');\n const pkgName = workerConfig.package.split('/')[1];\n\n if (typeof import.meta.resolve === 'function') {\n try {\n const resolved = import.meta.resolve(\n `${workerConfig.package}/${workerConfig.specifier}`\n );\n if (workerScriptExists(resolved)) {\n return resolved;\n }\n } catch {\n // Continue to monorepo fallbacks\n }\n }\n\n const candidates = [\n new URL(\n `../../${pkgName}/dist/${baseName}.${platformExt}`,\n import.meta.url\n ),\n new URL(`../../${pkgName}/src/${baseName}.ts`, import.meta.url),\n ];\n\n for (const candidate of candidates) {\n if (workerScriptExists(candidate)) {\n return candidate;\n }\n }\n\n throw new Error(\n `Failed to resolve worker script for ${normalizedName}. ` +\n `Tried import.meta.resolve, dist output, and TypeScript source. ` +\n `Ensure ${workerConfig.package} is installed.`\n );\n}\n\nexport type CreateWorkerOptions = {\n /**\n * Public URL prefix for worker and WASM files.\n * Defaults to `/squoosh-kit` in the browser (the path used by\n * `@squoosh-kit/vite-plugin`). Pass an empty string to resolve workers\n * relative to the installed package instead.\n */\n assetPath?: string;\n};\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 browsers, workers load from `/squoosh-kit/{package}/` by default.\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(\n workerFilename: string,\n options?: CreateWorkerOptions\n): 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 'avif.worker.js': {\n package: '@squoosh-kit/avif',\n specifier: 'avif.worker.js',\n },\n 'mozjpeg.worker.js': {\n package: '@squoosh-kit/mozjpeg',\n specifier: 'mozjpeg.worker.js',\n },\n 'jxl.worker.js': {\n package: '@squoosh-kit/jxl',\n specifier: 'jxl.worker.js',\n },\n 'oxipng.worker.js': {\n package: '@squoosh-kit/oxipng',\n specifier: 'oxipng.worker.js',\n },\n 'png.worker.js': {\n package: '@squoosh-kit/png',\n specifier: 'png.worker.js',\n },\n 'imagequant.worker.js': {\n package: '@squoosh-kit/imagequant',\n specifier: 'imagequant.worker.js',\n },\n 'qoi.worker.js': {\n package: '@squoosh-kit/qoi',\n specifier: 'qoi.worker.js',\n },\n 'wp2.worker.js': {\n package: '@squoosh-kit/wp2',\n specifier: 'wp2.worker.js',\n },\n 'hqx.worker.js': {\n package: '@squoosh-kit/hqx',\n specifier: 'hqx.worker.js',\n },\n 'rotate.worker.js': {\n package: '@squoosh-kit/rotate',\n specifier: 'rotate.worker.js',\n },\n 'visdif.worker.js': {\n package: '@squoosh-kit/visdif',\n specifier: 'visdif.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 browsers, workers load from /squoosh-kit by default\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 console.log(\n `[worker-helper] In browser environment. Trying to create worker:`\n );\n console.log(`[worker-helper] - Package Name: ${packageName}`);\n console.log(`[worker-helper] - Worker File: ${workerFile}`);\n\n const assetPath =\n options?.assetPath === undefined\n ? DEFAULT_BROWSER_ASSET_PATH\n : options.assetPath;\n\n if (assetPath) {\n let normalizedAssetPath = assetPath;\n if (!normalizedAssetPath.startsWith('/')) {\n normalizedAssetPath = '/' + normalizedAssetPath;\n }\n if (normalizedAssetPath.endsWith('/')) {\n normalizedAssetPath = normalizedAssetPath.slice(0, -1);\n }\n\n // Construct absolute URL: {origin}{assetPath}/{package}/{workerFile}\n const workerPath = `${normalizedAssetPath}/${packageName}/${workerFile}`;\n const workerUrl = new URL(workerPath, window.location.origin).href;\n\n console.log(\n `[worker-helper] Using assetPath. Full Worker URL: ${workerUrl}`\n );\n try {\n const worker = new Worker(workerUrl, { type: 'module' });\n console.log(\n `[worker-helper] Successfully created worker with assetPath: ${workerUrl}`\n );\n return worker;\n } catch (e) {\n console.error(\n `[worker-helper] Failed to load worker from assetPath URL: ${workerUrl}`,\n e\n );\n throw new Error(\n `Worker failed to load from ${workerUrl}: ${e instanceof Error ? e.message : String(e)}`,\n { cause: e }\n );\n }\n }\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 console.log('relPath:', relPath);\n console.log('import.meta.url:', import.meta.url);\n try {\n const workerUrl = new URL(relPath, import.meta.url);\n console.log(\n `[worker-helper] Trying path strategy. Full Worker URL: ${workerUrl.href}`\n );\n const worker = new Worker(workerUrl, {\n type: 'module',\n });\n console.log(\n `[worker-helper] Successfully created worker with URL: ${workerUrl.href}`\n );\n return worker;\n } catch (error) {\n console.warn(\n `[worker-helper] Path strategy failed for ${relPath}:`,\n error\n );\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 console.error('[worker-helper] All path strategies failed.', lastError);\n throw lastError;\n }\n throw new Error(\n `Could not resolve worker ${normalizedName} using any available path strategy`\n );\n }\n\n const workerScript = resolveServerWorkerScript(\n workerConfig,\n normalizedName\n );\n return new Worker(workerScript, { 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 { cause: error }\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 options?: CreateWorkerOptions,\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, options);\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 worker.removeEventListener('error', handleError);\n worker.removeEventListener('messageerror', handleMessageError);\n resolve(worker);\n }\n };\n\n const handleError = (event: ErrorEvent) => {\n clearTimeout(timeout);\n worker.removeEventListener('message', handleMessage);\n worker.removeEventListener('error', handleError);\n worker.removeEventListener('messageerror', handleMessageError);\n reject(\n new Error(\n `Worker failed to start: ${event?.message || 'Unknown error'}. Worker file: ${workerFilename}`\n )\n );\n };\n\n const handleMessageError = () => {\n clearTimeout(timeout);\n worker.removeEventListener('message', handleMessage);\n worker.removeEventListener('error', handleError);\n worker.removeEventListener('messageerror', handleMessageError);\n reject(\n new Error(\n `Worker message error during initialization. Worker file: ${workerFilename}`\n )\n );\n };\n\n worker.addEventListener('message', handleMessage);\n worker.addEventListener('error', handleError);\n worker.addEventListener('messageerror', handleMessageError);\n worker.postMessage({ type: 'worker:ping' });\n });\n}\n",
|
|
8
9
|
"/**\n * Load WASM binary from various sources with fallback strategies\n *\n * Supports:\n * - Node.js (fs/promises)\n * - Browsers (fetch)\n * - Workers (fetch)\n */\nexport async function loadWasmBinary(\n relativePath: string,\n baseUrlOverride?: string | URL\n): Promise<ArrayBuffer> {\n // Get the base URL depending on the environment (worker or main thread)\n // If a base URL is provided, use it; otherwise use import.meta.url from this module\n // In a worker, import.meta.url is the worker's own URL.\n // In the main thread, it's the URL of the current module.\n const baseUrl = baseUrlOverride\n ? typeof baseUrlOverride === 'string'\n ? new URL('.', baseUrlOverride)\n : new URL('.', baseUrlOverride.href)\n : new URL('.', import.meta.url);\n const fullUrl = new URL(relativePath, baseUrl);\n\n console.log(`[WasmLoader] Loading WASM from relative path: ${relativePath}`);\n console.log(`[WasmLoader] Base URL (import.meta.url): ${baseUrl.href}`);\n console.log(`[WasmLoader] Constructed full URL: ${fullUrl.href}`);\n\n try {\n const response = await fetch(fullUrl.href);\n\n console.log(\n `[WasmLoader] Fetch response status for ${fullUrl.href}: ${response.status}`\n );\n\n if (!response.ok) {\n const responseText = await response.text();\n console.error(\n `[WasmLoader] Fetch response text (first 500 chars):`,\n responseText.substring(0, 500)\n );\n throw new Error(\n `Failed to fetch WASM module at ${fullUrl.href}: ${response.status} ${response.statusText}`\n );\n }\n\n const contentType = response.headers.get('content-type');\n console.log(`[WasmLoader] Response Content-Type: ${contentType}`);\n if (!contentType || !contentType.includes('application/wasm')) {\n console.warn(\n `[WasmLoader] Warning: WASM module at ${fullUrl.href} served with incorrect MIME type: \"${contentType}\". Should be \"application/wasm\".`\n );\n }\n\n return await response.arrayBuffer();\n } catch (error) {\n console.error(\n `[WasmLoader] CRITICAL: Fetching WASM binary from ${fullUrl.href} failed.`,\n error\n );\n throw error;\n }\n}\n\n/**\n * Load WASM JavaScript module with fallback strategies\n *\n * Strategy 1: Static relative import (works everywhere)\n * Strategy 2: import.meta.resolve (Node.js 22+)\n * Strategy 3: URL-based import (browsers/workers)\n */\nexport async function loadWasmModule(\n modulePath: string\n): Promise<WebAssembly.Module> {\n // Strategy 1: Try direct static import\n try {\n return await import(/* @vite-ignore */ modulePath);\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (e1) {\n // Continue to next strategy\n }\n\n // Strategy 2: Try import.meta.resolve (Node.js 22+)\n try {\n const resolvedPath = await import.meta.resolve(modulePath);\n\n return await import(/* @vite-ignore */ resolvedPath);\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (e2) {\n // Continue to next strategy\n }\n\n // Strategy 3: Try URL-based import\n try {\n const url = new URL(/* @vite-ignore */ modulePath, import.meta.url);\n\n return await import(/* @vite-ignore */ url.href);\n } catch (e3) {\n throw new Error(\n `Failed to load WASM module from \"${modulePath}\". ` +\n `Ensure WASM files are in the expected location and the module can be resolved.`,\n { cause: e3 }\n );\n }\n}\n",
|
|
9
|
-
"/**\n * @squoosh-kit/runtime\n *\n * Core runtime logic for squoosh-kit, including environment utilities\n * and worker communication helpers.\n */\n\nexport * from './env.js';\nexport * from './worker-call.js';\nexport * from './types.js';\nexport * from './worker-helper.js';\nexport * from './wasm-loader.js';\nexport * from './validators.js';\nexport * from './simd-detector.js';\nexport * from './image-data-polyfill.js';\n",
|
|
10
|
+
"/**\n * @squoosh-kit/runtime\n *\n * Core runtime logic for squoosh-kit, including environment utilities\n * and worker communication helpers.\n */\n\nexport * from './bridge-mode.js';\nexport * from './env.js';\nexport * from './worker-call.js';\nexport * from './types.js';\nexport * from './worker-helper.js';\nexport * from './wasm-loader.js';\nexport * from './validators.js';\nexport * from './simd-detector.js';\nexport * from './image-data-polyfill.js';\n",
|
|
10
11
|
"/**\n * VisDif Butteraugli comparison - Emscripten-based worker/client implementation\n */\n\nimport { loadWasmBinary } from '@squoosh-kit/runtime';\nimport type {\n WorkerRequest,\n WorkerResponse,\n ImageInput,\n} from '@squoosh-kit/runtime';\n\ntype VisDifModuleInstance = {\n VisDiff: new (\n data: string,\n w: number,\n h: number\n ) => { distance: (d: string) => number };\n};\n\nlet cachedModule: VisDifModuleInstance | null = null;\n\nasync function loadVisDifModule(): Promise<VisDifModuleInstance> {\n if (cachedModule) return cachedModule;\n\n // Apply Emscripten polyfills\n const globalSelf = typeof self !== 'undefined' ? self : globalThis;\n if (!globalSelf.location) {\n (globalSelf as { location?: { href: string } }).location = {\n href: import.meta.url,\n };\n }\n if (typeof self === 'undefined' && typeof globalThis !== 'undefined') {\n (globalThis as { self?: typeof globalThis }).self = globalThis;\n }\n\n const workerBaseUrl = new URL('.', import.meta.url);\n const isSource = import.meta.url.includes('/src/');\n const jsPaths = isSource\n ? ['../wasm/visdif/visdif.js', './wasm/visdif/visdif.js']\n : ['./wasm/visdif/visdif.js', '../wasm/visdif/visdif.js'];\n\n let moduleFactory:\n ((config: Record<string, unknown>) => Promise<unknown>) | null = null;\n let lastJsError: Error | null = null;\n for (const jsPath of jsPaths) {\n try {\n moduleFactory = (await import(/* @vite-ignore */ jsPath)).default;\n break;\n } catch (error) {\n lastJsError = error instanceof Error ? error : new Error(String(error));\n }\n }\n if (!moduleFactory) {\n throw lastJsError || new Error('Could not load VisDif JS module');\n }\n\n const wasmPaths = isSource\n ? ['../wasm/visdif/visdif.wasm', './wasm/visdif/visdif.wasm']\n : ['./wasm/visdif/visdif.wasm', '../wasm/visdif/visdif.wasm'];\n\n let wasmBinary: ArrayBuffer | null = null;\n let lastWasmError: Error | null = null;\n for (const wasmPath of wasmPaths) {\n try {\n wasmBinary = await loadWasmBinary(wasmPath, workerBaseUrl);\n break;\n } catch (error) {\n lastWasmError = error instanceof Error ? error : new Error(String(error));\n }\n }\n if (!wasmBinary) {\n throw lastWasmError || new Error('Could not load VisDif WASM');\n }\n\n // Re-apply polyfills right before factory call (Emscripten checks during init)\n const globalSelf2 = typeof self !== 'undefined' ? self : globalThis;\n if (!globalSelf2.location) {\n (globalSelf2 as { location?: { href: string } }).location = {\n href: import.meta.url,\n };\n }\n if (typeof self === 'undefined' && typeof globalThis !== 'undefined') {\n (globalThis as { self?: typeof globalThis }).self = globalThis;\n }\n\n cachedModule = (await moduleFactory({\n noInitialRun: true,\n wasmBinary,\n })) as VisDifModuleInstance;\n return cachedModule;\n}\n\nfunction imageToString(image: ImageInput): string {\n // Convert RGBA pixel data to a string (Emscripten std::string format)\n const { data } = image;\n const bytes = new Uint8Array(\n data.buffer as ArrayBuffer,\n data.byteOffset,\n data.byteLength\n );\n\n // Build string from char codes\n let result = '';\n for (let i = 0; i < bytes.length; i++) {\n result += String.fromCharCode(bytes[i]);\n }\n return result;\n}\n\nexport async function visdifCompareClient(\n image1: ImageInput,\n image2: ImageInput,\n signal?: AbortSignal\n): Promise<number> {\n if (signal?.aborted) {\n throw new DOMException('Aborted', 'AbortError');\n }\n\n if (image1.width !== image2.width || image1.height !== image2.height) {\n throw new Error('Images must have the same dimensions for comparison');\n }\n\n const module = await loadVisDifModule();\n\n if (signal?.aborted) {\n throw new DOMException('Aborted', 'AbortError');\n }\n\n const data1 = imageToString(image1);\n const data2 = imageToString(image2);\n\n const visDiff = new module.VisDiff(data1, image1.width, image1.height);\n return visDiff.distance(data2);\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 request = data as WorkerRequest<{\n image1: ImageInput;\n image2: ImageInput;\n }>;\n const response: WorkerResponse<number> = { id: request.id, ok: false };\n\n try {\n if (request.type === 'visdif:compare') {\n const result = await visdifCompareClient(\n request.payload.image1,\n request.payload.image2\n );\n response.ok = true;\n response.data = result;\n self.postMessage(response);\n } else {\n response.error = `Unknown message type: ${request.type}`;\n self.postMessage(response);\n }\n } catch (error) {\n response.error = error instanceof Error ? error.message : String(error);\n self.postMessage(response);\n }\n };\n}\n",
|
|
11
|
-
"/**\n * Bridge implementation for the visdif package, handling worker and client modes.\n */\n\nimport {\n callWorker,\n createReadyWorker,\n type ImageInput,\n} from '@squoosh-kit/runtime';\n\nexport type BridgeOptions = {\n /**\n * Public URL prefix for worker and WASM files.\n * Defaults to `/squoosh-kit` in the browser.\n */\n assetPath?: string;\n};\n\ninterface VisDifBridge {\n compare(\n image1: ImageInput,\n image2: ImageInput,\n signal?: AbortSignal\n ): Promise<number>;\n terminate(): Promise<void>;\n}\n\nclass VisDifClientBridge implements VisDifBridge {\n async compare(\n image1: ImageInput,\n image2: ImageInput,\n signal?: AbortSignal\n ): Promise<number> {\n const module = await import('./visdif.worker.js');\n const visdifCompareClient = module.visdifCompareClient as (\n image1: ImageInput,\n image2: ImageInput,\n signal?: AbortSignal\n ) => Promise<number>;\n return visdifCompareClient(image1, image2, signal);\n }\n\n async terminate(): Promise<void> {\n // Client mode has nothing to terminate\n }\n}\n\nclass VisDifWorkerBridge implements VisDifBridge {\n private worker: Worker | null = null;\n private workerReady: Promise<Worker> | null = null;\n private options?: BridgeOptions;\n\n constructor(options?: BridgeOptions) {\n this.options = options;\n }\n\n private async getWorker(): Promise<Worker> {\n if (!this.workerReady) {\n this.workerReady = this.createWorker();\n }\n return this.workerReady;\n }\n\n private async createWorker(): Promise<Worker> {\n this.worker = await createReadyWorker('visdif.worker.js', this.options);\n return this.worker;\n }\n\n async compare(\n image1: ImageInput,\n image2: ImageInput,\n signal?: AbortSignal\n ): Promise<number> {\n const worker = await this.getWorker();\n return callWorker(worker, 'visdif:compare', { image1, image2 }, signal);\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(\n mode:
|
|
12
|
-
"/**\n * @squoosh-kit/visdif public API\n */\n\nimport type { ImageInput } from '@squoosh-kit/runtime';\nimport { createBridge, type BridgeOptions } from './bridge';\n\nexport type { ImageInput };\nexport type { VisDifModule } from './types';\n\n// Global bridge instance for reuse\nlet globalBridge: ReturnType<typeof createBridge> | null = null;\n\n/**\n * A reusable VisDif comparison function.\n * Can be terminated to clean up associated resources (especially workers).\n */\nexport type VisDifFactory = ((\n image1: ImageInput,\n image2: ImageInput,\n signal?: AbortSignal\n) => Promise<number>) & {\n /**\n * Terminates the VisDif instance and cleans up resources.\n * Important for worker mode to prevent memory leaks.\n *\n * @example\n * const visdif = createVisDiff('worker');\n * try {\n * const distance = await visdif(image1, image2);\n * } finally {\n * await visdif.terminate();\n * }\n */\n terminate(): Promise<void>;\n};\n\n/**\n * Computes the Butteraugli perceptual distance between two images.\n * Uses worker mode for UI responsiveness.\n *\n * @param image1 - The reference image.\n * @param image2 - The image to compare against the reference.\n * @param signal - (Optional) AbortSignal to cancel the operation.\n * @returns A Promise resolving to the Butteraugli distance (0 = identical).\n *\n * @example\n * const distance = await compare(referenceImage, comparedImage);\n * console.log(`Butteraugli distance: ${distance}`);\n */\nexport async function compare(\n image1: ImageInput,\n image2: ImageInput,\n signal?: AbortSignal\n): Promise<number> {\n if (!globalBridge) {\n globalBridge = createBridge('
|
|
12
|
+
"/**\n * Bridge implementation for the visdif package, handling worker and client modes.\n */\n\nimport {\n callWorker,\n createReadyWorker,\n type ImageInput,\n resolveBridgeMode,\n type BridgeMode,\n} from '@squoosh-kit/runtime';\n\nexport type BridgeOptions = {\n /**\n * Public URL prefix for worker and WASM files.\n * Defaults to `/squoosh-kit` in the browser.\n */\n assetPath?: string;\n};\n\ninterface VisDifBridge {\n compare(\n image1: ImageInput,\n image2: ImageInput,\n signal?: AbortSignal\n ): Promise<number>;\n terminate(): Promise<void>;\n}\n\nclass VisDifClientBridge implements VisDifBridge {\n async compare(\n image1: ImageInput,\n image2: ImageInput,\n signal?: AbortSignal\n ): Promise<number> {\n const module = await import('./visdif.worker.js');\n const visdifCompareClient = module.visdifCompareClient as (\n image1: ImageInput,\n image2: ImageInput,\n signal?: AbortSignal\n ) => Promise<number>;\n return visdifCompareClient(image1, image2, signal);\n }\n\n async terminate(): Promise<void> {\n // Client mode has nothing to terminate\n }\n}\n\nclass VisDifWorkerBridge implements VisDifBridge {\n private worker: Worker | null = null;\n private workerReady: Promise<Worker> | null = null;\n private options?: BridgeOptions;\n\n constructor(options?: BridgeOptions) {\n this.options = options;\n }\n\n private async getWorker(): Promise<Worker> {\n if (!this.workerReady) {\n this.workerReady = this.createWorker();\n }\n return this.workerReady;\n }\n\n private async createWorker(): Promise<Worker> {\n this.worker = await createReadyWorker('visdif.worker.js', this.options);\n return this.worker;\n }\n\n async compare(\n image1: ImageInput,\n image2: ImageInput,\n signal?: AbortSignal\n ): Promise<number> {\n const worker = await this.getWorker();\n return callWorker(worker, 'visdif:compare', { image1, image2 }, signal);\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(\n mode: BridgeMode = 'auto',\n options?: BridgeOptions\n): VisDifBridge {\n const resolvedMode = resolveBridgeMode(mode);\n if (resolvedMode === 'worker') {\n return new VisDifWorkerBridge(options);\n }\n return new VisDifClientBridge();\n}\n",
|
|
13
|
+
"/**\n * @squoosh-kit/visdif public API\n */\n\nimport type { BridgeMode, ImageInput } from '@squoosh-kit/runtime';\nimport { createBridge, type BridgeOptions } from './bridge';\n\nexport type { ImageInput };\nexport type { VisDifModule } from './types';\n\n// Global bridge instance for reuse\nlet globalBridge: ReturnType<typeof createBridge> | null = null;\n\n/**\n * A reusable VisDif comparison function.\n * Can be terminated to clean up associated resources (especially workers).\n */\nexport type VisDifFactory = ((\n image1: ImageInput,\n image2: ImageInput,\n signal?: AbortSignal\n) => Promise<number>) & {\n /**\n * Terminates the VisDif instance and cleans up resources.\n * Important for worker mode to prevent memory leaks.\n *\n * @example\n * const visdif = createVisDiff('worker');\n * try {\n * const distance = await visdif(image1, image2);\n * } finally {\n * await visdif.terminate();\n * }\n */\n terminate(): Promise<void>;\n};\n\n/**\n * Computes the Butteraugli perceptual distance between two images.\n * Uses worker mode for UI responsiveness.\n *\n * @param image1 - The reference image.\n * @param image2 - The image to compare against the reference.\n * @param signal - (Optional) AbortSignal to cancel the operation.\n * @returns A Promise resolving to the Butteraugli distance (0 = identical).\n *\n * @example\n * const distance = await compare(referenceImage, comparedImage);\n * console.log(`Butteraugli distance: ${distance}`);\n */\nexport async function compare(\n image1: ImageInput,\n image2: ImageInput,\n signal?: AbortSignal\n): Promise<number> {\n if (!globalBridge) {\n globalBridge = createBridge('auto');\n }\n return globalBridge.compare(image1, image2, signal);\n}\n\n/**\n * Creates a reusable VisDif comparison function for a specific execution mode.\n *\n * @param mode - The execution mode, either 'worker' or 'client'.\n * @param options - Optional bridge options.\n * @returns A function that computes Butteraugli distance between two images.\n *\n * @example\n * const visdiff = createVisDiff('client');\n * const distance = await visdiff(image1, image2);\n * console.log(`Butteraugli distance: ${distance}`);\n * await visdiff.terminate();\n */\nexport function createVisDiff(\n mode: BridgeMode = 'auto',\n options?: BridgeOptions\n): VisDifFactory {\n const bridge = createBridge(mode, options);\n\n return Object.assign(\n (image1: ImageInput, image2: ImageInput, signal?: AbortSignal) => {\n return bridge.compare(image1, image2, signal);\n },\n {\n terminate: async () => {\n await bridge.terminate();\n },\n }\n );\n}\n"
|
|
13
14
|
],
|
|
14
|
-
"mappings": "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",
|
|
15
|
-
"debugId": "
|
|
15
|
+
"mappings": "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",
|
|
16
|
+
"debugId": "67551A793F035A8D64756E2164756E21",
|
|
16
17
|
"names": []
|
|
17
18
|
}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @squoosh-kit/visdif public API
|
|
3
3
|
*/
|
|
4
|
-
import type { ImageInput } from '@squoosh-kit/runtime';
|
|
4
|
+
import type { BridgeMode, ImageInput } from '@squoosh-kit/runtime';
|
|
5
5
|
import { type BridgeOptions } from './bridge';
|
|
6
6
|
export type { ImageInput };
|
|
7
7
|
export type { VisDifModule } from './types';
|
|
@@ -51,5 +51,5 @@ export declare function compare(image1: ImageInput, image2: ImageInput, signal?:
|
|
|
51
51
|
* console.log(`Butteraugli distance: ${distance}`);
|
|
52
52
|
* await visdiff.terminate();
|
|
53
53
|
*/
|
|
54
|
-
export declare function createVisDiff(mode?:
|
|
54
|
+
export declare function createVisDiff(mode?: BridgeMode, options?: BridgeOptions): VisDifFactory;
|
|
55
55
|
//# 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;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAgB,KAAK,aAAa,EAAE,MAAM,UAAU,CAAC;AAE5D,YAAY,EAAE,UAAU,EAAE,CAAC;AAC3B,YAAY,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAK5C;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,CAC3B,MAAM,EAAE,UAAU,EAClB,MAAM,EAAE,UAAU,EAClB,MAAM,CAAC,EAAE,WAAW,KACjB,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG;IACtB;;;;;;;;;;;OAWG;IACH,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,wBAAsB,OAAO,CAC3B,MAAM,EAAE,UAAU,EAClB,MAAM,EAAE,UAAU,EAClB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,MAAM,CAAC,CAKjB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAC3B,IAAI,GAAE,UAAmB,EACzB,OAAO,CAAC,EAAE,aAAa,GACtB,aAAa,CAaf"}
|
package/dist/index.node.cjs
CHANGED
|
@@ -38,10 +38,28 @@ var __export = (target, all) => {
|
|
|
38
38
|
var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
|
|
39
39
|
|
|
40
40
|
// ../runtime/src/env.ts
|
|
41
|
+
function isWorker() {
|
|
42
|
+
return typeof self !== "undefined" && typeof globalThis.DedicatedWorkerGlobalScope !== "undefined";
|
|
43
|
+
}
|
|
44
|
+
function isBrowser() {
|
|
45
|
+
return typeof window !== "undefined" && typeof document !== "undefined";
|
|
46
|
+
}
|
|
41
47
|
function isBun() {
|
|
42
48
|
return typeof Bun !== "undefined";
|
|
43
49
|
}
|
|
44
50
|
|
|
51
|
+
// ../runtime/src/bridge-mode.ts
|
|
52
|
+
function resolveBridgeMode(mode = "auto") {
|
|
53
|
+
if (mode === "worker" || mode === "client") {
|
|
54
|
+
return mode;
|
|
55
|
+
}
|
|
56
|
+
if (isBrowser() && !isWorker()) {
|
|
57
|
+
return "worker";
|
|
58
|
+
}
|
|
59
|
+
return "client";
|
|
60
|
+
}
|
|
61
|
+
var init_bridge_mode = () => {};
|
|
62
|
+
|
|
45
63
|
// ../runtime/src/worker-call.ts
|
|
46
64
|
async function callWorker(worker, type, payload, signal, transfer) {
|
|
47
65
|
return new Promise((resolve, reject) => {
|
|
@@ -335,6 +353,7 @@ var init_simd_detector = () => {};
|
|
|
335
353
|
|
|
336
354
|
// ../runtime/src/index.ts
|
|
337
355
|
var init_src = __esm(() => {
|
|
356
|
+
init_bridge_mode();
|
|
338
357
|
init_worker_helper();
|
|
339
358
|
init_simd_detector();
|
|
340
359
|
});
|
|
@@ -506,8 +525,9 @@ class VisDifWorkerBridge {
|
|
|
506
525
|
}
|
|
507
526
|
}
|
|
508
527
|
}
|
|
509
|
-
function createBridge(mode, options) {
|
|
510
|
-
|
|
528
|
+
function createBridge(mode = "auto", options) {
|
|
529
|
+
const resolvedMode = resolveBridgeMode(mode);
|
|
530
|
+
if (resolvedMode === "worker") {
|
|
511
531
|
return new VisDifWorkerBridge(options);
|
|
512
532
|
}
|
|
513
533
|
return new VisDifClientBridge;
|
|
@@ -517,11 +537,11 @@ function createBridge(mode, options) {
|
|
|
517
537
|
var globalBridge = null;
|
|
518
538
|
async function compare(image1, image2, signal) {
|
|
519
539
|
if (!globalBridge) {
|
|
520
|
-
globalBridge = createBridge("
|
|
540
|
+
globalBridge = createBridge("auto");
|
|
521
541
|
}
|
|
522
542
|
return globalBridge.compare(image1, image2, signal);
|
|
523
543
|
}
|
|
524
|
-
function createVisDiff(mode = "
|
|
544
|
+
function createVisDiff(mode = "auto", options) {
|
|
525
545
|
const bridge = createBridge(mode, options);
|
|
526
546
|
return Object.assign((image1, image2, signal) => {
|
|
527
547
|
return bridge.compare(image1, image2, signal);
|
|
@@ -532,4 +552,4 @@ function createVisDiff(mode = "worker", options) {
|
|
|
532
552
|
});
|
|
533
553
|
}
|
|
534
554
|
|
|
535
|
-
//# debugId=
|
|
555
|
+
//# debugId=B870729EB2014DE364756E2164756E21
|