// SPDX-License-Identifier: LGPL-3.0-or-later import {heicPreflight} from './heic-preflight.js'; export function decodeHeic(bytes,{signal}={}){ signal?.throwIfAborted();heicPreflight(bytes); return new Promise((resolve,reject)=>{ const worker=new Worker(new URL('./heic-worker.js',import.meta.url),{type:'module'});let settled=false; const finish=(error,result)=>{if(settled)return;settled=true;clearTimeout(timer);worker.terminate();signal?.removeEventListener('abort',abort);error?reject(error):resolve(result);}; const abort=()=>finish(signal.reason||new DOMException('Cancelled','AbortError')); const timer=setTimeout(()=>finish(Error('Unable to decode this HEIC. Convert it to JPG first.')),120000); signal?.addEventListener('abort',abort,{once:true});worker.onerror=()=>finish(Error('Unable to decode this HEIC. Convert it to JPG first.'));worker.onmessage=({data})=>data.error?finish(Error(data.error)):finish(null,new Uint8Array(data.bytes)); const copy=bytes.slice();worker.postMessage(copy.buffer,[copy.buffer]); }); }