Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/master.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ jobs:
- name: Set node version
uses: actions/setup-node@v6
with:
node-version: '20.x'
node-version: '24'
registry-url: "https://registry.npmjs.org"

- name: Install
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/pull_requests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ jobs:
- name: Set node version
uses: actions/setup-node@v6
with:
node-version: '20.x'
node-version: '24'
registry-url: "https://registry.npmjs.org"

- name: Install
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/releases.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ jobs:
- name: Set node version
uses: actions/setup-node@v6
with:
node-version: '20.x'
node-version: '24'
registry-url: "https://registry.npmjs.org"

- name: Install
Expand Down Expand Up @@ -107,7 +107,7 @@ jobs:
- name: Set node version
uses: actions/setup-node@v6
with:
node-version: 18
node-version: 24
registry-url: "https://registry.npmjs.org"

- name: Install
Expand Down
97 changes: 22 additions & 75 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

14 changes: 8 additions & 6 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@
"browserslist": [
"Chrome >= 50",
"Firefox >= 38",
"node >= 22"
"node >= 24"
],
"devDependencies": {
"@babel/eslint-parser": "^7.28.6",
Expand All @@ -52,7 +52,7 @@
"autoprefixer": "^10.4.27",
"babel-loader": "^10.1.1",
"base64-loader": "^1.0.0",
"chromedriver": "^130.0.4",
"chromedriver": "^146.0.6",
"cli-progress": "^3.12.0",
"colors": "^1.4.0",
"compression-webpack-plugin": "^11.1.0",
Expand Down Expand Up @@ -89,8 +89,7 @@
"webpack": "^5.105.4",
"webpack-bundle-analyzer": "^4.10.2",
"webpack-dev-server": "5.0.4",
"webpack-node-externals": "^3.0.0",
"worker-loader": "^3.0.8"
"webpack-node-externals": "^3.0.0"
},
"dependencies": {
"@alexaltea/capstone-js": "^3.0.5",
Expand Down Expand Up @@ -194,8 +193,8 @@
"start": "npx grunt dev",
"build": "npx grunt prod",
"node": "npx grunt node",
"repl": "node --experimental-modules --experimental-json-modules --experimental-specifier-resolution=node --no-experimental-fetch --no-warnings src/node/repl.mjs",
"test": "npx grunt configTests && node --experimental-modules --experimental-json-modules --no-warnings --no-deprecation --openssl-legacy-provider --no-experimental-fetch tests/node/index.mjs && node --experimental-modules --experimental-json-modules --no-warnings --no-deprecation --openssl-legacy-provider --no-experimental-fetch --trace-uncaught tests/operations/index.mjs",
"repl": "node --experimental-modules --experimental-json-modules --experimental-specifier-resolution=node --no-warnings src/node/repl.mjs",
"test": "npx grunt configTests && node --experimental-modules --experimental-json-modules --no-warnings --no-deprecation --openssl-legacy-provider tests/node/index.mjs && node --experimental-modules --experimental-json-modules --no-warnings --no-deprecation --openssl-legacy-provider --trace-uncaught tests/operations/index.mjs",
"testnodeconsumer": "npx grunt testnodeconsumer",
"testui": "npx grunt testui",
"testuidev": "npx nightwatch --env=dev",
Expand All @@ -207,5 +206,8 @@
"tag": "git tag -s \"v$(npm pkg get version | xargs)\" -m \"$(npm pkg get version | xargs)\" && echo \"Created v$(npm pkg get version | xargs), now check and push the tag\"",
"getheapsize": "node -e 'console.log(`node heap limit = ${require(\"v8\").getHeapStatistics().heap_size_limit / (1024 * 1024)} Mb`)'",
"setheapsize": "export NODE_OPTIONS=--max_old_space_size=2048"
},
"engines": {
"node": ">=24 <25"
}
}
4 changes: 1 addition & 3 deletions src/web/waiters/BackgroundWorkerWaiter.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,6 @@
* @license Apache-2.0
*/

import ChefWorker from "worker-loader?inline=no-fallback!../../core/ChefWorker.js";

