diff --git a/.github/workflows/pull-request-develop.yml b/.github/workflows/pull-request-develop.yml index c46ea8de7..99be98fa3 100644 --- a/.github/workflows/pull-request-develop.yml +++ b/.github/workflows/pull-request-develop.yml @@ -29,7 +29,7 @@ jobs: # install dependencies from the package-lock.json - name: Install dependencies - run: npm ci --workspaces + run: npm ci --workspaces --force # builds all packages build: @@ -43,7 +43,7 @@ jobs: cache: npm - name: "Install dependencies" - run: npm ci --workspaces --include-workspace-root + run: npm ci --workspaces --include-workspace-root --force - name: "Build" run: npm run build @@ -61,7 +61,7 @@ jobs: cache: npm - name: "Install dependencies" - run: npm ci --workspaces --include-workspace-root + run: npm ci --workspaces --include-workspace-root --force - name: "Build" run: npm run build @@ -84,7 +84,7 @@ jobs: cache: npm - name: "Install dependencies" - run: npm ci --workspaces --include-workspace-root + run: npm ci --workspaces --include-workspace-root --force - name: "Build" run: npm run build @@ -139,7 +139,7 @@ jobs: cache: npm - name: "Install dependencies" - run: npm ci --workspaces --include-workspace-root + run: npm ci --workspaces --include-workspace-root --force - name: "Build" run: npm run build diff --git a/.gitignore b/.gitignore index 3a9f3ca15..005f074ba 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,7 @@ dist tmp /out-tsc +docs # dependencies node_modules diff --git a/docs/common/DependencyFactory.md b/docs/common/DependencyFactory.md deleted file mode 100644 index 7962f9753..000000000 --- a/docs/common/DependencyFactory.md +++ /dev/null @@ -1,16 +0,0 @@ -DependencyFactories use type-inference to correctly infer and embedd the generated types into the ModuleContainers module types. -This enables us to use type-checked `container.resolve("dependency1")` and not have to rely on `.resolveOrFail()`. - -The way this works is that DependencyFactories implement a methods that returns an record of type -`Record`. - -In order for the dependencies to get generated, the underlying Module has to be resolved once before. -This is because we register all the dependencies in the afterModuleResolution hook. - -`container.registerDependencyFactories()` takes a `(keyof Modules)[]` as arguments, which specifies the moduleNames of the -dependencyfactories that should be resolved eagerly in order to register all their generated dependencies. - -The pattern which all ModuleContainer usages should follow is to: -1. Create a sub-interfaces that declares the minimum dependencies that a factory should create by overriding the dependencies() method in the sub-interface -2. Add this interface as a mandatory module for the ModuleContainer -3. Call `this.registerDependencyFactories(["mandatoryModuleX"])` with the mandatory module's name at the end of `create()` \ No newline at end of file diff --git a/docs/framework/draft.tslike b/docs/framework/draft.tslike deleted file mode 100644 index a4e25ccf6..000000000 --- a/docs/framework/draft.tslike +++ /dev/null @@ -1,85 +0,0 @@ -import { Hash } from "crypto"; - -class AppModuleWrapper { - public stateTransitions = []; - public wrap({ stateTransitionsCommitment, transactionCommitmentk, executionStatusCommitment }) { - const moduleName - const methodName - Poseidon.hash(this.sender, moduleName, methodName, args).assertEquals(transactionCommitment); - method(); - const computedStateTransitionsCommitment = this.stateTransitions.reduce(() => stateTransitions.toField()); - stateTransitionsCommitment.assertEquals(computedStateTransitionsCommitment); - } -} - -class Balances { - @state - public totalSupply = UInt64; - public balances = Map(PublicKey, UInt64); - - @runtimeMethod - public transfer(proof: Proof, from: PublicKey, to: PublicKey, amount: UInt64): Bool { - const fromBalance = this.balances.get(from); // Circuit.witness -> UInt64 - const toBalance = this.balances.get(to); // Circuit.witness -> UInt64 - const totalSupply = this.totalSupply.get(); - - this.sender.assertEquals(from); - - // Field, Field - this.balances.set(from, UInt64.from(0)); // StateTransition - this.balances.set(to, UInt64.from(0)); - - this.modules.whitelist.isWhitelisted(to); - - // implicit - const stateTranstionFrom = { - path: [Balances, balances, from], - from: fromBalance, // Option - to: fromBalance // Option - } - - return Bool(true) - } -} - -class Whitelist { - public whitelist = Map; // List - - public isWhitelisted(address: PublicKey) { - return this.whitelist.includes(address); - } -} - -class MyBalances extends Mixin(BaseBalances, MintableBalances, Burnable...) { -public transfer() { - return Bool(false) - } -} - -class MyAppChain extend AppChain { - constructor() { - this.modules.register([ - balances: new MyBalances(), - whitelist: new Whitelist() - ]) - } -} - -class StateTransitionProver { - applyTransition(balancesProof: ) {} -} - - - -// mempool - -MyAppChain.modules.get(moduleName).call(functionName, args[]); - -[tx, tx2, tx3] -> transaction list commitment - -tx execution -> public input: stateTransitionsCommitment - -BlockProof -tx: - tx.signature.verify(transactionCommitment, senderPublicKey) -AppChainproof.fullCommitmment + transitionProof.fullCommitmment + AppChainProof.transactionCommitment \ No newline at end of file diff --git a/docs/framework/naming.md b/docs/framework/naming.md deleted file mode 100644 index a137f8795..000000000 --- a/docs/framework/naming.md +++ /dev/null @@ -1,7 +0,0 @@ -### Public Input - --root for trees -suffix -sHash for lists --hash for simple struc thashes - -from- and to- should be named as prefix (i.e. fromStateRoot) \ No newline at end of file diff --git a/docs/framework/notes.md b/docs/framework/notes.md deleted file mode 100644 index 66cc96093..000000000 --- a/docs/framework/notes.md +++ /dev/null @@ -1,73 +0,0 @@ -# App modules - -- App module equals ZkProgram -- each app module function is a ZkProgram method -- public input of this ZkProgram is a hash of state transitions (stateTransitionsCommitment) -- state & methods are decorated, to distinguish from non-publicly-callable methods -[ -- interop between modules, is like copy pasting code from one module to another -- composable modules to be as minimal as possible, so that the users can compose the functionality as they see fit (burnable, mintable, governable, upgradable, ...) -- to override module functionality, you can extend the module class and override .e.g. a method and just return a false status to disable it -- all module methods are merged into an AppChain ZkProgram, this means that the generated StateTransitionProver has to only accept one AppChain proof -]() - -TODO: -- user signature auth -> sender signs tx, from === sender -> tx prover checks signature, then state transition is merged with tx prover into a block proof - - each method invocation should have transaction/invocation commitment checking the method name + parameterrs provided match what the transaction specified - which is authorized & proven separately but then converged via the commitment - - tx status should be also public input, not private return? -- mempool bundle sequence hash -- tx fees - - expensiveness of each method proving - - no fees is an option as well - - flat fee - - since we have instant inclusion signatures, there is effectively no fee market - - fees are deducted from L2 balances - - you can pay the fee in 1, or different assets - - either at fix conversion rate / spot price - - or at an oracle price - TODO: find a way where to create and apply state transitions for paying fees -- batch tx? (!) - -> have a batch of Tx, if any of them has result: false, then dont apply state transitions -- accepting local proofs, privacy by having data accross multiple providers, so you can fetch a witness and submit a proof, without the sequencer knowing what witness you were asking for? - -> how does this fit into the tx commitment scheme? - -> proof's public input is made part of the transaction arguments, so it can be enforced within the tx execution circuit - - -# Blocks & Transaction - -- No bundle proof, we only construct a transactionListCommitment at the will of the operator, from the mempool -- BlockProof that verifies the signature of the processed transaction, while it also merges the proof of tx execution (AppChainProof) and proof of applying all state transitions, resulting from each individual tx - - BlockProof is a rolling proof, and its only considered valid once its 'sealed' a.k.a. rolled up to completion - it rolled up all the required transactions (transaction commitments) - - BlockProof has to be signed by the sequencer operator to be considered valid by the L1 - -- sequencer can issue transaction inclusion signatures, threfore the users can dispute / stop the app chain in case their transaction is not included - -## Inclusion signatures - -instant 1x transaction inclusion via tx queues -> signed for inclusion --> users can dispute / stop the app chain, in case their tx is not included in the block proof on the l1 - --> mode of punishment for the seuqencer -> turn off app chain, or slash stake --> how is the inclusion disputed on the L1? one way could be to store a history of block public inputs in the l1 state - - - -# State - -# getting -- property key -> unicode -> Field[] -> single Field hash -- Single 256 merkle map for the entire app chain, no sub trees! - - its mathematically impossible to get a collision since we prefix the keys to be unique -- .get() & .getOrDefault(), or provide a default at the state definition, prevent implicit behaviors as much as possible, but dont compromise the developer experience -- Not just getOrDefault, but we could wrap everything in Option (we should) -- getting a value produces a StateTransition, where the 'to' is a None - - (applies for first time .set()) for a case where the state did not exist before, the 'from' is a None instead ?? or Some with value: Field(0) - -- exists() -> Field(0) -> None vs hash([Field(0)]) -> Some(Field(0)) - - exists()/get() creates a precondition through 'from' in the StateTransition - - -# setting -- each .set() call will produce 1 StateTransition -- a StateTranstion looks like this: - { path: Field[], from: Option, to: Option } \ No newline at end of file diff --git a/docs/sequencer/blockproduction.md b/docs/sequencer/blockproduction.md deleted file mode 100644 index 7e8fe1d0c..000000000 --- a/docs/sequencer/blockproduction.md +++ /dev/null @@ -1,63 +0,0 @@ -#### Block Proving Pipeline - -The blockproving has 3 steps that kind of run independently but are combined to generate a single BlockProof to be used to settlement. - -1. StateTransition Reduction Pipeline: - This Step roughly takes an StateTransition[] and turns it into a proof attesting to the transformation from `stateRootA -> stateRootB` with a commitment to the StateTransitions `stateTransitionsHash`. - In the case there are more STs than the batch size, this is done recursively by merging the individual parts as a tree (a recurring pattern). - - -2. Runtime Proof -This is a, once per transaction, executed proof of a runtime execution, it roughly proves a relation `Transaction -> ST[] via stateTransitionsHash` - - -3. Transaction Proof -This proof is actually part of the BlockProver circuit for technical reasons, but is essentially proves - `(stProof, runtimeProof) -> fromStateRoot, toStateRoot, tx[] via transactionsHash`. A Transaction[] is grouped into blocks, and for each block, it's transactions BlockProofs are merged into one. -Subsequently, i will refer to them as "transaction proof" or "txProof", even though they are technically part of the BlockProver circuit, -because they semantically prove the correct execution of one tx or a tx[], with no real releation to the concept of a block. - - -4. BlockProof -This proof proves takes a `txProof`, a `stProof` and executes a few steps -- execute beforeBlock hooks -- apply merged TransactionProof -- execute afterBlock hooks -- apply ST[] that was generated by afterBlock via the provided `stProof` -- Save the block into the blockHashTree -If there are multiple blocks, we merge them into 1 proof that we can then use for settlement - In the following diagram, all tree-like merging operations (reductions) are depicted for the case that there are 2 proof to keep it overviewable. Assume that there can be arbitrarily many proofs to merge (but then the tree would obviously grow). - -```mermaid -flowchart LR - st11["StateTransitionProof 1 (proveTransitions)"] - st12["StateTransitionProof 2 (proveTransitions)"] - - st21["StateTransitionProof 1_2 (merge)"] - runtime["RuntimeProof"] - st11 --> st21 - st12 --> st21 - - bp11["BlockProof (proveTransaction)"] - bp12["BlockProof 2 (proveTransaction)"] - bp13["BlockProof merged (merge)"] - - bp11 --> bp13 - bp12 --> bp13 - - stb11["StateTransitionProof B1 (proveTransitions)"] - stb12["StateTransitionProof B2 (proveTransitions)"] - stb21["StateTransitionProof B1_2 (merge)"] - - stb11 --> stb21 - stb12 --> stb21 - - st21 --> bp11 - runtime --> bp11 - - bp21["BlockProof (proveBlock)"] - - stb21 --> bp21 - bp13 --> bp21 - -``` \ No newline at end of file diff --git a/docs/sequencer/sequencer-events.md b/docs/sequencer/sequencer-events.md deleted file mode 100644 index 9cf3ab777..000000000 --- a/docs/sequencer/sequencer-events.md +++ /dev/null @@ -1,14 +0,0 @@ -# Sequencer events - -Following events are available for each module: - -All BlockTriggers: -- `block-produced: Block` -- `block-metadata-produced: BlockWithResult` -- `batch-produced: Batch` - -TimedBlockTrigger: -- `tick: number`: Number of milliseconds that passed since start of sequencer - -All Mempools: -- `mempool-transaction-added: PendingTransaction` diff --git a/docs/sequencer/st-merging.md b/docs/sequencer/st-merging.md deleted file mode 100644 index 5416cbcb6..000000000 --- a/docs/sequencer/st-merging.md +++ /dev/null @@ -1,38 +0,0 @@ -# State Transition merging - -Runtimes emit seperate STs for get() and set() calls. -So for a typical chain of a .get() and .set() for path p, the emitted STs would look like: -{ path: p, from: { isSome: true, value: 5 }, to: { isSome: false, value: 0 } } -{ path: p, from: { isSome: true, value: 5 }, to: { isSome: true, value: 10 } } - -These two STs can be merged into one by using the first occurring from option, and the last to option that is some. -We have to assert that both the paths match and the values match. -That meaning that the intermediate values are consistent across that set of STs. - -### Implementation - -There are fundamentally two ways to implement this: -Static merging and dynamic merging. -Static merging is baked into the circuit and relies on a certain key to be the same across all possible executions of the circuit. -It is way less flexible and the results are sometimes not optimal, especially if we think into the direction of dynamic keys. - -Therefore, we go for dynamic merging, where we determine their reducability at runtime as a generic circuit function. -The way this works is that push STs onto the stack and remember the value of the latest one together with it's preimage. -(Remember, `commitment = hash(preimage, ...value)`). -And then, for every new value we do the reduction, and if a reduction is possible, -we "pop" the value from the list again and push only the merged ST on the list by using the previously saved preimage. -`commitment = hash(preimage, ...mergedST)` - -We implement it only on the level of ProvableStateTransitions and offer utils to filter a normal StateTransition list too to match the calculated hashlist commitment. - -Important to note is that the reduction happens twice: -1. in-ciruit: In the runtimeMethod wrapper (& BlockProver) after executing the circuit, where we retrieve the ST[] and reduce it provably, so that we create the reduced stateTransitionsList commitement for the publicOutput -2. out-of-circuit: In the Execution & Tracing service. We do the multi-round simluation normally, but after we got the correct ST[], we run the reduction and use that going forward - -### Reference - -`StateTransitionReductionList` -Provable implementation of pushing reducable Statetransitions. -To be used in-circuit to get a reduced hashlist commitment - -`reduce` \ No newline at end of file diff --git a/jest.config.cjs b/jest.config.cjs index 95e567b85..5639e8b66 100644 --- a/jest.config.cjs +++ b/jest.config.cjs @@ -17,6 +17,15 @@ module.exports = { "^(\\.{1,2}/.*)\\.js$": "$1", }, + collectCoverage: true, + coverageReporters: ["json", "text", "text-summary"], + // TODO: enable + // coverageThreshold: { + // branches: 70, + // functions: 70, + // lines: 70, + // statements: 70, + // }, transform: { // '^.+\\.[tj]sx?$' to process js/ts with `ts-jest` // '^.+\\.m?[tj]sx?$' to process js/ts/mjs/mts with `ts-jest` diff --git a/package-lock.json b/package-lock.json index 4ff8bd83f..6bda644dc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,6 +12,7 @@ "packages/*" ], "dependencies": { + "istanbul-merge": "^2.0.0", "react-json-view-lite": "^1.4.0" }, "devDependencies": { @@ -32,12 +33,18 @@ "eslint-plugin-prettier": "^5.1.3", "eslint-plugin-sonarjs": "^0.25.1", "husky": "^8.0.3", + "istanbul-reporter-html-monorepo": "^1.1.3", "jest": "^29.4.0", "lerna": "^6.4.1", "lint-staged": "^13.1.0", "nx": "15.6.2", + "nyc": "^17.1.0", "prettier": "^3.2.5", "ts-jest": "^29.0.5", + "typedoc": "^0.27.6", + "typedoc-plugin-frontmatter": "^1.1.2", + "typedoc-plugin-inline-sources": "^1.2.0", + "typedoc-plugin-markdown": "^4.4.1", "typescript": "5.1" } }, @@ -751,6 +758,18 @@ "dev": true, "license": "MIT" }, + "node_modules/@gerrit0/mini-shiki": { + "version": "1.27.2", + "resolved": "https://registry.npmjs.org/@gerrit0/mini-shiki/-/mini-shiki-1.27.2.tgz", + "integrity": "sha512-GeWyHz8ao2gBiUW4OJnQDxXQnFgZQwwQk05t/CVVgNBN7/rK8XZ7xY6YhLVv9tH3VppWWmr9DCl3MwemB/i+Og==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/engine-oniguruma": "^1.27.2", + "@shikijs/types": "^1.27.2", + "@shikijs/vscode-textmate": "^10.0.1" + } + }, "node_modules/@graphql-tools/batch-delegate": { "version": "9.0.3", "license": "MIT", @@ -3466,6 +3485,35 @@ "version": "3.0.6", "license": "MIT" }, + "node_modules/@shikijs/engine-oniguruma": { + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-1.29.2.tgz", + "integrity": "sha512-7iiOx3SG8+g1MnlzZVDYiaeHe7Ez2Kf2HrJzdmGwkRisT7r4rak0e655AcM/tF9JG/kg5fMNYlLLKglbN7gBqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/types": "1.29.2", + "@shikijs/vscode-textmate": "^10.0.1" + } + }, + "node_modules/@shikijs/types": { + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-1.29.2.tgz", + "integrity": "sha512-VJjK0eIijTZf0QSTODEXCqinjBn0joAHQ+aPSBzrv4O2d/QSbsMw+ZeSRx03kV34Hy7NzUvV/7NqfYGRLrASmw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/vscode-textmate": "^10.0.1", + "@types/hast": "^3.0.4" + } + }, + "node_modules/@shikijs/vscode-textmate": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-10.0.1.tgz", + "integrity": "sha512-fTIQwLF+Qhuws31iw7Ncl1R3HUDtGwIipiJ9iU+UsDUwMhegFcQKQHd51nZjb7CArq0MvON8rbgCGQYWHUKAdg==", + "dev": true, + "license": "MIT" + }, "node_modules/@sigstore/bundle": { "version": "1.1.0", "dev": true, @@ -3799,6 +3847,16 @@ "graphql": "*" } }, + "node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, "node_modules/@types/http-assert": { "version": "1.5.5", "dev": true, @@ -3978,6 +4036,13 @@ "version": "2.0.3", "license": "MIT" }, + "node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/validator": { "version": "13.12.0", "license": "MIT" @@ -4577,11 +4642,31 @@ "node": ">= 8" } }, + "node_modules/append-transform": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz", + "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==", + "dev": true, + "license": "MIT", + "dependencies": { + "default-require-extensions": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/aproba": { "version": "2.0.0", "dev": true, "license": "ISC" }, + "node_modules/archy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==", + "dev": true, + "license": "MIT" + }, "node_modules/are-we-there-yet": { "version": "3.0.1", "dev": true, @@ -4607,7 +4692,6 @@ }, "node_modules/array-buffer-byte-length": { "version": "1.0.1", - "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.5", @@ -4698,7 +4782,6 @@ }, "node_modules/array.prototype.flatmap": { "version": "1.3.2", - "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.2", @@ -4715,7 +4798,6 @@ }, "node_modules/arraybuffer.prototype.slice": { "version": "1.0.3", - "dev": true, "license": "MIT", "dependencies": { "array-buffer-byte-length": "^1.0.1", @@ -4780,7 +4862,6 @@ }, "node_modules/available-typed-arrays": { "version": "1.0.7", - "dev": true, "license": "MIT", "dependencies": { "possible-typed-array-names": "^1.0.0" @@ -5317,9 +5398,63 @@ "node": ">=6" } }, + "node_modules/caching-transform": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", + "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasha": "^5.0.0", + "make-dir": "^3.0.0", + "package-hash": "^4.0.0", + "write-file-atomic": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/caching-transform/node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/caching-transform/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/caching-transform/node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, "node_modules/call-bind": { "version": "1.0.7", - "dev": true, "license": "MIT", "dependencies": { "es-define-property": "^1.0.0", @@ -5727,6 +5862,13 @@ "dev": true, "license": "ISC" }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true, + "license": "MIT" + }, "node_modules/compare-func": { "version": "2.0.0", "dev": true, @@ -6220,7 +6362,6 @@ }, "node_modules/data-view-buffer": { "version": "1.0.1", - "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.6", @@ -6236,7 +6377,6 @@ }, "node_modules/data-view-byte-length": { "version": "1.0.1", - "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.7", @@ -6252,7 +6392,6 @@ }, "node_modules/data-view-byte-offset": { "version": "1.0.0", - "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.6", @@ -6295,7 +6434,6 @@ }, "node_modules/decamelize": { "version": "1.2.0", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -6345,6 +6483,22 @@ "node": ">=0.10.0" } }, + "node_modules/default-require-extensions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.1.tgz", + "integrity": "sha512-eXTJmRbm2TIt9MgWTsOH1wEuhew6XGZcMeGKCtLedIg/NCsg1iBePXkceTdK4Fii7pzmN9tGsZhKzZ4h7O/fxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "strip-bom": "^4.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/defaults": { "version": "1.0.4", "dev": true, @@ -6358,7 +6512,6 @@ }, "node_modules/define-data-property": { "version": "1.1.4", - "dev": true, "license": "MIT", "dependencies": { "es-define-property": "^1.0.0", @@ -6382,7 +6535,6 @@ }, "node_modules/define-properties": { "version": "1.2.1", - "dev": true, "license": "MIT", "dependencies": { "define-data-property": "^1.0.1", @@ -6637,6 +6789,19 @@ "node": ">=8.6" } }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/env-paths": { "version": "2.2.1", "dev": true, @@ -6670,7 +6835,6 @@ }, "node_modules/es-abstract": { "version": "1.23.3", - "dev": true, "license": "MIT", "dependencies": { "array-buffer-byte-length": "^1.0.1", @@ -6729,7 +6893,6 @@ }, "node_modules/es-define-property": { "version": "1.0.0", - "dev": true, "license": "MIT", "dependencies": { "get-intrinsic": "^1.2.4" @@ -6740,7 +6903,6 @@ }, "node_modules/es-errors": { "version": "1.3.0", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -6748,7 +6910,6 @@ }, "node_modules/es-object-atoms": { "version": "1.0.0", - "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0" @@ -6759,7 +6920,6 @@ }, "node_modules/es-set-tostringtag": { "version": "2.0.3", - "dev": true, "license": "MIT", "dependencies": { "get-intrinsic": "^1.2.4", @@ -6772,7 +6932,6 @@ }, "node_modules/es-shim-unscopables": { "version": "1.0.2", - "dev": true, "license": "MIT", "dependencies": { "hasown": "^2.0.0" @@ -6780,7 +6939,6 @@ }, "node_modules/es-to-primitive": { "version": "1.2.1", - "dev": true, "license": "MIT", "dependencies": { "is-callable": "^1.1.4", @@ -6794,6 +6952,13 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/es6-error": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", + "dev": true, + "license": "MIT" + }, "node_modules/escalade": { "version": "3.1.2", "license": "MIT", @@ -7546,6 +7711,50 @@ "node": ">=8" } }, + "node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "license": "MIT", + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "node_modules/find-cache-dir/node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/find-cache-dir/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/find-node-modules": { "version": "2.1.3", "dev": true, @@ -7636,14 +7845,15 @@ }, "node_modules/for-each": { "version": "0.3.3", - "dev": true, "license": "MIT", "dependencies": { "is-callable": "^1.1.3" } }, "node_modules/foreground-child": { - "version": "3.2.1", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", "dev": true, "license": "ISC", "dependencies": { @@ -7688,6 +7898,27 @@ "node": ">= 0.6" } }, + "node_modules/fromentries": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", + "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, "node_modules/fs-constants": { "version": "1.0.0", "dev": true, @@ -7742,7 +7973,6 @@ }, "node_modules/function.prototype.name": { "version": "1.1.6", - "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.2", @@ -7759,7 +7989,6 @@ }, "node_modules/functions-have-names": { "version": "1.2.3", - "dev": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" @@ -7806,7 +8035,6 @@ }, "node_modules/get-intrinsic": { "version": "1.2.4", - "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -7954,7 +8182,6 @@ }, "node_modules/get-symbol-description": { "version": "1.0.2", - "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.5", @@ -8181,7 +8408,6 @@ }, "node_modules/globalthis": { "version": "1.0.4", - "dev": true, "license": "MIT", "dependencies": { "define-properties": "^1.2.1", @@ -8215,7 +8441,6 @@ }, "node_modules/gopd": { "version": "1.0.1", - "dev": true, "license": "MIT", "dependencies": { "get-intrinsic": "^1.1.3" @@ -8330,7 +8555,6 @@ }, "node_modules/has-bigints": { "version": "1.0.2", - "dev": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" @@ -8345,7 +8569,6 @@ }, "node_modules/has-property-descriptors": { "version": "1.0.2", - "dev": true, "license": "MIT", "dependencies": { "es-define-property": "^1.0.0" @@ -8356,7 +8579,6 @@ }, "node_modules/has-proto": { "version": "1.0.3", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -8393,6 +8615,33 @@ "dev": true, "license": "ISC" }, + "node_modules/hasha": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", + "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-stream": "^2.0.0", + "type-fest": "^0.8.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/hasha/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=8" + } + }, "node_modules/hasown": { "version": "2.0.2", "license": "MIT", @@ -9461,7 +9710,6 @@ }, "node_modules/internal-slot": { "version": "1.0.7", - "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -9509,7 +9757,6 @@ }, "node_modules/is-array-buffer": { "version": "3.0.4", - "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.2", @@ -9528,7 +9775,6 @@ }, "node_modules/is-bigint": { "version": "1.0.4", - "dev": true, "license": "MIT", "dependencies": { "has-bigints": "^1.0.1" @@ -9539,7 +9785,6 @@ }, "node_modules/is-boolean-object": { "version": "1.1.2", - "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.2", @@ -9554,7 +9799,6 @@ }, "node_modules/is-callable": { "version": "1.2.7", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -9592,7 +9836,6 @@ }, "node_modules/is-data-view": { "version": "1.0.1", - "dev": true, "license": "MIT", "dependencies": { "is-typed-array": "^1.1.13" @@ -9606,7 +9849,6 @@ }, "node_modules/is-date-object": { "version": "1.0.5", - "dev": true, "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" @@ -9702,7 +9944,6 @@ }, "node_modules/is-negative-zero": { "version": "2.0.3", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -9720,7 +9961,6 @@ }, "node_modules/is-number-object": { "version": "1.0.7", - "dev": true, "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" @@ -9774,7 +10014,6 @@ }, "node_modules/is-regex": { "version": "1.1.4", - "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.2", @@ -9789,7 +10028,6 @@ }, "node_modules/is-shared-array-buffer": { "version": "1.0.3", - "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.7" @@ -9821,7 +10059,6 @@ }, "node_modules/is-string": { "version": "1.0.7", - "dev": true, "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" @@ -9835,7 +10072,6 @@ }, "node_modules/is-symbol": { "version": "1.0.4", - "dev": true, "license": "MIT", "dependencies": { "has-symbols": "^1.0.2" @@ -9860,7 +10096,6 @@ }, "node_modules/is-typed-array": { "version": "1.1.13", - "dev": true, "license": "MIT", "dependencies": { "which-typed-array": "^1.1.14" @@ -9872,6 +10107,13 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "dev": true, + "license": "MIT" + }, "node_modules/is-unicode-supported": { "version": "0.1.0", "dev": true, @@ -9898,7 +10140,6 @@ }, "node_modules/is-weakref": { "version": "1.0.2", - "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.2" @@ -9928,7 +10169,6 @@ }, "node_modules/isarray": { "version": "2.0.5", - "dev": true, "license": "MIT" }, "node_modules/isexe": { @@ -9959,6 +10199,19 @@ "node": ">=8" } }, + "node_modules/istanbul-lib-hook": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz", + "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "append-transform": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/istanbul-lib-instrument": { "version": "6.0.3", "license": "BSD-3-Clause", @@ -9973,20 +10226,51 @@ "node": ">=10" } }, - "node_modules/istanbul-lib-report": { - "version": "3.0.1", - "license": "BSD-3-Clause", + "node_modules/istanbul-lib-processinfo": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.3.tgz", + "integrity": "sha512-NkwHbo3E00oybX6NGJi6ar0B29vxyvNwoC7eJ4G4Yq28UfY758Hgn/heV8VRFhevPED4LXfFz0DQ8z/0kw9zMg==", + "dev": true, + "license": "ISC", "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^4.0.0", - "supports-color": "^7.1.0" + "archy": "^1.0.0", + "cross-spawn": "^7.0.3", + "istanbul-lib-coverage": "^3.2.0", + "p-map": "^3.0.0", + "rimraf": "^3.0.0", + "uuid": "^8.3.2" }, "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/istanbul-lib-report/node_modules/has-flag": { - "version": "4.0.0", + "node_modules/istanbul-lib-processinfo/node_modules/p-map": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "license": "BSD-3-Clause", + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report/node_modules/has-flag": { + "version": "4.0.0", "license": "MIT", "engines": { "node": ">=8" @@ -10014,6 +10298,204 @@ "node": ">=10" } }, + "node_modules/istanbul-merge": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/istanbul-merge/-/istanbul-merge-2.0.0.tgz", + "integrity": "sha512-Y812/uTdnF5Qc2qWxA7jQOTkqpFLEr7BHy8mzUQFRJstTjPigNS1Bh3q06AbOhBZ7tZqrI4MZdMgG34KVnUn6w==", + "license": "MIT", + "dependencies": { + "array.prototype.flatmap": "^1.3.1", + "for-each": "^0.3.3", + "glob": "^7.2.3", + "istanbul-lib-coverage": "^3.2.0", + "mkdirp": "^0.5.6", + "yargs": "^15.4.1" + }, + "bin": { + "istanbul-merge": "bin/istanbul-merge" + }, + "engines": { + "node": ">= 8" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/istanbul-merge/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/istanbul-merge/node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/istanbul-merge/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/istanbul-merge/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/istanbul-merge/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-merge/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-merge/node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "license": "MIT", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/istanbul-merge/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/istanbul-merge/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-merge/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-merge/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "license": "ISC" + }, + "node_modules/istanbul-merge/node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "license": "MIT", + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-merge/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "license": "ISC", + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/istanbul-reporter-html-monorepo": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/istanbul-reporter-html-monorepo/-/istanbul-reporter-html-monorepo-1.1.3.tgz", + "integrity": "sha512-sHgPMoO69VOBQJrKFwEGq/tgBt5EJI+8ZyhBrZLyhEZ0oSobWU6b7eZzvFDQwCAFNgo62PmFOhRuLGQYxhB3HQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/istanbul-reports": "*", + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + } + }, "node_modules/istanbul-reports": { "version": "3.1.7", "license": "BSD-3-Clause", @@ -12268,6 +12750,16 @@ "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, + "node_modules/linkify-it": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "uc.micro": "^2.0.0" + } + }, "node_modules/lint-staged": { "version": "13.2.3", "dev": true, @@ -12547,6 +13039,13 @@ "license": "MIT", "peer": true }, + "node_modules/lodash.flattendeep": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", + "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==", + "dev": true, + "license": "MIT" + }, "node_modules/lodash.get": { "version": "4.4.2", "license": "MIT" @@ -12799,6 +13298,13 @@ "yallist": "^3.0.2" } }, + "node_modules/lunr": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", + "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", + "dev": true, + "license": "MIT" + }, "node_modules/luxon": { "version": "3.4.4", "license": "MIT", @@ -12995,6 +13501,31 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/markdown-it": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz", + "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1", + "entities": "^4.4.0", + "linkify-it": "^5.0.0", + "mdurl": "^2.0.0", + "punycode.js": "^2.3.1", + "uc.micro": "^2.1.0" + }, + "bin": { + "markdown-it": "bin/markdown-it.mjs" + } + }, + "node_modules/mdurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", + "dev": true, + "license": "MIT" + }, "node_modules/media-typer": { "version": "0.3.0", "license": "MIT", @@ -13277,7 +13808,6 @@ }, "node_modules/minimist": { "version": "1.2.7", - "dev": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" @@ -13728,6 +14258,19 @@ "dev": true, "license": "MIT" }, + "node_modules/node-preload": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz", + "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "process-on-spawn": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/node-releases": { "version": "2.0.14", "license": "MIT" @@ -14520,64 +15063,312 @@ "node": ">=12" } }, - "node_modules/o1js": { - "version": "1.7.0", - "license": "Apache-2.0", - "peer": true, + "node_modules/nyc": { + "version": "17.1.0", + "resolved": "https://registry.npmjs.org/nyc/-/nyc-17.1.0.tgz", + "integrity": "sha512-U42vQ4czpKa0QdI1hu950XuNhYqgoM+ZF1HT+VuUHL9hPfDPVvNQyltmMqdE9bUHMVa+8yNbc3QKTj8zQhlVxQ==", + "dev": true, + "license": "ISC", "dependencies": { - "blakejs": "1.2.1", - "cachedir": "^2.4.0", - "isomorphic-fetch": "^3.0.0", - "js-sha256": "^0.9.0", - "reflect-metadata": "^0.1.13", - "tslib": "^2.3.0" + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "caching-transform": "^4.0.0", + "convert-source-map": "^1.7.0", + "decamelize": "^1.2.0", + "find-cache-dir": "^3.2.0", + "find-up": "^4.1.0", + "foreground-child": "^3.3.0", + "get-package-type": "^0.1.0", + "glob": "^7.1.6", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-hook": "^3.0.0", + "istanbul-lib-instrument": "^6.0.2", + "istanbul-lib-processinfo": "^2.0.2", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.0.2", + "make-dir": "^3.0.0", + "node-preload": "^0.2.1", + "p-map": "^3.0.0", + "process-on-spawn": "^1.0.0", + "resolve-from": "^5.0.0", + "rimraf": "^3.0.0", + "signal-exit": "^3.0.2", + "spawn-wrap": "^2.0.0", + "test-exclude": "^6.0.0", + "yargs": "^15.0.2" }, "bin": { - "snarky-run": "src/build/run.js" + "nyc": "bin/nyc.js" }, "engines": { - "node": ">=18.14.0" - } - }, - "node_modules/o1js/node_modules/cachedir": { - "version": "2.4.0", - "license": "MIT", - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "engines": { - "node": ">=0.10.0" + "node": ">=18" } }, - "node_modules/object-inspect": { - "version": "1.13.2", + "node_modules/nyc/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, "engines": { - "node": ">= 0.4" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/object-keys": { - "version": "1.1.1", + "node_modules/nyc/node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" } }, - "node_modules/object.assign": { - "version": "4.1.5", + "node_modules/nyc/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/nyc/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/nyc/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true, + "license": "MIT" + }, + "node_modules/nyc/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/nyc/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/nyc/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/p-map": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/nyc/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/nyc/node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/o1js": { + "version": "1.7.0", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "blakejs": "1.2.1", + "cachedir": "^2.4.0", + "isomorphic-fetch": "^3.0.0", + "js-sha256": "^0.9.0", + "reflect-metadata": "^0.1.13", + "tslib": "^2.3.0" + }, + "bin": { + "snarky-run": "src/build/run.js" + }, + "engines": { + "node": ">=18.14.0" + } + }, + "node_modules/o1js/node_modules/cachedir": { + "version": "2.4.0", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.2", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.5", + "license": "MIT", "dependencies": { "call-bind": "^1.0.5", "define-properties": "^1.2.1", @@ -14932,6 +15723,22 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/package-hash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz", + "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "graceful-fs": "^4.1.15", + "hasha": "^5.0.0", + "lodash.flattendeep": "^4.4.0", + "release-zalgo": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/package-json-from-dist": { "version": "1.0.0", "dev": true, @@ -15369,7 +16176,6 @@ }, "node_modules/possible-typed-array-names": { "version": "1.0.0", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -15496,6 +16302,19 @@ "dev": true, "license": "MIT" }, + "node_modules/process-on-spawn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.1.0.tgz", + "integrity": "sha512-JOnOPQ/8TZgjs1JIH/m9ni7FfimjNa/PRx7y/Wb5qdItsnhO0jE4AT7fC0HjC28DUQWDr50dwSYZLdRMlqDq3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "fromentries": "^1.2.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/promise-all-reject-late": { "version": "1.0.1", "dev": true, @@ -15586,6 +16405,16 @@ "node": ">=6" } }, + "node_modules/punycode.js": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", + "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/pure-rand": { "version": "6.1.0", "funding": [ @@ -16021,7 +16850,6 @@ }, "node_modules/regexp.prototype.flags": { "version": "1.5.2", - "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.6", @@ -16036,6 +16864,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/release-zalgo": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", + "integrity": "sha512-gUAyHVHPPC5wdqX/LG4LWtRYtgjxyX78oanFNTMMyFEfOqdC54s3eE82imuWKbOeqYht2CrNf64Qb8vgmmtZGA==", + "dev": true, + "license": "ISC", + "dependencies": { + "es6-error": "^4.0.1" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/require-directory": { "version": "2.1.1", "license": "MIT", @@ -16052,6 +16893,12 @@ "node": ">=0.10.0" } }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "license": "ISC" + }, "node_modules/requireindex": { "version": "1.2.0", "dev": true, @@ -16196,7 +17043,6 @@ }, "node_modules/safe-array-concat": { "version": "1.1.2", - "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.7", @@ -16231,7 +17077,6 @@ }, "node_modules/safe-regex-test": { "version": "1.0.3", - "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.6", @@ -16271,12 +17116,10 @@ }, "node_modules/set-blocking": { "version": "2.0.0", - "dev": true, "license": "ISC" }, "node_modules/set-function-length": { "version": "1.2.2", - "dev": true, "license": "MIT", "dependencies": { "define-data-property": "^1.1.4", @@ -16292,7 +17135,6 @@ }, "node_modules/set-function-name": { "version": "2.0.2", - "dev": true, "license": "MIT", "dependencies": { "define-data-property": "^1.1.4", @@ -16338,7 +17180,6 @@ }, "node_modules/side-channel": { "version": "1.0.6", - "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.7", @@ -16555,6 +17396,64 @@ "source-map": "^0.6.0" } }, + "node_modules/spawn-wrap": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz", + "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^2.0.0", + "is-windows": "^1.0.2", + "make-dir": "^3.0.0", + "rimraf": "^3.0.0", + "signal-exit": "^3.0.2", + "which": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/spawn-wrap/node_modules/foreground-child": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", + "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/spawn-wrap/node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/spawn-wrap/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/spdx-correct": { "version": "3.2.0", "dev": true, @@ -16739,7 +17638,6 @@ }, "node_modules/string.prototype.trim": { "version": "1.2.9", - "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.7", @@ -16756,7 +17654,6 @@ }, "node_modules/string.prototype.trimend": { "version": "1.0.8", - "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.7", @@ -16769,7 +17666,6 @@ }, "node_modules/string.prototype.trimstart": { "version": "1.0.8", - "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.7", @@ -17473,7 +18369,6 @@ }, "node_modules/typed-array-buffer": { "version": "1.0.2", - "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.7", @@ -17486,7 +18381,6 @@ }, "node_modules/typed-array-byte-length": { "version": "1.0.1", - "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.7", @@ -17504,7 +18398,6 @@ }, "node_modules/typed-array-byte-offset": { "version": "1.0.2", - "dev": true, "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", @@ -17523,7 +18416,6 @@ }, "node_modules/typed-array-length": { "version": "1.0.6", - "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.7", @@ -17545,6 +18437,75 @@ "dev": true, "license": "MIT" }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/typedoc": { + "version": "0.27.6", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.27.6.tgz", + "integrity": "sha512-oBFRoh2Px6jFx366db0lLlihcalq/JzyCVp7Vaq1yphL/tbgx2e+bkpkCgJPunaPvPwoTOXSwasfklWHm7GfAw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@gerrit0/mini-shiki": "^1.24.0", + "lunr": "^2.3.9", + "markdown-it": "^14.1.0", + "minimatch": "^9.0.5", + "yaml": "^2.6.1" + }, + "bin": { + "typedoc": "bin/typedoc" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "typescript": "5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x || 5.5.x || 5.6.x || 5.7.x" + } + }, + "node_modules/typedoc-plugin-frontmatter": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/typedoc-plugin-frontmatter/-/typedoc-plugin-frontmatter-1.1.2.tgz", + "integrity": "sha512-ySNFQRqKjEM3IobtoND22LUuhpNLwPzTiAxTlqjn5uRLn8k8nqItvxWnWWRzaKMi870ZCvrz4wJHuVg+yqysmw==", + "dev": true, + "license": "MIT", + "dependencies": { + "yaml": "^2.3.4" + }, + "peerDependencies": { + "typedoc-plugin-markdown": ">=4.3.0" + } + }, + "node_modules/typedoc-plugin-inline-sources": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/typedoc-plugin-inline-sources/-/typedoc-plugin-inline-sources-1.2.0.tgz", + "integrity": "sha512-gCjief4B71vRJw25Lwl7J69DuxzDjjG6pvUUPmjxY3uePyzcFGiw4eqbq+tmIPLXlnKAQujmglX/G+ZDnLUzug==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "typedoc": "0.25.x || 0.26.x" + } + }, + "node_modules/typedoc-plugin-markdown": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/typedoc-plugin-markdown/-/typedoc-plugin-markdown-4.4.1.tgz", + "integrity": "sha512-fx23nSCvewI9IR8lzIYtzDphETcgTDuxKcmHKGD4lo36oexC+B1k4NaCOY58Snqb4OlE8OXDAGVcQXYYuLRCNw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "typedoc": "0.27.x" + } + }, "node_modules/typegraphql-prisma": { "version": "0.28.0", "resolved": "https://registry.npmjs.org/typegraphql-prisma/-/typegraphql-prisma-0.28.0.tgz", @@ -17590,6 +18551,13 @@ "version": "1.1.1", "license": "MIT" }, + "node_modules/uc.micro": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", + "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", + "dev": true, + "license": "MIT" + }, "node_modules/uglify-js": { "version": "3.18.0", "dev": true, @@ -17604,7 +18572,6 @@ }, "node_modules/unbox-primitive": { "version": "1.0.2", - "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.2", @@ -17860,7 +18827,6 @@ }, "node_modules/which-boxed-primitive": { "version": "1.0.2", - "dev": true, "license": "MIT", "dependencies": { "is-bigint": "^1.0.1", @@ -17873,9 +18839,14 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/which-module": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", + "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", + "license": "ISC" + }, "node_modules/which-typed-array": { "version": "1.1.15", - "dev": true, "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", @@ -18203,7 +19174,9 @@ "license": "ISC" }, "node_modules/yaml": { - "version": "2.4.5", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.7.0.tgz", + "integrity": "sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==", "dev": true, "license": "ISC", "bin": { diff --git a/package.json b/package.json index 9de23711f..8a2459e44 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,11 @@ "prisma:migrate": "npx lerna run prisma:migrate", "prisma:generate": "npx lerna run prisma:generate", "commit": "cz", - "publish:canary": "npx lerna publish prerelease --no-private --exact --yes --canary --preid develop --dist-tag latest --loglevel verbose --force-git-tag --force-publish" + "publish:canary": "npx lerna publish prerelease --no-private --exact --yes --canary --preid develop --dist-tag latest --loglevel verbose --force-git-tag --force-publish", + "typedoc": "typedoc", + "coverage:merge": "istanbul-merge --out coverage/coverage-final.json $(find ./coverage -name \"coverage-final.json\" -print)", + "coverage:report": "nyc -t ./coverage report --reporter=text && nyc -t ./coverage report --reporter=text-summary", + "coverage:report:html": "nyc -t ./coverage report --reporter=html --report-dir=./coverage/html" }, "private": true, "devDependencies": { @@ -38,13 +42,20 @@ "eslint-plugin-prettier": "^5.1.3", "eslint-plugin-sonarjs": "^0.25.1", "husky": "^8.0.3", + "istanbul-reporter-html-monorepo": "^1.1.3", "jest": "^29.4.0", "lerna": "^6.4.1", "lint-staged": "^13.1.0", "nx": "15.6.2", + "nyc": "^17.1.0", "prettier": "^3.2.5", "ts-jest": "^29.0.5", - "typescript": "5.1" + "typedoc": "^0.27.6", + "typedoc-plugin-frontmatter": "^1.1.2", + "typedoc-plugin-inline-sources": "^1.2.0", + "typedoc-plugin-markdown": "^4.4.1", + "typescript": "5.1", + "istanbul-merge": "^2.0.0" }, "workspaces": [ "packages/*" diff --git a/packages/api/jest.config.cjs b/packages/api/jest.config.cjs index 87e143bf4..dc7d9cd1f 100644 --- a/packages/api/jest.config.cjs +++ b/packages/api/jest.config.cjs @@ -1 +1,12 @@ -module.exports = require("../../jest.config.cjs"); +// @ts-ignore +const config = require("../../jest.config.cjs"); + +module.exports = { + ...config, + collectCoverageFrom: [ + "packages/api/src/**", + "!**/node_modules/**", + "!**/dist/**", + ], + coverageDirectory: "coverage/api", +}; diff --git a/packages/common/jest.config.cjs b/packages/common/jest.config.cjs index 87e143bf4..c30a7f2b9 100644 --- a/packages/common/jest.config.cjs +++ b/packages/common/jest.config.cjs @@ -1 +1,12 @@ -module.exports = require("../../jest.config.cjs"); +// @ts-ignore +const config = require("../../jest.config.cjs"); + +module.exports = { + ...config, + collectCoverageFrom: [ + "packages/common/src/**", + "!**/node_modules/**", + "!**/dist/**", + ], + coverageDirectory: "coverage/common", +}; diff --git a/packages/deployment/docker/base/entry.sh b/packages/deployment/docker/base/entry.sh index 37d7a9756..9afe6d702 100644 --- a/packages/deployment/docker/base/entry.sh +++ b/packages/deployment/docker/base/entry.sh @@ -5,4 +5,4 @@ if [[ ${DATABASE_URL} ]]; then npm run migrate; fi #LOGGING_LEVEL=${LOGGING_LEVEL} -node --experimental-vm-modules --experimental-wasm-modules --experimental-wasm-threads --es-module-specifier-resolution=node $@ \ No newline at end of file +node --experimental-vm-modules --experimental-wasm-modules --es-module-specifier-resolution=node $@ \ No newline at end of file diff --git a/packages/deployment/jest.config.cjs b/packages/deployment/jest.config.cjs index 87e143bf4..e334ba9c4 100644 --- a/packages/deployment/jest.config.cjs +++ b/packages/deployment/jest.config.cjs @@ -1 +1,12 @@ -module.exports = require("../../jest.config.cjs"); +// @ts-ignore +const config = require("../../jest.config.cjs"); + +module.exports = { + ...config, + collectCoverageFrom: [ + "packages/deployment/src/**", + "!**/node_modules/**", + "!**/dist/**", + ], + coverageDirectory: "coverage/deployment", +}; diff --git a/packages/indexer/jest.config.cjs b/packages/indexer/jest.config.cjs index 87e143bf4..78444a38f 100644 --- a/packages/indexer/jest.config.cjs +++ b/packages/indexer/jest.config.cjs @@ -1 +1,13 @@ -module.exports = require("../../jest.config.cjs"); +// @ts-ignore +const config = require("../../jest.config.cjs"); + +module.exports = { + ...config, + collectCoverageFrom: [ + "packages/indexer/src/**", + "!**/node_modules/**", + "!**/dist/**", + "!packages/indexer/src/api/generated/**", + ], + coverageDirectory: "coverage/indexer", +}; diff --git a/packages/library/jest.config.cjs b/packages/library/jest.config.cjs index 87e143bf4..4fbf44b8b 100644 --- a/packages/library/jest.config.cjs +++ b/packages/library/jest.config.cjs @@ -1 +1,12 @@ -module.exports = require("../../jest.config.cjs"); +// @ts-ignore +const config = require("../../jest.config.cjs"); + +module.exports = { + ...config, + collectCoverageFrom: [ + "packages/library/src/**", + "!**/node_modules/**", + "!**/dist/**", + ], + coverageDirectory: "coverage/library", +}; diff --git a/packages/module/jest.config.cjs b/packages/module/jest.config.cjs index 87e143bf4..fcaaf573b 100644 --- a/packages/module/jest.config.cjs +++ b/packages/module/jest.config.cjs @@ -1 +1,12 @@ -module.exports = require("../../jest.config.cjs"); +// @ts-ignore +const config = require("../../jest.config.cjs"); + +module.exports = { + ...config, + collectCoverageFrom: [ + "packages/module/src/**", + "!**/node_modules/**", + "!**/dist/**", + ], + coverageDirectory: "coverage/module", +}; diff --git a/packages/persistance/jest.config.cjs b/packages/persistance/jest.config.cjs index 87e143bf4..b854a4898 100644 --- a/packages/persistance/jest.config.cjs +++ b/packages/persistance/jest.config.cjs @@ -1 +1,12 @@ -module.exports = require("../../jest.config.cjs"); +// @ts-ignore +const config = require("../../jest.config.cjs"); + +module.exports = { + ...config, + collectCoverageFrom: [ + "packages/persistance/src/**", + "!**/node_modules/**", + "!**/dist/**", + ], + coverageDirectory: "coverage/persistance", +}; diff --git a/packages/processor/jest.config.cjs b/packages/processor/jest.config.cjs index 87e143bf4..70d590b89 100644 --- a/packages/processor/jest.config.cjs +++ b/packages/processor/jest.config.cjs @@ -1 +1,12 @@ -module.exports = require("../../jest.config.cjs"); +// @ts-ignore +const config = require("../../jest.config.cjs"); + +module.exports = { + ...config, + collectCoverageFrom: [ + "packages/processor/src/**", + "!**/node_modules/**", + "!**/dist/**", + ], + coverageDirectory: "coverage/processor", +}; diff --git a/packages/protocol/jest.config.cjs b/packages/protocol/jest.config.cjs index 87e143bf4..7cfb7dcea 100644 --- a/packages/protocol/jest.config.cjs +++ b/packages/protocol/jest.config.cjs @@ -1 +1,12 @@ -module.exports = require("../../jest.config.cjs"); +// @ts-ignore +const config = require("../../jest.config.cjs"); + +module.exports = { + ...config, + collectCoverageFrom: [ + "packages/protocol/src/**", + "!**/node_modules/**", + "!**/dist/**", + ], + coverageDirectory: "coverage/protocol", +}; diff --git a/packages/sdk/jest.config.cjs b/packages/sdk/jest.config.cjs index 87e143bf4..ba754d773 100644 --- a/packages/sdk/jest.config.cjs +++ b/packages/sdk/jest.config.cjs @@ -1 +1,12 @@ -module.exports = require("../../jest.config.cjs"); +// @ts-ignore +const config = require("../../jest.config.cjs"); + +module.exports = { + ...config, + collectCoverageFrom: [ + "packages/sdk/src/**", + "!**/node_modules/**", + "!**/dist/**", + ], + coverageDirectory: "coverage/sdk", +}; diff --git a/packages/sequencer/jest.config.cjs b/packages/sequencer/jest.config.cjs index 87e143bf4..2a35fc6b8 100644 --- a/packages/sequencer/jest.config.cjs +++ b/packages/sequencer/jest.config.cjs @@ -1 +1,12 @@ -module.exports = require("../../jest.config.cjs"); +// @ts-ignore +const config = require("../../jest.config.cjs"); + +module.exports = { + ...config, + collectCoverageFrom: [ + "packages/sequencer/src/**", + "!**/node_modules/**", + "!**/dist/**", + ], + coverageDirectory: "coverage/sequencer", +}; diff --git a/packages/stack/jest.config.cjs b/packages/stack/jest.config.cjs index 87e143bf4..b5ac67740 100644 --- a/packages/stack/jest.config.cjs +++ b/packages/stack/jest.config.cjs @@ -1 +1,12 @@ -module.exports = require("../../jest.config.cjs"); +// @ts-ignore +const config = require("../../jest.config.cjs"); + +module.exports = { + ...config, + collectCoverageFrom: [ + "packages/stack/src/**", + "!**/node_modules/**", + "!**/dist/**", + ], + coverageDirectory: "coverage/stack", +}; diff --git a/specs/protocol/Block-hooks-network-state.md b/specs/protocol/Block-hooks-network-state.md deleted file mode 100644 index 90c77ce11..000000000 --- a/specs/protocol/Block-hooks-network-state.md +++ /dev/null @@ -1,49 +0,0 @@ -## Block Hooks and Network State - -For our current architecture, network state is very loosely embedded into the provers and follows no pre-defined flow. -That is because we don't have a concept of a "block" inside our provers, only transaction batches. -So in order to give the user this notion of a "block", we have to enforce it through custom logic. - -## From and to network state - -Network state is the underlying principle that allows us to access some kind of global immutable state inside our runtime, that is somehow -provided from the outside and follows rules that somehow rely on verification on the settlement layer. -In order to transition between sub-states intra-batch, we have a *from* and a *to* network state that are hashed and encoded inside the proofs public input. - -# Hooks - -We implement two different types of hooks - -`beforeBundle()` - will be executed at the start of a bundle -`afterBundle()` - will be executed after the end of a bundle - -Currently, they receive as parameters: -- The current NetworkState -- THe current state of the blockprover including stateRoot and transactionsHash - -Both hooks have one responsibility: -Mutate an input NetworkState to a new NetworkState. -i.e. `(NetworkState, prover_data) => NetworkState` - -The resulting NetworkState will subsequently be used by the next bundle. -Obviously, beforeBundle() will receive the result of the prior afterBundle(). - -## How do we decide when to execute a hook? - -We want to execute the beforeBundle hook when `currentTransactionsHash == Field(0)` -and the afterBundle hook only in a provable action that closes the bundle (i.e. doesn't allow any further additions to it). - -This however needs the bundles encoded as a merkletree, which is going to be done in future work. -Currently, the opening and closing can be performed arbitrarily by the sequencer through the indication of the `BundlePositionType`. -- "First" -> beforeBundle() -- "Middle" -> - -- "Last" -> afterBundle() - -## Why the seperation in before and after hooks? - -In order for the networkstate to incorporate information about the last completed bundle, we need to compute the result in the prior block. -This is because we have no access to the previous bundle in the next block and therefore can't make assertions about it. - -## Future TODOs: -- Make the NetworkState struct configurable through modularity -- Encode the bundle[] as a merkletree parallel to encoding as hashlist \ No newline at end of file diff --git a/typedoc-title-annotate.mjs b/typedoc-title-annotate.mjs new file mode 100644 index 000000000..a01772092 --- /dev/null +++ b/typedoc-title-annotate.mjs @@ -0,0 +1,21 @@ +// @ts-check +import { ReflectionKind } from "typedoc"; +import { MarkdownPageEvent } from "typedoc-plugin-markdown"; + +/** + * @param {import('typedoc-plugin-markdown').MarkdownApplication} app + */ +export function load(app) { + app.renderer.on( + MarkdownPageEvent.BEGIN, + /** @param {import('typedoc-plugin-markdown').MarkdownPageEvent} page */ + (page) => { + page.frontmatter = { + // e.g add a title + title: page.model?.name, + // spread the existing frontmatter + ...page.frontmatter, + }; + } + ); +} diff --git a/typedoc.json b/typedoc.json new file mode 100644 index 000000000..a42db3bab --- /dev/null +++ b/typedoc.json @@ -0,0 +1,10 @@ +{ + "plugin": [ + "typedoc-plugin-markdown", + "typedoc-plugin-inline-sources", + "typedoc-plugin-frontmatter", + "./typedoc-title-annotate.mjs" + ], + "entryPoints": ["packages/*"], + "entryPointStrategy": "packages" +}