From 9c12fb6437518d7d65606e2abf278a776f94d44d Mon Sep 17 00:00:00 2001 From: nuthalapativarun Date: Tue, 9 Jun 2026 15:59:30 -0700 Subject: [PATCH] fix(nodejs): treat NAPI_RS_FORCE_WASI as truthy only when set to 'true' (#3519) ## Summary Fixes the `NAPI_RS_FORCE_WASI=false` issue by upgrading `@napi-rs/cli` from `3.5.1` to `3.7.0`. Closes #3267 ## Root Cause In the `native.js` loader generated by `napi build`, the check was: ```js if (!nativeBinding || process.env.NAPI_RS_FORCE_WASI) { ``` In JavaScript, any non-empty string is truthy, so `NAPI_RS_FORCE_WASI=false` (a non-empty string) inadvertently triggered the WASI fallback path. This caused an `ENOENT` error when `lancedb.wasi.cjs` was not present. ## Fix `@napi-rs/cli@3.7.0` ([napi-rs/napi-rs#3236](https://github.com/napi-rs/napi-rs/pull/3236)) introduced a tri-state check in the template that generates `native.js`: **Before (generated by @napi-rs/cli@3.5.1):** ```js if (!nativeBinding || process.env.NAPI_RS_FORCE_WASI) { ``` **After (generated by @napi-rs/cli@3.7.0):** ```js const forceWasi = process.env.NAPI_RS_FORCE_WASI === 'true' || process.env.NAPI_RS_FORCE_WASI === 'error' if (!nativeBinding || forceWasi) { ``` Only the literal string `'true'` (or `'error'` for strict mode) now activates the WASI path. All other values, including `'false'`, `'0'`, or an unset variable, behave as if WASI is not forced. ## Changes - `nodejs/package.json`: bump `@napi-rs/cli` from `3.5.1` to `3.7.0` - `nodejs/package-lock.json` / `nodejs/pnpm-lock.yaml`: update lock files to match The fix is in the upstream napi-rs tool; the generated `native.js` is not committed to this repository and is produced at build time by `napi build`. --- nodejs/package-lock.json | 10 +++++----- nodejs/package.json | 2 +- nodejs/pnpm-lock.yaml | 10 +++++----- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/nodejs/package-lock.json b/nodejs/package-lock.json index 69fc2caae..a803a0f01 100644 --- a/nodejs/package-lock.json +++ b/nodejs/package-lock.json @@ -26,7 +26,7 @@ "@aws-sdk/client-s3": "3.1003.0", "@biomejs/biome": "^1.7.3", "@jest/globals": "^29.7.0", - "@napi-rs/cli": "3.5.1", + "@napi-rs/cli": "3.7.0", "@types/axios": "^0.14.0", "@types/jest": "^29.1.2", "@types/node": "22.7.4", @@ -2942,9 +2942,9 @@ } }, "node_modules/@napi-rs/cli": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/@napi-rs/cli/-/cli-3.5.1.tgz", - "integrity": "sha512-XBfLQRDcB3qhu6bazdMJsecWW55kR85l5/k0af9BIBELXQSsCFU0fzug7PX8eQp6vVdm7W/U3z6uP5WmITB2Gw==", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@napi-rs/cli/-/cli-3.7.0.tgz", + "integrity": "sha512-3d3+rmxlOIV/G1zPWeX4PCxuYnhcCQM2BvY9rtimC8RO0dFR9gtYP+Grov+WoduZtfWRj5N1XvytWeRxxCk5zw==", "dev": true, "license": "MIT", "dependencies": { @@ -2954,7 +2954,7 @@ "@octokit/rest": "^22.0.1", "clipanion": "^4.0.0-rc.4", "colorette": "^2.0.20", - "emnapi": "^1.7.1", + "emnapi": "^1.10.0", "es-toolkit": "^1.41.0", "js-yaml": "^4.1.0", "obug": "^2.0.0", diff --git a/nodejs/package.json b/nodejs/package.json index eef55c9a5..63e4abe10 100644 --- a/nodejs/package.json +++ b/nodejs/package.json @@ -43,7 +43,7 @@ "@aws-sdk/client-s3": "3.1003.0", "@biomejs/biome": "^1.7.3", "@jest/globals": "^29.7.0", - "@napi-rs/cli": "3.5.1", + "@napi-rs/cli": "3.7.0", "@types/axios": "^0.14.0", "@types/jest": "^29.1.2", "@types/node": "22.7.4", diff --git a/nodejs/pnpm-lock.yaml b/nodejs/pnpm-lock.yaml index 7fd58fb19..580331248 100644 --- a/nodejs/pnpm-lock.yaml +++ b/nodejs/pnpm-lock.yaml @@ -31,8 +31,8 @@ importers: specifier: ^29.7.0 version: 29.7.0 '@napi-rs/cli': - specifier: 3.5.1 - version: 3.5.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@types/node@22.7.4) + specifier: 3.7.0 + version: 3.7.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@types/node@22.7.4) '@types/axios': specifier: ^0.14.0 version: 0.14.4 @@ -887,8 +887,8 @@ packages: '@jridgewell/trace-mapping@0.3.31': resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} - '@napi-rs/cli@3.5.1': - resolution: {integrity: sha512-XBfLQRDcB3qhu6bazdMJsecWW55kR85l5/k0af9BIBELXQSsCFU0fzug7PX8eQp6vVdm7W/U3z6uP5WmITB2Gw==} + '@napi-rs/cli@3.7.0': + resolution: {integrity: sha512-3d3+rmxlOIV/G1zPWeX4PCxuYnhcCQM2BvY9rtimC8RO0dFR9gtYP+Grov+WoduZtfWRj5N1XvytWeRxxCk5zw==} engines: {node: '>= 16'} hasBin: true peerDependencies: @@ -4582,7 +4582,7 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.5 - '@napi-rs/cli@3.5.1(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@types/node@22.7.4)': + '@napi-rs/cli@3.7.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@types/node@22.7.4)': dependencies: '@inquirer/prompts': 8.4.3(@types/node@22.7.4) '@napi-rs/cross-toolchain': 1.0.3(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)