{
  "version": 3,
  "sources": ["../src/main-thread.ts"],
  "sourcesContent": ["/**\n * External dependencies\n */\nimport {\n\tdefineProxy,\n\ttype Adapter,\n\ttype SendMessage,\n\ttype OnMessage,\n} from 'comctx';\n\n/**\n * Internal dependencies\n */\nimport { WORKER_SYMBOL, type Remote, type WithWorker } from './types';\n\n/**\n * Adapter for injecting (main thread calling worker).\n */\nclass WorkerInjectAdapter implements Adapter {\n\tprivate worker: Worker;\n\n\tconstructor( worker: Worker ) {\n\t\tthis.worker = worker;\n\t}\n\n\tsendMessage: SendMessage = ( message, transfer ) => {\n\t\tthis.worker.postMessage( message, transfer );\n\t};\n\n\tonMessage: OnMessage = ( callback ) => {\n\t\tconst handler = ( event: MessageEvent ) => callback( event.data );\n\t\tthis.worker.addEventListener( 'message', handler );\n\t\treturn () => this.worker.removeEventListener( 'message', handler );\n\t};\n}\n\n/**\n * WeakMap to store workers for each remote proxy.\n */\nconst remoteWorkers = new WeakMap< object, Worker >();\n\n/**\n * Wraps a Worker to provide a type-safe RPC interface.\n *\n * The returned proxy object allows calling methods on the worker as if they\n * were local async functions. Each method call is automatically serialized,\n * sent to the worker, and the result is returned as a Promise.\n *\n * @example\n * ```typescript\n * const worker = new Worker(new URL('./worker.js', import.meta.url));\n * const api = wrap<MyWorkerAPI>(worker);\n *\n * // Call worker methods as async functions\n * const result = await api.processData(data);\n * ```\n *\n * @param worker - The Worker instance to wrap.\n * @return A proxy object with all exposed methods as async functions.\n */\nexport function wrap< T extends object >( worker: Worker ): Remote< T > {\n\t// Create the inject function using defineProxy with an empty object\n\t// (the actual implementation is on the worker side).\n\tconst [ , inject ] = defineProxy( () => ( {} ) as T, {\n\t\tnamespace: '__wordpress_worker__',\n\t\theartbeatCheck: false,\n\t\ttransfer: true,\n\t} );\n\n\t// Create the proxy using the injector.\n\tconst comctxRemote = inject( new WorkerInjectAdapter( worker ) );\n\n\t// Store the worker reference.\n\tremoteWorkers.set( comctxRemote as object, worker );\n\n\t// Create a wrapper proxy that adds WORKER_SYMBOL support.\n\tconst proxy = new Proxy( comctxRemote as Remote< T > & WithWorker, {\n\t\tget( target, prop: string | symbol ) {\n\t\t\t// Return the worker for the WORKER_SYMBOL.\n\t\t\tif ( prop === WORKER_SYMBOL ) {\n\t\t\t\treturn worker;\n\t\t\t}\n\n\t\t\t// Delegate all other property access to the comctx remote.\n\t\t\treturn Reflect.get( target, prop );\n\t\t},\n\t} );\n\n\t// Store the worker for the proxy as well.\n\tremoteWorkers.set( proxy, worker );\n\n\treturn proxy;\n}\n\n/**\n * Terminates a wrapped worker and cleans up resources.\n *\n * After calling terminate, any pending calls will be rejected and the\n * worker will be stopped.\n *\n * @example\n * ```typescript\n * const api = wrap<MyWorkerAPI>(worker);\n * // ... use the API ...\n * terminate(api); // Clean up when done\n * ```\n *\n * @param remote - The wrapped worker proxy returned by wrap().\n */\nexport function terminate( remote: Remote< unknown > ): void {\n\t// Get the worker from the proxy.\n\tconst worker = ( remote as unknown as WithWorker )[ WORKER_SYMBOL ];\n\n\tif ( ! worker ) {\n\t\treturn;\n\t}\n\n\t// Clean up the worker reference.\n\tremoteWorkers.delete( remote as object );\n\n\t// Terminate the worker.\n\tworker.terminate();\n}\n"],
  "mappings": ";AAGA;AAAA,EACC;AAAA,OAIM;AAKP,SAAS,qBAAmD;AAK5D,IAAM,sBAAN,MAA6C;AAAA,EACpC;AAAA,EAER,YAAa,QAAiB;AAC7B,SAAK,SAAS;AAAA,EACf;AAAA,EAEA,cAA2B,CAAE,SAAS,aAAc;AACnD,SAAK,OAAO,YAAa,SAAS,QAAS;AAAA,EAC5C;AAAA,EAEA,YAAuB,CAAE,aAAc;AACtC,UAAM,UAAU,CAAE,UAAyB,SAAU,MAAM,IAAK;AAChE,SAAK,OAAO,iBAAkB,WAAW,OAAQ;AACjD,WAAO,MAAM,KAAK,OAAO,oBAAqB,WAAW,OAAQ;AAAA,EAClE;AACD;AAKA,IAAM,gBAAgB,oBAAI,QAA0B;AAqB7C,SAAS,KAA0B,QAA8B;AAGvE,QAAM,CAAE,EAAE,MAAO,IAAI,YAAa,OAAQ,CAAC,IAAU;AAAA,IACpD,WAAW;AAAA,IACX,gBAAgB;AAAA,IAChB,UAAU;AAAA,EACX,CAAE;AAGF,QAAM,eAAe,OAAQ,IAAI,oBAAqB,MAAO,CAAE;AAG/D,gBAAc,IAAK,cAAwB,MAAO;AAGlD,QAAM,QAAQ,IAAI,MAAO,cAA0C;AAAA,IAClE,IAAK,QAAQ,MAAwB;AAEpC,UAAK,SAAS,eAAgB;AAC7B,eAAO;AAAA,MACR;AAGA,aAAO,QAAQ,IAAK,QAAQ,IAAK;AAAA,IAClC;AAAA,EACD,CAAE;AAGF,gBAAc,IAAK,OAAO,MAAO;AAEjC,SAAO;AACR;AAiBO,SAAS,UAAW,QAAkC;AAE5D,QAAM,SAAW,OAAmC,aAAc;AAElE,MAAK,CAAE,QAAS;AACf;AAAA,EACD;AAGA,gBAAc,OAAQ,MAAiB;AAGvC,SAAO,UAAU;AAClB;",
  "names": []
}
