Files
wickra/bindings/node/index.js
T
kingchenc 371d338a8b Release 0.1.1: fix Node publish + bump everything
v0.1.0 reached crates.io, PyPI, and the wickra-wasm npm package, but
the wickra Node binding never published because the workflow called
`napi create-npm-dirs` (plural). The actual napi CLI command is
`create-npm-dir` (singular, per target).

Changes that make the next tag's release actually finish:

- workflow: replace the broken step with a loop that runs
  `napi create-npm-dir -t <triple>` for each of our four build targets.

- workflow: every registry publish step now treats "version already
  uploaded" as success. That makes re-runs (and partial-failure
  recoveries) safe instead of failing the whole job.

- bindings/node/package.json: trim the napi.triples list to the four
  platforms we actually build (linux-x64-gnu, darwin-x64, darwin-arm64,
  win32-x64-msvc). The previous defaults+9-extras configuration would
  have made napi prepublish expect platform packages we never produced.

- bindings/node/index.js: switch from local-only binary lookup to the
  proper napi loader that tries the local `.node` file first and falls
  back to the per-platform npm subpackage that's installed as an
  optional dependency in production.

- Versions across all four published packages bumped to 0.1.1 so the
  Node binding can publish for the first time alongside refreshed
  cargo/pypi/wasm artefacts.
2026-05-21 21:06:42 +02:00

51 lines
1.6 KiB
JavaScript

/* eslint-disable */
/* prettier-ignore */
// Platform-aware loader for the Wickra Node native binding.
//
// In production (after `npm install wickra`) the actual `.node` binary
// lives inside a per-platform subpackage that npm installs as an
// optional dependency — e.g. `wickra-linux-x64-gnu`. In development
// (after `napi build --platform`) the binary sits next to this file.
// We try the local path first and fall back to the subpackage so the
// same loader works in both modes.
const { platform, arch } = process;
const { join } = require('node:path');
const { existsSync } = require('node:fs');
const TARGETS = {
'linux-x64': 'linux-x64-gnu',
'darwin-x64': 'darwin-x64',
'darwin-arm64': 'darwin-arm64',
'win32-x64': 'win32-x64-msvc',
};
function load() {
const key = `${platform}-${arch}`;
const target = TARGETS[key];
if (!target) {
throw new Error(
`wickra: this platform/architecture combination is not supported (${key}). ` +
'Open an issue at https://github.com/kingchenc/wickra/issues with your platform details.'
);
}
const localBinary = join(__dirname, `wickra.${target}.node`);
if (existsSync(localBinary)) {
return require(localBinary);
}
try {
return require(`wickra-${target}`);
} catch (err) {
throw new Error(
`wickra: failed to load the native binding for ${key}. ` +
`Expected either ${localBinary} or the wickra-${target} package to be installed. ` +
`Run \`npm install\` again, or build from source with \`npm run build\`. ` +
`Underlying error: ${err.message}`
);
}
}
module.exports = load();