{"version":3,"file":"node-polyfill.cjs","sources":["../../src/polyfill/crypto.ts","../../src/polyfill/fetch.ts","../../src/polyfill/xmlhttprequest.ts","../../src/polyfill/worker.ts","../../src/node-polyfill.ts"],"sourcesContent":["import { webcrypto } from \"node:crypto\";\n\nif ((globalThis as any).crypto == null) {\n    (globalThis as any).crypto = webcrypto;\n}\n","import * as $fs from \"node:fs\";\nimport $mime from \"mime/lite\";\n\n\nconst oldFetch = globalThis.fetch;\n\n\nlet supports: Promise<boolean> | null = null;\n\nasync function checkFetch() {\n    try {\n        await oldFetch(new URL(\"file:\"));\n        return true;\n\n    } catch (e) {\n        return false;\n    }\n}\n\nasync function supportsFetch(): Promise<boolean> {\n    if (supports === null) {\n        supports = checkFetch();\n    }\n\n    return await supports;\n}\n\n\n// We always polyfill fetch because Node's fetch doesn't support file URLs.\n(globalThis.fetch as any) = async function (resource: URL | RequestInfo, options: RequestInit | undefined): Promise<Response> {\n    const request = new Request(resource, options);\n\n    const url = new URL(request.url);\n\n    if (!(await supportsFetch()) && url.protocol === \"file:\") {\n        const readStream = $fs.createReadStream(url);\n\n        const headers: HeadersInit = {};\n\n        const type = $mime.getType(url.pathname);\n\n        if (type) {\n            headers[\"Content-Type\"] = type;\n        }\n\n        return new Response(readStream as any, {\n            status: 200,\n            statusText: \"OK\",\n            headers,\n        });\n\n    } else {\n        return await oldFetch(request);\n    }\n};\n","// @ts-ignore\nimport $xmlhttprequest from \"xmlhttprequest-ssl\";\n\nif (globalThis.XMLHttpRequest == null) {\n    (globalThis as any).XMLHttpRequest = class extends $xmlhttprequest.XMLHttpRequest {\n        constructor(opts?: any) {\n            super({ syncPolicy: \"enabled\", ...opts });\n        }\n    };\n}","import * as $worker from \"node:worker_threads\";\nimport * as $os from \"node:os\";\n\n// This is technically not a part of the Worker polyfill,\n// but Workers are used for multi-threading, so this is often\n// needed when writing Worker code.\nif (globalThis.navigator == null) {\n    globalThis.navigator = {\n        hardwareConcurrency: $os.availableParallelism(),\n    } as Navigator;\n}\n\nif (globalThis.Worker == null) {\n    globalThis.Worker = class Worker extends EventTarget {\n        private _worker: import(\"node:worker_threads\").Worker;\n\n        constructor(url: string | URL, options?: WorkerOptions | undefined) {\n            super();\n\n            if (url instanceof URL) {\n                if (url.protocol !== \"file:\") {\n                    throw new Error(\"Worker only supports file: URLs\");\n                }\n\n                url = url.href;\n\n            } else {\n                throw new Error(\"Filepaths are unreliable, use `new URL(\\\"...\\\", import.meta.url)` instead.\");\n            }\n\n            if (!options || options.type !== \"module\") {\n                throw new Error(\"Workers must use \\`type: \\\"module\\\"\\`\");\n            }\n\n            const code = `\n                import(\"node:worker_threads\")\n                    .then(({ workerData }) => {\n                        return import(workerData.polyfill)\n                            .then(() => import(workerData.url))\n                    })\n                    .catch((e) => {\n                        // TODO maybe it should send a message to the parent?\n                        console.error(e.stack);\n                    });\n            `;\n\n            this._worker = new $worker.Worker(code, {\n                eval: true,\n                workerData: {\n                    url,\n                    polyfill: new URL(\"node-polyfill.js\", import.meta.url).href,\n                },\n            });\n\n            this._worker.on(\"message\", (data) => {\n                this.dispatchEvent(new MessageEvent(\"message\", { data }));\n            });\n\n            this._worker.on(\"messageerror\", (error) => {\n                throw new Error(\"UNIMPLEMENTED\");\n            });\n\n            this._worker.on(\"error\", (error) => {\n                // TODO attach the error to the event somehow\n                const event = new Event(\"error\");\n                this.dispatchEvent(event);\n            });\n        }\n\n        set onmessage(f: () => void) {\n            throw new Error(\"UNIMPLEMENTED\");\n        }\n\n        set onmessageerror(f: () => void) {\n            throw new Error(\"UNIMPLEMENTED\");\n        }\n\n        set onerror(f: () => void) {\n            throw new Error(\"UNIMPLEMENTED\");\n        }\n\n        postMessage(message: any, transfer: Array<Transferable>): void;\n        postMessage(message: any, options?: StructuredSerializeOptions | undefined): void;\n        postMessage(value: any, transfer: any) {\n            this._worker.postMessage(value, transfer);\n        }\n\n        terminate() {\n            this._worker.terminate();\n        }\n\n        // This is Node-specific, it allows the process to exit\n        // even if the Worker is still running.\n        unref() {\n            this._worker.unref();\n        }\n    };\n}\n\n\nif (!$worker.isMainThread) {\n    const globals = globalThis as unknown as DedicatedWorkerGlobalScope;\n\n    // This is used to create the onmessage, onmessageerror, and onerror setters\n    const makeSetter = (prop: string, event: string) => {\n        let oldvalue: () => void;\n\n        Object.defineProperty(globals, prop, {\n            get() {\n                return oldvalue;\n            },\n            set(value) {\n                if (oldvalue) {\n                    globals.removeEventListener(event, oldvalue);\n                }\n\n                oldvalue = value;\n\n                if (oldvalue) {\n                    globals.addEventListener(event, oldvalue);\n                }\n            },\n        });\n    };\n\n    // This makes sure that `f` is only run once\n    const memoize = (f: () => void) => {\n        let run = false;\n\n        return () => {\n            if (!run) {\n                run = true;\n                f();\n            }\n        };\n    };\n\n\n    // We only start listening for messages / errors when the worker calls addEventListener\n    const startOnMessage = memoize(() => {\n        $worker.parentPort!.on(\"message\", (data) => {\n            workerEvents.dispatchEvent(new MessageEvent(\"message\", { data }));\n        });\n    });\n\n    const startOnMessageError = memoize(() => {\n        throw new Error(\"UNIMPLEMENTED\");\n    });\n\n    const startOnError = memoize(() => {\n        $worker.parentPort!.on(\"error\", (data) => {\n            workerEvents.dispatchEvent(new Event(\"error\"));\n        });\n    });\n\n\n    // Node workers don't have top-level events, so we have to make our own\n    const workerEvents = new EventTarget();\n\n    globals.close = () => {\n        process.exit();\n    };\n\n    globals.addEventListener = (type: string, callback: EventListenerOrEventListenerObject | null, options?: boolean | EventListenerOptions | undefined) => {\n        workerEvents.addEventListener(type, callback, options);\n\n        if (type === \"message\") {\n            startOnMessage();\n        } else if (type === \"messageerror\") {\n            startOnMessageError();\n        } else if (type === \"error\") {\n            startOnError();\n        }\n    };\n\n    globals.removeEventListener = (type: string, callback: EventListenerOrEventListenerObject | null, options?: boolean | EventListenerOptions | undefined) => {\n        workerEvents.removeEventListener(type, callback, options);\n    };\n\n    function postMessage(message: any, transfer: Transferable[]): void;\n    function postMessage(message: any, options?: StructuredSerializeOptions | undefined): void;\n    function postMessage(value: any, transfer: any) {\n        $worker.parentPort!.postMessage(value, transfer);\n    }\n\n    globals.postMessage = postMessage;\n\n    makeSetter(\"onmessage\", \"message\");\n    makeSetter(\"onmessageerror\", \"messageerror\");\n    makeSetter(\"onerror\", \"error\");\n}\n","import \"./polyfill/shared.js\";\nimport \"./polyfill/crypto.js\";\nimport \"./polyfill/fetch.js\";\nimport \"./polyfill/xmlhttprequest.js\";\nimport \"./polyfill/worker.js\";\n\nif (!globalThis.self) {\n    (globalThis as any).self = globalThis;\n}\n"],"names":["webcrypto","$fs","$os","$worker"],"mappings":"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"}