mirror of
https://github.com/UneBaguette/blake3.wasm.git
synced 2026-08-07 00:00:16 +02:00
98 lines
2.6 KiB
Bash
98 lines
2.6 KiB
Bash
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
ROOT="pkg"
|
|
rm -rf "$ROOT"
|
|
|
|
echo "Building bundler target..."
|
|
wasm-pack build --target bundler -d "$ROOT/bundler"
|
|
|
|
echo "Building nodejs target..."
|
|
wasm-pack build --target nodejs -d "$ROOT/node"
|
|
|
|
echo "Building web target..."
|
|
wasm-pack build --target web -d "$ROOT/web"
|
|
|
|
# Generate node-esm wrapper from the nodejs build exports
|
|
echo "Generating node-esm wrapper..."
|
|
mkdir -p "$ROOT/node-esm"
|
|
|
|
cp README.md "$ROOT/README.md"
|
|
|
|
# Extract export names from the nodejs .js file
|
|
EXPORTS=$(grep -oP '(?<=module\.exports\.)\w+' "$ROOT/node/blake3_wasm_rs.js" | sort -u || true)
|
|
|
|
# Fallback: parse from .d.ts if module.exports pattern not found
|
|
if [ -z "$EXPORTS" ]; then
|
|
EXPORTS=$(grep -oP '(?<=export function )\w+' "$ROOT/node/blake3_wasm_rs.d.ts" | sort -u || true)
|
|
fi
|
|
|
|
# Also check for exported classes
|
|
CLASSES=$(grep -oP '(?<=export class )\w+' "$ROOT/node/blake3_wasm_rs.d.ts" | sort -u || true)
|
|
|
|
{
|
|
echo "import { createRequire } from 'module';"
|
|
echo "const require = createRequire(import.meta.url);"
|
|
echo "const mod = require('../node/blake3_wasm_rs.js');"
|
|
echo "export default mod;"
|
|
|
|
for name in $EXPORTS; do
|
|
echo "export const $name = mod.$name;"
|
|
done
|
|
|
|
for name in $CLASSES; do
|
|
echo "export const $name = mod.$name;"
|
|
done
|
|
} > "$ROOT/node-esm/index.mjs"
|
|
|
|
# Clean up wasm-pack generated package.json in each subfolder
|
|
rm -f "$ROOT/bundler/package.json" "$ROOT/node/package.json" "$ROOT/web/package.json"
|
|
rm -f "$ROOT/bundler/.gitignore" "$ROOT/node/.gitignore" "$ROOT/web/.gitignore"
|
|
|
|
# Generate root package.json
|
|
cat > "$ROOT/package.json" << 'EOF'
|
|
{
|
|
"name": "blake3-wasm-rs",
|
|
"version": "0.2.2",
|
|
"description": "BLAKE3 hashing via Rust/WASM - works in Node.js (CJS + ESM), browsers, and bundlers",
|
|
"license": "MIT",
|
|
"repository": {
|
|
"type": "git",
|
|
"url": "https://github.com/UneBaguette/blake3.wasm"
|
|
},
|
|
"exports": {
|
|
".": {
|
|
"node": {
|
|
"require": "./node/blake3_wasm_rs.js",
|
|
"import": "./node-esm/index.mjs"
|
|
},
|
|
"import": "./bundler/blake3_wasm_rs.js",
|
|
"default": "./web/blake3_wasm_rs.js"
|
|
}
|
|
},
|
|
"types": "./bundler/blake3_wasm_rs.d.ts",
|
|
"files": [
|
|
"node/",
|
|
"node-esm/",
|
|
"bundler/",
|
|
"web/",
|
|
"README.md"
|
|
],
|
|
"keywords": [
|
|
"blake3",
|
|
"wasm",
|
|
"hash",
|
|
"cryptography",
|
|
"wasm-bindgen"
|
|
]
|
|
}
|
|
EOF
|
|
|
|
echo ""
|
|
echo "Done! Package ready in $ROOT/"
|
|
echo " node (CJS): $ROOT/node/"
|
|
echo " node (ESM): $ROOT/node-esm/"
|
|
echo " bundler: $ROOT/bundler/"
|
|
echo " web: $ROOT/web/"
|
|
echo ""
|
|
echo "Verify with: cd $ROOT && npm pack --dry-run" |