diff --git a/external/builder/babel-plugin-pdfjs-preprocessor.mjs b/external/builder/babel-plugin-pdfjs-preprocessor.mjs index f2610cf8c..d90613e84 100644 --- a/external/builder/babel-plugin-pdfjs-preprocessor.mjs +++ b/external/builder/babel-plugin-pdfjs-preprocessor.mjs @@ -173,6 +173,36 @@ function babelPluginPDFJSPreprocessor(babel, ctx) { path.replaceWith(t.importExpression(source)); } }, + NewExpression(path) { + const { node } = path; + + if ( + t.isIdentifier(node.callee, { name: "URL" }) && + node.arguments.length === 2 + ) { + const [arg1, arg2] = node.arguments; + + if ( + arg1.type === "StringLiteral" && + arg1.value.endsWith(".wasm") && + arg2.type === "MemberExpression" + ) { + // This statement is generated by the Emscripten Compiler (emcc), + // however we're manually loading wasm-files and we want to ensure + // that bundlers will leave it alone; this *must* include Webpack. + arg1.leadingComments = [ + { + type: "CommentBlock", + value: "webpackIgnore: true", + }, + { + type: "CommentBlock", + value: "@vite-ignore", + }, + ]; + } + } + }, "BlockStatement|StaticBlock": { // Visit node in post-order so that recursive flattening // of blocks works correctly. diff --git a/external/builder/fixtures_babel/ignore-expected.js b/external/builder/fixtures_babel/ignore-expected.js new file mode 100644 index 000000000..0db4463ee --- /dev/null +++ b/external/builder/fixtures_babel/ignore-expected.js @@ -0,0 +1,4 @@ +const wasmUrl = new URL( +/*webpackIgnore: true*/ +/*@vite-ignore*/ +"qwerty.wasm", import.meta.url); diff --git a/external/builder/fixtures_babel/ignore.js b/external/builder/fixtures_babel/ignore.js new file mode 100644 index 000000000..74371deac --- /dev/null +++ b/external/builder/fixtures_babel/ignore.js @@ -0,0 +1 @@ +const wasmUrl = new URL("qwerty.wasm" , import.meta.url);