From e407461c0dcd70a6f69f488c91f3f48f0b317cb9 Mon Sep 17 00:00:00 2001 From: nazeh Date: Thu, 25 Jul 2024 14:36:39 +0300 Subject: [PATCH] examples: add preinstall script --- examples/nodejs/package.json | 3 +++ examples/web/auth/package.json | 2 +- examples/web/no-bundler/package.json | 3 ++- .../src/bin/{bundle_wasm.rs => bundle_pubky_npm.rs} | 11 +++++++++-- pubky/src/bin/patch.mjs | 13 +++++++++---- 5 files changed, 24 insertions(+), 8 deletions(-) rename pubky/src/bin/{bundle_wasm.rs => bundle_pubky_npm.rs} (76%) diff --git a/examples/nodejs/package.json b/examples/nodejs/package.json index 5e17eb5..a2359bf 100644 --- a/examples/nodejs/package.json +++ b/examples/nodejs/package.json @@ -1,6 +1,9 @@ { "type": "module", "main": "index.js", + "scripts": { + "preinstall": "cargo run --bin bundle_pubky_npm" + }, "dependencies": { "@synonymdev/pubky":"file:../../pubky/pkg" } diff --git a/examples/web/auth/package.json b/examples/web/auth/package.json index 6f1660b..61e1abc 100644 --- a/examples/web/auth/package.json +++ b/examples/web/auth/package.json @@ -6,7 +6,7 @@ "build": "vite build", "start": "vite serve", "preview": "vite preview", - "wasm": "wasm-pack build ../../../pubky/ --target web" + "preinstall": "cargo run --bin bundle_pubky_npm" }, "dependencies": { "@synonymdev/pubky": "file:../../../pubky/pkg", diff --git a/examples/web/no-bundler/package.json b/examples/web/no-bundler/package.json index e6e1195..68d5fbc 100644 --- a/examples/web/no-bundler/package.json +++ b/examples/web/no-bundler/package.json @@ -1,6 +1,7 @@ { "scripts": { - "start": "vite serve" + "start": "vite serve", + "preinstall": "cargo run --bin bundle_pubky_npm" }, "dependencies": { "@synonymdev/pubky": "file:../../../pubky/pkg", diff --git a/pubky/src/bin/bundle_wasm.rs b/pubky/src/bin/bundle_pubky_npm.rs similarity index 76% rename from pubky/src/bin/bundle_wasm.rs rename to pubky/src/bin/bundle_pubky_npm.rs index 44cf304..b3305d3 100644 --- a/pubky/src/bin/bundle_wasm.rs +++ b/pubky/src/bin/bundle_pubky_npm.rs @@ -1,3 +1,4 @@ +use std::env; use std::io; use std::process::{Command, ExitStatus}; @@ -11,9 +12,12 @@ fn main() { } fn build_wasm(target: &str) -> io::Result { + let manifest_dir = env::var("CARGO_MANIFEST_DIR").expect("CARGO_MANIFEST_DIR not set"); + let output = Command::new("wasm-pack") .args([ "build", + &manifest_dir, "--release", "--target", target, @@ -38,8 +42,11 @@ fn build_wasm(target: &str) -> io::Result { } fn patch() -> io::Result { + let manifest_dir = env::var("CARGO_MANIFEST_DIR").expect("CARGO_MANIFEST_DIR not set"); + + println!("{manifest_dir}/src/bin/patch.mjs"); let output = Command::new("node") - .args(["./src/bin/patch.mjs"]) + .args([format!("{manifest_dir}/src/bin/patch.mjs")]) .output()?; println!( @@ -49,7 +56,7 @@ fn patch() -> io::Result { if !output.status.success() { eprintln!( - "wasm-pack failed: {}", + "patch.mjs failed: {}", String::from_utf8_lossy(&output.stderr) ); } diff --git a/pubky/src/bin/patch.mjs b/pubky/src/bin/patch.mjs index 554c6c8..749b434 100644 --- a/pubky/src/bin/patch.mjs +++ b/pubky/src/bin/patch.mjs @@ -3,12 +3,17 @@ // Based on hacks from [this issue](https://github.com/rustwasm/wasm-pack/issues/1334) import { readFile, writeFile } from "node:fs/promises"; +import { fileURLToPath } from 'node:url'; +import path, { dirname } from 'node:path'; -const cargoTomlContent = await readFile("./Cargo.toml", "utf8"); +const __filename = fileURLToPath(import.meta.url); +const __dirname = dirname(__filename); + +const cargoTomlContent = await readFile(path.join(__dirname, "../../Cargo.toml"), "utf8"); const cargoPackageName = /\[package\]\nname = "(.*?)"/.exec(cargoTomlContent)[1] const name = cargoPackageName.replace(/-/g, '_') -const content = await readFile(`./pkg/nodejs/${name}.js`, "utf8"); +const content = await readFile(path.join(__dirname, `../../pkg/nodejs/${name}.js`), "utf8"); const patched = content // use global TextDecoder TextEncoder @@ -46,9 +51,9 @@ var __toBinary = /* @__PURE__ */ (() => { }; })(); -const bytes = __toBinary(${JSON.stringify(await readFile(`./pkg/nodejs/${name}_bg.wasm`, "base64")) +const bytes = __toBinary(${JSON.stringify(await readFile(path.join(__dirname, `../../pkg/nodejs/${name}_bg.wasm`), "base64")) }); `, ); -await writeFile(`./pkg/${name}.mjs`, patched); +await writeFile(path.join(__dirname, `../../pkg/${name}.mjs`), patched);