semaphore-protocol / semaphore

A zero-knowledge protocol for anonymous interactions.
https://semaphore.pse.dev
MIT License
887 stars 194 forks source link

`@semaphore-protocol/proof@v4.0.0-beta.x` cannot be used with ES modules #713

Closed cedoor closed 4 months ago

cedoor commented 5 months ago

Describe the bug

@semaphore-protocol/proof doesn't work with ES modules, because, in turn, snarkjs cannot be used with ES modules as some iden3 packages depend on web-worker@1.3.0, which for some reason doesn't include type: "module" in its package.json (and exports its ES modules with .js instead of .mjs).

To Reproduce

import { generateProof } from "@semaphore-protocol/proof"

console.log(generateProof)
{
    "type": "module",
    "dependencies": {
        "@semaphore-protocol/proof": "^4.0.0-beta.2"
    }
}

Error

(node:32193) Warning: To load an ES module, set "type": "module" in the package.json or use the .mjs extension.
(Use `node --trace-warnings ...` to show where the warning was created)
/home/cedoor/Downloads/tests/snarkjs/node_modules/circom_runtime/node_modules/web-worker/node.js:17
import URL from 'url';
^^^^^^

SyntaxError: Cannot use import statement outside a module
    at internalCompileFunction (node:internal/vm:77:18)
    at wrapSafe (node:internal/modules/cjs/loader:1288:20)
    at Module._compile (node:internal/modules/cjs/loader:1340:27)
    at Module._extensions..js (node:internal/modules/cjs/loader:1435:10)
    at Module.load (node:internal/modules/cjs/loader:1207:32)
    at Module._load (node:internal/modules/cjs/loader:1023:12)
    at cjsLoader (node:internal/modules/esm/translators:345:17)
    at ModuleWrap.<anonymous> (node:internal/modules/esm/translators:294:7)
    at ModuleJob.run (node:internal/modules/esm/module_job:218:25)
    at async ModuleLoader.import (node:internal/modules/esm/loader:329:24)

Node.js v20.10.0

Expected behavior

@semaphore-protocol/proof should work when imported into an ES module.

Additional context

Related issues: