From bc2579f2aead2c66e30f1c84aeac9d9e78b82176 Mon Sep 17 00:00:00 2001 From: "g. nicholas d'andrea" Date: Tue, 4 Jun 2024 19:00:48 -0600 Subject: [PATCH] Implement pointer dereferencing in TypeScript - Define new package @ethdebug/pointers - Setup TS build system and Jest test suite - Ensure `yarn start` includes those - Define Pointer family of TypeScript types - Use namespaces to reflect schema hierarchy (Pointer.Region, etc.) - Provide type guards for detecting conformance to these types - Define Machine and Machine.State interfaces to adapt external EVMs - Define Cursor interface for inspecting machine state for a pointer - Include `view(state: Machine.State): Promise` - Define Cursor.Region as a region with all expressions evaluated - Define Cursor.Regions as an array-like collection of regions - Implement read functionality for a Cursor.Region - Implement evaluate functionality for a Pointer.Expression - Implement dereference functionality to get a Cursor from a Pointer - Include integration tests that use solc and Ganache to ensure expected pointer changes occur over the lifetime of an actual transaction --- bin/start | 3 +- packages/pointers/.gitignore | 2 + packages/pointers/README.md | 7 + packages/pointers/jest.config.cjs | 21 + packages/pointers/package.json | 28 + packages/pointers/src/cursor.ts | 32 + packages/pointers/src/data.test.ts | 160 ++ packages/pointers/src/data.ts | 139 ++ packages/pointers/src/dereference/cursor.ts | 73 + .../src/dereference/index.integration.test.ts | 77 + .../pointers/src/dereference/index.test.ts | 253 +++ packages/pointers/src/dereference/index.ts | 49 + packages/pointers/src/dereference/memo.ts | 44 + packages/pointers/src/dereference/process.ts | 219 +++ packages/pointers/src/dereference/region.ts | 113 ++ packages/pointers/src/evaluate.test.ts | 196 +++ packages/pointers/src/evaluate.ts | 242 +++ packages/pointers/src/index.ts | 6 + packages/pointers/src/machine.ts | 49 + packages/pointers/src/pointer.test.ts | 184 ++ packages/pointers/src/pointer.ts | 382 ++++ packages/pointers/src/read.test.ts | 235 +++ packages/pointers/src/read.ts | 138 ++ packages/pointers/test/deploy.ts | 38 + packages/pointers/test/examples.ts | 59 + packages/pointers/test/ganache.ts | 185 ++ packages/pointers/test/index.ts | 4 + packages/pointers/test/run.ts | 117 ++ packages/pointers/test/solc.ts | 58 + packages/pointers/tsconfig.json | 109 ++ packages/pointers/typings.d.ts | 10 + packages/tests/typings.d.ts | 3 + packages/web/docusaurus.config.ts | 6 +- packages/web/package.json | 2 + yarn.lock | 1547 ++++++++++------- 35 files changed, 4144 insertions(+), 646 deletions(-) create mode 100644 packages/pointers/.gitignore create mode 100644 packages/pointers/README.md create mode 100644 packages/pointers/jest.config.cjs create mode 100644 packages/pointers/package.json create mode 100644 packages/pointers/src/cursor.ts create mode 100644 packages/pointers/src/data.test.ts create mode 100644 packages/pointers/src/data.ts create mode 100644 packages/pointers/src/dereference/cursor.ts create mode 100644 packages/pointers/src/dereference/index.integration.test.ts create mode 100644 packages/pointers/src/dereference/index.test.ts create mode 100644 packages/pointers/src/dereference/index.ts create mode 100644 packages/pointers/src/dereference/memo.ts create mode 100644 packages/pointers/src/dereference/process.ts create mode 100644 packages/pointers/src/dereference/region.ts create mode 100644 packages/pointers/src/evaluate.test.ts create mode 100644 packages/pointers/src/evaluate.ts create mode 100644 packages/pointers/src/index.ts create mode 100644 packages/pointers/src/machine.ts create mode 100644 packages/pointers/src/pointer.test.ts create mode 100644 packages/pointers/src/pointer.ts create mode 100644 packages/pointers/src/read.test.ts create mode 100644 packages/pointers/src/read.ts create mode 100644 packages/pointers/test/deploy.ts create mode 100644 packages/pointers/test/examples.ts create mode 100644 packages/pointers/test/ganache.ts create mode 100644 packages/pointers/test/index.ts create mode 100644 packages/pointers/test/run.ts create mode 100644 packages/pointers/test/solc.ts create mode 100644 packages/pointers/tsconfig.json create mode 100644 packages/pointers/typings.d.ts diff --git a/bin/start b/bin/start index cff34549..16daeef2 100755 --- a/bin/start +++ b/bin/start @@ -8,8 +8,9 @@ else fi # Run the commands with concurrently -concurrently --names=format,web,jest \ +concurrently --names=format,pointers,web,jest \ "cd ./packages/format && yarn watch" \ + "cd ./packages/pointers && yarn watch" \ "cd ./packages/web && yarn start $NO_OPEN_FLAG" \ "yarn test --watchAll" diff --git a/packages/pointers/.gitignore b/packages/pointers/.gitignore new file mode 100644 index 00000000..f06235c4 --- /dev/null +++ b/packages/pointers/.gitignore @@ -0,0 +1,2 @@ +node_modules +dist diff --git a/packages/pointers/README.md b/packages/pointers/README.md new file mode 100644 index 00000000..8ed3a076 --- /dev/null +++ b/packages/pointers/README.md @@ -0,0 +1,7 @@ +# @ethdebug/pointers + +_This NPM package contains a reference implementation for dereferencing +**ethdebug/format** [pointers](https://ethdebug.github.io/format/spec/pointer/overview)._ + +:warning: This package is currently unpublished until ethdebug/format is more +complete. diff --git a/packages/pointers/jest.config.cjs b/packages/pointers/jest.config.cjs new file mode 100644 index 00000000..4dc4f88e --- /dev/null +++ b/packages/pointers/jest.config.cjs @@ -0,0 +1,21 @@ +/** @type {import('ts-jest').JestConfigWithTsJest} */ +module.exports = { + preset: "ts-jest", + testEnvironment: "node", + extensionsToTreatAsEsm: [".ts"], + moduleFileExtensions: ["ts", "js"], + moduleNameMapper: { + '^(\\.{1,2}/.*)\\.js$': '$1', + }, + modulePathIgnorePatterns: ["/dist/"], + transform: { + // '^.+\\.[tj]sx?$' to process js/ts with `ts-jest` + // '^.+\\.m?[tj]sx?$' to process js/ts/mjs/mts with `ts-jest` + '^.+\\.tsx?$': [ + 'ts-jest', + { + useESM: true, + }, + ], + }, +}; diff --git a/packages/pointers/package.json b/packages/pointers/package.json new file mode 100644 index 00000000..f6377da5 --- /dev/null +++ b/packages/pointers/package.json @@ -0,0 +1,28 @@ +{ + "name": "@ethdebug/pointers", + "version": "0.1.0-0", + "description": "Reference implementation for ethdebug/format pointers", + "main": "dist/src/index.js", + "type": "module", + "license": "MIT", + "scripts": { + "prepare": "tsc", + "watch": "yarn prepare --watch", + "test": "node --experimental-vm-modules $(yarn bin jest)" + }, + "devDependencies": { + "@ethdebug/format": "^0.1.0-0", + "@jest/globals": "^29.7.0", + "chalk": "^5.3.0", + "cli-highlight": "^2.1.11", + "ganache": "7.9.x", + "jest": "^29.7.0", + "solc": "^0.8.26", + "ts-jest": "^29.1.1", + "ts-node": "^10.9.2", + "typescript": "^5.3.3" + }, + "dependencies": { + "ethereum-cryptography": "^2.1.3" + } +} diff --git a/packages/pointers/src/cursor.ts b/packages/pointers/src/cursor.ts new file mode 100644 index 00000000..79f5e3b9 --- /dev/null +++ b/packages/pointers/src/cursor.ts @@ -0,0 +1,32 @@ +import type { Machine } from "./machine.js"; +import type { Pointer } from "./pointer.js"; +import type { Data } from "./data.js"; + +export interface Cursor { + view(state: Machine.State): Promise; +} + +export namespace Cursor { + export interface View { + read(region: Cursor.Region): Promise; + regions: Regions + } + + export type Regions = + & Cursor.Region[] + & { [name: string]: Cursor.Region; } + & { + named(name: string): Cursor.Region[]; + lookup: { [name: string]: Cursor.Region }; + }; + + export type Region = { + [K in keyof R]: K extends "slot" | "offset" | "length" + ? R[K] extends Pointer.Expression + ? Data + : R[K] extends Pointer.Expression | undefined + ? Data | undefined + : R[K] + : R[K]; + } +} diff --git a/packages/pointers/src/data.test.ts b/packages/pointers/src/data.test.ts new file mode 100644 index 00000000..bde182ac --- /dev/null +++ b/packages/pointers/src/data.test.ts @@ -0,0 +1,160 @@ +import { expect, describe, it } from "@jest/globals"; + +import { Data } from "./data.js"; + +describe("Data", () => { + describe(".prototype.asUint()", () => { + it("correctly converts to integers (big endian)", () => { + const data = new Data([0x01, 0x00]); + + expect(`${data.asUint()}`).toBe("256"); + }); + }); + + describe(".fromUint()", () => { + it("correctly creates Data instances from bigints", () => { + const data1 = Data.fromUint(0n); + expect(data1).toEqual(new Data([])); + + const data2 = Data.fromUint(255n); + expect(data2).toEqual(new Data([0xff])); + + const data3 = Data.fromUint(256n); + expect(data3).toEqual(new Data([0x01, 0x00])); + + const data4 = Data.fromUint(1234567890n); + expect(data4).toEqual(new Data([0x49, 0x96, 0x02, 0xd2])); + }); + }); + + describe(".fromNumber()", () => { + it("correctly creates Data instances from numbers", () => { + const data1 = Data.fromNumber(0); + expect(data1).toEqual(Data.zero()); + + const data2 = Data.fromNumber(255); + expect(data2).toEqual(new Data([0xff])); + + const data3 = Data.fromNumber(256); + expect(data3).toEqual(new Data([0x01, 0x00])); + }); + }); + + describe(".fromHex()", () => { + it("correctly creates Data instances from hex strings", () => { + const data1 = Data.fromHex("0x00"); + expect(data1).toEqual(new Data([0x00])); + + const data2 = Data.fromHex("0xff"); + expect(data2).toEqual(new Data([0xff])); + + const data3 = Data.fromHex("0x0100"); + expect(data3).toEqual(new Data([0x01, 0x00])); + + const data4 = Data.fromHex("0x499602d2"); + expect(data4).toEqual(new Data([0x49, 0x96, 0x02, 0xd2])); + }); + + it("throws an error for invalid hex string format", () => { + expect(() => Data.fromHex("ff")).toThrow("Invalid hex string format. Expected \"0x\" prefix."); + }); + }); +}); + +describe("Word", () => { + describe(".prototype.asUint", () => { + it("correctly converts to integers (big endian)", () => { + const word = new Data.Word([ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + ]); + + expect(`${word.asUint()}`).toBe("256"); + }); + }); + + describe(".fromUint()", () => { + it("correctly creates Word instances from BigInt values", () => { + const word1 = Data.Word.fromUint(0n); + expect(word1).toEqual(Data.Word.zero()); + + const word2 = Data.Word.fromUint(255n); + expect(word2).toEqual(new Data.Word([ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, + ])); + + const word3 = Data.Word.fromUint(256n); + expect(word3).toEqual(new Data.Word([ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + ])); + + const word4 = Data.Word.fromUint(1234567890n); + expect(word4).toEqual(new Data.Word([ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x49, 0x96, 0x02, 0xd2, + ])); + }); + }); + + describe(".fromNumber()", () => { + it("correctly creates Word instances from unsigned integers", () => { + const word1 = Data.Word.fromNumber(0); + expect(word1).toEqual(Data.Word.zero()); + + const word2 = Data.Word.fromNumber(255); + expect(word2).toEqual(new Data.Word([ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, + ])); + + const word3 = Data.Word.fromNumber(256); + expect(word3).toEqual(new Data.Word([ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + ])); + + }); + }); + + describe(".fromHex()", () => { + it("correctly creates Word instances from hex strings", () => { + const word1 = Data.Word.fromHex( + "0x0000000000000000000000000000000000000000000000000000000000000000" + ); + expect(word1).toEqual(Data.Word.zero()); + + const word2 = Data.Word.fromHex( + "0x00000000000000000000000000000000000000000000000000000000000000ff" + ); + expect(word2).toEqual(new Data.Word([ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, + ])); + + const word3 = Data.Word.fromHex("0x0000000000000000000000000000000000000000000000000000000000000100"); + expect(word3).toEqual(new Data.Word([ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + ])); + }); + }); +}); + diff --git a/packages/pointers/src/data.ts b/packages/pointers/src/data.ts new file mode 100644 index 00000000..66a1f41f --- /dev/null +++ b/packages/pointers/src/data.ts @@ -0,0 +1,139 @@ +import { toHex } from "ethereum-cryptography/utils"; + +export class Data extends Uint8Array { + static zero(): Data { + return new Data([]); + } + + static fromUint(value: bigint): Data { + if (value === 0n) { + return this.zero(); + } + + const byteCount = Math.ceil(Number(value.toString(2).length) / 8); + const bytes = new Uint8Array(byteCount); + for (let i = byteCount - 1; i >= 0; i--) { + bytes[i] = Number(value & 0xffn); + value >>= 8n; + } + return new Data(bytes); + } + + static fromNumber(value: number): Data { + const byteCount = Math.ceil(Math.log2(value + 1) / 8); + const bytes = new Uint8Array(byteCount); + for (let i = byteCount - 1; i >= 0; i--) { + bytes[i] = value & 0xff; + value >>= 8; + } + return new Data(bytes); + } + + static fromHex(hex: string): Data { + if (!hex.startsWith('0x')) { + throw new Error('Invalid hex string format. Expected "0x" prefix.'); + } + const bytes = new Uint8Array(hex.length / 2 - 1); + for (let i = 2; i < hex.length; i += 2) { + bytes[i / 2 - 1] = parseInt(hex.slice(i, i + 2), 16); + } + return new Data(bytes); + } + + static fromBytes(bytes: Uint8Array): Data { + return new Data(bytes); + } + + asUint(): bigint { + const bits = 8n; + + let value = 0n; + for (const byte of this.values()) { + const byteValue = BigInt(byte) + value = (value << bits) + byteValue + } + return value; + } + + toHex(): string { + return `0x${toHex(this)}`; + } +} + +export namespace Data { + export class Word extends Data { + static zero(): Word { + return new Word([ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + ]); + } + + static fromUint(value: bigint): Word { + const bytes = this.zero(); + for (let i = 31; i >= 0; i--) { + bytes[i] = Number(value & 0xffn); + value >>= 8n; + } + return new Word(bytes as unknown as FixedSizeUint8Array<32>); + } + + static fromNumber(value: number): Word { + const bytes = this.zero(); + for (let i = 31; i >= 0; i--) { + bytes[i] = value & 0xff; + value >>= 8; + } + return new Word(bytes as unknown as FixedSizeUint8Array<32>); + } + + static fromBytes(bytes: Uint8Array): Word { + if (bytes.length !== 32) { + throw new Error(`Invalid byte length for Word. Expected 32 bytes, but got ${bytes.length}.`); + } + + return new Word(bytes as unknown as FixedSizeUint8Array<32>); + } + + static fromHex(hex: string): Word { + if (!hex.startsWith('0x')) { + throw new Error('Invalid hex string format. Expected "0x" prefix.'); + } + + if (hex.length !== 66) { + throw new Error(`Invalid hex string length. Expected 66 characters (including "0x" prefix), but got ${hex.length}.`); + } + + const bytes = new Uint8Array(32); + for (let i = 2; i < hex.length; i += 2) { + bytes[i / 2 - 1] = parseInt(hex.slice(i, i + 2), 16); + } + + return new Word(bytes as unknown as FixedSizeUint8Array<32>); + } + + constructor (values: FixedSizeUint8Array<32>) { + if (values.length !== 32) { + throw new Error( + `Unexpected runtime length assertion failed; received ${values.length} values instead of expected 32` + ); + } + + super(values); + } + } +} + +export type FixedSizeUint8Array = + N extends N + ? number extends N + ? never + : _FixedSizeUint8Array + : never; + +export type _FixedSizeUint8Array = + T['length'] extends N + ? T + : _FixedSizeUint8Array; diff --git a/packages/pointers/src/dereference/cursor.ts b/packages/pointers/src/dereference/cursor.ts new file mode 100644 index 00000000..6a78e05c --- /dev/null +++ b/packages/pointers/src/dereference/cursor.ts @@ -0,0 +1,73 @@ +import type { Machine } from "../machine.js"; +import type { Cursor } from "../cursor.js"; +import { read } from "../read.js"; + +export function createCursor( + simpleCursor: (state: Machine.State) => AsyncIterable +): Cursor { + return { + async view(state: Machine.State) { + const list = []; + for await (const region of simpleCursor(state)) { + list.push(region); + } + + const named: { [name: string]: Cursor.Region[] } = {}; + const current: { [name: string]: Cursor.Region } = {}; + + const propertyFlags = { + writable: false, + enumerable: false, + configurable: false + } as const; + + const regions: Cursor.Regions = Object.create(Array.prototype, { + length: { + value: list.length, + ...propertyFlags + } + }); + + for (const [index, region] of list.entries()) { + Object.defineProperty(regions, index, { + value: region, + ...propertyFlags, + enumerable: true, + }); + + if (typeof region.name === "string") { + if (!(region.name in named)) { + named[region.name] = []; + } + named[region.name].push(region); + current[region.name] = region; + } + } + + for (const [name, region] of Object.entries(current)) { + Object.defineProperty(regions, name, { + value: region, + ...propertyFlags + }); + } + + Object.defineProperties(regions, { + named: { + value: (name: string) => named[name] || [], + ...propertyFlags + }, + lookup: { + value: (name: string) => current[name], + ...propertyFlags + } + }); + + return { + regions, + async read(region: Cursor.Region) { + return await read(region, { state }); + } + }; + } + }; +} diff --git a/packages/pointers/src/dereference/index.integration.test.ts b/packages/pointers/src/dereference/index.integration.test.ts new file mode 100644 index 00000000..0b44e188 --- /dev/null +++ b/packages/pointers/src/dereference/index.integration.test.ts @@ -0,0 +1,77 @@ +import { jest, expect, describe, it, beforeEach } from "@jest/globals"; + +import { describeSchema } from "@ethdebug/format"; + +import { + loadGanache, + machineForProvider, + compileCreateBytecode, + deployContract, + examples +} from "../../test/index.js"; + +import { Machine, Data, type Pointer, dereference } from "../index.js"; + +const { schema: { examples: examplePointers } } = describeSchema({ + schema: { id: "schema:ethdebug/format/pointer" } +}) as { schema: { examples: Pointer[] } }; + +describe("dereference (integration)", () => { + describe("solidity string storage", () => { + it("allows dereferencing solidity string storage pointers", async () => { + const expectedStringValues = [ + "", + "hello world", + "solidity storage is a fun lesson in endianness" + ]; + const observedStringValues = []; + + const pointer: Pointer = examplePointers.find( + example => JSON.stringify(example).includes("long-string-length-data") + )!; + + // initialize local development blockchain + const provider = (await loadGanache()).provider({ + logging: { + quiet: true + } + }); + + const bytecode = await compileCreateBytecode(examples.stringStorage); + const { + transactionHash, + contractAddress + } = await deployContract(bytecode, provider); + + const machine = machineForProvider(provider); + const trace = machine.trace(transactionHash); + + let cursor = await dereference(pointer); + let lastObservedStringValue; + for await (const state of trace) { + const { regions, read } = await cursor.view(state); + const stringData = Data.fromHex( + await regions.named("string") + .map(read) + // HACK concatenate via string representation + .map(async data => (await data).toHex().slice(2)) + .reduce(async (accumulator, data) => { + return `${await accumulator}${await data}`; + }, Promise.resolve("0x")) + ); + + const storedString = new TextDecoder().decode(stringData); + + if (storedString !== lastObservedStringValue) { + observedStringValues.push(storedString); + lastObservedStringValue = storedString; + } + } + + expect(observedStringValues).toEqual( + expect.arrayContaining(expectedStringValues) + ); + + }); + }); +}); diff --git a/packages/pointers/src/dereference/index.test.ts b/packages/pointers/src/dereference/index.test.ts new file mode 100644 index 00000000..0e850b54 --- /dev/null +++ b/packages/pointers/src/dereference/index.test.ts @@ -0,0 +1,253 @@ +import { jest, expect, describe, it, beforeEach } from "@jest/globals"; +import { Machine } from "../machine.js"; +import { Data } from "../data.js"; +import { Pointer } from "../pointer.js"; +import { dereference } from "./index.js"; + +describe("dereference", () => { + let state: Machine.State; + + beforeEach(() => { + state = { + stack: { + length: Promise.resolve(10n), + peek: jest.fn(async () => Data.fromBytes(new Uint8Array([0x11, 0x22, 0x33, 0x44]))), + }, + memory: { + read: jest.fn(async () => Data.fromBytes(new Uint8Array([0x55, 0x66, 0x77, 0x88]))), + }, + storage: { + read: jest.fn(async () => Data.fromBytes(new Uint8Array([0xaa, 0xbb, 0xcc, 0xdd]))), + }, + calldata: { + read: jest.fn(async () => Data.fromBytes(new Uint8Array([0x11, 0x22, 0x33, 0x44]))), + }, + returndata: { + read: jest.fn(async () => Data.fromBytes(new Uint8Array([0x55, 0x66, 0x77, 0x88]))), + }, + transient: { + read: jest.fn(async () => Data.fromBytes(new Uint8Array([0xaa, 0xbb, 0xcc, 0xdd]))), + }, + code: { + read: jest.fn(async () => Data.fromBytes(new Uint8Array([0x11, 0x22, 0x33, 0x44]))), + }, + } as unknown as Machine.State; + }); + + it("works for a single region", async () => { + const pointer: Pointer = { + location: "memory", + offset: { + $sum: [0x40, 0x20] + }, + length: 0x20 + }; + + const cursor = await dereference(pointer); + + const { regions } = await cursor.view(state); + + expect(regions).toHaveLength(1); + expect(regions[0]).toEqual({ + location: "memory", + offset: Data.fromNumber(0x60), + length: Data.fromNumber(0x20) + }); + }); + + it("works for a group of regions", async () => { + const pointer: Pointer = { + group: [{ + name: "a", + location: "memory", + offset: { + $sum: [0x40, 0x20] + }, + length: 0x20 + }, { + location: "memory", + offset: { + $sum: [ + { ".offset": "a" }, + { ".length": "a" } + ] + }, + length: { ".length": "a" } + }] + }; + + const cursor = await dereference(pointer); + + const { regions } = await cursor.view(state); + + expect(regions).toHaveLength(2); + expect(regions["a"]).toEqual({ + name: "a", + location: "memory", + offset: Data.fromNumber(0x60), + length: Data.fromNumber(0x20) + }); + expect(regions[1]).toEqual({ + location: "memory", + offset: Data.fromNumber(0x80), + length: Data.fromNumber(0x20) + }); + }); + + it("works for a list of regions", async () => { + const pointer: Pointer = { + list: { + count: 3, + each: "i", + is: { + name: "item", + location: "memory", + offset: { + $product: ["i", 32], + }, + length: 32 + }, + }, + }; + + const cursor = await dereference(pointer); + + const { regions } = await cursor.view(state); + + const itemRegions = regions.named("item"); + expect(itemRegions).toHaveLength(3); + + for (const [index, region] of itemRegions.entries()) { + expect(region).toEqual({ + name: "item", + location: "memory", + offset: Data.fromUint( + Data.fromNumber(index).asUint() * 32n + ), + length: Data.fromNumber(32), + }) + } + }); + + it("allows referencing previous fields by way of $this", async () => { + const pointer: Pointer = { + location: "memory", + offset: 32, + length: { ".offset": "$this" } + }; + + const cursor = await dereference(pointer); + + const { regions } = await cursor.view(state); + + expect(regions).toHaveLength(1); + expect(regions[0]).toEqual({ + location: "memory", + offset: Data.fromNumber(32), + length: Data.fromNumber(32) + }); + }); + + it("allows referencing later fields by way of $this", async () => { + const pointer: Pointer = { + location: "memory", + offset: { ".length": "$this" }, + length: 32 + }; + + const cursor = await dereference(pointer); + + const { regions } = await cursor.view(state); + + expect(regions).toHaveLength(1); + expect(regions[0]).toEqual({ + location: "memory", + offset: Data.fromNumber(32), + length: Data.fromNumber(32) + }); + }); + + it("allows referencing fields that reference other fields", async () => { + const pointer: Pointer = { + location: "storage", + slot: { ".offset": "$this" }, + offset: { ".length": "$this" }, + length: 32 + }; + + const cursor = await dereference(pointer); + + const { regions } = await cursor.view(state); + + expect(regions).toHaveLength(1); + expect(regions[0]).toEqual({ + location: "storage", + slot: Data.fromNumber(32), + offset: Data.fromNumber(32), + length: Data.fromNumber(32) + }); + }); + + it("throws an error on circular reference", async () => { + const pointer: Pointer = { + location: "memory", + offset: { ".length": "$this" }, + length: { ".offset": "$this" }, + }; + + const cursor = await dereference(pointer); + + await expect(cursor.view(state)).rejects.toThrow( + "Circular reference detected: $this.offset" + ); + }); + + it("works for conditionals", async () => { + const pointer: Pointer = { + if: { + $difference: [5, 5] + }, + then: { + name: "a", + location: "memory", + offset: 0, + length: 0 + }, + else: { + name: "b", + location: "memory", + offset: 0, + length: 0 + } + }; + + const cursor = await dereference(pointer); + + const { regions } = await cursor.view(state); + + expect(regions).toHaveLength(1); + expect(regions[0].name).toEqual("b"); + }); + + it("works for scopes", async () => { + const pointer: Pointer = { + define: { + "example-offset": 0, + "example-length": 32 + }, + in: { + location: "memory", + offset: "example-offset", + length: "example-length" + } + }; + + const cursor = await dereference(pointer); + + const { regions } = await cursor.view(state); + + expect(regions).toHaveLength(1); + expect(regions[0].offset).toEqual(Data.fromNumber(0)); + expect(regions[0].length).toEqual(Data.fromNumber(32)); + }); +}); diff --git a/packages/pointers/src/dereference/index.ts b/packages/pointers/src/dereference/index.ts new file mode 100644 index 00000000..dacf07f4 --- /dev/null +++ b/packages/pointers/src/dereference/index.ts @@ -0,0 +1,49 @@ +import type { Pointer } from "../pointer.js"; +import type { Machine } from "../machine.js"; +import type { Cursor } from "../cursor.js"; + +import { generateRegions, type GenerateRegionsOptions } from "./process.js"; +import { createCursor } from "./cursor.js"; + +export interface DereferenceOptions { + /* + * Initial machine state + * Required for any pointers that reference the stack. + */ + state?: Machine.State; +} + +/** + * Dereference an ethdebug/format/pointer document into a Cursor object, + * which allows inspecting machine state corresponding to the given pointer. + * + * Note that `options.state` is required if `pointer` contains any stack + * regions. + */ +export async function dereference( + pointer: Pointer, + dereferenceOptions: DereferenceOptions = {} +): Promise { + const options = await initializeGenerateRegionsOptions(dereferenceOptions); + + // use a closure to build a simple Cursor-like interface for accepting + // a machine state and producing a collection of regions. + const simpleCursor = + (state: Machine.State): AsyncIterable => ({ + async *[Symbol.asyncIterator]() { + yield* generateRegions(pointer, { ...options, state }); + } + }); + + return createCursor(simpleCursor); +} + +async function initializeGenerateRegionsOptions({ + state: initialState +}: DereferenceOptions): Promise> { + const initialStackLength = initialState + ? await initialState.stack.length + : 0n; + + return { initialStackLength }; +} diff --git a/packages/pointers/src/dereference/memo.ts b/packages/pointers/src/dereference/memo.ts new file mode 100644 index 00000000..ce679f1a --- /dev/null +++ b/packages/pointers/src/dereference/memo.ts @@ -0,0 +1,44 @@ +import type { Pointer } from "../pointer.js"; +import type { Cursor } from "../cursor.js"; +import type { Data } from "../data.js"; + +export type Memo = + | Memo.EvaluatePointer + | Memo.SaveRegions + | Memo.SaveVariables; + +export namespace Memo { + export interface EvaluatePointer { + kind: "evaluate-pointer"; + pointer: Pointer; + } + + export const evaluatePointer = + (pointer: Pointer): EvaluatePointer => ({ + kind: "evaluate-pointer", + pointer + }); + + + export interface SaveRegions { + kind: "save-regions"; + regions: Record; + } + + export const saveRegions = + (regions: Record): SaveRegions => ({ + kind: "save-regions", + regions + }); + + export interface SaveVariables { + kind: "save-variables"; + variables: Record; + } + + export const saveVariables = + (variables: Record): SaveVariables => ({ + kind: "save-variables", + variables + }); +} diff --git a/packages/pointers/src/dereference/process.ts b/packages/pointers/src/dereference/process.ts new file mode 100644 index 00000000..3e86252f --- /dev/null +++ b/packages/pointers/src/dereference/process.ts @@ -0,0 +1,219 @@ +import type { Machine } from "../machine.js"; +import type { Cursor } from "../cursor.js"; +import { Data } from "../data.js"; +import { Pointer } from "../pointer.js"; +import { evaluate } from "../evaluate.js"; + +import { Memo } from "./memo.js"; +import { adjustStackLength, evaluateRegion } from "./region.js"; + +export interface GenerateRegionsOptions { + state: Machine.State; + initialStackLength: bigint; +} + +/** + * Generator function that yields Cursor.Regions for a given Pointer. + * + * This function maintains an internal stack of memos to evaluate, + * initially populating this stack with a single entry for evaluating the + * given pointer. + */ +export async function* generateRegions( + pointer: Pointer, + generateRegionsOptions: GenerateRegionsOptions +): AsyncIterable { + const options = await initializeProcessOptions(generateRegionsOptions); + + // extract records for mutation + const { + regions, + variables + } = options; + + const stack: Memo[] = [Memo.evaluatePointer(pointer)]; + while (stack.length > 0) { + const memo: Memo = stack.pop() as Memo; + + let memos: Memo[] = []; + switch (memo.kind) { + case "evaluate-pointer": { + memos = yield* processPointer(memo.pointer, options); + break; + } + case "save-regions": { + Object.assign(regions, memo.regions); + break; + } + case "save-variables": { + Object.assign(variables, memo.variables); + break; + } + } + + // add new memos to the stack in reverse order + for (let index = memos.length - 1; index >= 0; index--) { + stack.push(memos[index]); + } + } +} + +interface ProcessOptions { + state: Machine.State; + stackLengthChange: bigint; + regions: Record; + variables: Record; +} + +async function initializeProcessOptions({ + state, + initialStackLength +}: GenerateRegionsOptions): Promise { + const currentStackLength = await state.stack.length; + const stackLengthChange = currentStackLength - initialStackLength; + + const regions: Record = {}; + const variables: Record = {}; + + return { + state, + stackLengthChange, + regions, + variables + }; +} + +/** + * an generator that yields Cursor regions and returns a list of new memos + * to add to the stack + */ +type Process = AsyncGenerator; + + +export async function* processPointer( + pointer: Pointer, + options: ProcessOptions +): Process { + const { + regions: oldRegions, + variables: oldVariables, + } = options; + + if (Pointer.isRegion(pointer)) { + const region = pointer; + + return yield* processRegion(region, options); + } + + const collection = pointer; + + if (Pointer.Collection.isGroup(collection)) { + return yield* processGroup(collection, options); + } + + if (Pointer.Collection.isList(collection)) { + return yield* processList(collection, options); + } + + if (Pointer.Collection.isConditional(collection)) { + return yield* processConditional(collection, options); + } + + if (Pointer.Collection.isScope(collection)) { + return yield* processScope(collection, options); + } + + console.error("%s", JSON.stringify(pointer, undefined, 2)); + throw new Error("Unexpected unknown kind of pointer"); +} + +async function* processRegion( + region: Pointer.Region, + { stackLengthChange, ...options}: ProcessOptions +): Process { + const evaluatedRegion = await evaluateRegion( + adjustStackLength(region, stackLengthChange), + options + ); + + yield evaluatedRegion; + + if (typeof region.name !== "undefined") { + return [Memo.saveRegions({ [region.name]: evaluatedRegion })]; + } + + return []; +} + +async function* processGroup( + collection: Pointer.Collection.Group, + options: ProcessOptions +): Process { + const { group } = collection; + return group.map(Memo.evaluatePointer); +} + +async function* processList( + collection: Pointer.Collection.List, + options: ProcessOptions +): Process { + const { list } = collection; + const { count: countExpression, each, is } = list; + + const count = (await evaluate(countExpression, options)).asUint(); + + const memos: Memo[] = []; + for (let index = 0n; index < count; index++) { + memos.push(Memo.saveVariables({ + [each]: Data.fromUint(index) + })); + + memos.push(Memo.evaluatePointer(is)); + } + + return memos; +} + +async function* processConditional( + collection: Pointer.Collection.Conditional, + options: ProcessOptions +): Process { + const { if: ifExpression, then: then_, else: else_ } = collection; + + const if_ = (await evaluate(ifExpression, options)).asUint(); + + if (if_) { + return [Memo.evaluatePointer(then_)]; + } + + // otherwise, return the else clause if it exists (it is optional) + return else_ + ? [Memo.evaluatePointer(else_)] + : []; +} + +async function* processScope( + collection: Pointer.Collection.Scope, + options: ProcessOptions +): Process { + const { define: variableExpressions, in: in_ } = collection; + + const allVariables = { + ...options.variables + }; + const newVariables: { [identifier: string]: Data } = {}; + for (const [identifier, expression] of Object.entries(variableExpressions)) { + const data = await evaluate(expression, { + ...options, + variables: allVariables + }); + + allVariables[identifier] = data; + newVariables[identifier] = data; + } + + return [ + Memo.saveVariables(newVariables), + Memo.evaluatePointer(in_) + ]; +} diff --git a/packages/pointers/src/dereference/region.ts b/packages/pointers/src/dereference/region.ts new file mode 100644 index 00000000..405521e7 --- /dev/null +++ b/packages/pointers/src/dereference/region.ts @@ -0,0 +1,113 @@ +import type { Cursor } from "../cursor.js"; +import type { Data } from "../data.js"; +import { Pointer } from "../pointer.js"; +import { evaluate, type EvaluateOptions } from "../evaluate.js"; + +/** + * Evaluate all Pointer.Expression-value properties on a given region + * + * Due to the availability of `$this` as a builtin allowable by the schema, + * this function evaluates each property as part of a queue. If a property's + * expression fails to evaluate due to a missing reference, the property is + * added to the end of the queue. + * + * Circular dependencies are detected naïvely by counting evaluation attempts + * for each property, since the maximum length of a chain of $this references + * within a single region is one less than the number of properties that + * require evaluation). Exceeding this many attempts indicates circularity. + */ +export async function evaluateRegion( + region: R, + options: EvaluateOptions +): Promise> { + const evaluatedProperties: { + [K in keyof R]?: Data + } = {}; + const propertyAttempts: { + [K in keyof R]?: number + } = {}; + + const partialRegion: Cursor.Region = new Proxy( + { ...region } as Cursor.Region, + { + get(target, property) { + if (property in evaluatedProperties) { + return evaluatedProperties[property as keyof R]; + } + throw new Error(`Property not evaluated yet: $this.${property.toString()}`) + }, + } + ); + + const propertiesRequiringEvaluation = ["slot", "offset", "length"] as const; + + const expressionQueue: [keyof R, Pointer.Expression][] = + propertiesRequiringEvaluation + .filter(property => property in region) + .map( + property => [property, region[property as keyof R]] + ) as [keyof R, Pointer.Expression][]; + + while (expressionQueue.length > 0) { + const [property, expression] = expressionQueue.shift()!; + + try { + const data = await evaluate(expression, { + ...options, + regions: { + ...options.regions, + $this: partialRegion, + }, + }); + + evaluatedProperties[property as keyof R] = data; + } catch (error) { + if ( + error instanceof Error && + error.message.startsWith("Property not evaluated yet: $this.") + ) { + const attempts = propertyAttempts[property] || 0; + // fields may reference each other, but the chain of references + // should not exceed the number of fields minus 1 + if (attempts > propertiesRequiringEvaluation.length - 1) { + throw new Error(`Circular reference detected: $this.${property.toString()}`); + } + + propertyAttempts[property] = attempts + 1; + expressionQueue.push([property, expression]); + } else { + throw error; + } + } + } + + return { + ...region, + ...evaluatedProperties, + } as Cursor.Region; +} + +/** + * Detect a stack region and modify its `slot` expression to include the + * appropriate sum or difference based on the machine stack length change + * since the Cursor was originally created + */ +export function adjustStackLength( + region: R, + stackLengthChange: bigint +): R { + if (Pointer.Region.isStack(region)) { + const slot: Pointer.Expression = stackLengthChange === 0n + ? region.slot + : stackLengthChange > 0n + ? { $sum: [region.slot, `"0x${stackLengthChange.toString(16)}"`] } + : { $difference: [region.slot, `"0x${-stackLengthChange.toString(16)}"`] }; + + return { + ...region, + slot + }; + } + + return region; +} diff --git a/packages/pointers/src/evaluate.test.ts b/packages/pointers/src/evaluate.test.ts new file mode 100644 index 00000000..c2c675b9 --- /dev/null +++ b/packages/pointers/src/evaluate.test.ts @@ -0,0 +1,196 @@ +import { expect, describe, it, beforeEach } from "@jest/globals"; +import { keccak256 } from "ethereum-cryptography/keccak"; +import { toHex } from "ethereum-cryptography/utils"; +import { Machine } from "./machine.js"; +import { Data } from "./data.js"; +import { Cursor } from "./cursor.js"; +import { Pointer } from "./pointer.js"; +import { evaluate, type EvaluateOptions } from "./evaluate.js"; + +// Create a stub for the Machine.State interface +const state: Machine.State = { + traceIndex: Promise.resolve(0n), + opcode: Promise.resolve("PUSH1"), + programCounter: Promise.resolve(10n), + stack: { + length: 50n + } as any, + memory: {} as any, + storage: {} as any, + calldata: {} as any, + returndata: {} as any, + transient: {} as any, + code: {} as any, +}; + +describe("evaluate", () => { + let regions: { [identifier: string]: Cursor.Region }; + let variables: { [identifier: string]: Data }; + let cursor: Cursor; + let options: EvaluateOptions; + + beforeEach(() => { + variables = { + foo: Data.fromNumber(42), + bar: Data.fromHex("0x1f"), + }; + + regions = { + stack: { + name: "stack", + location: "stack", + slot: Data.fromNumber(42), + offset: Data.fromNumber(0x60), + length: Data.fromNumber(0x1f / 2) + }, + memory: { + name: "memory", + location: "memory", + offset: Data.fromNumber(0x20 * 0x05), + length: Data.fromNumber(42 - 0x1f) + } + } ; + + options = { + state, + variables, + regions + } + }); + + it("evaluates literal expressions", async () => { + expect(await evaluate(42, options)) + .toEqual(Data.fromNumber(42)); + + expect(await evaluate("0x1f", options)) + .toEqual(Data.fromHex("0x1f")); + }); + + it("evaluates constant expressions", async () => { + expect(await evaluate("$wordsize", options)) + .toEqual(Data.fromHex("0x20")); + }); + + it("evaluates variable expressions", async () => { + expect(await evaluate("foo", options)) + .toEqual(Data.fromNumber(42)); + + expect(await evaluate("bar", options)) + .toEqual(Data.fromHex("0x1f")); + }); + + it("evaluates sum expressions", async () => { + const expression: Pointer.Expression = { + $sum: [42, "0x1f", "foo", "bar"] + }; + + expect(await evaluate(expression, options)) + .toEqual(Data.fromUint(42n + 0x1fn + 42n + 0x1fn)); + }); + + it("evaluates difference expressions", async () => { + const expression: Pointer.Expression = { + $difference: ["foo", "bar"] + }; + + expect(await evaluate(expression, options)) + .toEqual(Data.fromUint(42n - 0x1fn)); + }); + + it("evaluates product expressions", async () => { + const expression: Pointer.Expression = { + $product: [42, "0x1f", "foo", "bar"] + }; + + expect(await evaluate(expression, options)) + .toEqual(Data.fromUint(42n * 0x1fn * 42n * 0x1fn)); + }); + + it("evaluates quotient expressions", async () => { + const expression: Pointer.Expression = { + $quotient: ["foo", "bar"] + }; + + expect(await evaluate(expression, options)) + .toEqual(Data.fromUint(42n / 0x1fn)); + }); + + it("evaluates remainder expressions", async () => { + const expression: Pointer.Expression = { + $remainder: ["foo", "bar"] + }; + + expect(await evaluate(expression, options)) + .toEqual(Data.fromUint(42n % 0x1fn)); + }); + + // skipped because test does not perform proper padding + it.skip("evaluates keccak256 expressions", async () => { + const expression: Pointer.Expression = { + $keccak256: ["foo", "bar", 42, "0x1f"] + }; + + const expectedHash = keccak256( + Buffer.from( + toHex(Data.fromNumber(42)).slice(2) + + toHex(Data.fromHex("0x1f")).slice(2) + + toHex(variables.foo).slice(2) + + toHex(variables.bar).slice(2), + "hex" + ) + ); + + expect(await evaluate(expression, options)) + .toEqual(Data.fromBytes(expectedHash)); + }); + + it("evaluates offset lookup expressions", async () => { + const expression: Pointer.Expression = { + ".offset": "stack" + }; + + expect(await evaluate(expression, options)) + .toEqual(Data.fromUint(0x60n)); + }); + + it("evaluates offset lookup expressions with $this", async () => { + const expression: Pointer.Expression = { + ".offset": "$this" + }; + + const $this = { + name: "$this", + location: "memory", + offset: Data.fromNumber(0x120), + length: Data.fromNumber(0x40) + } as const; + + expect( + await evaluate(expression, { + ...options, + regions: { + ...regions, + $this + } + }) + ).toEqual(Data.fromUint(0x120n)); + }); + + it("evaluates length lookup expressions", async () => { + const expression: Pointer.Expression = { + ".length": "memory" + }; + + expect(await evaluate(expression, options)) + .toEqual(Data.fromUint(11n)); + }); + + it("evaluates slot lookup expressions", async () => { + const expression: Pointer.Expression = { + ".slot": "stack" + }; + + expect(await evaluate(expression, options)) + .toEqual(Data.fromNumber(42)); + }); +}); diff --git a/packages/pointers/src/evaluate.ts b/packages/pointers/src/evaluate.ts new file mode 100644 index 00000000..284ac8d9 --- /dev/null +++ b/packages/pointers/src/evaluate.ts @@ -0,0 +1,242 @@ +import { Pointer } from "./pointer.js"; +import { Machine } from "./machine.js"; +import { Data } from "./data.js"; +import type { Cursor } from "./cursor.js"; +import { read } from "./read.js"; +import { keccak256 } from "ethereum-cryptography/keccak"; +import { toHex } from "ethereum-cryptography/utils"; + +export interface EvaluateOptions { + state: Machine.State; + regions: { + [identifier: string]: Cursor.Region; + }; + variables: { + [identifier: string]: Data; + }; +} + +export async function evaluate( + expression: Pointer.Expression, + options: EvaluateOptions +): Promise { + if (Pointer.Expression.isLiteral(expression)) { + return evaluateLiteral(expression); + } + + if (Pointer.Expression.isConstant(expression)) { + return evaluateConstant(expression); + } + + if (Pointer.Expression.isVariable(expression)) { + return evaluateVariable(expression, options); + } + + if (Pointer.Expression.isArithmetic(expression)) { + if (Pointer.Expression.Arithmetic.isSum(expression)) { + return evaluateArithmeticSum(expression, options); + } + + if (Pointer.Expression.Arithmetic.isDifference(expression)) { + return evaluateArithmeticDifference(expression, options); + } + + if (Pointer.Expression.Arithmetic.isProduct(expression)) { + return evaluateArithmeticProduct(expression, options); + } + + if (Pointer.Expression.Arithmetic.isQuotient(expression)) { + return evaluateArithmeticQuotient(expression, options); + } + + if (Pointer.Expression.Arithmetic.isRemainder(expression)) { + return evaluateArithmeticRemainder(expression, options); + } + } + + if (Pointer.Expression.isKeccak256(expression)) { + return evaluateKeccak256(expression, options); + } + + if (Pointer.Expression.isLookup(expression)) { + if (Pointer.Expression.Lookup.isOffset(expression)) { + return evaluateLookup(".offset", expression, options); + } + + if (Pointer.Expression.Lookup.isLength(expression)) { + return evaluateLookup(".length", expression, options); + } + + if (Pointer.Expression.Lookup.isSlot(expression)) { + return evaluateLookup(".slot", expression, options); + } + } + + if (Pointer.Expression.isRead(expression)) { + return evaluateRead(expression, options); + } + + throw new Error("not implemented"); +} + +async function evaluateLiteral( + literal: Pointer.Expression.Literal +): Promise { + switch (typeof literal) { + case "string": + return Data.fromHex(literal); + case "number": + return Data.fromNumber(literal); + } +} + +async function evaluateConstant( + constant: Pointer.Expression.Constant +): Promise { + switch (constant) { + case "$wordsize": + return Data.fromHex("0x20"); + } +} + +async function evaluateVariable( + identifier: Pointer.Expression.Variable, + { variables }: EvaluateOptions +): Promise { + const data = variables[identifier]; + if (typeof data === "undefined") { + throw new Error(`Unknown variable with identifier ${identifier}`); + } + + return data; +} + +async function evaluateArithmeticSum( + expression: Pointer.Expression.Arithmetic.Sum, + options: EvaluateOptions +): Promise { + const operands = await Promise.all(expression.$sum.map( + async expression => (await evaluate(expression, options)).asUint() + )); + + return Data.fromUint( + operands.reduce((sum, data) => sum + data, 0n) + ); +} + +async function evaluateArithmeticDifference( + expression: Pointer.Expression.Arithmetic.Difference, + options: EvaluateOptions +): Promise { + const [a, b] = await Promise.all(expression.$difference.map( + async expression => (await evaluate(expression, options)).asUint() + )); + + if (b > a) { + return Data.fromNumber(0); + } + + return Data.fromUint(a - b); +} + +async function evaluateArithmeticProduct( + expression: Pointer.Expression.Arithmetic.Product, + options: EvaluateOptions +): Promise { + const operands = await Promise.all(expression.$product.map( + async expression => (await evaluate(expression, options)).asUint() + )); + + return Data.fromUint( + operands.reduce((product, data) => product * data, 1n) + ); +} + +async function evaluateArithmeticQuotient( + expression: Pointer.Expression.Arithmetic.Quotient, + options: EvaluateOptions +): Promise { + const [a, b] = await Promise.all(expression.$quotient.map( + async expression => (await evaluate(expression, options)).asUint() + )); + + return Data.fromUint(a / b); +} + +async function evaluateArithmeticRemainder( + expression: Pointer.Expression.Arithmetic.Remainder, + options: EvaluateOptions +): Promise { + const [a, b] = await Promise.all(expression.$remainder.map( + async expression => (await evaluate(expression, options)).asUint() + )); + + return Data.fromUint(a % b); +} + +async function evaluateKeccak256( + expression: Pointer.Expression.Keccak256, + options: EvaluateOptions +): Promise { + const operands = await Promise.all(expression.$keccak256.map( + async expression => { + const unpaddedData = await evaluate(expression, options); + const data = new Data(32); + data.set(unpaddedData, 32 - unpaddedData.length); + + return data; + } + )); + + // HACK concatenate via string representation + const concatenatedData = operands.reduce( + (data, operand) => `${data}${operand.toHex().slice(2)}`, + "" + ); + + const buffer = Buffer.from(concatenatedData, "hex"); + const hash = keccak256(buffer); + + return Data.fromBytes(hash); +} + +async function evaluateLookup( + operation: O, + lookup: Pointer.Expression.Lookup.ForOperation, + options: EvaluateOptions +): Promise { + const { regions } = options; + + const identifier = lookup[operation]; + const region = regions[identifier]; + if (!region) { + throw new Error(`Region not found: ${identifier}`); + } + + const property = Pointer.Expression.Lookup.propertyFrom(operation); + + const data = region[property as keyof typeof region] as Data | undefined; + + if (typeof data === "undefined") { + throw new Error( + `Region named ${identifier} does not have ${property} needed by lookup` + ); + } + + return data; +} + +async function evaluateRead( + expression: Pointer.Expression.Read, + options: EvaluateOptions +): Promise { + const { state, regions } = options; + + const identifier = expression.$read; + const region = regions[identifier]; + if (!region) { + throw new Error(`Region not found: ${identifier}`); + } + + return await read(region, options); +} diff --git a/packages/pointers/src/index.ts b/packages/pointers/src/index.ts new file mode 100644 index 00000000..d396b964 --- /dev/null +++ b/packages/pointers/src/index.ts @@ -0,0 +1,6 @@ +export { Pointer, isPointer } from "./pointer.js"; +export { dereference, DereferenceOptions } from "./dereference/index.js"; +export { Cursor } from "./cursor.js"; + +export type { Machine } from "./machine.js"; +export { Data } from "./data.js"; diff --git a/packages/pointers/src/machine.ts b/packages/pointers/src/machine.ts new file mode 100644 index 00000000..e38f354f --- /dev/null +++ b/packages/pointers/src/machine.ts @@ -0,0 +1,49 @@ +import type { Data } from "./data.js"; + +export interface Machine { + trace(transactionHash: Data): AsyncIterable; +} + +export namespace Machine { + + export interface State { + get traceIndex(): Promise; + get programCounter(): Promise; + get opcode(): Promise; + + get stack(): State.Stack; + get memory(): State.Bytes; + get storage(): State.Words; + get calldata(): State.Bytes; + get returndata(): State.Bytes; + get transient(): State.Words; + get code(): State.Bytes; + } + + export namespace State { + export interface Slice { + offset: bigint; + length: bigint; + } + + export interface Stack { + get length(): Promise; + + /** read element at position from top of stack */ + peek(options: { + depth: bigint; + slice?: Slice; + }): Promise; + } + + export interface Bytes { + get length(): Promise; + + read(options: { slice: Slice }): Promise; + } + + export interface Words { + read(options: { slot: Data.Word; slice?: Slice }): Promise; + } + } +} diff --git a/packages/pointers/src/pointer.test.ts b/packages/pointers/src/pointer.test.ts new file mode 100644 index 00000000..3a88b458 --- /dev/null +++ b/packages/pointers/src/pointer.test.ts @@ -0,0 +1,184 @@ +import { expect, describe, it } from "@jest/globals"; +import chalk from "chalk"; + +import { describeSchema } from "@ethdebug/format"; + +import { Pointer, isPointer } from "./index.js"; + +expect.extend({ + toSatisfy value is T>( + predicate: P, + received: any + ) { + const pass = predicate(received); + + return { + pass, + message: () => `expected ${ + JSON.stringify(received) + } ${ + pass + ? "not to satisfy" + : "to satisfy" + } the predicate ${predicate.name}` + }; + }, + + toSatisfyAll value is T>( + predicate: P, + values: any[] + ) { + const results = values.map(value => ({ + value, + pass: predicate(value) + })); + + const pass = results.every(result => result.pass); + + return { + pass, + message: () => `expected the predicate ${predicate.name} ${ + pass + ? "not to be satisfied by all" + : "to be satisfied by all" + } of the following values:\n${ + results.map(result => ` ${ + result.pass + ? chalk.green("✓") + : chalk.red("✗") + } ${ + // @ts-ignore + this.utils.printReceived(result.value) + }`).join("\n") + }` + }; + } +}); + +describe("type guards", () => { + const expressionSchema = { + id: "schema:ethdebug/format/pointer/expression" + }; + + const schemaGuards = [ + { + schema: expressionSchema, + guard: Pointer.isExpression + }, + { + schema: expressionSchema, + pointer: "#/$defs/Literal", + guard: Pointer.Expression.isLiteral + }, + { + schema: expressionSchema, + pointer: "#/$defs/Constant", + guard: Pointer.Expression.isConstant + }, + { + schema: expressionSchema, + pointer: "#/$defs/Variable", + guard: Pointer.Expression.isVariable + }, + { + schema: expressionSchema, + pointer: "#/$defs/Arithmetic", + guard: Pointer.Expression.isArithmetic + }, + { + schema: expressionSchema, + pointer: "#/$defs/Lookup", + guard: Pointer.Expression.isLookup + }, + { + schema: expressionSchema, + pointer: "#/$defs/Read", + guard: Pointer.Expression.isRead + }, + { + schema: expressionSchema, + pointer: "#/$defs/Reference", + guard: Pointer.Expression.isReference + }, + { + schema: expressionSchema, + pointer: "#/$defs/Keccak256", + guard: Pointer.Expression.isKeccak256 + }, + { + schema: { + id: "schema:ethdebug/format/pointer/region" + }, + guard: Pointer.isRegion + }, + { + schema: { + id: "schema:ethdebug/format/pointer/region/stack" + }, + guard: Pointer.Region.isStack + }, + { + schema: { + id: "schema:ethdebug/format/pointer/region/memory" + }, + guard: Pointer.Region.isMemory + }, + { + schema: { + id: "schema:ethdebug/format/pointer/region/storage" + }, + guard: Pointer.Region.isStorage + }, + { + schema: { + id: "schema:ethdebug/format/pointer/region/calldata" + }, + guard: Pointer.Region.isCalldata + }, + { + schema: { + id: "schema:ethdebug/format/pointer/region/returndata" + }, + guard: Pointer.Region.isReturndata + }, + { + schema: { + id: "schema:ethdebug/format/pointer/region/transient" + }, + guard: Pointer.Region.isTransient + }, + { + schema: { + id: "schema:ethdebug/format/pointer/region/code" + }, + guard: Pointer.Region.isCode + }, + { + schema: { + id: "schema:ethdebug/format/pointer/collection/group" + }, + guard: Pointer.Collection.isGroup + }, + { + schema: { + id: "schema:ethdebug/format/pointer/collection/list" + }, + guard: Pointer.Collection.isList + }, + { + schema: { + id: "schema:ethdebug/format/pointer" + }, + guard: isPointer + }, + ] as const; + + it.each(schemaGuards)("matches its examples", ({ + guard, + ...describeSchemaOptions + }) => { + const { schema: { examples = [] } } = describeSchema(describeSchemaOptions); + + expect(guard).toSatisfyAll(examples); + }); +}); diff --git a/packages/pointers/src/pointer.ts b/packages/pointers/src/pointer.ts new file mode 100644 index 00000000..8ae3dd66 --- /dev/null +++ b/packages/pointers/src/pointer.ts @@ -0,0 +1,382 @@ +export type Pointer = + | Pointer.Region + | Pointer.Collection; + +export const isPointer = (value: unknown): value is Pointer => + [ + Pointer.isRegion, + Pointer.isCollection + ].some(guard => guard(value)); + +export namespace Pointer { + export type Identifier = string; + export const isIdentifier = (value: unknown): value is Identifier => + typeof value === "string" && /^[a-zA-Z_\\-]+[a-zA-Z0-9$_\\-]*$/.test(value); + + export type Region = + | Region.Stack + | Region.Memory + | Region.Storage + | Region.Calldata + | Region.Returndata + | Region.Transient + | Region.Code; + + export const isRegion = (value: unknown): value is Region => + [ + Region.isStack, + Region.isMemory, + Region.isStorage, + Region.isCalldata, + Region.isReturndata, + Region.isTransient, + Region.isCode + ].some(guard => guard(value)); + + export namespace Region { + export interface Base { + name?: string; + location: string; + } + export const isBase = (value: unknown): value is Base => + !!value && + typeof value === "object" && + (!("name" in value) || typeof value.name === "string") && + "location" in value && + typeof value.location === "string"; + + export type Name = Base["name"]; + + export type Stack = + & Base + & Scheme.Segment + & { location: "stack" }; + export const isStack = (value: unknown): value is Stack => + isBase(value) && Scheme.isSegment(value) && value.location === "stack"; + + export type Memory = + & Base + & Scheme.Slice + & { location: "memory" }; + export const isMemory = (value: unknown): value is Memory => + isBase(value) && Scheme.isSlice(value) && value.location === "memory"; + + export type Storage = + & Base + & Scheme.Segment + & { location: "storage" }; + export const isStorage = (value: unknown): value is Storage => + isBase(value) && Scheme.isSegment(value) && value.location === "storage"; + + export type Calldata = + & Base + & Scheme.Slice + & { location: "calldata" }; + export const isCalldata = (value: unknown): value is Calldata => + isBase(value) && Scheme.isSlice(value) && value.location === "calldata"; + + export type Returndata = + & Base + & Scheme.Slice + & { location: "returndata" }; + export const isReturndata = (value: unknown): value is Returndata => + isBase(value) && Scheme.isSlice(value) && value.location === "returndata"; + + export type Transient = + & Base + & Scheme.Segment + & { location: "transient" }; + export const isTransient = (value: unknown): value is Transient => + isBase(value) && Scheme.isSegment(value) && value.location === "transient"; + + export type Code = + & Base + & Scheme.Slice + & { location: "code" }; + export const isCode = (value: unknown): value is Code => + isBase(value) && Scheme.isSlice(value) && value.location === "code"; + } + + export namespace Scheme { + export interface Segment { + slot: Expression; + offset?: Expression; + length?: Expression; + } + export const isSegment = (value: unknown): value is Segment => + !!value && + typeof value === "object" && + "slot" in value && + isExpression(value.slot) && + (!("offset" in value) || isExpression(value.offset)) && + (!("length" in value) || isExpression(value.length)); + + export interface Slice { + offset: Expression; + length: Expression; + } + + export const isSlice = (value: unknown): value is Slice => + !!value && + typeof value === "object" && + "offset" in value && + isExpression(value.offset) && + "length" in value && + isExpression(value.length); + } + + export type Collection = + | Collection.Group + | Collection.List + | Collection.Conditional + | Collection.Scope; + export const isCollection = (value: unknown): value is Collection => + [ + Collection.isGroup, + Collection.isList, + Collection.isConditional, + Collection.isScope + ].some(guard => guard(value)); + + export namespace Collection { + export interface Group { + group: Pointer[]; + } + export const isGroup = (value: unknown): value is Group => + !!value && + typeof value === "object" && + Object.keys(value).length === 1 && + "group" in value && + value.group instanceof Array && + value.group.length >= 1 && + value.group.every(isPointer); + + export interface List { + list: { + count: Expression; + each: Identifier; + is: Pointer; + } + } + export const isList = (value: unknown): value is List => + !!value && + typeof value === "object" && + Object.keys(value).length === 1 && + "list" in value && + !!value.list && + typeof value.list === "object" && + Object.keys(value.list).length === 3 && + "count" in value.list && + isExpression(value.list.count) && + "each" in value.list && + isIdentifier(value.list.each) && + "is" in value.list && + isPointer(value.list.is); + + export interface Conditional { + if: Expression; + then: Pointer; + else?: Pointer; + } + export const isConditional = (value: unknown): value is Conditional => + !!value && + typeof value === "object" && + "if" in value && + isExpression(value.if) && + "then" in value && + isPointer(value.then) && + (!("else" in value) || isPointer(value.else)); + + export interface Scope { + define: { + [identifier: string]: Expression; + } + in: Pointer; + } + + export const isScope = (value: unknown): value is Scope => + !!value && + typeof value === "object" && + "define" in value && + typeof value.define === "object" && !!value.define && + Object.keys(value.define).every(key => isIdentifier(key)) && + "in" in value && + isPointer(value.in); + } + + export type Expression = + | Expression.Literal + | Expression.Constant + | Expression.Variable + | Expression.Arithmetic + | Expression.Lookup + | Expression.Read + | Expression.Keccak256; + + export const isExpression = (value: unknown): value is Expression => + [ + Expression.isLiteral, + Expression.isConstant, + Expression.isVariable, + Expression.isArithmetic, + Expression.isLookup, + Expression.isRead, + Expression.isKeccak256 + ].some(guard => guard(value)); + + export namespace Expression { + export type Literal = number | `0x${string}`; + export const isLiteral = (value: unknown): value is Literal => + typeof value === "number" || + typeof value === "string" && /^0x[0-9a-fA-F]+$/.test(value); + + export type Constant = + | "$wordsize"; + export const isConstant = (value: unknown): value is Constant => + typeof value === "string" && ["$wordsize"].includes(value); + + export type Variable = string; + export const isVariable = (value: unknown): value is Variable => + isIdentifier(value); + + export type Arithmetic = + | Arithmetic.Sum + | Arithmetic.Difference + | Arithmetic.Product + | Arithmetic.Quotient + | Arithmetic.Remainder; + + export const isArithmetic = (value: unknown): value is Arithmetic => + [ + Arithmetic.isSum, + Arithmetic.isDifference, + Arithmetic.isProduct, + Arithmetic.isQuotient, + Arithmetic.isRemainder + ].some(guard => guard(value)); + + const makeIsOperation = < + O extends string, + T extends { [K in O]: any; } + >( + operation: O, + checkOperands: (operands: unknown) => operands is T[O] + ) => (value: unknown): value is T => + !!value && + typeof value === "object" && + Object.keys(value).length === 1 && + operation in value && + checkOperands(value[operation as keyof typeof value]); + + export type Operands = Expression[]; + export const isOperands = + (value: unknown): value is Expression[] => + value instanceof Array && value.every(isExpression); + + export namespace Arithmetic { + export type Operation = + | keyof Sum + | keyof Difference + | keyof Product + | keyof Quotient + | keyof Remainder; + + export const isTwoOperands = + (value: unknown): value is [Expression, Expression] => + isOperands(value) && value.length === 2; + + export interface Sum { + $sum: Expression[]; + } + export const isSum = + makeIsOperation<"$sum", Sum>("$sum", isOperands); + + export interface Difference { + $difference: [Expression, Expression]; + } + export const isDifference = + makeIsOperation<"$difference", Difference>("$difference", isTwoOperands); + + export interface Product { + $product: Expression[]; + } + export const isProduct = + makeIsOperation<"$product", Product>("$product", isOperands); + + export interface Quotient { + $quotient: [Expression, Expression]; + } + export const isQuotient = + makeIsOperation<"$quotient", Quotient>("$quotient", isTwoOperands); + + export interface Remainder { + $remainder: [Expression, Expression]; + } + export const isRemainder = + makeIsOperation<"$remainder", Remainder>("$remainder", isTwoOperands); + } + + export type Reference = + | Identifier + | "$this"; + export const isReference = (value: unknown): value is Reference => + isIdentifier(value) || value === "$this"; + + export type Lookup = + | Lookup.Offset + | Lookup.Length + | Lookup.Slot; + export const isLookup = (value: unknown): value is Lookup => + [ + Lookup.isOffset, + Lookup.isLength, + Lookup.isSlot + ].some(guard => guard(value)); + + export namespace Lookup { + export type Operation = + | keyof Offset + | keyof Length + | keyof Slot; + + export type ForOperation = + & Lookup + & { [K in O]: any }; + + export const propertyFrom = ( + operation: O + ): "slot" | "offset" | "length" => { + return operation.slice(1) as "slot" | "offset" | "length"; + } + + export interface Offset { + ".offset": Reference; + } + export const isOffset = + makeIsOperation<".offset", Offset>(".offset", isReference); + + export interface Length { + ".length": Reference; + } + export const isLength = + makeIsOperation<".length", Length>(".length", isReference); + + export interface Slot { + ".slot": Reference; + } + export const isSlot = + makeIsOperation<".slot", Slot>(".slot", isReference); + } + + export interface Read { + $read: Reference + } + export const isRead = makeIsOperation<"$read", Read>("$read", isReference); + + export interface Keccak256 { + $keccak256: Expression[]; + } + export const isKeccak256 = + makeIsOperation<"$keccak256", Keccak256>("$keccak256", isOperands); + } +} diff --git a/packages/pointers/src/read.test.ts b/packages/pointers/src/read.test.ts new file mode 100644 index 00000000..9c3e2273 --- /dev/null +++ b/packages/pointers/src/read.test.ts @@ -0,0 +1,235 @@ +import { jest, expect, describe, it, beforeEach } from "@jest/globals"; +import { Machine } from "./machine.js"; +import { Data } from "./data.js"; +import type { Pointer } from "./pointer.js"; +import { read, type ReadOptions } from "./read.js"; +import { Cursor } from "./cursor.js"; + +describe("read", () => { + let options: ReadOptions; + + beforeEach(() => { + const state: Machine.State = { + stack: { + length: 50n, + peek: jest.fn( + async ({ depth, slice }) => + Data.fromBytes(new Uint8Array([0x11, 0x22, 0x33, 0x44])) + ), + }, + memory: { + read: jest.fn( + async ({ slice }) => + Data.fromBytes(new Uint8Array([0x55, 0x66, 0x77, 0x88])) + ), + }, + storage: { + read: jest.fn( + async ({ slot, slice }) => + Data.fromBytes(new Uint8Array([0xaa, 0xbb, 0xcc, 0xdd])) + ), + }, + calldata: { + read: jest.fn( + async ({ slice }) => + Data.fromBytes(new Uint8Array([0x11, 0x22, 0x33, 0x44])) + ), + }, + returndata: { + read: jest.fn( + async ({ slice }) => + Data.fromBytes(new Uint8Array([0x55, 0x66, 0x77, 0x88])) + ), + }, + transient: { + read: jest.fn( + async ({ slot, slice }) => + Data.fromBytes(new Uint8Array([0xaa, 0xbb, 0xcc, 0xdd])) + ), + }, + code: { + read: jest.fn( + async ({ slice }) => + Data.fromBytes(new Uint8Array([0x11, 0x22, 0x33, 0x44])) + ), + }, + } as unknown as Machine.State; + + options = { + state + }; + }); + + it("reads data from stack", async () => { + const region: Cursor.Region = { + location: "stack", + slot: Data.fromNumber(42), + offset: Data.fromNumber(1), + length: Data.fromNumber(2), + }; + + const result = await read(region, options); + + expect(options.state.stack.peek) + .toHaveBeenCalledWith({ depth: 42n, slice: { offset: 1n, length: 2n } }); + expect(result) + .toEqual(Data.fromBytes(new Uint8Array([0x11, 0x22, 0x33, 0x44]))); + }); + + it("reads data from memory", async () => { + const region: Cursor.Region = { + location: "memory", + offset: Data.fromNumber(0), + length: Data.fromNumber(4), + }; + + const result = await read(region, options); + + expect(options.state.memory.read) + .toHaveBeenCalledWith({ slice: { offset: 0n, length: 4n } }); + expect(result) + .toEqual(Data.fromBytes(new Uint8Array([0x55, 0x66, 0x77, 0x88]))); + }); + + it("reads data from storage", async () => { + const region: Cursor.Region = { + location: "storage", + slot: Data.fromNumber(0), + offset: Data.fromNumber(2), + length: Data.fromNumber(2), + }; + + const result = await read(region, options); + + expect(options.state.storage.read) + .toHaveBeenCalledWith({ + slot: Data.fromNumber(0), + slice: { offset: 2n, length: 2n } + }); + + expect(result) + .toEqual(Data.fromBytes(new Uint8Array([0xaa, 0xbb, 0xcc, 0xdd]))); + }); + + it("reads data from calldata", async () => { + const region: Cursor.Region = { + location: "calldata", + offset: Data.fromNumber(0), + length: Data.fromNumber(4), + }; + + const result = await read(region, options); + + expect(options.state.calldata.read) + .toHaveBeenCalledWith({ slice: { offset: 0n, length: 4n } }); + expect(result) + .toEqual(Data.fromBytes(new Uint8Array([0x11, 0x22, 0x33, 0x44]))); + }); + + it("reads data from returndata", async () => { + const region: Cursor.Region = { + location: "returndata", + offset: Data.fromNumber(0), + length: Data.fromNumber(4), + }; + + const result = await read(region, options); + + expect(options.state.returndata.read) + .toHaveBeenCalledWith({ slice: { offset: 0n, length: 4n } }); + expect(result) + .toEqual(Data.fromBytes(new Uint8Array([0x55, 0x66, 0x77, 0x88]))); + }); + + it("reads data from transient", async () => { + const region: Cursor.Region = { + location: "transient", + slot: Data.fromNumber(42), + offset: Data.fromNumber(1), + length: Data.fromNumber(2), + }; + + const result = await read(region, options); + + expect(options.state.transient.read) + .toHaveBeenCalledWith({ + slot: Data.fromNumber(42), + slice: { offset: 1n, length: 2n } + }); + + expect(result) + .toEqual(Data.fromBytes(new Uint8Array([0xaa, 0xbb, 0xcc, 0xdd]))); + }); + + it("reads data from code", async () => { + const region: Cursor.Region = { + location: "code", + offset: Data.fromNumber(0), + length: Data.fromNumber(4), + }; + + const result = await read(region, options); + + expect(options.state.code.read) + .toHaveBeenCalledWith({ + slice: { offset: 0n, length: 4n } + }); + + expect(result) + .toEqual(Data.fromBytes(new Uint8Array([0x11, 0x22, 0x33, 0x44]))); + }); + + it("uses default offset and length values for stack region", async () => { + const region: Cursor.Region = { + location: "stack", + slot: Data.fromNumber(42), + }; + + const result = await read(region, options); + + expect(options.state.stack.peek) + .toHaveBeenCalledWith({ + depth: 42n, + slice: { offset: 0n, length: 32n } + }); + + expect(result) + .toEqual(Data.fromBytes(new Uint8Array([0x11, 0x22, 0x33, 0x44]))); + }); + + it("uses default offset and length values for storage region", async () => { + const region: Cursor.Region = { + location: "storage", + slot: Data.fromHex("0x1f"), + }; + + const result = await read(region, options); + + expect(options.state.storage.read) + .toHaveBeenCalledWith({ + slot: Data.fromHex("0x1f"), + slice: { offset: 0n, length: 32n } + }); + + expect(result) + .toEqual(Data.fromBytes(new Uint8Array([0xaa, 0xbb, 0xcc, 0xdd]))); + }); + + it("uses default offset and length values for transient region", async () => { + const region: Cursor.Region = { + location: "transient", + slot: Data.fromNumber(42) + }; + + const result = await read(region, options); + + expect(options.state.transient.read) + .toHaveBeenCalledWith({ + slot: Data.fromNumber(42), + slice: { offset: 0n, length: 32n } + }); + + expect(result) + .toEqual(Data.fromBytes(new Uint8Array([0xaa, 0xbb, 0xcc, 0xdd]))); + }); +}); diff --git a/packages/pointers/src/read.ts b/packages/pointers/src/read.ts new file mode 100644 index 00000000..8c57d0cf --- /dev/null +++ b/packages/pointers/src/read.ts @@ -0,0 +1,138 @@ +import { Pointer } from "./pointer.js"; +import { Machine } from "./machine.js"; +import { Data } from "./data.js"; +import type { Cursor } from "./cursor.js"; +import { evaluate, type EvaluateOptions } from "./evaluate.js"; + +export interface ReadOptions { + state: Machine.State; +} + +export async function read( + region: Cursor.Region, + options: ReadOptions +): Promise { + const { location } = region; + const { state } = options; + + switch (location) { + case "stack": { + const { + slot, + offset = 0n, + length = 32n + } = withPropertiesAsUints(["slot", "offset", "length"], region); + + return await state.stack.peek({ + depth: slot, + slice: { + offset, + length + } + }); + } + case "memory": { + const { + offset, + length + } = withPropertiesAsUints(["offset", "length"], region); + + return await state.memory.read({ + slice: { + offset: offset, + length: length + } + }); + } + case "storage": { + const { slot } = region; + const { + offset = 0n, + length = 32n + } = withPropertiesAsUints(["offset", "length"], region); + + return await state.storage.read({ + slot, + slice: { + offset, + length + } + }); + } + case "calldata": { + const { + offset, + length + } = withPropertiesAsUints(["offset", "length"], region); + + return await state.calldata.read({ slice: { offset, length } }); + } + case "returndata": { + const { + offset, + length + } = withPropertiesAsUints(["offset", "length"], region); + + return await state.returndata.read({ slice: { offset, length } }); + } + case "transient": { + const { slot } = region; + const { + offset = 0n, + length = 32n + } = withPropertiesAsUints(["offset", "length"], region); + + return await state.transient.read({ + slot, + slice: { + offset, + length + } + }); + } + case "code": { + const { + offset, + length + } = withPropertiesAsUints(["offset", "length"], region); + + return await state.code.read({ slice: { offset, length } }); + } + } +} + +type DataProperties = { + [K in ( + & keyof Cursor.Region + & ("slot" | "offset" | "length") + )]: Cursor.Region[K]; +} + +type PickDataPropertiesAsUints< + R extends Pointer.Region, + U extends keyof DataProperties +> = { + [K in U]: + undefined extends Cursor.Region[K] + ? bigint | undefined + : bigint +}; + +function withPropertiesAsUints< + R extends Pointer.Region, + U extends keyof DataProperties +>( + uintKeys: U[], + region: Cursor.Region +): PickDataPropertiesAsUints { + const result: Partial> = {}; + for (const key of uintKeys) { + const data: Data | undefined = region[key] as Data | undefined; + if (typeof data !== "undefined") { + result[key] = data.asUint(); + } + } + + return result as PickDataPropertiesAsUints; +} + diff --git a/packages/pointers/test/deploy.ts b/packages/pointers/test/deploy.ts new file mode 100644 index 00000000..1c559b24 --- /dev/null +++ b/packages/pointers/test/deploy.ts @@ -0,0 +1,38 @@ +import type { EthereumProvider } from "ganache"; + +import { Data } from "../src/data.js"; + +export interface DeployContractResult { + transactionHash: Data; + contractAddress: Data; +} + +export async function deployContract( + createBytecode: Data, + provider: EthereumProvider +): Promise { + + const [account] = await provider.request({ + method: "eth_accounts", + params: [] + }); + + const transactionHash = Data.fromHex(await provider.request({ + method: "eth_sendTransaction", + params: [{ + from: account, + gas: "0x989680", + data: createBytecode.toHex() + }] + })); + + const contractAddress = Data.fromHex((await provider.request({ + method: "eth_getTransactionReceipt", + params: [transactionHash.toHex()] + })).contractAddress); + + return { + transactionHash, + contractAddress + }; +} diff --git a/packages/pointers/test/examples.ts b/packages/pointers/test/examples.ts new file mode 100644 index 00000000..7a5782f0 --- /dev/null +++ b/packages/pointers/test/examples.ts @@ -0,0 +1,59 @@ +import { type CompileOptions } from "./solc.js"; + +export const examples = { + emptyContract: makeExample({ + path: "EmptyContract.sol", + contractName: "EmptyContract", + content: `contract EmptyContract { +} +`, + }), + + stringStorage: makeExample({ + path: "StringStorage.sol", + contractName: "StringStorage", + content: `contract StringStorage { + string storedString; + bool done; + + event Done(); + + constructor() { + storedString = "hello world"; + storedString = "solidity storage is a fun lesson in endianness"; + + done = true; + } +} +`, + }), +} as const; + +export function makeExample(example: { + path: string; + contractName: string; + content: string; +}): CompileOptions { + const { path, contractName, content: contentWithoutHeader } = example; + + const spdxLicenseIdentifier = "// SPDX-License-Identifier: UNLICENSED"; + const pragma = "pragma solidity ^0.8.25;"; + const header = `${spdxLicenseIdentifier} +${pragma} +`; + + return { + sources: { + [path]: { + content: `${header} +${contentWithoutHeader} +` + } + }, + + target: { + path, + contractName + } + }; +} diff --git a/packages/pointers/test/ganache.ts b/packages/pointers/test/ganache.ts new file mode 100644 index 00000000..258892aa --- /dev/null +++ b/packages/pointers/test/ganache.ts @@ -0,0 +1,185 @@ +import type { EthereumProvider } from "ganache"; + +import { Machine } from "../src/machine.js"; +import { Data } from "../src/data.js"; + +export async function loadGanache() { + const originalWarn = console.warn; + console.warn = (...args: any[]) => { + if ( + args.length > 0 && + typeof args[0] === "string" && + args[0].includes("bigint: Failed to load bindings") + ) { + return; + } + + originalWarn(...args); + }; + + const { default: Ganache } = await import("ganache"); + + console.warn = originalWarn; + return Ganache; +} + +export function machineForProvider(provider: EthereumProvider): Machine { + return { + trace(transactionHash: Data): AsyncIterable { + return { + async *[Symbol.asyncIterator]() { + const structLogs = await requestStructLogs( + `0x${transactionHash.asUint().toString(16)}`, + provider + ); + + let previousOp; + for (const [index, step] of structLogs.entries()) { + const { state } = toMachineState( + step, + { index } + ); + + yield state; + + if (previousOp === "SSTORE") { + debugger; + } + previousOp = step.op; + } + } + }; + } + }; +} + +async function requestStructLogs( + transactionHash: string, + provider: EthereumProvider +) { + const { structLogs } = await provider.request({ + method: "debug_traceTransaction", + params: [transactionHash] + }); + + return structLogs; +} + +type StructLogs = Depromise>; +type StructLog = Dearray; + +// helpers instead of digging through ganache's types +type Depromise

