diff --git a/.github/actions/setup-node/action.yml b/.github/actions/setup-node/action.yml new file mode 100644 index 000000000..5e95bed94 --- /dev/null +++ b/.github/actions/setup-node/action.yml @@ -0,0 +1,24 @@ +name: Setup node +description: Sets up node and pnpm + +inputs: + pnpm-version: + description: Version of pnpm to install + required: false + default: "9" + node-version: + description: Version of node to install + required: false + default: "20" + +runs: + using: composite + steps: + - uses: pnpm/action-setup@v4 + with: + version: ${{ inputs.pnpm-version }} + - uses: actions/setup-node@v4 + id: setup-node + with: + node-version: ${{ inputs.node-version }} + cache: pnpm diff --git a/.github/actions/setup-rust/action.yml b/.github/actions/setup-rust/action.yml new file mode 100644 index 000000000..89149af4b --- /dev/null +++ b/.github/actions/setup-rust/action.yml @@ -0,0 +1,13 @@ +name: Setup rust +description: Sets up rust + +runs: + using: composite + steps: + - name: Install Rust (stable) + uses: actions-rs/toolchain@v1 + with: + profile: minimal + override: true + + - uses: Swatinem/rust-cache@v2 diff --git a/.github/workflows/edr-benchmark.yml b/.github/workflows/edr-benchmark.yml index 2898e0bb6..0b21f72c2 100644 --- a/.github/workflows/edr-benchmark.yml +++ b/.github/workflows/edr-benchmark.yml @@ -27,21 +27,8 @@ jobs: if: github.ref == 'refs/heads/main' || github.repository == github.event.pull_request.head.repo.full_name steps: - uses: actions/checkout@v3 - - - uses: pnpm/action-setup@v4 - with: - version: 9 - - name: Install Node - uses: actions/setup-node@v2 - with: - node-version: 20 - cache: pnpm - - - name: Install Rust (stable) - uses: actions-rs/toolchain@v1 - with: - profile: minimal - override: true + - uses: ./.github/actions/setup-node + - uses: ./.github/actions/setup-rust - name: Install package run: pnpm install --frozen-lockfile --prefer-offline diff --git a/.github/workflows/edr-ci.yml b/.github/workflows/edr-ci.yml index da1006ede..370df043e 100644 --- a/.github/workflows/edr-ci.yml +++ b/.github/workflows/edr-ci.yml @@ -23,18 +23,11 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - - - name: Install Rust (stable) - uses: actions-rs/toolchain@v1 - with: - profile: minimal - override: true + - uses: ./.github/actions/setup-rust # Install pre-built binaries for cargo hack - uses: taiki-e/install-action@cargo-hack - - uses: Swatinem/rust-cache@v2 - - name: Cargo hack uses: actions-rs/cargo@v1 with: @@ -51,14 +44,7 @@ jobs: os: ["ubuntu-latest", "macos-latest", "windows-latest"] steps: - uses: actions/checkout@v3 - - - name: Install Rust (stable) - uses: actions-rs/toolchain@v1 - with: - profile: minimal - override: true - - - uses: Swatinem/rust-cache@v2 + - uses: ./.github/actions/setup-rust - name: Cache EDR RPC cache uses: actions/cache@v2 @@ -145,14 +131,7 @@ jobs: needs: check-edr steps: - uses: actions/checkout@v3 - - - name: Install stable toolchain - uses: actions-rs/toolchain@v1 - with: - profile: minimal - override: true - - - uses: Swatinem/rust-cache@v2 + - uses: ./.github/actions/setup-rust - name: Cargo doc uses: actions-rs/cargo@v1 @@ -160,40 +139,24 @@ jobs: command: doc args: --workspace --no-deps --all-features - prettier: + lint: name: Run Prettier runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - - - uses: pnpm/action-setup@v4 - with: - version: 9 - - name: Install Node - uses: actions/setup-node@v2 - with: - node-version: ${{ matrix.node }} - cache: pnpm + - uses: ./.github/actions/setup-node - name: Install package run: pnpm install --frozen-lockfile --prefer-offline - - - name: Run prettier - run: pnpm run prettier + - name: Run lint script + run: pnpm run lint edr-napi-typings-file: name: Check that edr_napi typings file is up to date runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - - uses: pnpm/action-setup@v4 - with: - version: 9 - - name: Install Node - uses: actions/setup-node@v2 - with: - node-version: ${{ matrix.node }} - cache: pnpm + - uses: ./.github/actions/setup-node - name: Install package run: pnpm install --frozen-lockfile --prefer-offline diff --git a/.github/workflows/edr-npm-release.yml b/.github/workflows/edr-npm-release.yml index 29daf26f9..63daf5399 100644 --- a/.github/workflows/edr-npm-release.yml +++ b/.github/workflows/edr-npm-release.yml @@ -101,7 +101,7 @@ jobs: uses: actions/setup-node@v3 if: ${{ !matrix.settings.docker }} with: - node-version: 18 + node-version: 20 check-latest: true cache: pnpm - name: Install Rust toolchain @@ -174,15 +174,7 @@ jobs: working-directory: ./crates/edr_napi steps: - uses: actions/checkout@v4 - - uses: pnpm/action-setup@v4 - with: - version: 9 - - name: Setup node - uses: actions/setup-node@v3 - with: - node-version: ${{ matrix.node }} - check-latest: true - cache: pnpm + - uses: ./.github/actions/setup-node - name: Install dependencies run: pnpm install --frozen-lockfile --prefer-offline - name: Download artifacts @@ -208,15 +200,7 @@ jobs: runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v4 - - uses: pnpm/action-setup@v4 - with: - version: 9 - - name: Setup node - uses: actions/setup-node@v3 - with: - node-version: ${{ matrix.node }} - check-latest: true - cache: pnpm + - uses: ./.github/actions/setup-node - name: Install dependencies run: pnpm install --frozen-lockfile --prefer-offline - name: Download artifacts @@ -244,15 +228,9 @@ jobs: runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v4 - - uses: pnpm/action-setup@v4 - with: - version: 9 - - name: Setup node - uses: actions/setup-node@v3 + - uses: ./.github/actions/setup-node with: node-version: ${{ matrix.node }} - check-latest: true - cache: pnpm - name: Install dependencies run: | pnpm config set supportedArchitectures.libc "musl" @@ -395,15 +373,7 @@ jobs: working-directory: ./crates/edr_napi steps: - uses: actions/checkout@v4 - - uses: pnpm/action-setup@v4 - with: - version: 9 - - name: Setup node - uses: actions/setup-node@v3 - with: - node-version: 18 - check-latest: true - cache: pnpm + - uses: ./.github/actions/setup-node - name: Install dependencies run: pnpm install --frozen-lockfile --prefer-offline - name: Download all artifacts diff --git a/.github/workflows/hardhat-tests.yml b/.github/workflows/hardhat-tests.yml index 1a0a0e64f..f3cabc4ec 100644 --- a/.github/workflows/hardhat-tests.yml +++ b/.github/workflows/hardhat-tests.yml @@ -16,27 +16,14 @@ jobs: strategy: fail-fast: false matrix: - node: [18.15] + node: [20] os: ["macos-latest", "ubuntu-latest", "windows-latest"] steps: - uses: actions/checkout@v3 - - - uses: pnpm/action-setup@v4 - with: - version: 9 - - name: Install Node - uses: actions/setup-node@v2 + - uses: ./.github/actions/setup-node with: node-version: ${{ matrix.node }} - cache: pnpm - - - name: Install Rust (stable) - uses: actions-rs/toolchain@v1 - with: - profile: minimal - override: true - - - uses: Swatinem/rust-cache@v2 + - uses: ./.github/actions/setup-rust - name: Install package run: pnpm install --frozen-lockfile --prefer-offline @@ -55,9 +42,6 @@ jobs: hardhat-tests/test/internal/hardhat-network/stack-traces/test-files/artifacts key: hardhat-network-stack-traces-tests-${{ hashFiles('hardhat-tests/test/internal/hardhat-network/stack-traces/test-files/**/*.sol') }}-${{ hashFiles('hardhat-tests/test/internal/hardhat-network/stack-traces/test-files/**/test.json') }}-${{ hashFiles('hardhat-tests/test/internal/hardhat-network/stack-traces/**/*.ts') }} - - name: Build - run: cd hardhat-tests && pnpm build - - name: Run tests env: INFURA_URL: ${{ secrets.INFURA_URL }} @@ -72,15 +56,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - - - uses: pnpm/action-setup@v4 - with: - version: 9 - - name: Install Node - uses: actions/setup-node@v2 - with: - node-version: 18.15 - cache: pnpm + - uses: ./.github/actions/setup-node - name: Install package run: pnpm install --frozen-lockfile --prefer-offline diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 3d257774b..220e625a9 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -19,16 +19,7 @@ jobs: # This makes Actions fetch all Git history so that Changesets can generate changelogs with the correct commits fetch-depth: 0 - - name: Setup pnpm - uses: pnpm/action-setup@v4 - with: - version: 9 - - - name: Setup Node.js 18.x - uses: actions/setup-node@v2 - with: - node-version: 18.x - cache: "pnpm" + - uses: ./.github/actions/setup-node - name: Install Dependencies run: pnpm install --frozen-lockfile --prefer-offline diff --git a/.github/workflows/test-recent-mainnet-block.yml b/.github/workflows/test-recent-mainnet-block.yml index 31ccf1841..eadba2abd 100644 --- a/.github/workflows/test-recent-mainnet-block.yml +++ b/.github/workflows/test-recent-mainnet-block.yml @@ -15,14 +15,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - - - name: Install Rust (stable) - uses: actions-rs/toolchain@v1 - with: - profile: minimal - override: true - - - uses: Swatinem/rust-cache@v2 + - uses: ./.github/actions/setup-rust - name: Cache EDR RPC cache uses: actions/cache@v2 diff --git a/.prettierrc.json b/.prettierrc.json index d2504b43d..b3110dc17 100644 --- a/.prettierrc.json +++ b/.prettierrc.json @@ -1,3 +1,4 @@ { - "proseWrap": "never" + "proseWrap": "never", + "trailingComma": "es5" } diff --git a/.syncpackrc.js b/.syncpackrc.js new file mode 100644 index 000000000..a6fddf44b --- /dev/null +++ b/.syncpackrc.js @@ -0,0 +1,22 @@ +// @ts-check + +/** @type {import("syncpack").RcFile} */ +const config = { + versionGroups: [ + // smock only works with ethers v5 + { + packages: ["hardhat-edr-smock-test"], + dependencies: ["ethers"], + // latest ethers v5 version + pinVersion: "5.7.2", + }, + ], + semverGroups: [ + { + dependencies: ["typescript"], + range: "~", + }, + ], +}; + +module.exports = config; diff --git a/crates/edr_napi/.eslintrc.js b/crates/edr_napi/.eslintrc.js new file mode 100644 index 000000000..c22e2c6a3 --- /dev/null +++ b/crates/edr_napi/.eslintrc.js @@ -0,0 +1,17 @@ +module.exports = { + extends: [`${__dirname}/../../config/eslint/eslintrc.js`], + parserOptions: { + project: `${__dirname}/tsconfig.json`, + sourceType: "module", + }, + rules: { + "@typescript-eslint/restrict-template-expressions": "off", + "import/no-extraneous-dependencies": [ + "error", + { + devDependencies: true, + }, + ], + "prefer-template": "off", + }, +}; diff --git a/crates/edr_napi/package.json b/crates/edr_napi/package.json index 89cedc17f..d6ad597d2 100644 --- a/crates/edr_napi/package.json +++ b/crates/edr_napi/package.json @@ -1,8 +1,30 @@ { "name": "@nomicfoundation/edr", "version": "0.5.2", - "main": "index.js", - "types": "index.d.ts", + "devDependencies": { + "@napi-rs/cli": "^2.18.1", + "@types/chai": "^4.2.0", + "@types/chai-as-promised": "^7.1.8", + "@types/mocha": ">=9.1.0", + "@types/node": "^20.0.0", + "@typescript-eslint/eslint-plugin": "5.61.0", + "@typescript-eslint/parser": "5.61.0", + "chai": "^4.3.6", + "chai-as-promised": "^7.1.1", + "eslint": "^8.44.0", + "eslint-config-prettier": "9.1.0", + "eslint-plugin-import": "2.27.5", + "eslint-plugin-mocha": "10.4.1", + "eslint-plugin-prettier": "5.2.1", + "json-stream-stringify": "^3.1.4", + "mocha": "^10.0.0", + "prettier": "^3.2.5", + "ts-node": "^10.8.0", + "typescript": "~5.0.0" + }, + "engines": { + "node": ">= 18" + }, "files": [ "index.js", "index.d.ts", @@ -10,10 +32,8 @@ "build.rs", "src/" ], - "repository": { - "url": "https://github.com/NomicFoundation/edr.git", - "type": "git" - }, + "license": "MIT", + "main": "index.js", "napi": { "name": "edr", "triples": { @@ -29,35 +49,24 @@ ] } }, - "license": "MIT", - "devDependencies": { - "@napi-rs/cli": "^2.18.1", - "@types/chai": "^4.2.0", - "@types/chai-as-promised": "^7.1.8", - "@types/mocha": ">=9.1.0", - "@types/node": "^18.0.0", - "chai": "^4.3.6", - "chai-as-promised": "^7.1.1", - "json-stream-stringify": "^3.1.4", - "mocha": "^10.0.0", - "ts-node": "^10.8.0", - "typescript": "~4.5.2" - }, - "engines": { - "node": ">= 18" - }, + "repository": "NomicFoundation/edr.git", "scripts": { "artifacts": "napi artifacts", "build": "napi build --platform --release", "build:debug": "napi build --platform", - "build:tracing": "napi build --platform --release --features tracing", "build:scenarios": "napi build --platform --release --features scenarios", + "build:tracing": "napi build --platform --release --features tracing", + "clean": "rm -rf @nomicfoundation/edr.node", + "eslint": "eslint 'test/**/*.ts'", + "lint": "pnpm run prettier && pnpm run eslint", + "lint:fix": "pnpm run prettier --write", "prepublishOnly": "bash scripts/prepublish.sh", - "universal": "napi universal", - "version": "napi version", "pretest": "pnpm build", + "prettier": "prettier --check \"test/**.ts\"", "test": "pnpm tsc && node --max-old-space-size=8192 node_modules/mocha/bin/_mocha --recursive \"test/**/*.ts\"", "testNoBuild": "pnpm tsc && node --max-old-space-size=8192 node_modules/mocha/bin/_mocha --recursive \"test/**/*.ts\"", - "clean": "rm -rf @nomicfoundation/edr.node" - } + "universal": "napi universal", + "version": "napi version" + }, + "types": "index.d.ts" } diff --git a/crates/edr_napi/test/helpers.ts b/crates/edr_napi/test/helpers.ts index ba2b1aa81..3fc7dd549 100644 --- a/crates/edr_napi/test/helpers.ts +++ b/crates/edr_napi/test/helpers.ts @@ -21,7 +21,7 @@ export function isCI(): boolean { * Given a trace, return only its steps. */ export function collectSteps( - trace: Array, + trace: Array ): TracingStep[] { return trace.filter((traceItem) => "pc" in traceItem) as TracingStep[]; } @@ -30,9 +30,9 @@ export function collectSteps( * Given a trace, return only its messages. */ export function collectMessages( - trace: Array, + trace: Array ): TracingMessage[] { return trace.filter( - (traceItem) => "isStaticCall" in traceItem, + (traceItem) => "isStaticCall" in traceItem ) as TracingMessage[]; } diff --git a/crates/edr_napi/test/issues.ts b/crates/edr_napi/test/issues.ts index fa3fe82aa..f57290c21 100644 --- a/crates/edr_napi/test/issues.ts +++ b/crates/edr_napi/test/issues.ts @@ -1,4 +1,3 @@ -import chai, { assert } from "chai"; import { JsonStreamStringify } from "json-stream-stringify"; import { @@ -37,7 +36,7 @@ describe("Provider", () => { }, initialParentBeaconBlockRoot: Buffer.from( "0000000000000000000000000000000000000000000000000000000000000000", - "hex", + "hex" ), minGasPrice: 0n, mining: { @@ -51,18 +50,18 @@ describe("Provider", () => { const loggerConfig = { enable: false, - decodeConsoleLogInputsCallback: (inputs: Buffer[]): string[] => { + decodeConsoleLogInputsCallback: (_inputs: Buffer[]): string[] => { return []; }, getContractAndFunctionNameCallback: ( _code: Buffer, - _calldata?: Buffer, + _calldata?: Buffer ): ContractAndFunctionName => { return { contractName: "", }; }, - printLineCallback: (message: string, replace: boolean) => {}, + printLineCallback: (_message: string, _replace: boolean) => {}, }; it("issue 543", async function () { @@ -83,7 +82,7 @@ describe("Provider", () => { ...providerConfig, }, loggerConfig, - (_event: SubscriptionEvent) => {}, + (_event: SubscriptionEvent) => {} ); const debugTraceTransaction = `{ diff --git a/crates/edr_napi/test/provider.ts b/crates/edr_napi/test/provider.ts index 7a43e48b0..84a7c1ecd 100644 --- a/crates/edr_napi/test/provider.ts +++ b/crates/edr_napi/test/provider.ts @@ -39,7 +39,7 @@ describe("Provider", () => { }, initialParentBeaconBlockRoot: Buffer.from( "0000000000000000000000000000000000000000000000000000000000000000", - "hex", + "hex" ), minGasPrice: 0n, mining: { @@ -53,18 +53,18 @@ describe("Provider", () => { const loggerConfig = { enable: false, - decodeConsoleLogInputsCallback: (inputs: Buffer[]): string[] => { + decodeConsoleLogInputsCallback: (_inputs: Buffer[]): string[] => { return []; }, getContractAndFunctionNameCallback: ( _code: Buffer, - _calldata?: Buffer, + _calldata?: Buffer ): ContractAndFunctionName => { return { contractName: "", }; }, - printLineCallback: (message: string, replace: boolean) => {}, + printLineCallback: (_message: string, _replace: boolean) => {}, }; it("initialize local", async function () { @@ -72,7 +72,7 @@ describe("Provider", () => { context, providerConfig, loggerConfig, - (_event: SubscriptionEvent) => {}, + (_event: SubscriptionEvent) => {} ); await assert.isFulfilled(provider); @@ -92,7 +92,7 @@ describe("Provider", () => { ...providerConfig, }, loggerConfig, - (_event: SubscriptionEvent) => {}, + (_event: SubscriptionEvent) => {} ); await assert.isFulfilled(provider); @@ -104,7 +104,7 @@ describe("Provider", () => { context, providerConfig, loggerConfig, - (_event: SubscriptionEvent) => {}, + (_event: SubscriptionEvent) => {} ); const responseObject = await provider.handleRequest( @@ -122,7 +122,7 @@ describe("Provider", () => { data: "0x60016002600300", }, ], - }), + }) ); const rawTraces = responseObject.traces; @@ -144,7 +144,7 @@ describe("Provider", () => { context, providerConfig, loggerConfig, - (_event: SubscriptionEvent) => {}, + (_event: SubscriptionEvent) => {} ); provider.setVerboseTracing(true); @@ -164,7 +164,7 @@ describe("Provider", () => { data: "0x60016002600300", }, ], - }), + }) ); const rawTraces = responseObject.traces; @@ -189,7 +189,7 @@ describe("Provider", () => { context, providerConfig, loggerConfig, - (_event: SubscriptionEvent) => {}, + (_event: SubscriptionEvent) => {} ); const responseObject = await provider.handleRequest( @@ -208,7 +208,7 @@ describe("Provider", () => { data: "0x60015f5200", }, ], - }), + }) ); const rawTraces = responseObject.traces; @@ -228,7 +228,7 @@ describe("Provider", () => { context, providerConfig, loggerConfig, - (_event: SubscriptionEvent) => {}, + (_event: SubscriptionEvent) => {} ); provider.setVerboseTracing(true); @@ -249,7 +249,7 @@ describe("Provider", () => { data: "0x60015f5200", }, ], - }), + }) ); const rawTraces = responseObject.traces; @@ -265,7 +265,7 @@ describe("Provider", () => { assertEqualMemory(steps[2].memory, Buffer.from([])); assertEqualMemory( steps[3].memory, - Buffer.from([...Array(31).fill(0), 1]), + Buffer.from([...Array(31).fill(0), 1]) ); }); @@ -274,7 +274,7 @@ describe("Provider", () => { context, providerConfig, loggerConfig, - (_event: SubscriptionEvent) => {}, + (_event: SubscriptionEvent) => {} ); const responseObject = await provider.handleRequest( @@ -291,7 +291,7 @@ describe("Provider", () => { gas: "0x" + 1_000_000n.toString(16), }, ], - }), + }) ); const rawTraces = responseObject.traces; @@ -313,7 +313,7 @@ describe("Provider", () => { context, providerConfig, loggerConfig, - (_event: SubscriptionEvent) => {}, + (_event: SubscriptionEvent) => {} ); const sendTxResponse = await provider.handleRequest( @@ -334,7 +334,7 @@ describe("Provider", () => { gas: "0x" + 1_000_000n.toString(16), }, ], - }), + }) ); let responseData; @@ -353,7 +353,7 @@ describe("Provider", () => { jsonrpc: "2.0", method: "debug_traceTransaction", params: [txHash], - }), + }) ); const rawTraces = traceTransactionResponse.traces; @@ -365,7 +365,7 @@ describe("Provider", () => { context, providerConfig, loggerConfig, - (_event: SubscriptionEvent) => {}, + (_event: SubscriptionEvent) => {} ); const traceCallResponse = await provider.handleRequest( @@ -386,7 +386,7 @@ describe("Provider", () => { gas: "0x" + 1_000_000n.toString(16), }, ], - }), + }) ); const rawTraces = traceCallResponse.traces; diff --git a/crates/tools/js/benchmark/.eslintrc.js b/crates/tools/js/benchmark/.eslintrc.js new file mode 100644 index 000000000..be06a03ed --- /dev/null +++ b/crates/tools/js/benchmark/.eslintrc.js @@ -0,0 +1,17 @@ +module.exports = { + extends: [`${__dirname}/../../../../config/eslint/eslintrc.js`], + parserOptions: { + project: `${__dirname}/tsconfig.json`, + sourceType: "module", + }, + rules: { + "@typescript-eslint/restrict-template-expressions": "off", + "import/no-extraneous-dependencies": [ + "error", + { + devDependencies: true, + }, + ], + "prefer-template": "off", + }, +}; diff --git a/crates/tools/js/benchmark/package.json b/crates/tools/js/benchmark/package.json index a66072a39..55a9b7bbb 100644 --- a/crates/tools/js/benchmark/package.json +++ b/crates/tools/js/benchmark/package.json @@ -1,26 +1,42 @@ { "name": "benchmark", - "version": "1.0.0", - "private": true, "description": "", - "main": "index.js", - "scripts": { - "benchmark": "node --noconcurrent_sweeping --noconcurrent_recompilation --max-old-space-size=28000 index.js benchmark", - "prebenchmark": "cd ../../../edr_napi/ && pnpm build", - "verify": "node index.js verify", - "report": "node index.js report", - "test": "mocha --recursive \"test/**/*.js\"", - "help": "node index.js -h" - }, - "keywords": [], + "version": "1.0.0", "author": "", - "license": "ISC", "devDependencies": { + "@types/argparse": "^2.0.16", + "@types/chai": "^4.2.0", + "@types/lodash": "^4.14.123", + "@types/node": "^20.0.0", + "@typescript-eslint/eslint-plugin": "5.61.0", + "@typescript-eslint/parser": "5.61.0", "argparse": "^2.0.1", - "chai": "^4.2.0", + "chai": "^4.3.6", + "eslint": "^8.44.0", + "eslint-config-prettier": "9.1.0", + "eslint-plugin-import": "2.27.5", + "eslint-plugin-mocha": "10.4.1", + "eslint-plugin-prettier": "5.2.1", "hardhat": "2.22.7", "lodash": "^4.17.11", "mocha": "^10.0.0", + "prettier": "^3.2.5", "tsx": "^4.7.1" + }, + "keywords": [], + "license": "ISC", + "private": true, + "scripts": { + "benchmark": "node --noconcurrent_sweeping --noconcurrent_recompilation --max-old-space-size=28000 --import tsx src/index.ts benchmark", + "eslint": "eslint \"**/*.ts\"", + "help": "tsx src/index.ts -h", + "lint": "pnpm run typecheck && pnpm run prettier && pnpm run eslint", + "lint:fix": "pnpm run prettier --write", + "prebenchmark": "cd ../../../edr_napi/ && pnpm build", + "prettier": "prettier --check \"**/*.{js,ts}\"", + "report": "tsx src/index.ts report", + "test": "mocha --recursive --require tsx/cjs \"test/**/*.ts\"", + "typecheck": "tsc --noEmit", + "verify": "tsx src/index.ts verify" } } diff --git a/crates/tools/js/benchmark/index.js b/crates/tools/js/benchmark/src/index.ts similarity index 66% rename from crates/tools/js/benchmark/index.js rename to crates/tools/js/benchmark/src/index.ts index df57cf853..b87f2ee2c 100644 --- a/crates/tools/js/benchmark/index.js +++ b/crates/tools/js/benchmark/src/index.ts @@ -1,24 +1,54 @@ // Trigger change -const child_process = require("child_process"); -const path = require("path"); -const fs = require("fs"); -const readline = require("readline"); -const zlib = require("zlib"); - -const { ArgumentParser } = require("argparse"); -const { _ } = require("lodash"); - -const { - createHardhatNetworkProvider, -} = require("hardhat/internal/hardhat-network/provider/provider"); -const { HttpProvider } = require("hardhat/internal/core/providers/http"); - -const SCENARIOS_DIR = "../../scenarios/"; +import { ArgumentParser } from "argparse"; +import child_process, { SpawnSyncReturns } from "child_process"; +import fs from "fs"; +import { HttpProvider } from "hardhat/internal/core/providers/http"; +import { createHardhatNetworkProvider } from "hardhat/internal/hardhat-network/provider/provider"; +import _ from "lodash"; +import path from "path"; +import readline from "readline"; +import zlib from "zlib"; + +const SCENARIOS_DIR = "../../../scenarios/"; const SCENARIO_SNAPSHOT_NAME = "snapshot.json"; const NEPTUNE_MAX_MIN_FAILURES = 1.05; const ANVIL_HOST = "http://127.0.0.1:8545"; +interface ParsedArguments { + command: "benchmark" | "verify" | "report"; + grep?: string; + // eslint-disable-next-line @typescript-eslint/naming-convention + benchmark_output: string; + anvil: boolean; +} + +interface BenchmarkScenarioResult { + name: string; + result: BenchmarkResult; +} + +interface BenchmarkResult { + timeMs: number; + failures: number[]; +} + +interface BenchmarkScenarioRpcCalls { + rpcCallResults: any[]; + rpcCallErrors: any[]; +} + +interface BenchmarkScenarioReport { + name: string; + unit: string; + value: number; +} + +interface Scenario { + requests: any[]; + config?: any; +} + async function main() { const parser = new ArgumentParser({ description: "Scenario benchmark runner", @@ -40,61 +70,72 @@ async function main() { action: "store_true", help: "Run benchmarks on Anvil node", }); - const args = parser.parse_args(); + const args: ParsedArguments = parser.parse_args(); + + // if --benchmark-output is relative, resolve it relatively to cwd + // to reduce ambiguity + const benchmarkOutputPath = path.resolve( + process.cwd(), + args.benchmark_output + ); - // Make results not GC - let results; + let results: BenchmarkScenarioRpcCalls | undefined; if (args.command === "benchmark") { - if (args.grep) { - for (let scenarioFileName of getScenarioFileNames()) { + if (args.grep !== undefined) { + for (const scenarioFileName of getScenarioFileNames()) { if (scenarioFileName.includes(args.grep)) { + // We store the results to avoid GC + // eslint-disable-next-line @typescript-eslint/no-unused-vars results = await benchmarkScenario(scenarioFileName, args.anvil); } } } else { - await benchmarkAllScenarios(args.benchmark_output, args.anvil); + await benchmarkAllScenarios(benchmarkOutputPath, args.anvil); } await flushStdout(); } else if (args.command === "verify") { - const success = await verify(args.benchmark_output); + const success = await verify(benchmarkOutputPath); process.exit(success ? 0 : 1); } else if (args.command === "report") { - await report(args.benchmark_output); + await report(benchmarkOutputPath); await flushStdout(); } } -async function report(benchmarkResultPath) { - const benchmarkResult = require(benchmarkResultPath); +async function report(benchmarkResultPath: string) { + const benchmarkResult: Record = require( + benchmarkResultPath + ); let totalTime = 0; - const report = []; - for (let scenarioName in benchmarkResult) { - const scenarioResult = benchmarkResult[scenarioName]; - report.push({ + const reports: BenchmarkScenarioReport[] = []; + for (const [scenarioName, scenarioResult] of Object.entries( + benchmarkResult + )) { + reports.push({ name: scenarioName, unit: "ms", value: scenarioResult.timeMs, }); totalTime += scenarioResult.timeMs; } - report.unshift({ + reports.unshift({ name: "All Scenarios", unit: "ms", value: totalTime, }); - console.log(JSON.stringify(report)); + console.log(JSON.stringify(reports)); } -async function verify(benchmarkResultPath) { +async function verify(benchmarkResultPath: string) { let success = true; const benchmarkResult = require(benchmarkResultPath); const snapshotResult = require( - path.join(getScenariosDir(), SCENARIO_SNAPSHOT_NAME), + path.join(getScenariosDir(), SCENARIO_SNAPSHOT_NAME) ); - for (let scenarioName in snapshotResult) { + for (const scenarioName of Object.keys(snapshotResult)) { // TODO https://github.com/NomicFoundation/edr/issues/365 if (scenarioName.includes("neptune-mutual")) { const snapshotCount = snapshotResult[scenarioName].failures.length; @@ -106,7 +147,7 @@ async function verify(benchmarkResultPath) { if (ratio > NEPTUNE_MAX_MIN_FAILURES) { console.error( `Snapshot failure for ${scenarioName} with max/min failure ratio`, - ratio, + ratio ); success = false; } @@ -114,30 +155,31 @@ async function verify(benchmarkResultPath) { continue; } - let snapshotFailures = new Set(snapshotResult[scenarioName].failures); - let benchFailures = new Set(benchmarkResult[scenarioName].failures); + const snapshotFailures = new Set(snapshotResult[scenarioName].failures); + const benchFailures = new Set(benchmarkResult[scenarioName].failures); if (!_.isEqual(snapshotFailures, benchFailures)) { success = false; const shouldFail = setDifference(snapshotFailures, benchFailures); const shouldNotFail = setDifference(benchFailures, snapshotFailures); - // We're logging to stderr so that it doesn't pollute stdout where we write the result + // We're logging to stderr so that it doesn't pollute stdout where we + // write the result console.error(`Snapshot failure for ${scenarioName}`); if (shouldFail.size > 0) { console.error( `Scenario ${scenarioName} should fail at indexes ${Array.from( - shouldFail, - ).sort()}`, + shouldFail + ).sort()}` ); } if (shouldNotFail.size > 0) { console.error( `Scenario ${scenarioName} should not fail at indexes ${Array.from( - shouldNotFail, - ).sort()}`, + shouldNotFail + ).sort()}` ); } } @@ -151,20 +193,22 @@ async function verify(benchmarkResultPath) { } // From https://stackoverflow.com/a/66512466 -function setDifference(a, b) { +function setDifference(a: Set, b: Set): Set { return new Set(Array.from(a).filter((item) => !b.has(item))); } -async function benchmarkAllScenarios(outPath, useAnvil) { - const result = {}; +async function benchmarkAllScenarios(outPath: string, useAnvil: boolean) { + const result: any = {}; let totalTime = 0; let totalFailures = 0; - for (let scenarioFileName of getScenarioFileNames()) { + for (const scenarioFileName of getScenarioFileNames()) { const args = [ "--noconcurrent_sweeping", "--noconcurrent_recompilation", "--max-old-space-size=28000", - "index.js", + "--import", + "tsx", + "src/index.ts", "benchmark", "-g", scenarioFileName, @@ -173,21 +217,22 @@ async function benchmarkAllScenarios(outPath, useAnvil) { args.push("--anvil"); } + let processResult: SpawnSyncReturns | undefined; try { - const scenarioResults = []; + const scenarioResults: BenchmarkScenarioResult[] = []; const iterations = numIterations(scenarioFileName); for (let i = 0; i < iterations; i++) { // Run in subprocess with grep to simulate Hardhat test runner behaviour // where there is one provider per process - const processResult = child_process.spawnSync(process.argv[0], args, { + processResult = child_process.spawnSync(process.argv[0], args, { shell: true, timeout: 60 * 60 * 1000, // Pipe stdout, proxy the rest stdio: [process.stdin, "pipe", process.stderr], encoding: "utf-8", }); - const scenarioResult = JSON.parse(processResult.stdout); - scenarioResults.push(scenarioResult); + const resultFromStdout: any = JSON.parse(processResult.stdout); + scenarioResults.push(resultFromStdout); } const scenarioResult = medianOfResults(scenarioResults); totalTime += scenarioResult.result.timeMs; @@ -195,24 +240,27 @@ async function benchmarkAllScenarios(outPath, useAnvil) { result[scenarioResult.name] = scenarioResult.result; } catch (e) { console.error(e); - console.error(processResult.stdout.toString()); + if (processResult !== undefined) { + console.error(processResult.stdout); + } throw e; } } fs.writeFileSync(outPath, JSON.stringify(result) + "\n"); - // Log info to stderr so that it doesn't pollute stdout where we write the result + // Log info to stderr so that it doesn't pollute stdout where we write the + // result console.error( `Total time ${ Math.round(100 * (totalTime / 1000)) / 100 - } seconds with ${totalFailures} failures.`, + } seconds with ${totalFailures} failures.` ); console.error(`Benchmark results written to ${outPath}`); } -function numIterations(scenarioName) { +function numIterations(scenarioName: string): number { // Run fast scenarios repeatedly to get more reliable results if (scenarioName.includes("safe-contracts")) { return 15; @@ -230,7 +278,7 @@ function numIterations(scenarioName) { } } -function medianOfResults(results) { +function medianOfResults(results: BenchmarkScenarioResult[]) { if (results.length === 0) { throw new Error("No results to calculate median"); } @@ -239,8 +287,11 @@ function medianOfResults(results) { return sorted[middle]; } -async function benchmarkScenario(scenarioFileName, useAnvil) { - let { config, requests } = await loadScenario(scenarioFileName); +async function benchmarkScenario( + scenarioFileName: string, + useAnvil: boolean +): Promise { + const { config, requests } = await loadScenario(scenarioFileName); const name = path.basename(scenarioFileName).split(".")[0]; console.error(`Running ${name} scenario`); @@ -261,8 +312,8 @@ async function benchmarkScenario(scenarioFileName, useAnvil) { for (let i = 0; i < requests.length; i += 1) { try { - const result = await provider.request(requests[i]); - rpcCallResults.push(result); + const rpcCallResult = await provider.request(requests[i]); + rpcCallResults.push(rpcCallResult); } catch (e) { rpcCallErrors.push(e); failures.push(i); @@ -274,10 +325,10 @@ async function benchmarkScenario(scenarioFileName, useAnvil) { console.error( `${name} finished in ${ Math.round(100 * (timeMs / 1000)) / 100 - } seconds with ${failures.length} failures.`, + } seconds with ${failures.length} failures.` ); - const result = { + const result: BenchmarkScenarioResult = { name, result: { timeMs, @@ -290,8 +341,8 @@ async function benchmarkScenario(scenarioFileName, useAnvil) { return { rpcCallResults, rpcCallErrors }; } -async function loadScenario(scenarioFileName) { - const result = { +async function loadScenario(scenarioFileName: string): Promise { + const result: Scenario = { requests: [], }; let i = 0; @@ -308,10 +359,10 @@ async function loadScenario(scenarioFileName) { return result; } -function preprocessConfig(config) { +function preprocessConfig(config: any) { // From https://stackoverflow.com/a/59771233 - const camelize = (obj) => - _.transform(obj, (acc, value, key, target) => { + const camelize = (obj: any) => + _.transform(obj, (acc: any, value: any, key: any, target: any) => { const camelKey = _.isArray(target) ? key : _.camelCase(key); acc[camelKey] = _.isObject(value) ? camelize(value) : value; @@ -319,8 +370,8 @@ function preprocessConfig(config) { config = camelize(config); // EDR serializes None as null to json, but Hardhat expects it to be undefined - const removeNull = (obj) => - _.transform(obj, (acc, value, key) => { + const removeNull = (obj: any) => + _.transform(obj, (acc: any, value: any, key: any) => { if (_.isObject(value)) { acc[key] = removeNull(value); } else if (!_.isNull(value)) { @@ -330,11 +381,11 @@ function preprocessConfig(config) { config = removeNull(config); config.providerConfig.initialDate = new Date( - config.providerConfig.initialDate.secsSinceEpoch * 1000, + config.providerConfig.initialDate.secsSinceEpoch * 1000 ); config.providerConfig.hardfork = normalizeHardfork( - config.providerConfig.hardfork, + config.providerConfig.hardfork ); // "accounts" in EDR are "genesisAccounts" in Hardhat @@ -342,9 +393,9 @@ function preprocessConfig(config) { throw new Error("Genesis accounts are not supported"); } config.providerConfig.genesisAccounts = config.providerConfig.accounts.map( - ({ balance, secretKey }) => { + ({ balance, secretKey }: any) => { return { balance, privateKey: secretKey }; - }, + } ); delete config.providerConfig.accounts; @@ -362,11 +413,11 @@ function preprocessConfig(config) { config.providerConfig.bailOnTransactionFailure; delete config.providerConfig.bailOnTransactionFailure; - let chains = new Map(); - for (let key of Object.keys(config.providerConfig.chains)) { + const chains: any = new Map(); + for (const key of Object.keys(config.providerConfig.chains)) { const hardforkHistory = new Map(); const hardforks = config.providerConfig.chains[key].hardforks; - for (let [blockNumber, hardfork] of hardforks) { + for (const [blockNumber, hardfork] of hardforks) { hardforkHistory.set(normalizeHardfork(hardfork), blockNumber); } chains.set(Number(key), { hardforkHistory }); @@ -384,23 +435,23 @@ function preprocessConfig(config) { return config; } -function normalizeHardfork(hardfork) { +function normalizeHardfork(hardfork: string) { hardfork = _.camelCase(hardfork.toLowerCase()); if (hardfork === "frontier") { hardfork = "chainstart"; } else if (hardfork === "daoFork") { hardfork = "dao"; - } else if (hardfork == "tangerine") { + } else if (hardfork === "tangerine") { hardfork = "tangerineWhistle"; } return hardfork; } // From https://stackoverflow.com/a/65015455/2650622 -function readFile(path) { - let stream = fs.createReadStream(path); +function readFile(pathToRead: string) { + let stream: any = fs.createReadStream(pathToRead); - if (/\.gz$/i.test(path)) { + if (/\.gz$/i.test(pathToRead)) { stream = stream.pipe(zlib.createGunzip()); } @@ -414,7 +465,7 @@ function getScenariosDir() { return path.join(__dirname, SCENARIOS_DIR); } -function getScenarioFileNames() { +function getScenarioFileNames(): string[] { const scenariosDir = path.join(__dirname, SCENARIOS_DIR); const scenarioFiles = fs.readdirSync(scenariosDir); scenarioFiles.sort(); @@ -428,10 +479,10 @@ async function flushStdout() { } main() + .then(() => { + process.exit(0); + }) .catch((error) => { console.error(error); process.exit(1); - }) - .then(() => { - process.exit(0); }); diff --git a/crates/tools/js/benchmark/test/test-local-edr.js b/crates/tools/js/benchmark/test/test-local-edr.ts similarity index 87% rename from crates/tools/js/benchmark/test/test-local-edr.js rename to crates/tools/js/benchmark/test/test-local-edr.ts index c898c3392..d34b6e577 100644 --- a/crates/tools/js/benchmark/test/test-local-edr.js +++ b/crates/tools/js/benchmark/test/test-local-edr.ts @@ -1,5 +1,5 @@ -const { assert } = require("chai"); -const path = require("path"); +import { assert } from "chai"; +import path from "path"; // The benchmarks assume that the EDR version used by // Hardhat is the one in the workspace, instead of the one installed @@ -20,7 +20,7 @@ it("uses the workspace version of EDR", async function () { "..", "crates", "edr_napi", - "index.js", + "index.js" ); assert.equal(edrPath, expectedPath); diff --git a/crates/tools/js/benchmark/tsconfig.json b/crates/tools/js/benchmark/tsconfig.json index 574e785c7..f0076dfb4 100644 --- a/crates/tools/js/benchmark/tsconfig.json +++ b/crates/tools/js/benchmark/tsconfig.json @@ -7,5 +7,9 @@ "strict": true, "skipLibCheck": true, "resolveJsonModule": true - } + }, + "include": [ + "src/**/*.ts", + "test/**/*.ts" + ] } diff --git a/hardhat-tests/.eslintignore b/hardhat-tests/.eslintignore index a379b5efc..9cfea17d6 100644 --- a/hardhat-tests/.eslintignore +++ b/hardhat-tests/.eslintignore @@ -1 +1,2 @@ test/fixture-projects/**/* +/build-test diff --git a/hardhat-tests/.prettierignore b/hardhat-tests/.prettierignore index fa50be797..63774201b 100644 --- a/hardhat-tests/.prettierignore +++ b/hardhat-tests/.prettierignore @@ -18,3 +18,5 @@ edr-cache /.nyc_output CHANGELOG.md !.eslintrc.js +/integration/**/artifacts +/integration/**/cache diff --git a/hardhat-tests/integration/smock/package.json b/hardhat-tests/integration/smock/package.json index 645f54f0f..00d4ac0e2 100644 --- a/hardhat-tests/integration/smock/package.json +++ b/hardhat-tests/integration/smock/package.json @@ -1,18 +1,19 @@ { "name": "hardhat-edr-smock-test", - "private": true, - "version": "1.0.0", "description": "", - "main": "index.js", - "keywords": [], + "version": "1.0.0", "author": "", - "license": "MIT", "devDependencies": { "@defi-wonderland/smock": "^2.4.0", "@nomiclabs/hardhat-ethers": "^2.2.3", + "@types/node": "^20.0.0", "chai": "^4.3.6", - "ethers": "5", + "ethers": "5.7.2", "hardhat": "2.22.7", "mocha": "^10.0.0" - } + }, + "keywords": [], + "license": "MIT", + "main": "index.js", + "private": true } diff --git a/hardhat-tests/package.json b/hardhat-tests/package.json index d010700f5..dd6761697 100644 --- a/hardhat-tests/package.json +++ b/hardhat-tests/package.json @@ -2,22 +2,6 @@ "name": "hardhat-edr-tests", "version": "1.0.0", "author": "Nomic Foundation", - "license": "MIT", - "homepage": "https://hardhat.org", - "repository": "github:NomicFoundation/edr", - "scripts": { - "lint": "pnpm prettier --check && pnpm eslint", - "lint:fix": "pnpm prettier --write && pnpm eslint --fix", - "eslint": "eslint 'test/**/*.ts'", - "prettier": "prettier \"**/*.{js,md,json}\"", - "pretest": "pnpm build:edr", - "test": "mocha --recursive \"test/**/*.ts\"", - "test:integration": "bash run-integration-tests.sh", - "test:ci": "pnpm test && pnpm test:integration", - "build": "tsc --build --force --incremental .", - "build:edr": "cd ../crates/edr_napi && pnpm build", - "clean": "rimraf build-test tsconfig.tsbuildinfo test/internal/hardhat-network/provider/.hardhat_node_test_cache test/internal/hardhat-network/stack-traces/test-files/artifacts" - }, "devDependencies": { "@metamask/eth-sig-util": "^4.0.0", "@nomicfoundation/ethereumjs-block": "5.0.4", @@ -26,7 +10,7 @@ "@nomicfoundation/ethereumjs-util": "^9.0.4", "@types/async-eventemitter": "^0.2.1", "@types/chai": "^4.2.0", - "@types/chai-as-promised": "^7.1.3", + "@types/chai-as-promised": "^7.1.8", "@types/ci-info": "^2.0.0", "@types/debug": "^4.1.4", "@types/find-up": "^2.1.1", @@ -35,7 +19,7 @@ "@types/keccak": "^3.0.1", "@types/lodash": "^4.14.123", "@types/mocha": ">=9.1.0", - "@types/node": "^18.0.0", + "@types/node": "^20.0.0", "@types/resolve": "^1.17.1", "@types/semver": "^6.0.2", "@types/sinon": "^9.0.8", @@ -43,37 +27,41 @@ "@types/ws": "^7.2.1", "@typescript-eslint/eslint-plugin": "5.61.0", "@typescript-eslint/parser": "5.61.0", - "chai": "^4.2.0", + "chai": "^4.3.6", "chai-as-promised": "^7.1.1", "chalk": "^2.4.2", "eslint": "^8.44.0", - "eslint-config-prettier": "8.3.0", + "eslint-config-prettier": "9.1.0", "eslint-plugin-import": "2.27.5", "eslint-plugin-mocha": "10.4.1", - "eslint-plugin-prettier": "3.4.0", + "eslint-plugin-prettier": "5.2.1", "ethereumjs-abi": "^0.6.8", "ethers": "^6.1.0", "fs-extra": "^7.0.1", "hardhat": "2.22.7", "mocha": "^10.0.0", - "prettier": "2.4.1", + "prettier": "^3.2.5", "rimraf": "^3.0.2", - "sinon": "^9.0.0", "semver": "^6.3.0", + "sinon": "^9.0.0", "ts-node": "^10.8.0", "typescript": "~5.0.0", "undici": "^5.14.0" }, - "peerDependencies": { - "ts-node": "*", - "typescript": "*" - }, - "peerDependenciesMeta": { - "ts-node": { - "optional": true - }, - "typescript": { - "optional": true - } + "homepage": "https://hardhat.org", + "license": "MIT", + "repository": "github:NomicFoundation/edr", + "scripts": { + "build": "tsc --build --force --incremental . && pnpm run build:edr", + "build:edr": "cd ../crates/edr_napi && pnpm build", + "clean": "rimraf build-test tsconfig.tsbuildinfo test/internal/hardhat-network/provider/.hardhat_node_test_cache test/internal/hardhat-network/stack-traces/test-files/artifacts", + "eslint": "eslint '**/*.ts'", + "lint": "pnpm prettier && pnpm eslint", + "lint:fix": "pnpm prettier --write && pnpm eslint --fix", + "pretest": "pnpm build", + "prettier": "prettier --check \"**/*.{js,ts,md,json}\"", + "test": "mocha --recursive \"test/**/*.ts\"", + "test:ci": "pnpm test && pnpm test:integration", + "test:integration": "bash run-integration-tests.sh" } } diff --git a/hardhat-tests/test/internal/hardhat-network/provider/modules/eth/websocket.ts b/hardhat-tests/test/internal/hardhat-network/provider/modules/eth/websocket.ts index bfb4e0308..9846d2977 100644 --- a/hardhat-tests/test/internal/hardhat-network/provider/modules/eth/websocket.ts +++ b/hardhat-tests/test/internal/hardhat-network/provider/modules/eth/websocket.ts @@ -234,7 +234,7 @@ describe("Eth module", function () { async function sendJson< TBody extends TReq | TReq[], TReq extends JsonRpcRequest, - TResp extends JsonRpcResponse + TResp extends JsonRpcResponse, >(body: TBody): Promise { const resultPromise = new Promise((resolve) => { const listener: any = (message: any) => { diff --git a/hardhat-tests/test/internal/hardhat-network/provider/modules/hardhat.ts b/hardhat-tests/test/internal/hardhat-network/provider/modules/hardhat.ts index 747273da5..8ac2057bd 100644 --- a/hardhat-tests/test/internal/hardhat-network/provider/modules/hardhat.ts +++ b/hardhat-tests/test/internal/hardhat-network/provider/modules/hardhat.ts @@ -1288,9 +1288,8 @@ describe("Hardhat module", function () { await this.provider.send("hardhat_mine", [numberToRpcQuantity(20)]); - let previousBlockDifficulty = await getBlockDifficulty( - previousBlockNumber - ); + let previousBlockDifficulty = + await getBlockDifficulty(previousBlockNumber); for (let i = 1; i <= 20; i++) { const blockDifficulty = await getBlockDifficulty( @@ -1603,9 +1602,8 @@ describe("Hardhat module", function () { it("should get changed balance by block even after a new block is mined", async function () { // Arrange 1: Get current block number - const currentBlockNumber = await this.provider.send( - "eth_blockNumber" - ); + const currentBlockNumber = + await this.provider.send("eth_blockNumber"); // Arrange 2: Set a new balance const targetBalance = 123454321n; @@ -1677,9 +1675,8 @@ describe("Hardhat module", function () { it("should have its effects persist across snapshot save/restore", async function () { const a = DEFAULT_ACCOUNTS_ADDRESSES[0]; - const currentBlockNumber = await this.provider.send( - "eth_blockNumber" - ); + const currentBlockNumber = + await this.provider.send("eth_blockNumber"); // set balance1 const targetBalance1 = numberToRpcQuantity(1); @@ -1876,9 +1873,8 @@ describe("Hardhat module", function () { it("should get changed code by block even after a new block is mined", async function () { // Arrange 1: Get current block number - const currentBlockNumber = await this.provider.send( - "eth_blockNumber" - ); + const currentBlockNumber = + await this.provider.send("eth_blockNumber"); // Act 1: Set code on an account. const code = `0x${contractNine.evm.deployedBytecode.object}`; @@ -2140,9 +2136,8 @@ describe("Hardhat module", function () { ]); // Arrange 2: Get current block number. - const currentBlockNumber = await this.provider.send( - "eth_blockNumber" - ); + const currentBlockNumber = + await this.provider.send("eth_blockNumber"); // Act 1: Set the new nonce. const targetNonce = 99; @@ -2351,9 +2346,8 @@ describe("Hardhat module", function () { it("should have the storage modification persist even after a new block is mined", async function () { // Arrange 1: Get current block number. - const currentBlockNumber = await this.provider.send( - "eth_blockNumber" - ); + const currentBlockNumber = + await this.provider.send("eth_blockNumber"); // Act 1: Modify storage const targetStorageValue = 99; @@ -3036,30 +3030,26 @@ describe("Hardhat module", function () { }); it("shouldn't change the instance id when a block is mined", async function () { - const metadataBefore: HardhatMetadata = await this.provider.send( - "hardhat_metadata" - ); + const metadataBefore: HardhatMetadata = + await this.provider.send("hardhat_metadata"); // send a transaction to generate a new block await sendTxToZeroAddress(this.provider); - const metadataAfter: HardhatMetadata = await this.provider.send( - "hardhat_metadata" - ); + const metadataAfter: HardhatMetadata = + await this.provider.send("hardhat_metadata"); assert.equal(metadataBefore.instanceId, metadataAfter.instanceId); }); it("changes its instanceId when hardhat_reset is used", async function () { - const metadataBefore: HardhatMetadata = await this.provider.send( - "hardhat_metadata" - ); + const metadataBefore: HardhatMetadata = + await this.provider.send("hardhat_metadata"); await this.provider.send("hardhat_reset"); - const metadataAfter: HardhatMetadata = await this.provider.send( - "hardhat_metadata" - ); + const metadataAfter: HardhatMetadata = + await this.provider.send("hardhat_metadata"); assert.notEqual(metadataBefore.instanceId, metadataAfter.instanceId); }); @@ -3067,31 +3057,27 @@ describe("Hardhat module", function () { it("doesn't change its instandeId when snapshots are used", async function () { const snapshotId = await this.provider.send("evm_snapshot"); - const metadataBefore: HardhatMetadata = await this.provider.send( - "hardhat_metadata" - ); + const metadataBefore: HardhatMetadata = + await this.provider.send("hardhat_metadata"); await sendTxToZeroAddress(this.provider); await this.provider.send("evm_revert", [snapshotId]); - const metadataAfter: HardhatMetadata = await this.provider.send( - "hardhat_metadata" - ); + const metadataAfter: HardhatMetadata = + await this.provider.send("hardhat_metadata"); assert.equal(metadataBefore.instanceId, metadataAfter.instanceId); }); it("updates the block number and block hash when a new block is mined (sending a tx)", async function () { - const metadataBefore: HardhatMetadata = await this.provider.send( - "hardhat_metadata" - ); + const metadataBefore: HardhatMetadata = + await this.provider.send("hardhat_metadata"); // send a transaction to generate a new block await sendTxToZeroAddress(this.provider); - const metadataAfter: HardhatMetadata = await this.provider.send( - "hardhat_metadata" - ); + const metadataAfter: HardhatMetadata = + await this.provider.send("hardhat_metadata"); assert.equal( metadataAfter.latestBlockNumber, @@ -3104,15 +3090,13 @@ describe("Hardhat module", function () { }); it("updates the block number and block hash when a new block is mined (using hardhat_mine)", async function () { - const metadataBefore: HardhatMetadata = await this.provider.send( - "hardhat_metadata" - ); + const metadataBefore: HardhatMetadata = + await this.provider.send("hardhat_metadata"); await this.provider.send("hardhat_mine", ["0x100"]); - const metadataAfter: HardhatMetadata = await this.provider.send( - "hardhat_metadata" - ); + const metadataAfter: HardhatMetadata = + await this.provider.send("hardhat_metadata"); assert.equal( metadataAfter.latestBlockNumber, @@ -3129,16 +3113,14 @@ describe("Hardhat module", function () { return this.skip(); } - const metadataBefore: HardhatMetadata = await this.provider.send( - "hardhat_metadata" - ); + const metadataBefore: HardhatMetadata = + await this.provider.send("hardhat_metadata"); // send a transaction to generate a new block await sendTxToZeroAddress(this.provider); - const metadataAfter: HardhatMetadata = await this.provider.send( - "hardhat_metadata" - ); + const metadataAfter: HardhatMetadata = + await this.provider.send("hardhat_metadata"); assert.equal( metadataBefore.forkedNetwork!.forkBlockNumber, @@ -3158,9 +3140,8 @@ describe("Hardhat module", function () { useEnvironment(); it("should return the chainId set in the config", async function () { - const metadata: HardhatMetadata = await this.env.network.provider.send( - "hardhat_metadata" - ); + const metadata: HardhatMetadata = + await this.env.network.provider.send("hardhat_metadata"); assert.equal(metadata.chainId, 1000); }); diff --git a/hardhat-tests/test/internal/hardhat-network/stack-traces/compilation.ts b/hardhat-tests/test/internal/hardhat-network/stack-traces/compilation.ts index c54f43555..3424dbdb1 100644 --- a/hardhat-tests/test/internal/hardhat-network/stack-traces/compilation.ts +++ b/hardhat-tests/test/internal/hardhat-network/stack-traces/compilation.ts @@ -195,9 +195,8 @@ export async function downloadCompiler(solidityVersion: string): Promise { compilersCache ); - const isCompilerDownloaded = await downloader.isCompilerDownloaded( - solidityVersion - ); + const isCompilerDownloaded = + await downloader.isCompilerDownloaded(solidityVersion); if (!isCompilerDownloaded) { console.log("Downloading solc", solidityVersion); @@ -219,9 +218,8 @@ export async function downloadCompiler(solidityVersion: string): Promise { compilersCache ); - const isWasmCompilerDownloaded = await downloader.isCompilerDownloaded( - solidityVersion - ); + const isWasmCompilerDownloaded = + await downloader.isCompilerDownloaded(solidityVersion); if (!isWasmCompilerDownloaded) { console.log("Downloading solcjs", solidityVersion); diff --git a/hardhat-tests/test/internal/hardhat-network/stack-traces/test.ts b/hardhat-tests/test/internal/hardhat-network/stack-traces/test.ts index fe1d57d61..07a014162 100644 --- a/hardhat-tests/test/internal/hardhat-network/stack-traces/test.ts +++ b/hardhat-tests/test/internal/hardhat-network/stack-traces/test.ts @@ -769,12 +769,12 @@ describe("Stack traces", function () { const testsDir = semver.satisfies(customSolcVersion, "^0.5.0") ? "0_5" : semver.satisfies(customSolcVersion, "^0.6.0") - ? "0_6" - : semver.satisfies(customSolcVersion, "^0.7.0") - ? "0_7" - : semver.satisfies(customSolcVersion, "^0.8.0") - ? "0_8" - : null; + ? "0_6" + : semver.satisfies(customSolcVersion, "^0.7.0") + ? "0_7" + : semver.satisfies(customSolcVersion, "^0.8.0") + ? "0_8" + : null; if (testsDir === null) { console.error(`There are no tests for version ${customSolcVersion}`); diff --git a/package.json b/package.json index 1baeb65d4..e96938062 100644 --- a/package.json +++ b/package.json @@ -2,17 +2,15 @@ "name": "root", "version": "0.0.0", "author": "Nomic Foundation", - "license": "SEE LICENSE IN EACH PACKAGE'S LICENSE FILE", - "private": true, "devDependencies": { "@changesets/cli": "^2.27.1", - "prettier": "^3.2.5" + "prettier": "^3.2.5", + "syncpack": "^12.4.0" }, - "scripts": { - "build": "cd crates/edr_napi && pnpm build", - "prettier": "prettier --check \".github/**/*.{yml,ts,js}\" \"crates/edr_napi/test/**.ts\" \"**/*.md\"", - "prettier:fix": "pnpm run prettier --write" + "engines": { + "pnpm": ">=9" }, + "license": "SEE LICENSE IN EACH PACKAGE'S LICENSE FILE", "pnpm": { "overrides": { "hardhat>@nomicfoundation/edr": "workspace:*" @@ -21,7 +19,12 @@ "hardhat@2.22.7": "patches/hardhat@2.22.7.patch" } }, - "engines": { - "pnpm": ">=9" + "private": true, + "scripts": { + "build": "cd crates/edr_napi && pnpm build", + "lint": "syncpack lint && pnpm run prettier && pnpm run --recursive lint", + "lint:fix": "syncpack format && pnpm run prettier:fix && pnpm run --recursive lint:fix", + "prettier": "prettier --check \".github/**/*.{yml,ts,js}\" \"**/*.md\"", + "prettier:fix": "pnpm run prettier --write" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3ed6e43c1..c80f45e53 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -22,6 +22,9 @@ importers: prettier: specifier: ^3.2.5 version: 3.2.5 + syncpack: + specifier: ^12.4.0 + version: 12.4.0(typescript@5.0.4) crates/edr_napi: devDependencies: @@ -38,44 +41,104 @@ importers: specifier: '>=9.1.0' version: 10.0.6 '@types/node': - specifier: ^18.0.0 - version: 18.15.13 + specifier: ^20.0.0 + version: 20.16.1 + '@typescript-eslint/eslint-plugin': + specifier: 5.61.0 + version: 5.61.0(@typescript-eslint/parser@5.61.0(eslint@8.57.0)(typescript@5.0.4))(eslint@8.57.0)(typescript@5.0.4) + '@typescript-eslint/parser': + specifier: 5.61.0 + version: 5.61.0(eslint@8.57.0)(typescript@5.0.4) chai: specifier: ^4.3.6 version: 4.4.1 chai-as-promised: specifier: ^7.1.1 version: 7.1.1(chai@4.4.1) + eslint: + specifier: ^8.44.0 + version: 8.57.0 + eslint-config-prettier: + specifier: 9.1.0 + version: 9.1.0(eslint@8.57.0) + eslint-plugin-import: + specifier: 2.27.5 + version: 2.27.5(@typescript-eslint/parser@5.61.0(eslint@8.57.0)(typescript@5.0.4))(eslint@8.57.0) + eslint-plugin-mocha: + specifier: 10.4.1 + version: 10.4.1(eslint@8.57.0) + eslint-plugin-prettier: + specifier: 5.2.1 + version: 5.2.1(eslint-config-prettier@9.1.0(eslint@8.57.0))(eslint@8.57.0)(prettier@3.2.5) json-stream-stringify: specifier: ^3.1.4 version: 3.1.4 mocha: specifier: ^10.0.0 version: 10.3.0 + prettier: + specifier: ^3.2.5 + version: 3.2.5 ts-node: specifier: ^10.8.0 - version: 10.9.2(@types/node@18.15.13)(typescript@4.5.5) + version: 10.9.2(@types/node@20.16.1)(typescript@5.0.4) typescript: - specifier: ~4.5.2 - version: 4.5.5 + specifier: ~5.0.0 + version: 5.0.4 crates/tools/js/benchmark: devDependencies: + '@types/argparse': + specifier: ^2.0.16 + version: 2.0.16 + '@types/chai': + specifier: ^4.2.0 + version: 4.3.12 + '@types/lodash': + specifier: ^4.14.123 + version: 4.17.0 + '@types/node': + specifier: ^20.0.0 + version: 20.16.1 + '@typescript-eslint/eslint-plugin': + specifier: 5.61.0 + version: 5.61.0(@typescript-eslint/parser@5.61.0(eslint@8.57.0)(typescript@5.0.4))(eslint@8.57.0)(typescript@5.0.4) + '@typescript-eslint/parser': + specifier: 5.61.0 + version: 5.61.0(eslint@8.57.0)(typescript@5.0.4) argparse: specifier: ^2.0.1 version: 2.0.1 chai: - specifier: ^4.2.0 + specifier: ^4.3.6 version: 4.4.1 + eslint: + specifier: ^8.44.0 + version: 8.57.0 + eslint-config-prettier: + specifier: 9.1.0 + version: 9.1.0(eslint@8.57.0) + eslint-plugin-import: + specifier: 2.27.5 + version: 2.27.5(@typescript-eslint/parser@5.61.0(eslint@8.57.0)(typescript@5.0.4))(eslint@8.57.0) + eslint-plugin-mocha: + specifier: 10.4.1 + version: 10.4.1(eslint@8.57.0) + eslint-plugin-prettier: + specifier: 5.2.1 + version: 5.2.1(eslint-config-prettier@9.1.0(eslint@8.57.0))(eslint@8.57.0)(prettier@3.2.5) hardhat: specifier: 2.22.7 - version: 2.22.7(patch_hash=umhdsnfwxfqbbniyljx6a4ic5i)(ts-node@10.9.2(@types/node@18.15.13)(typescript@5.0.4))(typescript@5.0.4) + version: 2.22.7(patch_hash=umhdsnfwxfqbbniyljx6a4ic5i)(ts-node@10.9.2(@types/node@20.16.1)(typescript@5.0.4))(typescript@5.0.4) lodash: specifier: ^4.17.11 version: 4.17.21 mocha: specifier: ^10.0.0 version: 10.3.0 + prettier: + specifier: ^3.2.5 + version: 3.2.5 tsx: specifier: ^4.7.1 version: 4.7.1 @@ -104,7 +167,7 @@ importers: specifier: ^4.2.0 version: 4.3.12 '@types/chai-as-promised': - specifier: ^7.1.3 + specifier: ^7.1.8 version: 7.1.8 '@types/ci-info': specifier: ^2.0.0 @@ -131,8 +194,8 @@ importers: specifier: '>=9.1.0' version: 10.0.6 '@types/node': - specifier: ^18.0.0 - version: 18.15.13 + specifier: ^20.0.0 + version: 20.16.1 '@types/resolve': specifier: ^1.17.1 version: 1.20.6 @@ -155,7 +218,7 @@ importers: specifier: 5.61.0 version: 5.61.0(eslint@8.57.0)(typescript@5.0.4) chai: - specifier: ^4.2.0 + specifier: ^4.3.6 version: 4.4.1 chai-as-promised: specifier: ^7.1.1 @@ -167,8 +230,8 @@ importers: specifier: ^8.44.0 version: 8.57.0 eslint-config-prettier: - specifier: 8.3.0 - version: 8.3.0(eslint@8.57.0) + specifier: 9.1.0 + version: 9.1.0(eslint@8.57.0) eslint-plugin-import: specifier: 2.27.5 version: 2.27.5(@typescript-eslint/parser@5.61.0(eslint@8.57.0)(typescript@5.0.4))(eslint@8.57.0) @@ -176,8 +239,8 @@ importers: specifier: 10.4.1 version: 10.4.1(eslint@8.57.0) eslint-plugin-prettier: - specifier: 3.4.0 - version: 3.4.0(eslint-config-prettier@8.3.0(eslint@8.57.0))(eslint@8.57.0)(prettier@2.4.1) + specifier: 5.2.1 + version: 5.2.1(eslint-config-prettier@9.1.0(eslint@8.57.0))(eslint@8.57.0)(prettier@3.2.5) ethereumjs-abi: specifier: ^0.6.8 version: 0.6.8 @@ -189,13 +252,13 @@ importers: version: 7.0.1 hardhat: specifier: 2.22.7 - version: 2.22.7(patch_hash=umhdsnfwxfqbbniyljx6a4ic5i)(ts-node@10.9.2(@types/node@18.15.13)(typescript@5.0.4))(typescript@5.0.4) + version: 2.22.7(patch_hash=umhdsnfwxfqbbniyljx6a4ic5i)(ts-node@10.9.2(@types/node@20.16.1)(typescript@5.0.4))(typescript@5.0.4) mocha: specifier: ^10.0.0 version: 10.3.0 prettier: - specifier: 2.4.1 - version: 2.4.1 + specifier: ^3.2.5 + version: 3.2.5 rimraf: specifier: ^3.0.2 version: 3.0.2 @@ -207,7 +270,7 @@ importers: version: 9.2.4 ts-node: specifier: ^10.8.0 - version: 10.9.2(@types/node@18.15.13)(typescript@5.0.4) + version: 10.9.2(@types/node@20.16.1)(typescript@5.0.4) typescript: specifier: ~5.0.0 version: 5.0.4 @@ -219,19 +282,22 @@ importers: devDependencies: '@defi-wonderland/smock': specifier: ^2.4.0 - version: 2.4.0(@ethersproject/abi@5.7.0)(@ethersproject/abstract-provider@5.7.0)(@ethersproject/abstract-signer@5.7.0)(@nomiclabs/hardhat-ethers@2.2.3(ethers@5.7.2)(hardhat@2.22.7(patch_hash=umhdsnfwxfqbbniyljx6a4ic5i)(ts-node@10.9.2(typescript@5.0.4))(typescript@5.0.4)))(ethers@5.7.2)(hardhat@2.22.7(patch_hash=umhdsnfwxfqbbniyljx6a4ic5i)(ts-node@10.9.2(typescript@5.0.4))(typescript@5.0.4)) + version: 2.4.0(@ethersproject/abi@5.7.0)(@ethersproject/abstract-provider@5.7.0)(@ethersproject/abstract-signer@5.7.0)(@nomiclabs/hardhat-ethers@2.2.3(ethers@5.7.2)(hardhat@2.22.7(patch_hash=umhdsnfwxfqbbniyljx6a4ic5i)(ts-node@10.9.2(@types/node@20.16.1)(typescript@5.0.4))(typescript@5.0.4)))(ethers@5.7.2)(hardhat@2.22.7(patch_hash=umhdsnfwxfqbbniyljx6a4ic5i)(ts-node@10.9.2(@types/node@20.16.1)(typescript@5.0.4))(typescript@5.0.4)) '@nomiclabs/hardhat-ethers': specifier: ^2.2.3 - version: 2.2.3(ethers@5.7.2)(hardhat@2.22.7(patch_hash=umhdsnfwxfqbbniyljx6a4ic5i)(ts-node@10.9.2(typescript@5.0.4))(typescript@5.0.4)) + version: 2.2.3(ethers@5.7.2)(hardhat@2.22.7(patch_hash=umhdsnfwxfqbbniyljx6a4ic5i)(ts-node@10.9.2(@types/node@20.16.1)(typescript@5.0.4))(typescript@5.0.4)) + '@types/node': + specifier: ^20.0.0 + version: 20.16.1 chai: specifier: ^4.3.6 version: 4.4.1 ethers: - specifier: '5' + specifier: 5.7.2 version: 5.7.2 hardhat: specifier: 2.22.7 - version: 2.22.7(patch_hash=umhdsnfwxfqbbniyljx6a4ic5i)(ts-node@10.9.2(@types/node@18.15.13)(typescript@5.0.4))(typescript@5.0.4) + version: 2.22.7(patch_hash=umhdsnfwxfqbbniyljx6a4ic5i)(ts-node@10.9.2(@types/node@20.16.1)(typescript@5.0.4))(typescript@5.0.4) mocha: specifier: ^10.0.0 version: 10.3.0 @@ -327,6 +393,11 @@ packages: ethers: ^5 hardhat: ^2.21.0 + '@effect/schema@0.69.0': + resolution: {integrity: sha512-dqVnriWqM8TT8d+5vgg1pH4ZOXfs7tQBVAY5N7PALzIOlZamsBKQCdwvMMqremjSkKITckF8/cIj1eQZHQeg7Q==} + peerDependencies: + effect: ^3.5.7 + '@esbuild/aix-ppc64@0.19.12': resolution: {integrity: sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==} engines: {node: '>=12'} @@ -744,6 +815,10 @@ packages: ethers: ^5.0.0 hardhat: ^2.0.0 + '@pkgr/core@0.1.1': + resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + '@scure/base@1.1.5': resolution: {integrity: sha512-Brj9FiG2W1MRQSTB212YVPRrcbjkv48FoZi/u4l/zds/ieRrqsh7aUf6CLwkAq61oKXr/ZlTzlY66gLIj3TFTQ==} @@ -781,6 +856,10 @@ packages: resolution: {integrity: sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==} engines: {node: '>=6'} + '@sindresorhus/merge-streams@2.3.0': + resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==} + engines: {node: '>=18'} + '@sinonjs/commons@1.8.6': resolution: {integrity: sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==} @@ -805,6 +884,9 @@ packages: '@tsconfig/node16@1.0.4': resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + '@types/argparse@2.0.16': + resolution: {integrity: sha512-aMqBra2JlqpFeCWOinCtpRpiCkPIXH8hahW2+FkGzvWjfE5sAqtOcrjN5DRcMnTQqFDe6gb1CVYuGnBH0lhXwA==} + '@types/async-eventemitter@0.2.4': resolution: {integrity: sha512-2Bq61VD01kgLf1XkK2xPtoBcu7fgn/km5JyEX9v0BlG5VQBzA+BlF9umFk+8gR8S4+eK7MgDY2oyVZCu6ar3Jw==} @@ -871,6 +953,9 @@ packages: '@types/node@18.15.13': resolution: {integrity: sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q==} + '@types/node@20.16.1': + resolution: {integrity: sha512-zJDo7wEadFtSyNz5QITDfRcrhqDvQI1xQNQ0VoizPjM/dVAODqqIUWbJPkvsxmTI0MYRGRikcdjMPhOssnPejQ==} + '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -1019,6 +1104,10 @@ packages: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} + ansi-regex@6.0.1: + resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} + engines: {node: '>=12'} + ansi-styles@3.2.1: resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} engines: {node: '>=4'} @@ -1172,6 +1261,10 @@ packages: resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==} engines: {node: '>=4'} + chalk-template@1.1.0: + resolution: {integrity: sha512-T2VJbcDuZQ0Tb2EWwSotMPJjgpy1/tGee1BTpUNsGZ/qgNjV2t7Mvu+d4600U564nbLesN1x2dPL+xii174Ekg==} + engines: {node: '>=14.16'} + chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} engines: {node: '>=4'} @@ -1180,6 +1273,10 @@ packages: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} + chalk@5.3.0: + resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + chardet@0.7.0: resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} @@ -1212,6 +1309,14 @@ packages: resolution: {integrity: sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==} engines: {node: '>=6'} + cli-cursor@4.0.0: + resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + cli-spinners@2.9.2: + resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} + engines: {node: '>=6'} + cliui@6.0.0: resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} @@ -1242,6 +1347,10 @@ packages: command-exists@1.2.9: resolution: {integrity: sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==} + commander@12.1.0: + resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} + engines: {node: '>=18'} + commander@8.3.0: resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} engines: {node: '>= 12'} @@ -1253,6 +1362,15 @@ packages: resolution: {integrity: sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==} engines: {node: '>= 0.6'} + cosmiconfig@9.0.0: + resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=4.9.5' + peerDependenciesMeta: + typescript: + optional: true + create-hash@1.2.0: resolution: {integrity: sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==} @@ -1369,9 +1487,15 @@ packages: resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} engines: {node: '>=6.0.0'} + effect@3.5.7: + resolution: {integrity: sha512-PzEncc0R3ZZhqNTR+fXrSX+anF/4Ai6ftKie1ZrUUWY7WPE7d4KjB6wjpeWoGMOC7xWFPGSkBBUudyJN1mx3+g==} + elliptic@6.5.4: resolution: {integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==} + emoji-regex@10.3.0: + resolution: {integrity: sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==} + emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -1430,8 +1554,8 @@ packages: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} - eslint-config-prettier@8.3.0: - resolution: {integrity: sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==} + eslint-config-prettier@9.1.0: + resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} hasBin: true peerDependencies: eslint: '>=7.0.0' @@ -1476,14 +1600,17 @@ packages: peerDependencies: eslint: '>=7.0.0' - eslint-plugin-prettier@3.4.0: - resolution: {integrity: sha512-UDK6rJT6INSfcOo545jiaOwB701uAIt2/dR7WnFQoGCVl1/EMqdANBmwUaqqQ45aXprsTGzSa39LI1PyuRBxxw==} - engines: {node: '>=6.0.0'} + eslint-plugin-prettier@5.2.1: + resolution: {integrity: sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==} + engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: - eslint: '>=5.0.0' + '@types/eslint': '>=8.0.0' + eslint: '>=8.0.0' eslint-config-prettier: '*' - prettier: '>=1.13.0' + prettier: '>=3.0.0' peerDependenciesMeta: + '@types/eslint': + optional: true eslint-config-prettier: optional: true @@ -1576,6 +1703,10 @@ packages: resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} engines: {node: '>=4'} + fast-check@3.20.0: + resolution: {integrity: sha512-pZIjqLpOZgdSLecec4GKC3Zq5702MZ34upMKxojnNVSWA0K64V3pXOBT1Wdsrc3AphLtzRBbsi8bRWF4TUGmUg==} + engines: {node: '>=8.0.0'} + fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} @@ -1674,6 +1805,10 @@ packages: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} + get-east-asian-width@1.2.0: + resolution: {integrity: sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==} + engines: {node: '>=18'} + get-func-name@2.0.2: resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} @@ -1717,6 +1852,10 @@ packages: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} engines: {node: '>=10'} + globby@14.0.2: + resolution: {integrity: sha512-s3Fq41ZVh7vbbe2PN3nrW7yC7U7MFVc5c98/iTl9c2GawNMKx/J648KQRW6WKkuU8GIbbh2IXfIRQjOZnXcTnw==} + engines: {node: '>=18'} + gopd@1.0.1: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} @@ -1796,6 +1935,10 @@ packages: hosted-git-info@2.8.9: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} + hosted-git-info@7.0.2: + resolution: {integrity: sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==} + engines: {node: ^16.14.0 || >=18.0.0} + http-errors@2.0.0: resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} engines: {node: '>= 0.8'} @@ -1893,6 +2036,10 @@ packages: resolution: {integrity: sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==} engines: {node: '>=6.5.0', npm: '>=3'} + is-interactive@2.0.0: + resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==} + engines: {node: '>=12'} + is-negative-zero@2.0.3: resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} engines: {node: '>= 0.4'} @@ -1945,6 +2092,14 @@ packages: resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} engines: {node: '>=10'} + is-unicode-supported@1.3.0: + resolution: {integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==} + engines: {node: '>=12'} + + is-unicode-supported@2.0.0: + resolution: {integrity: sha512-FRdAyx5lusK1iHG0TWpVtk9+1i+GjrzRffhDg4ovQ7mcidMQ6mj+MhKPmvh7Xwyv5gIS06ns49CA7Sqg7lC22Q==} + engines: {node: '>=18'} + is-weakref@1.0.2: resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} @@ -2012,6 +2167,10 @@ packages: resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} engines: {node: '>=0.10.0'} + kleur@3.0.3: + resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} + engines: {node: '>=6'} + kleur@4.1.5: resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} engines: {node: '>=6'} @@ -2061,6 +2220,10 @@ packages: resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} engines: {node: '>=10'} + log-symbols@6.0.0: + resolution: {integrity: sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==} + engines: {node: '>=18'} + loupe@2.3.7: resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} @@ -2108,6 +2271,10 @@ packages: resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} engines: {node: '>=8.6'} + mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + min-indent@1.0.1: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} engines: {node: '>=4'} @@ -2118,6 +2285,10 @@ packages: minimalistic-crypto-utils@1.0.1: resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==} + minimatch@10.0.1: + resolution: {integrity: sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==} + engines: {node: 20 || >=22} + minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} @@ -2173,6 +2344,10 @@ packages: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} + npm-package-arg@11.0.3: + resolution: {integrity: sha512-sHGJy8sOC1YraBywpzQlIKBE4pBbGbiF95U6Auspzyem956E0+FtDtsx1ZxlOJkQCZ1AFXAY/yuvtFYrOxF+Bw==} + engines: {node: ^16.14.0 || >=18.0.0} + object-inspect@1.13.1: resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} @@ -2194,10 +2369,18 @@ packages: once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + optionator@0.9.3: resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} engines: {node: '>= 0.8.0'} + ora@8.0.1: + resolution: {integrity: sha512-ANIvzobt1rls2BDny5fWZ3ZVKyD6nscLvfFRpQgfWsythlcsVUC9kL0zq6j2Z5z9wwp1kd7wpsD/T9qNPVLCaQ==} + engines: {node: '>=18'} + os-tmpdir@1.0.2: resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} engines: {node: '>=0.10.0'} @@ -2283,6 +2466,10 @@ packages: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} + path-type@5.0.0: + resolution: {integrity: sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==} + engines: {node: '>=12'} + pathval@1.1.1: resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} @@ -2321,11 +2508,6 @@ packages: resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} engines: {node: '>=6.0.0'} - prettier@2.4.1: - resolution: {integrity: sha512-9fbDAXSBcc6Bs1mZrDYb3XKzDLm4EXXL9sC1LqKP5rZkT6KRr/rf9amVUcODVXgguK/isJz0d0hP72WeaKWsvA==} - engines: {node: '>=10.13.0'} - hasBin: true - prettier@2.8.8: resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} engines: {node: '>=10.13.0'} @@ -2336,6 +2518,14 @@ packages: engines: {node: '>=14'} hasBin: true + proc-log@4.2.0: + resolution: {integrity: sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + prompts@2.4.2: + resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} + engines: {node: '>= 6'} + pseudomap@1.0.2: resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} @@ -2343,6 +2533,9 @@ packages: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} + pure-rand@6.1.0: + resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==} + queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} @@ -2372,6 +2565,10 @@ packages: resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==} engines: {node: '>=6'} + read-yaml-file@2.1.0: + resolution: {integrity: sha512-UkRNRIwnhG+y7hpqnycCL/xbTk7+ia9VuVTC0S+zVbwd65DI9eUpRMfsWIGrCWxTU/mi+JW8cHQCrv+zfCbEPQ==} + engines: {node: '>=10.13'} + readable-stream@3.6.2: resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} engines: {node: '>= 6'} @@ -2416,6 +2613,10 @@ packages: resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} hasBin: true + restore-cursor@4.0.0: + resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + reusify@1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} @@ -2475,6 +2676,11 @@ packages: engines: {node: '>=10'} hasBin: true + semver@7.6.3: + resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} + engines: {node: '>=10'} + hasBin: true + serialize-javascript@6.0.0: resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==} @@ -2526,10 +2732,17 @@ packages: resolution: {integrity: sha512-zljcULZQsJxVra28qIAL6ow1Z9tpattkCTEJR4RBP3TGc00FcttsP5pK284Nas5WjMZU5Yzy3kAIp3B3KRf5Yg==} deprecated: 16.1.1 + sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + slash@3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} + slash@5.1.0: + resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==} + engines: {node: '>=14.16'} + smartwrap@2.0.2: resolution: {integrity: sha512-vCsKNQxb7PnCNd2wY1WClWifAc2lwqsG8OaswpJkVJsvMGcnEntdTCDajZCkk93Ay1U3t/9puJmb525Rg5MZBA==} engines: {node: '>=6'} @@ -2573,6 +2786,10 @@ packages: resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} engines: {node: '>= 0.8'} + stdin-discarder@0.2.2: + resolution: {integrity: sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==} + engines: {node: '>=18'} + stream-transform@2.1.3: resolution: {integrity: sha512-9GHUiM5hMiCi6Y03jD2ARC1ettBXkQBoQAe7nJsPknnI0ow10aXjTnew8QtYQmLjzn974BnmWEAJgCY6ZP1DeQ==} @@ -2580,6 +2797,10 @@ packages: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} + string-width@7.2.0: + resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} + engines: {node: '>=18'} + string.prototype.trim@1.2.9: resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} engines: {node: '>= 0.4'} @@ -2598,10 +2819,18 @@ packages: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} + strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + strip-bom@3.0.0: resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} engines: {node: '>=4'} + strip-bom@4.0.0: + resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} + engines: {node: '>=8'} + strip-hex-prefix@1.0.0: resolution: {integrity: sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==} engines: {node: '>=6.5.0', npm: '>=3'} @@ -2630,6 +2859,15 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} + synckit@0.9.1: + resolution: {integrity: sha512-7gr8p9TQP6RAHusBOSLs46F4564ZrjV8xFmw5zCmgmhGUcw2hxsShhJ6CEiHQMgPDwAQ1fWHPM0ypc4RMAig4A==} + engines: {node: ^14.18.0 || >=16.0.0} + + syncpack@12.4.0: + resolution: {integrity: sha512-iVDbuxW1zpjC8IuGLLgTjfgnAjr1iTd+In//RGUi49nKT8f6BWYSEAt496fj4eGNmYeajUiGngBHl15Jb++RBg==} + engines: {node: '>=16'} + hasBin: true + term-size@2.2.1: resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} engines: {node: '>=8'} @@ -2637,6 +2875,10 @@ packages: text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + tightrope@0.2.0: + resolution: {integrity: sha512-Kw36UHxJEELq2VUqdaSGR2/8cAsPgMtvX8uGVU6Jk26O66PhXec0A5ZnRYs47btbtwPDpXXF66+Fo3vimCM9aQ==} + engines: {node: '>=16'} + tmp@0.0.33: resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} engines: {node: '>=0.6.0'} @@ -2667,6 +2909,9 @@ packages: '@swc/wasm': optional: true + ts-toolbelt@9.6.0: + resolution: {integrity: sha512-nsZd8ZeNUzukXPlJmTBwUAuABDe/9qtVDelJeT/qW0ow3ZS3BsQJtNkan1802aM9Uf68/Y8ljw86Hu0h5IUW3w==} + tsconfig-paths@3.15.0: resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} @@ -2676,6 +2921,9 @@ packages: tslib@2.4.0: resolution: {integrity: sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==} + tslib@2.6.3: + resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==} + tsort@0.0.1: resolution: {integrity: sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==} @@ -2749,11 +2997,6 @@ packages: resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} engines: {node: '>= 0.4'} - typescript@4.5.5: - resolution: {integrity: sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==} - engines: {node: '>=4.2.0'} - hasBin: true - typescript@5.0.4: resolution: {integrity: sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==} engines: {node: '>=12.20'} @@ -2762,10 +3005,17 @@ packages: unbox-primitive@1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + undici-types@6.19.8: + resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + undici@5.28.3: resolution: {integrity: sha512-3ItfzbrhDlINjaP0duwnNsKpDQk3acHI3gVJ1z4fmwMK31k5G9OVIAMLSIaP6w4FaGkaAkN6zaQO9LUvZ1t7VA==} engines: {node: '>=14.0'} + unicorn-magic@0.1.0: + resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} + engines: {node: '>=18'} + universalify@0.1.2: resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} engines: {node: '>= 4.0.0'} @@ -2790,6 +3040,10 @@ packages: validate-npm-package-license@3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + validate-npm-package-name@5.0.1: + resolution: {integrity: sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + wcwidth@1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} @@ -3095,16 +3349,16 @@ snapshots: dependencies: '@jridgewell/trace-mapping': 0.3.9 - '@defi-wonderland/smock@2.4.0(@ethersproject/abi@5.7.0)(@ethersproject/abstract-provider@5.7.0)(@ethersproject/abstract-signer@5.7.0)(@nomiclabs/hardhat-ethers@2.2.3(ethers@5.7.2)(hardhat@2.22.7(patch_hash=umhdsnfwxfqbbniyljx6a4ic5i)(ts-node@10.9.2(typescript@5.0.4))(typescript@5.0.4)))(ethers@5.7.2)(hardhat@2.22.7(patch_hash=umhdsnfwxfqbbniyljx6a4ic5i)(ts-node@10.9.2(typescript@5.0.4))(typescript@5.0.4))': + '@defi-wonderland/smock@2.4.0(@ethersproject/abi@5.7.0)(@ethersproject/abstract-provider@5.7.0)(@ethersproject/abstract-signer@5.7.0)(@nomiclabs/hardhat-ethers@2.2.3(ethers@5.7.2)(hardhat@2.22.7(patch_hash=umhdsnfwxfqbbniyljx6a4ic5i)(ts-node@10.9.2(@types/node@20.16.1)(typescript@5.0.4))(typescript@5.0.4)))(ethers@5.7.2)(hardhat@2.22.7(patch_hash=umhdsnfwxfqbbniyljx6a4ic5i)(ts-node@10.9.2(@types/node@20.16.1)(typescript@5.0.4))(typescript@5.0.4))': dependencies: '@ethersproject/abi': 5.7.0 '@ethersproject/abstract-provider': 5.7.0 '@ethersproject/abstract-signer': 5.7.0 '@nomicfoundation/ethereumjs-util': 9.0.4 - '@nomiclabs/hardhat-ethers': 2.2.3(ethers@5.7.2)(hardhat@2.22.7(patch_hash=umhdsnfwxfqbbniyljx6a4ic5i)(ts-node@10.9.2(typescript@5.0.4))(typescript@5.0.4)) + '@nomiclabs/hardhat-ethers': 2.2.3(ethers@5.7.2)(hardhat@2.22.7(patch_hash=umhdsnfwxfqbbniyljx6a4ic5i)(ts-node@10.9.2(@types/node@20.16.1)(typescript@5.0.4))(typescript@5.0.4)) diff: 5.0.0 ethers: 5.7.2 - hardhat: 2.22.7(patch_hash=umhdsnfwxfqbbniyljx6a4ic5i)(ts-node@10.9.2(@types/node@18.15.13)(typescript@5.0.4))(typescript@5.0.4) + hardhat: 2.22.7(patch_hash=umhdsnfwxfqbbniyljx6a4ic5i)(ts-node@10.9.2(@types/node@20.16.1)(typescript@5.0.4))(typescript@5.0.4) lodash.isequal: 4.5.0 lodash.isequalwith: 4.4.0 rxjs: 7.8.1 @@ -3112,6 +3366,11 @@ snapshots: transitivePeerDependencies: - c-kzg + '@effect/schema@0.69.0(effect@3.5.7)': + dependencies: + effect: 3.5.7 + fast-check: 3.20.0 + '@esbuild/aix-ppc64@0.19.12': optional: true @@ -3615,10 +3874,12 @@ snapshots: '@nomicfoundation/solidity-analyzer-win32-ia32-msvc': 0.1.1 '@nomicfoundation/solidity-analyzer-win32-x64-msvc': 0.1.1 - '@nomiclabs/hardhat-ethers@2.2.3(ethers@5.7.2)(hardhat@2.22.7(patch_hash=umhdsnfwxfqbbniyljx6a4ic5i)(ts-node@10.9.2(typescript@5.0.4))(typescript@5.0.4))': + '@nomiclabs/hardhat-ethers@2.2.3(ethers@5.7.2)(hardhat@2.22.7(patch_hash=umhdsnfwxfqbbniyljx6a4ic5i)(ts-node@10.9.2(@types/node@20.16.1)(typescript@5.0.4))(typescript@5.0.4))': dependencies: ethers: 5.7.2 - hardhat: 2.22.7(patch_hash=umhdsnfwxfqbbniyljx6a4ic5i)(ts-node@10.9.2(@types/node@18.15.13)(typescript@5.0.4))(typescript@5.0.4) + hardhat: 2.22.7(patch_hash=umhdsnfwxfqbbniyljx6a4ic5i)(ts-node@10.9.2(@types/node@20.16.1)(typescript@5.0.4))(typescript@5.0.4) + + '@pkgr/core@0.1.1': {} '@scure/base@1.1.5': {} @@ -3682,6 +3943,8 @@ snapshots: '@sentry/types': 5.30.0 tslib: 1.14.1 + '@sindresorhus/merge-streams@2.3.0': {} + '@sinonjs/commons@1.8.6': dependencies: type-detect: 4.0.8 @@ -3706,17 +3969,19 @@ snapshots: '@tsconfig/node16@1.0.4': {} + '@types/argparse@2.0.16': {} + '@types/async-eventemitter@0.2.4': dependencies: '@types/events': 3.0.3 '@types/bn.js@4.11.6': dependencies: - '@types/node': 18.15.13 + '@types/node': 20.16.1 '@types/bn.js@5.1.5': dependencies: - '@types/node': 18.15.13 + '@types/node': 20.16.1 '@types/chai-as-promised@7.1.8': dependencies: @@ -3736,12 +4001,12 @@ snapshots: '@types/fs-extra@5.1.0': dependencies: - '@types/node': 18.15.13 + '@types/node': 20.16.1 '@types/glob@7.2.0': dependencies: '@types/minimatch': 5.1.2 - '@types/node': 18.15.13 + '@types/node': 20.16.1 '@types/json-schema@7.0.15': {} @@ -3749,7 +4014,7 @@ snapshots: '@types/keccak@3.0.4': dependencies: - '@types/node': 18.15.13 + '@types/node': 20.16.1 '@types/lodash@4.17.0': {} @@ -3767,22 +4032,26 @@ snapshots: '@types/node@18.15.13': {} + '@types/node@20.16.1': + dependencies: + undici-types: 6.19.8 + '@types/normalize-package-data@2.4.4': {} '@types/pbkdf2@3.1.2': dependencies: - '@types/node': 18.15.13 + '@types/node': 20.16.1 '@types/readable-stream@2.3.15': dependencies: - '@types/node': 18.15.13 + '@types/node': 20.16.1 safe-buffer: 5.1.2 '@types/resolve@1.20.6': {} '@types/secp256k1@4.0.6': dependencies: - '@types/node': 18.15.13 + '@types/node': 20.16.1 '@types/semver@6.2.7': {} @@ -3798,7 +4067,7 @@ snapshots: '@types/ws@7.4.7': dependencies: - '@types/node': 18.15.13 + '@types/node': 20.16.1 '@typescript-eslint/eslint-plugin@5.61.0(@typescript-eslint/parser@5.61.0(eslint@8.57.0)(typescript@5.0.4))(eslint@8.57.0)(typescript@5.0.4)': dependencies: @@ -3812,7 +4081,7 @@ snapshots: graphemer: 1.4.0 ignore: 5.3.1 natural-compare-lite: 1.4.0 - semver: 7.6.0 + semver: 7.6.3 tsutils: 3.21.0(typescript@5.0.4) optionalDependencies: typescript: 5.0.4 @@ -3857,7 +4126,7 @@ snapshots: debug: 4.3.4(supports-color@8.1.1) globby: 11.1.0 is-glob: 4.0.3 - semver: 7.6.0 + semver: 7.6.3 tsutils: 3.21.0(typescript@5.0.4) optionalDependencies: typescript: 5.0.4 @@ -3874,7 +4143,7 @@ snapshots: '@typescript-eslint/typescript-estree': 5.61.0(typescript@5.0.4) eslint: 8.57.0 eslint-scope: 5.1.1 - semver: 7.6.0 + semver: 7.6.3 transitivePeerDependencies: - supports-color - typescript @@ -3932,6 +4201,8 @@ snapshots: ansi-regex@5.0.1: {} + ansi-regex@6.0.1: {} + ansi-styles@3.2.1: dependencies: color-convert: 1.9.3 @@ -4114,6 +4385,10 @@ snapshots: pathval: 1.1.1 type-detect: 4.0.8 + chalk-template@1.1.0: + dependencies: + chalk: 5.3.0 + chalk@2.4.2: dependencies: ansi-styles: 3.2.1 @@ -4125,6 +4400,8 @@ snapshots: ansi-styles: 4.3.0 supports-color: 7.2.0 + chalk@5.3.0: {} + chardet@0.7.0: {} check-error@1.0.3: @@ -4168,6 +4445,12 @@ snapshots: cli-boxes@2.2.1: {} + cli-cursor@4.0.0: + dependencies: + restore-cursor: 4.0.0 + + cli-spinners@2.9.2: {} + cliui@6.0.0: dependencies: string-width: 4.2.3 @@ -4202,12 +4485,23 @@ snapshots: command-exists@1.2.9: {} + commander@12.1.0: {} + commander@8.3.0: {} concat-map@0.0.1: {} cookie@0.4.2: {} + cosmiconfig@9.0.0(typescript@5.0.4): + dependencies: + env-paths: 2.2.1 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + parse-json: 5.2.0 + optionalDependencies: + typescript: 5.0.4 + create-hash@1.2.0: dependencies: cipher-base: 1.0.4 @@ -4331,6 +4625,8 @@ snapshots: dependencies: esutils: 2.0.3 + effect@3.5.7: {} + elliptic@6.5.4: dependencies: bn.js: 4.12.0 @@ -4341,6 +4637,8 @@ snapshots: minimalistic-assert: 1.0.1 minimalistic-crypto-utils: 1.0.1 + emoji-regex@10.3.0: {} + emoji-regex@8.0.0: {} enquirer@2.4.1: @@ -4461,7 +4759,7 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-config-prettier@8.3.0(eslint@8.57.0): + eslint-config-prettier@9.1.0(eslint@8.57.0): dependencies: eslint: 8.57.0 @@ -4515,13 +4813,14 @@ snapshots: globals: 13.24.0 rambda: 7.5.0 - eslint-plugin-prettier@3.4.0(eslint-config-prettier@8.3.0(eslint@8.57.0))(eslint@8.57.0)(prettier@2.4.1): + eslint-plugin-prettier@5.2.1(eslint-config-prettier@9.1.0(eslint@8.57.0))(eslint@8.57.0)(prettier@3.2.5): dependencies: eslint: 8.57.0 - prettier: 2.4.1 + prettier: 3.2.5 prettier-linter-helpers: 1.0.0 + synckit: 0.9.1 optionalDependencies: - eslint-config-prettier: 8.3.0(eslint@8.57.0) + eslint-config-prettier: 9.1.0(eslint@8.57.0) eslint-scope@5.1.1: dependencies: @@ -4714,6 +5013,10 @@ snapshots: iconv-lite: 0.4.24 tmp: 0.0.33 + fast-check@3.20.0: + dependencies: + pure-rand: 6.1.0 + fast-deep-equal@3.1.3: {} fast-diff@1.3.0: {} @@ -4811,6 +5114,8 @@ snapshots: get-caller-file@2.0.5: {} + get-east-asian-width@1.2.0: {} + get-func-name@2.0.2: {} get-intrinsic@1.2.4: @@ -4873,6 +5178,15 @@ snapshots: merge2: 1.4.1 slash: 3.0.0 + globby@14.0.2: + dependencies: + '@sindresorhus/merge-streams': 2.3.0 + fast-glob: 3.3.2 + ignore: 5.3.1 + path-type: 5.0.0 + slash: 5.1.0 + unicorn-magic: 0.1.0 + gopd@1.0.1: dependencies: get-intrinsic: 1.2.4 @@ -4885,7 +5199,7 @@ snapshots: hard-rejection@2.1.0: {} - hardhat@2.22.7(patch_hash=umhdsnfwxfqbbniyljx6a4ic5i)(ts-node@10.9.2(@types/node@18.15.13)(typescript@5.0.4))(typescript@5.0.4): + hardhat@2.22.7(patch_hash=umhdsnfwxfqbbniyljx6a4ic5i)(ts-node@10.9.2(@types/node@20.16.1)(typescript@5.0.4))(typescript@5.0.4): dependencies: '@ethersproject/abi': 5.7.0 '@metamask/eth-sig-util': 4.0.1 @@ -4931,7 +5245,7 @@ snapshots: uuid: 8.3.2 ws: 7.5.9 optionalDependencies: - ts-node: 10.9.2(@types/node@18.15.13)(typescript@5.0.4) + ts-node: 10.9.2(@types/node@20.16.1)(typescript@5.0.4) typescript: 5.0.4 transitivePeerDependencies: - bufferutil @@ -4984,6 +5298,10 @@ snapshots: hosted-git-info@2.8.9: {} + hosted-git-info@7.0.2: + dependencies: + lru-cache: 10.2.1 + http-errors@2.0.0: dependencies: depd: 2.0.0 @@ -5079,6 +5397,8 @@ snapshots: is-hex-prefixed@1.0.0: {} + is-interactive@2.0.0: {} + is-negative-zero@2.0.3: {} is-number-object@1.0.7: @@ -5120,6 +5440,10 @@ snapshots: is-unicode-supported@0.1.0: {} + is-unicode-supported@1.3.0: {} + + is-unicode-supported@2.0.0: {} + is-weakref@1.0.2: dependencies: call-bind: 1.0.7 @@ -5177,6 +5501,8 @@ snapshots: kind-of@6.0.3: {} + kleur@3.0.3: {} + kleur@4.1.5: {} levn@0.4.1: @@ -5223,6 +5549,11 @@ snapshots: chalk: 4.1.2 is-unicode-supported: 0.1.0 + log-symbols@6.0.0: + dependencies: + chalk: 5.3.0 + is-unicode-supported: 1.3.0 + loupe@2.3.7: dependencies: get-func-name: 2.0.2 @@ -5275,12 +5606,18 @@ snapshots: braces: 3.0.2 picomatch: 2.3.1 + mimic-fn@2.1.0: {} + min-indent@1.0.1: {} minimalistic-assert@1.0.1: {} minimalistic-crypto-utils@1.0.1: {} + minimatch@10.0.1: + dependencies: + brace-expansion: 2.0.1 + minimatch@3.1.2: dependencies: brace-expansion: 1.1.11 @@ -5355,6 +5692,13 @@ snapshots: normalize-path@3.0.0: {} + npm-package-arg@11.0.3: + dependencies: + hosted-git-info: 7.0.2 + proc-log: 4.2.0 + semver: 7.6.3 + validate-npm-package-name: 5.0.1 + object-inspect@1.13.1: {} object-keys@1.1.1: {} @@ -5378,6 +5722,10 @@ snapshots: dependencies: wrappy: 1.0.2 + onetime@5.1.2: + dependencies: + mimic-fn: 2.1.0 + optionator@0.9.3: dependencies: '@aashutoshrathi/word-wrap': 1.2.6 @@ -5387,6 +5735,18 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 + ora@8.0.1: + dependencies: + chalk: 5.3.0 + cli-cursor: 4.0.0 + cli-spinners: 2.9.2 + is-interactive: 2.0.0 + is-unicode-supported: 2.0.0 + log-symbols: 6.0.0 + stdin-discarder: 0.2.2 + string-width: 7.2.0 + strip-ansi: 7.1.0 + os-tmpdir@1.0.2: {} outdent@0.5.0: {} @@ -5456,6 +5816,8 @@ snapshots: path-type@4.0.0: {} + path-type@5.0.0: {} + pathval@1.1.1: {} pbkdf2@3.1.2: @@ -5491,16 +5853,23 @@ snapshots: dependencies: fast-diff: 1.3.0 - prettier@2.4.1: {} - prettier@2.8.8: {} prettier@3.2.5: {} + proc-log@4.2.0: {} + + prompts@2.4.2: + dependencies: + kleur: 3.0.3 + sisteransi: 1.0.5 + pseudomap@1.0.2: {} punycode@2.3.1: {} + pure-rand@6.1.0: {} + queue-microtask@1.2.3: {} quick-lru@4.0.1: {} @@ -5538,6 +5907,11 @@ snapshots: pify: 4.0.1 strip-bom: 3.0.0 + read-yaml-file@2.1.0: + dependencies: + js-yaml: 4.1.0 + strip-bom: 4.0.0 + readable-stream@3.6.2: dependencies: inherits: 2.0.4 @@ -5582,6 +5956,11 @@ snapshots: path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 + restore-cursor@4.0.0: + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.7 + reusify@1.0.4: {} rimraf@3.0.2: @@ -5640,6 +6019,8 @@ snapshots: dependencies: lru-cache: 6.0.0 + semver@7.6.3: {} + serialize-javascript@6.0.0: dependencies: randombytes: 2.1.0 @@ -5701,8 +6082,12 @@ snapshots: nise: 4.1.0 supports-color: 7.2.0 + sisteransi@1.0.5: {} + slash@3.0.0: {} + slash@5.1.0: {} + smartwrap@2.0.2: dependencies: array.prototype.flat: 1.3.2 @@ -5758,6 +6143,8 @@ snapshots: statuses@2.0.1: {} + stdin-discarder@0.2.2: {} + stream-transform@2.1.3: dependencies: mixme: 0.5.10 @@ -5768,6 +6155,12 @@ snapshots: is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 + string-width@7.2.0: + dependencies: + emoji-regex: 10.3.0 + get-east-asian-width: 1.2.0 + strip-ansi: 7.1.0 + string.prototype.trim@1.2.9: dependencies: call-bind: 1.0.7 @@ -5795,8 +6188,14 @@ snapshots: dependencies: ansi-regex: 5.0.1 + strip-ansi@7.1.0: + dependencies: + ansi-regex: 6.0.1 + strip-bom@3.0.0: {} + strip-bom@4.0.0: {} + strip-hex-prefix@1.0.0: dependencies: is-hex-prefixed: 1.0.0 @@ -5821,10 +6220,39 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} + synckit@0.9.1: + dependencies: + '@pkgr/core': 0.1.1 + tslib: 2.6.3 + + syncpack@12.4.0(typescript@5.0.4): + dependencies: + '@effect/schema': 0.69.0(effect@3.5.7) + chalk: 5.3.0 + chalk-template: 1.1.0 + commander: 12.1.0 + cosmiconfig: 9.0.0(typescript@5.0.4) + effect: 3.5.7 + enquirer: 2.4.1 + fast-check: 3.20.0 + globby: 14.0.2 + minimatch: 10.0.1 + npm-package-arg: 11.0.3 + ora: 8.0.1 + prompts: 2.4.2 + read-yaml-file: 2.1.0 + semver: 7.6.3 + tightrope: 0.2.0 + ts-toolbelt: 9.6.0 + transitivePeerDependencies: + - typescript + term-size@2.2.1: {} text-table@0.2.0: {} + tightrope@0.2.0: {} + tmp@0.0.33: dependencies: os-tmpdir: 1.0.2 @@ -5837,32 +6265,14 @@ snapshots: trim-newlines@3.0.1: {} - ts-node@10.9.2(@types/node@18.15.13)(typescript@4.5.5): - dependencies: - '@cspotcode/source-map-support': 0.8.1 - '@tsconfig/node10': 1.0.11 - '@tsconfig/node12': 1.0.11 - '@tsconfig/node14': 1.0.3 - '@tsconfig/node16': 1.0.4 - '@types/node': 18.15.13 - acorn: 8.11.3 - acorn-walk: 8.3.2 - arg: 4.1.3 - create-require: 1.1.1 - diff: 4.0.2 - make-error: 1.3.6 - typescript: 4.5.5 - v8-compile-cache-lib: 3.0.1 - yn: 3.1.1 - - ts-node@10.9.2(@types/node@18.15.13)(typescript@5.0.4): + ts-node@10.9.2(@types/node@20.16.1)(typescript@5.0.4): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 18.15.13 + '@types/node': 20.16.1 acorn: 8.11.3 acorn-walk: 8.3.2 arg: 4.1.3 @@ -5873,6 +6283,8 @@ snapshots: v8-compile-cache-lib: 3.0.1 yn: 3.1.1 + ts-toolbelt@9.6.0: {} + tsconfig-paths@3.15.0: dependencies: '@types/json5': 0.0.29 @@ -5884,6 +6296,8 @@ snapshots: tslib@2.4.0: {} + tslib@2.6.3: {} + tsort@0.0.1: {} tsutils@3.21.0(typescript@5.0.4): @@ -5962,8 +6376,6 @@ snapshots: is-typed-array: 1.1.13 possible-typed-array-names: 1.0.0 - typescript@4.5.5: {} - typescript@5.0.4: {} unbox-primitive@1.0.2: @@ -5973,10 +6385,14 @@ snapshots: has-symbols: 1.0.3 which-boxed-primitive: 1.0.2 + undici-types@6.19.8: {} + undici@5.28.3: dependencies: '@fastify/busboy': 2.1.0 + unicorn-magic@0.1.0: {} + universalify@0.1.2: {} unpipe@1.0.0: {} @@ -5996,6 +6412,8 @@ snapshots: spdx-correct: 3.2.0 spdx-expression-parse: 3.0.1 + validate-npm-package-name@5.0.1: {} + wcwidth@1.0.1: dependencies: defaults: 1.0.4