33 lines
1.5 KiB
JavaScript
33 lines
1.5 KiB
JavaScript
|
|
// Copies the one real runtime dependency the CLI bundle can't statically
|
||
|
|
// inline (libsodium-wrappers, and its own dependency libsodium) next to
|
||
|
|
// the bundle, so dist-bundle/ is a small, complete, self-contained
|
||
|
|
// directory -- no npm install needed wherever it ends up.
|
||
|
|
//
|
||
|
|
// Why not just bundle it: libsodium-wrappers' published ESM build follows
|
||
|
|
// a relative import ("./libsodium.mjs") that's broken in that package's
|
||
|
|
// own dist layout -- the exact bug crypto.ts's own comment documents.
|
||
|
|
// Forcing static inlining via a literal require() (the only way to route
|
||
|
|
// esbuild's resolver to the *working* CJS build instead) was tried and
|
||
|
|
// technically resolved, but produced "No secure random number generator
|
||
|
|
// found" at runtime -- inlining the WASM engine breaks its own Node
|
||
|
|
// crypto feature-detection. Shipping the real, unmodified package files
|
||
|
|
// is more reliable than fighting that.
|
||
|
|
import { cpSync, mkdirSync, existsSync } from 'node:fs';
|
||
|
|
import { join, dirname } from 'node:path';
|
||
|
|
import { fileURLToPath } from 'node:url';
|
||
|
|
|
||
|
|
const root = join(dirname(fileURLToPath(import.meta.url)), '..');
|
||
|
|
const outDir = join(root, 'dist-bundle', 'node_modules');
|
||
|
|
mkdirSync(outDir, { recursive: true });
|
||
|
|
|
||
|
|
for (const pkg of ['libsodium-wrappers', 'libsodium']) {
|
||
|
|
const src = join(root, 'node_modules', pkg);
|
||
|
|
if (!existsSync(src)) {
|
||
|
|
console.error(`missing node_modules/${pkg} -- run npm install first`);
|
||
|
|
process.exit(1);
|
||
|
|
}
|
||
|
|
cpSync(src, join(outDir, pkg), { recursive: true });
|
||
|
|
}
|
||
|
|
|
||
|
|
console.log('dist-bundle/node_modules populated (libsodium-wrappers, libsodium)');
|