mirror of
https://github.com/0xbow-io/privacy-pools-core.git
synced 2026-01-09 09:27:58 -05:00
feat: adding rollup bundler and a minimal groth16 prover interface (#32)
Because the SDK is meant to run both in web and nodejs I focused
bundling for those two targets. I chose Rollup.js as a bundler because
it is commonly used for bundling libraries and achives a decent tradeoff
between speed and flexibility.
The nodejs bundle will have the artifacts embedded in the package, while
the web bundle will need to have the artifacts being hosted at
/artifacts/{artifact_name}. The API for the circuits has an async
initializer that abstracts away the platform and loads the binaries.
Once initialized, the `circuits` object is used to initialize the
`ZkOps` class that uses the loaded binaries under the hood.
Observation: ~~currently, to build the bundle, the scripts assume you
have all the circuits artifacts at `src/circuits/artifacts`. The PR was
getting too big so I'll relax that assumption later.~~
EDIT: Build will now succeed without the artifacts because building them
in the ci/cd was way out of scope. I provided a script to install the
artifacts to the bundle build for local testing.
Usage example:
```typescript
import { ZkOps, circuits } from "@privacy-pool-core/sdk";
; (async () => {
await circuits.downloadArtifacts("latest");
const zkOps = new ZkOps(circuits);
const input = {
value: "1",
label: BigInt("0"),
nullifier: BigInt("123"),
secret: BigInt("456"),
};
let r = await zkOps.proveCommitment(input);
console.log(r)
})()
```
This commit is contained in:
12
eslint.config.js
Normal file
12
eslint.config.js
Normal file
@@ -0,0 +1,12 @@
|
||||
import globals from "globals";
|
||||
import pluginJs from "@eslint/js";
|
||||
import tseslint from "typescript-eslint";
|
||||
|
||||
|
||||
/** @type {import('eslint').Linter.Config[]} */
|
||||
export default [
|
||||
{files: ["**/*.{js,mjs,cjs,ts}"]},
|
||||
{languageOptions: { globals: {...globals.browser, ...globals.node} }},
|
||||
pluginJs.configs.recommended,
|
||||
...tseslint.configs.recommended,
|
||||
];
|
||||
@@ -14,8 +14,11 @@
|
||||
"circomspect": "circomspect -L ../../node_modules/circomlib/circuits/comparators.circom -L ../../node_modules/circomlib/circuits/mux1.circom -L ../../node_modules/circomlib/circuits/poseidon.circom ./circuits/*",
|
||||
"info:withdraw": "npx circomkit info withdraw",
|
||||
"info:commitment": "npx circomkit info commitment",
|
||||
"setup:withdraw": "npx circomkit setup withdraw",
|
||||
"setup:commitment": "npx circomkit setup commitment",
|
||||
"setup:ptau": "npx circomkit ptau withdraw",
|
||||
"setup:all": "yarn setup:ptau && yarn setup:withdraw && yarn setup:merkle && yarn setup:commitment",
|
||||
"setup:withdraw": "npx circomkit setup withdraw ptau/powersOfTau28_hez_final_16.ptau",
|
||||
"setup:commitment": "npx circomkit setup commitment ptau/powersOfTau28_hez_final_16.ptau",
|
||||
"setup:merkle": "npx circomkit setup merkleTree ptau/powersOfTau28_hez_final_16.ptau",
|
||||
"prove:withdraw": "npx circomkit prove withdraw default",
|
||||
"prove:commitment": "npx circomkit prove commitment default",
|
||||
"verify:withdraw": "npx circomkit verify withdraw default",
|
||||
|
||||
3
packages/sdk/.gitignore
vendored
3
packages/sdk/.gitignore
vendored
@@ -54,3 +54,6 @@ contracts/cache
|
||||
|
||||
# Coverage
|
||||
lcov.info
|
||||
|
||||
# rollup
|
||||
.rollup.cache
|
||||
|
||||
3
packages/sdk/__mocks__/fs/promises.ts
Normal file
3
packages/sdk/__mocks__/fs/promises.ts
Normal file
@@ -0,0 +1,3 @@
|
||||
import { fs } from "memfs";
|
||||
const promises = fs.promises;
|
||||
export default promises;
|
||||
109
packages/sdk/configs/rollup.config.mjs
Normal file
109
packages/sdk/configs/rollup.config.mjs
Normal file
@@ -0,0 +1,109 @@
|
||||
import path from "path";
|
||||
import commonjs from "@rollup/plugin-commonjs";
|
||||
import { nodeResolve } from "@rollup/plugin-node-resolve";
|
||||
import typescript from "@rollup/plugin-typescript";
|
||||
import json from "@rollup/plugin-json";
|
||||
import inject from "@rollup/plugin-inject";
|
||||
import { dts } from "rollup-plugin-dts";
|
||||
|
||||
const rootOutDir = "dist"
|
||||
const outDirNode = path.join(rootOutDir, "node");
|
||||
const outDirBrowser = path.join(rootOutDir, "esm");
|
||||
|
||||
const typescriptConfig = {
|
||||
tsconfig: path.resolve(`./tsconfig.build.json`),
|
||||
exclude: ["**/*spec.ts"],
|
||||
outputToFilesystem: false,
|
||||
}
|
||||
|
||||
export default [
|
||||
|
||||
{
|
||||
input: "src/index.ts",
|
||||
output: [
|
||||
{
|
||||
dir: outDirBrowser,
|
||||
format: "esm",
|
||||
sourcemap: true,
|
||||
entryFileNames: "[name].mjs"
|
||||
},
|
||||
],
|
||||
plugins: [
|
||||
nodeResolve({
|
||||
exportConditions: ["umd"],
|
||||
browser: true,
|
||||
preferBuiltins: true,
|
||||
}),
|
||||
commonjs({ requireReturnsDefault: "auto" }),
|
||||
json(),
|
||||
typescript({
|
||||
...typescriptConfig,
|
||||
declaration: false,
|
||||
noEmit: true,
|
||||
}),
|
||||
],
|
||||
},
|
||||
|
||||
{
|
||||
input: "src/index.ts",
|
||||
output: [
|
||||
{
|
||||
dir: outDirNode,
|
||||
format: "esm",
|
||||
sourcemap: true,
|
||||
entryFileNames: "[name].mjs"
|
||||
},
|
||||
],
|
||||
plugins: [
|
||||
nodeResolve({
|
||||
exportConditions: ["node"],
|
||||
browser: false,
|
||||
preferBuiltins: true,
|
||||
}),
|
||||
commonjs({ requireReturnsDefault: "auto" }),
|
||||
inject({
|
||||
__filename: path.resolve("src/filename.helper.js"),
|
||||
__dirname: path.resolve("src/dirname.helper.js")
|
||||
}),
|
||||
json(),
|
||||
typescript({
|
||||
...typescriptConfig,
|
||||
declaration: false,
|
||||
noEmit: true,
|
||||
}),
|
||||
],
|
||||
},
|
||||
|
||||
{
|
||||
input: "src/index.ts",
|
||||
output: [
|
||||
{
|
||||
dir: path.join(rootOutDir, "types"),
|
||||
sourcemap: true,
|
||||
},
|
||||
],
|
||||
plugins: [
|
||||
nodeResolve({
|
||||
exportConditions: ["node"],
|
||||
browser: false,
|
||||
preferBuiltins: true,
|
||||
}),
|
||||
commonjs({ requireReturnsDefault: "auto" }),
|
||||
json(),
|
||||
typescript({
|
||||
...typescriptConfig,
|
||||
declaration: true,
|
||||
declarationDir: path.join(rootOutDir, "types"),
|
||||
emitDeclarationOnly: true,
|
||||
}),
|
||||
],
|
||||
},
|
||||
|
||||
{
|
||||
input: path.join(rootOutDir, "types", "src", "index.d.ts"),
|
||||
output: [{ file: path.join(rootOutDir, "index.d.mts"), format: "esm" }],
|
||||
plugins: [dts()],
|
||||
}
|
||||
|
||||
];
|
||||
|
||||
@@ -7,20 +7,42 @@
|
||||
"license": "MIT",
|
||||
"author": "Wonderland",
|
||||
"type": "module",
|
||||
"main": "./dist/src/index.js",
|
||||
"types": "./dist/src/index.d.ts",
|
||||
"main": "./dist/node/index.mjs",
|
||||
"module": "./dist/esm/index.mjs",
|
||||
"browser": "./dist/esm/index.mjs",
|
||||
"types": {
|
||||
"import": "./dist/index.d.mts"
|
||||
},
|
||||
"exports": {
|
||||
"node": {
|
||||
"types": "./dist/index.d.mts",
|
||||
"default": "./dist/node/index.mjs"
|
||||
},
|
||||
"import": {
|
||||
"types": "./dist/index.d.mts",
|
||||
"default": "./dist/esm/index.mjs"
|
||||
},
|
||||
"browser": {
|
||||
"types": "./dist/index.d.mts",
|
||||
"default": "./dist/esm/index.mjs"
|
||||
}
|
||||
},
|
||||
"directories": {
|
||||
"src": "src"
|
||||
},
|
||||
"files": [
|
||||
"dist/*",
|
||||
"src",
|
||||
"package.json",
|
||||
"!**/*.tsbuildinfo"
|
||||
],
|
||||
"scripts": {
|
||||
"build": "tsc -p tsconfig.build.json",
|
||||
"circuits:setup": "cd ../circuits/ && yarn install && yarn compile && yarn setup:all",
|
||||
"circuits:copy": "sh ./scripts/copy_circuits.sh",
|
||||
"build": "yarn clean && rollup -c ./configs/rollup.config.mjs",
|
||||
"build:bundle": "yarn clean && rollup -c ./configs/rollup.config.mjs && yarn circuits:setup && yarn circuits:copy",
|
||||
"check-types": "tsc --noEmit -p ./tsconfig.json",
|
||||
"clean": "rm -rf dist",
|
||||
"clean": "rm -rf dist .rollup.cache tsconfig.build.tsbuildinfo",
|
||||
"format": "prettier --check \"{src,test}/**/*.{js,ts,json}\"",
|
||||
"format:fix": "prettier --write \"{src,test}/**/*.{js,ts,json}\"",
|
||||
"lint": "eslint \"{src,test}/**/*.{js,ts,json}\"",
|
||||
@@ -33,20 +55,35 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"@commitlint/config-conventional": "19.4.1",
|
||||
"@eslint/js": "9.18.0",
|
||||
"@ianvs/prettier-plugin-sort-imports": "4.3.1",
|
||||
"@rollup/plugin-alias": "5.1.1",
|
||||
"@rollup/plugin-commonjs": "28.0.2",
|
||||
"@rollup/plugin-inject": "5.0.5",
|
||||
"@rollup/plugin-json": "6.1.0",
|
||||
"@rollup/plugin-node-resolve": "16.0.0",
|
||||
"@rollup/plugin-typescript": "12.1.2",
|
||||
"@rollup/plugin-wasm": "6.2.2",
|
||||
"@types/node": "20.3.1",
|
||||
"@types/snarkjs": "0.7.9",
|
||||
"@typescript-eslint/eslint-plugin": "7.18.0",
|
||||
"@typescript-eslint/parser": "7.18.0",
|
||||
"@vitest/coverage-v8": "2.0.5",
|
||||
"commitlint": "19.4.1",
|
||||
"eslint": "8.56.0",
|
||||
"eslint": "9.18.0",
|
||||
"eslint-config-prettier": "9.1.0",
|
||||
"eslint-plugin-prettier": "5.2.1",
|
||||
"globals": "15.14.0",
|
||||
"husky": "9.1.5",
|
||||
"lint-staged": "15.2.10",
|
||||
"memfs": "4.17.0",
|
||||
"prettier": "3.3.3",
|
||||
"rollup": "4.30.1",
|
||||
"rollup-plugin-dts": "6.1.1",
|
||||
"snarkjs": "0.7.5",
|
||||
"sort-package-json": "2.10.1",
|
||||
"typescript": "5.5.4",
|
||||
"typescript-eslint": "8.20.0",
|
||||
"vitest": "2.0.5"
|
||||
}
|
||||
}
|
||||
|
||||
13
packages/sdk/scripts/copy_circuits.sh
Normal file
13
packages/sdk/scripts/copy_circuits.sh
Normal file
@@ -0,0 +1,13 @@
|
||||
#!/bin/sh
|
||||
|
||||
CIRCUITS=("merkleTree" "commitment" "withdraw")
|
||||
BUILD_DIR="../circuits/build"
|
||||
DEST_DIR="./dist/node/artifacts"
|
||||
|
||||
mkdir -p "$DEST_DIR"
|
||||
for circuit in "${CIRCUITS[@]}"
|
||||
do
|
||||
cp "$BUILD_DIR/$circuit/groth16_pkey.zkey" "$DEST_DIR/${circuit}.zkey"
|
||||
cp "$BUILD_DIR/$circuit/groth16_vkey.json" "$DEST_DIR/${circuit}.vkey"
|
||||
cp "$BUILD_DIR/$circuit/${circuit}_js/${circuit}.wasm" "$DEST_DIR/"
|
||||
done
|
||||
213
packages/sdk/src/circuits/circuits.impl.ts
Normal file
213
packages/sdk/src/circuits/circuits.impl.ts
Normal file
@@ -0,0 +1,213 @@
|
||||
import { CircuitInitialization, FetchArtifact } from "../internal.js";
|
||||
import {
|
||||
Binaries,
|
||||
CircuitArtifacts,
|
||||
CircuitName,
|
||||
CircuitNameString,
|
||||
CircuitsInterface,
|
||||
circuitToAsset,
|
||||
Version,
|
||||
VersionString,
|
||||
} from "./circuits.interface.js";
|
||||
|
||||
/**
|
||||
* Class representing circuit management and artifact handling.
|
||||
* Implements the CircuitsInterface.
|
||||
*/
|
||||
export class Circuits implements CircuitsInterface {
|
||||
/**
|
||||
* Indicates whether the circuits have been initialized.
|
||||
* @type {boolean}
|
||||
* @protected
|
||||
*/
|
||||
protected initialized: boolean = false;
|
||||
/**
|
||||
* The version of the circuit artifacts being used.
|
||||
* @type {VersionString}
|
||||
* @protected
|
||||
*/
|
||||
protected version: VersionString = Version.Latest;
|
||||
/**
|
||||
* The binaries containing circuit artifacts such as wasm, vkey, and zkey files.
|
||||
* @type {Binaries}
|
||||
* @protected
|
||||
*/
|
||||
protected binaries!: Binaries;
|
||||
/**
|
||||
* The base URL for fetching circuit artifacts.
|
||||
* @type {string}
|
||||
* @protected
|
||||
*/
|
||||
protected baseUrl: string = import.meta.url;
|
||||
|
||||
/**
|
||||
* Determines whether the environment is a browser.
|
||||
* @returns {boolean} True if running in a browser environment, false otherwise.
|
||||
* @protected
|
||||
*/
|
||||
_browser(): boolean {
|
||||
return typeof window !== "undefined";
|
||||
}
|
||||
|
||||
/**
|
||||
* Initializes the circuit manager with binaries and a version.
|
||||
* @param {Binaries} binaries - The binaries containing circuit artifacts.
|
||||
* @param {VersionString} version - The version of the circuit artifacts.
|
||||
* @protected
|
||||
*/
|
||||
protected _initialize(binaries: Binaries, version: VersionString) {
|
||||
this.binaries = binaries;
|
||||
this.version = version;
|
||||
this.initialized = true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Handles initialization of circuit artifacts, fetching them if necessary.
|
||||
* @param {VersionString} [version=Version.latest] - The version of the circuit artifacts.
|
||||
* @throws {CircuitInitialization} If an error occurs during initialization.
|
||||
* @protected
|
||||
* @async
|
||||
*/
|
||||
protected async _handleInitialization(
|
||||
version: VersionString = Version.Latest,
|
||||
) {
|
||||
if (!this.initialized || this.binaries === undefined) {
|
||||
try {
|
||||
await this.initArtifacts(version);
|
||||
} catch (e) {
|
||||
if (e instanceof FetchArtifact) {
|
||||
throw new CircuitInitialization(`${e.name}: ${e.message}`);
|
||||
} else {
|
||||
console.error(e);
|
||||
throw new CircuitInitialization(`UnknownError: ${e}`);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetches a versioned artifact from a given path.
|
||||
* @param {string} artifactPath - The path to the artifact.
|
||||
* @param {VersionString} version - The version of the artifact.
|
||||
* @returns {Promise<Uint8Array>} A promise that resolves to the artifact as a Uint8Array.
|
||||
* @throws {FetchArtifact} If the artifact cannot be fetched.
|
||||
* @protected
|
||||
* @async
|
||||
*/
|
||||
async _fetchVersionedArtifact(artifactPath: string): Promise<Uint8Array> {
|
||||
const artifactUrl = new URL(artifactPath, this.baseUrl);
|
||||
if (this._browser()) {
|
||||
const res = await fetch(artifactUrl);
|
||||
if (res.status !== 200) {
|
||||
throw new FetchArtifact(artifactUrl);
|
||||
}
|
||||
const aBuf = await res.arrayBuffer();
|
||||
return new Uint8Array(aBuf);
|
||||
} else {
|
||||
try {
|
||||
const fs = (await import("node:fs/promises")).default;
|
||||
const buf = await fs.readFile(artifactUrl);
|
||||
return new Uint8Array(buf);
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
throw new FetchArtifact(artifactUrl);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Downloads and returns the circuit artifacts for a specific circuit.
|
||||
* @param {CircuitNameString} circuitName - The name of the circuit.
|
||||
* @returns {Promise<CircuitArtifacts>} A promise that resolves to the circuit artifacts.
|
||||
* @protected
|
||||
* @async
|
||||
*/
|
||||
async _downloadCircuitArtifacts(
|
||||
circuitName: CircuitNameString,
|
||||
): Promise<CircuitArtifacts> {
|
||||
const assetName = circuitToAsset[circuitName];
|
||||
|
||||
const [wasm, vkey, zkey] = await Promise.all([
|
||||
this._fetchVersionedArtifact(["artifacts", assetName.wasm].join("/")),
|
||||
this._fetchVersionedArtifact(["artifacts", assetName.vkey].join("/")),
|
||||
this._fetchVersionedArtifact(["artifacts", assetName.zkey].join("/")),
|
||||
]);
|
||||
return { wasm, vkey, zkey };
|
||||
}
|
||||
|
||||
/**
|
||||
* Downloads all circuit artifacts for the specified version.
|
||||
* @param {VersionString} version - The version of the artifacts.
|
||||
* @returns {Promise<Binaries>} A promise that resolves to the binaries containing all circuit artifacts.
|
||||
* @async
|
||||
*/
|
||||
// prettier-ignore
|
||||
async downloadArtifacts(version: VersionString): Promise<Binaries> { // eslint-disable-line @typescript-eslint/no-unused-vars
|
||||
const [commitment, merkleTree, withdraw] = await Promise.all([
|
||||
this._downloadCircuitArtifacts(CircuitName.Commitment),
|
||||
this._downloadCircuitArtifacts(CircuitName.MerkleTree),
|
||||
this._downloadCircuitArtifacts(CircuitName.Withdraw),
|
||||
]);
|
||||
return {
|
||||
commitment,
|
||||
merkleTree,
|
||||
withdraw,
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Initializes the circuit artifacts for the specified version.
|
||||
* @param {VersionString} version - The version of the artifacts.
|
||||
* @returns {Promise<void>} A promise that resolves when initialization is complete.
|
||||
* @async
|
||||
*/
|
||||
async initArtifacts(version: VersionString): Promise<void> {
|
||||
const binaries = await this.downloadArtifacts(version);
|
||||
this._initialize(binaries, version);
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the verification key for a specified circuit.
|
||||
* @param {CircuitNameString} circuitName - The name of the circuit.
|
||||
* @param {VersionString} [version=Version.latest] - The version of the artifacts.
|
||||
* @returns {Promise<Uint8Array>} A promise that resolves to the verification key.
|
||||
* @async
|
||||
*/
|
||||
async getVerificationKey(
|
||||
circuitName: CircuitNameString,
|
||||
version: VersionString = Version.Latest,
|
||||
): Promise<Uint8Array> {
|
||||
await this._handleInitialization(version);
|
||||
return this.binaries[circuitName]?.vkey;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the proving key for a specified circuit.
|
||||
* @param {CircuitNameString} circuitName - The name of the circuit.
|
||||
* @param {VersionString} [version=Version.latest] - The version of the artifacts.
|
||||
* @returns {Promise<Uint8Array>} A promise that resolves to the proving key.
|
||||
* @async
|
||||
*/
|
||||
async getProvingKey(
|
||||
circuitName: CircuitNameString,
|
||||
version: VersionString = Version.Latest,
|
||||
): Promise<Uint8Array> {
|
||||
await this._handleInitialization(version);
|
||||
return this.binaries[circuitName]?.zkey;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the wasm file for a specified circuit.
|
||||
* @param {CircuitNameString} circuitName - The name of the circuit.
|
||||
* @param {VersionString} [version=Version.latest] - The version of the artifacts.
|
||||
* @returns {Promise<Uint8Array>} A promise that resolves to the wasm file.
|
||||
* @async
|
||||
*/
|
||||
async getWasm(
|
||||
circuitName: CircuitNameString,
|
||||
version: VersionString = Version.Latest,
|
||||
): Promise<Uint8Array> {
|
||||
await this._handleInitialization(version);
|
||||
return this.binaries[circuitName]?.wasm;
|
||||
}
|
||||
}
|
||||
162
packages/sdk/src/circuits/circuits.interface.ts
Normal file
162
packages/sdk/src/circuits/circuits.interface.ts
Normal file
@@ -0,0 +1,162 @@
|
||||
/**
|
||||
* Enum representing available versions of circuit artifacts.
|
||||
*/
|
||||
export enum Version {
|
||||
/**
|
||||
* The latest version of the circuit artifacts.
|
||||
*/
|
||||
Latest = "latest",
|
||||
}
|
||||
|
||||
/**
|
||||
* Type representing a version string, which is a string literal derived from the Version enum.
|
||||
*/
|
||||
export type VersionString = `${Version}`;
|
||||
|
||||
/**
|
||||
* Enum representing the names of available circuits.
|
||||
*/
|
||||
export enum CircuitName {
|
||||
/**
|
||||
* Circuit for commitments.
|
||||
*/
|
||||
Commitment = "commitment",
|
||||
/**
|
||||
* Circuit for Merkle tree operations.
|
||||
*/
|
||||
MerkleTree = "merkleTree",
|
||||
/**
|
||||
* Circuit for withdrawal operations.
|
||||
*/
|
||||
Withdraw = "withdraw",
|
||||
}
|
||||
|
||||
/**
|
||||
* Type representing a circuit name string, which is a string literal derived from the CircuitName enum.
|
||||
*/
|
||||
export type CircuitNameString = `${CircuitName}`;
|
||||
|
||||
/**
|
||||
* Interface representing the artifacts associated with a circuit.
|
||||
*/
|
||||
export interface CircuitArtifacts {
|
||||
/**
|
||||
* The precompiled wasm file for the circuit.
|
||||
* @type {Uint8Array}
|
||||
*/
|
||||
wasm: Uint8Array;
|
||||
/**
|
||||
* The verification key for the circuit.
|
||||
* @type {Uint8Array}
|
||||
*/
|
||||
vkey: Uint8Array;
|
||||
/**
|
||||
* The proving key for the circuit.
|
||||
* @type {Uint8Array}
|
||||
*/
|
||||
zkey: Uint8Array;
|
||||
}
|
||||
|
||||
/**
|
||||
* Type representing the mapping of circuit names to their respective asset file paths.
|
||||
*/
|
||||
export type Circ2Asset = {
|
||||
[key in CircuitName]: {
|
||||
/**
|
||||
* The filename of the compiled wasm file.
|
||||
*/
|
||||
wasm: string;
|
||||
/**
|
||||
* The filename of the verification key file.
|
||||
*/
|
||||
vkey: string;
|
||||
/**
|
||||
* The filename of the proving key file.
|
||||
*/
|
||||
zkey: string;
|
||||
};
|
||||
};
|
||||
|
||||
/**
|
||||
* Mapping of circuit names to their respective asset file paths.
|
||||
* @const
|
||||
*/
|
||||
export const circuitToAsset: Circ2Asset = {
|
||||
[CircuitName.Commitment]: {
|
||||
wasm: "commitment.wasm",
|
||||
vkey: "commitment.vkey",
|
||||
zkey: "commitment.zkey",
|
||||
},
|
||||
[CircuitName.MerkleTree]: {
|
||||
wasm: "merkleTree.wasm",
|
||||
vkey: "merkleTree.vkey",
|
||||
zkey: "merkleTree.zkey",
|
||||
},
|
||||
[CircuitName.Withdraw]: {
|
||||
wasm: "withdraw.wasm",
|
||||
vkey: "withdraw.vkey",
|
||||
zkey: "withdraw.zkey",
|
||||
},
|
||||
} as const;
|
||||
|
||||
/**
|
||||
* Type representing the mapping of circuit name strings to their associated circuit artifacts.
|
||||
*/
|
||||
export type Binaries = { [key in CircuitNameString]: CircuitArtifacts };
|
||||
|
||||
/**
|
||||
* Interface defining the methods required for managing circuits and their artifacts.
|
||||
*/
|
||||
export interface CircuitsInterface {
|
||||
/**
|
||||
* Downloads all artifacts for the specified version of circuits.
|
||||
* @param {VersionString} version - The version of the artifacts to download.
|
||||
* @returns {Promise<Binaries>} A promise that resolves to the binaries containing all circuit artifacts.
|
||||
* @async
|
||||
*/
|
||||
downloadArtifacts(version: VersionString): Promise<Binaries>;
|
||||
|
||||
/**
|
||||
* Initializes the artifacts for the specified version of circuits.
|
||||
* @param {VersionString} version - The version of the artifacts to initialize.
|
||||
* @returns {Promise<void>} A promise that resolves when initialization is complete.
|
||||
* @async
|
||||
*/
|
||||
initArtifacts(version: VersionString): Promise<void>;
|
||||
|
||||
/**
|
||||
* Retrieves the verification key for a specified circuit.
|
||||
* @param {CircuitNameString} circuitName - The name of the circuit.
|
||||
* @param {VersionString} [version] - The version of the artifacts (defaults to the latest).
|
||||
* @returns {Promise<Uint8Array>} A promise that resolves to the verification key.
|
||||
* @async
|
||||
*/
|
||||
getVerificationKey(
|
||||
circuitName: CircuitNameString,
|
||||
version?: VersionString,
|
||||
): Promise<Uint8Array>;
|
||||
|
||||
/**
|
||||
* Retrieves the proving key for a specified circuit.
|
||||
* @param {CircuitNameString} circuitName - The name of the circuit.
|
||||
* @param {VersionString} [version] - The version of the artifacts (defaults to the latest).
|
||||
* @returns {Promise<Uint8Array>} A promise that resolves to the proving key.
|
||||
* @async
|
||||
*/
|
||||
getProvingKey(
|
||||
circuitName: CircuitNameString,
|
||||
version?: VersionString,
|
||||
): Promise<Uint8Array>;
|
||||
|
||||
/**
|
||||
* Retrieves the wasm file for a specified circuit.
|
||||
* @param {CircuitNameString} circuitName - The name of the circuit.
|
||||
* @param {VersionString} [version] - The version of the artifacts (defaults to the latest).
|
||||
* @returns {Promise<Uint8Array>} A promise that resolves to the wasm file.
|
||||
* @async
|
||||
*/
|
||||
getWasm(
|
||||
circuitName: CircuitNameString,
|
||||
version?: VersionString,
|
||||
): Promise<Uint8Array>;
|
||||
}
|
||||
2
packages/sdk/src/circuits/index.ts
Normal file
2
packages/sdk/src/circuits/index.ts
Normal file
@@ -0,0 +1,2 @@
|
||||
export { Circuits } from "./circuits.impl.js";
|
||||
export type { CircuitsInterface } from "./circuits.interface.js";
|
||||
4
packages/sdk/src/dirname.helper.ts
Normal file
4
packages/sdk/src/dirname.helper.ts
Normal file
@@ -0,0 +1,4 @@
|
||||
import { dirname } from "path";
|
||||
import __filename from "./filename.helper.js";
|
||||
|
||||
export default dirname(__filename);
|
||||
@@ -0,0 +1,6 @@
|
||||
export class CircuitInitialization extends Error {
|
||||
constructor(message: string) {
|
||||
super(`There was an error initializing the circuits: ${message}`);
|
||||
this.name = "CircuitInitialization";
|
||||
}
|
||||
}
|
||||
7
packages/sdk/src/exceptions/fetchArtifacts.exception.ts
Normal file
7
packages/sdk/src/exceptions/fetchArtifacts.exception.ts
Normal file
@@ -0,0 +1,7 @@
|
||||
export class FetchArtifact extends Error {
|
||||
constructor(artifact: URL) {
|
||||
const message = `Encountered error while loading artifact at ${artifact.toString()}.\nIf web, make sure assets are hosted from /artifacts.\nIf Node, make sure the assets were bundled correctly at dist/node/artifacts/`;
|
||||
super(message);
|
||||
this.name = "FetchArtifact";
|
||||
}
|
||||
}
|
||||
@@ -1 +1,3 @@
|
||||
export * from "./invalidRpcUrl.exception.js";
|
||||
export * from "./fetchArtifacts.exception.js";
|
||||
export * from "./circuitInitialization.exception.js";
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
export class InvalidRpcUrl extends Error {
|
||||
constructor(url: string) {
|
||||
super(`${url} is invalid`);
|
||||
this.name = "InvalidRpcUrl";
|
||||
}
|
||||
constructor(url: string) {
|
||||
super(`${url} is invalid`);
|
||||
this.name = "InvalidRpcUrl";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,3 +3,6 @@ export type { IBlockchainProvider, Address } from "./internal.js";
|
||||
export { InvalidRpcUrl } from "./internal.js";
|
||||
|
||||
export { BlockchainProvider } from "./internal.js";
|
||||
|
||||
export { ZkOps } from "./zkops.js";
|
||||
export { type CircuitsInterface, Circuits } from "./internal.js";
|
||||
|
||||
4
packages/sdk/src/filename.helper.ts
Normal file
4
packages/sdk/src/filename.helper.ts
Normal file
@@ -0,0 +1,4 @@
|
||||
import { fileURLToPath } from "url";
|
||||
|
||||
const __filename = fileURLToPath(import.meta.url);
|
||||
export default __filename;
|
||||
@@ -2,3 +2,4 @@ export type { Address } from "viem";
|
||||
export * from "./exceptions/index.js";
|
||||
export * from "./interfaces/index.js";
|
||||
export * from "./providers/index.js";
|
||||
export * from "./circuits/index.js";
|
||||
|
||||
41
packages/sdk/src/zkops.ts
Normal file
41
packages/sdk/src/zkops.ts
Normal file
@@ -0,0 +1,41 @@
|
||||
import * as snarkjs from "snarkjs";
|
||||
import { CircuitSignals, Groth16Proof, PublicSignals } from "snarkjs";
|
||||
import {
|
||||
CircuitName,
|
||||
CircuitsInterface,
|
||||
} from "./circuits/circuits.interface.js";
|
||||
|
||||
/**
|
||||
* Class representing zero-knowledge operations.
|
||||
*/
|
||||
export class ZkOps {
|
||||
/**
|
||||
* The circuits interface providing access to circuit-related resources.
|
||||
* @type {CircuitsInterface}
|
||||
*/
|
||||
circuits: CircuitsInterface;
|
||||
|
||||
/**
|
||||
* Constructs a new instance of the ZkOps class.
|
||||
* @param {CircuitsInterface} circuits - An interface for accessing circuit-related resources.
|
||||
*/
|
||||
constructor(circuits: CircuitsInterface) {
|
||||
this.circuits = circuits;
|
||||
}
|
||||
|
||||
/**
|
||||
* Generates a zero-knowledge proof for a commitment circuit.
|
||||
*
|
||||
* @param {CircuitSignals} signals - The input signals for the circuit (e.g., commitment signals).
|
||||
* @returns {Promise<{ proof: Groth16Proof; publicSignals: PublicSignals }>}
|
||||
* A promise that resolves to an object containing the proof and public signals.
|
||||
* @async
|
||||
*/
|
||||
async proveCommitment(
|
||||
signals: CircuitSignals, // TODO: type commitment signals
|
||||
): Promise<{ proof: Groth16Proof; publicSignals: PublicSignals }> {
|
||||
const wasm = await this.circuits.getWasm(CircuitName.Commitment);
|
||||
const zkey = await this.circuits.getProvingKey(CircuitName.Commitment);
|
||||
return await snarkjs.groth16.fullProve(signals, wasm, zkey);
|
||||
}
|
||||
}
|
||||
35
packages/sdk/test/mocks/circuits.mock.ts
Normal file
35
packages/sdk/test/mocks/circuits.mock.ts
Normal file
@@ -0,0 +1,35 @@
|
||||
import { vi } from "vitest";
|
||||
import {
|
||||
Binaries,
|
||||
CircuitArtifacts,
|
||||
VersionString,
|
||||
} from "../../src/circuits/circuits.interface.js";
|
||||
import { Circuits } from "../../src/circuits/index.js";
|
||||
|
||||
export const binariesMock: Binaries = {
|
||||
withdraw: vi.fn() as any as CircuitArtifacts, // eslint-disable-line @typescript-eslint/no-explicit-any
|
||||
merkleTree: vi.fn() as any as CircuitArtifacts, // eslint-disable-line @typescript-eslint/no-explicit-any
|
||||
commitment: vi.fn() as any as CircuitArtifacts, // eslint-disable-line @typescript-eslint/no-explicit-any
|
||||
};
|
||||
|
||||
export class CircuitsMock extends Circuits {
|
||||
override _initialize(binaries: Binaries, version: VersionString) {
|
||||
super._initialize(binaries, version);
|
||||
}
|
||||
|
||||
override async _handleInitialization(version: VersionString) {
|
||||
await super._handleInitialization(version);
|
||||
}
|
||||
|
||||
get introspectInitialized(): boolean {
|
||||
return this.initialized;
|
||||
}
|
||||
|
||||
get introspectVersion(): string {
|
||||
return this.version;
|
||||
}
|
||||
|
||||
get introspectBinaries(): { [key: string]: CircuitArtifacts } {
|
||||
return this.binaries;
|
||||
}
|
||||
}
|
||||
1
packages/sdk/test/mocks/index.ts
Normal file
1
packages/sdk/test/mocks/index.ts
Normal file
@@ -0,0 +1 @@
|
||||
export { binariesMock, CircuitsMock } from "./circuits.mock.js";
|
||||
53
packages/sdk/test/unit/circuits.browser.spec.ts
Normal file
53
packages/sdk/test/unit/circuits.browser.spec.ts
Normal file
@@ -0,0 +1,53 @@
|
||||
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
|
||||
|
||||
import { Circuits } from "../../src/circuits/index.js";
|
||||
import { FetchArtifact } from "../../src/internal.js";
|
||||
import { CircuitsMock } from "../mocks/index.js";
|
||||
|
||||
class CircuitsMockBrowser extends CircuitsMock {
|
||||
override _browser() {
|
||||
return true;
|
||||
}
|
||||
override baseUrl: string = "http://0.0.0.0:8888";
|
||||
}
|
||||
|
||||
describe("Circuits for browser", () => {
|
||||
afterEach(() => {
|
||||
vi.clearAllMocks();
|
||||
});
|
||||
|
||||
let circuits: Circuits;
|
||||
|
||||
beforeEach(() => {
|
||||
circuits = new CircuitsMockBrowser();
|
||||
});
|
||||
|
||||
it("test server should 'pong' back", async () => {
|
||||
expect(
|
||||
await (await fetch("http://0.0.0.0:8888/ping")).text(),
|
||||
).toStrictEqual("pong");
|
||||
});
|
||||
|
||||
it("test server serves mock files", async () => {
|
||||
const u8s = new Uint8Array([0, 1, 2, 3]);
|
||||
expect(
|
||||
await (
|
||||
await fetch("http://0.0.0.0:8888/artifacts/withdraw.wasm")
|
||||
).arrayBuffer(),
|
||||
).toStrictEqual(u8s.buffer);
|
||||
});
|
||||
|
||||
it("throws a FetchArtifact exception if artifact is not found at URI", async () => {
|
||||
expect(async () => {
|
||||
return await circuits._fetchVersionedArtifact(
|
||||
"artifacts/artifact_not_here.wasm",
|
||||
);
|
||||
}).rejects.toThrowError(FetchArtifact);
|
||||
});
|
||||
|
||||
it("loads artifact if correctly served", async () => {
|
||||
expect(
|
||||
circuits._fetchVersionedArtifact("artifacts/withdraw.wasm"),
|
||||
).resolves.toBeInstanceOf(Uint8Array);
|
||||
});
|
||||
});
|
||||
48
packages/sdk/test/unit/circuits.node.spec.ts
Normal file
48
packages/sdk/test/unit/circuits.node.spec.ts
Normal file
@@ -0,0 +1,48 @@
|
||||
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
|
||||
|
||||
import { fs, vol } from "memfs";
|
||||
import { Circuits } from "../../src/circuits/index.js";
|
||||
import { FetchArtifact } from "../../src/internal.js";
|
||||
import { CircuitsMock } from "../mocks/index.js";
|
||||
|
||||
vi.mock("node:fs/promises");
|
||||
|
||||
const ARTIFACT_DIR = "/dist/node/artifacts";
|
||||
const WASM_PATH = `${ARTIFACT_DIR}/withdraw.wasm`;
|
||||
|
||||
class CircuitsMockNode extends CircuitsMock {
|
||||
override baseUrl: string = `file://${ARTIFACT_DIR}`;
|
||||
}
|
||||
|
||||
describe("Circuits for Node", () => {
|
||||
let circuits: Circuits;
|
||||
afterEach(() => {
|
||||
vi.clearAllMocks();
|
||||
});
|
||||
|
||||
beforeEach(() => {
|
||||
vol.reset();
|
||||
fs.mkdirSync(ARTIFACT_DIR, { recursive: true });
|
||||
fs.writeFileSync(WASM_PATH, "somedata");
|
||||
circuits = new CircuitsMockNode();
|
||||
});
|
||||
|
||||
it("virtual file exists", () => {
|
||||
expect(fs.existsSync(WASM_PATH)).toStrictEqual(true);
|
||||
expect(fs.existsSync("non_existent_file")).toStrictEqual(false);
|
||||
});
|
||||
|
||||
it("throws a FetchArtifact exception if artifact is not found in filesystem", async () => {
|
||||
expect(async () => {
|
||||
return await circuits._fetchVersionedArtifact(
|
||||
"artifacts/artifact_not_here.wasm",
|
||||
);
|
||||
}).rejects.toThrowError(FetchArtifact);
|
||||
});
|
||||
|
||||
it("loads artifact if it exists on filesystem", async () => {
|
||||
expect(
|
||||
circuits._fetchVersionedArtifact("artifacts/withdraw.wasm"),
|
||||
).resolves.toBeInstanceOf(Uint8Array);
|
||||
});
|
||||
});
|
||||
148
packages/sdk/test/unit/circuits.spec.ts
Normal file
148
packages/sdk/test/unit/circuits.spec.ts
Normal file
@@ -0,0 +1,148 @@
|
||||
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
|
||||
|
||||
import { CircuitName } from "../../src/circuits/circuits.interface.js";
|
||||
import { CircuitInitialization, FetchArtifact } from "../../src/internal.js";
|
||||
import { CircuitsMock, binariesMock } from "../mocks/index.js";
|
||||
|
||||
describe("Circuits", () => {
|
||||
afterEach(() => {
|
||||
vi.clearAllMocks();
|
||||
});
|
||||
|
||||
describe("Initialization", () => {
|
||||
let circuits: CircuitsMock;
|
||||
|
||||
beforeEach(() => {
|
||||
circuits = new CircuitsMock();
|
||||
});
|
||||
|
||||
it("creates a new circuit handler, uninitialized", () => {
|
||||
expect(circuits).toBeDefined();
|
||||
expect(circuits.introspectVersion).toStrictEqual("latest");
|
||||
expect(circuits.introspectInitialized).toStrictEqual(false);
|
||||
expect(circuits.introspectBinaries).toStrictEqual(undefined);
|
||||
});
|
||||
});
|
||||
|
||||
describe("handles initialization correctly", () => {
|
||||
let circuits: CircuitsMock;
|
||||
const fetchArtifactError = new FetchArtifact(
|
||||
new URL("http://test.com/artifact"),
|
||||
);
|
||||
|
||||
beforeEach(() => {
|
||||
circuits = new CircuitsMock();
|
||||
});
|
||||
|
||||
it("downloads mock artifacts and initializes correctly", async () => {
|
||||
const downloadArtifactsSpy = vi
|
||||
.spyOn(circuits, "downloadArtifacts")
|
||||
.mockResolvedValue(binariesMock);
|
||||
const version = "latest";
|
||||
await circuits.initArtifacts(version);
|
||||
expect(circuits).toBeDefined();
|
||||
expect(circuits.introspectVersion).toStrictEqual(version);
|
||||
expect(circuits.introspectInitialized).toStrictEqual(true);
|
||||
expect(circuits.introspectBinaries).toStrictEqual(binariesMock);
|
||||
expect(downloadArtifactsSpy.mock.calls.length).toStrictEqual(1);
|
||||
});
|
||||
|
||||
it("_initialize sets up 'binaries', 'version', 'initialized'", () => {
|
||||
circuits._initialize(binariesMock, "latest");
|
||||
expect(circuits.introspectVersion).toStrictEqual("latest");
|
||||
expect(circuits.introspectInitialized).toStrictEqual(true);
|
||||
expect(circuits.introspectBinaries).toStrictEqual(binariesMock);
|
||||
});
|
||||
|
||||
it("_downloadCircuitArtifacts raises FetchArtifact if _fetchVersionedArtifact throws", () => {
|
||||
const fetchVersionedSpy = vi
|
||||
.spyOn(circuits, "_fetchVersionedArtifact")
|
||||
.mockRejectedValue(fetchArtifactError);
|
||||
expect(
|
||||
async () =>
|
||||
await circuits._downloadCircuitArtifacts(CircuitName.Withdraw),
|
||||
).rejects.toThrowError(FetchArtifact);
|
||||
expect(fetchVersionedSpy).toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it("downloadArtifacts raises FetchArtifact if _downloadCircuitArtifacts throws", () => {
|
||||
const downloadCircuitArtifactsSpy = vi
|
||||
.spyOn(circuits, "_downloadCircuitArtifacts")
|
||||
.mockRejectedValue(fetchArtifactError);
|
||||
expect(
|
||||
async () => await circuits.downloadArtifacts("latest"),
|
||||
).rejects.toThrowError(FetchArtifact);
|
||||
expect(downloadCircuitArtifactsSpy).toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it("initArtifacts raises FetchArtifact", () => {
|
||||
const downloadArtifactsSpy = vi
|
||||
.spyOn(circuits, "downloadArtifacts")
|
||||
.mockRejectedValue(fetchArtifactError);
|
||||
expect(
|
||||
async () => await circuits.initArtifacts("latest"),
|
||||
).rejects.toThrowError(FetchArtifact);
|
||||
expect(downloadArtifactsSpy).toHaveBeenCalled();
|
||||
expect(downloadArtifactsSpy).toHaveBeenCalledOnce();
|
||||
expect(downloadArtifactsSpy).toHaveBeenCalledWith("latest");
|
||||
});
|
||||
|
||||
it("_handleInitialization raises CircuitInitialization error when something happens", () => {
|
||||
vi.spyOn(circuits, "initArtifacts").mockRejectedValue(fetchArtifactError);
|
||||
expect(
|
||||
async () => await circuits._handleInitialization("latest"),
|
||||
).rejects.toThrowError(CircuitInitialization);
|
||||
vi.spyOn(circuits, "initArtifacts").mockRejectedValue(
|
||||
new Error("DifferentError"),
|
||||
);
|
||||
expect(
|
||||
async () => await circuits._handleInitialization("latest"),
|
||||
).rejects.toThrowError(CircuitInitialization);
|
||||
});
|
||||
});
|
||||
|
||||
describe("artifact getters", () => {
|
||||
let circuits: CircuitsMock;
|
||||
|
||||
beforeEach(() => {
|
||||
circuits = new CircuitsMock();
|
||||
vi.spyOn(circuits, "downloadArtifacts").mockResolvedValue(binariesMock);
|
||||
});
|
||||
|
||||
it("returns wasm", async () => {
|
||||
expect(await circuits.getWasm(CircuitName.Withdraw)).toStrictEqual(
|
||||
binariesMock.withdraw.wasm,
|
||||
);
|
||||
expect(await circuits.getWasm(CircuitName.Commitment)).toStrictEqual(
|
||||
binariesMock.commitment.wasm,
|
||||
);
|
||||
expect(await circuits.getWasm(CircuitName.MerkleTree)).toStrictEqual(
|
||||
binariesMock.merkleTree.wasm,
|
||||
);
|
||||
});
|
||||
|
||||
it("returns proving key", async () => {
|
||||
expect(await circuits.getProvingKey(CircuitName.Withdraw)).toStrictEqual(
|
||||
binariesMock.withdraw.zkey,
|
||||
);
|
||||
expect(
|
||||
await circuits.getProvingKey(CircuitName.Commitment),
|
||||
).toStrictEqual(binariesMock.commitment.zkey);
|
||||
expect(
|
||||
await circuits.getProvingKey(CircuitName.MerkleTree),
|
||||
).toStrictEqual(binariesMock.merkleTree.zkey);
|
||||
});
|
||||
|
||||
it("returns verifying key", async () => {
|
||||
expect(
|
||||
await circuits.getVerificationKey(CircuitName.Withdraw),
|
||||
).toStrictEqual(binariesMock.withdraw.vkey);
|
||||
expect(
|
||||
await circuits.getVerificationKey(CircuitName.Commitment),
|
||||
).toStrictEqual(binariesMock.commitment.vkey);
|
||||
expect(
|
||||
await circuits.getVerificationKey(CircuitName.MerkleTree),
|
||||
).toStrictEqual(binariesMock.merkleTree.vkey);
|
||||
});
|
||||
});
|
||||
});
|
||||
39
packages/sdk/test/unit/serve-artifacts.ts
Normal file
39
packages/sdk/test/unit/serve-artifacts.ts
Normal file
@@ -0,0 +1,39 @@
|
||||
import http from "node:http";
|
||||
|
||||
async function startServer(host: string, port: number): Promise<http.Server> {
|
||||
return new Promise((resolve) => {
|
||||
const server = http.createServer((req, res) => {
|
||||
if (req.url === "/ping") {
|
||||
res.writeHead(200, { "Content-Type": "text/plain" });
|
||||
res.end("pong");
|
||||
} else if (
|
||||
req.url?.startsWith("/artifacts") &&
|
||||
req.url === "/artifacts/withdraw.wasm"
|
||||
) {
|
||||
const data = new Uint8Array([0, 1, 2, 3]);
|
||||
res.writeHead(200, { "Content-Type": "application/octet-stream" });
|
||||
res.end(data);
|
||||
} else {
|
||||
res.writeHead(404, { "Content-Type": "text/plain" });
|
||||
res.end("ErrorNotFound\n");
|
||||
}
|
||||
});
|
||||
server.listen(port, host, () => resolve(server));
|
||||
});
|
||||
}
|
||||
|
||||
let teardownHappened = false;
|
||||
let server: http.Server;
|
||||
|
||||
export async function setup() {
|
||||
server = await startServer("0.0.0.0", 8888);
|
||||
}
|
||||
|
||||
export async function teardown() {
|
||||
if (teardownHappened) {
|
||||
throw new Error("teardown called twice");
|
||||
}
|
||||
teardownHappened = true;
|
||||
// tear it down here
|
||||
server.close();
|
||||
}
|
||||
48
packages/sdk/test/unit/zkops.spec.ts
Normal file
48
packages/sdk/test/unit/zkops.spec.ts
Normal file
@@ -0,0 +1,48 @@
|
||||
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
|
||||
import { CircuitsMock, binariesMock } from "../mocks/index.js";
|
||||
import { ZkOps } from "../../src/zkops.js";
|
||||
import * as snarkjs from "snarkjs";
|
||||
|
||||
vi.mock("snarkjs");
|
||||
|
||||
describe("ZkOps", () => {
|
||||
let circuits: CircuitsMock;
|
||||
let zkOps: ZkOps;
|
||||
|
||||
beforeEach(() => {
|
||||
circuits = new CircuitsMock();
|
||||
zkOps = new ZkOps(circuits);
|
||||
});
|
||||
afterEach(() => {
|
||||
vi.clearAllMocks();
|
||||
});
|
||||
|
||||
describe("constructor", () => {
|
||||
it("should set circuits", () => {
|
||||
expect(zkOps.circuits).toStrictEqual(circuits);
|
||||
});
|
||||
});
|
||||
|
||||
describe("proveCommitment", () => {
|
||||
it("should use Circuits binaries and delegate to snarkjs prover", async () => {
|
||||
snarkjs.groth16.fullProve = vi.fn().mockResolvedValue("PROOF");
|
||||
const signals = { signal_1: "1" };
|
||||
const handleInitializationSpy = vi.spyOn(
|
||||
circuits,
|
||||
"_handleInitialization",
|
||||
);
|
||||
const downloadArtifactsSpy = vi
|
||||
.spyOn(circuits, "downloadArtifacts")
|
||||
.mockResolvedValue(binariesMock);
|
||||
expect(await zkOps.proveCommitment(signals)).toStrictEqual("PROOF");
|
||||
expect(downloadArtifactsSpy).toHaveBeenCalledOnce();
|
||||
expect(downloadArtifactsSpy).toHaveBeenCalledWith("latest");
|
||||
expect(handleInitializationSpy).toHaveBeenCalledTimes(2);
|
||||
expect(snarkjs.groth16.fullProve).toHaveBeenCalledWith(
|
||||
signals,
|
||||
binariesMock.commitment.wasm,
|
||||
binariesMock.commitment.zkey,
|
||||
);
|
||||
});
|
||||
});
|
||||
});
|
||||
@@ -1,8 +1,11 @@
|
||||
/* Based on total-typescript no-dom library config */
|
||||
/* https://github.com/total-typescript/tsconfig */
|
||||
{
|
||||
"extends": "./tsconfig.base.json",
|
||||
"extends": "../../tsconfig.base.json",
|
||||
"compilerOptions": {
|
||||
/* Added DOM to be able perform some platform introspection runtime checks.
|
||||
If more were needed we should consider multiple implementations or polyfills. */
|
||||
"lib": ["es2022", "DOM"],
|
||||
"incremental": true,
|
||||
"noEmit": false
|
||||
}
|
||||
|
||||
@@ -1,5 +1,10 @@
|
||||
{
|
||||
"extends": "./tsconfig.base.json",
|
||||
"extends": "../../tsconfig.base.json",
|
||||
"include": ["**/*", ".*.js"],
|
||||
"exclude": ["node_modules", "dist"]
|
||||
"exclude": ["node_modules", "dist"],
|
||||
"compilerOptions": {
|
||||
/* Added DOM to be able perform some platform introspection runtime checks.
|
||||
If more were needed we should consider multiple implementations or polyfills. */
|
||||
"lib": ["es2022", "DOM"]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,6 +12,9 @@ export default defineConfig({
|
||||
reporter: ["text", "json", "html"], // Coverage reporters
|
||||
exclude: ["node_modules", "dist", "src/index.ts", ...configDefaults.exclude], // Files to exclude from coverage
|
||||
},
|
||||
globalSetup: [
|
||||
'./test/unit/serve-artifacts.ts',
|
||||
],
|
||||
},
|
||||
resolve: {
|
||||
alias: {
|
||||
|
||||
@@ -21,7 +21,6 @@
|
||||
"module": "NodeNext",
|
||||
"sourceMap": true,
|
||||
/* If your code doesn't run in the DOM: */
|
||||
"lib": ["es2022"],
|
||||
"outDir": "./dist"
|
||||
"lib": ["es2022"]
|
||||
}
|
||||
}
|
||||
549
yarn.lock
549
yarn.lock
@@ -25,7 +25,7 @@
|
||||
"@jridgewell/gen-mapping" "^0.3.5"
|
||||
"@jridgewell/trace-mapping" "^0.3.24"
|
||||
|
||||
"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.25.9", "@babel/code-frame@^7.26.0", "@babel/code-frame@^7.26.2":
|
||||
"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.24.2", "@babel/code-frame@^7.25.9", "@babel/code-frame@^7.26.0", "@babel/code-frame@^7.26.2":
|
||||
version "7.26.2"
|
||||
resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.26.2.tgz#4b5fab97d33338eff916235055f0ebc21e573a85"
|
||||
integrity sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==
|
||||
@@ -478,49 +478,87 @@
|
||||
dependencies:
|
||||
eslint-visitor-keys "^3.4.3"
|
||||
|
||||
"@eslint-community/regexpp@^4.10.0", "@eslint-community/regexpp@^4.6.1":
|
||||
"@eslint-community/regexpp@^4.10.0", "@eslint-community/regexpp@^4.12.1":
|
||||
version "4.12.1"
|
||||
resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.1.tgz#cfc6cffe39df390a3841cde2abccf92eaa7ae0e0"
|
||||
integrity sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==
|
||||
|
||||
"@eslint/eslintrc@^2.1.4":
|
||||
version "2.1.4"
|
||||
resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz#388a269f0f25c1b6adc317b5a2c55714894c70ad"
|
||||
integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==
|
||||
"@eslint/config-array@^0.19.0":
|
||||
version "0.19.1"
|
||||
resolved "https://registry.yarnpkg.com/@eslint/config-array/-/config-array-0.19.1.tgz#734aaea2c40be22bbb1f2a9dac687c57a6a4c984"
|
||||
integrity sha512-fo6Mtm5mWyKjA/Chy1BYTdn5mGJoDNjC7C64ug20ADsRDGrA85bN3uK3MaKbeRkRuuIEAR5N33Jr1pbm411/PA==
|
||||
dependencies:
|
||||
"@eslint/object-schema" "^2.1.5"
|
||||
debug "^4.3.1"
|
||||
minimatch "^3.1.2"
|
||||
|
||||
"@eslint/core@^0.10.0":
|
||||
version "0.10.0"
|
||||
resolved "https://registry.yarnpkg.com/@eslint/core/-/core-0.10.0.tgz#23727063c21b335f752dbb3a16450f6f9cbc9091"
|
||||
integrity sha512-gFHJ+xBOo4G3WRlR1e/3G8A6/KZAH6zcE/hkLRCZTi/B9avAG365QhFA8uOGzTMqgTghpn7/fSnscW++dpMSAw==
|
||||
dependencies:
|
||||
"@types/json-schema" "^7.0.15"
|
||||
|
||||
"@eslint/eslintrc@^3.2.0":
|
||||
version "3.2.0"
|
||||
resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-3.2.0.tgz#57470ac4e2e283a6bf76044d63281196e370542c"
|
||||
integrity sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==
|
||||
dependencies:
|
||||
ajv "^6.12.4"
|
||||
debug "^4.3.2"
|
||||
espree "^9.6.0"
|
||||
globals "^13.19.0"
|
||||
espree "^10.0.1"
|
||||
globals "^14.0.0"
|
||||
ignore "^5.2.0"
|
||||
import-fresh "^3.2.1"
|
||||
js-yaml "^4.1.0"
|
||||
minimatch "^3.1.2"
|
||||
strip-json-comments "^3.1.1"
|
||||
|
||||
"@eslint/js@8.56.0":
|
||||
version "8.56.0"
|
||||
resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.56.0.tgz#ef20350fec605a7f7035a01764731b2de0f3782b"
|
||||
integrity sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==
|
||||
"@eslint/js@9.18.0":
|
||||
version "9.18.0"
|
||||
resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.18.0.tgz#3356f85d18ed3627ab107790b53caf7e1e3d1e84"
|
||||
integrity sha512-fK6L7rxcq6/z+AaQMtiFTkvbHkBLNlwyRxHpKawP0x3u9+NC6MQTnFW+AdpwC6gfHTW0051cokQgtTN2FqlxQA==
|
||||
|
||||
"@humanwhocodes/config-array@^0.11.13":
|
||||
version "0.11.14"
|
||||
resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.14.tgz#d78e481a039f7566ecc9660b4ea7fe6b1fec442b"
|
||||
integrity sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==
|
||||
"@eslint/object-schema@^2.1.5":
|
||||
version "2.1.5"
|
||||
resolved "https://registry.yarnpkg.com/@eslint/object-schema/-/object-schema-2.1.5.tgz#8670a8f6258a2be5b2c620ff314a1d984c23eb2e"
|
||||
integrity sha512-o0bhxnL89h5Bae5T318nFoFzGy+YE5i/gGkoPAgkmTVdRKTiv3p8JHevPiPaMwoloKfEiiaHlawCqaZMqRm+XQ==
|
||||
|
||||
"@eslint/plugin-kit@^0.2.5":
|
||||
version "0.2.5"
|
||||
resolved "https://registry.yarnpkg.com/@eslint/plugin-kit/-/plugin-kit-0.2.5.tgz#ee07372035539e7847ef834e3f5e7b79f09e3a81"
|
||||
integrity sha512-lB05FkqEdUg2AA0xEbUz0SnkXT1LcCTa438W4IWTUh4hdOnVbQyOJ81OrDXsJk/LSiJHubgGEFoR5EHq1NsH1A==
|
||||
dependencies:
|
||||
"@humanwhocodes/object-schema" "^2.0.2"
|
||||
debug "^4.3.1"
|
||||
minimatch "^3.0.5"
|
||||
"@eslint/core" "^0.10.0"
|
||||
levn "^0.4.1"
|
||||
|
||||
"@humanfs/core@^0.19.1":
|
||||
version "0.19.1"
|
||||
resolved "https://registry.yarnpkg.com/@humanfs/core/-/core-0.19.1.tgz#17c55ca7d426733fe3c561906b8173c336b40a77"
|
||||
integrity sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==
|
||||
|
||||
"@humanfs/node@^0.16.6":
|
||||
version "0.16.6"
|
||||
resolved "https://registry.yarnpkg.com/@humanfs/node/-/node-0.16.6.tgz#ee2a10eaabd1131987bf0488fd9b820174cd765e"
|
||||
integrity sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==
|
||||
dependencies:
|
||||
"@humanfs/core" "^0.19.1"
|
||||
"@humanwhocodes/retry" "^0.3.0"
|
||||
|
||||
"@humanwhocodes/module-importer@^1.0.1":
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c"
|
||||
integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==
|
||||
|
||||
"@humanwhocodes/object-schema@^2.0.2":
|
||||
version "2.0.3"
|
||||
resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3"
|
||||
integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==
|
||||
"@humanwhocodes/retry@^0.3.0":
|
||||
version "0.3.1"
|
||||
resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.3.1.tgz#c72a5c76a9fbaf3488e231b13dc52c0da7bab42a"
|
||||
integrity sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==
|
||||
|
||||
"@humanwhocodes/retry@^0.4.1":
|
||||
version "0.4.1"
|
||||
resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.4.1.tgz#9a96ce501bc62df46c4031fbd970e3cc6b10f07b"
|
||||
integrity sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==
|
||||
|
||||
"@ianvs/prettier-plugin-sort-imports@4.3.1":
|
||||
version "4.3.1"
|
||||
@@ -612,6 +650,26 @@
|
||||
"@jridgewell/resolve-uri" "^3.1.0"
|
||||
"@jridgewell/sourcemap-codec" "^1.4.14"
|
||||
|
||||
"@jsonjoy.com/base64@^1.1.1":
|
||||
version "1.1.2"
|
||||
resolved "https://registry.yarnpkg.com/@jsonjoy.com/base64/-/base64-1.1.2.tgz#cf8ea9dcb849b81c95f14fc0aaa151c6b54d2578"
|
||||
integrity sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==
|
||||
|
||||
"@jsonjoy.com/json-pack@^1.0.3":
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/@jsonjoy.com/json-pack/-/json-pack-1.1.1.tgz#1f2db19ab1fd3304ccac259a1ef1dc6aff6df0ba"
|
||||
integrity sha512-osjeBqMJ2lb/j/M8NCPjs1ylqWIcTRTycIhVB5pt6LgzgeRSb0YRZ7j9RfA8wIUrsr/medIuhVyonXRZWLyfdw==
|
||||
dependencies:
|
||||
"@jsonjoy.com/base64" "^1.1.1"
|
||||
"@jsonjoy.com/util" "^1.1.2"
|
||||
hyperdyperid "^1.2.0"
|
||||
thingies "^1.20.0"
|
||||
|
||||
"@jsonjoy.com/util@^1.1.2", "@jsonjoy.com/util@^1.3.0":
|
||||
version "1.5.0"
|
||||
resolved "https://registry.yarnpkg.com/@jsonjoy.com/util/-/util-1.5.0.tgz#6008e35b9d9d8ee27bc4bfaa70c8cbf33a537b4c"
|
||||
integrity sha512-ojoNsrIuPI9g6o8UxhraZQSyF2ByJanAY4cTFbc8Mf2AXEF4aQRGY1dJxyJpuyav8r9FGflEt/Ff3u5Nt6YMPA==
|
||||
|
||||
"@noble/curves@1.2.0":
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.2.0.tgz#92d7e12e4e49b23105a2555c6984d41733d65c35"
|
||||
@@ -678,7 +736,7 @@
|
||||
resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b"
|
||||
integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==
|
||||
|
||||
"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8":
|
||||
"@nodelib/fs.walk@^1.2.3":
|
||||
version "1.2.8"
|
||||
resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a"
|
||||
integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==
|
||||
@@ -711,6 +769,75 @@
|
||||
resolved "https://registry.yarnpkg.com/@pkgr/core/-/core-0.1.1.tgz#1ec17e2edbec25c8306d424ecfbf13c7de1aaa31"
|
||||
integrity sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==
|
||||
|
||||
"@rollup/plugin-alias@5.1.1":
|
||||
version "5.1.1"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/plugin-alias/-/plugin-alias-5.1.1.tgz#53601d88cda8b1577aa130b4a6e452283605bf26"
|
||||
integrity sha512-PR9zDb+rOzkRb2VD+EuKB7UC41vU5DIwZ5qqCpk0KJudcWAyi8rvYOhS7+L5aZCspw1stTViLgN5v6FF1p5cgQ==
|
||||
|
||||
"@rollup/plugin-commonjs@28.0.2":
|
||||
version "28.0.2"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/plugin-commonjs/-/plugin-commonjs-28.0.2.tgz#193d7a86470f112b56927c1d821ee45951a819ea"
|
||||
integrity sha512-BEFI2EDqzl+vA1rl97IDRZ61AIwGH093d9nz8+dThxJNH8oSoB7MjWvPCX3dkaK1/RCJ/1v/R1XB15FuSs0fQw==
|
||||
dependencies:
|
||||
"@rollup/pluginutils" "^5.0.1"
|
||||
commondir "^1.0.1"
|
||||
estree-walker "^2.0.2"
|
||||
fdir "^6.2.0"
|
||||
is-reference "1.2.1"
|
||||
magic-string "^0.30.3"
|
||||
picomatch "^4.0.2"
|
||||
|
||||
"@rollup/plugin-inject@5.0.5":
|
||||
version "5.0.5"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/plugin-inject/-/plugin-inject-5.0.5.tgz#616f3a73fe075765f91c5bec90176608bed277a3"
|
||||
integrity sha512-2+DEJbNBoPROPkgTDNe8/1YXWcqxbN5DTjASVIOx8HS+pITXushyNiBV56RB08zuptzz8gT3YfkqriTBVycepg==
|
||||
dependencies:
|
||||
"@rollup/pluginutils" "^5.0.1"
|
||||
estree-walker "^2.0.2"
|
||||
magic-string "^0.30.3"
|
||||
|
||||
"@rollup/plugin-json@6.1.0":
|
||||
version "6.1.0"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/plugin-json/-/plugin-json-6.1.0.tgz#fbe784e29682e9bb6dee28ea75a1a83702e7b805"
|
||||
integrity sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==
|
||||
dependencies:
|
||||
"@rollup/pluginutils" "^5.1.0"
|
||||
|
||||
"@rollup/plugin-node-resolve@16.0.0":
|
||||
version "16.0.0"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-16.0.0.tgz#b1a0594661f40d7b061d82136e847354ff85f211"
|
||||
integrity sha512-0FPvAeVUT/zdWoO0jnb/V5BlBsUSNfkIOtFHzMO4H9MOklrmQFY6FduVHKucNb/aTFxvnGhj4MNj/T1oNdDfNg==
|
||||
dependencies:
|
||||
"@rollup/pluginutils" "^5.0.1"
|
||||
"@types/resolve" "1.20.2"
|
||||
deepmerge "^4.2.2"
|
||||
is-module "^1.0.0"
|
||||
resolve "^1.22.1"
|
||||
|
||||
"@rollup/plugin-typescript@12.1.2":
|
||||
version "12.1.2"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/plugin-typescript/-/plugin-typescript-12.1.2.tgz#ebaeec2e7376faa889030ccd7cb485a649e63118"
|
||||
integrity sha512-cdtSp154H5sv637uMr1a8OTWB0L1SWDSm1rDGiyfcGcvQ6cuTs4MDk2BVEBGysUWago4OJN4EQZqOTl/QY3Jgg==
|
||||
dependencies:
|
||||
"@rollup/pluginutils" "^5.1.0"
|
||||
resolve "^1.22.1"
|
||||
|
||||
"@rollup/plugin-wasm@6.2.2":
|
||||
version "6.2.2"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/plugin-wasm/-/plugin-wasm-6.2.2.tgz#ea75fd8cc5ddba1e30bdc22e07cdbaf8d6d160bf"
|
||||
integrity sha512-gpC4R1G9Ni92ZIRTexqbhX7U+9estZrbhP+9SRb0DW9xpB9g7j34r+J2hqrcW/lRI7dJaU84MxZM0Rt82tqYPQ==
|
||||
dependencies:
|
||||
"@rollup/pluginutils" "^5.0.2"
|
||||
|
||||
"@rollup/pluginutils@^5.0.1", "@rollup/pluginutils@^5.0.2", "@rollup/pluginutils@^5.1.0":
|
||||
version "5.1.4"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-5.1.4.tgz#bb94f1f9eaaac944da237767cdfee6c5b2262d4a"
|
||||
integrity sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==
|
||||
dependencies:
|
||||
"@types/estree" "^1.0.0"
|
||||
estree-walker "^2.0.2"
|
||||
picomatch "^4.0.2"
|
||||
|
||||
"@rollup/rollup-android-arm-eabi@4.30.1":
|
||||
version "4.30.1"
|
||||
resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.30.1.tgz#14c737dc19603a096568044eadaa60395eefb809"
|
||||
@@ -892,11 +1019,16 @@
|
||||
dependencies:
|
||||
"@types/node" "*"
|
||||
|
||||
"@types/estree@1.0.6", "@types/estree@^1.0.0":
|
||||
"@types/estree@*", "@types/estree@1.0.6", "@types/estree@^1.0.0", "@types/estree@^1.0.6":
|
||||
version "1.0.6"
|
||||
resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.6.tgz#628effeeae2064a1b4e79f78e81d87b7e5fc7b50"
|
||||
integrity sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==
|
||||
|
||||
"@types/json-schema@^7.0.15":
|
||||
version "7.0.15"
|
||||
resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841"
|
||||
integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==
|
||||
|
||||
"@types/mocha@^10.0.1":
|
||||
version "10.0.10"
|
||||
resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-10.0.10.tgz#91f62905e8d23cbd66225312f239454a23bebfa0"
|
||||
@@ -921,6 +1053,16 @@
|
||||
dependencies:
|
||||
undici-types "~6.19.2"
|
||||
|
||||
"@types/resolve@1.20.2":
|
||||
version "1.20.2"
|
||||
resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.20.2.tgz#97d26e00cd4a0423b4af620abecf3e6f442b7975"
|
||||
integrity sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==
|
||||
|
||||
"@types/snarkjs@0.7.9":
|
||||
version "0.7.9"
|
||||
resolved "https://registry.yarnpkg.com/@types/snarkjs/-/snarkjs-0.7.9.tgz#7a3b99bd86009133a74dcb215a475382c772c37c"
|
||||
integrity sha512-pb4Bq3GI2YQOQOG0dR/YuQs/mqcuL6k/vnz68LIPtpA2frrUL3twf69a3AUK9eUmNNeW0RIKkq6scDlC75Is+g==
|
||||
|
||||
"@typescript-eslint/eslint-plugin@7.18.0":
|
||||
version "7.18.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.18.0.tgz#b16d3cf3ee76bf572fdf511e79c248bdec619ea3"
|
||||
@@ -936,6 +1078,21 @@
|
||||
natural-compare "^1.4.0"
|
||||
ts-api-utils "^1.3.0"
|
||||
|
||||
"@typescript-eslint/eslint-plugin@8.20.0":
|
||||
version "8.20.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.20.0.tgz#b47a398e0e551cb008c60190b804394e6852c863"
|
||||
integrity sha512-naduuphVw5StFfqp4Gq4WhIBE2gN1GEmMUExpJYknZJdRnc+2gDzB8Z3+5+/Kv33hPQRDGzQO/0opHE72lZZ6A==
|
||||
dependencies:
|
||||
"@eslint-community/regexpp" "^4.10.0"
|
||||
"@typescript-eslint/scope-manager" "8.20.0"
|
||||
"@typescript-eslint/type-utils" "8.20.0"
|
||||
"@typescript-eslint/utils" "8.20.0"
|
||||
"@typescript-eslint/visitor-keys" "8.20.0"
|
||||
graphemer "^1.4.0"
|
||||
ignore "^5.3.1"
|
||||
natural-compare "^1.4.0"
|
||||
ts-api-utils "^2.0.0"
|
||||
|
||||
"@typescript-eslint/parser@7.18.0":
|
||||
version "7.18.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-7.18.0.tgz#83928d0f1b7f4afa974098c64b5ce6f9051f96a0"
|
||||
@@ -947,6 +1104,17 @@
|
||||
"@typescript-eslint/visitor-keys" "7.18.0"
|
||||
debug "^4.3.4"
|
||||
|
||||
"@typescript-eslint/parser@8.20.0":
|
||||
version "8.20.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.20.0.tgz#5caf2230a37094dc0e671cf836b96dd39b587ced"
|
||||
integrity sha512-gKXG7A5HMyjDIedBi6bUrDcun8GIjnI8qOwVLiY3rx6T/sHP/19XLJOnIq/FgQvWLHja5JN/LSE7eklNBr612g==
|
||||
dependencies:
|
||||
"@typescript-eslint/scope-manager" "8.20.0"
|
||||
"@typescript-eslint/types" "8.20.0"
|
||||
"@typescript-eslint/typescript-estree" "8.20.0"
|
||||
"@typescript-eslint/visitor-keys" "8.20.0"
|
||||
debug "^4.3.4"
|
||||
|
||||
"@typescript-eslint/scope-manager@7.18.0":
|
||||
version "7.18.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz#c928e7a9fc2c0b3ed92ab3112c614d6bd9951c83"
|
||||
@@ -955,6 +1123,14 @@
|
||||
"@typescript-eslint/types" "7.18.0"
|
||||
"@typescript-eslint/visitor-keys" "7.18.0"
|
||||
|
||||
"@typescript-eslint/scope-manager@8.20.0":
|
||||
version "8.20.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.20.0.tgz#aaf4198b509fb87a6527c02cfbfaf8901179e75c"
|
||||
integrity sha512-J7+VkpeGzhOt3FeG1+SzhiMj9NzGD/M6KoGn9f4dbz3YzK9hvbhVTmLj/HiTp9DazIzJ8B4XcM80LrR9Dm1rJw==
|
||||
dependencies:
|
||||
"@typescript-eslint/types" "8.20.0"
|
||||
"@typescript-eslint/visitor-keys" "8.20.0"
|
||||
|
||||
"@typescript-eslint/type-utils@7.18.0":
|
||||
version "7.18.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz#2165ffaee00b1fbbdd2d40aa85232dab6998f53b"
|
||||
@@ -965,11 +1141,26 @@
|
||||
debug "^4.3.4"
|
||||
ts-api-utils "^1.3.0"
|
||||
|
||||
"@typescript-eslint/type-utils@8.20.0":
|
||||
version "8.20.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.20.0.tgz#958171d86b213a3f32b5b16b91db267968a4ef19"
|
||||
integrity sha512-bPC+j71GGvA7rVNAHAtOjbVXbLN5PkwqMvy1cwGeaxUoRQXVuKCebRoLzm+IPW/NtFFpstn1ummSIasD5t60GA==
|
||||
dependencies:
|
||||
"@typescript-eslint/typescript-estree" "8.20.0"
|
||||
"@typescript-eslint/utils" "8.20.0"
|
||||
debug "^4.3.4"
|
||||
ts-api-utils "^2.0.0"
|
||||
|
||||
"@typescript-eslint/types@7.18.0":
|
||||
version "7.18.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-7.18.0.tgz#b90a57ccdea71797ffffa0321e744f379ec838c9"
|
||||
integrity sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==
|
||||
|
||||
"@typescript-eslint/types@8.20.0":
|
||||
version "8.20.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.20.0.tgz#487de5314b5415dee075e95568b87a75a3e730cf"
|
||||
integrity sha512-cqaMiY72CkP+2xZRrFt3ExRBu0WmVitN/rYPZErA80mHjHx/Svgp8yfbzkJmDoQ/whcytOPO9/IZXnOc+wigRA==
|
||||
|
||||
"@typescript-eslint/typescript-estree@7.18.0":
|
||||
version "7.18.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz#b5868d486c51ce8f312309ba79bdb9f331b37931"
|
||||
@@ -984,6 +1175,20 @@
|
||||
semver "^7.6.0"
|
||||
ts-api-utils "^1.3.0"
|
||||
|
||||
"@typescript-eslint/typescript-estree@8.20.0":
|
||||
version "8.20.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.20.0.tgz#658cea07b7e5981f19bce5cf1662cb70ad59f26b"
|
||||
integrity sha512-Y7ncuy78bJqHI35NwzWol8E0X7XkRVS4K4P4TCyzWkOJih5NDvtoRDW4Ba9YJJoB2igm9yXDdYI/+fkiiAxPzA==
|
||||
dependencies:
|
||||
"@typescript-eslint/types" "8.20.0"
|
||||
"@typescript-eslint/visitor-keys" "8.20.0"
|
||||
debug "^4.3.4"
|
||||
fast-glob "^3.3.2"
|
||||
is-glob "^4.0.3"
|
||||
minimatch "^9.0.4"
|
||||
semver "^7.6.0"
|
||||
ts-api-utils "^2.0.0"
|
||||
|
||||
"@typescript-eslint/utils@7.18.0":
|
||||
version "7.18.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-7.18.0.tgz#bca01cde77f95fc6a8d5b0dbcbfb3d6ca4be451f"
|
||||
@@ -994,6 +1199,16 @@
|
||||
"@typescript-eslint/types" "7.18.0"
|
||||
"@typescript-eslint/typescript-estree" "7.18.0"
|
||||
|
||||
"@typescript-eslint/utils@8.20.0":
|
||||
version "8.20.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.20.0.tgz#53127ecd314b3b08836b4498b71cdb86f4ef3aa2"
|
||||
integrity sha512-dq70RUw6UK9ei7vxc4KQtBRk7qkHZv447OUZ6RPQMQl71I3NZxQJX/f32Smr+iqWrB02pHKn2yAdHBb0KNrRMA==
|
||||
dependencies:
|
||||
"@eslint-community/eslint-utils" "^4.4.0"
|
||||
"@typescript-eslint/scope-manager" "8.20.0"
|
||||
"@typescript-eslint/types" "8.20.0"
|
||||
"@typescript-eslint/typescript-estree" "8.20.0"
|
||||
|
||||
"@typescript-eslint/visitor-keys@7.18.0":
|
||||
version "7.18.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz#0564629b6124d67607378d0f0332a0495b25e7d7"
|
||||
@@ -1002,10 +1217,13 @@
|
||||
"@typescript-eslint/types" "7.18.0"
|
||||
eslint-visitor-keys "^3.4.3"
|
||||
|
||||
"@ungap/structured-clone@^1.2.0":
|
||||
version "1.2.1"
|
||||
resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.1.tgz#28fa185f67daaf7b7a1a8c1d445132c5d979f8bd"
|
||||
integrity sha512-fEzPV3hSkSMltkw152tJKNARhOupqbH96MZWyRjNaYZOMIzbrTeQDG+MTc6Mr2pgzFQzFxAfmhGDNP5QK++2ZA==
|
||||
"@typescript-eslint/visitor-keys@8.20.0":
|
||||
version "8.20.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.20.0.tgz#2df6e24bc69084b81f06aaaa48d198b10d382bed"
|
||||
integrity sha512-v/BpkeeYAsPkKCkR8BDwcno0llhzWVqPOamQrAEMdpZav2Y9OVjd9dwJyBLJWwf335B5DmlifECIkZRJCaGaHA==
|
||||
dependencies:
|
||||
"@typescript-eslint/types" "8.20.0"
|
||||
eslint-visitor-keys "^4.2.0"
|
||||
|
||||
"@vitest/coverage-v8@2.0.5":
|
||||
version "2.0.5"
|
||||
@@ -1177,7 +1395,7 @@ acorn-walk@^8.1.1:
|
||||
dependencies:
|
||||
acorn "^8.11.0"
|
||||
|
||||
acorn@^8.11.0, acorn@^8.4.1, acorn@^8.9.0:
|
||||
acorn@^8.11.0, acorn@^8.14.0, acorn@^8.4.1:
|
||||
version "8.14.0"
|
||||
resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.14.0.tgz#063e2c70cac5fb4f6467f0b11152e04c682795b0"
|
||||
integrity sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==
|
||||
@@ -1666,6 +1884,11 @@ commitlint@19.4.1:
|
||||
"@commitlint/cli" "^19.4.1"
|
||||
"@commitlint/types" "^19.0.3"
|
||||
|
||||
commondir@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"
|
||||
integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==
|
||||
|
||||
compare-func@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/compare-func/-/compare-func-2.0.0.tgz#fb65e75edbddfd2e568554e8b5b05fff7a51fcb3"
|
||||
@@ -1740,7 +1963,7 @@ create-require@^1.1.0:
|
||||
resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333"
|
||||
integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==
|
||||
|
||||
cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3:
|
||||
cross-spawn@^7.0.0, cross-spawn@^7.0.3, cross-spawn@^7.0.6:
|
||||
version "7.0.6"
|
||||
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f"
|
||||
integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==
|
||||
@@ -1795,6 +2018,11 @@ deep-is@^0.1.3, deep-is@~0.1.3:
|
||||
resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831"
|
||||
integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==
|
||||
|
||||
deepmerge@^4.2.2:
|
||||
version "4.3.1"
|
||||
resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a"
|
||||
integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==
|
||||
|
||||
define-data-property@^1.1.4:
|
||||
version "1.1.4"
|
||||
resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e"
|
||||
@@ -1841,13 +2069,6 @@ dir-glob@^3.0.1:
|
||||
dependencies:
|
||||
path-type "^4.0.0"
|
||||
|
||||
doctrine@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961"
|
||||
integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==
|
||||
dependencies:
|
||||
esutils "^2.0.2"
|
||||
|
||||
dot-prop@^5.1.0:
|
||||
version "5.3.0"
|
||||
resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88"
|
||||
@@ -1994,71 +2215,72 @@ eslint-plugin-prettier@5.2.1:
|
||||
prettier-linter-helpers "^1.0.0"
|
||||
synckit "^0.9.1"
|
||||
|
||||
eslint-scope@^7.2.2:
|
||||
version "7.2.2"
|
||||
resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f"
|
||||
integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==
|
||||
eslint-scope@^8.2.0:
|
||||
version "8.2.0"
|
||||
resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-8.2.0.tgz#377aa6f1cb5dc7592cfd0b7f892fd0cf352ce442"
|
||||
integrity sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==
|
||||
dependencies:
|
||||
esrecurse "^4.3.0"
|
||||
estraverse "^5.2.0"
|
||||
|
||||
eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3:
|
||||
eslint-visitor-keys@^3.4.3:
|
||||
version "3.4.3"
|
||||
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800"
|
||||
integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==
|
||||
|
||||
eslint@8.56.0:
|
||||
version "8.56.0"
|
||||
resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.56.0.tgz#4957ce8da409dc0809f99ab07a1b94832ab74b15"
|
||||
integrity sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==
|
||||
eslint-visitor-keys@^4.2.0:
|
||||
version "4.2.0"
|
||||
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz#687bacb2af884fcdda8a6e7d65c606f46a14cd45"
|
||||
integrity sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==
|
||||
|
||||
eslint@9.18.0:
|
||||
version "9.18.0"
|
||||
resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.18.0.tgz#c95b24de1183e865de19f607fda6518b54827850"
|
||||
integrity sha512-+waTfRWQlSbpt3KWE+CjrPPYnbq9kfZIYUqapc0uBXyjTp8aYXZDsUH16m39Ryq3NjAVP4tjuF7KaukeqoCoaA==
|
||||
dependencies:
|
||||
"@eslint-community/eslint-utils" "^4.2.0"
|
||||
"@eslint-community/regexpp" "^4.6.1"
|
||||
"@eslint/eslintrc" "^2.1.4"
|
||||
"@eslint/js" "8.56.0"
|
||||
"@humanwhocodes/config-array" "^0.11.13"
|
||||
"@eslint-community/regexpp" "^4.12.1"
|
||||
"@eslint/config-array" "^0.19.0"
|
||||
"@eslint/core" "^0.10.0"
|
||||
"@eslint/eslintrc" "^3.2.0"
|
||||
"@eslint/js" "9.18.0"
|
||||
"@eslint/plugin-kit" "^0.2.5"
|
||||
"@humanfs/node" "^0.16.6"
|
||||
"@humanwhocodes/module-importer" "^1.0.1"
|
||||
"@nodelib/fs.walk" "^1.2.8"
|
||||
"@ungap/structured-clone" "^1.2.0"
|
||||
"@humanwhocodes/retry" "^0.4.1"
|
||||
"@types/estree" "^1.0.6"
|
||||
"@types/json-schema" "^7.0.15"
|
||||
ajv "^6.12.4"
|
||||
chalk "^4.0.0"
|
||||
cross-spawn "^7.0.2"
|
||||
cross-spawn "^7.0.6"
|
||||
debug "^4.3.2"
|
||||
doctrine "^3.0.0"
|
||||
escape-string-regexp "^4.0.0"
|
||||
eslint-scope "^7.2.2"
|
||||
eslint-visitor-keys "^3.4.3"
|
||||
espree "^9.6.1"
|
||||
esquery "^1.4.2"
|
||||
eslint-scope "^8.2.0"
|
||||
eslint-visitor-keys "^4.2.0"
|
||||
espree "^10.3.0"
|
||||
esquery "^1.5.0"
|
||||
esutils "^2.0.2"
|
||||
fast-deep-equal "^3.1.3"
|
||||
file-entry-cache "^6.0.1"
|
||||
file-entry-cache "^8.0.0"
|
||||
find-up "^5.0.0"
|
||||
glob-parent "^6.0.2"
|
||||
globals "^13.19.0"
|
||||
graphemer "^1.4.0"
|
||||
ignore "^5.2.0"
|
||||
imurmurhash "^0.1.4"
|
||||
is-glob "^4.0.0"
|
||||
is-path-inside "^3.0.3"
|
||||
js-yaml "^4.1.0"
|
||||
json-stable-stringify-without-jsonify "^1.0.1"
|
||||
levn "^0.4.1"
|
||||
lodash.merge "^4.6.2"
|
||||
minimatch "^3.1.2"
|
||||
natural-compare "^1.4.0"
|
||||
optionator "^0.9.3"
|
||||
strip-ansi "^6.0.1"
|
||||
text-table "^0.2.0"
|
||||
|
||||
espree@^9.6.0, espree@^9.6.1:
|
||||
version "9.6.1"
|
||||
resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f"
|
||||
integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==
|
||||
espree@^10.0.1, espree@^10.3.0:
|
||||
version "10.3.0"
|
||||
resolved "https://registry.yarnpkg.com/espree/-/espree-10.3.0.tgz#29267cf5b0cb98735b65e64ba07e0ed49d1eed8a"
|
||||
integrity sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==
|
||||
dependencies:
|
||||
acorn "^8.9.0"
|
||||
acorn "^8.14.0"
|
||||
acorn-jsx "^5.3.2"
|
||||
eslint-visitor-keys "^3.4.1"
|
||||
eslint-visitor-keys "^4.2.0"
|
||||
|
||||
esprima@1.2.2:
|
||||
version "1.2.2"
|
||||
@@ -2070,7 +2292,7 @@ esprima@^4.0.1:
|
||||
resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
|
||||
integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
|
||||
|
||||
esquery@^1.4.2:
|
||||
esquery@^1.5.0:
|
||||
version "1.6.0"
|
||||
resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.6.0.tgz#91419234f804d852a82dceec3e16cdc22cf9dae7"
|
||||
integrity sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==
|
||||
@@ -2094,6 +2316,11 @@ estraverse@^5.1.0, estraverse@^5.2.0:
|
||||
resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123"
|
||||
integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==
|
||||
|
||||
estree-walker@^2.0.2:
|
||||
version "2.0.2"
|
||||
resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac"
|
||||
integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==
|
||||
|
||||
estree-walker@^3.0.3:
|
||||
version "3.0.3"
|
||||
resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-3.0.3.tgz#67c3e549ec402a487b4fc193d1953a524752340d"
|
||||
@@ -2177,7 +2404,7 @@ fast-glob@3.3.2, fast-glob@^3.3.0:
|
||||
merge2 "^1.3.0"
|
||||
micromatch "^4.0.4"
|
||||
|
||||
fast-glob@^3.2.9:
|
||||
fast-glob@^3.2.9, fast-glob@^3.3.2:
|
||||
version "3.3.3"
|
||||
resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.3.tgz#d06d585ce8dba90a16b0505c543c3ccfb3aeb818"
|
||||
integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==
|
||||
@@ -2215,6 +2442,11 @@ fastq@^1.6.0:
|
||||
dependencies:
|
||||
reusify "^1.0.4"
|
||||
|
||||
fdir@^6.2.0:
|
||||
version "6.4.2"
|
||||
resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.4.2.tgz#ddaa7ce1831b161bc3657bb99cb36e1622702689"
|
||||
integrity sha512-KnhMXsKSPZlAhp7+IjUkRZKPb4fUyccpDrdFXbi4QL1qkmFh9kVY09Yox+n4MaOb3lHZ1Tv829C3oaaXoMYPDQ==
|
||||
|
||||
ffjavascript@0.2.56:
|
||||
version "0.2.56"
|
||||
resolved "https://registry.yarnpkg.com/ffjavascript/-/ffjavascript-0.2.56.tgz#3509f98fcbd3e44ea93cd23519071b76d6eae433"
|
||||
@@ -2251,12 +2483,12 @@ ffjavascript@^0.2.48, ffjavascript@^0.2.56:
|
||||
wasmcurves "0.2.2"
|
||||
web-worker "1.2.0"
|
||||
|
||||
file-entry-cache@^6.0.1:
|
||||
version "6.0.1"
|
||||
resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027"
|
||||
integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==
|
||||
file-entry-cache@^8.0.0:
|
||||
version "8.0.0"
|
||||
resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-8.0.0.tgz#7787bddcf1131bffb92636c69457bbc0edd6d81f"
|
||||
integrity sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==
|
||||
dependencies:
|
||||
flat-cache "^3.0.4"
|
||||
flat-cache "^4.0.0"
|
||||
|
||||
filelist@^1.0.4:
|
||||
version "1.0.4"
|
||||
@@ -2299,14 +2531,13 @@ findup-sync@^5.0.0:
|
||||
micromatch "^4.0.4"
|
||||
resolve-dir "^1.0.1"
|
||||
|
||||
flat-cache@^3.0.4:
|
||||
version "3.2.0"
|
||||
resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee"
|
||||
integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==
|
||||
flat-cache@^4.0.0:
|
||||
version "4.0.1"
|
||||
resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-4.0.1.tgz#0ece39fcb14ee012f4b0410bd33dd9c1f011127c"
|
||||
integrity sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==
|
||||
dependencies:
|
||||
flatted "^3.2.9"
|
||||
keyv "^4.5.3"
|
||||
rimraf "^3.0.2"
|
||||
keyv "^4.5.4"
|
||||
|
||||
flat@^5.0.2:
|
||||
version "5.0.2"
|
||||
@@ -2466,18 +2697,6 @@ glob@^10.4.1:
|
||||
package-json-from-dist "^1.0.0"
|
||||
path-scurry "^1.11.1"
|
||||
|
||||
glob@^7.1.3:
|
||||
version "7.2.3"
|
||||
resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b"
|
||||
integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==
|
||||
dependencies:
|
||||
fs.realpath "^1.0.0"
|
||||
inflight "^1.0.4"
|
||||
inherits "2"
|
||||
minimatch "^3.1.1"
|
||||
once "^1.3.0"
|
||||
path-is-absolute "^1.0.0"
|
||||
|
||||
glob@^8.0.3, glob@^8.1.0:
|
||||
version "8.1.0"
|
||||
resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e"
|
||||
@@ -2516,17 +2735,20 @@ global-prefix@^1.0.1:
|
||||
is-windows "^1.0.1"
|
||||
which "^1.2.14"
|
||||
|
||||
globals@15.14.0:
|
||||
version "15.14.0"
|
||||
resolved "https://registry.yarnpkg.com/globals/-/globals-15.14.0.tgz#b8fd3a8941ff3b4d38f3319d433b61bbb482e73f"
|
||||
integrity sha512-OkToC372DtlQeje9/zHIo5CT8lRP/FUgEOKBEhU4e0abL7J7CD24fD9ohiLN5hagG/kWCYj4K5oaxxtj2Z0Dig==
|
||||
|
||||
globals@^11.1.0:
|
||||
version "11.12.0"
|
||||
resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
|
||||
integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
|
||||
|
||||
globals@^13.19.0:
|
||||
version "13.24.0"
|
||||
resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171"
|
||||
integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==
|
||||
dependencies:
|
||||
type-fest "^0.20.2"
|
||||
globals@^14.0.0:
|
||||
version "14.0.0"
|
||||
resolved "https://registry.yarnpkg.com/globals/-/globals-14.0.0.tgz#898d7413c29babcf6bafe56fcadded858ada724e"
|
||||
integrity sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==
|
||||
|
||||
globby@^11.1.0:
|
||||
version "11.1.0"
|
||||
@@ -2638,6 +2860,11 @@ husky@>=9:
|
||||
resolved "https://registry.yarnpkg.com/husky/-/husky-9.1.7.tgz#d46a38035d101b46a70456a850ff4201344c0b2d"
|
||||
integrity sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==
|
||||
|
||||
hyperdyperid@^1.2.0:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/hyperdyperid/-/hyperdyperid-1.2.0.tgz#59668d323ada92228d2a869d3e474d5a33b69e6b"
|
||||
integrity sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==
|
||||
|
||||
ieee754@^1.2.1:
|
||||
version "1.2.1"
|
||||
resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
|
||||
@@ -2714,6 +2941,13 @@ is-callable@^1.1.3:
|
||||
resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055"
|
||||
integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==
|
||||
|
||||
is-core-module@^2.16.0:
|
||||
version "2.16.1"
|
||||
resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.16.1.tgz#2a98801a849f43e2add644fbb6bc6229b19a4ef4"
|
||||
integrity sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==
|
||||
dependencies:
|
||||
hasown "^2.0.2"
|
||||
|
||||
is-extglob@^2.1.1:
|
||||
version "2.1.1"
|
||||
resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
|
||||
@@ -2750,6 +2984,11 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1:
|
||||
dependencies:
|
||||
is-extglob "^2.1.1"
|
||||
|
||||
is-module@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591"
|
||||
integrity sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==
|
||||
|
||||
is-number@^7.0.0:
|
||||
version "7.0.0"
|
||||
resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
|
||||
@@ -2760,11 +2999,6 @@ is-obj@^2.0.0:
|
||||
resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982"
|
||||
integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==
|
||||
|
||||
is-path-inside@^3.0.3:
|
||||
version "3.0.3"
|
||||
resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283"
|
||||
integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==
|
||||
|
||||
is-plain-obj@^2.1.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287"
|
||||
@@ -2775,6 +3009,13 @@ is-plain-obj@^4.1.0:
|
||||
resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-4.1.0.tgz#d65025edec3657ce032fd7db63c97883eaed71f0"
|
||||
integrity sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==
|
||||
|
||||
is-reference@1.2.1:
|
||||
version "1.2.1"
|
||||
resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-1.2.1.tgz#8b2dac0b371f4bc994fdeaba9eb542d03002d0b7"
|
||||
integrity sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==
|
||||
dependencies:
|
||||
"@types/estree" "*"
|
||||
|
||||
is-stream@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac"
|
||||
@@ -2954,7 +3195,7 @@ jsonpath@^1.1.1:
|
||||
static-eval "2.0.2"
|
||||
underscore "1.12.1"
|
||||
|
||||
keyv@^4.5.3:
|
||||
keyv@^4.5.4:
|
||||
version "4.5.4"
|
||||
resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93"
|
||||
integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==
|
||||
@@ -3191,7 +3432,7 @@ maci-domainobjs@^2.5.0:
|
||||
dependencies:
|
||||
maci-crypto "^2.5.0"
|
||||
|
||||
magic-string@^0.30.10:
|
||||
magic-string@^0.30.10, magic-string@^0.30.3:
|
||||
version "0.30.17"
|
||||
resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.17.tgz#450a449673d2460e5bbcfba9a61916a1714c7453"
|
||||
integrity sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==
|
||||
@@ -3224,6 +3465,16 @@ math-intrinsics@^1.0.0:
|
||||
resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.0.0.tgz#4e04bf87c85aa51e90d078dac2252b4eb5260817"
|
||||
integrity sha512-4MqMiKP90ybymYvsut0CH2g4XWbfLtmlCkXmtmdcDCxNB+mQcu1w/1+L/VD7vi/PSv7X2JYV7SCcR+jiPXnQtA==
|
||||
|
||||
memfs@4.17.0:
|
||||
version "4.17.0"
|
||||
resolved "https://registry.yarnpkg.com/memfs/-/memfs-4.17.0.tgz#a3c4b5490b9b1e7df5d433adc163e08208ce7ca2"
|
||||
integrity sha512-4eirfZ7thblFmqFjywlTmuWVSvccHAJbn1r8qQLzmTO11qcqpohOjmY2mFce6x7x7WtskzRqApPD0hv+Oa74jg==
|
||||
dependencies:
|
||||
"@jsonjoy.com/json-pack" "^1.0.3"
|
||||
"@jsonjoy.com/util" "^1.3.0"
|
||||
tree-dump "^1.0.1"
|
||||
tslib "^2.0.0"
|
||||
|
||||
memorystream@^0.3.1:
|
||||
version "0.3.1"
|
||||
resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2"
|
||||
@@ -3274,7 +3525,7 @@ mimic-function@^5.0.0:
|
||||
resolved "https://registry.yarnpkg.com/mimic-function/-/mimic-function-5.0.1.tgz#acbe2b3349f99b9deaca7fb70e48b83e94e67076"
|
||||
integrity sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==
|
||||
|
||||
minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2:
|
||||
minimatch@^3.1.2:
|
||||
version "3.1.2"
|
||||
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
|
||||
integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
|
||||
@@ -3496,11 +3747,6 @@ path-exists@^5.0.0:
|
||||
resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-5.0.0.tgz#a6aad9489200b21fab31e49cf09277e5116fb9e7"
|
||||
integrity sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==
|
||||
|
||||
path-is-absolute@^1.0.0:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
|
||||
integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==
|
||||
|
||||
path-key@^3.1.0:
|
||||
version "3.1.1"
|
||||
resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
|
||||
@@ -3511,6 +3757,11 @@ path-key@^4.0.0:
|
||||
resolved "https://registry.yarnpkg.com/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18"
|
||||
integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==
|
||||
|
||||
path-parse@^1.0.7:
|
||||
version "1.0.7"
|
||||
resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
|
||||
integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
|
||||
|
||||
path-scurry@^1.11.1:
|
||||
version "1.11.1"
|
||||
resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.11.1.tgz#7960a668888594a0720b12a911d1a742ab9f11d2"
|
||||
@@ -3549,6 +3800,11 @@ picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1:
|
||||
resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
|
||||
integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
|
||||
|
||||
picomatch@^4.0.2:
|
||||
version "4.0.2"
|
||||
resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.2.tgz#77c742931e8f3b8820946c76cd0c1f13730d1dab"
|
||||
integrity sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==
|
||||
|
||||
pidtree@~0.6.0:
|
||||
version "0.6.0"
|
||||
resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.6.0.tgz#90ad7b6d42d5841e69e0a2419ef38f8883aa057c"
|
||||
@@ -3687,6 +3943,15 @@ resolve-from@^5.0.0:
|
||||
resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69"
|
||||
integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==
|
||||
|
||||
resolve@^1.22.1:
|
||||
version "1.22.10"
|
||||
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.10.tgz#b663e83ffb09bbf2386944736baae803029b8b39"
|
||||
integrity sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==
|
||||
dependencies:
|
||||
is-core-module "^2.16.0"
|
||||
path-parse "^1.0.7"
|
||||
supports-preserve-symlinks-flag "^1.0.0"
|
||||
|
||||
restore-cursor@^5.0.0:
|
||||
version "5.1.0"
|
||||
resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-5.1.0.tgz#0766d95699efacb14150993f55baf0953ea1ebe7"
|
||||
@@ -3705,14 +3970,16 @@ rfdc@^1.4.1:
|
||||
resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.4.1.tgz#778f76c4fb731d93414e8f925fbecf64cce7f6ca"
|
||||
integrity sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==
|
||||
|
||||
rimraf@^3.0.2:
|
||||
version "3.0.2"
|
||||
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
|
||||
integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==
|
||||
rollup-plugin-dts@6.1.1:
|
||||
version "6.1.1"
|
||||
resolved "https://registry.yarnpkg.com/rollup-plugin-dts/-/rollup-plugin-dts-6.1.1.tgz#46b33f4d1d7f4e66f1171ced9b282ac11a15a254"
|
||||
integrity sha512-aSHRcJ6KG2IHIioYlvAOcEq6U99sVtqDDKVhnwt70rW6tsz3tv5OSjEiWcgzfsHdLyGXZ/3b/7b/+Za3Y6r1XA==
|
||||
dependencies:
|
||||
glob "^7.1.3"
|
||||
magic-string "^0.30.10"
|
||||
optionalDependencies:
|
||||
"@babel/code-frame" "^7.24.2"
|
||||
|
||||
rollup@^4.20.0:
|
||||
rollup@4.30.1, rollup@^4.20.0:
|
||||
version "4.30.1"
|
||||
resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.30.1.tgz#d5c3d066055259366cdc3eb6f1d051c5d6afaf74"
|
||||
integrity sha512-mlJ4glW020fPuLi7DkM/lN97mYEZGWeqBnrljzN0gs7GLctqX3lNWxKQ7Gl712UAX+6fog/L3jh4gb7R6aVi3w==
|
||||
@@ -3859,7 +4126,7 @@ snarkjs@0.5.0:
|
||||
logplease "^1.2.15"
|
||||
r1csfile "0.0.41"
|
||||
|
||||
snarkjs@^0.7.5:
|
||||
snarkjs@0.7.5, snarkjs@^0.7.5:
|
||||
version "0.7.5"
|
||||
resolved "https://registry.yarnpkg.com/snarkjs/-/snarkjs-0.7.5.tgz#334d83b61468bdffbbf922b20734ca47be50b8ab"
|
||||
integrity sha512-h+3c4rXZKLhLuHk4LHydZCk/h5GcNvk5GjVKRRkHmfb6Ntf8gHOA9zea3g656iclRuhqQ3iKDWFgiD9ypLrKiA==
|
||||
@@ -4098,6 +4365,11 @@ supports-color@^8.1.1:
|
||||
dependencies:
|
||||
has-flag "^4.0.0"
|
||||
|
||||
supports-preserve-symlinks-flag@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09"
|
||||
integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
|
||||
|
||||
synckit@^0.9.1:
|
||||
version "0.9.2"
|
||||
resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.9.2.tgz#a3a935eca7922d48b9e7d6c61822ee6c3ae4ec62"
|
||||
@@ -4136,6 +4408,11 @@ text-table@^0.2.0:
|
||||
resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
|
||||
integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==
|
||||
|
||||
thingies@^1.20.0:
|
||||
version "1.21.0"
|
||||
resolved "https://registry.yarnpkg.com/thingies/-/thingies-1.21.0.tgz#e80fbe58fd6fdaaab8fad9b67bd0a5c943c445c1"
|
||||
integrity sha512-hsqsJsFMsV+aD4s3CWKk85ep/3I9XzYV/IXaSouJMYIoDlgyi11cBhsqYe9/geRfB0YIikBQg6raRaM+nIMP9g==
|
||||
|
||||
"through@>=2.2.7 <3":
|
||||
version "2.3.8"
|
||||
resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
|
||||
@@ -4192,6 +4469,11 @@ to-regex-range@^5.0.1:
|
||||
dependencies:
|
||||
is-number "^7.0.0"
|
||||
|
||||
tree-dump@^1.0.1:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/tree-dump/-/tree-dump-1.0.2.tgz#c460d5921caeb197bde71d0e9a7b479848c5b8ac"
|
||||
integrity sha512-dpev9ABuLWdEubk+cIaI9cHwRNNDjkBBLXTwI4UCUFdQ5xXKqNXoK4FEciw/vxf+NQ7Cb7sGUyeUtORvHIdRXQ==
|
||||
|
||||
tryer@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/tryer/-/tryer-1.0.1.tgz#f2c85406800b9b0f74c9f7465b81eaad241252f8"
|
||||
@@ -4202,6 +4484,11 @@ ts-api-utils@^1.3.0:
|
||||
resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.4.3.tgz#bfc2215fe6528fecab2b0fba570a2e8a4263b064"
|
||||
integrity sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==
|
||||
|
||||
ts-api-utils@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-2.0.0.tgz#b9d7d5f7ec9f736f4d0f09758b8607979044a900"
|
||||
integrity sha512-xCt/TOAc+EOHS1XPnijD3/yzpH6qg2xppZO1YDqGoVsNXfQfzHpOdNuXwrwOU8u4ITXJyDCTyt8w5g1sZv9ynQ==
|
||||
|
||||
ts-node@^10.9.1:
|
||||
version "10.9.2"
|
||||
resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.2.tgz#70f021c9e185bccdca820e26dc413805c101c71f"
|
||||
@@ -4226,7 +4513,7 @@ tslib@2.7.0:
|
||||
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.7.0.tgz#d9b40c5c40ab59e8738f297df3087bf1a2690c01"
|
||||
integrity sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==
|
||||
|
||||
tslib@^2.6.2:
|
||||
tslib@^2.0.0, tslib@^2.6.2:
|
||||
version "2.8.1"
|
||||
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f"
|
||||
integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==
|
||||
@@ -4250,10 +4537,14 @@ type-detect@^4.0.0, type-detect@^4.1.0:
|
||||
resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.1.0.tgz#deb2453e8f08dcae7ae98c626b13dddb0155906c"
|
||||
integrity sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==
|
||||
|
||||
type-fest@^0.20.2:
|
||||
version "0.20.2"
|
||||
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4"
|
||||
integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==
|
||||
typescript-eslint@8.20.0:
|
||||
version "8.20.0"
|
||||
resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-8.20.0.tgz#76d4ea6a483fd49830a7e8baccaed10f76d1e57b"
|
||||
integrity sha512-Kxz2QRFsgbWj6Xcftlw3Dd154b3cEPFqQC+qMZrMypSijPd4UanKKvoKDrJ4o8AIfZFKAF+7sMaEIR8mTElozA==
|
||||
dependencies:
|
||||
"@typescript-eslint/eslint-plugin" "8.20.0"
|
||||
"@typescript-eslint/parser" "8.20.0"
|
||||
"@typescript-eslint/utils" "8.20.0"
|
||||
|
||||
typescript@5.5.4:
|
||||
version "5.5.4"
|
||||
|
||||
Reference in New Issue
Block a user