mirror of
https://github.com/aphrody-labs/oxc.git
synced 2026-10-14 22:29:17 +00:00
fix(napi): disable reuseWorker in browser bindings (#25640)
Fixes #25610 AI assistance: Codex was used to implement this change.
This commit is contained in:
1 parent
d55b76c7ab
commit
db446518ca
16 files changed
+62
-11
No files matched your search
@@ -0,0 +1,17 @@
|
||||
import fs from "node:fs";
|
||||
|
||||
const REUSED_WORKERS = "reuseWorker: { size: __asyncWorkPoolSize + __workerPoolSize },";
|
||||
const DISABLED_REUSED_WORKERS = "reuseWorker: false,";
|
||||
|
||||
export function disableReusedWorkers(path) {
|
||||
let data = fs.readFileSync(path, "utf-8");
|
||||
|
||||
// The pool is initialized eagerly, but browsers reject its worker URL when a binding is loaded
|
||||
// from a cross-origin CDN because workers must be loaded from the page's origin.
|
||||
if (data.includes(REUSED_WORKERS)) {
|
||||
data = data.replace(REUSED_WORKERS, DISABLED_REUSED_WORKERS);
|
||||
fs.writeFileSync(path, data);
|
||||
} else if (!data.includes(DISABLED_REUSED_WORKERS)) {
|
||||
throw new Error(`Could not find the reuseWorker option in ${path}`);
|
||||
}
|
||||
}
|
||||
@@ -565,7 +565,7 @@ try {
|
||||
} = await __emnapiInstantiateNapiModule(__wasmFile, {
|
||||
context: __emnapiContext,
|
||||
asyncWorkPoolSize: __asyncWorkPoolSize,
|
||||
reuseWorker: { size: __asyncWorkPoolSize + __workerPoolSize },
|
||||
reuseWorker: false,
|
||||
plugins: [__emnapiAsyncWorkPlugin, __emnapiTSFNPlugin],
|
||||
wasi: __wasi,
|
||||
onCreateWorker() {
|
||||
|
||||
@@ -1,7 +1,12 @@
|
||||
import fs from "node:fs";
|
||||
import { join as pathJoin } from "node:path";
|
||||
|
||||
const path = pathJoin(import.meta.dirname, "../index.js");
|
||||
import { disableReusedWorkers } from "../../disable-reused-workers.mjs";
|
||||
|
||||
const packageDir = pathJoin(import.meta.dirname, "..");
|
||||
disableReusedWorkers(pathJoin(packageDir, "minify.wasi-browser.js"));
|
||||
|
||||
const path = pathJoin(packageDir, "index.js");
|
||||
|
||||
let data = fs.readFileSync(path, "utf-8");
|
||||
data = data.replace(
|
||||
|
||||
@@ -6,6 +6,7 @@ import { rolldown } from "rolldown";
|
||||
// Rollup-compatible bundlers reserve `\0`-prefixed IDs for plugin virtual modules,
|
||||
// so Rolldown will not try to resolve these generated `?url` asset modules as files.
|
||||
const NEW_URL_ASSET_PREFIX = "\0new-url-asset:";
|
||||
const WASI_BROWSER_BINDING = path.resolve("./src-js/parser.wasi-browser.js");
|
||||
|
||||
async function main() {
|
||||
const args = parseArgs({
|
||||
@@ -23,7 +24,7 @@ async function main() {
|
||||
platform: "browser",
|
||||
resolve: {
|
||||
alias: {
|
||||
"@oxc-parser/binding-wasm32-wasi": path.resolve("./src-js/parser.wasi-browser.js"),
|
||||
"@oxc-parser/binding-wasm32-wasi": WASI_BROWSER_BINDING,
|
||||
},
|
||||
},
|
||||
plugins: [
|
||||
|
||||
@@ -1,6 +1,12 @@
|
||||
import fs from "node:fs";
|
||||
import { join as pathJoin } from "node:path";
|
||||
|
||||
const filename = "./src-js/bindings.js";
|
||||
import { disableReusedWorkers } from "../../disable-reused-workers.mjs";
|
||||
|
||||
const packageDir = pathJoin(import.meta.dirname, "..");
|
||||
disableReusedWorkers(pathJoin(packageDir, "src-js/parser.wasi-browser.js"));
|
||||
|
||||
const filename = pathJoin(packageDir, "src-js/bindings.js");
|
||||
let data = fs.readFileSync(filename, "utf-8");
|
||||
|
||||
data = data.replace(
|
||||
|
||||
@@ -565,7 +565,7 @@ try {
|
||||
} = await __emnapiInstantiateNapiModule(__wasmFile, {
|
||||
context: __emnapiContext,
|
||||
asyncWorkPoolSize: __asyncWorkPoolSize,
|
||||
reuseWorker: { size: __asyncWorkPoolSize + __workerPoolSize },
|
||||
reuseWorker: false,
|
||||
plugins: [__emnapiAsyncWorkPlugin, __emnapiTSFNPlugin],
|
||||
wasi: __wasi,
|
||||
onCreateWorker() {
|
||||
|
||||
@@ -28,6 +28,7 @@
|
||||
"build-dev": "pnpm run build-wasm-dev && node scripts/patch.js",
|
||||
"build": "pnpm run build-wasm-dev --release && node scripts/patch.js",
|
||||
"build-wasm-dev": "napi build --platform --esm --target wasm32-wasip1-threads --dts playground.wasi.d.cts",
|
||||
"postbuild-wasm-dev": "node scripts/patch-wasi-browser.js",
|
||||
"postbuild": "publint"
|
||||
},
|
||||
"dependencies": {
|
||||
|
||||
@@ -565,7 +565,7 @@ try {
|
||||
} = await __emnapiInstantiateNapiModule(__wasmFile, {
|
||||
context: __emnapiContext,
|
||||
asyncWorkPoolSize: __asyncWorkPoolSize,
|
||||
reuseWorker: { size: __asyncWorkPoolSize + __workerPoolSize },
|
||||
reuseWorker: false,
|
||||
plugins: [__emnapiAsyncWorkPlugin, __emnapiTSFNPlugin],
|
||||
wasi: __wasi,
|
||||
onCreateWorker() {
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
import { join as pathJoin } from "node:path";
|
||||
|
||||
import { disableReusedWorkers } from "../../disable-reused-workers.mjs";
|
||||
|
||||
disableReusedWorkers(pathJoin(import.meta.dirname, "../playground.wasi-browser.js"));
|
||||
@@ -1,7 +1,10 @@
|
||||
import fs from "node:fs";
|
||||
import { join as pathJoin } from "node:path";
|
||||
|
||||
const path = pathJoin(import.meta.dirname, "../playground.wasi-browser.js");
|
||||
import "./patch-wasi-browser.js";
|
||||
|
||||
const packageDir = pathJoin(import.meta.dirname, "..");
|
||||
const path = pathJoin(packageDir, "playground.wasi-browser.js");
|
||||
|
||||
let data = fs.readFileSync(path, "utf-8");
|
||||
data = data.replace(
|
||||
|
||||
@@ -1,7 +1,11 @@
|
||||
import fs from "node:fs";
|
||||
import { join as pathJoin } from "node:path";
|
||||
|
||||
import { disableReusedWorkers } from "../../disable-reused-workers.mjs";
|
||||
|
||||
const packageDir = pathJoin(import.meta.dirname, "..");
|
||||
disableReusedWorkers(pathJoin(packageDir, "transform-react.wasi-browser.js"));
|
||||
|
||||
const path = pathJoin(packageDir, "index.js");
|
||||
|
||||
let data = fs.readFileSync(path, "utf-8");
|
||||
|
||||
@@ -565,7 +565,7 @@ try {
|
||||
} = await __emnapiInstantiateNapiModule(__wasmFile, {
|
||||
context: __emnapiContext,
|
||||
asyncWorkPoolSize: __asyncWorkPoolSize,
|
||||
reuseWorker: { size: __asyncWorkPoolSize + __workerPoolSize },
|
||||
reuseWorker: false,
|
||||
plugins: [__emnapiAsyncWorkPlugin, __emnapiTSFNPlugin],
|
||||
wasi: __wasi,
|
||||
onCreateWorker() {
|
||||
|
||||
@@ -1,7 +1,11 @@
|
||||
import fs from "node:fs";
|
||||
import { join as pathJoin } from "node:path";
|
||||
|
||||
import { disableReusedWorkers } from "../../disable-reused-workers.mjs";
|
||||
|
||||
const packageDir = pathJoin(import.meta.dirname, "..");
|
||||
disableReusedWorkers(pathJoin(packageDir, "transform-relay.wasi-browser.js"));
|
||||
|
||||
const path = pathJoin(packageDir, "index.js");
|
||||
|
||||
let data = fs.readFileSync(path, "utf-8");
|
||||
|
||||
@@ -565,7 +565,7 @@ try {
|
||||
} = await __emnapiInstantiateNapiModule(__wasmFile, {
|
||||
context: __emnapiContext,
|
||||
asyncWorkPoolSize: __asyncWorkPoolSize,
|
||||
reuseWorker: { size: __asyncWorkPoolSize + __workerPoolSize },
|
||||
reuseWorker: false,
|
||||
plugins: [__emnapiAsyncWorkPlugin, __emnapiTSFNPlugin],
|
||||
wasi: __wasi,
|
||||
onCreateWorker() {
|
||||
|
||||
@@ -1,7 +1,12 @@
|
||||
import fs from "node:fs";
|
||||
import { join as pathJoin } from "node:path";
|
||||
|
||||
const path = pathJoin(import.meta.dirname, "../index.js");
|
||||
import { disableReusedWorkers } from "../../disable-reused-workers.mjs";
|
||||
|
||||
const packageDir = pathJoin(import.meta.dirname, "..");
|
||||
disableReusedWorkers(pathJoin(packageDir, "transform.wasi-browser.js"));
|
||||
|
||||
const path = pathJoin(packageDir, "index.js");
|
||||
|
||||
let data = fs.readFileSync(path, "utf-8");
|
||||
data = data.replace(
|
||||
|
||||
@@ -565,7 +565,7 @@ try {
|
||||
} = await __emnapiInstantiateNapiModule(__wasmFile, {
|
||||
context: __emnapiContext,
|
||||
asyncWorkPoolSize: __asyncWorkPoolSize,
|
||||
reuseWorker: { size: __asyncWorkPoolSize + __workerPoolSize },
|
||||
reuseWorker: false,
|
||||
plugins: [__emnapiAsyncWorkPlugin, __emnapiTSFNPlugin],
|
||||
wasi: __wasi,
|
||||
onCreateWorker() {
|
||||
|
||||
Reference in new issue
Block a user