/**
* Waiter to handle conversations with a ChefWorker in the background.
*/
Expand Down Expand Up @@ -33,7 +31,7 @@ class BackgroundWorkerWaiter {
*/
registerChefWorker() {
log.debug("Registering new background ChefWorker");
this.chefWorker = new ChefWorker();
this.chefWorker = new Worker(new URL("../../core/ChefWorker.js", import.meta.url));
this.chefWorker.addEventListener("message", this.handleChefMessage.bind(this));
this.chefWorker.postMessage({
action: "setLogPrefix",
Expand Down
6 changes: 2 additions & 4 deletions src/web/waiters/InputWaiter.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,6 @@
* @license Apache-2.0
*/

import LoaderWorker from "worker-loader?inline=no-fallback!../workers/LoaderWorker.js";
import InputWorker from "worker-loader?inline=no-fallback!../workers/InputWorker.mjs";
import Utils, {debounce} from "../../core/Utils.mjs";
import {toBase64} from "../../core/lib/Base64.mjs";
import cptable from "codepage";
Expand Down Expand Up @@ -359,7 +357,7 @@ class InputWaiter {
}

log.debug("Adding new InputWorker");
this.inputWorker = new InputWorker();
this.inputWorker = new Worker(new URL("../workers/InputWorker.mjs", import.meta.url));
this.inputWorker.postMessage({
action: "setLogLevel",
data: log.getLevel()
Expand Down Expand Up @@ -405,7 +403,7 @@ class InputWaiter {
return -1;
}
log.debug(`Adding new LoaderWorker (${this.loaderWorkers.length + 1}/${this.maxWorkers}).`);
const newWorker = new LoaderWorker();
const newWorker = new Worker(new URL("../workers/LoaderWorker.js", import.meta.url));
const workerId = this.workerId++;
newWorker.addEventListener("message", this.handleLoaderMessage.bind(this));
newWorker.postMessage({
Expand Down
3 changes: 1 addition & 2 deletions src/web/waiters/OutputWaiter.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ import Dish from "../../core/Dish.mjs";
import {isUTF8, CHR_ENC_SIMPLE_REVERSE_LOOKUP} from "../../core/lib/ChrEnc.mjs";
import {detectFileType} from "../../core/lib/FileType.mjs";
import FileSaver from "file-saver";
import ZipWorker from "worker-loader?inline=no-fallback!../workers/ZipWorker.mjs";

import {
EditorView,
Expand Down Expand Up @@ -987,7 +986,7 @@ class OutputWaiter {
downloadButton.firstElementChild.innerHTML = "autorenew";

log.debug("Creating ZipWorker");
this.zipWorker = new ZipWorker();
this.zipWorker = new Worker(new URL("../workers/ZipWorker.mjs", import.meta.url));
this.zipWorker.postMessage({
action: "setLogLevel",
data: log.getLevel()
Expand Down
6 changes: 2 additions & 4 deletions src/web/waiters/WorkerWaiter.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,6 @@
* @license Apache-2.0
*/

import ChefWorker from "worker-loader?inline=no-fallback!../../core/ChefWorker.js";
import DishWorker from "worker-loader?inline=no-fallback!../workers/DishWorker.mjs";
import { debounce } from "../../core/Utils.mjs";

/**
Expand Down Expand Up @@ -70,7 +68,7 @@ class WorkerWaiter {
}
log.debug("Adding new DishWorker");

this.dishWorker.worker = new DishWorker();
this.dishWorker.worker = new Worker(new URL("../workers/DishWorker.mjs", import.meta.url));
this.dishWorker.worker.addEventListener("message", this.handleDishMessage.bind(this));
this.dishWorker.worker.postMessage({
action: "setLogLevel",
Expand All @@ -96,7 +94,7 @@ class WorkerWaiter {
log.debug(`Adding new ChefWorker (${this.chefWorkers.length + 1}/${this.maxWorkers})`);

// Create a new ChefWorker and send it the docURL
const newWorker = new ChefWorker();
const newWorker = new Worker(new URL("../../core/ChefWorker.js", import.meta.url));
newWorker.addEventListener("message", this.handleChefMessage.bind(this));
newWorker.postMessage({
action: "setLogPrefix",
Expand Down
31 changes: 31 additions & 0 deletions tests/lib/wasmFetchPolyfill.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
/**
* Polyfill for Node.js 22+ where globalThis.fetch is built-in but rejects
* bare filesystem paths. WASM libraries like argon2-browser call fetch() with
* an absolute path (e.g. "/path/to/argon2.wasm") expecting a browser-style
* fallback, but Node.js 22's fetch throws synchronously for non-URL strings.
*
* This wrapper intercepts such calls and serves the file via Node's fs module,
* returning a synthetic Response so the WASM module loads correctly.
*/

import { readFile } from "fs/promises";

if (globalThis.fetch) {
const originalFetch = globalThis.fetch;
globalThis.fetch = async function patchedFetch(url, options) {
const urlStr = typeof url === "string" ?
url :
url instanceof URL ?
url.href :
String(url);
// Intercept bare filesystem paths (absolute POSIX or Windows)
if (urlStr.startsWith("/") || /^[A-Za-z]:[/\\]/.test(urlStr)) {
const buffer = await readFile(urlStr);
return new Response(buffer, {
status: 200,
headers: { "Content-Type": "application/wasm" },
});
}
return originalFetch(url, options);
};
}
1 change: 1 addition & 0 deletions tests/operations/index.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
* @license Apache-2.0
*/

import "../lib/wasmFetchPolyfill.mjs";
import { setLongTestFailure, logTestReport } from "../lib/utils.mjs";

import TestRegister from "../lib/TestRegister.mjs";
Expand Down
Loading