Patch zeroperl-ts so worker WASM load honors custom fetch.
Postinstall updates @6over3/zeroperl-ts and wires the worker to load zeroperl.wasm via Vite ?url.
This commit is contained in:
@@ -1,8 +1,12 @@
|
||||
import zeroperlWasmUrl from '@6over3/zeroperl-ts/zeroperl.wasm?url';
|
||||
import { parseMetadata } from '@uswriting/exiftool';
|
||||
import { EXIFTOOL_WORKER_INIT_JPEG } from '@/consts/exiftoolWorkerInitJpeg';
|
||||
import type { ExiftoolWorkerInMessage } from '@/types/workers/exiftoolWorkerInMessage';
|
||||
import { resolveErrorMessage } from '@/utils/resolveErrorMessage';
|
||||
|
||||
/** Custom fetch function for `@uswriting/exiftool` to load `zeroperl.wasm` from the worker. */
|
||||
const exiftoolParseOptions = { fetch: () => fetch(zeroperlWasmUrl) };
|
||||
|
||||
let initialized = false;
|
||||
let initializeWorkerPromise: Promise<void> | null = null;
|
||||
|
||||
@@ -19,7 +23,7 @@ let initializeWorkerPromise: Promise<void> | null = null;
|
||||
* Concurrent callers (init message, read-metadata, future write) share one in-flight warmup.
|
||||
*
|
||||
* @throws When warmup `parseMetadata` fails (network, WASM, or ExifTool error).
|
||||
* @see Main thread `initialize()` posts `{ type: 'init' }` when idle.
|
||||
* @see Main thread `initializeExiftool()` posts `{ type: 'init' }` when idle.
|
||||
*/
|
||||
const initializeWorker = async (): Promise<void> => {
|
||||
if (initialized) {
|
||||
@@ -29,7 +33,10 @@ const initializeWorker = async (): Promise<void> => {
|
||||
if (!initializeWorkerPromise) {
|
||||
initializeWorkerPromise = (async () => {
|
||||
try {
|
||||
const result = await parseMetadata({ name: 'init.jpg', data: EXIFTOOL_WORKER_INIT_JPEG });
|
||||
const result = await parseMetadata(
|
||||
{ name: 'init.jpg', data: EXIFTOOL_WORKER_INIT_JPEG },
|
||||
exiftoolParseOptions
|
||||
);
|
||||
|
||||
if (!result.success) {
|
||||
throw new Error(result.error);
|
||||
@@ -69,7 +76,7 @@ self.addEventListener('message', async (event: MessageEvent<ExiftoolWorkerInMess
|
||||
try {
|
||||
await initializeWorker();
|
||||
|
||||
const result = await parseMetadata(message.file);
|
||||
const result = await parseMetadata(message.file, exiftoolParseOptions);
|
||||
|
||||
if (!result.success) {
|
||||
self.postMessage({ type: 'read-metadata-error', id: message.id, message: result.error });
|
||||
|
||||
Reference in New Issue
Block a user