@@ -5,25 +5,30 @@ import { dirname, join, resolve } from "node:path";
55import { fileURLToPath } from "node:url" ;
66
77function main ( ) {
8- // Resolve the path to snarkjs browser bundle
9- // Resolve snarkjs package base
8+ // Resolve the path to snarkjs browser bundle.
9+ // We cannot rely on snarkjs/ package.json because it is not exported.
1010 let baseDir ;
1111 try {
12- // Prefer import.meta.resolve for pure ESM; fallback to createRequire for older Node versions
13- let pkgJsonPath ;
14- if ( typeof import . meta. resolve === "function" ) {
15- const resolvedUrl = import . meta. resolve ( "snarkjs/package.json" ) ;
16- pkgJsonPath = fileURLToPath ( resolvedUrl ) ;
17- } else {
18- const require = createRequire ( import . meta. url ) ;
19- pkgJsonPath = require . resolve ( "snarkjs/package.json" ) ;
12+ const require = createRequire ( import . meta. url ) ;
13+ const mainEntry = require . resolve ( "snarkjs" ) ; // e.g. node_modules/snarkjs/dist/main.cjs
14+ // ascend until we reach the package root (folder named 'snarkjs')
15+ let curr = dirname ( mainEntry ) ;
16+ while ( curr && curr !== "/" && curr . includes ( "snarkjs" ) ) {
17+ if ( curr . endsWith ( "snarkjs" ) ) {
18+ baseDir = curr ;
19+ break ;
20+ }
21+ curr = dirname ( curr ) ;
22+ }
23+ if ( ! baseDir ) {
24+ // fallback: one directory up from dist
25+ baseDir = dirname ( dirname ( mainEntry ) ) ;
2026 }
21- baseDir = dirname ( pkgJsonPath ) ;
2227 } catch ( e ) {
2328 console . warn ( "[copy-snarkjs] snarkjs not installed yet; skipping copy" , e ) ;
2429 return ; // don't fail install, maybe another step will install it
2530 }
26- const candidateRelPaths = [ "dist/web/snarkjs.min.js" , "dist/snarkjs.min.js" , "build/snarkjs.min.js" ] ;
31+ const candidateRelPaths = [ "dist/web/snarkjs.min.js" , "dist/snarkjs.min.js" , "build/snarkjs.min.js" , "snarkjs.min.js" ] ;
2732 let src ;
2833 for ( const rel of candidateRelPaths ) {
2934 const cand = join ( baseDir , rel ) ;
0 commit comments