= P extends Promise ? T : P; +type Dearray = A extends Array ? T : A; + +interface ToMachineStateOptions { + index: number; +} + +function toMachineState( + step: StructLog, + options: ToMachineStateOptions +): { + state: Machine.State; + storage: { + [slot: string]: Data + }; +} { + const { index } = options; + + const constantUint = (value: number): Promise => + Promise.resolve(Data.fromNumber(index).asUint()); + + const makeStack = ( + stack: StructLog["stack"] + ): Machine.State.Stack => { + const length = stack.length; + + return { + length: constantUint(length), + + async peek({ + depth, + slice: { + offset = 0n, + length = 32n + } = {} + }) { + const entry = stack.at(-Number(depth)); + const data = Data.Word.fromHex(`0x${entry || ""}`); + + const sliced = new Uint8Array(data).slice( + Number(offset), + Number(offset + length) + ); + + return new Data(sliced); + } + }; + }; + + const makeBytes = ( + words: StructLog["memory" /* | theoretically others */] + ): Machine.State.Bytes => { + const data = Data.fromHex(`0x${words.map(word => word.slice(2)).join("")}`); + + return { + length: constantUint(data.length), + + async read({ slice: { offset, length } }) { + return new Data(data.slice( + Number(offset), + Number(offset + length) + )); + } + } + }; + + const makeWords = ( + slots: StructLog["storage" /* | theoretically others */] + ): Machine.State.Words => { + return { + async read({ + slot: unpaddedSlot, + slice: { + offset = 0n, + length = 32n + } = {} + }) { + const slot = new Data(32); + slot.set(unpaddedSlot, 32 - unpaddedSlot.length); + + const rawHex = slots[slot.toHex().slice(2) as keyof typeof slots]; + + const data = Data.fromHex(`0x${rawHex}`); + + return new Data(data.slice( + Number(offset), + Number(offset + length) + )); + } + }; + }; + + return { + state: { + traceIndex: constantUint(index), + programCounter: constantUint(step.pc), + opcode: Promise.resolve(step.op), + + stack: makeStack(step.stack), + + memory: makeBytes(step.memory), + + storage: makeWords(step.storage), + + calldata: undefined as unknown as Machine.State.Bytes, + returndata: undefined as unknown as Machine.State.Bytes, + code: undefined as unknown as Machine.State.Bytes, + + transient: undefined as unknown as Machine.State.Words, + }, + + storage: {} + }; +} diff --git a/packages/pointers/test/index.ts b/packages/pointers/test/index.ts new file mode 100644 index 00000000..25427b5a --- /dev/null +++ b/packages/pointers/test/index.ts @@ -0,0 +1,4 @@ +export { loadGanache, machineForProvider } from "./ganache.js"; +export { compileCreateBytecode, type CompileOptions } from "./solc.js"; +export { deployContract, type DeployContractResult } from "./deploy.js"; +export { examples, makeExample } from "./examples.js"; diff --git a/packages/pointers/test/run.ts b/packages/pointers/test/run.ts new file mode 100644 index 00000000..d812a6ab --- /dev/null +++ b/packages/pointers/test/run.ts @@ -0,0 +1,117 @@ +import chalk from "chalk"; +import { highlight } from "cli-highlight"; +import { describeSchema } from "@ethdebug/format"; + +import { Data } from "../src/data.js"; +import type { Pointer } from "../src/pointer.js"; +import { dereference } from "../src/index.js"; + +import { loadGanache, machineForProvider } from "./ganache.js"; +import { deployContract } from "./deploy.js"; +import { compileCreateBytecode } from "./solc.js"; +import { examples } from "./examples.js"; + +const { + schema: pointerSchema +} = describeSchema({ + schema: { id: "schema:ethdebug/format/pointer" }, +}) as { schema: { examples: Pointer[] } }; + +const stringStoragePointer: Pointer = + pointerSchema.examples.find( + example => JSON.stringify(example).includes("long-string-length-data") + )!; + +export async function run() { + console.log( + chalk.bold(chalk.cyan( + "demo: run compiled solidity and watch a changing ethdebug/format pointer\n" + )) + ); + + console.group(chalk.bold("ethdebug/format pointer used by demo")); + console.log( + highlight( + describeSchema({ + schema: { id: "schema:ethdebug/format/pointer" }, + pointer: "#/examples/4" + }).yaml, + { language: "yaml" } + ).trim() + ); + console.groupEnd(); + console.log(""); + + console.group(chalk.bold("solidity source code used by demo")); + console.log( + examples.stringStorage.sources["StringStorage.sol"].content.trim() + ); + console.groupEnd(); + console.log(""); + + console.group(chalk.bold("preparing demo")); + + const provider = (await loadGanache()).provider({ + logging: { + quiet: true + } + }); + + const bytecode = await compileCreateBytecode(examples.stringStorage); + console.log("- compiled source code."); + + const { + transactionHash, + contractAddress + } = await deployContract(bytecode, provider); + console.log("- deployed contract."); + + const machine = machineForProvider(provider); + + const trace = machine.trace(transactionHash); + console.log("- requested trace."); + + console.groupEnd(); + console.log(""); + + console.group(chalk.bold("watching trace for changing pointer values")); + + const cursor = await dereference(stringStoragePointer); + let currentStoredString; + for await (const state of trace) { + const { regions, read } = await cursor.view(state); + const stringData = Data.fromHex( + await regions.named("string") + .map(read) + // HACK concatenate via string representation + .map(async data => (await data).toHex().slice(2)) + .reduce(async (accumulator, data) => { + return `${await accumulator}${await data}`; + }, Promise.resolve("0x")) + ); + + const storedString = new TextDecoder().decode(stringData); + + if (storedString !== currentStoredString) { + const pc = Number(await state.programCounter); + console.group(chalk.bold( + pc === 0 ? + "initial storedString" + : "storedString changed" + )); + console.log("pc: %o", pc); + console.log("new value: %o", storedString); + console.groupEnd(); + + currentStoredString = storedString; + } + } + + console.groupEnd(); + console.log(""); + + console.log(chalk.bold("thanks for reading!")); + +} + +await run(); diff --git a/packages/pointers/test/solc.ts b/packages/pointers/test/solc.ts new file mode 100644 index 00000000..5f017fe7 --- /dev/null +++ b/packages/pointers/test/solc.ts @@ -0,0 +1,58 @@ +import * as util from "util"; +import { Data } from "../src/data.js"; +import solc from "solc"; + +export interface CompileOptions { + sources: { + [path: string]: { + content: string + } + }; + + target: { + path: string; + contractName: string; + }; +} + +// just compile and get something that can go into transaction data +export async function compileCreateBytecode({ + sources, + target +}: CompileOptions): Promise { + const input = { + language: "Solidity", + sources, + settings: { + outputSelection: { + "*": { + "*": ["ir", "*"], + "": ["*"] + } + }, + viaIR: true, + optimizer: { + enabled: true + } + } + }; + + const output = JSON.parse( + solc.compile( + JSON.stringify(input), + ) + ); + + const { errors = [] } = output; + if (errors.length > 0) { + throw new Error(util.inspect(errors)); + } + + const { + evm: { + bytecode: createBytecode + } + } = output.contracts[target.path][target.contractName]; + + return Data.fromHex(`0x${createBytecode.object}`); +} diff --git a/packages/pointers/tsconfig.json b/packages/pointers/tsconfig.json new file mode 100644 index 00000000..fb69e9c3 --- /dev/null +++ b/packages/pointers/tsconfig.json @@ -0,0 +1,109 @@ +{ + "compilerOptions": { + /* Visit https://aka.ms/tsconfig to read more about this file */ + + /* Projects */ + // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ + // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ + // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ + // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ + // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ + // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ + + /* Language and Environment */ + "target": "es2020", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ + // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ + // "jsx": "preserve", /* Specify what JSX code is generated. */ + // "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */ + // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ + // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ + // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ + // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ + // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ + // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ + // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ + // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ + + /* Modules */ + "module": "nodenext", /* Specify what module code is generated. */ + "rootDir": "./", /* Specify the root folder within your source files. */ + "moduleResolution": "nodenext", /* Specify how TypeScript looks up a file from a given module specifier. */ + // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ + // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ + // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ + // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ + // "types": [], /* Specify type package names to be included without being referenced in a source file. */ + // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ + // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ + // "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */ + // "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */ + // "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */ + // "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */ + // "resolveJsonModule": true, /* Enable importing .json files. */ + // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */ + // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ + + /* JavaScript Support */ + // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ + // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ + // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ + + /* Emit */ + "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ + "declarationMap": true, /* Create sourcemaps for d.ts files. */ + // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ + // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ + // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ + // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ + "outDir": "./dist/", /* Specify an output folder for all emitted files. */ + // "removeComments": true, /* Disable emitting comments. */ + // "noEmit": true, /* Disable emitting files from a compilation. */ + // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ + // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */ + // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ + // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ + // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ + // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ + // "newLine": "crlf", /* Set the newline character for emitting files. */ + // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ + // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ + // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ + // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ + // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ + // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ + + /* Interop Constraints */ + // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ + // "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */ + // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ + "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ + // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ + "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ + + /* Type Checking */ + "strict": true, /* Enable all strict type-checking options. */ + // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ + // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ + // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ + // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ + // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ + // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ + // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ + // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ + // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ + // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ + // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ + // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ + // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ + // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ + // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ + // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ + // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ + // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ + + /* Completeness */ + // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ + "skipLibCheck": true /* Skip type checking all .d.ts files. */ + } +} diff --git a/packages/pointers/typings.d.ts b/packages/pointers/typings.d.ts new file mode 100644 index 00000000..13e6dcd0 --- /dev/null +++ b/packages/pointers/typings.d.ts @@ -0,0 +1,10 @@ +declare module "@jest/expect" { + interface Matchers { + toSatisfy(received: any): R; + toSatisfyAll(values: readonly any[]): R; + } +} + +declare module "solc" { + function compile(input: string): string; +}; diff --git a/packages/tests/typings.d.ts b/packages/tests/typings.d.ts index 112c82fd..21255513 100644 --- a/packages/tests/typings.d.ts +++ b/packages/tests/typings.d.ts @@ -3,5 +3,8 @@ import type { DescribeSchemaOptions } from "@ethdebug/format"; declare module "@jest/expect" { interface Matchers { toValidate(schemaOptions: DescribeSchemaOptions): R; + + toSatisfy(received: any): R; + toSatisfyAll(values: readonly any[]): R; } } diff --git a/packages/web/docusaurus.config.ts b/packages/web/docusaurus.config.ts index 7ceee45a..57975ed0 100644 --- a/packages/web/docusaurus.config.ts +++ b/packages/web/docusaurus.config.ts @@ -32,7 +32,10 @@ const config: Config = { locales: ['en'], }, - themes: [["docusaurus-json-schema-plugin", {}]], + themes: [ + ["docusaurus-json-schema-plugin", {}], + "@saucelabs/theme-github-codeblock" + ], plugins: [ async function ignoreBuffer(context, options) { @@ -51,7 +54,6 @@ const config: Config = { }; } } - }, // Used to maintain separate spec/ directory, outside the core docs/ diff --git a/packages/web/package.json b/packages/web/package.json index 88e470db..2f77a461 100644 --- a/packages/web/package.json +++ b/packages/web/package.json @@ -26,10 +26,12 @@ "@mdx-js/react": "^3.0.0", "@mischnic/json-sourcemap": "^0.1.1", "@monaco-editor/react": "^4.6.0", + "@saucelabs/theme-github-codeblock": "^0.2.3", "ajv": "^8.12.0", "clsx": "^1.2.1", "docusaurus-json-schema-plugin": "^1.11.0", "prism-react-renderer": "^2.1.0", + "raw-loader": "^4.0.2", "react": "^18.0.0", "react-dom": "^18.0.0", "react-markdown": "^9.0.1", diff --git a/yarn.lock b/yarn.lock index 8b4d0611..2f2e137e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -84,7 +84,7 @@ "@algolia/requester-common" "4.22.0" "@algolia/transporter" "4.22.0" -"@algolia/client-search@>= 4.9.1 < 6", "@algolia/client-search@4.22.0": +"@algolia/client-search@4.22.0": version "4.22.0" resolved "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.22.0.tgz" integrity sha512-bn4qQiIdRPBGCwsNuuqB8rdHhGKKWIij9OqidM1UkQxnSG8yzxHdb7CujM30pvp5EnV7jTqDZRbxacbjYVW20Q== @@ -168,7 +168,7 @@ resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz" integrity sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw== -"@babel/core@^7.0.0", "@babel/core@^7.0.0-0", "@babel/core@^7.0.0-0 || ^8.0.0-0 <8.0.0", "@babel/core@^7.11.6", "@babel/core@^7.12.0", "@babel/core@^7.12.3", "@babel/core@^7.13.0", "@babel/core@^7.19.6", "@babel/core@^7.23.3", "@babel/core@^7.4.0 || ^8.0.0-0 <8.0.0", "@babel/core@^7.8.0", "@babel/core@>=7.0.0-beta.0 <8": +"@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.19.6", "@babel/core@^7.23.3": version "7.23.7" resolved "https://registry.npmjs.org/@babel/core/-/core-7.23.7.tgz" integrity sha512-+UpDgowcmqe36d4NwqvKsyPMlOLNGMsfMmQ5WGCu+siCe3t3dfe9njrzGfdN4qq+bcNUt0+Vw6haRxBOycs4dw== @@ -1212,6 +1212,13 @@ resolved "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz" integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== +"@cspotcode/source-map-support@^0.8.0": + version "0.8.1" + resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" + integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== + dependencies: + "@jridgewell/trace-mapping" "0.3.9" + "@discoveryjs/json-ext@0.5.7": version "0.5.7" resolved "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz" @@ -1232,7 +1239,7 @@ "@docsearch/css" "3.5.2" algoliasearch "^4.19.1" -"@docusaurus/core@^3.0.0", "@docusaurus/core@^3.0.1", "@docusaurus/core@3.1.0": +"@docusaurus/core@3.1.0", "@docusaurus/core@^3.0.1": version "3.1.0" resolved "https://registry.npmjs.org/@docusaurus/core/-/core-3.1.0.tgz" integrity sha512-GWudMGYA9v26ssbAWJNfgeDZk+lrudUTclLPRsmxiknEBk7UMp7Rglonhqbsf3IKHOyHkMU4Fr5jFyg5SBx9jQ== @@ -1357,7 +1364,7 @@ vfile "^6.0.1" webpack "^5.88.1" -"@docusaurus/module-type-aliases@^3.0.1", "@docusaurus/module-type-aliases@3.1.0": +"@docusaurus/module-type-aliases@3.1.0", "@docusaurus/module-type-aliases@^3.0.1": version "3.1.0" resolved "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-3.1.0.tgz" integrity sha512-XUl7Z4PWlKg4l6KF05JQ3iDHQxnPxbQUqTNKvviHyuHdlalOFv6qeDAm7IbzyQPJD5VA6y4dpRbTWSqP9ClwPg== @@ -1506,7 +1513,7 @@ "@docusaurus/theme-search-algolia" "3.1.0" "@docusaurus/types" "3.1.0" -"@docusaurus/react-loadable@5.5.2": +"@docusaurus/react-loadable@5.5.2", "react-loadable@npm:@docusaurus/react-loadable@5.5.2": version "5.5.2" resolved "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-5.5.2.tgz" integrity sha512-A3dYjdBGuy0IGT+wyLIGIKLRE+sAk1iNk0f1HjNDysO7u8lhL4N3VEm+FAubmJbAztn94F7MxBTPmnixbiyFdQ== @@ -1514,7 +1521,7 @@ "@types/react" "*" prop-types "^15.6.2" -"@docusaurus/theme-classic@^3.0.0", "@docusaurus/theme-classic@3.1.0": +"@docusaurus/theme-classic@3.1.0": version "3.1.0" resolved "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-3.1.0.tgz" integrity sha512-/+jMl2Z9O8QQxves5AtHdt91gWsEZFgOV3La/6eyKEd7QLqQUtM5fxEJ40rq9NKYjqCd1HzZ9egIMeJoWwillw== @@ -1601,7 +1608,7 @@ resolved "https://registry.npmjs.org/@docusaurus/tsconfig/-/tsconfig-3.1.0.tgz" integrity sha512-PE6fSuj5gJy5sNC1OO+bYAU1/xZH5YqddGjhrNu3/T7OAUroqkMZfVl13Tz70CjYB8no4OWcraqSkObAeNdIcQ== -"@docusaurus/types@*", "@docusaurus/types@^3.0.1", "@docusaurus/types@3.1.0": +"@docusaurus/types@3.1.0", "@docusaurus/types@^3.0.1": version "3.1.0" resolved "https://registry.npmjs.org/@docusaurus/types/-/types-3.1.0.tgz" integrity sha512-VaczOZf7+re8aFBIWnex1XENomwHdsSTkrdX43zyor7G/FY4OIsP6X28Xc3o0jiY0YdNuvIDyA5TNwOtpgkCVw== @@ -1657,40 +1664,6 @@ url-loader "^4.1.1" webpack "^5.88.1" -"@ethdebug/format-tests@file:/home/rahul/work/open-source/ethereum/ethdebug-format/packages/tests": - version "0.1.0-0" - resolved "file:packages/tests" - -"@ethdebug/format-web@file:/home/rahul/work/open-source/ethereum/ethdebug-format/packages/web": - version "0.1.0-0" - resolved "file:packages/web" - dependencies: - "@docusaurus/core" "^3.0.1" - "@docusaurus/preset-classic" "^3.0.1" - "@ethdebug/format" "^0.1.0-0" - "@fortawesome/fontawesome-svg-core" "^6.5.1" - "@fortawesome/free-brands-svg-icons" "^6.5.1" - "@fortawesome/free-solid-svg-icons" "^6.5.1" - "@fortawesome/react-fontawesome" "^0.2.0" - "@mdx-js/react" "^3.0.0" - "@mischnic/json-sourcemap" "^0.1.1" - "@monaco-editor/react" "^4.6.0" - ajv "^8.12.0" - clsx "^1.2.1" - docusaurus-json-schema-plugin "^1.11.0" - prism-react-renderer "^2.1.0" - react "^18.0.0" - react-dom "^18.0.0" - react-markdown "^9.0.1" - yaml-template "^1.0.0" - -"@ethdebug/format@^0.1.0-0", "@ethdebug/format@file:/home/rahul/work/open-source/ethereum/ethdebug-format/packages/format": - version "0.1.0-0" - resolved "file:packages/format" - dependencies: - json-schema-typed "^8.0.1" - yaml "^2.3.4" - "@fastify/busboy@^2.0.0": version "2.1.0" resolved "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.0.tgz" @@ -1701,7 +1674,7 @@ resolved "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.5.1.tgz" integrity sha512-GkWzv+L6d2bI5f/Vk6ikJ9xtl7dfXtoRu3YGE6nq0p/FFqA1ebMOAWg3XgRyb0I6LYyYkiAo+3/KrwuBp8xG7A== -"@fortawesome/fontawesome-svg-core@^6.5.1", "@fortawesome/fontawesome-svg-core@~1 || ~6": +"@fortawesome/fontawesome-svg-core@^6.5.1": version "6.5.1" resolved "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.5.1.tgz" integrity sha512-MfRCYlQPXoLlpem+egxjfkEuP9UQswTrlCOsknus/NcMoblTH2g0jPrapbcIb04KGA7E2GZxbAccGZfWoYgsrQ== @@ -1987,7 +1960,7 @@ slash "^3.0.0" write-file-atomic "^4.0.2" -"@jest/types@^29.0.0", "@jest/types@^29.6.3": +"@jest/types@^29.6.3": version "29.6.3" resolved "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz" integrity sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw== @@ -2008,6 +1981,11 @@ "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/trace-mapping" "^0.3.9" +"@jridgewell/resolve-uri@^3.0.3": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" + integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== + "@jridgewell/resolve-uri@^3.1.0": version "3.1.1" resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz" @@ -2031,6 +2009,14 @@ resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz" integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== +"@jridgewell/trace-mapping@0.3.9": + version "0.3.9" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" + integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.20", "@jridgewell/trace-mapping@^0.3.9": version "0.3.20" resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz" @@ -2116,9 +2102,13 @@ "@lezer/common@^1.0.0": version "1.2.1" + resolved "https://registry.yarnpkg.com/@lezer/common/-/common-1.2.1.tgz#198b278b7869668e1bebbe687586e12a42731049" + integrity sha512-yemX0ZD2xS/73llMZIK6KplkjIjf2EvAHcinDi/TfJ9hS25G0388+ClHt6/3but0oOxinTcQHJLDXh6w1crzFQ== "@lezer/lr@^1.0.0": - version "1.4.0" + version "1.4.1" + resolved "https://registry.yarnpkg.com/@lezer/lr/-/lr-1.4.1.tgz#fe25f051880a754e820b28148d90aa2a96b8bdd2" + integrity sha512-CHsKq8DMKBf9b3yXPDIU4DbH+ZJd/sJdYOW2llbW/HudP5u0VS6Bfq1hLYfgU7uAYGFIyGGQIsSOXGPEErZiJw== dependencies: "@lezer/common" "^1.0.0" @@ -2160,6 +2150,8 @@ "@mischnic/json-sourcemap@^0.1.1": version "0.1.1" + resolved "https://registry.yarnpkg.com/@mischnic/json-sourcemap/-/json-sourcemap-0.1.1.tgz#0ef9b015a8f575dd9a8720d9a6b4dbc988425906" + integrity sha512-iA7+tyVqfrATAIsIRWQG+a7ZLLD0VaOCKV2Wd/v4mqIU3J9c4jx9p7S0nw1XH3gJCKNBOOwACOPYYSUu9pgT+w== dependencies: "@lezer/common" "^1.0.0" "@lezer/lr" "^1.0.0" @@ -2167,14 +2159,30 @@ "@monaco-editor/loader@^1.4.0": version "1.4.0" + resolved "https://registry.yarnpkg.com/@monaco-editor/loader/-/loader-1.4.0.tgz#f08227057331ec890fa1e903912a5b711a2ad558" + integrity sha512-00ioBig0x642hytVspPl7DbQyaSWRaolYie/UFNjoTdvoKPzo6xrXLhTk9ixgIKcLH5b5vDOjVNiGyY+uDCUlg== dependencies: state-local "^1.0.6" "@monaco-editor/react@^4.6.0": version "4.6.0" + resolved "https://registry.yarnpkg.com/@monaco-editor/react/-/react-4.6.0.tgz#bcc68671e358a21c3814566b865a54b191e24119" + integrity sha512-RFkU9/i7cN2bsq/iTkurMWOEErmYcY6JiQI3Jn+WeR/FGISH8JbHERjpS9oRuSOPvDMJI0Z8nJeKkbOs9sBYQw== dependencies: "@monaco-editor/loader" "^1.4.0" +"@noble/curves@1.4.0", "@noble/curves@~1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.4.0.tgz#f05771ef64da724997f69ee1261b2417a49522d6" + integrity sha512-p+4cb332SFCrReJkCYe8Xzm0OWi4Jji5jVdIZRL/PmacmDkFNw6MrrV+gGpiPxLHbV+zKFRywUWbaseT+tZRXg== + dependencies: + "@noble/hashes" "1.4.0" + +"@noble/hashes@1.4.0", "@noble/hashes@~1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.4.0.tgz#45814aa329f30e4fe0ba49426f49dfccdd066426" + integrity sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg== + "@nodelib/fs.scandir@2.1.5": version "2.1.5" resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" @@ -2183,7 +2191,7 @@ "@nodelib/fs.stat" "2.0.5" run-parallel "^1.1.9" -"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": version "2.0.5" resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== @@ -2248,10 +2256,10 @@ dependencies: which "^4.0.0" -"@npmcli/run-script@^7.0.0": - version "7.0.3" - resolved "https://registry.npmjs.org/@npmcli/run-script/-/run-script-7.0.3.tgz" - integrity sha512-ZMWGLHpzMq3rBGIwPyeaoaleaLMvrBrH8nugHxTi5ACkJZXTxXPtVuEH91ifgtss5hUwJQ2VDnzDBWPmz78rvg== +"@npmcli/run-script@7.0.2": + version "7.0.2" + resolved "https://registry.npmjs.org/@npmcli/run-script/-/run-script-7.0.2.tgz" + integrity sha512-Omu0rpA8WXvcGeY6DDzyRoY1i5DkCBkzyJ+m2u7PD6quzb0TvSqdIPOkTn8ZBOj7LbbcbMfZ3c5skwSu6m8y2w== dependencies: "@npmcli/node-gyp" "^3.0.0" "@npmcli/promise-spawn" "^7.0.0" @@ -2259,10 +2267,10 @@ read-package-json-fast "^3.0.0" which "^4.0.0" -"@npmcli/run-script@7.0.2": - version "7.0.2" - resolved "https://registry.npmjs.org/@npmcli/run-script/-/run-script-7.0.2.tgz" - integrity sha512-Omu0rpA8WXvcGeY6DDzyRoY1i5DkCBkzyJ+m2u7PD6quzb0TvSqdIPOkTn8ZBOj7LbbcbMfZ3c5skwSu6m8y2w== +"@npmcli/run-script@^7.0.0": + version "7.0.3" + resolved "https://registry.npmjs.org/@npmcli/run-script/-/run-script-7.0.3.tgz" + integrity sha512-ZMWGLHpzMq3rBGIwPyeaoaleaLMvrBrH8nugHxTi5ACkJZXTxXPtVuEH91ifgtss5hUwJQ2VDnzDBWPmz78rvg== dependencies: "@npmcli/node-gyp" "^3.0.0" "@npmcli/promise-spawn" "^7.0.0" @@ -2285,7 +2293,7 @@ nx "17.2.8" tslib "^2.3.0" -"@nx/devkit@>=17.1.2 < 18", "@nx/devkit@17.2.8": +"@nx/devkit@17.2.8", "@nx/devkit@>=17.1.2 < 18": version "17.2.8" resolved "https://registry.npmjs.org/@nx/devkit/-/devkit-17.2.8.tgz" integrity sha512-6LtiQihtZwqz4hSrtT5cCG5XMCWppG6/B8c1kNksg97JuomELlWyUyVF+sxmeERkcLYFaKPTZytP0L3dmCFXaw== @@ -2298,6 +2306,36 @@ tmp "~0.2.1" tslib "^2.3.0" +"@nx/nx-darwin-arm64@17.2.8": + version "17.2.8" + resolved "https://registry.yarnpkg.com/@nx/nx-darwin-arm64/-/nx-darwin-arm64-17.2.8.tgz#26645c9548d5e387b43c06fccfa18e2c1f08055e" + integrity sha512-dMb0uxug4hM7tusISAU1TfkDK3ixYmzc1zhHSZwpR7yKJIyKLtUpBTbryt8nyso37AS1yH+dmfh2Fj2WxfBHTg== + +"@nx/nx-darwin-x64@17.2.8": + version "17.2.8" + resolved "https://registry.yarnpkg.com/@nx/nx-darwin-x64/-/nx-darwin-x64-17.2.8.tgz#5143d6d01d24e338cb3d39076fe2af95146cb538" + integrity sha512-0cXzp1tGr7/6lJel102QiLA4NkaLCkQJj6VzwbwuvmuCDxPbpmbz7HC1tUteijKBtOcdXit1/MEoEU007To8Bw== + +"@nx/nx-freebsd-x64@17.2.8": + version "17.2.8" + resolved "https://registry.yarnpkg.com/@nx/nx-freebsd-x64/-/nx-freebsd-x64-17.2.8.tgz#82a018a1855170e0243b8fe7b0032af279c3fb83" + integrity sha512-YFMgx5Qpp2btCgvaniDGdu7Ctj56bfFvbbaHQWmOeBPK1krNDp2mqp8HK6ZKOfEuDJGOYAp7HDtCLvdZKvJxzA== + +"@nx/nx-linux-arm-gnueabihf@17.2.8": + version "17.2.8" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-17.2.8.tgz#18b9c324221ff6a30589f3fc272a843aca57b70f" + integrity sha512-iN2my6MrhLRkVDtdivQHugK8YmR7URo1wU9UDuHQ55z3tEcny7LV3W9NSsY9UYPK/FrxdDfevj0r2hgSSdhnzA== + +"@nx/nx-linux-arm64-gnu@17.2.8": + version "17.2.8" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-17.2.8.tgz#54a08640a2babe78bcf3283565b00eb487db595e" + integrity sha512-Iy8BjoW6mOKrSMiTGujUcNdv+xSM1DALTH6y3iLvNDkGbjGK1Re6QNnJAzqcXyDpv32Q4Fc57PmuexyysZxIGg== + +"@nx/nx-linux-arm64-musl@17.2.8": + version "17.2.8" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-17.2.8.tgz#cd7b673bb9f45fec7aa1b6c880a0d23d658e927f" + integrity sha512-9wkAxWzknjpzdofL1xjtU6qPFF1PHlvKCZI3hgEYJDo4mQiatGI+7Ttko+lx/ZMP6v4+Umjtgq7+qWrApeKamQ== + "@nx/nx-linux-x64-gnu@17.2.8": version "17.2.8" resolved "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-17.2.8.tgz" @@ -2308,12 +2346,22 @@ resolved "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-17.2.8.tgz" integrity sha512-QiakXZ1xBCIptmkGEouLHQbcM4klQkcr+kEaz2PlNwy/sW3gH1b/1c0Ed5J1AN9xgQxWspriAONpScYBRgxdhA== +"@nx/nx-win32-arm64-msvc@17.2.8": + version "17.2.8" + resolved "https://registry.yarnpkg.com/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-17.2.8.tgz#9bdce5b4d1f9cec7ef326eaf43b99e68576398b0" + integrity sha512-XBWUY/F/GU3vKN9CAxeI15gM4kr3GOBqnzFZzoZC4qJt2hKSSUEWsMgeZtsMgeqEClbi4ZyCCkY7YJgU32WUGA== + +"@nx/nx-win32-x64-msvc@17.2.8": + version "17.2.8" + resolved "https://registry.yarnpkg.com/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-17.2.8.tgz#8a86ff250021ad47686b58f1840b348a209b1158" + integrity sha512-HTqDv+JThlLzbcEm/3f+LbS5/wYQWzb5YDXbP1wi7nlCTihNZOLNqGOkEmwlrR5tAdNHPRpHSmkYg4305W0CtA== + "@octokit/auth-token@^3.0.0": version "3.0.4" resolved "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.4.tgz" integrity sha512-TWFX7cZF2LXoCvdmJWY7XVPi74aSY0+FfBZNSXEXFkMpjcqsQwDSYVv5FhRFaI0V1ECnwbz4j59T/G+rXNWaIQ== -"@octokit/core@^4.2.1", "@octokit/core@>=3", "@octokit/core@>=4": +"@octokit/core@^4.2.1": version "4.2.4" resolved "https://registry.npmjs.org/@octokit/core/-/core-4.2.4.tgz" integrity sha512-rYKilwgzQ7/imScn3M9/pFfUf4I1AZEH3KhyJmtPdE2zfaXAn2mFfUy4FbKewzc2We5y/LlKLj36fWJLKC2SIQ== @@ -2455,6 +2503,33 @@ resolved "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.24.tgz" integrity sha512-2LuNTFBIO0m7kKIQvvPHN6UE63VjpmL9rnEEaOOaiSPbZK+zUOYIzBAWcED+3XYzhYsd/0mD57VdxAEqqV52CQ== +"@saucelabs/theme-github-codeblock@^0.2.3": + version "0.2.3" + resolved "https://registry.yarnpkg.com/@saucelabs/theme-github-codeblock/-/theme-github-codeblock-0.2.3.tgz#706a43292f600532271979941b0155db667c2c21" + integrity sha512-GSl3Lr/jOWm4OP3BPX2vXxc8FMSOXj1mJnls6cUqMwlGOfKQ1Ia9pq1O9/ES+5TrZHIzAws/n5FFSn1OkGJw/Q== + +"@scure/base@~1.1.6": + version "1.1.7" + resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.7.tgz#fe973311a5c6267846aa131bc72e96c5d40d2b30" + integrity sha512-PPNYBslrLNNUQ/Yad37MHYsNQtK67EhWb6WtSvNLLPo7SdVZgkUjD6Dg+5On7zNwmskf8OX7I7Nx5oN+MIWE0g== + +"@scure/bip32@1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.4.0.tgz#4e1f1e196abedcef395b33b9674a042524e20d67" + integrity sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg== + dependencies: + "@noble/curves" "~1.4.0" + "@noble/hashes" "~1.4.0" + "@scure/base" "~1.1.6" + +"@scure/bip39@1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.3.0.tgz#0f258c16823ddd00739461ac31398b4e7d6a18c3" + integrity sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ== + dependencies: + "@noble/hashes" "~1.4.0" + "@scure/base" "~1.1.6" + "@sideway/address@^4.1.3": version "4.1.4" resolved "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz" @@ -2672,7 +2747,7 @@ "@svgr/babel-plugin-transform-react-native-svg" "^6.5.1" "@svgr/babel-plugin-transform-svg-component" "^6.5.1" -"@svgr/core@*", "@svgr/core@^6.0.0", "@svgr/core@^6.5.1": +"@svgr/core@^6.5.1": version "6.5.1" resolved "https://registry.npmjs.org/@svgr/core/-/core-6.5.1.tgz" integrity sha512-/xdLSWxK5QkqG524ONSjvg3V/FkNyCv538OIBdQqPNaAta3AsXj/Bd2FbvR87yMbXO2hFSWiAe/Q6IkVPDw+mw== @@ -2736,11 +2811,48 @@ resolved "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz" integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== +"@trufflesuite/bigint-buffer@1.1.10": + version "1.1.10" + resolved "https://registry.yarnpkg.com/@trufflesuite/bigint-buffer/-/bigint-buffer-1.1.10.tgz#a1d9ca22d3cad1a138b78baaf15543637a3e1692" + integrity sha512-pYIQC5EcMmID74t26GCC67946mgTJFiLXOT/BYozgrd4UEY2JHEGLhWi9cMiQCt5BSqFEvKkCHNnoj82SRjiEw== + dependencies: + node-gyp-build "4.4.0" + +"@trufflesuite/uws-js-unofficial@20.30.0-unofficial.0": + version "20.30.0-unofficial.0" + resolved "https://registry.yarnpkg.com/@trufflesuite/uws-js-unofficial/-/uws-js-unofficial-20.30.0-unofficial.0.tgz#2fbc2f8ef7e82fbeea6abaf7e8a9d42a02b479d3" + integrity sha512-r5X0aOQcuT6pLwTRLD+mPnAM/nlKtvIK4Z+My++A8tTOR0qTjNRx8UB8jzRj3D+p9PMAp5LnpCUUGmz7/TppwA== + dependencies: + ws "8.13.0" + optionalDependencies: + bufferutil "4.0.7" + utf-8-validate "6.0.3" + "@trysound/sax@0.2.0": version "0.2.0" resolved "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz" integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA== +"@tsconfig/node10@^1.0.7": + version "1.0.11" + resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.11.tgz#6ee46400685f130e278128c7b38b7e031ff5b2f2" + integrity sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw== + +"@tsconfig/node12@^1.0.7": + version "1.0.11" + resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" + integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== + +"@tsconfig/node14@^1.0.0": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" + integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== + +"@tsconfig/node16@^1.0.2": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" + integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== + "@tufjs/canonical-json@1.0.0": version "1.0.0" resolved "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-1.0.0.tgz" @@ -2807,6 +2919,13 @@ dependencies: "@babel/types" "^7.20.7" +"@types/bn.js@^5.1.0": + version "5.1.5" + resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-5.1.5.tgz#2e0dacdcce2c0f16b905d20ff87aedbc6f7b4bf0" + integrity sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A== + dependencies: + "@types/node" "*" + "@types/body-parser@*": version "1.19.5" resolved "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz" @@ -2962,6 +3081,11 @@ resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz" integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== +"@types/lru-cache@5.1.1": + version "5.1.1" + resolved "https://registry.yarnpkg.com/@types/lru-cache/-/lru-cache-5.1.1.tgz#c48c2e27b65d2a153b19bfc1a317e30872e01eef" + integrity sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw== + "@types/mdast@^4.0.0", "@types/mdast@^4.0.2": version "4.0.3" resolved "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz" @@ -3074,7 +3198,7 @@ "@types/history" "^4.7.11" "@types/react" "*" -"@types/react@*", "@types/react@>= 16.8.0 < 19.0.0", "@types/react@>=16", "@types/react@>=16 <= 18", "@types/react@>=18": +"@types/react@*": version "18.2.47" resolved "https://registry.npmjs.org/@types/react/-/react-18.2.47.tgz" integrity sha512-xquNkkOirwyCgoClNk85BjP+aqnIS+ckAJ8i37gAbDs14jfW/J23f2GItAf33oiUPQnqNMALiFeoM9Y5mbjpVQ== @@ -3100,6 +3224,11 @@ resolved "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz" integrity sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A== +"@types/seedrandom@3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@types/seedrandom/-/seedrandom-3.0.1.tgz#1254750a4fec4aff2ebec088ccd0bb02e91fedb4" + integrity sha512-giB9gzDeiCeloIXDgzFBCgjj1k4WxcDrZtGl6h1IqmUPlxF+Nx8Ve+96QCyDZ/HseB/uvDsKbpib9hU5cU53pw== + "@types/send@*": version "0.17.4" resolved "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz" @@ -3175,7 +3304,7 @@ resolved "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz" integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== -"@webassemblyjs/ast@^1.11.5", "@webassemblyjs/ast@1.11.6": +"@webassemblyjs/ast@1.11.6", "@webassemblyjs/ast@^1.11.5": version "1.11.6" resolved "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz" integrity sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q== @@ -3276,7 +3405,7 @@ "@webassemblyjs/wasm-gen" "1.11.6" "@webassemblyjs/wasm-parser" "1.11.6" -"@webassemblyjs/wasm-parser@^1.11.5", "@webassemblyjs/wasm-parser@1.11.6": +"@webassemblyjs/wasm-parser@1.11.6", "@webassemblyjs/wasm-parser@^1.11.5": version "1.11.6" resolved "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz" integrity sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ== @@ -3326,16 +3455,49 @@ dependencies: argparse "^2.0.1" -abbrev@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz" - integrity sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ== +JSONStream@^1.3.5: + version "1.3.5" + resolved "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz" + integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== + dependencies: + jsonparse "^1.2.0" + through ">=2.2.7 <3" abbrev@1: version "1.1.1" resolved "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== +abbrev@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz" + integrity sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ== + +abstract-level@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/abstract-level/-/abstract-level-1.0.3.tgz#78a67d3d84da55ee15201486ab44c09560070741" + integrity sha512-t6jv+xHy+VYwc4xqZMn2Pa9DjcdzvzZmQGRjTFc8spIbRGHgBrEKbPq+rYXc7CCo0lxgYvSgKVg9qZAhpVQSjA== + dependencies: + buffer "^6.0.3" + catering "^2.1.0" + is-buffer "^2.0.5" + level-supports "^4.0.0" + level-transcoder "^1.0.1" + module-error "^1.0.1" + queue-microtask "^1.2.3" + +abstract-leveldown@7.2.0, abstract-leveldown@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz#08d19d4e26fb5be426f7a57004851b39e1795a2e" + integrity sha512-DnhQwcFEaYsvYDnACLZhMmCWd3rkOeEvglpa4q5i/5Jlm3UIsWaxVzuXvDLFCSCWRO3yy2/+V/G7FusFgejnfQ== + dependencies: + buffer "^6.0.3" + catering "^2.0.0" + is-buffer "^2.0.5" + level-concat-iterator "^3.0.0" + level-supports "^2.0.1" + queue-microtask "^1.2.3" + accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8: version "1.3.8" resolved "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz" @@ -3359,11 +3521,23 @@ acorn-walk@^8.0.0: resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.1.tgz" integrity sha512-TgUZgYvqZprrl7YldZNoa9OciCAyZR+Ejm9eXzKCmjsF5IKp/wgQ7Z/ZpjpGTIUPwrHQIcYeI8qDh4PsEwxMbw== -"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", acorn@^8, acorn@^8.0.0, acorn@^8.0.4, acorn@^8.7.1, acorn@^8.8.2: +acorn-walk@^8.1.1: + version "8.3.3" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.3.tgz#9caeac29eefaa0c41e3d4c65137de4d6f34df43e" + integrity sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw== + dependencies: + acorn "^8.11.0" + +acorn@^8.0.0, acorn@^8.0.4, acorn@^8.7.1, acorn@^8.8.2: version "8.11.3" resolved "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz" integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== +acorn@^8.11.0, acorn@^8.4.1: + version "8.12.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.12.0.tgz#1627bfa2e058148036133b8d9b51a700663c294c" + integrity sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw== + add-stream@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz" @@ -3374,7 +3548,7 @@ address@^1.0.1, address@^1.1.2: resolved "https://registry.npmjs.org/address/-/address-1.2.2.tgz" integrity sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA== -agent-base@^6.0.2: +agent-base@6, agent-base@^6.0.2: version "6.0.2" resolved "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz" integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== @@ -3388,13 +3562,6 @@ agent-base@^7.0.2, agent-base@^7.1.0: dependencies: debug "^4.3.4" -agent-base@6: - version "6.0.2" - resolved "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz" - integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== - dependencies: - debug "4" - agentkeepalive@^4.2.1: version "4.5.0" resolved "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz" @@ -3417,12 +3584,7 @@ ajv-formats@^2.1.1: dependencies: ajv "^8.0.0" -ajv-keywords@^3.4.1: - version "3.5.2" - resolved "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz" - integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== - -ajv-keywords@^3.5.2: +ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: version "3.5.2" resolved "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz" integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== @@ -3434,7 +3596,7 @@ ajv-keywords@^5.1.0: dependencies: fast-deep-equal "^3.1.3" -ajv@^6.12.2, ajv@^6.12.5, ajv@^6.9.1: +ajv@^6.12.2, ajv@^6.12.5: version "6.12.6" resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -3444,7 +3606,7 @@ ajv@^6.12.2, ajv@^6.12.5, ajv@^6.9.1: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^8.0.0, ajv@^8.12.0, ajv@^8.8.2, ajv@^8.9.0, ajv@>=8: +ajv@^8.0.0, ajv@^8.12.0, ajv@^8.9.0: version "8.13.0" resolved "https://registry.npmjs.org/ajv/-/ajv-8.13.0.tgz" integrity sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA== @@ -3461,7 +3623,7 @@ algoliasearch-helper@^3.13.3: dependencies: "@algolia/events" "^4.0.1" -algoliasearch@^4.18.0, algoliasearch@^4.19.1, "algoliasearch@>= 3.1 < 6", "algoliasearch@>= 4.9.1 < 6": +algoliasearch@^4.18.0, algoliasearch@^4.19.1: version "4.22.0" resolved "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.22.0.tgz" integrity sha512-gfceltjkwh7PxXwtkS8KVvdfK+TSNQAWUeNSxf4dA29qW5tf2EGwa8jkJujlT9jLm17cixMVoGNc+GJFO1Mxhg== @@ -3565,6 +3727,11 @@ are-we-there-yet@^3.0.0: delegates "^1.0.0" readable-stream "^3.6.0" +arg@^4.1.0: + version "4.1.3" + resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== + arg@^5.0.0: version "5.0.2" resolved "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz" @@ -3617,6 +3784,20 @@ astring@^1.8.0: resolved "https://registry.npmjs.org/astring/-/astring-1.8.6.tgz" integrity sha512-ISvCdHdlTDlH5IpxQJIex7BWBywFWgjJSVdwst+/iQCoEYnyOaQ95+X1JGshuBjGp6nxKUy1jMgE3zPqN7fQdg== +async-eventemitter@0.2.4: + version "0.2.4" + resolved "https://registry.yarnpkg.com/async-eventemitter/-/async-eventemitter-0.2.4.tgz#f5e7c8ca7d3e46aab9ec40a292baf686a0bafaca" + integrity sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw== + dependencies: + async "^2.4.0" + +async@^2.4.0: + version "2.6.4" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221" + integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== + dependencies: + lodash "^4.17.14" + async@^3.2.3: version "3.2.5" resolved "https://registry.npmjs.org/async/-/async-3.2.5.tgz" @@ -3653,7 +3834,7 @@ axios@^1.5.1: form-data "^4.0.0" proxy-from-env "^1.1.0" -babel-jest@^29.0.0, babel-jest@^29.7.0: +babel-jest@^29.7.0: version "29.7.0" resolved "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz" integrity sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg== @@ -3796,6 +3977,11 @@ bl@^4.0.3, bl@^4.1.0: inherits "^2.0.4" readable-stream "^3.4.0" +bn.js@^4.11.9: + version "4.12.0" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" + integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== + body-parser@1.20.1: version "1.20.1" resolved "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz" @@ -3877,7 +4063,12 @@ braces@^3.0.2, braces@~3.0.2: dependencies: fill-range "^7.0.1" -browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.18.1, browserslist@^4.21.10, browserslist@^4.21.4, browserslist@^4.22.2, "browserslist@>= 4.21.0": +brorand@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== + +browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.18.1, browserslist@^4.21.10, browserslist@^4.21.4, browserslist@^4.22.2: version "4.22.2" resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz" integrity sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A== @@ -3914,6 +4105,28 @@ buffer@^5.5.0: base64-js "^1.3.1" ieee754 "^1.1.13" +buffer@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" + integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.2.1" + +bufferutil@4.0.5: + version "4.0.5" + resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.5.tgz#da9ea8166911cc276bf677b8aed2d02d31f59028" + integrity sha512-HTm14iMQKK2FjFLRTM5lAVcyaUzOnqbPtesFIvREgXpJHdQm8bWS+GkQgIkfaBYRHuCnea7w8UVNfwiAQhlr9A== + dependencies: + node-gyp-build "^4.3.0" + +bufferutil@4.0.7: + version "4.0.7" + resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.7.tgz#60c0d19ba2c992dd8273d3f73772ffc894c153ad" + integrity sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw== + dependencies: + node-gyp-build "^4.3.0" + builtins@^1.0.3: version "1.0.3" resolved "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz" @@ -4056,11 +4269,24 @@ caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001538, caniuse-lite@^1.0.30001565: resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001574.tgz" integrity sha512-BtYEK4r/iHt/txm81KBudCUcTy7t+s9emrIaHqjYurQ10x71zJ5VQ9x1dYPcz/b+pKSp4y/v1xSI67A+LzpNyg== +catering@^2.0.0, catering@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/catering/-/catering-2.1.1.tgz#66acba06ed5ee28d5286133982a927de9a04b510" + integrity sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w== + ccount@^2.0.0: version "2.0.1" resolved "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz" integrity sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg== +chalk@4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz" + integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + chalk@^2.4.2: version "2.4.2" resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" @@ -4078,19 +4304,11 @@ chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.1, chalk@^4.1.2: ansi-styles "^4.1.0" supports-color "^7.1.0" -chalk@^5.0.1, chalk@^5.2.0: +chalk@^5.0.1, chalk@^5.2.0, chalk@^5.3.0: version "5.3.0" - resolved "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.3.0.tgz#67c20a7ebef70e7f3970a01f90fa210cb6860385" integrity sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w== -chalk@4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz" - integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - char-regex@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz" @@ -4198,7 +4416,7 @@ cli-boxes@^3.0.0: resolved "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz" integrity sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g== -cli-cursor@^3.1.0, cli-cursor@3.1.0: +cli-cursor@3.1.0, cli-cursor@^3.1.0: version "3.1.0" resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz" integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== @@ -4217,16 +4435,16 @@ cli-highlight@^2.1.11: parse5-htmlparser2-tree-adapter "^6.0.0" yargs "^16.0.0" -cli-spinners@^2.5.0: - version "2.9.2" - resolved "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz" - integrity sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg== - cli-spinners@2.6.1: version "2.6.1" resolved "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz" integrity sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g== +cli-spinners@^2.5.0: + version "2.9.2" + resolved "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz" + integrity sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg== + cli-table3@^0.6.3: version "0.6.3" resolved "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz" @@ -4259,7 +4477,7 @@ cliui@^8.0.1: strip-ansi "^6.0.1" wrap-ansi "^7.0.0" -clone-deep@^4.0.1, clone-deep@4.0.1: +clone-deep@4.0.1, clone-deep@^4.0.1: version "4.0.1" resolved "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz" integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== @@ -4317,16 +4535,16 @@ color-convert@^2.0.1: dependencies: color-name "~1.1.4" -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - color-name@1.1.3: version "1.1.3" resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + color-support@^1.1.3: version "1.1.3" resolved "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz" @@ -4367,6 +4585,11 @@ comma-separated-tokens@^2.0.0: resolved "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz" integrity sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg== +command-exists@^1.2.8: + version "1.2.9" + resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.9.tgz#c50725af3808c8ab0260fd60b01fbfa25b954f69" + integrity sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w== + commander@^10.0.0: version "10.0.1" resolved "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz" @@ -4387,7 +4610,7 @@ commander@^7.2.0: resolved "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz" integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== -commander@^8.3.0: +commander@^8.1.0, commander@^8.3.0: version "8.3.0" resolved "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz" integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== @@ -4561,8 +4784,8 @@ conventional-commits-parser@^4.0.0: resolved "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-4.0.0.tgz" integrity sha512-WRv5j1FsVM5FISJkoYMR6tPk07fkKT0UodruX4je86V4owk451yjXAKzKAPOs9l7y59E2viHUS9eQ+dfUA9NSg== dependencies: - is-text-path "^1.0.1" JSONStream "^1.3.5" + is-text-path "^1.0.1" meow "^8.1.2" split2 "^3.2.2" @@ -4678,6 +4901,11 @@ create-jest@^29.7.0: jest-util "^29.7.0" prompts "^2.0.1" +create-require@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" + integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== + cross-spawn@^7.0.0, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" @@ -4860,27 +5088,20 @@ debounce@^1.2.1: resolved "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz" integrity sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug== -debug@^2.6.0: +debug@2.6.9, debug@^2.6.0: version "2.6.9" resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" -debug@^4, debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.3, debug@^4.3.4, debug@4: +debug@4, debug@^4, debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.3, debug@^4.3.4: version "4.3.4" resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: ms "2.1.2" -debug@2.6.9: - version "2.6.9" - resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - decamelize-keys@^1.1.0: version "1.1.1" resolved "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz" @@ -4908,16 +5129,16 @@ decompress-response@^6.0.0: dependencies: mimic-response "^3.1.0" -dedent@^1.0.0: - version "1.5.1" - resolved "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz" - integrity sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg== - dedent@0.7.0: version "0.7.0" resolved "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz" integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== +dedent@^1.0.0: + version "1.5.1" + resolved "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz" + integrity sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg== + deep-extend@^0.6.0: version "0.6.0" resolved "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz" @@ -4994,16 +5215,16 @@ delegates@^1.0.0: resolved "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz" integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== -depd@~1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz" - integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== - depd@2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz" integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== +depd@~1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz" + integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== + dependency-graph@~0.11.0: version "0.11.0" resolved "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz" @@ -5067,6 +5288,11 @@ diff-sequences@^29.6.3: resolved "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz" integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q== +diff@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + dir-glob@^3.0.1: version "3.0.1" resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" @@ -5135,16 +5361,7 @@ domhandler@^5.0.2, domhandler@^5.0.3: dependencies: domelementtype "^2.3.0" -domutils@^2.5.2: - version "2.8.0" - resolved "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz" - integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== - dependencies: - dom-serializer "^1.0.1" - domelementtype "^2.2.0" - domhandler "^4.2.0" - -domutils@^2.8.0: +domutils@^2.5.2, domutils@^2.8.0: version "2.8.0" resolved "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz" integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== @@ -5221,6 +5438,24 @@ electron-to-chromium@^1.4.601: resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.623.tgz" integrity sha512-lKoz10iCYlP1WtRYdh5MvocQPWVRoI7ysp6qf18bmeBgR8abE6+I2CsfyNKztRDZvhdWc+krKT6wS7Neg8sw3A== +elliptic@^6.5.4: + version "6.5.5" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.5.tgz#c715e09f78b6923977610d4c2346d6ce22e6dded" + integrity sha512-7EjbcmUm17NQFu4Pmgmq2olYMj8nwMnpcddByChSUjArp8F5DQWcIcpriwO4ZToLNAJig0yiyjswfyGNje/ixw== + dependencies: + bn.js "^4.11.9" + brorand "^1.1.0" + hash.js "^1.0.0" + hmac-drbg "^1.0.1" + inherits "^2.0.4" + minimalistic-assert "^1.0.1" + minimalistic-crypto-utils "^1.0.1" + +emittery@0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.10.0.tgz#bb373c660a9d421bb44706ec4967ed50c02a8026" + integrity sha512-AGvFfs+d0JKCJQ4o01ASQLGPmSCxgfU9RFXvzPvZdjKK8oscynksuJhWrSTSw7j7Ep/sZct5b5ZhYCi8S/t0HQ== + emittery@^0.13.1: version "0.13.1" resolved "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz" @@ -5256,7 +5491,7 @@ encodeurl@~1.0.2: resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz" integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== -encoding@^0.1.0, encoding@^0.1.13: +encoding@^0.1.13: version "0.1.13" resolved "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz" integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== @@ -5456,6 +5691,16 @@ etag@~1.8.1: resolved "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz" integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== +ethereum-cryptography@^2.1.3: + version "2.2.0" + resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-2.2.0.tgz#06e2d9c0d89f98ffc6a83818f55bf85afecd50dc" + integrity sha512-hsm9JhfytIf8QME/3B7j4bc8V+VdTU+Vas1aJlvIS96ffoNAosudXvGoEvWmc7QZYdkC8mrMJz9r0fcbw7GyCA== + dependencies: + "@noble/curves" "1.4.0" + "@noble/hashes" "1.4.0" + "@scure/bip32" "1.4.0" + "@scure/bip39" "1.3.0" + eval@^0.1.8: version "0.1.8" resolved "https://registry.npmjs.org/eval/-/eval-0.1.8.tgz" @@ -5474,10 +5719,10 @@ events@^3.2.0: resolved "https://registry.npmjs.org/events/-/events-3.3.0.tgz" integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== -execa@^5.0.0: - version "5.1.1" - resolved "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz" - integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== +execa@5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz" + integrity sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ== dependencies: cross-spawn "^7.0.3" get-stream "^6.0.0" @@ -5489,10 +5734,10 @@ execa@^5.0.0: signal-exit "^3.0.3" strip-final-newline "^2.0.0" -execa@5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz" - integrity sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ== +execa@^5.0.0: + version "5.1.1" + resolved "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== dependencies: cross-spawn "^7.0.3" get-stream "^6.0.0" @@ -5599,7 +5844,7 @@ fast-glob@^3.2.11, fast-glob@^3.2.9, fast-glob@^3.3.0: merge2 "^1.3.0" micromatch "^4.0.4" -fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0, fast-json-stable-stringify@2.x: +fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== @@ -5656,14 +5901,14 @@ feed@^4.2.2: dependencies: xml-js "^1.6.11" -figures@^3.0.0, figures@3.2.0: +figures@3.2.0, figures@^3.0.0: version "3.2.0" resolved "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz" integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== dependencies: escape-string-regexp "^1.0.5" -file-loader@*, file-loader@^6.2.0: +file-loader@^6.2.0: version "6.2.0" resolved "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz" integrity sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw== @@ -5759,6 +6004,11 @@ follow-redirects@^1.0.0, follow-redirects@^1.15.4: resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.4.tgz" integrity sha512-Cr4D/5wlrb0z9dgERpUL3LrmPKVDsETIJhaCMeDfuFYcqa5bldGV6wBsAN6X/vxlXQtFBMrXdXxdL8CbDTGniw== +follow-redirects@^1.12.1: + version "1.15.6" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.6.tgz#7f815c0cda4249c74ff09e95ef97c23b5fd0399b" + integrity sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA== + foreground-child@^3.1.0: version "3.1.1" resolved "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz" @@ -5868,11 +6118,37 @@ fs.realpath@^1.0.0: resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== +fsevents@^2.3.2, fsevents@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== + function-bind@^1.1.2: version "1.1.2" resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz" integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== +ganache@7.9.x: + version "7.9.2" + resolved "https://registry.yarnpkg.com/ganache/-/ganache-7.9.2.tgz#77f506ad2735dd9109696ffa1834a9dd2f806449" + integrity sha512-7gsVVDpO9AhrFyDMWWl7SpMsPpqGcnAzjxz3k32LheIPNd64p2XsY9GYRdhWmKuryb60W1iaWPZWDkFKlbRWHA== + dependencies: + "@trufflesuite/bigint-buffer" "1.1.10" + "@trufflesuite/uws-js-unofficial" "20.30.0-unofficial.0" + "@types/bn.js" "^5.1.0" + "@types/lru-cache" "5.1.1" + "@types/seedrandom" "3.0.1" + abstract-level "1.0.3" + abstract-leveldown "7.2.0" + async-eventemitter "0.2.4" + emittery "0.10.0" + keccak "3.0.2" + leveldown "6.1.0" + secp256k1 "4.0.3" + optionalDependencies: + bufferutil "4.0.5" + utf-8-validate "5.0.7" + gauge@^4.0.3: version "4.0.4" resolved "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz" @@ -5932,16 +6208,16 @@ get-port@5.1.1: resolved "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz" integrity sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ== -get-stream@^6.0.0, get-stream@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz" - integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== - get-stream@6.0.0: version "6.0.0" resolved "https://registry.npmjs.org/get-stream/-/get-stream-6.0.0.tgz" integrity sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg== +get-stream@^6.0.0, get-stream@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + git-raw-commits@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-3.0.0.tgz" @@ -5994,7 +6270,7 @@ github-slugger@^1.5.0: resolved "https://registry.npmjs.org/github-slugger/-/github-slugger-1.5.0.tgz" integrity sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw== -glob-parent@^5.1.2, glob-parent@~5.1.2, glob-parent@5.1.2: +glob-parent@5.1.2, glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== @@ -6013,18 +6289,19 @@ glob-to-regexp@^0.4.1: resolved "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz" integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== -glob@^10.2.2: - version "10.3.10" - resolved "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz" - integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g== +glob@7.1.4: + version "7.1.4" + resolved "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz" + integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== dependencies: - foreground-child "^3.1.0" - jackspeak "^2.3.5" - minimatch "^9.0.1" - minipass "^5.0.0 || ^6.0.2 || ^7.0.0" - path-scurry "^1.10.1" + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" -glob@^10.3.10: +glob@^10.2.2, glob@^10.3.10: version "10.3.10" resolved "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz" integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g== @@ -6068,18 +6345,6 @@ glob@^9.2.0: minipass "^4.2.4" path-scurry "^1.6.1" -glob@7.1.4: - version "7.1.4" - resolved "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz" - integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - global-dirs@^3.0.0: version "3.0.1" resolved "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz" @@ -6108,7 +6373,7 @@ globals@^11.1.0: resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== -globby@^11.0.1, globby@^11.0.4, globby@^11.1.0, globby@11.1.0: +globby@11.1.0, globby@^11.0.1, globby@^11.0.4, globby@^11.1.0: version "11.1.0" resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz" integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== @@ -6155,16 +6420,16 @@ got@^12.1.0: p-cancelable "^3.0.0" responselike "^3.0.0" -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9, graceful-fs@4.2.11: - version "4.2.11" - resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz" - integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== - graceful-fs@4.2.10: version "4.2.10" resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz" integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== +graceful-fs@4.2.11, graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: + version "4.2.11" + resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + gray-matter@^4.0.3: version "4.0.3" resolved "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz" @@ -6231,7 +6496,7 @@ has-symbols@^1.0.3: resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== -has-unicode@^2.0.1, has-unicode@2.0.1: +has-unicode@2.0.1, has-unicode@^2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz" integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== @@ -6241,6 +6506,14 @@ has-yarn@^3.0.0: resolved "https://registry.npmjs.org/has-yarn/-/has-yarn-3.0.0.tgz" integrity sha512-IrsVwUHhEULx3R8f/aA8AHuEzAorplsab/v8HBzEiIukwq5i/EC+xmOW+HfP1OaDP+2JkgT1yILHN2O3UFIbcA== +hash.js@^1.0.0, hash.js@^1.0.3: + version "1.1.7" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" + integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.1" + hasown@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz" @@ -6384,6 +6657,15 @@ history@^4.9.0: tiny-warning "^1.0.0" value-equal "^1.0.1" +hmac-drbg@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + integrity sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg== + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + hoist-non-react-statics@^3.1.0: version "3.3.2" resolved "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz" @@ -6526,16 +6808,6 @@ http-deceiver@^1.2.7: resolved "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz" integrity sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw== -http-errors@~1.6.2: - version "1.6.3" - resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz" - integrity sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A== - dependencies: - depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.0" - statuses ">= 1.4.0 < 2" - http-errors@2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz" @@ -6547,6 +6819,16 @@ http-errors@2.0.0: statuses "2.0.1" toidentifier "1.0.1" +http-errors@~1.6.2: + version "1.6.3" + resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz" + integrity sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A== + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" + http-parser-js@>=0.5.1: version "0.5.8" resolved "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz" @@ -6625,7 +6907,7 @@ humanize-ms@^1.2.1: dependencies: ms "^2.0.0" -iconv-lite@^0.4.24, iconv-lite@0.4.24: +iconv-lite@0.4.24, iconv-lite@^0.4.24: version "0.4.24" resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== @@ -6644,7 +6926,7 @@ icss-utils@^5.0.0, icss-utils@^5.1.0: resolved "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz" integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== -ieee754@^1.1.13: +ieee754@^1.1.13, ieee754@^1.2.1: version "1.2.1" resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== @@ -6698,7 +6980,7 @@ import-lazy@^4.0.0: resolved "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz" integrity sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw== -import-local@^3.0.2, import-local@3.1.0: +import-local@3.1.0, import-local@^3.0.2: version "3.1.0" resolved "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz" integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== @@ -6734,7 +7016,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3, inherits@2, inherits@2.0.4: +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: version "2.0.4" resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -6744,16 +7026,16 @@ inherits@2.0.3: resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw== -ini@^1.3.2, ini@^1.3.4, ini@^1.3.5, ini@^1.3.8, ini@~1.3.0: - version "1.3.8" - resolved "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz" - integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== - ini@2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz" integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA== +ini@^1.3.2, ini@^1.3.4, ini@^1.3.5, ini@^1.3.8, ini@~1.3.0: + version "1.3.8" + resolved "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + init-package-json@5.0.0: version "5.0.0" resolved "https://registry.npmjs.org/init-package-json/-/init-package-json-5.0.0.tgz" @@ -6815,16 +7097,16 @@ ip@^2.0.0: resolved "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz" integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ== -ipaddr.js@^2.0.1: - version "2.1.0" - resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz" - integrity sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ== - ipaddr.js@1.9.1: version "1.9.1" resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz" integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== +ipaddr.js@^2.0.1: + version "2.1.0" + resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz" + integrity sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ== + is-alphabetical@^2.0.0: version "2.0.1" resolved "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz" @@ -6850,7 +7132,12 @@ is-binary-path@~2.1.0: dependencies: binary-extensions "^2.0.0" -is-ci@^3.0.1, is-ci@3.0.1: +is-buffer@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" + integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== + +is-ci@3.0.1, is-ci@^3.0.1: version "3.0.1" resolved "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz" integrity sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ== @@ -7005,16 +7292,16 @@ is-ssh@^1.4.0: dependencies: protocols "^2.0.1" -is-stream@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz" - integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== - is-stream@2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz" integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== +is-stream@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== + is-text-path@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz" @@ -7044,16 +7331,16 @@ is-yarn-global@^0.4.0: resolved "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.4.1.tgz" integrity sha512-/kppl+R+LO5VmhYSEWARUFjodS25D68gvj8W7z0I7OWhUla5xWu8KL6CtB2V0R6yqhnRgbcaREMr4EEM6htLPQ== -isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" - integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== - isarray@0.0.1: version "0.0.1" resolved "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz" integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== + isexe@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" @@ -7221,7 +7508,7 @@ jest-config@^29.7.0: slash "^3.0.0" strip-json-comments "^3.1.1" -jest-diff@^29.4.1, jest-diff@^29.7.0, "jest-diff@>=29.4.3 < 30": +"jest-diff@>=29.4.3 < 30", jest-diff@^29.4.1, jest-diff@^29.7.0: version "29.7.0" resolved "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz" integrity sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw== @@ -7345,7 +7632,7 @@ jest-resolve-dependencies@^29.7.0: jest-regex-util "^29.6.3" jest-snapshot "^29.7.0" -jest-resolve@*, jest-resolve@^29.7.0: +jest-resolve@^29.7.0: version "29.7.0" resolved "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz" integrity sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA== @@ -7498,7 +7785,7 @@ jest-worker@^29.1.2, jest-worker@^29.7.0: merge-stream "^2.0.0" supports-color "^8.0.0" -jest@^29.0.0, jest@^29.7.0: +jest@^29.7.0: version "29.7.0" resolved "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz" integrity sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw== @@ -7524,28 +7811,24 @@ joi@^17.9.2: "@sideway/formula" "^3.0.1" "@sideway/pinpoint" "^2.0.0" +js-sha3@0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" + integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== + "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-yaml@^3.10.0: - version "3.14.1" - resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" - integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -js-yaml@^3.13.1: - version "3.14.1" - resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" - integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== +js-yaml@4.1.0, js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== dependencies: - argparse "^1.0.7" - esprima "^4.0.0" + argparse "^2.0.1" -js-yaml@^3.8.4: +js-yaml@^3.10.0, js-yaml@^3.13.1, js-yaml@^3.8.4: version "3.14.1" resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== @@ -7553,13 +7836,6 @@ js-yaml@^3.8.4: argparse "^1.0.7" esprima "^4.0.0" -js-yaml@^4.1.0, js-yaml@4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" - integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== - dependencies: - argparse "^2.0.1" - jsesc@^2.5.1: version "2.5.2" resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz" @@ -7580,12 +7856,7 @@ json-parse-better-errors@^1.0.1: resolved "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz" integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== -json-parse-even-better-errors@^2.3.0: - version "2.3.1" - resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz" - integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== - -json-parse-even-better-errors@^2.3.1: +json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: version "2.3.1" resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== @@ -7625,16 +7896,16 @@ json5@^2.1.2, json5@^2.2.1, json5@^2.2.2, json5@^2.2.3: resolved "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== -jsonc-parser@~2.2.1: - version "2.2.1" - resolved "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-2.2.1.tgz" - integrity sha512-o6/yDBYccGvTz1+QFevz6l6OBZ2+fMVu2JZ9CIhzsYRX4mjaK5IyX9eldUdCmga16zlgQxyrj5pt9kzuj2C02w== - jsonc-parser@3.2.0: version "3.2.0" resolved "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz" integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w== +jsonc-parser@~2.2.1: + version "2.2.1" + resolved "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-2.2.1.tgz" + integrity sha512-o6/yDBYccGvTz1+QFevz6l6OBZ2+fMVu2JZ9CIhzsYRX4mjaK5IyX9eldUdCmga16zlgQxyrj5pt9kzuj2C02w== + jsonfile@^6.0.1: version "6.1.0" resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz" @@ -7654,19 +7925,20 @@ jsonpointer@^5.0.0: resolved "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz" integrity sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ== -JSONStream@^1.3.5: - version "1.3.5" - resolved "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz" - integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== - dependencies: - jsonparse "^1.2.0" - through ">=2.2.7 <3" - just-curry-it@^5.3.0: version "5.3.0" resolved "https://registry.npmjs.org/just-curry-it/-/just-curry-it-5.3.0.tgz" integrity sha512-silMIRiFjUWlfaDhkgSzpuAyQ6EX/o09Eu8ZBfmFwQMbax7+LQzeIU2CBrICT6Ne4l86ITCGvUCBpCubWYy0Yw== +keccak@3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.2.tgz#4c2c6e8c54e04f2670ee49fa734eb9da152206e0" + integrity sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ== + dependencies: + node-addon-api "^2.0.0" + node-gyp-build "^4.2.0" + readable-stream "^3.6.0" + keyv@^4.5.3: version "4.5.4" resolved "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz" @@ -7779,6 +8051,40 @@ lerna@^8.0.2: yargs "17.7.2" yargs-parser "21.1.1" +level-concat-iterator@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/level-concat-iterator/-/level-concat-iterator-3.1.0.tgz#5235b1f744bc34847ed65a50548aa88d22e881cf" + integrity sha512-BWRCMHBxbIqPxJ8vHOvKUsaO0v1sLYZtjN3K2iZJsRBYtp+ONsY6Jfi6hy9K3+zolgQRryhIn2NRZjZnWJ9NmQ== + dependencies: + catering "^2.1.0" + +level-supports@^2.0.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/level-supports/-/level-supports-2.1.0.tgz#9af908d853597ecd592293b2fad124375be79c5f" + integrity sha512-E486g1NCjW5cF78KGPrMDRBYzPuueMZ6VBXHT6gC7A8UYWGiM14fGgp+s/L1oFfDWSPV/+SFkYCmZ0SiESkRKA== + +level-supports@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/level-supports/-/level-supports-4.0.1.tgz#431546f9d81f10ff0fea0e74533a0e875c08c66a" + integrity sha512-PbXpve8rKeNcZ9C1mUicC9auIYFyGpkV9/i6g76tLgANwWhtG2v7I4xNBUlkn3lE2/dZF3Pi0ygYGtLc4RXXdA== + +level-transcoder@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/level-transcoder/-/level-transcoder-1.0.1.tgz#f8cef5990c4f1283d4c86d949e73631b0bc8ba9c" + integrity sha512-t7bFwFtsQeD8cl8NIoQ2iwxA0CL/9IFw7/9gAjOonH0PWTTiRfY7Hq+Ejbsxh86tXobDQ6IOiddjNYIfOBs06w== + dependencies: + buffer "^6.0.3" + module-error "^1.0.1" + +leveldown@6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/leveldown/-/leveldown-6.1.0.tgz#7ab1297706f70c657d1a72b31b40323aa612b9ee" + integrity sha512-8C7oJDT44JXxh04aSSsfcMI8YiaGRhOFI9/pMEL7nWJLVsWajDPTRxsSHTM2WcTVY5nXM+SuRHzPPi0GbnDX+w== + dependencies: + abstract-leveldown "^7.2.0" + napi-macros "~2.0.0" + node-gyp-build "^4.3.0" + leven@^3.1.0: version "3.1.0" resolved "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz" @@ -7821,16 +8127,6 @@ lines-and-columns@~2.0.3: resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.4.tgz" integrity sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A== -load-json-file@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz" - integrity sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw== - dependencies: - graceful-fs "^4.1.2" - parse-json "^4.0.0" - pify "^3.0.0" - strip-bom "^3.0.0" - load-json-file@6.2.0: version "6.2.0" resolved "https://registry.npmjs.org/load-json-file/-/load-json-file-6.2.0.tgz" @@ -7841,6 +8137,16 @@ load-json-file@6.2.0: strip-bom "^4.0.0" type-fest "^0.6.0" +load-json-file@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz" + integrity sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw== + dependencies: + graceful-fs "^4.1.2" + parse-json "^4.0.0" + pify "^3.0.0" + strip-bom "^3.0.0" + loader-runner@^4.2.0: version "4.3.0" resolved "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz" @@ -7907,7 +8213,7 @@ lodash.ismatch@^4.4.0: resolved "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz" integrity sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g== -lodash.memoize@^4.1.2, lodash.memoize@4.x: +lodash.memoize@4.x, lodash.memoize@^4.1.2: version "4.1.2" resolved "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz" integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== @@ -7917,7 +8223,7 @@ lodash.uniq@^4.5.0: resolved "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz" integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== -lodash@^4.17.20, lodash@^4.17.21: +lodash@^4.17.14, lodash@^4.17.20, lodash@^4.17.21: version "4.17.21" resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -7973,15 +8279,17 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" -lru-cache@^7.5.1: +lru-cache@^7.5.1, lru-cache@^7.7.1: version "7.18.3" resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz" integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA== -lru-cache@^7.7.1: - version "7.18.3" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz" - integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA== +make-dir@4.0.0, make-dir@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz" + integrity sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw== + dependencies: + semver "^7.5.3" make-dir@^2.1.0: version "2.1.0" @@ -7991,14 +8299,7 @@ make-dir@^2.1.0: pify "^4.0.1" semver "^5.6.0" -make-dir@^4.0.0, make-dir@4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz" - integrity sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw== - dependencies: - semver "^7.5.3" - -make-error@1.x: +make-error@1.x, make-error@^1.1.1: version "1.3.6" resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== @@ -8301,6 +8602,11 @@ memfs@^3.1.2, memfs@^3.4.3: dependencies: fs-monkey "^1.0.4" +memorystream@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" + integrity sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw== + meow@^8.1.2: version "8.1.2" resolved "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz" @@ -8762,7 +9068,7 @@ micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5: braces "^3.0.2" picomatch "^2.3.1" -"mime-db@>= 1.43.0 < 2", mime-db@1.52.0: +mime-db@1.52.0, "mime-db@>= 1.43.0 < 2": version "1.52.0" resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== @@ -8772,13 +9078,6 @@ mime-db@~1.33.0: resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz" integrity sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ== -mime-types@^2.1.12, mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17, mime-types@~2.1.24, mime-types@~2.1.34: - version "2.1.35" - resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" - integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== - dependencies: - mime-db "1.52.0" - mime-types@2.1.18: version "2.1.18" resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz" @@ -8786,6 +9085,13 @@ mime-types@2.1.18: dependencies: mime-db "~1.33.0" +mime-types@^2.1.12, mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17, mime-types@~2.1.24, mime-types@~2.1.34: + version "2.1.35" + resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + mime@1.6.0: version "1.6.0" resolved "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz" @@ -8818,12 +9124,24 @@ mini-css-extract-plugin@^2.7.6: dependencies: schema-utils "^4.0.0" -minimalistic-assert@^1.0.0: +minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz" integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== -minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2, minimatch@3.1.2: +minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== + +minimatch@3.0.5: + version "3.0.5" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz" + integrity sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@3.1.2, minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== @@ -8851,13 +9169,6 @@ minimatch@^9.0.0, minimatch@^9.0.1, minimatch@^9.0.3: dependencies: brace-expansion "^2.0.1" -minimatch@3.0.5: - version "3.0.5" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz" - integrity sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw== - dependencies: - brace-expansion "^1.1.7" - minimist-options@4.1.0: version "4.1.0" resolved "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz" @@ -8938,16 +9249,16 @@ minipass@^4.2.4: resolved "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz" integrity sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ== -"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.2, minipass@^7.0.3: - version "7.0.4" - resolved "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz" - integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ== - minipass@^5.0.0: version "5.0.0" resolved "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz" integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.2, minipass@^7.0.3: + version "7.0.4" + resolved "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz" + integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ== + minizlib@^2.1.1, minizlib@^2.1.2: version "2.1.2" resolved "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz" @@ -8966,6 +9277,11 @@ modify-values@^1.0.1: resolved "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz" integrity sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw== +module-error@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/module-error/-/module-error-1.0.2.tgz#8d1a48897ca883f47a45816d4fb3e3c6ba404d86" + integrity sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA== + monaco-editor-webpack-plugin@^7.0.1: version "7.1.0" resolved "https://registry.npmjs.org/monaco-editor-webpack-plugin/-/monaco-editor-webpack-plugin-7.1.0.tgz" @@ -8973,7 +9289,7 @@ monaco-editor-webpack-plugin@^7.0.1: dependencies: loader-utils "^2.0.2" -monaco-editor@^0.44.0, "monaco-editor@>= 0.21.0 < 1", "monaco-editor@>= 0.25.0 < 1", "monaco-editor@>= 0.31.0": +monaco-editor@^0.44.0: version "0.44.0" resolved "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.44.0.tgz" integrity sha512-5SmjNStN6bSuSE5WPT2ZV+iYn1/yI9sd4Igtk23ChvqB7kDk9lZbB9F5frsuvpB+2njdIeGGFf2G4gbE6rCC9Q== @@ -8983,11 +9299,6 @@ mrmime@^2.0.0: resolved "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz" integrity sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw== -ms@^2.0.0, ms@2.1.3: - version "2.1.3" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - ms@2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" @@ -8998,6 +9309,11 @@ ms@2.1.2: resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== +ms@2.1.3, ms@^2.0.0: + version "2.1.3" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + multicast-dns@^7.2.5: version "7.2.5" resolved "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz" @@ -9017,16 +9333,16 @@ multimatch@5.0.0: arrify "^2.0.1" minimatch "^3.0.4" -mute-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz" - integrity sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA== - mute-stream@0.0.8: version "0.0.8" resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz" integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== +mute-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz" + integrity sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA== + mz@^2.4.0: version "2.7.0" resolved "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz" @@ -9041,12 +9357,17 @@ nanoid@^3.3.7: resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz" integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== +napi-macros@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/napi-macros/-/napi-macros-2.0.0.tgz#2b6bae421e7b96eb687aa6c77a7858640670001b" + integrity sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg== + natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== -negotiator@^0.6.3, negotiator@0.6.3: +negotiator@0.6.3, negotiator@^0.6.3: version "0.6.3" resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz" integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== @@ -9064,6 +9385,11 @@ no-case@^3.0.4: lower-case "^2.0.2" tslib "^2.0.3" +node-addon-api@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-2.0.2.tgz#432cfa82962ce494b132e9d72a15b29f71ff5d32" + integrity sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA== + node-emoji@^2.1.0: version "2.1.3" resolved "https://registry.npmjs.org/node-emoji/-/node-emoji-2.1.3.tgz" @@ -9074,13 +9400,6 @@ node-emoji@^2.1.0: emojilib "^2.4.0" skin-tone "^2.0.0" -node-fetch@^2.6.7: - version "2.7.0" - resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz" - integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== - dependencies: - whatwg-url "^5.0.0" - node-fetch@2.6.7: version "2.6.7" resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz" @@ -9088,11 +9407,28 @@ node-fetch@2.6.7: dependencies: whatwg-url "^5.0.0" +node-fetch@^2.6.7: + version "2.7.0" + resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz" + integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== + dependencies: + whatwg-url "^5.0.0" + node-forge@^1: version "1.3.1" resolved "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz" integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== +node-gyp-build@4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.4.0.tgz#42e99687ce87ddeaf3a10b99dc06abc11021f3f4" + integrity sha512-amJnQCcgtRVw9SvoebO3BKGESClrfXGCUTX9hSn1OuGQTQBOZmVd0Z0OlecpuRksKvbsUqALE8jls/ErClAPuQ== + +node-gyp-build@^4.2.0, node-gyp-build@^4.3.0: + version "4.8.1" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.8.1.tgz#976d3ad905e71b76086f4f0b0d3637fe79b6cda5" + integrity sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw== + node-gyp@^10.0.0: version "10.0.1" resolved "https://registry.npmjs.org/node-gyp/-/node-gyp-10.0.1.tgz" @@ -9154,17 +9490,7 @@ nopt@~1.0.10: dependencies: abbrev "1" -normalize-package-data@^2.3.2: - version "2.5.0" - resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz" - integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== - dependencies: - hosted-git-info "^2.1.4" - resolve "^1.10.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - -normalize-package-data@^2.5.0: +normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: version "2.5.0" resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz" integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== @@ -9174,17 +9500,7 @@ normalize-package-data@^2.5.0: semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" -normalize-package-data@^3.0.0: - version "3.0.3" - resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz" - integrity sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA== - dependencies: - hosted-git-info "^4.0.1" - is-core-module "^2.5.0" - semver "^7.3.4" - validate-npm-package-license "^3.0.1" - -normalize-package-data@^3.0.3: +normalize-package-data@^3.0.0, normalize-package-data@^3.0.3: version "3.0.3" resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz" integrity sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA== @@ -9265,6 +9581,15 @@ npm-normalize-package-bin@^3.0.0: resolved "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz" integrity sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ== +npm-package-arg@8.1.1: + version "8.1.1" + resolved "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.1.tgz" + integrity sha512-CsP95FhWQDwNqiYS+Q0mZ7FAEDytDZAkNxQqea6IaAFJTAY9Lhhqyl0irU/6PMc7BGfUmnsbHcqxJD7XuVM/rg== + dependencies: + hosted-git-info "^3.0.6" + semver "^7.0.0" + validate-npm-package-name "^3.0.0" + npm-package-arg@^10.0.0, npm-package-arg@^10.1.0: version "10.1.0" resolved "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz" @@ -9285,22 +9610,6 @@ npm-package-arg@^11.0.0: semver "^7.3.5" validate-npm-package-name "^5.0.0" -npm-package-arg@8.1.1: - version "8.1.1" - resolved "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.1.tgz" - integrity sha512-CsP95FhWQDwNqiYS+Q0mZ7FAEDytDZAkNxQqea6IaAFJTAY9Lhhqyl0irU/6PMc7BGfUmnsbHcqxJD7XuVM/rg== - dependencies: - hosted-git-info "^3.0.6" - semver "^7.0.0" - validate-npm-package-name "^3.0.0" - -npm-packlist@^8.0.0: - version "8.0.1" - resolved "https://registry.npmjs.org/npm-packlist/-/npm-packlist-8.0.1.tgz" - integrity sha512-MQpL27ZrsJQ2kiAuQPpZb5LtJwydNRnI15QWXsf3WHERu4rzjRj6Zju/My2fov7tLuu3Gle/uoIX/DDZ3u4O4Q== - dependencies: - ignore-walk "^6.0.4" - npm-packlist@5.1.1: version "5.1.1" resolved "https://registry.npmjs.org/npm-packlist/-/npm-packlist-5.1.1.tgz" @@ -9311,6 +9620,13 @@ npm-packlist@5.1.1: npm-bundled "^1.1.2" npm-normalize-package-bin "^1.0.1" +npm-packlist@^8.0.0: + version "8.0.1" + resolved "https://registry.npmjs.org/npm-packlist/-/npm-packlist-8.0.1.tgz" + integrity sha512-MQpL27ZrsJQ2kiAuQPpZb5LtJwydNRnI15QWXsf3WHERu4rzjRj6Zju/My2fov7tLuu3Gle/uoIX/DDZ3u4O4Q== + dependencies: + ignore-walk "^6.0.4" + npm-pick-manifest@^9.0.0: version "9.0.0" resolved "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-9.0.0.tgz" @@ -9376,7 +9692,7 @@ nth-check@^2.0.1: dependencies: boolbase "^1.0.0" -"nx@>= 16 <= 18", "nx@>=17.1.2 < 18", nx@17.2.8: +nx@17.2.8, "nx@>=17.1.2 < 18": version "17.2.8" resolved "https://registry.npmjs.org/nx/-/nx-17.2.8.tgz" integrity sha512-rM5zXbuXLEuqQqcjVjClyvHwRJwt+NVImR2A6KFNG40Z60HP6X12wAxxeLHF5kXXTDRU0PFhf/yACibrpbPrAw== @@ -9534,14 +9850,7 @@ p-limit@^1.1.0: dependencies: p-try "^1.0.0" -p-limit@^2.0.0: - version "2.3.0" - resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz" - integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== - dependencies: - p-try "^2.0.0" - -p-limit@^2.2.0: +p-limit@^2.0.0, p-limit@^2.2.0: version "2.3.0" resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz" integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== @@ -9602,7 +9911,7 @@ p-map-series@2.1.0: resolved "https://registry.npmjs.org/p-map-series/-/p-map-series-2.1.0.tgz" integrity sha512-RpYIIK1zXSNEOdwxcfe7FdvGcs7+y5n8rifMhMNWvaxRNMPINJHF5GDeuVxWqnfrcHPSCnp7Oo5yNXHId9Av2Q== -p-map@^4.0.0, p-map@4.0.0: +p-map@4.0.0, p-map@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz" integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== @@ -9622,7 +9931,7 @@ p-queue@6.6.2: eventemitter3 "^4.0.4" p-timeout "^3.2.0" -p-reduce@^2.0.0, p-reduce@^2.1.0, p-reduce@2.1.0: +p-reduce@2.1.0, p-reduce@^2.0.0, p-reduce@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/p-reduce/-/p-reduce-2.1.0.tgz" integrity sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw== @@ -9847,13 +10156,6 @@ path-scurry@^1.10.1, path-scurry@^1.6.1: lru-cache "^9.1.1 || ^10.0.0" minipass "^5.0.0 || ^6.0.2 || ^7.0.0" -path-to-regexp@^1.7.0: - version "1.8.0" - resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz" - integrity sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA== - dependencies: - isarray "0.0.1" - path-to-regexp@0.1.7: version "0.1.7" resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz" @@ -9864,6 +10166,13 @@ path-to-regexp@2.2.1: resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.2.1.tgz" integrity sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ== +path-to-regexp@^1.7.0: + version "1.8.0" + resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz" + integrity sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA== + dependencies: + isarray "0.0.1" + path-type@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz" @@ -9895,6 +10204,11 @@ picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3, picomatch@^2.3.1: resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== +pify@5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz" + integrity sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA== + pify@^2.3.0: version "2.3.0" resolved "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz" @@ -9910,11 +10224,6 @@ pify@^4.0.1: resolved "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz" integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== -pify@5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz" - integrity sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA== - pirates@^4.0.4: version "4.0.6" resolved "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz" @@ -10222,7 +10531,7 @@ postcss-zindex@^5.1.0: resolved "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-5.1.0.tgz" integrity sha512-fgFMf0OtVSBR1va1JNHYgMxYk73yhn/qb4uQDq1DLGYolz8gHCyr/sesEuGUaYs58E3ZJRcpoGuPVoB7Meiq9A== -"postcss@^7.0.0 || ^8.0.1", postcss@^8.0.9, postcss@^8.1.0, postcss@^8.2.15, postcss@^8.2.2, postcss@^8.4.16, postcss@^8.4.17, postcss@^8.4.21, postcss@^8.4.26: +postcss@^8.4.17, postcss@^8.4.21, postcss@^8.4.26: version "8.4.33" resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.33.tgz" integrity sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg== @@ -10375,7 +10684,7 @@ qs@6.11.0: dependencies: side-channel "^1.0.4" -queue-microtask@^1.2.2: +queue-microtask@^1.2.2, queue-microtask@^1.2.3: version "1.2.3" resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== @@ -10404,16 +10713,16 @@ randombytes@^2.1.0: dependencies: safe-buffer "^5.1.0" -range-parser@^1.2.1, range-parser@~1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz" - integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== - range-parser@1.2.0: version "1.2.0" resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz" integrity sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A== +range-parser@^1.2.1, range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + raw-body@2.5.1: version "2.5.1" resolved "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz" @@ -10424,6 +10733,14 @@ raw-body@2.5.1: iconv-lite "0.4.24" unpipe "1.0.0" +raw-loader@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-4.0.2.tgz#1aac6b7d1ad1501e66efdac1522c73e59a584eb6" + integrity sha512-ZnScIV3ag9A4wPX/ZayxL/jZH+euYb6FcUinPcgiQW0+UBtEv0O6Q3lGd3cqJ+GHH+rksEv3Pj99oxJ3u3VIKA== + dependencies: + loader-utils "^2.0.0" + schema-utils "^3.0.0" + rc@1.2.8: version "1.2.8" resolved "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz" @@ -10464,7 +10781,7 @@ react-dev-utils@^12.0.1: strip-ansi "^6.0.1" text-table "^0.2.0" -react-dom@*, "react-dom@^16.6.0 || ^17.0.0 || ^18.0.0", "react-dom@^16.8.0 || ^17.0.0 || ^18.0.0", react-dom@^18.0.0, "react-dom@>= 16.8.0 < 19.0.0": +react-dom@^18.0.0: version "18.2.0" resolved "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz" integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== @@ -10524,14 +10841,6 @@ react-loadable-ssr-addon-v5-slorber@^1.0.1: dependencies: "@babel/runtime" "^7.10.3" -react-loadable@*, "react-loadable@npm:@docusaurus/react-loadable@5.5.2": - version "5.5.2" - resolved "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-5.5.2.tgz" - integrity sha512-A3dYjdBGuy0IGT+wyLIGIKLRE+sAk1iNk0f1HjNDysO7u8lhL4N3VEm+FAubmJbAztn94F7MxBTPmnixbiyFdQ== - dependencies: - "@types/react" "*" - prop-types "^15.6.2" - react-markdown@^9.0.1: version "9.0.1" resolved "https://registry.npmjs.org/react-markdown/-/react-markdown-9.0.1.tgz" @@ -10575,7 +10884,7 @@ react-router-dom@^5.3.4: tiny-invariant "^1.0.2" tiny-warning "^1.0.0" -react-router@^5.3.4, react-router@>=5, react-router@5.3.4: +react-router@5.3.4, react-router@^5.3.4: version "5.3.4" resolved "https://registry.npmjs.org/react-router/-/react-router-5.3.4.tgz" integrity sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA== @@ -10590,7 +10899,7 @@ react-router@^5.3.4, react-router@>=5, react-router@5.3.4: tiny-invariant "^1.0.2" tiny-warning "^1.0.0" -react@*, "react@^16.13.1 || ^17.0.0 || ^18.0.0", "react@^16.6.0 || ^17.0.0 || ^18.0.0", "react@^16.8.0 || ^17.0.0 || ^18.0.0", react@^18.0.0, react@^18.2.0, "react@>= 16.8.0 < 19.0.0", react@>=15, react@>=16, "react@>=16 <= 18", react@>=16.0.0, react@>=16.3, "react@>=17 <= 18", react@>=18: +react@^18.0.0: version "18.2.0" resolved "https://registry.npmjs.org/react/-/react-18.2.0.tgz" integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== @@ -10610,7 +10919,7 @@ read-package-json-fast@^3.0.0: json-parse-even-better-errors "^3.0.0" npm-normalize-package-bin "^3.0.0" -read-package-json@^6.0.0, read-package-json@6.0.4: +read-package-json@6.0.4, read-package-json@^6.0.0: version "6.0.4" resolved "https://registry.npmjs.org/read-package-json/-/read-package-json-6.0.4.tgz" integrity sha512-AEtWXYfopBj2z5N5PbkAOeNHRPUg5q+Nen7QLxV8M2zJq1ym6/lCz3fYNTCXe19puu2d06jfHhrP7v/S2PtMMw== @@ -10673,7 +10982,7 @@ read@^2.0.0: dependencies: mute-stream "~1.0.0" -readable-stream@^2.0.1: +readable-stream@^2.0.1, readable-stream@~2.3.6: version "2.3.8" resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz" integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== @@ -10695,19 +11004,6 @@ readable-stream@^3.0.0, readable-stream@^3.0.2, readable-stream@^3.0.6, readable string_decoder "^1.1.1" util-deprecate "^1.0.1" -readable-stream@~2.3.6: - version "2.3.8" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz" - integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - readdirp@~3.6.0: version "3.6.0" resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" @@ -10937,16 +11233,16 @@ resolve-cwd@^3.0.0: dependencies: resolve-from "^5.0.0" +resolve-from@5.0.0, resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + resolve-from@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== -resolve-from@^5.0.0, resolve-from@5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz" - integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== - resolve-pathname@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz" @@ -11044,20 +11340,15 @@ rxjs@^7.5.5, rxjs@^7.8.1: dependencies: tslib "^2.1.0" -safe-buffer@^5.1.0, safe-buffer@>=5.1.0, safe-buffer@~5.2.0, safe-buffer@5.2.1: - version "5.2.1" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -safe-buffer@~5.1.0, safe-buffer@~5.1.1: +safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-buffer@5.1.2: - version "5.1.2" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== +safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.1.0, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== safe-stable-stringify@^1.1: version "1.1.1" @@ -11081,25 +11372,16 @@ scheduler@^0.23.0: dependencies: loose-envify "^1.1.0" -schema-utils@^3.0.0: - version "3.3.0" - resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz" - integrity sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg== - dependencies: - "@types/json-schema" "^7.0.8" - ajv "^6.12.5" - ajv-keywords "^3.5.2" - -schema-utils@^3.1.1: - version "3.3.0" - resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz" - integrity sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg== +schema-utils@2.7.0: + version "2.7.0" + resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz" + integrity sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A== dependencies: - "@types/json-schema" "^7.0.8" - ajv "^6.12.5" - ajv-keywords "^3.5.2" + "@types/json-schema" "^7.0.4" + ajv "^6.12.2" + ajv-keywords "^3.4.1" -schema-utils@^3.2.0: +schema-utils@^3.0.0, schema-utils@^3.1.1, schema-utils@^3.2.0: version "3.3.0" resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz" integrity sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg== @@ -11118,14 +11400,14 @@ schema-utils@^4.0.0: ajv-formats "^2.1.1" ajv-keywords "^5.1.0" -schema-utils@2.7.0: - version "2.7.0" - resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz" - integrity sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A== +secp256k1@4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-4.0.3.tgz#c4559ecd1b8d3c1827ed2d1b94190d69ce267303" + integrity sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA== dependencies: - "@types/json-schema" "^7.0.4" - ajv "^6.12.2" - ajv-keywords "^3.4.1" + elliptic "^6.5.4" + node-addon-api "^2.0.0" + node-gyp-build "^4.2.0" section-matter@^1.0.0: version "1.0.0" @@ -11155,17 +11437,19 @@ semver-diff@^4.0.0: dependencies: semver "^7.3.5" -semver@^5.6.0: +"semver@2 || 3 || 4 || 5", semver@^5.5.0, semver@^5.6.0: version "5.7.2" resolved "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz" integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== -semver@^6.3.0: - version "6.3.1" - resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz" - integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== +semver@7.5.3: + version "7.5.3" + resolved "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz" + integrity sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ== + dependencies: + lru-cache "^6.0.0" -semver@^6.3.1: +semver@^6.3.0, semver@^6.3.1: version "6.3.1" resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== @@ -11177,18 +11461,6 @@ semver@^7.0.0, semver@^7.1.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semve dependencies: lru-cache "^6.0.0" -"semver@2 || 3 || 4 || 5": - version "5.7.2" - resolved "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz" - integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== - -semver@7.5.3: - version "7.5.3" - resolved "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz" - integrity sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ== - dependencies: - lru-cache "^6.0.0" - send@0.18.0: version "0.18.0" resolved "https://registry.npmjs.org/send/-/send-0.18.0.tgz" @@ -11324,7 +11596,7 @@ side-channel@^1.0.4: get-intrinsic "^1.0.2" object-inspect "^1.9.0" -signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7, signal-exit@3.0.7: +signal-exit@3.0.7, signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: version "3.0.7" resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== @@ -11393,7 +11665,7 @@ skin-tone@^2.0.0: dependencies: unicode-emoji-modifier-base "^1.0.0" -slash@^3.0.0, slash@3.0.0: +slash@3.0.0, slash@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== @@ -11443,6 +11715,19 @@ socks@^2.6.2, socks@^2.7.1: ip "^2.0.0" smart-buffer "^4.2.0" +solc@^0.8.26: + version "0.8.26" + resolved "https://registry.yarnpkg.com/solc/-/solc-0.8.26.tgz#afc78078953f6ab3e727c338a2fefcd80dd5b01a" + integrity sha512-yiPQNVf5rBFHwN6SIf3TUUvVAFKcQqmSUFeq+fb6pNRCo0ZCgpYOZDi3BVoezCPIAcKrVYd/qXlBLUP9wVrZ9g== + dependencies: + command-exists "^1.2.8" + commander "^8.1.0" + follow-redirects "^1.12.1" + js-sha3 "0.8.0" + memorystream "^0.3.1" + semver "^5.5.0" + tmp "0.0.33" + sort-css-media-queries@2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/sort-css-media-queries/-/sort-css-media-queries-2.1.0.tgz" @@ -11460,14 +11745,6 @@ source-map-js@^1.0.2: resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz" integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== -source-map-support@~0.5.20: - version "0.5.21" - resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz" - integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - source-map-support@0.5.13: version "0.5.13" resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz" @@ -11476,6 +11753,14 @@ source-map-support@0.5.13: buffer-from "^1.0.0" source-map "^0.6.0" +source-map-support@~0.5.20: + version "0.5.21" + resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0: version "0.6.1" resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" @@ -11545,13 +11830,6 @@ spdy@^4.0.2: select-hose "^2.0.0" spdy-transport "^3.0.0" -split@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/split/-/split-1.0.1.tgz" - integrity sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg== - dependencies: - through "2" - split2@^3.2.2: version "3.2.2" resolved "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz" @@ -11559,6 +11837,13 @@ split2@^3.2.2: dependencies: readable-stream "^3.0.0" +split@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/split/-/split-1.0.1.tgz" + integrity sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg== + dependencies: + through "2" + sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" @@ -11597,36 +11882,24 @@ stack-utils@^2.0.3: state-local@^1.0.6: version "1.0.7" - -"statuses@>= 1.4.0 < 2": - version "1.5.0" - resolved "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz" - integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== + resolved "https://registry.yarnpkg.com/state-local/-/state-local-1.0.7.tgz#da50211d07f05748d53009bee46307a37db386d5" + integrity sha512-HTEHMNieakEnoe33shBYcZ7NX83ACUjCu8c40iOGEZsngj9zRnkqS9j1pqQPXwobB0ZcVTk27REb7COQ0UR59w== statuses@2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz" integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== +"statuses@>= 1.4.0 < 2": + version "1.5.0" + resolved "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz" + integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== + std-env@^3.0.1: version "3.7.0" resolved "https://registry.npmjs.org/std-env/-/std-env-3.7.0.tgz" integrity sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg== -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - string-length@^4.0.1: version "4.0.2" resolved "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz" @@ -11635,16 +11908,7 @@ string-length@^4.0.1: char-regex "^1.0.2" strip-ansi "^6.0.0" -"string-width-cjs@npm:string-width@^4.2.0": - version "4.2.3" - resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: +"string-width-cjs@npm:string-width@^4.2.0", "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -11653,7 +11917,7 @@ string-length@^4.0.1: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" -string-width@^5.0.1: +string-width@^5.0.1, string-width@^5.1.2: version "5.1.2" resolved "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz" integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== @@ -11662,14 +11926,19 @@ string-width@^5.0.1: emoji-regex "^9.2.2" strip-ansi "^7.0.1" -string-width@^5.1.2: - version "5.1.2" - resolved "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz" - integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== dependencies: - eastasianwidth "^0.2.0" - emoji-regex "^9.2.2" - strip-ansi "^7.0.1" + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" stringify-entities@^4.0.0: version "4.0.3" @@ -11688,14 +11957,7 @@ stringify-object@^3.3.0: is-obj "^1.0.1" is-regexp "^1.0.0" -"strip-ansi-cjs@npm:strip-ansi@^6.0.1": - version "6.0.1" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-ansi@^6.0.0, strip-ansi@^6.0.1: +"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== @@ -11746,7 +12008,7 @@ strip-json-comments@~2.0.1: resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz" integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== -strong-log-transformer@^2.1.0, strong-log-transformer@2.1.0: +strong-log-transformer@2.1.0, strong-log-transformer@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz" integrity sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA== @@ -11777,14 +12039,7 @@ stylehacks@^5.1.1: browserslist "^4.21.4" postcss-selector-parser "^6.0.4" -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -supports-color@^5.5.0: +supports-color@^5.3.0, supports-color@^5.5.0: version "5.5.0" resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== @@ -11798,14 +12053,7 @@ supports-color@^7.1.0: dependencies: has-flag "^4.0.0" -supports-color@^8.0.0: - version "8.1.1" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz" - integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== - dependencies: - has-flag "^4.0.0" - -supports-color@^8.1.1: +supports-color@^8.0.0, supports-color@^8.1.1: version "8.1.1" resolved "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz" integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== @@ -11856,26 +12104,26 @@ tar-stream@~2.2.0: inherits "^2.0.3" readable-stream "^3.1.1" -tar@^6.1.11, tar@^6.1.2: - version "6.2.0" - resolved "https://registry.npmjs.org/tar/-/tar-6.2.0.tgz" - integrity sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ== +tar@6.1.11: + version "6.1.11" + resolved "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz" + integrity sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA== dependencies: chownr "^2.0.0" fs-minipass "^2.0.0" - minipass "^5.0.0" + minipass "^3.0.0" minizlib "^2.1.1" mkdirp "^1.0.3" yallist "^4.0.0" -tar@6.1.11: - version "6.1.11" - resolved "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz" - integrity sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA== +tar@^6.1.11, tar@^6.1.2: + version "6.2.0" + resolved "https://registry.npmjs.org/tar/-/tar-6.2.0.tgz" + integrity sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ== dependencies: chownr "^2.0.0" fs-minipass "^2.0.0" - minipass "^3.0.0" + minipass "^5.0.0" minizlib "^2.1.1" mkdirp "^1.0.3" yallist "^4.0.0" @@ -11939,11 +12187,6 @@ thenify-all@^1.0.0: dependencies: any-promise "^1.0.0" -through@^2.3.4, through@^2.3.6, "through@>=2.2.7 <3", through@2: - version "2.3.8" - resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz" - integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== - through2@^2.0.0: version "2.0.5" resolved "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz" @@ -11952,6 +12195,11 @@ through2@^2.0.0: readable-stream "~2.3.6" xtend "~4.0.1" +through@2, "through@>=2.2.7 <3", through@^2.3.4, through@^2.3.6: + version "2.3.8" + resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz" + integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== + thunky@^1.0.2: version "1.1.0" resolved "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz" @@ -11967,7 +12215,7 @@ tiny-warning@^1.0.0: resolved "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz" integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== -tmp@^0.0.33: +tmp@0.0.33, tmp@^0.0.33: version "0.0.33" resolved "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz" integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== @@ -12054,6 +12302,25 @@ ts-jest@^29.1.1: semver "^7.5.3" yargs-parser "^21.0.1" +ts-node@^10.9.2: + version "10.9.2" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.2.tgz#70f021c9e185bccdca820e26dc413805c101c71f" + integrity sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ== + dependencies: + "@cspotcode/source-map-support" "^0.8.0" + "@tsconfig/node10" "^1.0.7" + "@tsconfig/node12" "^1.0.7" + "@tsconfig/node14" "^1.0.0" + "@tsconfig/node16" "^1.0.2" + acorn "^8.4.1" + acorn-walk "^8.1.1" + arg "^4.1.0" + create-require "^1.1.0" + diff "^4.0.1" + make-error "^1.1.1" + v8-compile-cache-lib "^3.0.1" + yn "3.1.1" + tsconfig-paths@^4.1.2: version "4.2.0" resolved "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz" @@ -12121,12 +12388,7 @@ type-fest@^1.0.1: resolved "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz" integrity sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA== -type-fest@^2.13.0: - version "2.19.0" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz" - integrity sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA== - -type-fest@^2.5.0: +type-fest@^2.13.0, type-fest@^2.5.0: version "2.19.0" resolved "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz" integrity sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA== @@ -12151,14 +12413,11 @@ typedarray@^0.0.6: resolved "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz" integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== -typescript@^5.3.3, "typescript@>=3 < 6", "typescript@>=4.3 <6", typescript@>=4.9.5: +"typescript@>=3 < 6", typescript@^5.3.3: version "5.3.3" resolved "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz" integrity sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw== -"typescript@>= 2.7": - version "5.2.2" - typescript@~5.2.2: version "5.2.2" resolved "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz" @@ -12311,7 +12570,7 @@ universalify@^2.0.0: resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz" integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== -unpipe@~1.0.0, unpipe@1.0.0: +unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== @@ -12370,6 +12629,20 @@ url-loader@^4.1.1: mime-types "^2.1.27" schema-utils "^3.0.0" +utf-8-validate@5.0.7: + version "5.0.7" + resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.7.tgz#c15a19a6af1f7ad9ec7ddc425747ca28c3644922" + integrity sha512-vLt1O5Pp+flcArHGIyKEQq883nBt8nN8tVBcoL0qUXj2XT1n7p70yGIq2VK98I5FdZ1YHc0wk/koOnHjnXWk1Q== + dependencies: + node-gyp-build "^4.3.0" + +utf-8-validate@6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-6.0.3.tgz#7d8c936d854e86b24d1d655f138ee27d2636d777" + integrity sha512-uIuGf9TWQ/y+0Lp+KGZCMuJWc3N9BHA+l/UmHd/oUHwJJDeysyTRxNQVkbzsIWfGFbRe3OcgML/i0mvVRPOyDA== + dependencies: + node-gyp-build "^4.3.0" + util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" @@ -12400,6 +12673,11 @@ uuid@^9.0.0: resolved "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz" integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== +v8-compile-cache-lib@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" + integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== + v8-to-istanbul@^9.0.1: version "9.2.0" resolved "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz" @@ -12409,7 +12687,7 @@ v8-to-istanbul@^9.0.1: "@types/istanbul-lib-coverage" "^2.0.1" convert-source-map "^2.0.0" -validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.4, validate-npm-package-license@3.0.4: +validate-npm-package-license@3.0.4, validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.4: version "3.0.4" resolved "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz" integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== @@ -12417,6 +12695,13 @@ validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.4, valida spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" +validate-npm-package-name@5.0.0, validate-npm-package-name@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz" + integrity sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ== + dependencies: + builtins "^5.0.0" + validate-npm-package-name@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz" @@ -12424,13 +12709,6 @@ validate-npm-package-name@^3.0.0: dependencies: builtins "^1.0.3" -validate-npm-package-name@^5.0.0, validate-npm-package-name@5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz" - integrity sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ== - dependencies: - builtins "^5.0.0" - value-equal@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz" @@ -12585,7 +12863,7 @@ webpack-sources@^3.2.2, webpack-sources@^3.2.3: resolved "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz" integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== -"webpack@^4.0.0 || ^5.0.0", "webpack@^4.37.0 || ^5.0.0", "webpack@^4.5.0 || 5.x", webpack@^5.0.0, webpack@^5.1.0, webpack@^5.20.0, webpack@^5.88.1, "webpack@>= 4", "webpack@>=4.41.1 || 5.x", webpack@>=5, "webpack@3 || 4 || 5": +webpack@^5.88.1: version "5.89.0" resolved "https://registry.npmjs.org/webpack/-/webpack-5.89.0.tgz" integrity sha512-qyfIC10pOr70V+jkmud8tMfajraGCZMBWJtrmuBymQKCrLTRejBI8STDp1MCyZu/QTdZSeacCQYpYNQVOzX5kw== @@ -12625,7 +12903,7 @@ webpackbar@^5.0.2: pretty-time "^1.1.0" std-env "^3.0.1" -websocket-driver@^0.7.4, websocket-driver@>=0.5.1: +websocket-driver@>=0.5.1, websocket-driver@^0.7.4: version "0.7.4" resolved "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz" integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== @@ -12692,7 +12970,7 @@ wordwrap@^1.0.0: resolved "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz" integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== @@ -12710,15 +12988,6 @@ wrap-ansi@^6.0.1: string-width "^4.1.0" strip-ansi "^6.0.0" -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - wrap-ansi@^8.0.1, wrap-ansi@^8.1.0: version "8.1.0" resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz" @@ -12733,6 +13002,14 @@ wrappy@1: resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== +write-file-atomic@5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz" + integrity sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw== + dependencies: + imurmurhash "^0.1.4" + signal-exit "^4.0.1" + write-file-atomic@^2.4.2: version "2.4.3" resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz" @@ -12760,14 +13037,6 @@ write-file-atomic@^4.0.2: imurmurhash "^0.1.4" signal-exit "^3.0.7" -write-file-atomic@5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz" - integrity sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw== - dependencies: - imurmurhash "^0.1.4" - signal-exit "^4.0.1" - write-json-file@^3.2.0: version "3.2.0" resolved "https://registry.npmjs.org/write-json-file/-/write-json-file-3.2.0.tgz" @@ -12789,6 +13058,11 @@ write-pkg@4.0.0: type-fest "^0.4.1" write-json-file "^3.2.0" +ws@8.13.0: + version "8.13.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.13.0.tgz#9a9fb92f93cf41512a0735c8f4dd09b8a1211cd0" + integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA== + ws@^7.3.1: version "7.5.9" resolved "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz" @@ -12848,35 +13122,30 @@ yaml@^2.3.4: resolved "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz" integrity sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA== -yargs-parser@^20.2.2: - version "20.2.9" - resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz" - integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== +yargs-parser@21.1.1, yargs-parser@^21.0.1, yargs-parser@^21.1.1: + version "21.1.1" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== -yargs-parser@^20.2.3: +yargs-parser@^20.2.2, yargs-parser@^20.2.3: version "20.2.9" resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz" integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== -yargs-parser@^21.0.1, yargs-parser@^21.1.1, yargs-parser@21.1.1: - version "21.1.1" - resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz" - integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== - -yargs@^16.0.0: - version "16.2.0" - resolved "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz" - integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== +yargs@17.7.2, yargs@^17.3.1, yargs@^17.6.2, yargs@^17.7.2: + version "17.7.2" + resolved "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz" + integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== dependencies: - cliui "^7.0.2" + cliui "^8.0.1" escalade "^3.1.1" get-caller-file "^2.0.5" require-directory "^2.1.1" - string-width "^4.2.0" + string-width "^4.2.3" y18n "^5.0.5" - yargs-parser "^20.2.2" + yargs-parser "^21.1.1" -yargs@^16.2.0: +yargs@^16.0.0, yargs@^16.2.0: version "16.2.0" resolved "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz" integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== @@ -12889,18 +13158,10 @@ yargs@^16.2.0: y18n "^5.0.5" yargs-parser "^20.2.2" -yargs@^17.3.1, yargs@^17.6.2, yargs@^17.7.2, yargs@17.7.2: - version "17.7.2" - resolved "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz" - integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== - dependencies: - cliui "^8.0.1" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.3" - y18n "^5.0.5" - yargs-parser "^21.1.1" +yn@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== yocto-queue@^0.1.0: version "0.1.0"