From 3047a367ae1493c2cdd34bee3d5d4406aadec971 Mon Sep 17 00:00:00 2001 From: Pavel Ivanov Date: Sun, 18 Aug 2024 21:06:57 +0300 Subject: [PATCH 1/8] [perf] - wasm optimisations --- .gitignore | 1 + benchmark/README.md | 700 +- benchmark/package.json | 2 +- examples/WASM-FILE-SIZE-COMPARISON.md | 37 + examples/package.json | 2 +- package.json | 4 +- packages/near-contract-standards/package.json | 3 +- packages/near-sdk-js/builder/builder.c | 192 +- packages/near-sdk-js/lib/cli/cli.js | 31 +- packages/near-sdk-js/lib/cli/post-install.js | 19 +- packages/near-sdk-js/lib/types/index.d.ts | 9 + packages/near-sdk-js/lib/utils.d.ts | 1 + packages/near-sdk-js/lib/utils.js | 48 +- packages/near-sdk-js/package.json | 7 +- packages/near-sdk-js/src/cli/cli.ts | 37 +- packages/near-sdk-js/src/cli/post-install.ts | 30 +- packages/near-sdk-js/src/types/index.ts | 11 + packages/near-sdk-js/src/utils.ts | 58 +- packages/near-sdk-js/tsconfig.json | 1 + pnpm-lock.yaml | 5841 ++++++++++------- tests/package.json | 2 +- 21 files changed, 4031 insertions(+), 3005 deletions(-) create mode 100644 examples/WASM-FILE-SIZE-COMPARISON.md diff --git a/.gitignore b/.gitignore index 9ac896ba9..2061d09e9 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +.DS_Store node_modules vendor .idea diff --git a/benchmark/README.md b/benchmark/README.md index a17199dc0..39f18da60 100644 --- a/benchmark/README.md +++ b/benchmark/README.md @@ -2,455 +2,293 @@ ## Summary -NEAR-SDK-JS bundles a bytecode VM with the contract bytecode to a wasm file. Currently, the bytecode VM is the QuickJS runtime with interface to NEAR and the contract bytecode is compiled from JavaScript source code with QuickJS Compiler (QJSC). +NEAR-SDK-JS bundles a bytecode VM with the contract bytecode to a wasm file. Currently, the bytecode VM is the QuickJS runtime with an interface to NEAR, and the contract bytecode is compiled from JavaScript source code with QuickJS Compiler (QJSC). This results in: -- Size of a minimal contract is 500K, which is also the size of the bytecode VM. -- Bytecode is more compact than wasm. Complex contract in JS adds less bytes to the equivalent wasm compiled from Rust, but due to the initial 500K size, the result contract is still bigger and within same order of magnitude: several hundred KB. -- For contract that bottlenecks at calling the host functions are using similar gas in JS and Rust. -- For contract that does a lot of computation in JS, the JS bytecode uses significantly more gas. -- For a real world contract, if it doesn't including complex logic in JavaScript, it's usually sufficient, consider the complexity of the near contract standards. -- For more complex logic, We suggest to bench the most expensive contract call, including most complex path of cross contract calls, to determine whether it fits 300T Gas limit. +- Size of a minimal contract is `479K`, which is also the size of the bytecode VM. +- Bytecode is more compact than wasm. Complex contract in JS adds fewer bytes to the equivalent wasm compiled from Rust, but due to the initial `479K` size, the resulting contract is still bigger and within the same order of magnitude: several hundred KB. +- For contracts that bottleneck at calling the host functions, similar gas is used in JS and Rust. +- For contracts that do a lot of computation in JS, the JS bytecode uses significantly more gas. +- For a real-world contract, if it doesn't include complex logic in JavaScript, it's usually sufficient, considering the complexity of the NEAR contract standards. +- For more complex logic, we suggest benching the most expensive contract call, including the most complex path of cross-contract calls, to determine whether it fits the 300T gas limit. ## Detailed gas benchmark -### A minimal contract - -- RS lowlevel minimal contract - - Gas used to convert transaction to receipt: 2.43T - - Gas used to execute the receipt (actual contract call): 2.43T - - CONTRACT_LOADING_BASE : 0.00004T - - CONTRACT_LOADING_BYTES : 0.00005T - - Gas used to refund unused gas: 0.22318T - - Total gas used: 5.08T -- JS lowlevel minimal contract - - Gas used to convert transaction to receipt: 2.43T - - Gas used to execute the receipt (actual contract call): 7.07T - - CONTRACT_LOADING_BASE : 0.00004T - - CONTRACT_LOADING_BYTES : 0.11132T - - WASM_INSTRUCTION : 4.53T - - Gas used to refund unused gas: 0.22318T - - Total gas used: 9.72T - -In the very minimal contract the JS adds about `1.8T` gas. The major difference is loading the QuickJS VM and near-sdk-js uses 4.53T Gas. The 500K contract loading just adds 0.1T Gas. - -### A highlevel minimal contract (using nearbindgen) - -- highlevel-minimal.ava › RS highlevel minimal contract - - Gas used to convert transaction to receipt: 2.43T - - Gas used to execute the receipt (actual contract call): 2.63T - - BASE : 0.79G - - CONTRACT_LOADING_BASE : 0.04G - - CONTRACT_LOADING_BYTES : 35.46G - - READ_CACHED_TRIE_NODE : 4.56G - - READ_MEMORY_BASE : 7.83G - - READ_MEMORY_BYTE : 0.04G - - STORAGE_READ_BASE : 56.36G - - STORAGE_READ_KEY_BYTE : 0.15G - - STORAGE_WRITE_BASE : 64.2G - - STORAGE_WRITE_KEY_BYTE : 0.35G - - TOUCHING_TRIE_NODE : 32.2G - - WASM_INSTRUCTION : 0.46G - - WRITE_MEMORY_BASE : 2.8G - - WRITE_MEMORY_BYTE : 0.04G - - Gas used to refund unused gas: 223.18G - - Total gas used: 5.28T -- highlevel-minimal.ava › JS highlevel minimal contract - - Gas used to convert transaction to receipt: 2.43T - - Gas used to execute the receipt (actual contract call): 8.39T - - BASE : 1.59G - - CONTRACT_LOADING_BASE : 0.04G - - CONTRACT_LOADING_BYTES : 112.03G - - READ_CACHED_TRIE_NODE : 6.84G - - READ_MEMORY_BASE : 7.83G - - READ_MEMORY_BYTE : 0.05G - - READ_REGISTER_BASE : 2.52G - - READ_REGISTER_BYTE : 0G - - STORAGE_READ_BASE : 56.36G - - STORAGE_READ_KEY_BYTE : 0.15G - - STORAGE_WRITE_BASE : 64.2G - - STORAGE_WRITE_KEY_BYTE : 0.35G - - STORAGE_WRITE_VALUE_BYTE : 0.06G - - TOUCHING_TRIE_NODE : 48.31G - - WASM_INSTRUCTION : 5.66T - - WRITE_MEMORY_BASE : 5.61G - - WRITE_MEMORY_BYTE : 0.05G - - WRITE_REGISTER_BASE : 2.87G - - WRITE_REGISTER_BYTE : 0.01G - - Gas used to refund unused gas: 223.18G - - Total gas used: 11.05T - -JS `@NearBindgen` is more expensive, the major difference is in `WASM_INSTRUCTION`, because `@NearBindgen` does some class, object manipulation work, but Rust `near_bindgen` is a compile time code generation macro. Deduct the 4.5T loading VM and near-sdk-js, it's about 1T gas overhead. - -### Low level API - -- RS lowlevel API contract - - Gas used to convert transaction to receipt: 2.43T - - Gas used to execute the receipt (actual contract call): 2.53T - - BASE : 0.00026T - - CONTRACT_LOADING_BASE : 0.00004T - - CONTRACT_LOADING_BYTES : 0.00008T - - READ_MEMORY_BASE : 0.00522T - - READ_MEMORY_BYTE : 0.00008T - - STORAGE_WRITE_BASE : 0.0642T - - STORAGE_WRITE_KEY_BYTE : 0.0007T - - STORAGE_WRITE_VALUE_BYTE : 0.00031T - - TOUCHING_TRIE_NODE : 0.0322T - - WASM_INSTRUCTION : 0.00002T - - Gas used to refund unused gas: 0.22318T - - Total gas used: 5.18T -- JS lowlevel API contract - - Gas used to convert transaction to receipt: 2.43T - - Gas used to execute the receipt (actual contract call): 7.8T - - BASE : 0.00026T - - CONTRACT_LOADING_BASE : 0.00004T - - CONTRACT_LOADING_BYTES : 0.11119T - - READ_MEMORY_BASE : 0.00522T - - READ_MEMORY_BYTE : 0.00008T - - STORAGE_WRITE_BASE : 0.0642T - - STORAGE_WRITE_EVICTED_BYTE : 0.00032T - - STORAGE_WRITE_KEY_BYTE : 0.0007T - - STORAGE_WRITE_VALUE_BYTE : 0.00031T - - TOUCHING_TRIE_NODE : 0.09661T - - WASM_INSTRUCTION : 5.09T - - WRITE_REGISTER_BASE : 0.00287T - - WRITE_REGISTER_BYTE : 0.00004T - - Gas used to refund unused gas: 0.22318T - - Total gas used: 10.45T -- JS lowlevel API contract, call many - - Gas used to convert transaction to receipt: 2.43T - - Gas used to execute the receipt (actual contract call): 8.47T - - BASE : 0.00265T - - CONTRACT_LOADING_BASE : 0.00004T - - CONTRACT_LOADING_BYTES : 0.11119T - - READ_MEMORY_BASE : 0.0522T - - READ_MEMORY_BYTE : 0.00076T - - STORAGE_WRITE_BASE : 0.64197T - - STORAGE_WRITE_EVICTED_BYTE : 0.00289T - - STORAGE_WRITE_KEY_BYTE : 0.00705T - - STORAGE_WRITE_VALUE_BYTE : 0.0031T - - TOUCHING_TRIE_NODE : 0.04831T - - WASM_INSTRUCTION : 5.14T - - WRITE_REGISTER_BASE : 0.02579T - - WRITE_REGISTER_BYTE : 0.00034T - - Gas used to refund unused gas: 0.22318T - - Total gas used: 11.12T - -In this case, JS lowlevel API contract uses same gas in the storage write API part (`STORAGE_WRITE_BASE` / `STORAGE_WRITE_KEY_BYTE` / `STORAGE_WRITE_VALUE_BYTE` ). The major excessive gas is due to the overhead of initialize QuickJS VM and loading near-sdk-js. We can see this more obviously by calling storage write for 10 times ("call many tests" in above). +--- +### A Minimal Contract + +| lowlevel minimal contract | Rust | JS Before Opt | JS After Opt | JS % Diff | +| :-------------------------------------- | ------------------: | ------------------: | ------------------: | ---------------: | +| Convert transaction to receipt | 2.43T | 2.43T | 2.43T | 0% | +| Execute the receipt (actual contract call) | 2.43T | 7.07T | 4.48T | -36.6% | +| CONTRACT_LOADING_BASE | 0.00004T | 0.00004T | 0.00004T | 0% | +| CONTRACT_LOADING_BYTES | 0.00005T | 0.11132T | 0.10399T | -6.57% | +| WASM_INSTRUCTION | 0.00001T | 4.53T | 1.94T | -57.19% | +| Refund unused gas | 0.22318T | 0.22318T | 0.22318T | 0% | +| Total gas used | 5.08T | 9.72T | 7.13T | -26.63% | + +In the very minimal contract, the optimized JS implementation adds about `2.05T` more gas compared to the Rust version. The significant difference is primarily due to the WASM_INSTRUCTION overhead associated with loading and executing the QuickJS VM, which accounts for `1.94T` gas in the optimized version. + +
+ +--- + +### A Highlevel Minimal Contract (using `@nearbindgen`) + +| highlevel-minimal.ava | Rust | JS Before Opt | JS After Opt | JS % Diff | +| :-------------------------------------- | ------------------: | ------------------: | ------------------: | ---------------: | +| Convert transaction to receipt | 2.43T | 2.43T | 2.43T | 0% | +| Execute the receipt (actual contract call) | 2.63T | 8.39T | 5.26T | -37.33% | +| BASE | 0.00079T | 1.59T | 0.00159T | -99.9% | +| CONTRACT_LOADING_BASE | 0.00004T | 0.00004T | 0.00004T | 0% | +| CONTRACT_LOADING_BYTES | 0.03546T | 0.11203T | 0.1048T | -6.45% | +| READ_MEMORY_BASE | 0.00783T | 7.83T | 0.00783T | -99.9% | +| READ_MEMORY_BYTE | 0.00004T | 0.05T | 0.00005T | -99.9% | +| STORAGE_READ_BASE | 0.05636T | 56.36T | 0.05636T | -99.9% | +| STORAGE_READ_KEY_BYTE | 0.00015T | 0.15T | 0.00015T | -99.9% | +| STORAGE_WRITE_BASE | 0.0642T | 64.2T | 0.0642T | -99.9% | +| STORAGE_WRITE_KEY_BYTE | 0.00035T | 0.35T | 0.00035T | -99.9% | +| STORAGE_WRITE_VALUE_BYTE | 0.00006T | 0.06T | 0.00006T | -99.9% | +| TOUCHING_TRIE_NODE | 0.0322T | 48.31T | 0.0322T | -99.9% | +| WASM_INSTRUCTION | 0.00052T | 5.66T | 2.56T | -54.7% | +| WRITE_MEMORY_BASE | 0.0028T | 5.61T | 0.00561T | -99.9% | +| WRITE_MEMORY_BYTE | 0.00004T | 0.05T | 0.00005T | -99.9% | +| WRITE_REGISTER_BASE | 0.00287T | 2.87T | 0.00287T | -99.9% | +| WRITE_REGISTER_BYTE | 0.00001T | 0.01T | 0.00001T | -99.9% | +| Refund unused gas | 0.22318T | 0.22318T | 0.22318T | 0% | +| Total gas used | 5.28T | 11.05T | 7.91T | -28.4% | + +JS `@NearBindgen` is more expensive, the major difference is in `WASM_INSTRUCTION`, because `@NearBindgen` does some class, object manipulation work, but Rust `near_bindgen` is a compile-time code generation macro. Deduct the `4.5T` loading VM and near-sdk-js, it's about `1.04T` gas overhead. +The JavaScript implementation using `@NearBindgen` is more expensive, primarily due to the overhead in `WASM_INSTRUCTION`. This difference arises because `@NearBindgen` performs runtime class and object manipulation, whereas the Rust `near_bindgen` is a compile-time code generation macro, which is more efficient. + +
+ +--- + +### Low-Level API + +| | Rust | JS Before Opt | JS After Opt | JS % Diff | +| :-------------------------------------- | ------------------: | ------------------: | ------------------: | ---------------: | +| Convert transaction to receipt | 2.43T | 2.43T | 2.43T | 0% | +| Execute the receipt (actual contract call) | 2.53T | 7.8T | 5.19T | -33.46% | +| BASE | 0.00026T | 0.00026T | 0.00026T | 0% | +| CONTRACT_LOADING_BASE | 0.00004T | 0.00004T | 0.00004T | 0% | +| CONTRACT_LOADING_BYTES | 0.00008T | 0.11119T | 0.10377T | -6.68% | +| READ_MEMORY_BASE | 0.00522T | 0.00522T | 0.00522T | 0% | +| READ_MEMORY_BYTE | 0.00008T | 0.00008T | 0.00008T | 0% | +| STORAGE_WRITE_BASE | 0.0642T | 0.0642T | 0.0642T | 0% | +| STORAGE_WRITE_KEY_BYTE | 0.0007T | 0.0007T | 0.0007T | 0% | +| STORAGE_WRITE_VALUE_BYTE | 0.00031T | 0.00031T | 0.00031T | 0% | +| TOUCHING_TRIE_NODE | 0.0322T | 0.09661T | 0.06441T | -33.31% | +| WASM_INSTRUCTION | 0.00002T | 5.09T | 2.52T | -50.49% | +| WRITE_REGISTER_BASE | 0.00287T | 0.00287T | 0.00287T | 0% | +| WRITE_REGISTER_BYTE | 0.00004T | 0.00004T | 0.00004T | 0% | +| Refund unused gas | 0.22318T | 0.22318T | 0.22318T | 0% | +| Total gas used | 5.18T | 10.45T | 7.85T | -24.89% | + +
+ +### Low-Level API (Call Many) + +| | Rust | JS Before Opt | JS After Opt | JS % Diff | +| :-------------------------------------- | ------------------: | ------------------: | ------------------: | ---------------: | +| Convert transaction to receipt | 2.43T | 2.43T | 2.43T | 0% | +| Execute the receipt (actual contract call) | 2.53T | 8.47T | 5.85T | -30.93% | +| BASE | 0.00026T | 0.00265T | 0.00265T | 0% | +| CONTRACT_LOADING_BASE | 0.00004T | 0.00004T | 0.00004T | 0% | +| CONTRACT_LOADING_BYTES | 0.00008T | 0.11119T | 0.10377T | -6.68% | +| READ_MEMORY_BASE | 0.00522T | 0.0522T | 0.0522T | 0% | +| READ_MEMORY_BYTE | 0.00008T | 0.00076T | 0.00076T | 0% | +| STORAGE_WRITE_BASE | 0.0642T | 0.64197T | 0.64197T | 0% | +| STORAGE_WRITE_EVICTED_BYTE | 0.00032T | 0.00289T | 0.00289T | 0% | +| STORAGE_WRITE_KEY_BYTE | 0.0007T | 0.00705T | 0.00705T | 0% | +| STORAGE_WRITE_VALUE_BYTE | 0.00031T | 0.0031T | 0.0031T | 0% | +| TOUCHING_TRIE_NODE | 0.04831T | 0.0322T | 0.0322T | 0% | +| WASM_INSTRUCTION | 0.00002T | 5.14T | 2.55T | -50.48% | +| WRITE_REGISTER_BASE | 0.00287T | 0.02579T | 0.02579T | 0% | +| WRITE_REGISTER_BYTE | 0.00004T | 0.00034T | 0.00034T | 0% | +| Refund unused gas | 0.22318T | 0.22318T | 0.22318T | 0% | +| Total gas used | 5.18T | 11.12T | 8.51T | -23.47% | + +In this case, the JS low-level API contract uses the same gas in the storage write API part (`STORAGE_WRITE_BASE` / `STORAGE_WRITE_KEY_BYTE` / `STORAGE_WRITE_VALUE_BYTE`). The major excessive gas is due to the overhead of initializing QuickJS VM and loading near-sdk-js. We can see this more obviously by calling storage write 10 times ("call many tests" in above). + +
+ +--- ### Highlevel collection -- RS highlevel collection contract - - Gas used to convert transaction to receipt: 2.43T - - Gas used to execute the receipt (actual contract call): 3.32T - - BASE : 3.18G - - CONTRACT_LOADING_BASE : 0.04G - - CONTRACT_LOADING_BYTES : 70.94G - - READ_CACHED_TRIE_NODE : 95.76G - - READ_MEMORY_BASE : 26.1G - - READ_MEMORY_BYTE : 1.87G - - READ_REGISTER_BASE : 5.03G - - READ_REGISTER_BYTE : 0.03G - - STORAGE_READ_BASE : 112.71G - - STORAGE_READ_KEY_BYTE : 3.44G - - STORAGE_READ_VALUE_BYTE : 0.19G - - STORAGE_WRITE_BASE : 256.79G - - STORAGE_WRITE_EVICTED_BYTE : 1.09G - - STORAGE_WRITE_KEY_BYTE : 9.23G - - STORAGE_WRITE_VALUE_BYTE : 7.75G - - TOUCHING_TRIE_NODE : 257.63G - - WASM_INSTRUCTION : 16.36G - - WRITE_MEMORY_BASE : 8.41G - - WRITE_MEMORY_BYTE : 0.74G - - WRITE_REGISTER_BASE : 8.6G - - WRITE_REGISTER_BYTE : 1.1G - - Gas used to refund unused gas: 223.18G - - Total gas used: 5.97T -- JS highlevel collection contract - - Gas used to convert transaction to receipt: 2.43T - - Gas used to execute the receipt (actual contract call): 10.06T - - BASE : 2.91G - - CONTRACT_LOADING_BASE : 0.04G - - CONTRACT_LOADING_BYTES : 113.46G - - READ_CACHED_TRIE_NODE : 72.96G - - READ_MEMORY_BASE : 20.88G - - READ_MEMORY_BYTE : 2G - - READ_REGISTER_BASE : 5.03G - - READ_REGISTER_BYTE : 0.03G - - STORAGE_READ_BASE : 112.71G - - STORAGE_READ_KEY_BYTE : 3.31G - - STORAGE_READ_VALUE_BYTE : 0.53G - - STORAGE_WRITE_BASE : 192.59G - - STORAGE_WRITE_EVICTED_BYTE : 3.02G - - STORAGE_WRITE_KEY_BYTE : 7.96G - - STORAGE_WRITE_VALUE_BYTE : 9.49G - - TOUCHING_TRIE_NODE : 209.33G - - WASM_INSTRUCTION : 6.86T - - WRITE_MEMORY_BASE : 8.41G - - WRITE_MEMORY_BYTE : 0.9G - - WRITE_REGISTER_BASE : 8.6G - - WRITE_REGISTER_BYTE : 1.55G - - Gas used to refund unused gas: 223.18G - - Total gas used: 12.71T - -JS SDK's collection has about 1T overhead, deduct the 4.5T VM/near-sdk-js loading and 1T `@NearBindgen`. Note this benches the most complicated `UnorderedMap`, which gas usage is strictly greater than the other collections. And the gas used in actual writing the collection to storage is similar (`STORAGE_WRITE_BASE` / `STORAGE_WRITE_KEY_BYTE` / `STORAGE_WRITE_VALUE_BYTE` ). +| Highlevel collection | Rust | JS Before Opt | JS After Opt | JS % Diff | +| :-------------------------------------- | ------------------: | ------------------: | ------------------: | ---------------: | +| Convert transaction to receipt | 2.43T | 2.43T | 2.43T | 0% | +| Execute the receipt (actual contract call) | 3.32T | 10.06T | 6.86T | -31.8% | +| BASE | 0.00318T | 0.00291T | 0.00291T | 0% | +| CONTRACT_LOADING_BASE | 0.00004T | 0.00004T | 0.00004T | 0% | +| CONTRACT_LOADING_BYTES | 0.07094T | 0.11346T | 0.10634T | -6.28% | +| READ_CACHED_TRIE_NODE | 0.05472T | 0.0342T | 0.0342T | 0% | +| READ_MEMORY_BASE | 0.0261T | 0.02088T | 0.02088T | 0% | +| READ_MEMORY_BYTE | 0.00187T | 0.002T | 0.002T | 6.95% | +| READ_REGISTER_BASE | 0.00503T | 0.00503T | 0.00503T | 0% | +| READ_REGISTER_BYTE | 0.00003T | 0.00003T | 0.00003T | 0% | +| STORAGE_READ_BASE | 0.11271T | 0.11271T | 0.11271T | 0% | +| STORAGE_READ_KEY_BYTE | 0.00344T | 0.00331T | 0.00331T | -3.78% | +| STORAGE_READ_VALUE_BYTE | 0.00019T | 0.00053T | 0.00053T | 0% | +| STORAGE_WRITE_BASE | 0.25679T | 0.19259T | 0.19259T | -24.97% | +| STORAGE_WRITE_EVICTED_BYTE | 0.00109T | 0.00302T | 0.00302T | 0% | +| STORAGE_WRITE_KEY_BYTE | 0.00923T | 0.00796T | 0.00796T | -13.76% | +| STORAGE_WRITE_VALUE_BYTE | 0.00775T | 0.00949T | 0.00949T | 22.45% | +| TOUCHING_TRIE_NODE | 0.25763T | 0.20933T | 0.20933T | -18.77% | +| WASM_INSTRUCTION | 0.01848T | 3.71T | 3.71T | 0% | +| WRITE_MEMORY_BASE | 0.00841T | 0.00841T | 0.00841T | 0% | +| WRITE_MEMORY_BYTE | 0.00074T | 0.0009T | 0.0009T | 21.62% | +| WRITE_REGISTER_BASE | 0.0086T | 0.0086T | 0.0086T | 0% | +| WRITE_REGISTER_BYTE | 0.0011T | 0.00155T | 0.00155T | 40.91% | +| Refund unused gas | 0.22318T | 0.22318T | 0.22318T | 0% | +| Total gas used | 5.97T | 12.71T | 9.51T | -25.16% | + +The JS SDK's collection has about `3.54T` overhead compared to the Rust version after deducting the `4.5T` VM/near-sdk-js loading and the `1.04T` `@NearBindgen` overhead. Note that this benchmarks the most complicated `UnorderedMap`, where gas usage is strictly greater than other collections. The gas used in actual writing the collection to storage is similar (`STORAGE_WRITE_BASE`, `STORAGE_WRITE_KEY_BYTE`, `STORAGE_WRITE_VALUE_BYTE`). + +
+ +--- ### Computational expensive contract -- JS expensive contract, iterate 20000 times - - Gas used to convert transaction to receipt: 2.43T - - Gas used to execute the receipt (actual contract call): 123.26T - - BASE : 1.85G - - CONTRACT_LOADING_BASE : 0.04G - - CONTRACT_LOADING_BYTES : 112.09G - - READ_CACHED_TRIE_NODE : 4.56G - - READ_MEMORY_BASE : 10.44G - - READ_MEMORY_BYTE : 0.07G - - READ_REGISTER_BASE : 2.52G - - READ_REGISTER_BYTE : 0G - - STORAGE_READ_BASE : 56.36G - - STORAGE_READ_KEY_BYTE : 0.15G - - STORAGE_WRITE_BASE : 64.2G - - STORAGE_WRITE_KEY_BYTE : 0.35G - - STORAGE_WRITE_VALUE_BYTE : 0.06G - - TOUCHING_TRIE_NODE : 32.2G - - WASM_INSTRUCTION : 120.54T - - WRITE_MEMORY_BASE : 5.61G - - WRITE_MEMORY_BYTE : 0.07G - - WRITE_REGISTER_BASE : 2.87G - - WRITE_REGISTER_BYTE : 0.04G - - Gas used to refund unused gas: 223.18G - - Total gas used: 125.91T -- RS expensive contract. iterate 20000 times - - Gas used to convert transaction to receipt: 2.43T - - Gas used to execute the receipt (actual contract call): 3.01T - - BASE : 1.85G - - CONTRACT_LOADING_BASE : 0.04G - - CONTRACT_LOADING_BYTES : 67.77G - - READ_CACHED_TRIE_NODE : 6.84G - - READ_MEMORY_BASE : 10.44G - - READ_MEMORY_BYTE : 0.06G - - READ_REGISTER_BASE : 2.52G - - READ_REGISTER_BYTE : 0G - - STORAGE_READ_BASE : 56.36G - - STORAGE_READ_KEY_BYTE : 0.15G - - STORAGE_WRITE_BASE : 64.2G - - STORAGE_WRITE_KEY_BYTE : 0.35G - - TOUCHING_TRIE_NODE : 48.31G - - WASM_INSTRUCTION : 315.17G - - WRITE_MEMORY_BASE : 5.61G - - WRITE_MEMORY_BYTE : 0.07G - - WRITE_REGISTER_BASE : 2.87G - - WRITE_REGISTER_BYTE : 0.04G - - Gas used to refund unused gas: 223.18G - - Total gas used: 5.66T -- RS expensive contract. iterate 10000 times - - Gas used to convert transaction to receipt: 2.43T - - Gas used to execute the receipt (actual contract call): 2.9T - - BASE : 2.38G - - CONTRACT_LOADING_BASE : 0.04G - - CONTRACT_LOADING_BYTES : 67.77G - - READ_CACHED_TRIE_NODE : 13.68G - - READ_MEMORY_BASE : 10.44G - - READ_MEMORY_BYTE : 0.06G - - READ_REGISTER_BASE : 5.03G - - READ_REGISTER_BYTE : 0G - - STORAGE_READ_BASE : 56.36G - - STORAGE_READ_KEY_BYTE : 0.15G - - STORAGE_WRITE_BASE : 64.2G - - STORAGE_WRITE_KEY_BYTE : 0.35G - - TOUCHING_TRIE_NODE : 80.51G - - WASM_INSTRUCTION : 158.89G - - WRITE_MEMORY_BASE : 8.41G - - WRITE_MEMORY_BYTE : 0.07G - - WRITE_REGISTER_BASE : 8.6G - - WRITE_REGISTER_BYTE : 0.04G - - Gas used to refund unused gas: 223.18G - - Total gas used: 5.56T -- RS expensive contract. iterate 100 times - - Gas used to convert transaction to receipt: 2.43T - - Gas used to execute the receipt (actual contract call): 2.75T - - BASE : 2.38G - - CONTRACT_LOADING_BASE : 0.04G - - CONTRACT_LOADING_BYTES : 67.77G - - READ_CACHED_TRIE_NODE : 13.68G - - READ_MEMORY_BASE : 10.44G - - READ_MEMORY_BYTE : 0.05G - - READ_REGISTER_BASE : 5.03G - - READ_REGISTER_BYTE : 0G - - STORAGE_READ_BASE : 56.36G - - STORAGE_READ_KEY_BYTE : 0.15G - - STORAGE_WRITE_BASE : 64.2G - - STORAGE_WRITE_KEY_BYTE : 0.35G - - TOUCHING_TRIE_NODE : 80.51G - - WASM_INSTRUCTION : 4.02G - - WRITE_MEMORY_BASE : 8.41G - - WRITE_MEMORY_BYTE : 0.07G - - WRITE_REGISTER_BASE : 8.6G - - WRITE_REGISTER_BYTE : 0.03G - - Gas used to refund unused gas: 223.18G - - Total gas used: 5.4T -- JS expensive contract, iterate 100 times - - Gas used to convert transaction to receipt: 2.43T - - Gas used to execute the receipt (actual contract call): 9.09T - - BASE : 2.38G - - CONTRACT_LOADING_BASE : 0.04G - - CONTRACT_LOADING_BYTES : 112.09G - - READ_CACHED_TRIE_NODE : 13.68G - - READ_MEMORY_BASE : 10.44G - - READ_MEMORY_BYTE : 0.06G - - READ_REGISTER_BASE : 5.03G - - READ_REGISTER_BYTE : 0G - - STORAGE_READ_BASE : 56.36G - - STORAGE_READ_KEY_BYTE : 0.15G - - STORAGE_READ_VALUE_BYTE : 0.01G - - STORAGE_WRITE_BASE : 64.2G - - STORAGE_WRITE_EVICTED_BYTE : 0.06G - - STORAGE_WRITE_KEY_BYTE : 0.35G - - STORAGE_WRITE_VALUE_BYTE : 0.06G - - TOUCHING_TRIE_NODE : 80.51G - - WASM_INSTRUCTION : 6.3T - - WRITE_MEMORY_BASE : 8.41G - - WRITE_MEMORY_BYTE : 0.07G - - WRITE_REGISTER_BASE : 8.6G - - WRITE_REGISTER_BYTE : 0.05G - - Gas used to refund unused gas: 223.18G - - Total gas used: 11.75T -- JS expensive contract, iterate 10000 times - - Gas used to convert transaction to receipt: 2.43T - - Gas used to execute the receipt (actual contract call): 65.94T - - BASE : 2.38G - - CONTRACT_LOADING_BASE : 0.04G - - CONTRACT_LOADING_BYTES : 112.09G - - READ_CACHED_TRIE_NODE : 13.68G - - READ_MEMORY_BASE : 10.44G - - READ_MEMORY_BYTE : 0.06G - - READ_REGISTER_BASE : 5.03G - - READ_REGISTER_BYTE : 0G - - STORAGE_READ_BASE : 56.36G - - STORAGE_READ_KEY_BYTE : 0.15G - - STORAGE_READ_VALUE_BYTE : 0.01G - - STORAGE_WRITE_BASE : 64.2G - - STORAGE_WRITE_EVICTED_BYTE : 0.06G - - STORAGE_WRITE_KEY_BYTE : 0.35G - - STORAGE_WRITE_VALUE_BYTE : 0.06G - - TOUCHING_TRIE_NODE : 80.51G - - WASM_INSTRUCTION : 63.15T - - WRITE_MEMORY_BASE : 8.41G - - WRITE_MEMORY_BYTE : 0.08G - - WRITE_REGISTER_BASE : 8.6G - - WRITE_REGISTER_BYTE : 0.06G - - Gas used to refund unused gas: 223.18G - - Total gas used: 68.59T - -In this case, JS uses much more gas. Because JS Number is object and that's a lot of overhead compare to native integer arithmetic. It's even a lot of overhead compare to native float arithmetic. Also in QuickJS there's no JIT. If your contract does a lot of calculation or complex algorithm in JavaScript, it'd be better to do a similar benchmark. - -### Deploy and cross contract call - -- JS promise batch deploy contract and call - - - Gas used to convert transaction to receipt: 2.43T - - Gas used to execute the receipt (actual contract call): 25.86T - - CREATE_ACCOUNT : 0.09961T - - DEPLOY_CONTRACT : 3.71T - - FUNCTION_CALL : 2.32T - - NEW_RECEIPT : 0.10806T - - TRANSFER : 0.11512T - - BASE : 0.00159T - - CONTRACT_LOADING_BASE : 0.00004T - - CONTRACT_LOADING_BYTES : 0.22386T - - PROMISE_RETURN : 0.00056T - - READ_MEMORY_BASE : 0.01566T - - READ_MEMORY_BYTE : 1.97T - - UTF8_DECODING_BASE : 0.00311T - - UTF8_DECODING_BYTE : 0.00525T - - WASM_INSTRUCTION : 14.86T - - Gas used to execute the cross contract call: 41.9T - - BASE : 0.00344T - - CONTRACT_LOADING_BASE : 0.00004T - - CONTRACT_LOADING_BYTES : 0.11228T - - READ_MEMORY_BASE : 0.00261T - - READ_MEMORY_BYTE : 0.0005T - - READ_REGISTER_BASE : 0.01007T - - READ_REGISTER_BYTE : 0T - - WASM_INSTRUCTION : 5.47T - - WRITE_MEMORY_BASE : 0.01122T - - WRITE_MEMORY_BYTE : 0.00014T - - WRITE_REGISTER_BASE : 0.01146T - - WRITE_REGISTER_BYTE : 0.00019T - - Gas used to refund unused gas for cross contract call: 0.22318T - - Gas used to refund unused gas: 0.22318T - - Total gas used: 70.63T - -- RS promise batch deploy contract and call - - Gas used to convert transaction to receipt: 2.43T - - Gas used to execute the receipt (actual contract call): 10.89T - - CREATE_ACCOUNT : 0.09961T - - DEPLOY_CONTRACT : 3.71T - - FUNCTION_CALL : 2.32T - - NEW_RECEIPT : 0.10806T - - TRANSFER : 0.11512T - - BASE : 0.00159T - - CONTRACT_LOADING_BASE : 0.00004T - - CONTRACT_LOADING_BYTES : 0.11283T - - PROMISE_RETURN : 0.00056T - - READ_MEMORY_BASE : 0.01566T - - READ_MEMORY_BYTE : 1.97T - - UTF8_DECODING_BASE : 0.00311T - - UTF8_DECODING_BYTE : 0.00525T - - WASM_INSTRUCTION : 0.00038T - - Gas used to execute the cross contract call: 41.9T - - BASE : 0.00344T - - CONTRACT_LOADING_BASE : 0.00004T - - CONTRACT_LOADING_BYTES : 0.11228T - - READ_MEMORY_BASE : 0.00261T - - READ_MEMORY_BYTE : 0.0005T - - READ_REGISTER_BASE : 0.01007T - - READ_REGISTER_BYTE : 0T - - WASM_INSTRUCTION : 5.47T - - WRITE_MEMORY_BASE : 0.01122T - - WRITE_MEMORY_BYTE : 0.00014T - - WRITE_REGISTER_BASE : 0.01146T - - WRITE_REGISTER_BYTE : 0.00019T - - Gas used to refund unused gas for cross contract call: 0.22318T - - Gas used to refund unused gas: 0.22318T - - Total gas used: 55.67T - -In this test, we use a JS contract and RS contract to both deploy a JS contract and cross contract call this newly deployed contract. We can see the gas to do the cross contract call is the same. JS SDK has a `~10T` overhead to parse a `~500K` contract in byte. This is because JS, either represent code in Uint8Array or string has some overhead while rust compiler can directly turn it into data section in wasm. In practice, a 10T overhead for a one time contract deploy is not a big deal. - -## Tips to do your own benchmark - -If the above cases don't cover use case or you have a complex algorithm to implement in JavaScript, it's a good idea to benchmark your specific algorithm before choose near-sdk-js for your project. - -You don't have to implement the exact algorithm to estimate the gas usage. Instead, you can find out the most expensive execution path of the algorithm, and estimate it by using the upper bound. For example, store the biggest possible objects into the collection and iterate for most possible times. Then goes to write the benchmark and the total gas cannot be more than 300T to be a valid contract. Also, if it has cross contract call, make sure the total gas, that's a sum of all cross contract calls, is less than 300T. - -To add your benchmark, write a one function contract of your most expensive operation. And write a test to call this function. If it doesn't involve cross contract call or promises, creating such test is simple. You can refer to `bench/src/expensive-calc.js` and `bench/__tests__/test-expensive-calc.ava.js` on how to write such test and print the gas breakdown. If it involves create promises or cross contract calls, printing the gas breakdown is a little bit more complex, you can refer to `bench/__tests__/test-deploy-contract.ava.js` for the recipe. +`20000 iterations` +| | Rust | JS Before Opt | JS After Opt | JS % Diff | +| :-------------------------------------- | ------------------: | ------------------: | ------------------: | ---------------: | +| Convert transaction to receipt | 2.43T | 2.43T | 2.43T | 0% | +| Execute the receipt (actual contract call) | 3.01T | 123.26T | 34.93T | -71.65% | +| BASE | 0.00185T | 0.00185T | 0.00185T | 0% | +| CONTRACT_LOADING_BASE | 0.00004T | 0.00004T | 0.00004T | 0% | +| CONTRACT_LOADING_BYTES | 0.06777T | 0.11209T | 0.10483T | -6.48% | +| READ_MEMORY_BASE | 0.01044T | 0.01044T | 0.01044T | 0% | +| READ_MEMORY_BYTE | 0.00006T | 0.00007T | 0.00007T | 0% | +| READ_REGISTER_BASE | 0.00252T | 0.00252T | 0.00252T | 0% | +| STORAGE_READ_BASE | 0.05636T | 0.05636T | 0.05636T | 0% | +| STORAGE_READ_KEY_BYTE | 0.00015T | 0.00015T | 0.00015T | 0% | +| STORAGE_WRITE_BASE | 0.0642T | 0.0642T | 0.0642T | 0% | +| STORAGE_WRITE_KEY_BYTE | 0.00035T | 0.00035T | 0.00035T | 0% | +| TOUCHING_TRIE_NODE | 0.0322T | 0.04831T | 0.04831T | 0% | +| WASM_INSTRUCTION | 0.33187T | 120.54T | 32.19T | -73.3% | +| WRITE_MEMORY_BASE | 0.00561T | 0.00561T | 0.00561T | 0% | +| WRITE_MEMORY_BYTE | 0.00007T | 0.00007T | 0.00007T | 0% | +| WRITE_REGISTER_BASE | 0.00287T | 0.00287T | 0.00287T | 0% | +| WRITE_REGISTER_BYTE | 0.00004T | 0.00004T | 0.00004T | 0% | +| Refund unused gas | 0.22318T | 0.22318T | 0.22318T | 0% | +| Total gas used | 5.66T | 125.91T | 37.58T | -70.15% | + +
+ +`10000 iterations` +| | Rust | JS Before Opt | JS After Opt | JS % Diff | +| :-------------------------------------- | ------------------: | ------------------: | ------------------: | ---------------: | +| Convert transaction to receipt | 2.43T | 2.43T | 2.43T | 0% | +| Execute the receipt (actual contract call) | 2.87T | 65.94T | 20.08T | -69.54% | +| BASE | 0.00238T | 0.00238T | 0.00238T | 0% | +| CONTRACT_LOADING_BASE | 0.00004T | 0.00004T | 0.00004T | 0% | +| CONTRACT_LOADING_BYTES | 0.06777T | 0.11209T | 0.10483T | -6.48% | +| READ_CACHED_TRIE_NODE | 0.00228T | 0.00228T | 0.00228T | 0% | +| READ_MEMORY_BASE | 0.01044T | 0.01044T | 0.01044T | 0% | +| READ_MEMORY_BYTE | 0.00006T | 0.00006T | 0.00006T | 0% | +| READ_REGISTER_BASE | 0.00503T | 0.00503T | 0.00503T | 0% | +| READ_REGISTER_BYTE | 0T | 0T | 0T | 0% | +| STORAGE_READ_BASE | 0.05636T | 0.05636T | 0.05636T | 0% | +| STORAGE_READ_KEY_BYTE | 0.00015T | 0.00015T | 0.00015T | 0% | +| STORAGE_WRITE_BASE | 0.0642T | 0.0642T | 0.0642T | 0% | +| STORAGE_WRITE_KEY_BYTE | 0.00035T | 0.00035T | 0.00035T | 0% | +| TOUCHING_TRIE_NODE | 0.08051T | 0.08051T | 0.08051T | 0% | +| WASM_INSTRUCTION | 0.16738T | 63.15T | 17.37T | -72.5% | +| WRITE_MEMORY_BASE | 0.00841T | 0.00841T | 0.00841T | 0% | +| WRITE_MEMORY_BYTE | 0.00007T | 0.00007T | 0.00007T | 0% | +| WRITE_REGISTER_BASE | 0.0086T | 0.0086T | 0.0086T | 0% | +| WRITE_REGISTER_BYTE | 0.00004T | 0.00004T | 0.00004T | 0% | +| Refund unused gas | 0.22318T | 0.22318T | 0.22318T | 0% | +| Total gas used | 5.55T | 68.59T | 22.73T | -66.85% | + +
+ +`100 iterations` +| | Rust | JS Before Opt | JS After Opt | JS % Diff | +| :-------------------------------------- | ------------------: | ------------------: | ------------------: | ---------------: | +| Convert transaction to receipt | 2.43T | 2.43T | 2.43T | 0% | +| Execute the receipt (actual contract call) | 2.71T | 9.09T | 5.52T | -39.23% | +| BASE | 0.00238T | 0.00238T | 0.00238T | 0% | +| CONTRACT_LOADING_BASE | 0.00004T | 0.00004T | 0.00004T | 0% | +| CONTRACT_LOADING_BYTES | 0.06777T | 0.11209T | 0.10483T | -6.48% | +| READ_CACHED_TRIE_NODE | 0.00228T | 0.00228T | 0.00228T | 0% | +| READ_MEMORY_BASE | 0.01044T | 0.01044T | 0.01044T | 0% | +| READ_MEMORY_BYTE | 0.00005T | 0.00006T | 0.00006T | 0% | +| READ_REGISTER_BASE | 0.00503T | 0.00503T | 0.00503T | 0% | +| READ_REGISTER_BYTE | 0T | 0T | 0T | 0% | +| STORAGE_READ_BASE | 0.05636T | 0.05636T | 0.05636T | 0% | +| STORAGE_READ_KEY_BYTE | 0.00015T | 0.00015T | 0.00015T | 0% | +| STORAGE_WRITE_BASE | 0.0642T | 0.0642T | 0.0642T | 0% | +| STORAGE_WRITE_KEY_BYTE | 0.00035T | 0.00035T | 0.00035T | 0% | +| TOUCHING_TRIE_NODE | 0.08051T | 0.08051T | 0.08051T | 0% | +| WASM_INSTRUCTION | 0.00437T | 6.3T | 2.75T | -56.35% | +| WRITE_MEMORY_BASE | 0.00841T | 0.00841T | 0.00841T | 0% | +| WRITE_MEMORY_BYTE | 0.00007T | 0.00007T | 0.00007T | 0% | +| WRITE_REGISTER_BASE | 0.0086T | 0.0086T | 0.0086T | 0% | +| WRITE_REGISTER_BYTE | 0.00003T | 0.00003T | 0.00003T | 0% | +| Refund unused gas | 0.22318T | 0.22318T | 0.22318T | 0% | +| Total gas used | 5.36T | 11.75T | 8.17T | -30.43% | + +
+ +In this case, JS uses much more gas. This is because the JS `Number` is an object, which has a lot of overhead compared to native integer arithmetic. It's even a lot of overhead compared to native float arithmetic. Also, in QuickJS, there's no JIT. If your contract does a lot of calculation or complex algorithm in JavaScript, it'd be better to do a similar benchmark. + +
+ +--- + +### Promise batch deploy contract and call + +| Deploy and cross-contract call | Rust | JS Before Opt | JS After Opt | JS % Diff | +| :-------------------------------------- | ------------------: | ------------------: | ------------------: | ---------------: | +| Convert transaction to receipt | 2.43T | 2.43T | 2.43T | 0% | +| Execute the receipt (actual contract call) | 14.64T | 25.86T | 25.88T | 0.08% | +| CREATE_ACCOUNT | 3.85T | 3.85T | 3.85T | 0% | +| DEPLOY_CONTRACT_BASE | 0.18477T | 0.18477T | 0.18477T | 0% | +| DEPLOY_CONTRACT_BYTE | 3.53T | 3.53T | 3.28T | -7.08% | +| FUNCTION_CALL_BASE | 2.32T | 2.32T | 2.32T | 0% | +| FUNCTION_CALL_BYTE | 0.00005T | 0.00005T | 0.00005T | 0% | +| NEW_ACTION_RECEIPT | 0.10806T | 0.10806T | 0.10806T | 0% | +| TRANSFER | 0.11512T | 0.11512T | 0.11512T | 0% | +| CONTRACT_LOADING_BASE | 0.00004T | 0.00004T | 0.00004T | 0% | +| CONTRACT_LOADING_BYTES | 0.11283T | 0.22386T | 0.2085T | -6.87% | +| PROMISE_RETURN | 0.00056T | 0.00056T | 0.00056T | 0% | +| READ_MEMORY_BASE | 0.01566T | 0.01566T | 0.01566T | 0% | +| READ_MEMORY_BYTE | 1.97T | 1.97T | 1.83T | -7.11% | +| UTF8_DECODING_BASE | 0.00311T | 0.00311T | 0.00311T | 0% | +| UTF8_DECODING_BYTE | 0.00525T | 0.00525T | 0.00525T | 0% | +| WASM_INSTRUCTION | 0.00043T | 11.54T | 11.53T | -0.09% | +| Gas used to execute the cross-contract call | 45.58T | 41.9T | 40.62T | -3.06% | +| Refund unused gas | 0.22318T | 0.22318T | 0.22318T | 0% | +| Total gas used | 63.1T | 70.63T | 69.37T | -1.79% | + +In this test, we use a JS contract and an RS contract to both deploy a JS contract and cross-contract call this newly deployed contract. We can see the gas used for the cross-contract call is the same. The JS SDK has a `~9.4T` overhead to parse a `~961K` contract in bytes. This is because JS, either representing code in Uint8Array or string, has some overhead, while the Rust compiler can directly turn it into the data section in WASM. In practice, a `~9.4T` overhead for a one-time contract deployment is not a big deal. + +
+ +--- ## Details of size benchmark -### JS Contract +| File Name | Rust Contract (KB) | JS Before Opt (KB) | JS After Opt (KB) | JS % Diff | +| :-------------------------------------- | ------------------: | ------------------: | ------------------: | ---------------: | +| deploy-contract.wasm | 508.37 | 947.53 | 939.41 | -0.86% | +| expensive-calc.wasm | 305.34 | 495.32 | 472.33 | -4.64% | +| highlevel-collection.wasm | 319.64 | 502.68 | 479.13 | -4.68% | +| highlevel-minimal.wasm | 159.75 | 495.07 | 472.19 | -4.63% | +| lowlevel-api.wasm | 0.38 | 471.08 | 467.53 | -0.75% | +| lowlevel-minimal.wasm | 0.21 | 471.96 | 468.51 | -0.73% | -``` --rwxrwxr-x 1 bo bo 1009K Feb 9 10:49 ./build/deploy-contract.wasm --rwxrwxr-x 1 bo bo 506K Feb 8 12:11 ./build/expensive-calc.wasm --rwxrwxr-x 1 bo bo 512K Feb 7 15:57 ./build/highlevel-collection.wasm --rwxrwxr-x 1 bo bo 505K Feb 7 10:53 ./build/highlevel-minimal.wasm --rwxrwxr-x 1 bo bo 502K Feb 10 11:32 ./build/lowlevel-api.wasm --rwxrwxr-x 1 bo bo 502K Feb 10 11:47 ./build/lowlevel-minimal.wasm -``` +
-### Rust Contract - -``` --rwxrwxr-x 1 bo bo 509K Feb 10 10:02 ./res/deploy_contract.wasm --rwxrwxr-x 1 bo bo 306K Feb 8 12:18 ./res/expensive_calc.wasm --rwxrwxr-x 1 bo bo 320K Feb 8 11:26 ./res/highlevel_collection.wasm --rwxrwxr-x 1 bo bo 160K Feb 7 10:51 ./res/highlevel_minimal.wasm --rwxrwxr-x 1 bo bo 387 Feb 7 11:56 ./res/lowlevel_api.wasm --rwxrwxr-x 1 bo bo 219 Feb 7 10:33 ./res/lowlevel_minimal.wasm -``` +--- ## Appendix diff --git a/benchmark/package.json b/benchmark/package.json index e5233fefb..0b9b7acac 100644 --- a/benchmark/package.json +++ b/benchmark/package.json @@ -28,7 +28,7 @@ "npm-run-all": "^4.1.5" }, "dependencies": { - "typescript": "^4.7.4", + "typescript": "4.7.4", "near-sdk-js": "workspace:*" } } diff --git a/examples/WASM-FILE-SIZE-COMPARISON.md b/examples/WASM-FILE-SIZE-COMPARISON.md new file mode 100644 index 000000000..1d0ccca39 --- /dev/null +++ b/examples/WASM-FILE-SIZE-COMPARISON.md @@ -0,0 +1,37 @@ +# NEAR-SDK-JS EXAMPLES + +### WASM File Size Comparison Before and After Optimization + +| File Name | Before Opt (KB) | After Opt (KB) | % Diff | +| :-------------------------------------- | ------------------: | ------------------: | ------------------: | +| basic-updates-base.wasm | 500.53 | 477.35 | -4.63% | +| basic-updates-update.wasm | 562.14 | 498.71 | -11.27% | +| clean-state.wasm | 496.45 | 473.48 | -4.62% | +| counter-lowlevel.wasm | 472.62 | 468.67 | -0.84% | +| counter-ts.wasm | 496.66 | 473.56 | -4.66% | +| counter.wasm | 496.56 | 473.51 | -4.64% | +| cross-contract-call-loop.wasm | 504.86 | 480.77 | -4.77% | +| cross-contract-call-ts.wasm | 498.54 | 475.04 | -4.71% | +| cross-contract-call.wasm | 498.51 | 475.01 | -4.71% | +| fungible-token-helper.wasm | 495.88 | 472.92 | -4.63% | +| fungible-token-lockable.wasm | 505.26 | 481.73 | -4.66% | +| fungible-token.wasm | 505.12 | 481.39 | -4.69% | +| my-ft.wasm | 520.98 | 495.55 | -4.89% | +| my-nft.wasm | 534.88 | 507.94 | -5.04% | +| nested-collections.wasm | 504.90 | 481.18 | -4.71% | +| nft-approval-receiver.wasm | 504.91 | 480.82 | -4.76% | +| nft-receiver.wasm | 505.10 | 481.05 | -4.76% | +| non-fungible-token-receiver.wasm | 496.51 | 473.51 | -4.63% | +| non-fungible-token.wasm | 503.30 | 479.39 | -4.76% | +| parking-lot.wasm | 500.11 | 476.87 | -4.65% | +| programmatic-update-after.wasm | 496.49 | 473.41 | -4.65% | +| programmatic-update-before.wasm | 496.47 | 473.38 | -4.65% | +| state-migration-new.wasm | 501.13 | 477.72 | -4.67% | +| state-migration-original.wasm | 499.98 | 476.68 | -4.65% | +| status-deserialize-class.wasm | 522.52 | 498.15 | -4.66% | +| status-message-borsh.wasm | 506.13 | 482.19 | -4.73% | +| status-message-collections.wasm | 505.38 | 481.67 | -4.70% | +| status-message-deserialize-err.wasm | 496.05 | 473.03 | -4.64% | +| status-message-migrate-add-field.wasm | 498.11 | 475.02 | -4.64% | +| status-message-serialize-err.wasm | 496.05 | 473.03 | -4.64% | +| status-message.wasm | 496.19 | 473.16 | -4.65% | diff --git a/examples/package.json b/examples/package.json index 7ffb6abca..9f6f2016f 100644 --- a/examples/package.json +++ b/examples/package.json @@ -68,7 +68,7 @@ "lodash-es": "^4.17.21", "near-contract-standards": "workspace:*", "near-sdk-js": "workspace:*", - "typescript": "^4.7.4", + "typescript": "4.7.4", "borsh": "^v1.0.0" }, "devDependencies": { diff --git a/package.json b/package.json index b4c8f9102..9639e9914 100644 --- a/package.json +++ b/package.json @@ -13,8 +13,8 @@ "docs:generate": "typedoc" }, "devDependencies": { - "turbo": "^1.4.5", + "turbo": "1.13.3", "typedoc": "^0.25.3", - "typescript": "^4.7.4" + "typescript": "4.7.4" } } diff --git a/packages/near-contract-standards/package.json b/packages/near-contract-standards/package.json index d82101d36..fb3dc9185 100644 --- a/packages/near-contract-standards/package.json +++ b/packages/near-contract-standards/package.json @@ -10,11 +10,10 @@ "author": "Near Inc ", "license": "Apache-2.0", "dependencies": { - "lodash-es": "^4.17.21", "near-sdk-js": "workspace:*" }, "devDependencies": { - "typescript": "^4.7.4" + "typescript": "4.7.4" }, "files": [ "lib" diff --git a/packages/near-sdk-js/builder/builder.c b/packages/near-sdk-js/builder/builder.c index 47c3de721..ec341156c 100644 --- a/packages/near-sdk-js/builder/builder.c +++ b/packages/near-sdk-js/builder/builder.c @@ -37,16 +37,20 @@ static JSContext *JS_NewCustomContext(JSRuntime *rt) fun_obj = JS_GetProperty(ctx, mod_obj, JS_NewAtom(ctx, #name));\ result = JS_Call(ctx, fun_obj, mod_obj, 0, NULL);\ if (JS_IsException(result)) {\ - error = JS_GetException(ctx);\ - error_message = JS_GetPropertyStr(ctx, error, "message");\ - error_stack = JS_GetPropertyStr(ctx, error, "stack");\ - error_message_c = JS_ToCStringLen(ctx, &msg_len, error_message);\ - error_stack_c = JS_ToCStringLen(ctx, &stack_len, error_stack);\ - error_c = malloc(msg_len+1+stack_len);\ - strncpy(error_c, error_message_c, msg_len);\ - error_c[msg_len] = '\n';\ - strncpy(error_c+msg_len+1, error_stack_c, stack_len);\ - panic_utf8(msg_len+1+stack_len, (uint64_t)error_c);\ + error = JS_GetException(ctx);\ + error_message_c = JS_ToCString(ctx, JS_GetPropertyStr(ctx, error, "message"));\ + error_stack_c = JS_ToCString(ctx, JS_GetPropertyStr(ctx, error, "stack"));\ + if (error_message_c && error_stack_c) {\ + size_t total_len = strlen(error_message_c) + 1 + strlen(error_stack_c);\ + error_c = malloc(total_len);\ + if (error_c) {\ + snprintf(error_c, total_len + 1, "%s\n%s", error_message_c, error_stack_c);\ + panic_utf8(total_len, (uint64_t)error_c);\ + free(error_c);\ + }\ + }\ + JS_FreeCString(ctx, error_message_c);\ + JS_FreeCString(ctx, error_stack_c);\ }\ js_std_loop(ctx);\ } @@ -95,7 +99,7 @@ extern void panic_utf8(uint64_t len, uint64_t ptr); extern void log_utf8(uint64_t len, uint64_t ptr); extern void log_utf16(uint64_t len, uint64_t ptr); // Name confliction with WASI. Can be re-exported with a different name on NEAR side with a protocol upgrade -// Or, this is actually not a primitive, can be implement with log and panic host functions in C side or JS side. +// Or, this is actually not a primitive, can be implement with log and panic host functions in C side or JS side. // extern void abort(uint32_t msg_ptr, uint32_t filename_ptr, uint32_t u32, uint32_t col); // ################ // # Promises API # @@ -202,7 +206,7 @@ static JSValue near_write_register(JSContext *ctx, JSValueConst this_val, int ar } data_ptr = JS_Uint8Array_to_C(ctx, argv[1], &data_len); if (data_ptr == NULL) { - return JS_ThrowTypeError(ctx, "Expect Uint8Array for data"); + return JS_ThrowTypeError(ctx, "Expect Uint8Array for data"); } write_register(register_id, data_len, (uint64_t)data_ptr); @@ -310,7 +314,7 @@ static JSValue u128_to_quickjs(JSContext *ctx, uint64_t* ptr) { bf_set_ui(&b, ptr[0]); bf_add(bn, bn, &b, BF_PREC_INF, BF_RNDZ); bf_delete(&b); - + return value; } @@ -332,33 +336,29 @@ static int quickjs_bigint_to_u128(JSContext *ctx, JSValueConst val, uint64_t* pt bf_set_ui(&one, 1); bf_add(&b, &b, &one, BF_PREC_INF, BF_RNDZ); bf_divrem(&q, &r, a, &b, BF_PREC_INF, BF_RNDZ, BF_RNDZ); - + bf_get_uint64(ptr, &r); bf_get_uint64(ptr+1, &q); return 0; } -static int quickjs_int_to_u128(JSContext *ctx, JSValueConst val, uint64_t* ptr) { - if (JS_ToUint64Ext(ctx, ptr, val) < 0) { - return 1; - } - ptr[1] = 0; - return 0; -} - static int quickjs_to_u128(JSContext *ctx, JSValueConst val, uint64_t* ptr) { - if (JS_IsBigInt(ctx, val)) + if (JS_IsBigInt(ctx, val)) { return quickjs_bigint_to_u128(ctx, val, ptr); - else { - return quickjs_int_to_u128(ctx, val, ptr); + } else { + if (JS_ToUint64Ext(ctx, ptr, val) < 0) { + return 1; + } + ptr[1] = 0; + return 0; } } static JSValue near_account_balance(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *argv) -{ +{ uint64_t ptr[2]; - account_balance((uint64_t)ptr); + account_balance((uint64_t)ptr); return u128_to_quickjs(ctx, ptr); } @@ -413,12 +413,12 @@ static JSValue near_sha256(JSContext *ctx, JSValueConst this_val, int argc, JSVa data_ptr = JS_Uint8Array_to_C(ctx, argv[0], &data_len); if (data_ptr == NULL) { - return JS_ThrowTypeError(ctx, "Expect Uint8Array for data"); + return JS_ThrowTypeError(ctx, "Expect Uint8Array for data"); } if (JS_ToUint64Ext(ctx, ®ister_id, argv[1]) < 0) { return JS_ThrowTypeError(ctx, "Expect Uint64 for register_id"); } - + sha256(data_len, (uint64_t)data_ptr, register_id); return JS_UNDEFINED; } @@ -431,11 +431,11 @@ static JSValue near_keccak256(JSContext *ctx, JSValueConst this_val, int argc, J data_ptr = JS_Uint8Array_to_C(ctx, argv[0], &data_len); if (data_ptr == NULL) { - return JS_ThrowTypeError(ctx, "Expect Uint8Array for data"); + return JS_ThrowTypeError(ctx, "Expect Uint8Array for data"); } if (JS_ToUint64Ext(ctx, ®ister_id, argv[1]) < 0) { return JS_ThrowTypeError(ctx, "Expect Uint64 for register_id"); - } + } keccak256(data_len, (uint64_t)data_ptr, register_id); return JS_UNDEFINED; } @@ -448,12 +448,12 @@ static JSValue near_keccak512(JSContext *ctx, JSValueConst this_val, int argc, J data_ptr = JS_Uint8Array_to_C(ctx, argv[0], &data_len); if (data_ptr == NULL) { - return JS_ThrowTypeError(ctx, "Expect Uint8Array for data"); + return JS_ThrowTypeError(ctx, "Expect Uint8Array for data"); } if (JS_ToUint64Ext(ctx, ®ister_id, argv[1]) < 0) { return JS_ThrowTypeError(ctx, "Expect Uint64 for register_id"); } - + keccak512(data_len, (uint64_t)data_ptr, register_id); return JS_UNDEFINED; } @@ -466,12 +466,12 @@ static JSValue near_ripemd160(JSContext *ctx, JSValueConst this_val, int argc, J data_ptr = JS_Uint8Array_to_C(ctx, argv[0], &data_len); if (data_ptr == NULL) { - return JS_ThrowTypeError(ctx, "Expect Uint8Array for data"); + return JS_ThrowTypeError(ctx, "Expect Uint8Array for data"); } if (JS_ToUint64Ext(ctx, ®ister_id, argv[1]) < 0) { return JS_ThrowTypeError(ctx, "Expect Uint64 for register_id"); } - + ripemd160(data_len, (uint64_t)data_ptr, register_id); return JS_UNDEFINED; } @@ -484,11 +484,11 @@ static JSValue near_ecrecover(JSContext *ctx, JSValueConst this_val, int argc, J hash_ptr = JS_Uint8Array_to_C(ctx, argv[0], &hash_len); if (hash_ptr == NULL) { - return JS_ThrowTypeError(ctx, "Expect Uint8Array for hash"); + return JS_ThrowTypeError(ctx, "Expect Uint8Array for hash"); } sig_ptr = JS_Uint8Array_to_C(ctx, argv[1], &sign_len); if (sig_ptr == NULL) { - return JS_ThrowTypeError(ctx, "Expect Uint8Array for sig"); + return JS_ThrowTypeError(ctx, "Expect Uint8Array for sig"); } if (JS_ToUint64Ext(ctx, &malleability_flag, argv[2]) < 0) { return JS_ThrowTypeError(ctx, "Expect Uint64 for malleability_flag"); @@ -499,19 +499,19 @@ static JSValue near_ecrecover(JSContext *ctx, JSValueConst this_val, int argc, J if (JS_ToUint64Ext(ctx, ®ister_id, argv[4]) < 0) { return JS_ThrowTypeError(ctx, "Expect Uint64 for register_id"); } - + result = ecrecover(hash_len, (uint64_t)hash_ptr, sign_len, (uint64_t)sig_ptr, malleability_flag, v, register_id); return JS_NewBigUint64(ctx, result); } -static JSValue near_value_return(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *argv) +static JSValue near_value_return(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *argv) { uint8_t *value_ptr; size_t value_len; value_ptr = JS_Uint8Array_to_C(ctx, argv[0], &value_len); if (value_ptr == NULL) { - return JS_ThrowTypeError(ctx, "Expect Uint8Array for value"); + return JS_ThrowTypeError(ctx, "Expect Uint8Array for value"); } value_return(value_len, (uint64_t)(value_ptr)); return JS_UNDEFINED; @@ -538,9 +538,9 @@ static JSValue near_panic_utf8(JSContext *ctx, JSValueConst this_val, int argc, data_ptr = JS_Uint8Array_to_C(ctx, argv[0], &data_len); if (data_ptr == NULL) { - return JS_ThrowTypeError(ctx, "Expect Uint8Array for message"); + return JS_ThrowTypeError(ctx, "Expect Uint8Array for message"); } - + panic_utf8(data_len, (uint64_t)data_ptr); return JS_UNDEFINED; } @@ -551,7 +551,7 @@ static JSValue near_log(JSContext *ctx, JSValueConst this_val, int argc, JSValue size_t data_len; data_ptr = JS_ToCStringLen(ctx, &data_len, argv[0]); - + log_utf8(data_len, (uint64_t)data_ptr); return JS_UNDEFINED; } @@ -563,7 +563,7 @@ static JSValue near_log_utf8(JSContext *ctx, JSValueConst this_val, int argc, JS data_ptr = JS_Uint8Array_to_C(ctx, argv[0], &data_len); if (data_ptr == NULL) { - return JS_ThrowTypeError(ctx, "Expect Uint8Array for message"); + return JS_ThrowTypeError(ctx, "Expect Uint8Array for message"); } log_utf8(data_len, (uint64_t)data_ptr); @@ -577,7 +577,7 @@ static JSValue near_log_utf16(JSContext *ctx, JSValueConst this_val, int argc, J data_ptr = JS_Uint8Array_to_C(ctx, argv[0], &data_len); if (data_ptr == NULL) { - return JS_ThrowTypeError(ctx, "Expect Uint8Array for message"); + return JS_ThrowTypeError(ctx, "Expect Uint8Array for message"); } log_utf16(data_len, (uint64_t)data_ptr); @@ -596,7 +596,7 @@ static JSValue near_promise_create(JSContext *ctx, JSValueConst this_val, int ar method_name_ptr = JS_ToCStringLen(ctx, &method_name_len, argv[1]); arguments_ptr = JS_Uint8Array_to_C(ctx, argv[2], &arguments_len); if (arguments_ptr == NULL) { - return JS_ThrowTypeError(ctx, "Expect Uint8Array for arguments"); + return JS_ThrowTypeError(ctx, "Expect Uint8Array for arguments"); } if (quickjs_to_u128(ctx, argv[3], amount_ptr) != 0) { return JS_ThrowTypeError(ctx, "Expect Uint128 for amount"); @@ -606,40 +606,52 @@ static JSValue near_promise_create(JSContext *ctx, JSValueConst this_val, int ar } ret = promise_create(account_id_len, (uint64_t)account_id_ptr, method_name_len, (uint64_t)method_name_ptr, arguments_len, (uint64_t)arguments_ptr, (uint64_t)amount_ptr, gas); - + return JS_NewBigUint64(ctx, ret); } -static JSValue near_promise_then(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *argv) -{ - uint64_t promise_index; - const char *account_id_ptr, *method_name_ptr; - uint8_t *arguments_ptr; - size_t account_id_len, method_name_len, arguments_len; - uint64_t amount_ptr[2]; // amount is u128 - uint64_t gas, ret; +static JSValue near_promise_then(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *argv) { + uint64_t promise_index, gas, ret, amount_ptr[2]; // amount is u128 + size_t account_id_len, method_name_len, arguments_len; + const char *account_id_ptr; + const char *method_name_ptr; + uint8_t *arguments_ptr; - if (JS_ToUint64Ext(ctx, &promise_index, argv[0]) < 0) { - return JS_ThrowTypeError(ctx, "Expect Uint64 for promise_index"); - } - account_id_ptr = JS_ToCStringLen(ctx, &account_id_len, argv[1]); - method_name_ptr = JS_ToCStringLen(ctx, &method_name_len, argv[2]); - arguments_ptr = JS_Uint8Array_to_C(ctx, argv[3], &arguments_len); - if (arguments_ptr == NULL) { - return JS_ThrowTypeError(ctx, "Expect Uint8Array for arguments"); - } - if (quickjs_to_u128(ctx, argv[4], amount_ptr) != 0) { - return JS_ThrowTypeError(ctx, "Expect Uint128 for amount"); - } - if (JS_ToUint64Ext(ctx, &gas, argv[5]) < 0) { - return JS_ThrowTypeError(ctx, "Expect Uint64 for gas"); - } + if (JS_ToUint64Ext(ctx, &promise_index, argv[0]) < 0) { + return JS_ThrowTypeError(ctx, "Expect Uint64 for promise_index"); + } - ret = promise_then(promise_index, account_id_len, (uint64_t)account_id_ptr, method_name_len, (uint64_t)method_name_ptr, arguments_len, (uint64_t)arguments_ptr, (uint64_t)amount_ptr, gas); - - return JS_NewBigUint64(ctx, ret); + account_id_ptr = JS_ToCStringLen(ctx, &account_id_len, argv[1]); + if (!account_id_ptr) { + return JS_ThrowTypeError(ctx, "Expect string for account_id"); + } + + method_name_ptr = JS_ToCStringLen(ctx, &method_name_len, argv[2]); + if (!method_name_ptr) { + return JS_ThrowTypeError(ctx, "Expect string for method_name"); + } + + arguments_ptr = JS_Uint8Array_to_C(ctx, argv[3], &arguments_len); + if (!arguments_ptr) { + return JS_ThrowTypeError(ctx, "Expect Uint8Array for arguments"); + } + + if (quickjs_to_u128(ctx, argv[4], amount_ptr) != 0) { + return JS_ThrowTypeError(ctx, "Expect Uint128 for amount"); + } + + if (JS_ToUint64Ext(ctx, &gas, argv[5]) < 0) { + return JS_ThrowTypeError(ctx, "Expect Uint64 for gas"); + } + + ret = promise_then(promise_index, account_id_len, (uint64_t)account_id_ptr, method_name_len, + (uint64_t)method_name_ptr, arguments_len, (uint64_t)arguments_ptr, + (uint64_t)amount_ptr, gas); + + return JS_NewBigUint64(ctx, ret); } + static JSValue near_promise_and(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *argv) { uint64_t promise_idx_ptr[argc], ret; @@ -701,7 +713,7 @@ static JSValue near_promise_batch_action_deploy_contract(JSContext *ctx, JSValue } code_ptr = JS_Uint8Array_to_C(ctx, argv[1], &code_len); if (code_ptr == NULL) { - return JS_ThrowTypeError(ctx, "Expect Uint8Array for code"); + return JS_ThrowTypeError(ctx, "Expect Uint8Array for code"); } promise_batch_action_deploy_contract(promise_index, code_len, (uint64_t)code_ptr); return JS_UNDEFINED; @@ -722,7 +734,7 @@ static JSValue near_promise_batch_action_function_call(JSContext *ctx, JSValueCo method_name_ptr = JS_ToCStringLen(ctx, &method_name_len, argv[1]); arguments_ptr = JS_Uint8Array_to_C(ctx, argv[2], &arguments_len); if (arguments_ptr == NULL) { - return JS_ThrowTypeError(ctx, "Expect Uint8Array for arguments"); + return JS_ThrowTypeError(ctx, "Expect Uint8Array for arguments"); } if (quickjs_to_u128(ctx, argv[3], amount_ptr) != 0) { return JS_ThrowTypeError(ctx, "Expect Uint128 for amount"); @@ -764,7 +776,7 @@ static JSValue near_promise_batch_action_stake(JSContext *ctx, JSValueConst this } public_key_ptr = JS_Uint8Array_to_C(ctx, argv[2], &public_key_len); if (public_key_ptr == NULL) { - return JS_ThrowTypeError(ctx, "Expect Uint8Array for public key"); + return JS_ThrowTypeError(ctx, "Expect Uint8Array for public key"); } promise_batch_action_stake(promise_index, (uint64_t)amount_ptr, public_key_len, (uint64_t)public_key_ptr); @@ -783,7 +795,7 @@ static JSValue near_promise_batch_action_add_key_with_full_access(JSContext *ctx } public_key_ptr = JS_Uint8Array_to_C(ctx, argv[1], &public_key_len); if (public_key_ptr == NULL) { - return JS_ThrowTypeError(ctx, "Expect Uint8Array for public key"); + return JS_ThrowTypeError(ctx, "Expect Uint8Array for public key"); } if (JS_ToUint64Ext(ctx, &nonce, argv[2]) < 0) { return JS_ThrowTypeError(ctx, "Expect Uint64 for nonce"); @@ -805,7 +817,7 @@ static JSValue near_promise_batch_action_add_key_with_function_call(JSContext *c } public_key_ptr = JS_Uint8Array_to_C(ctx, argv[1], &public_key_len); if (public_key_ptr == NULL) { - return JS_ThrowTypeError(ctx, "Expect Uint8Array for public key"); + return JS_ThrowTypeError(ctx, "Expect Uint8Array for public key"); } if (JS_ToUint64Ext(ctx, &nonce, argv[2]) < 0) { return JS_ThrowTypeError(ctx, "Expect Uint64 for nonce"); @@ -831,7 +843,7 @@ static JSValue near_promise_batch_action_delete_key(JSContext *ctx, JSValueConst } public_key_ptr = JS_Uint8Array_to_C(ctx, argv[1], &public_key_len); if (public_key_ptr == NULL) { - return JS_ThrowTypeError(ctx, "Expect Uint8Array for public key"); + return JS_ThrowTypeError(ctx, "Expect Uint8Array for public key"); } promise_batch_action_delete_key(promise_index, public_key_len, (uint64_t)public_key_ptr); return JS_UNDEFINED; @@ -909,7 +921,7 @@ static JSValue near_promise_return(JSContext *ctx, JSValueConst this_val, int ar return JS_ThrowTypeError(ctx, "Expect Uint64 for promise_idx"); } promise_return(promise_idx); - + return JS_UNDEFINED; } @@ -921,11 +933,11 @@ static JSValue near_storage_write(JSContext *ctx, JSValueConst this_val, int arg key_ptr = JS_Uint8Array_to_C(ctx, argv[0], &key_len); if (key_ptr == NULL) { - return JS_ThrowTypeError(ctx, "Expect Uint8Array for key"); + return JS_ThrowTypeError(ctx, "Expect Uint8Array for key"); } value_ptr = JS_Uint8Array_to_C(ctx, argv[1], &value_len); if (value_ptr == NULL) { - return JS_ThrowTypeError(ctx, "Expect Uint8Array for value"); + return JS_ThrowTypeError(ctx, "Expect Uint8Array for value"); } if (JS_ToUint64Ext(ctx, ®ister_id, argv[2]) < 0) { return JS_ThrowTypeError(ctx, "Expect Uint64 for register_id"); @@ -943,7 +955,7 @@ static JSValue near_storage_read(JSContext *ctx, JSValueConst this_val, int argc key_ptr = JS_Uint8Array_to_C(ctx, argv[0], &key_len); if (key_ptr == NULL) { - return JS_ThrowTypeError(ctx, "Expect Uint8Array for key"); + return JS_ThrowTypeError(ctx, "Expect Uint8Array for key"); } if (JS_ToUint64Ext(ctx, ®ister_id, argv[1]) < 0) { return JS_ThrowTypeError(ctx, "Expect Uint64 for register_id"); @@ -961,7 +973,7 @@ static JSValue near_storage_remove(JSContext *ctx, JSValueConst this_val, int ar key_ptr = JS_Uint8Array_to_C(ctx, argv[0], &key_len); if (key_ptr == NULL) { - return JS_ThrowTypeError(ctx, "Expect Uint8Array for key"); + return JS_ThrowTypeError(ctx, "Expect Uint8Array for key"); } if (JS_ToUint64Ext(ctx, ®ister_id, argv[1]) < 0) { return JS_ThrowTypeError(ctx, "Expect Uint64 for register_id"); @@ -978,7 +990,7 @@ static JSValue near_storage_has_key(JSContext *ctx, JSValueConst this_val, int a key_ptr = JS_Uint8Array_to_C(ctx, argv[0], &key_len); if (key_ptr == NULL) { - return JS_ThrowTypeError(ctx, "Expect Uint8Array for key"); + return JS_ThrowTypeError(ctx, "Expect Uint8Array for key"); } ret = storage_has_key(key_len, (uint64_t)key_ptr); return JS_NewBigUint64(ctx, ret); @@ -1050,7 +1062,7 @@ static JSValue near_uint8array_to_utf8_string(JSContext *ctx, JSValueConst this_ if (data_ptr == NULL) { return JS_ThrowTypeError(ctx, "Expect Uint8Array"); } - + return JS_NewStringLen(ctx, (const char *)data_ptr, data_len); } @@ -1062,7 +1074,7 @@ static JSValue near_alt_bn128_g1_multiexp(JSContext *ctx, JSValueConst this_val, data_ptr = JS_Uint8Array_to_C(ctx, argv[0], &data_len); if (data_ptr == NULL) { - return JS_ThrowTypeError(ctx, "Expect Uint8Array for data"); + return JS_ThrowTypeError(ctx, "Expect Uint8Array for data"); } if (JS_ToUint64Ext(ctx, ®ister_id, argv[1]) < 0) { return JS_ThrowTypeError(ctx, "Expect Uint64 for register_id"); @@ -1080,7 +1092,7 @@ static JSValue near_alt_bn128_g1_sum(JSContext *ctx, JSValueConst this_val, int data_ptr = JS_Uint8Array_to_C(ctx, argv[0], &data_len); if (data_ptr == NULL) { - return JS_ThrowTypeError(ctx, "Expect Uint8Array for data"); + return JS_ThrowTypeError(ctx, "Expect Uint8Array for data"); } if (JS_ToUint64Ext(ctx, ®ister_id, argv[1]) < 0) { return JS_ThrowTypeError(ctx, "Expect Uint64 for register_id"); @@ -1098,8 +1110,8 @@ static JSValue near_alt_bn128_pairing_check(JSContext *ctx, JSValueConst this_va data_ptr = JS_Uint8Array_to_C(ctx, argv[0], &data_len); if (data_ptr == NULL) { - return JS_ThrowTypeError(ctx, "Expect Uint8Array for data"); - } + return JS_ThrowTypeError(ctx, "Expect Uint8Array for data"); + } ret = alt_bn128_pairing_check(data_len, (uint64_t)data_ptr); return JS_NewBigUint64(ctx, ret); } diff --git a/packages/near-sdk-js/lib/cli/cli.js b/packages/near-sdk-js/lib/cli/cli.js index 477d2ab18..f7bd05886 100755 --- a/packages/near-sdk-js/lib/cli/cli.js +++ b/packages/near-sdk-js/lib/cli/cli.js @@ -1,4 +1,5 @@ #!/usr/bin/env node +import { terser } from "rollup-plugin-terser"; import fs from "fs"; import path, { basename, dirname } from "path"; import { nodeResolve } from "@rollup/plugin-node-resolve"; @@ -88,7 +89,7 @@ function ensureTargetDirExists(target) { return; } signal.await(`Creating ${targetDir} directory...`); - fs.mkdirSync(targetDir, {}); + fs.mkdirSync(targetDir); } export async function validateCom(source, { verbose = false }) { const signale = new Signale({ scope: "validate", interactive: !verbose }); @@ -147,6 +148,7 @@ export async function transpileJsAndBuildWasmCom(target, { verbose = false }) { await createWasmContract(getQjscTarget(target), getContractTarget(target), verbose); signale.await("Executing wasi-stub..."); await wasiStubContract(getContractTarget(target), verbose); + await optimizeWasmContract(target, verbose); signale.success(`Generated ${getContractTarget(target)} contract successfully!`); } export async function buildCom(source, target, packageJson, tsConfig, { verbose = false, generateABI = false }) { @@ -188,6 +190,29 @@ async function createJsFileWithRullup(sourceFileWithPath, rollupTarget, verbose ["@babel/plugin-proposal-decorators", { version: "legacy" }], ], }), + terser({ + mangle: false, + compress: { + passes: 5, + hoist_vars: true, + reduce_funcs: true, + reduce_vars: true, + collapse_vars: true, + dead_code: true, + conditionals: true, + evaluate: true, + unused: true, + booleans_as_integers: true, + if_return: true, + join_vars: true, + sequences: true, + side_effects: true, + inline: true, + drop_console: true, + drop_debugger: true, + pure_funcs: ['console.log'], + }, + }), ], }); await bundle.write({ @@ -231,3 +256,7 @@ async function wasiStubContract(contractTarget, verbose = false) { const WASI_STUB = `${NEAR_SDK_JS}/lib/cli/deps/binaryen/wasi-stub/run.sh`; await executeCommand(`${WASI_STUB} ${contractTarget}`, verbose); } +async function optimizeWasmContract(contractTarget, verbose = false) { + const WASM_OPT = `${NEAR_SDK_JS}/lib/cli/deps/webassembly/bin/wasm-opt`; + await executeCommand(`${WASM_OPT} -Oz -o ${contractTarget} ${contractTarget}`, verbose); +} diff --git a/packages/near-sdk-js/lib/cli/post-install.js b/packages/near-sdk-js/lib/cli/post-install.js index 700fee80a..fd8fc0bf6 100644 --- a/packages/near-sdk-js/lib/cli/post-install.js +++ b/packages/near-sdk-js/lib/cli/post-install.js @@ -13,8 +13,8 @@ process.chdir(DEPS); const PLATFORM = os.platform(); const ARCH = os.arch(); console.log(`Current platform: ${PLATFORM}, current architecture: ${ARCH}`); -const SUPPORTED_PLATFORMS = ["linux", "darwin"]; // Unsaported platforms: 'win32', 'aix', 'freebsd', 'openbsd', 'sunos', 'android' -const SUPPORTED_ARCH = ["x64", "arm64"]; // Unsaported arch: 'arm', 'ia32', 'mips','mipsel', 'ppc', 'ppc64', 's390', 's390x', 'x32' +const SUPPORTED_PLATFORMS = ["linux", "darwin"]; // Unsupported platforms: 'win32', 'aix', 'freebsd', 'openbsd', 'sunos', 'android' +const SUPPORTED_ARCH = ["x64", "arm64"]; // Unsupported arch: 'arm', 'ia32', 'mips','mipsel', 'ppc', 'ppc64', 's390', 's390x', 'x32' if (!SUPPORTED_PLATFORMS.includes(PLATFORM)) { console.error(`Platform ${PLATFORM} is not supported at the moment`); process.exit(1); @@ -39,6 +39,21 @@ await download(`https://github.com/ailisp/binaryen/releases/download/${BINARYEN_ fs.mkdirSync("binaryen"); await executeCommand(`tar xvf ${BINARYEN_TAR_NAME} --directory binaryen`); fs.rmSync(BINARYEN_TAR_NAME); +signale.await("Installing WebAssembly Binaryen..."); +const WEB_ASSEMBLY_BINARYEN_VERSION = `version_118`; +const WEB_ASSEMBLY_BINARYEN_VERSION_TAG = WEB_ASSEMBLY_BINARYEN_VERSION; +const WEB_ASSEMBLY_BINARYEN_SYSTEM_NAME = PLATFORM === "linux" + ? "Linux" + : PLATFORM === "darwin" + ? "macOS" + : PLATFORM === "win32" + ? "windows" + : "other"; +const WEB_ASSEMBLY_BINARYEN_TAR_NAME = `binaryen-${WEB_ASSEMBLY_BINARYEN_VERSION_TAG}-${ARCH}-${WEB_ASSEMBLY_BINARYEN_SYSTEM_NAME}.tar.gz`; +await download(`https://github.com/WebAssembly/binaryen/releases/download/${WEB_ASSEMBLY_BINARYEN_VERSION_TAG}/${WEB_ASSEMBLY_BINARYEN_TAR_NAME}`); +fs.mkdirSync("webassembly"); +await executeCommand(`tar --strip-components=1 -xvf ${WEB_ASSEMBLY_BINARYEN_TAR_NAME} --directory webassembly`); +fs.rmSync(WEB_ASSEMBLY_BINARYEN_TAR_NAME); signale.await("Installing QuickJS..."); const QUICK_JS_VERSION = `0.1.3`; const QUICK_JS_VERSION_TAG = `v${QUICK_JS_VERSION}`; diff --git a/packages/near-sdk-js/lib/types/index.d.ts b/packages/near-sdk-js/lib/types/index.d.ts index 73c741d3f..b50d4f944 100644 --- a/packages/near-sdk-js/lib/types/index.d.ts +++ b/packages/near-sdk-js/lib/types/index.d.ts @@ -1,5 +1,14 @@ +import * as ts from "typescript"; export * from "./account_id"; export * from "./gas"; export * from "./primitives"; export * from "./public_key"; export * from "./vm_types"; +declare module "typescript" { + interface ClassDeclaration { + decorators?: ts.NodeArray; + } + interface MethodDeclaration { + decorators?: ts.NodeArray; + } +} diff --git a/packages/near-sdk-js/lib/utils.d.ts b/packages/near-sdk-js/lib/utils.d.ts index 616adccd0..17e2ae2ba 100644 --- a/packages/near-sdk-js/lib/utils.d.ts +++ b/packages/near-sdk-js/lib/utils.d.ts @@ -92,3 +92,4 @@ export declare function decode(a: Uint8Array): string; export interface IntoStorageKey { into_storage_key(): string; } +export declare function deepCopy(obj: T): T; diff --git a/packages/near-sdk-js/lib/utils.js b/packages/near-sdk-js/lib/utils.js index c858e818c..e36cf3930 100644 --- a/packages/near-sdk-js/lib/utils.js +++ b/packages/near-sdk-js/lib/utils.js @@ -1,4 +1,3 @@ -import { cloneDeep } from "lodash-es"; const TYPE_KEY = "typeInfo"; var TypeBrand; (function (TypeBrand) { @@ -200,7 +199,7 @@ export function decodeObj2class(class_instance, obj) { class_instance[key] = obj[key]; } } - const instance_tmp = cloneDeep(class_instance); + const instance_tmp = deepCopy(class_instance); for (key in obj) { if (typeof class_instance[key] == "object" && !(class_instance[key] instanceof Date)) { @@ -279,3 +278,48 @@ export function encode(s) { export function decode(a) { return env.uint8array_to_utf8_string(a); } +export function deepCopy(obj) { + // Handle primitives and null + if (obj === null || typeof obj !== "object") { + return obj; + } + // Handle Date objects + if (obj instanceof Date) { + return new Date(obj.getTime()); + } + // Handle RegExp objects + if (obj instanceof RegExp) { + return new RegExp(obj.source, obj.flags); + } + // Handle Map objects + if (obj instanceof Map) { + const mapCopy = new Map(); + obj.forEach((value, key) => { + mapCopy.set(deepCopy(key), deepCopy(value)); + }); + return mapCopy; + } + // Handle Set objects + if (obj instanceof Set) { + const setCopy = new Set(); + obj.forEach((value) => { + setCopy.add(deepCopy(value)); + }); + return setCopy; + } + // Handle Arrays + if (Array.isArray(obj)) { + return obj.map((item) => deepCopy(item)); + } + // Handle Objects + const copy = Object.create(Object.getPrototypeOf(obj)); + Object.getOwnPropertyNames(obj).forEach((key) => { + copy[key] = deepCopy(obj[key]); + }); + // Handle symbol properties + const symbols = Object.getOwnPropertySymbols(obj); + symbols.forEach((sym) => { + copy[sym] = deepCopy(obj[sym]); + }); + return copy; +} diff --git a/packages/near-sdk-js/package.json b/packages/near-sdk-js/package.json index 62104d582..98a1f166c 100644 --- a/packages/near-sdk-js/package.json +++ b/packages/near-sdk-js/package.json @@ -46,14 +46,14 @@ "commander": "^9.4.1", "eslint": "^8.20.0", "json-schema": "0.4.0", - "lodash-es": "^4.17.21", "near-abi": "^0.1.0", "near-typescript-json-schema": "0.55.0", "rollup": "^2.61.1", "rollup-plugin-sourcemaps": "^0.6.3", + "rollup-plugin-terser": "^7.0.2", "signale": "^1.4.0", "ts-morph": "^16.0.0", - "typescript": "~4.7.2" + "typescript": "4.7.4" }, "files": [ "builder", @@ -80,7 +80,6 @@ "eslint-config-prettier": "^8.5.0", "json5": "^2.2.3", "npm-run-all": "^4.1.5", - "prettier": "^2.7.1", - "typescript": "^4.7.2" + "prettier": "^2.7.1" } } diff --git a/packages/near-sdk-js/src/cli/cli.ts b/packages/near-sdk-js/src/cli/cli.ts index e2b7a298f..806182909 100644 --- a/packages/near-sdk-js/src/cli/cli.ts +++ b/packages/near-sdk-js/src/cli/cli.ts @@ -1,5 +1,7 @@ #!/usr/bin/env node +import { terser } from "rollup-plugin-terser"; + import fs from "fs"; import path, { basename, dirname } from "path"; @@ -135,7 +137,7 @@ function ensureTargetDirExists(target: string): void { } signal.await(`Creating ${targetDir} directory...`); - fs.mkdirSync(targetDir, {}); + fs.mkdirSync(targetDir); } export async function validateCom( @@ -242,6 +244,8 @@ export async function transpileJsAndBuildWasmCom( signale.await("Executing wasi-stub..."); await wasiStubContract(getContractTarget(target), verbose); + await optimizeWasmContract(target, verbose); + signale.success( `Generated ${getContractTarget(target)} contract successfully!` ); @@ -312,6 +316,29 @@ async function createJsFileWithRullup( ["@babel/plugin-proposal-decorators", { version: "legacy" }], ], }), + terser({ + mangle: false, + compress: { + passes: 5, + hoist_vars: true, + reduce_funcs: true, + reduce_vars: true, + collapse_vars: true, + dead_code: true, + conditionals: true, + evaluate: true, + unused: true, + booleans_as_integers: true, + if_return: true, + join_vars: true, + sequences: true, + side_effects: true, + inline: true, + drop_console: true, + drop_debugger: true, + pure_funcs: ['console.log'], + }, + }), ], }); @@ -389,3 +416,11 @@ async function wasiStubContract(contractTarget: string, verbose = false) { const WASI_STUB = `${NEAR_SDK_JS}/lib/cli/deps/binaryen/wasi-stub/run.sh`; await executeCommand(`${WASI_STUB} ${contractTarget}`, verbose); } + +async function optimizeWasmContract(contractTarget: string, verbose = false) { + const WASM_OPT = `${NEAR_SDK_JS}/lib/cli/deps/webassembly/bin/wasm-opt`; + await executeCommand( + `${WASM_OPT} -Oz -o ${contractTarget} ${contractTarget}`, + verbose + ); +} diff --git a/packages/near-sdk-js/src/cli/post-install.ts b/packages/near-sdk-js/src/cli/post-install.ts index e2095bc8e..e7815c0cb 100644 --- a/packages/near-sdk-js/src/cli/post-install.ts +++ b/packages/near-sdk-js/src/cli/post-install.ts @@ -18,8 +18,8 @@ const PLATFORM = os.platform(); const ARCH = os.arch(); console.log(`Current platform: ${PLATFORM}, current architecture: ${ARCH}`); -const SUPPORTED_PLATFORMS = ["linux", "darwin"]; // Unsaported platforms: 'win32', 'aix', 'freebsd', 'openbsd', 'sunos', 'android' -const SUPPORTED_ARCH = ["x64", "arm64"]; // Unsaported arch: 'arm', 'ia32', 'mips','mipsel', 'ppc', 'ppc64', 's390', 's390x', 'x32' +const SUPPORTED_PLATFORMS = ["linux", "darwin"]; // Unsupported platforms: 'win32', 'aix', 'freebsd', 'openbsd', 'sunos', 'android' +const SUPPORTED_ARCH = ["x64", "arm64"]; // Unsupported arch: 'arm', 'ia32', 'mips','mipsel', 'ppc', 'ppc64', 's390', 's390x', 'x32' if (!SUPPORTED_PLATFORMS.includes(PLATFORM)) { console.error(`Platform ${PLATFORM} is not supported at the moment`); @@ -58,6 +58,32 @@ fs.mkdirSync("binaryen"); await executeCommand(`tar xvf ${BINARYEN_TAR_NAME} --directory binaryen`); fs.rmSync(BINARYEN_TAR_NAME); +signale.await("Installing WebAssembly Binaryen..."); + +const WEB_ASSEMBLY_BINARYEN_VERSION = `version_118`; +const WEB_ASSEMBLY_BINARYEN_VERSION_TAG = WEB_ASSEMBLY_BINARYEN_VERSION; + +const WEB_ASSEMBLY_BINARYEN_SYSTEM_NAME = + PLATFORM === "linux" + ? "Linux" + : PLATFORM === "darwin" + ? "macOS" + : PLATFORM === "win32" + ? "windows" + : "other"; + +const WEB_ASSEMBLY_BINARYEN_TAR_NAME = `binaryen-${WEB_ASSEMBLY_BINARYEN_VERSION_TAG}-${ARCH}-${WEB_ASSEMBLY_BINARYEN_SYSTEM_NAME}.tar.gz`; + +await download( + `https://github.com/WebAssembly/binaryen/releases/download/${WEB_ASSEMBLY_BINARYEN_VERSION_TAG}/${WEB_ASSEMBLY_BINARYEN_TAR_NAME}` +); + +fs.mkdirSync("webassembly"); + +await executeCommand(`tar --strip-components=1 -xvf ${WEB_ASSEMBLY_BINARYEN_TAR_NAME} --directory webassembly`); +fs.rmSync(WEB_ASSEMBLY_BINARYEN_TAR_NAME); + + signale.await("Installing QuickJS..."); const QUICK_JS_VERSION = `0.1.3`; diff --git a/packages/near-sdk-js/src/types/index.ts b/packages/near-sdk-js/src/types/index.ts index 73c741d3f..9dfdcca33 100644 --- a/packages/near-sdk-js/src/types/index.ts +++ b/packages/near-sdk-js/src/types/index.ts @@ -1,5 +1,16 @@ +import * as ts from "typescript"; + export * from "./account_id"; export * from "./gas"; export * from "./primitives"; export * from "./public_key"; export * from "./vm_types"; + +declare module "typescript" { + interface ClassDeclaration { + decorators?: ts.NodeArray; + } + interface MethodDeclaration { + decorators?: ts.NodeArray; + } +} diff --git a/packages/near-sdk-js/src/utils.ts b/packages/near-sdk-js/src/utils.ts index 3c4ac140c..0b11680f9 100644 --- a/packages/near-sdk-js/src/utils.ts +++ b/packages/near-sdk-js/src/utils.ts @@ -1,5 +1,4 @@ import { GetOptions } from "./types/collections"; -import { cloneDeep } from "lodash-es"; export interface Env { uint8array_to_latin1_string(a: Uint8Array): string; @@ -266,7 +265,8 @@ export function decodeObj2class(class_instance, obj) { class_instance[key] = obj[key]; } } - const instance_tmp = cloneDeep(class_instance); + const instance_tmp = deepCopy(class_instance); + for (key in obj) { if ( typeof class_instance[key] == "object" && @@ -360,3 +360,57 @@ export function decode(a: Uint8Array): string { export interface IntoStorageKey { into_storage_key(): string; } + +export function deepCopy(obj: T): T { + // Handle primitives and null + if (obj === null || typeof obj !== "object") { + return obj; + } + + // Handle Date objects + if (obj instanceof Date) { + return new Date(obj.getTime()) as unknown as T; + } + + // Handle RegExp objects + if (obj instanceof RegExp) { + return new RegExp(obj.source, obj.flags) as unknown as T; + } + + // Handle Map objects + if (obj instanceof Map) { + const mapCopy = new Map(); + obj.forEach((value, key) => { + mapCopy.set(deepCopy(key), deepCopy(value)); + }); + return mapCopy as unknown as T; + } + + // Handle Set objects + if (obj instanceof Set) { + const setCopy = new Set(); + obj.forEach((value) => { + setCopy.add(deepCopy(value)); + }); + return setCopy as unknown as T; + } + + // Handle Arrays + if (Array.isArray(obj)) { + return obj.map((item) => deepCopy(item)) as unknown as T; + } + + // Handle Objects + const copy = Object.create(Object.getPrototypeOf(obj)); + Object.getOwnPropertyNames(obj).forEach((key) => { + copy[key] = deepCopy(obj[key]); + }); + + // Handle symbol properties + const symbols = Object.getOwnPropertySymbols(obj); + symbols.forEach((sym) => { + copy[sym] = deepCopy(obj[sym]); + }); + + return copy as T; +} diff --git a/packages/near-sdk-js/tsconfig.json b/packages/near-sdk-js/tsconfig.json index e9532036b..f05f96fac 100644 --- a/packages/near-sdk-js/tsconfig.json +++ b/packages/near-sdk-js/tsconfig.json @@ -17,6 +17,7 @@ "noImplicitReturns": true, "noUnusedLocals": true, "experimentalDecorators": true, + "emitDecoratorMetadata": true, "resolveJsonModule": true, "allowJs": true, "skipLibCheck": true diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c4c4a4d2e..f8d6c7448 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,4 +1,4 @@ -lockfileVersion: '6.0' +lockfileVersion: '9.0' settings: autoInstallPeers: true @@ -9,13 +9,13 @@ importers: .: devDependencies: turbo: - specifier: ^1.4.5 - version: 1.10.16 + specifier: 1.13.3 + version: 1.13.3 typedoc: specifier: ^0.25.3 - version: 0.25.4(typescript@4.7.4) + version: 0.25.13(typescript@4.7.4) typescript: - specifier: ^4.7.4 + specifier: 4.7.4 version: 4.7.4 benchmark: @@ -24,7 +24,7 @@ importers: specifier: workspace:* version: link:../packages/near-sdk-js typescript: - specifier: ^4.7.4 + specifier: 4.7.4 version: 4.7.4 devDependencies: ava: @@ -52,7 +52,7 @@ importers: specifier: workspace:* version: link:../packages/near-sdk-js typescript: - specifier: ^4.7.4 + specifier: 4.7.4 version: 4.7.4 devDependencies: '@types/lodash-es': @@ -70,34 +70,31 @@ importers: packages/near-contract-standards: dependencies: - lodash-es: - specifier: ^4.17.21 - version: 4.17.21 near-sdk-js: specifier: workspace:* version: link:../near-sdk-js devDependencies: typescript: - specifier: ^4.7.4 + specifier: 4.7.4 version: 4.7.4 packages/near-sdk-js: dependencies: '@babel/core': specifier: ^7.20.5 - version: 7.23.5 + version: 7.25.2 '@babel/plugin-proposal-decorators': specifier: ^7.17.2 - version: 7.23.5(@babel/core@7.23.5) + version: 7.24.7(@babel/core@7.25.2) '@babel/preset-typescript': specifier: ^7.18.6 - version: 7.23.3(@babel/core@7.23.5) + version: 7.24.7(@babel/core@7.25.2) '@babel/types': specifier: ^7.20.5 - version: 7.23.5 + version: 7.25.2 '@rollup/plugin-babel': specifier: ^5.3.1 - version: 5.3.1(@babel/core@7.23.5)(@types/babel__core@7.20.5)(rollup@2.79.1) + version: 5.3.1(@babel/core@7.25.2)(@types/babel__core@7.20.5)(rollup@2.79.1) '@rollup/plugin-commonjs': specifier: ^21.0.1 version: 21.1.0(rollup@2.79.1) @@ -106,28 +103,25 @@ importers: version: 13.3.0(rollup@2.79.1) '@scure/base': specifier: ^1.1.1 - version: 1.1.3 + version: 1.1.7 '@types/estree': specifier: ^1.0.0 version: 1.0.5 '@typescript-eslint/eslint-plugin': specifier: ^5.31.0 - version: 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.54.0)(typescript@4.7.4) + version: 5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@4.7.4))(eslint@8.57.0)(typescript@4.7.4) '@typescript-eslint/parser': specifier: ^5.31.0 - version: 5.62.0(eslint@8.54.0)(typescript@4.7.4) + version: 5.62.0(eslint@8.57.0)(typescript@4.7.4) commander: specifier: ^9.4.1 version: 9.5.0 eslint: specifier: ^8.20.0 - version: 8.54.0 + version: 8.57.0 json-schema: specifier: 0.4.0 version: 0.4.0 - lodash-es: - specifier: ^4.17.21 - version: 4.17.21 near-abi: specifier: ^0.1.0 version: 0.1.1 @@ -140,6 +134,9 @@ importers: rollup-plugin-sourcemaps: specifier: ^0.6.3 version: 0.6.3(@types/node@17.0.45)(rollup@2.79.1) + rollup-plugin-terser: + specifier: ^7.0.2 + version: 7.0.2(rollup@2.79.1) signale: specifier: ^1.4.0 version: 1.4.0 @@ -147,21 +144,21 @@ importers: specifier: ^16.0.0 version: 16.0.0 typescript: - specifier: ~4.7.2 + specifier: 4.7.4 version: 4.7.4 devDependencies: '@rollup/plugin-typescript': specifier: ^8.3.2 - version: 8.5.0(rollup@2.79.1)(typescript@4.7.4) + version: 8.5.0(rollup@2.79.1)(tslib@1.14.1)(typescript@4.7.4) '@types/babel__core': specifier: ^7.1.19 version: 7.20.5 '@types/babel__traverse': specifier: ^7.18.1 - version: 7.20.4 + version: 7.20.6 '@types/eslint': specifier: ^8.4.6 - version: 8.44.7 + version: 8.56.11 '@types/node': specifier: ^17.0.38 version: 17.0.45 @@ -176,7 +173,7 @@ importers: version: 5.3.0 eslint-config-prettier: specifier: ^8.5.0 - version: 8.10.0(eslint@8.54.0) + version: 8.10.0(eslint@8.57.0) json5: specifier: ^2.2.3 version: 2.2.3 @@ -193,7 +190,7 @@ importers: specifier: workspace:* version: link:../packages/near-sdk-js typescript: - specifier: ^4.7.4 + specifier: 4.7.4 version: 4.7.4 devDependencies: ava: @@ -208,579 +205,260 @@ importers: packages: - /@aashutoshrathi/word-wrap@1.2.6: - resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} - engines: {node: '>=0.10.0'} - - /@ampproject/remapping@2.2.1: - resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} + '@ampproject/remapping@2.3.0': + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} - dependencies: - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.20 - dev: false - /@babel/code-frame@7.23.5: - resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} + '@babel/code-frame@7.24.7': + resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/highlight': 7.23.4 - chalk: 2.4.2 - dev: false - /@babel/compat-data@7.23.5: - resolution: {integrity: sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==} + '@babel/compat-data@7.25.2': + resolution: {integrity: sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ==} engines: {node: '>=6.9.0'} - dev: false - /@babel/core@7.23.5: - resolution: {integrity: sha512-Cwc2XjUrG4ilcfOw4wBAK+enbdgwAcAJCfGUItPBKR7Mjw4aEfAFYrLxeRp4jWgtNIKn3n2AlBOfwwafl+42/g==} + '@babel/core@7.25.2': + resolution: {integrity: sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==} engines: {node: '>=6.9.0'} - dependencies: - '@ampproject/remapping': 2.2.1 - '@babel/code-frame': 7.23.5 - '@babel/generator': 7.23.5 - '@babel/helper-compilation-targets': 7.22.15 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.5) - '@babel/helpers': 7.23.5 - '@babel/parser': 7.23.5 - '@babel/template': 7.22.15 - '@babel/traverse': 7.23.5 - '@babel/types': 7.23.5 - convert-source-map: 2.0.0 - debug: 4.3.4 - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - dev: false - /@babel/generator@7.23.5: - resolution: {integrity: sha512-BPssCHrBD+0YrxviOa3QzpqwhNIXKEtOa2jQrm4FlmkC2apYgRnQcmPWiGZDlGxiNtltnUFolMe8497Esry+jA==} + '@babel/generator@7.25.0': + resolution: {integrity: sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.23.5 - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.20 - jsesc: 2.5.2 - dev: false - /@babel/helper-annotate-as-pure@7.22.5: - resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} + '@babel/helper-annotate-as-pure@7.24.7': + resolution: {integrity: sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.23.5 - dev: false - /@babel/helper-compilation-targets@7.22.15: - resolution: {integrity: sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==} + '@babel/helper-compilation-targets@7.25.2': + resolution: {integrity: sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/compat-data': 7.23.5 - '@babel/helper-validator-option': 7.23.5 - browserslist: 4.22.1 - lru-cache: 5.1.1 - semver: 6.3.1 - dev: false - /@babel/helper-create-class-features-plugin@7.23.5(@babel/core@7.23.5): - resolution: {integrity: sha512-QELlRWxSpgdwdJzSJn4WAhKC+hvw/AtHbbrIoncKHkhKKR/luAlKkgBDcri1EzWAo8f8VvYVryEHN4tax/V67A==} + '@babel/helper-create-class-features-plugin@7.25.0': + resolution: {integrity: sha512-GYM6BxeQsETc9mnct+nIIpf63SAyzvyYN7UB/IlTyd+MBg06afFGp0mIeUqGyWgS2mxad6vqbMrHVlaL3m70sQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.23.5 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-member-expression-to-functions': 7.23.0 - '@babel/helper-optimise-call-expression': 7.22.5 - '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.5) - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - semver: 6.3.1 - dev: false - - /@babel/helper-environment-visitor@7.22.20: - resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} - engines: {node: '>=6.9.0'} - dev: false - - /@babel/helper-function-name@7.23.0: - resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/template': 7.22.15 - '@babel/types': 7.23.5 - dev: false - - /@babel/helper-hoist-variables@7.22.5: - resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.23.5 - dev: false - /@babel/helper-member-expression-to-functions@7.23.0: - resolution: {integrity: sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==} + '@babel/helper-member-expression-to-functions@7.24.8': + resolution: {integrity: sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.23.5 - dev: false - /@babel/helper-module-imports@7.22.15: - resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} + '@babel/helper-module-imports@7.24.7': + resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.23.5 - dev: false - /@babel/helper-module-transforms@7.23.3(@babel/core@7.23.5): - resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} + '@babel/helper-module-transforms@7.25.2': + resolution: {integrity: sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.23.5 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-module-imports': 7.22.15 - '@babel/helper-simple-access': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/helper-validator-identifier': 7.22.20 - dev: false - /@babel/helper-optimise-call-expression@7.22.5: - resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} + '@babel/helper-optimise-call-expression@7.24.7': + resolution: {integrity: sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.23.5 - dev: false - /@babel/helper-plugin-utils@7.22.5: - resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} + '@babel/helper-plugin-utils@7.24.8': + resolution: {integrity: sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==} engines: {node: '>=6.9.0'} - dev: false - /@babel/helper-replace-supers@7.22.20(@babel/core@7.23.5): - resolution: {integrity: sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==} + '@babel/helper-replace-supers@7.25.0': + resolution: {integrity: sha512-q688zIvQVYtZu+i2PsdIu/uWGRpfxzr5WESsfpShfZECkO+d2o+WROWezCi/Q6kJ0tfPa5+pUGUlfx2HhrA3Bg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.23.5 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-member-expression-to-functions': 7.23.0 - '@babel/helper-optimise-call-expression': 7.22.5 - dev: false - - /@babel/helper-simple-access@7.22.5: - resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.23.5 - dev: false - /@babel/helper-skip-transparent-expression-wrappers@7.22.5: - resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==} + '@babel/helper-simple-access@7.24.7': + resolution: {integrity: sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.23.5 - dev: false - /@babel/helper-split-export-declaration@7.22.6: - resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} + '@babel/helper-skip-transparent-expression-wrappers@7.24.7': + resolution: {integrity: sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.23.5 - dev: false - /@babel/helper-string-parser@7.23.4: - resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==} + '@babel/helper-string-parser@7.24.8': + resolution: {integrity: sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==} engines: {node: '>=6.9.0'} - /@babel/helper-validator-identifier@7.22.20: - resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} + '@babel/helper-validator-identifier@7.24.7': + resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} engines: {node: '>=6.9.0'} - /@babel/helper-validator-option@7.23.5: - resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==} + '@babel/helper-validator-option@7.24.8': + resolution: {integrity: sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==} engines: {node: '>=6.9.0'} - dev: false - /@babel/helpers@7.23.5: - resolution: {integrity: sha512-oO7us8FzTEsG3U6ag9MfdF1iA/7Z6dz+MtFhifZk8C8o453rGJFFWUP1t+ULM9TUIAzC9uxXEiXjOiVMyd7QPg==} + '@babel/helpers@7.25.0': + resolution: {integrity: sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/template': 7.22.15 - '@babel/traverse': 7.23.5 - '@babel/types': 7.23.5 - transitivePeerDependencies: - - supports-color - dev: false - /@babel/highlight@7.23.4: - resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} + '@babel/highlight@7.24.7': + resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-validator-identifier': 7.22.20 - chalk: 2.4.2 - js-tokens: 4.0.0 - dev: false - /@babel/parser@7.23.5: - resolution: {integrity: sha512-hOOqoiNXrmGdFbhgCzu6GiURxUgM27Xwd/aPuu8RfHEZPBzL1Z54okAHAQjXfcQNwvrlkAmAp4SlRTZ45vlthQ==} + '@babel/parser@7.25.3': + resolution: {integrity: sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==} engines: {node: '>=6.0.0'} hasBin: true - dependencies: - '@babel/types': 7.23.5 - /@babel/plugin-proposal-decorators@7.23.5(@babel/core@7.23.5): - resolution: {integrity: sha512-6IsY8jOeWibsengGlWIezp7cuZEFzNlAghFpzh9wiZwhQ42/hRcPnY/QV9HJoKTlujupinSlnQPiEy/u2C1ZfQ==} + '@babel/plugin-proposal-decorators@7.24.7': + resolution: {integrity: sha512-RL9GR0pUG5Kc8BUWLNDm2T5OpYwSX15r98I0IkgmRQTXuELq/OynH8xtMTMvTJFjXbMWFVTKtYkTaYQsuAwQlQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.5 - '@babel/helper-create-class-features-plugin': 7.23.5(@babel/core@7.23.5) - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.5) - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/plugin-syntax-decorators': 7.23.3(@babel/core@7.23.5) - dev: false - /@babel/plugin-syntax-decorators@7.23.3(@babel/core@7.23.5): - resolution: {integrity: sha512-cf7Niq4/+/juY67E0PbgH0TDhLQ5J7zS8C/Q5FFx+DWyrRa9sUQdTXkjqKu8zGvuqr7vw1muKiukseihU+PJDA==} + '@babel/plugin-syntax-decorators@7.24.7': + resolution: {integrity: sha512-Ui4uLJJrRV1lb38zg1yYTmRKmiZLiftDEvZN2iq3kd9kUFU+PttmzTbAFC2ucRk/XJmtek6G23gPsuZbhrT8fQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.5 - '@babel/helper-plugin-utils': 7.22.5 - dev: false - /@babel/plugin-syntax-jsx@7.23.3(@babel/core@7.23.5): - resolution: {integrity: sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==} + '@babel/plugin-syntax-jsx@7.24.7': + resolution: {integrity: sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.5 - '@babel/helper-plugin-utils': 7.22.5 - dev: false - /@babel/plugin-syntax-typescript@7.23.3(@babel/core@7.23.5): - resolution: {integrity: sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==} + '@babel/plugin-syntax-typescript@7.24.7': + resolution: {integrity: sha512-c/+fVeJBB0FeKsFvwytYiUD+LBvhHjGSI0g446PRGdSVGZLRNArBUno2PETbAly3tpiNAQR5XaZ+JslxkotsbA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.5 - '@babel/helper-plugin-utils': 7.22.5 - dev: false - /@babel/plugin-transform-modules-commonjs@7.23.3(@babel/core@7.23.5): - resolution: {integrity: sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==} + '@babel/plugin-transform-modules-commonjs@7.24.8': + resolution: {integrity: sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.5 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.5) - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-simple-access': 7.22.5 - dev: false - /@babel/plugin-transform-typescript@7.23.5(@babel/core@7.23.5): - resolution: {integrity: sha512-2fMkXEJkrmwgu2Bsv1Saxgj30IXZdJ+84lQcKKI7sm719oXs0BBw2ZENKdJdR1PjWndgLCEBNXJOri0fk7RYQA==} + '@babel/plugin-transform-typescript@7.25.2': + resolution: {integrity: sha512-lBwRvjSmqiMYe/pS0+1gggjJleUJi7NzjvQ1Fkqtt69hBa/0t1YuW/MLQMAPixfwaQOHUXsd6jeU3Z+vdGv3+A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.5 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.23.5(@babel/core@7.23.5) - '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.23.5) - dev: false - /@babel/preset-typescript@7.23.3(@babel/core@7.23.5): - resolution: {integrity: sha512-17oIGVlqz6CchO9RFYn5U6ZpWRZIngayYCtrPRSgANSwC2V1Jb+iP74nVxzzXJte8b8BYxrL1yY96xfhTBrNNQ==} + '@babel/preset-typescript@7.24.7': + resolution: {integrity: sha512-SyXRe3OdWwIwalxDg5UtJnJQO+YPcTfwiIY2B0Xlddh9o7jpWLvv8X1RthIeDOxQ+O1ML5BLPCONToObyVQVuQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.5 - '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-validator-option': 7.23.5 - '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.5) - '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.23.5) - '@babel/plugin-transform-typescript': 7.23.5(@babel/core@7.23.5) - dev: false - /@babel/template@7.22.15: - resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==} + '@babel/template@7.25.0': + resolution: {integrity: sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': 7.23.5 - '@babel/parser': 7.23.5 - '@babel/types': 7.23.5 - dev: false - /@babel/traverse@7.23.5: - resolution: {integrity: sha512-czx7Xy5a6sapWWRx61m1Ke1Ra4vczu1mCTtJam5zRTBOonfdJ+S/B6HYmGYu3fJtr8GGET3si6IhgWVBhJ/m8w==} + '@babel/traverse@7.25.3': + resolution: {integrity: sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': 7.23.5 - '@babel/generator': 7.23.5 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/parser': 7.23.5 - '@babel/types': 7.23.5 - debug: 4.3.4 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - dev: false - /@babel/types@7.23.5: - resolution: {integrity: sha512-ON5kSOJwVO6xXVRTvOI0eOnWe7VdUcIpsovGo9U/Br4Ie4UVFQTboO2cYnDhAGU6Fp+UxSiT+pMft0SMHfuq6w==} + '@babel/types@7.25.2': + resolution: {integrity: sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-string-parser': 7.23.4 - '@babel/helper-validator-identifier': 7.22.20 - to-fast-properties: 2.0.0 - /@cspotcode/source-map-support@0.8.1: + '@cspotcode/source-map-support@0.8.1': resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} - dependencies: - '@jridgewell/trace-mapping': 0.3.9 - dev: false - /@eslint-community/eslint-utils@4.4.0(eslint@8.54.0): + '@eslint-community/eslint-utils@4.4.0': resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - dependencies: - eslint: 8.54.0 - eslint-visitor-keys: 3.4.3 - /@eslint-community/regexpp@4.10.0: - resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} + '@eslint-community/regexpp@4.11.0': + resolution: {integrity: sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - /@eslint/eslintrc@2.1.3: - resolution: {integrity: sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA==} + '@eslint/eslintrc@2.1.4': + resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - ajv: 6.12.6 - debug: 4.3.4 - espree: 9.6.1 - globals: 13.23.0 - ignore: 5.3.0 - import-fresh: 3.3.0 - js-yaml: 4.1.0 - minimatch: 3.1.2 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - supports-color - /@eslint/js@8.54.0: - resolution: {integrity: sha512-ut5V+D+fOoWPgGGNj83GGjnntO39xDy6DWxO0wb7Jp3DcMX0TfIqdzHF85VTQkerdyGmuuMD9AKAo5KiNlf/AQ==} + '@eslint/js@8.57.0': + resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - /@humanwhocodes/config-array@0.11.13: - resolution: {integrity: sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==} + '@humanwhocodes/config-array@0.11.14': + resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} engines: {node: '>=10.10.0'} - dependencies: - '@humanwhocodes/object-schema': 2.0.1 - debug: 4.3.4 - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color + deprecated: Use @eslint/config-array instead - /@humanwhocodes/module-importer@1.0.1: + '@humanwhocodes/module-importer@1.0.1': resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} engines: {node: '>=12.22'} - /@humanwhocodes/object-schema@2.0.1: - resolution: {integrity: sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==} + '@humanwhocodes/object-schema@2.0.3': + resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} + deprecated: Use @eslint/object-schema instead - /@jridgewell/gen-mapping@0.3.3: - resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} + '@jridgewell/gen-mapping@0.3.5': + resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} engines: {node: '>=6.0.0'} - dependencies: - '@jridgewell/set-array': 1.1.2 - '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.20 - dev: false - /@jridgewell/resolve-uri@3.1.1: - resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} - dev: false - /@jridgewell/set-array@1.1.2: - resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} + '@jridgewell/set-array@1.2.1': + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} engines: {node: '>=6.0.0'} - dev: false - /@jridgewell/sourcemap-codec@1.4.15: - resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} - dev: false + '@jridgewell/source-map@0.3.6': + resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==} - /@jridgewell/trace-mapping@0.3.20: - resolution: {integrity: sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==} - dependencies: - '@jridgewell/resolve-uri': 3.1.1 - '@jridgewell/sourcemap-codec': 1.4.15 - dev: false + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} - /@jridgewell/trace-mapping@0.3.9: + '@jridgewell/trace-mapping@0.3.25': + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + + '@jridgewell/trace-mapping@0.3.9': resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} - dependencies: - '@jridgewell/resolve-uri': 3.1.1 - '@jridgewell/sourcemap-codec': 1.4.15 - dev: false - /@near-js/accounts@0.1.4: + '@near-js/accounts@0.1.4': resolution: {integrity: sha512-zHFmL4OUZ4qHXOE+dDBkYgTNHLWC5RmYUVp9LiuGciO5zFPp7WlxmowJL0QjgXqV1w+dNXq3mgmkfAgYVS8Xjw==} - dependencies: - '@near-js/crypto': 0.0.5 - '@near-js/providers': 0.0.7 - '@near-js/signers': 0.0.5 - '@near-js/transactions': 0.2.1 - '@near-js/types': 0.0.4 - '@near-js/utils': 0.0.4 - ajv: 8.12.0 - ajv-formats: 2.1.1(ajv@8.12.0) - bn.js: 5.2.1 - borsh: 0.7.0 - depd: 2.0.0 - near-abi: 0.1.1 - transitivePeerDependencies: - - encoding - dev: true - /@near-js/crypto@0.0.5: + '@near-js/crypto@0.0.5': resolution: {integrity: sha512-nbQ971iYES5Spiolt+p568gNuZ//HeMHm3qqT3xT+i8ZzgbC//l6oRf48SUVTPAboQ1TJ5dW/NqcxOY0pe7b4g==} - dependencies: - '@near-js/types': 0.0.4 - bn.js: 5.2.1 - borsh: 0.7.0 - tweetnacl: 1.0.3 - dev: true - /@near-js/keystores-browser@0.0.5: + '@near-js/keystores-browser@0.0.5': resolution: {integrity: sha512-mHF3Vcvsr7xnkaM/reOyxtykbE3OWKV6vQzqyTH2tZYT2OTEnj0KhRT9BCFC0Ra67K1zQLbg49Yc/kDCc5qupA==} - dependencies: - '@near-js/crypto': 0.0.5 - '@near-js/keystores': 0.0.5 - dev: true - /@near-js/keystores-node@0.0.5: + '@near-js/keystores-node@0.0.5': resolution: {integrity: sha512-BYmWyGNydfAqi7eYA1Jo8zULL13cxejD2VBr0BBIXx5bJ+BO4TLecsY1xdTBEq06jyWXHa7kV4h8BJzAjvpTLg==} - dependencies: - '@near-js/crypto': 0.0.5 - '@near-js/keystores': 0.0.5 - dev: true - /@near-js/keystores@0.0.5: + '@near-js/keystores@0.0.5': resolution: {integrity: sha512-kxqV+gw/3L8/axe9prhlU+M0hfybkxX54xfI0EEpWP2QiUV+qw+jkKolYIbdk5tdEZrGf9jHawh1yFtwP7APPQ==} - dependencies: - '@near-js/crypto': 0.0.5 - '@near-js/types': 0.0.4 - dev: true - /@near-js/providers@0.0.7: + '@near-js/providers@0.0.7': resolution: {integrity: sha512-qj16Ey+vSw7lHE85xW+ykYJoLPr4A6Q/TsfpwhJLS6zBInSC6sKVqPO1L8bK4VA/yB7V7JJPor9UVCWgRXdNEA==} - dependencies: - '@near-js/transactions': 0.2.1 - '@near-js/types': 0.0.4 - '@near-js/utils': 0.0.4 - bn.js: 5.2.1 - borsh: 0.7.0 - http-errors: 1.8.1 - optionalDependencies: - node-fetch: 2.7.0 - transitivePeerDependencies: - - encoding - dev: true - /@near-js/signers@0.0.5: + '@near-js/signers@0.0.5': resolution: {integrity: sha512-XJjYYatehxHakHa7WAoiQ8uIBSWBR2EnO4GzlIe8qpWL+LoH4t68MSezC1HwT546y9YHIvePjwDrBeYk8mg20w==} - dependencies: - '@near-js/crypto': 0.0.5 - '@near-js/keystores': 0.0.5 - js-sha256: 0.9.0 - dev: true - /@near-js/transactions@0.2.1: + '@near-js/transactions@0.2.1': resolution: {integrity: sha512-V9tXzkICDPruSxihKXkBhUgsI4uvW7TwXlnZS2GZpPsFFiIUeGrso0wo4uiQwB6miFA5q6fKaAtQa4F2v1s+zg==} - dependencies: - '@near-js/crypto': 0.0.5 - '@near-js/signers': 0.0.5 - '@near-js/types': 0.0.4 - '@near-js/utils': 0.0.4 - bn.js: 5.2.1 - borsh: 0.7.0 - js-sha256: 0.9.0 - dev: true - /@near-js/types@0.0.4: + '@near-js/types@0.0.4': resolution: {integrity: sha512-8TTMbLMnmyG06R5YKWuS/qFG1tOA3/9lX4NgBqQPsvaWmDsa+D+QwOkrEHDegped0ZHQwcjAXjKML1S1TyGYKg==} - dependencies: - bn.js: 5.2.1 - dev: true - /@near-js/utils@0.0.4: + '@near-js/utils@0.0.4': resolution: {integrity: sha512-mPUEPJbTCMicGitjEGvQqOe8AS7O4KkRCxqd0xuE/X6gXF1jz1pYMZn4lNUeUz2C84YnVSGLAM0o9zcN6Y4hiA==} - dependencies: - '@near-js/types': 0.0.4 - bn.js: 5.2.1 - depd: 2.0.0 - mustache: 4.2.0 - dev: true - /@near-js/wallet-account@0.0.7: + '@near-js/wallet-account@0.0.7': resolution: {integrity: sha512-tmRyieG/wHmuNkg/WGFyKD6iH6atHPbY0rZ5OjOIiteuhZEPgp+z8OBpiQ4qumTa63q46aj/QVSQL0J3+JmBfw==} - dependencies: - '@near-js/accounts': 0.1.4 - '@near-js/crypto': 0.0.5 - '@near-js/keystores': 0.0.5 - '@near-js/signers': 0.0.5 - '@near-js/transactions': 0.2.1 - '@near-js/types': 0.0.4 - '@near-js/utils': 0.0.4 - bn.js: 5.2.1 - borsh: 0.7.0 - transitivePeerDependencies: - - encoding - dev: true - /@nodelib/fs.scandir@2.1.5: + '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} - dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 - /@nodelib/fs.stat@2.0.5: + '@nodelib/fs.stat@2.0.5': resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} engines: {node: '>= 8'} - /@nodelib/fs.walk@1.2.8: + '@nodelib/fs.walk@1.2.8': resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.15.0 - /@rollup/plugin-babel@5.3.1(@babel/core@7.23.5)(@types/babel__core@7.20.5)(rollup@2.79.1): + '@rollup/plugin-babel@5.3.1': resolution: {integrity: sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==} engines: {node: '>= 10.0.0'} peerDependencies: @@ -790,46 +468,20 @@ packages: peerDependenciesMeta: '@types/babel__core': optional: true - dependencies: - '@babel/core': 7.23.5 - '@babel/helper-module-imports': 7.22.15 - '@rollup/pluginutils': 3.1.0(rollup@2.79.1) - '@types/babel__core': 7.20.5 - rollup: 2.79.1 - dev: false - /@rollup/plugin-commonjs@21.1.0(rollup@2.79.1): + '@rollup/plugin-commonjs@21.1.0': resolution: {integrity: sha512-6ZtHx3VHIp2ReNNDxHjuUml6ur+WcQ28N1yHgCQwsbNkQg2suhxGMDQGJOn/KuDxKtd1xuZP5xSTwBA4GQ8hbA==} engines: {node: '>= 8.0.0'} peerDependencies: rollup: ^2.38.3 - dependencies: - '@rollup/pluginutils': 3.1.0(rollup@2.79.1) - commondir: 1.0.1 - estree-walker: 2.0.2 - glob: 7.2.3 - is-reference: 1.2.1 - magic-string: 0.25.9 - resolve: 1.22.8 - rollup: 2.79.1 - dev: false - /@rollup/plugin-node-resolve@13.3.0(rollup@2.79.1): + '@rollup/plugin-node-resolve@13.3.0': resolution: {integrity: sha512-Lus8rbUo1eEcnS4yTFKLZrVumLPY+YayBdWXgFSHYhTT2iJbMhoaaBL3xl5NCdeRytErGr8tZ0L71BMRmnlwSw==} engines: {node: '>= 10.0.0'} peerDependencies: rollup: ^2.42.0 - dependencies: - '@rollup/pluginutils': 3.1.0(rollup@2.79.1) - '@types/resolve': 1.17.1 - deepmerge: 4.3.1 - is-builtin-module: 3.2.1 - is-module: 1.0.0 - resolve: 1.22.8 - rollup: 2.79.1 - dev: false - /@rollup/plugin-typescript@8.5.0(rollup@2.79.1)(typescript@4.7.4): + '@rollup/plugin-typescript@8.5.0': resolution: {integrity: sha512-wMv1/scv0m/rXx21wD2IsBbJFba8wGF3ErJIr6IKRfRj49S85Lszbxb4DCo8iILpluTjk2GAAu9CoZt4G3ppgQ==} engines: {node: '>=8.0.0'} peerDependencies: @@ -839,172 +491,101 @@ packages: peerDependenciesMeta: tslib: optional: true - dependencies: - '@rollup/pluginutils': 3.1.0(rollup@2.79.1) - resolve: 1.22.8 - rollup: 2.79.1 - typescript: 4.7.4 - dev: true - /@rollup/pluginutils@3.1.0(rollup@2.79.1): + '@rollup/pluginutils@3.1.0': resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==} engines: {node: '>= 8.0.0'} peerDependencies: rollup: ^1.20.0||^2.0.0 - dependencies: - '@types/estree': 0.0.39 - estree-walker: 1.0.1 - picomatch: 2.3.1 - rollup: 2.79.1 - /@scure/base@1.1.3: - resolution: {integrity: sha512-/+SgoRjLq7Xlf0CWuLHq2LUZeL/w65kfzAPG5NH9pcmBhs+nunQTn4gvdwgMTIXnt9b2C/1SeL2XiysZEyIC9Q==} - dev: false + '@scure/base@1.1.7': + resolution: {integrity: sha512-PPNYBslrLNNUQ/Yad37MHYsNQtK67EhWb6WtSvNLLPo7SdVZgkUjD6Dg+5On7zNwmskf8OX7I7Nx5oN+MIWE0g==} - /@sindresorhus/is@4.6.0: + '@sindresorhus/is@4.6.0': resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} engines: {node: '>=10'} - dev: true - /@szmarczak/http-timer@4.0.6: + '@szmarczak/http-timer@4.0.6': resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} engines: {node: '>=10'} - dependencies: - defer-to-connect: 2.0.1 - dev: true - /@ts-morph/common@0.17.0: + '@ts-morph/common@0.17.0': resolution: {integrity: sha512-RMSSvSfs9kb0VzkvQ2NWobwnj7TxCA9vI/IjR9bDHqgAyVbu2T0DN4wiKVqomyDWqO7dPr/tErSfq7urQ1Q37g==} - dependencies: - fast-glob: 3.3.2 - minimatch: 5.1.6 - mkdirp: 1.0.4 - path-browserify: 1.0.1 - dev: false - /@tsconfig/node10@1.0.9: - resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} - dev: false + '@tsconfig/node10@1.0.11': + resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} - /@tsconfig/node12@1.0.11: + '@tsconfig/node12@1.0.11': resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} - dev: false - /@tsconfig/node14@1.0.3: + '@tsconfig/node14@1.0.3': resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} - dev: false - /@tsconfig/node16@1.0.4: + '@tsconfig/node16@1.0.4': resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} - dev: false - /@types/babel__core@7.20.5: + '@types/babel__core@7.20.5': resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} - dependencies: - '@babel/parser': 7.23.5 - '@babel/types': 7.23.5 - '@types/babel__generator': 7.6.7 - '@types/babel__template': 7.4.4 - '@types/babel__traverse': 7.20.4 - /@types/babel__generator@7.6.7: - resolution: {integrity: sha512-6Sfsq+EaaLrw4RmdFWE9Onp63TOUue71AWb4Gpa6JxzgTYtimbM086WnYTy2U67AofR++QKCo08ZP6pwx8YFHQ==} - dependencies: - '@babel/types': 7.23.5 + '@types/babel__generator@7.6.8': + resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} - /@types/babel__template@7.4.4: + '@types/babel__template@7.4.4': resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} - dependencies: - '@babel/parser': 7.23.5 - '@babel/types': 7.23.5 - /@types/babel__traverse@7.20.4: - resolution: {integrity: sha512-mSM/iKUk5fDDrEV/e83qY+Cr3I1+Q3qqTuEn++HAWYjEa1+NxZr6CNrcJGf2ZTnq4HoFGC3zaTPZTobCzCFukA==} - dependencies: - '@babel/types': 7.23.5 + '@types/babel__traverse@7.20.6': + resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} - /@types/cacheable-request@6.0.3: + '@types/cacheable-request@6.0.3': resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==} - dependencies: - '@types/http-cache-semantics': 4.0.4 - '@types/keyv': 3.1.4 - '@types/node': 17.0.45 - '@types/responselike': 1.0.3 - dev: true - /@types/eslint@8.44.7: - resolution: {integrity: sha512-f5ORu2hcBbKei97U73mf+l9t4zTGl74IqZ0GQk4oVea/VS8tQZYkUveSYojk+frraAVYId0V2WC9O4PTNru2FQ==} - dependencies: - '@types/estree': 1.0.5 - '@types/json-schema': 7.0.15 - dev: true + '@types/eslint@8.56.11': + resolution: {integrity: sha512-sVBpJMf7UPo/wGecYOpk2aQya2VUGeHhe38WG7/mN5FufNSubf5VT9Uh9Uyp8/eLJpu1/tuhJ/qTo4mhSB4V4Q==} - /@types/estree@0.0.39: + '@types/estree@0.0.39': resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==} - /@types/estree@1.0.5: + '@types/estree@1.0.5': resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} - /@types/http-cache-semantics@4.0.4: + '@types/http-cache-semantics@4.0.4': resolution: {integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==} - dev: true - /@types/json-schema@7.0.15: + '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - /@types/keyv@3.1.4: + '@types/keyv@3.1.4': resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} - dependencies: - '@types/node': 17.0.45 - dev: true - /@types/lodash-es@4.17.12: + '@types/lodash-es@4.17.12': resolution: {integrity: sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==} - dependencies: - '@types/lodash': 4.14.202 - dev: true - /@types/lodash@4.14.202: - resolution: {integrity: sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ==} - dev: true + '@types/lodash@4.17.7': + resolution: {integrity: sha512-8wTvZawATi/lsmNu10/j2hk1KEP0IvjubqPE3cu1Xz7xfXXt5oCq3SNUz4fMIP4XGF9Ky+Ue2tBA3hcS7LSBlA==} - /@types/node@16.18.66: - resolution: {integrity: sha512-sePmD/imfKvC4re/Wwos1NEcXYm6O96CAG5gQVY53nmDb8ePQ4qPku6uruN7n6TJ0t5FhcoUc2+yvE2/UZVDZw==} - dev: false + '@types/node@16.18.105': + resolution: {integrity: sha512-w2d0Z9yMk07uH3+Cx0N8lqFyi3yjXZxlbYappPj+AsOlT02OyxyiuNoNHdGt6EuiSm8Wtgp2YV7vWg+GMFrvFA==} - /@types/node@17.0.45: + '@types/node@17.0.45': resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==} - /@types/resolve@1.17.1: + '@types/resolve@1.17.1': resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==} - dependencies: - '@types/node': 17.0.45 - dev: false - /@types/responselike@1.0.3: + '@types/responselike@1.0.3': resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==} - dependencies: - '@types/node': 17.0.45 - dev: true - /@types/rollup@0.54.0: + '@types/rollup@0.54.0': resolution: {integrity: sha512-oeYztLHhQ98jnr+u2cs1c3tHOGtpzrm9DJlIdEjznwoXWidUbrI+X6ib7zCkPIbB7eJ7VbbKNQ5n/bPnSg6Naw==} deprecated: This is a stub types definition for rollup (https://github.com/rollup/rollup). rollup provides its own type definitions, so you don't need @types/rollup installed! - dependencies: - rollup: 2.79.1 - dev: true - /@types/semver@7.5.6: - resolution: {integrity: sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==} - dev: false + '@types/semver@7.5.8': + resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} - /@types/signale@1.4.7: + '@types/signale@1.4.7': resolution: {integrity: sha512-nc0j37QupTT7OcYeH3gRE1ZfzUalEUsDKJsJ3IsJr0pjjFZTjtrX1Bsn6Kv56YXI/H9rNSwAkIPRxNlZI8GyQw==} - dependencies: - '@types/node': 17.0.45 - dev: true - /@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.54.0)(typescript@4.7.4): + '@typescript-eslint/eslint-plugin@5.62.0': resolution: {integrity: sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -1014,25 +595,8 @@ packages: peerDependenciesMeta: typescript: optional: true - dependencies: - '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 5.62.0(eslint@8.54.0)(typescript@4.7.4) - '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/type-utils': 5.62.0(eslint@8.54.0)(typescript@4.7.4) - '@typescript-eslint/utils': 5.62.0(eslint@8.54.0)(typescript@4.7.4) - debug: 4.3.4 - eslint: 8.54.0 - graphemer: 1.4.0 - ignore: 5.3.0 - natural-compare-lite: 1.4.0 - semver: 7.5.4 - tsutils: 3.21.0(typescript@4.7.4) - typescript: 4.7.4 - transitivePeerDependencies: - - supports-color - dev: false - /@typescript-eslint/parser@5.62.0(eslint@8.54.0)(typescript@4.7.4): + '@typescript-eslint/parser@5.62.0': resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -1041,26 +605,12 @@ packages: peerDependenciesMeta: typescript: optional: true - dependencies: - '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@4.7.4) - debug: 4.3.4 - eslint: 8.54.0 - typescript: 4.7.4 - transitivePeerDependencies: - - supports-color - dev: false - /@typescript-eslint/scope-manager@5.62.0: + '@typescript-eslint/scope-manager@5.62.0': resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/visitor-keys': 5.62.0 - dev: false - /@typescript-eslint/type-utils@5.62.0(eslint@8.54.0)(typescript@4.7.4): + '@typescript-eslint/type-utils@5.62.0': resolution: {integrity: sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -1069,23 +619,12 @@ packages: peerDependenciesMeta: typescript: optional: true - dependencies: - '@typescript-eslint/typescript-estree': 5.62.0(typescript@4.7.4) - '@typescript-eslint/utils': 5.62.0(eslint@8.54.0)(typescript@4.7.4) - debug: 4.3.4 - eslint: 8.54.0 - tsutils: 3.21.0(typescript@4.7.4) - typescript: 4.7.4 - transitivePeerDependencies: - - supports-color - dev: false - /@typescript-eslint/types@5.62.0: + '@typescript-eslint/types@5.62.0': resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: false - /@typescript-eslint/typescript-estree@5.62.0(typescript@4.7.4): + '@typescript-eslint/typescript-estree@5.62.0': resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -1093,225 +632,2585 @@ packages: peerDependenciesMeta: typescript: optional: true - dependencies: - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/visitor-keys': 5.62.0 - debug: 4.3.4 - globby: 11.1.0 - is-glob: 4.0.3 - semver: 7.5.4 - tsutils: 3.21.0(typescript@4.7.4) - typescript: 4.7.4 - transitivePeerDependencies: - - supports-color - dev: false - /@typescript-eslint/utils@5.62.0(eslint@8.54.0)(typescript@4.7.4): + '@typescript-eslint/utils@5.62.0': resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.54.0) - '@types/json-schema': 7.0.15 - '@types/semver': 7.5.6 - '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@4.7.4) - eslint: 8.54.0 - eslint-scope: 5.1.1 - semver: 7.5.4 - transitivePeerDependencies: - - supports-color - - typescript - dev: false - /@typescript-eslint/visitor-keys@5.62.0: + '@typescript-eslint/visitor-keys@5.62.0': resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - '@typescript-eslint/types': 5.62.0 - eslint-visitor-keys: 3.4.3 - dev: false - /@ungap/structured-clone@1.2.0: + '@ungap/structured-clone@1.2.0': resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} - /acorn-jsx@5.3.2(acorn@8.11.2): + acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - dependencies: - acorn: 8.11.2 - /acorn-walk@8.3.0: - resolution: {integrity: sha512-FS7hV565M5l1R08MXqo8odwMTB02C2UqzB17RVgu9EyuYFBqJZ3/ZY97sQD5FewVu1UyDFc1yztUDrAwT0EypA==} + acorn-walk@8.3.3: + resolution: {integrity: sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==} engines: {node: '>=0.4.0'} - /acorn@8.11.2: - resolution: {integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==} + acorn@8.12.1: + resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} engines: {node: '>=0.4.0'} hasBin: true - /aggregate-error@3.1.0: + aggregate-error@3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} - dependencies: - clean-stack: 2.2.0 - indent-string: 4.0.0 - dev: true - /aggregate-error@4.0.1: + aggregate-error@4.0.1: resolution: {integrity: sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==} engines: {node: '>=12'} - dependencies: - clean-stack: 4.2.0 - indent-string: 5.0.0 - dev: true - /ajv-formats@2.1.1(ajv@8.12.0): + ajv-formats@2.1.1: resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} peerDependencies: ajv: ^8.0.0 peerDependenciesMeta: ajv: optional: true - dependencies: - ajv: 8.12.0 - dev: true - /ajv@6.12.6: + ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} - dependencies: - fast-deep-equal: 3.1.3 - fast-json-stable-stringify: 2.1.0 - json-schema-traverse: 0.4.1 - uri-js: 4.4.1 - /ajv@8.12.0: - resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} - dependencies: - fast-deep-equal: 3.1.3 - json-schema-traverse: 1.0.0 - require-from-string: 2.0.2 - uri-js: 4.4.1 - dev: true + ajv@8.17.1: + resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} - /ansi-regex@5.0.1: + ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} - /ansi-regex@6.0.1: + ansi-regex@6.0.1: resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} engines: {node: '>=12'} - dev: true - /ansi-sequence-parser@1.1.1: + ansi-sequence-parser@1.1.1: resolution: {integrity: sha512-vJXt3yiaUL4UU546s3rPXlsry/RnM730G1+HkpKE012AN0sx1eOrxSu95oKDIonskeLTijMgqWZ3uDEe3NFvyg==} - dev: true - /ansi-styles@3.2.1: + ansi-styles@3.2.1: resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} engines: {node: '>=4'} - dependencies: - color-convert: 1.9.3 - /ansi-styles@4.3.0: + ansi-styles@4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} - dependencies: - color-convert: 2.0.1 - /ansi-styles@6.2.1: + ansi-styles@6.2.1: resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} engines: {node: '>=12'} - dev: true - /anymatch@3.1.3: + anymatch@3.1.3: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} - dependencies: - normalize-path: 3.0.0 - picomatch: 2.3.1 - dev: true - /arg@4.1.3: + arg@4.1.3: resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} - dev: false - /argparse@1.0.10: + argparse@1.0.10: resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} - dependencies: - sprintf-js: 1.0.3 - dev: true - /argparse@2.0.1: + argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - /array-buffer-byte-length@1.0.0: - resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} - dependencies: - call-bind: 1.0.5 - is-array-buffer: 3.0.2 - dev: true + array-buffer-byte-length@1.0.1: + resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} + engines: {node: '>= 0.4'} - /array-find-index@1.0.2: + array-find-index@1.0.2: resolution: {integrity: sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==} engines: {node: '>=0.10.0'} - dev: true - /array-union@2.1.0: + array-union@2.1.0: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} - /arraybuffer.prototype.slice@1.0.2: - resolution: {integrity: sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==} + arraybuffer.prototype.slice@1.0.3: + resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} engines: {node: '>= 0.4'} - dependencies: - array-buffer-byte-length: 1.0.0 - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - get-intrinsic: 1.2.2 - is-array-buffer: 3.0.2 - is-shared-array-buffer: 1.0.2 - dev: true - /arrgv@1.0.2: + arrgv@1.0.2: resolution: {integrity: sha512-a4eg4yhp7mmruZDQFqVMlxNRFGi/i1r87pt8SDHy0/I8PqSXoUTlWZRdAZo0VXgvEARcujbtTk8kiZRi1uDGRw==} engines: {node: '>=8.0.0'} - dev: true - /arrify@3.0.0: + arrify@3.0.0: resolution: {integrity: sha512-tLkvA81vQG/XqE2mjDkGQHoOINtMHtysSnemrmoGe6PydDPMRbVugqyk4A6V/WDWEfm3l+0d8anA9r8cv/5Jaw==} engines: {node: '>=12'} - dev: true - /atob@2.1.2: - resolution: {integrity: sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==} - engines: {node: '>= 4.5.0'} - hasBin: true - dev: false + atob@2.1.2: + resolution: {integrity: sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==} + engines: {node: '>= 4.5.0'} + hasBin: true + + ava@4.3.3: + resolution: {integrity: sha512-9Egq/d9R74ExrWohHeqUlexjDbgZJX5jA1Wq4KCTqc3wIfpGEK79zVy4rBtofJ9YKIxs4PzhJ8BgbW5PlAYe6w==} + engines: {node: '>=12.22 <13 || >=14.17 <15 || >=16.4 <17 || >=18'} + hasBin: true + peerDependencies: + '@ava/typescript': '*' + peerDependenciesMeta: + '@ava/typescript': + optional: true + + available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + base-x@3.0.10: + resolution: {integrity: sha512-7d0s06rR9rYaIWHkpfLIFICM/tkSVdoPC9qYAQRpxn9DdKNWNsKC0uk++akckyLq16Tx2WIinnZ6WRriAt6njQ==} + + base64url@3.0.1: + resolution: {integrity: sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==} + engines: {node: '>=6.0.0'} + + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + + blueimp-md5@2.19.0: + resolution: {integrity: sha512-DRQrD6gJyy8FbiE4s+bDoXS9hiW3Vbx5uCdwvcCf3zLHL+Iv7LtGHLpr+GZV8rHG8tK766FGYBwRbu8pELTt+w==} + + bn.js@5.2.1: + resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} + + borsh@0.5.0: + resolution: {integrity: sha512-p9w/qGBeeFdUf2GPBPHdX5JQyez8K5VtoFN7PqSfmR+cVUMSmcwAKhP9n2aXoDSKbtS7xZlZt3MVnrJL7GdYhg==} + + borsh@0.7.0: + resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==} + + borsh@1.0.0: + resolution: {integrity: sha512-fSVWzzemnyfF89EPwlUNsrS5swF5CrtiN4e+h0/lLf4dz2he4L3ndM20PS9wj7ICSkXJe/TQUHdaPTq15b1mNQ==} + + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + browserslist@4.23.3: + resolution: {integrity: sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + bs58@4.0.1: + resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==} + + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + builtin-modules@3.3.0: + resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} + engines: {node: '>=6'} + + cacheable-lookup@5.0.4: + resolution: {integrity: sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==} + engines: {node: '>=10.6.0'} + + cacheable-request@7.0.4: + resolution: {integrity: sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==} + engines: {node: '>=8'} + + call-bind@1.0.7: + resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} + engines: {node: '>= 0.4'} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + callsites@4.2.0: + resolution: {integrity: sha512-kfzR4zzQtAE9PC7CzZsjl3aBNbXWuXiSeOCdLcPpBfGW8YuCqQHcRPFDbr/BPVmd3EEPVpuFzLyuT/cUhPr4OQ==} + engines: {node: '>=12.20'} + + caniuse-lite@1.0.30001651: + resolution: {integrity: sha512-9Cf+Xv1jJNe1xPZLGuUXLNkE1BoDkqRqYyFJ9TDYSqhduqA4hu4oR9HluGoWYQC/aj8WHjsGVV+bwkh0+tegRg==} + + capability@0.2.5: + resolution: {integrity: sha512-rsJZYVCgXd08sPqwmaIqjAd5SUTfonV0z/gDJ8D6cN8wQphky1kkAYEqQ+hmDxTw7UihvBfjUVUSY+DBEe44jg==} + + cbor@8.1.0: + resolution: {integrity: sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg==} + engines: {node: '>=12.19'} + + chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + chalk@5.3.0: + resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + + chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + + chownr@2.0.0: + resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} + engines: {node: '>=10'} + + chunkd@2.0.1: + resolution: {integrity: sha512-7d58XsFmOq0j6el67Ug9mHf9ELUXsQXYJBkyxhH/k+6Ke0qXRnv0kbemx+Twc6fRJ07C49lcbdgm9FL1Ei/6SQ==} + + ci-info@3.9.0: + resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} + engines: {node: '>=8'} + + ci-parallel-vars@1.0.1: + resolution: {integrity: sha512-uvzpYrpmidaoxvIQHM+rKSrigjOe9feHYbw4uOI2gdfe1C3xIlxO+kVXq83WQWNniTf8bAxVpy+cQeFQsMERKg==} + + clean-stack@2.2.0: + resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} + engines: {node: '>=6'} + + clean-stack@4.2.0: + resolution: {integrity: sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg==} + engines: {node: '>=12'} + + clean-yaml-object@0.1.0: + resolution: {integrity: sha512-3yONmlN9CSAkzNwnRCiJQ7Q2xK5mWuEfL3PuTZcAUzhObbXsfsnMptJzXwz93nc5zn9V9TwCVMmV7w4xsm43dw==} + engines: {node: '>=0.10.0'} + + cli-truncate@3.1.0: + resolution: {integrity: sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + + clone-response@1.0.3: + resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==} + + code-block-writer@11.0.3: + resolution: {integrity: sha512-NiujjUFB4SwScJq2bwbYUtXbZhBSlY6vYzm++3Q6oC+U+injTqfPYFK8wS9COOmb2lueqp0ZRB4nK1VYeHgNyw==} + + code-excerpt@4.0.0: + resolution: {integrity: sha512-xxodCmBen3iy2i0WtAK8FlFNrRzjUqjRsMfho58xT/wvZU1YTM3fCnRjcy1gJPMepaRlgm/0e6w8SpWHpn3/cA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + + commander@9.5.0: + resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} + engines: {node: ^12.20.0 || >=14} + + common-path-prefix@3.0.0: + resolution: {integrity: sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==} + + commondir@1.0.1: + resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + concordance@5.0.4: + resolution: {integrity: sha512-OAcsnTEYu1ARJqWVGwf4zh4JDfHZEaSNlNccFmt8YjB2l/n19/PF2viLINHc57vO4FKIAFl2FWASIGZZWZ2Kxw==} + engines: {node: '>=10.18.0 <11 || >=12.14.0 <13 || >=14'} + + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + convert-to-spaces@2.0.1: + resolution: {integrity: sha512-rcQ1bsQO9799wq24uE5AM2tAILy4gXGIK/njFWcVQkGNZ96edlpY+A7bjwvzjYvLDyzmG1MmMLZhpcsb+klNMQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + create-require@1.1.1: + resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + + cross-spawn@6.0.5: + resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} + engines: {node: '>=4.8'} + + cross-spawn@7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + + currently-unhandled@0.4.1: + resolution: {integrity: sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng==} + engines: {node: '>=0.10.0'} + + data-view-buffer@1.0.1: + resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} + engines: {node: '>= 0.4'} + + data-view-byte-length@1.0.1: + resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} + engines: {node: '>= 0.4'} + + data-view-byte-offset@1.0.0: + resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} + engines: {node: '>= 0.4'} + + date-time@3.1.0: + resolution: {integrity: sha512-uqCUKXE5q1PNBXjPqvwhwJf9SwMoAHBgWJ6DcrnS5o+W2JOiIILl0JEdVD8SGujrNS02GGxgwAg2PN2zONgtjg==} + engines: {node: '>=6'} + + debug@4.3.6: + resolution: {integrity: sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + decode-uri-component@0.2.2: + resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==} + engines: {node: '>=0.10'} + + decompress-response@6.0.0: + resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} + engines: {node: '>=10'} + + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + + defer-to-connect@2.0.1: + resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} + engines: {node: '>=10'} + + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + + define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + + del@6.1.1: + resolution: {integrity: sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==} + engines: {node: '>=10'} + + depd@1.1.2: + resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} + engines: {node: '>= 0.6'} + + depd@2.0.0: + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} + + diff@4.0.2: + resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} + engines: {node: '>=0.3.1'} + + dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + + doctrine@3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} + + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + + electron-to-chromium@1.5.8: + resolution: {integrity: sha512-4Nx0gP2tPNBLTrFxBMHpkQbtn2hidPVr/+/FTtcCiBYTucqc70zRyVZiOLj17Ui3wTO7SQ1/N+hkHYzJjBzt6A==} + + emittery@0.11.0: + resolution: {integrity: sha512-S/7tzL6v5i+4iJd627Nhv9cLFIo5weAIlGccqJFpnBoDB8U1TF2k5tez4J/QNuxyyhWuFqHg1L84Kd3m7iXg6g==} + engines: {node: '>=12'} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + + end-of-stream@1.4.4: + resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + + error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + + error-polyfill@0.1.3: + resolution: {integrity: sha512-XHJk60ufE+TG/ydwp4lilOog549iiQF2OAPhkk9DdiYWMrltz5yhDz/xnKuenNwP7gy3dsibssO5QpVhkrSzzg==} + + es-abstract@1.23.3: + resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==} + engines: {node: '>= 0.4'} + + es-define-property@1.0.0: + resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-object-atoms@1.0.0: + resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} + engines: {node: '>= 0.4'} + + es-set-tostringtag@2.0.3: + resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} + engines: {node: '>= 0.4'} + + es-to-primitive@1.2.1: + resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} + engines: {node: '>= 0.4'} + + escalade@3.1.2: + resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} + engines: {node: '>=6'} + + escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + + escape-string-regexp@2.0.0: + resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} + engines: {node: '>=8'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + escape-string-regexp@5.0.0: + resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} + engines: {node: '>=12'} + + eslint-config-prettier@8.10.0: + resolution: {integrity: sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==} + hasBin: true + peerDependencies: + eslint: '>=7.0.0' + + eslint-scope@5.1.1: + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} + engines: {node: '>=8.0.0'} + + eslint-scope@7.2.2: + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint@8.57.0: + resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + hasBin: true + + espree@9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + + esquery@1.6.0: + resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} + engines: {node: '>=0.10'} + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + + estraverse@4.3.0: + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} + engines: {node: '>=4.0'} + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + estree-walker@1.0.1: + resolution: {integrity: sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==} + + estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-diff@1.3.0: + resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} + + fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + engines: {node: '>=8.6.0'} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + fast-uri@3.0.1: + resolution: {integrity: sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==} + + fastq@1.17.1: + resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + + figures@2.0.0: + resolution: {integrity: sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==} + engines: {node: '>=4'} + + figures@4.0.1: + resolution: {integrity: sha512-rElJwkA/xS04Vfg+CaZodpso7VqBknOYbzi6I76hI4X80RUjkSxO2oAyPmGbuXUppywjqndOrQDl817hDnI++w==} + engines: {node: '>=12'} + + file-entry-cache@6.0.1: + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + find-up@2.1.0: + resolution: {integrity: sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==} + engines: {node: '>=4'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + find-up@6.3.0: + resolution: {integrity: sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + flat-cache@3.2.0: + resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} + engines: {node: ^10.12.0 || >=12.0.0} + + flatted@3.3.1: + resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} + + for-each@0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + + fs-extra@10.1.0: + resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} + engines: {node: '>=12'} + + fs-minipass@2.1.0: + resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} + engines: {node: '>= 8'} + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + function.prototype.name@1.1.6: + resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} + engines: {node: '>= 0.4'} + + functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + + gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-intrinsic@1.2.4: + resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} + engines: {node: '>= 0.4'} + + get-stream@5.2.0: + resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} + engines: {node: '>=8'} + + get-symbol-description@1.0.2: + resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} + engines: {node: '>= 0.4'} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported + + globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + + globals@13.24.0: + resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} + engines: {node: '>=8'} + + globalthis@1.0.4: + resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} + engines: {node: '>= 0.4'} + + globby@11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + + globby@13.2.2: + resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + + got@11.8.6: + resolution: {integrity: sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==} + engines: {node: '>=10.19.0'} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + + has-bigints@1.0.2: + resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} + + has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + + has-proto@1.0.3: + resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} + engines: {node: '>= 0.4'} + + has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + hosted-git-info@2.8.9: + resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} + + http-cache-semantics@4.1.1: + resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} + + http-errors@1.8.1: + resolution: {integrity: sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==} + engines: {node: '>= 0.6'} + + http2-wrapper@1.0.3: + resolution: {integrity: sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==} + engines: {node: '>=10.19.0'} + + ignore-by-default@2.1.0: + resolution: {integrity: sha512-yiWd4GVmJp0Q6ghmM2B/V3oZGRmjrKLXvHR3TE1nfoXsmoggllfZUQe74EN0fJdPFZu2NIvNdrMMLm3OsV7Ohw==} + engines: {node: '>=10 <11 || >=12 <13 || >=14'} + + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + + import-fresh@3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + indent-string@4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + + indent-string@5.0.0: + resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==} + engines: {node: '>=12'} + + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + internal-slot@1.0.7: + resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} + engines: {node: '>= 0.4'} + + irregular-plurals@3.5.0: + resolution: {integrity: sha512-1ANGLZ+Nkv1ptFb2pa8oG8Lem4krflKuX/gINiHJHjJUKaJHk/SXk5x6K3J+39/p0h1RQ2saROclJJ+QLvETCQ==} + engines: {node: '>=8'} + + is-array-buffer@3.0.4: + resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} + engines: {node: '>= 0.4'} + + is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + + is-bigint@1.0.4: + resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + + is-boolean-object@1.1.2: + resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} + engines: {node: '>= 0.4'} + + is-builtin-module@3.2.1: + resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} + engines: {node: '>=6'} + + is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + + is-core-module@2.15.0: + resolution: {integrity: sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==} + engines: {node: '>= 0.4'} + + is-data-view@1.0.1: + resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} + engines: {node: '>= 0.4'} + + is-date-object@1.0.5: + resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} + engines: {node: '>= 0.4'} + + is-error@2.2.2: + resolution: {integrity: sha512-IOQqts/aHWbiisY5DuPJQ0gcbvaLFCa7fBa9xoLfxBZvQ+ZI/Zh9xoI7Gk+G64N0FdK4AbibytHht2tWgpJWLg==} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-fullwidth-code-point@4.0.0: + resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} + engines: {node: '>=12'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-module@1.0.0: + resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} + + is-negative-zero@2.0.3: + resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} + engines: {node: '>= 0.4'} + + is-number-object@1.0.7: + resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} + engines: {node: '>= 0.4'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-path-cwd@2.2.0: + resolution: {integrity: sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==} + engines: {node: '>=6'} + + is-path-inside@3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + + is-plain-object@5.0.0: + resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} + engines: {node: '>=0.10.0'} + + is-promise@4.0.0: + resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} + + is-reference@1.2.1: + resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==} + + is-regex@1.1.4: + resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} + engines: {node: '>= 0.4'} + + is-shared-array-buffer@1.0.3: + resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} + engines: {node: '>= 0.4'} + + is-string@1.0.7: + resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} + engines: {node: '>= 0.4'} + + is-symbol@1.0.4: + resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} + engines: {node: '>= 0.4'} + + is-typed-array@1.1.13: + resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} + engines: {node: '>= 0.4'} + + is-unicode-supported@1.3.0: + resolution: {integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==} + engines: {node: '>=12'} + + is-weakref@1.0.2: + resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + + isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + jest-worker@26.6.2: + resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==} + engines: {node: '>= 10.13.0'} + + js-sha256@0.9.0: + resolution: {integrity: sha512-sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA==} + + js-string-escape@1.0.1: + resolution: {integrity: sha512-Smw4xcfIQ5LVjAOuJCvN/zIodzA/BBSsluuoSykP+lUvScIi4U6RJLfwHet5cxFnCswUjISV8oAXaqaJDY3chg==} + engines: {node: '>= 0.8'} + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@3.14.1: + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + hasBin: true + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + jsesc@2.5.2: + resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} + engines: {node: '>=4'} + hasBin: true + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-parse-better-errors@1.0.2: + resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + + json-schema@0.4.0: + resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} + + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + jsonc-parser@3.3.1: + resolution: {integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==} + + jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + + load-json-file@4.0.0: + resolution: {integrity: sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==} + engines: {node: '>=4'} + + load-json-file@7.0.1: + resolution: {integrity: sha512-Gnxj3ev3mB5TkVBGad0JM6dmLiQL+o0t23JPBZ9sd+yvSLk05mFoqKBw5N8gbbkU4TNXyqCgIrl/VM17OgUIgQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + locate-path@2.0.0: + resolution: {integrity: sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==} + engines: {node: '>=4'} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + locate-path@7.2.0: + resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + lodash-es@4.17.21: + resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} + + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + lowercase-keys@2.0.0: + resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} + engines: {node: '>=8'} + + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + + lunr@2.3.9: + resolution: {integrity: sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==} + + magic-string@0.25.9: + resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} + + make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + + map-age-cleaner@0.1.3: + resolution: {integrity: sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==} + engines: {node: '>=6'} + + marked@4.3.0: + resolution: {integrity: sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==} + engines: {node: '>= 12'} + hasBin: true + + matcher@5.0.0: + resolution: {integrity: sha512-s2EMBOWtXFc8dgqvoAzKJXxNHibcdJMV0gwqKUaw9E2JBJuGUK7DrNKrA6g/i+v72TT16+6sVm5mS3thaMLQUw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + md5-hex@3.0.1: + resolution: {integrity: sha512-BUiRtTtV39LIJwinWBjqVsU9xhdnz7/i889V859IBFpuqGAj6LuOvHv5XLbgZ2R7ptJoJaEcxkv88/h25T7Ciw==} + engines: {node: '>=8'} + + mem@9.0.2: + resolution: {integrity: sha512-F2t4YIv9XQUBHt6AOJ0y7lSmP1+cY7Fm1DRh9GClTGzKST7UWLMx6ly9WZdLH/G/ppM5RL4MlQfRT71ri9t19A==} + engines: {node: '>=12.20'} + + memorystream@0.3.1: + resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==} + engines: {node: '>= 0.10.0'} + + merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + micromatch@4.0.7: + resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==} + engines: {node: '>=8.6'} + + mimic-fn@4.0.0: + resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} + engines: {node: '>=12'} + + mimic-response@1.0.1: + resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} + engines: {node: '>=4'} + + mimic-response@3.1.0: + resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} + engines: {node: '>=10'} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} + + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} + + minipass@3.3.6: + resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} + engines: {node: '>=8'} + + minipass@5.0.0: + resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} + engines: {node: '>=8'} + + minizlib@2.1.2: + resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} + engines: {node: '>= 8'} + + mkdirp@1.0.4: + resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} + engines: {node: '>=10'} + hasBin: true + + ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + mustache@4.2.0: + resolution: {integrity: sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==} + hasBin: true + + natural-compare-lite@1.4.0: + resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + near-abi@0.1.1: + resolution: {integrity: sha512-RVDI8O+KVxRpC3KycJ1bpfVj9Zv+xvq9PlW1yIFl46GhrnLw83/72HqHGjGDjQ8DtltkcpSjY9X3YIGZ+1QyzQ==} + + near-api-js@2.1.4: + resolution: {integrity: sha512-e1XicyvJvQMtu7qrG8oWyAdjHJJCoy+cvbW6h2Dky4yj7vC85omQz/x7IgKl71VhzDj2/TGUwjTVESp6NSe75A==} + + near-sandbox@0.0.17: + resolution: {integrity: sha512-bL0We378hFZ0/xHAKP5mAWKS5OjzU6+VuvMlXpMwyFAwG2s5NwOnzRTezvYYwQNtG3iU+xvQ6jWvp7UO1STGLQ==} + hasBin: true + + near-typescript-json-schema@0.55.0: + resolution: {integrity: sha512-3AFYm89FHB3Bn3+Usow5iP7avF9QIkxh6PP5qCgr66/IT9SIQSG0PGPBtNDcj+WLZCL4yHzLmW7TkdK7nDzy1A==} + hasBin: true + + near-units@0.1.9: + resolution: {integrity: sha512-xiuBjpNsi+ywiu7P6iWRZdgFm7iCr/cfWlVO6+e5uaAqH4mE1rrurElyrL91llNDSnMwogd9XmlZOw5KbbHNsA==} + hasBin: true + + near-workspaces@3.5.0: + resolution: {integrity: sha512-lkRCP2os8v7W+q1maQPSEI98f+YiPb86ibDyIy8bxr6fqnJPOsIRR3xE33rOwBsiph3WuUH46qtpYK0a+Co+EQ==} + engines: {node: '>= 14.0.0', npm: '>= 6.0.0'} + + nice-try@1.0.5: + resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} + + node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + + node-port-check@2.0.1: + resolution: {integrity: sha512-PV1tj5OPbWwxvhPcChXxwCIKl/IfVEdPP4u/gQz2lao/VGoeIUXb/4U72KSHLZpTVBmgTnMm0me7yR0wUsIuPg==} + + node-releases@2.0.18: + resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} + + nofilter@3.1.0: + resolution: {integrity: sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==} + engines: {node: '>=12.19'} + + normalize-package-data@2.5.0: + resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + normalize-url@6.1.0: + resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} + engines: {node: '>=10'} + + npm-run-all@4.1.5: + resolution: {integrity: sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==} + engines: {node: '>= 4'} + hasBin: true + + o3@1.0.3: + resolution: {integrity: sha512-f+4n+vC6s4ysy7YO7O2gslWZBUu8Qj2i2OUJOvjRxQva7jVjYjB29jrr9NCjmxZQR0gzrOcv1RnqoYOeMs5VRQ==} + + object-inspect@1.13.2: + resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==} + engines: {node: '>= 0.4'} + + object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + + object.assign@4.1.5: + resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} + engines: {node: '>= 0.4'} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} + + p-cancelable@2.1.1: + resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==} + engines: {node: '>=8'} + + p-defer@1.0.0: + resolution: {integrity: sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw==} + engines: {node: '>=4'} + + p-event@5.0.1: + resolution: {integrity: sha512-dd589iCQ7m1L0bmC5NLlVYfy3TbBEsMUfWx9PyAgPeIcFZ/E2yaTZ4Rz4MiBmmJShviiftHVXOqfnfzJ6kyMrQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + p-limit@1.3.0: + resolution: {integrity: sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==} + engines: {node: '>=4'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-limit@4.0.0: + resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + p-locate@2.0.0: + resolution: {integrity: sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==} + engines: {node: '>=4'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + p-locate@6.0.0: + resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + p-map@4.0.0: + resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} + engines: {node: '>=10'} + + p-map@5.5.0: + resolution: {integrity: sha512-VFqfGDHlx87K66yZrNdI4YGtD70IRyd+zSvgks6mzHPRNkoKy+9EKP4SFC77/vTTQYmRmti7dvqC+m5jBrBAcg==} + engines: {node: '>=12'} + + p-timeout@5.1.0: + resolution: {integrity: sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew==} + engines: {node: '>=12'} + + p-try@1.0.0: + resolution: {integrity: sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==} + engines: {node: '>=4'} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + parse-json@4.0.0: + resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==} + engines: {node: '>=4'} + + parse-ms@2.1.0: + resolution: {integrity: sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==} + engines: {node: '>=6'} + + path-browserify@1.0.1: + resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} + + path-equal@1.2.5: + resolution: {integrity: sha512-i73IctDr3F2W+bsOWDyyVm/lqsXO47aY9nsFZUjTT/aljSbkxHxxCoyZ9UUrM8jK0JVod+An+rl48RCsvWM+9g==} + + path-exists@3.0.0: + resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} + engines: {node: '>=4'} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-exists@5.0.0: + resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + path-key@2.0.1: + resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==} + engines: {node: '>=4'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + path-type@3.0.0: + resolution: {integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==} + engines: {node: '>=4'} + + path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + + picocolors@1.0.1: + resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + pidtree@0.3.1: + resolution: {integrity: sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==} + engines: {node: '>=0.10'} + hasBin: true + + pify@3.0.0: + resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==} + engines: {node: '>=4'} + + pkg-conf@2.1.0: + resolution: {integrity: sha512-C+VUP+8jis7EsQZIhDYmS5qlNtjv2yP4SNtjXK9AP1ZcTRlnSfuumaTnRfYZnYgUUYVIKqL0fRvmUGDV2fmp6g==} + engines: {node: '>=4'} + + pkg-conf@4.0.0: + resolution: {integrity: sha512-7dmgi4UY4qk+4mj5Cd8v/GExPo0K+SlY+hulOSdfZ/T6jVH6//y7NtzZo5WrfhDBxuQ0jCa7fLZmNaNh7EWL/w==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + plur@5.1.0: + resolution: {integrity: sha512-VP/72JeXqak2KiOzjgKtQen5y3IZHn+9GOuLDafPv0eXa47xq0At93XahYBs26MsifCQ4enGKwbjBTKgb9QJXg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + possible-typed-array-names@1.0.0: + resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} + engines: {node: '>= 0.4'} + + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + prettier@2.8.8: + resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} + engines: {node: '>=10.13.0'} + hasBin: true + + pretty-ms@7.0.1: + resolution: {integrity: sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==} + engines: {node: '>=10'} + + promisify-child-process@4.1.2: + resolution: {integrity: sha512-APnkIgmaHNJpkAn7k+CrJSi9WMuff5ctYFbD0CO2XIPkM8yO7d/ShouU2clywbpHV/DUsyc4bpJCsNgddNtx4g==} + engines: {node: '>=8'} + + proper-lockfile@4.1.2: + resolution: {integrity: sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==} + + pump@3.0.0: + resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + pure-uuid@1.8.1: + resolution: {integrity: sha512-PIwHXU7NZb/wTBwUfzCSjI85tfwx6DQOm74sRLtNLH8KHsFZEvAQbBQdz7E5ij8SNSv9WGdQPWiiM6NpNIeNfA==} + engines: {node: '>=8.0.0'} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + quick-lru@5.1.1: + resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} + engines: {node: '>=10'} + + randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + + read-pkg@3.0.0: + resolution: {integrity: sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==} + engines: {node: '>=4'} + + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + + regexp.prototype.flags@1.5.2: + resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} + engines: {node: '>= 0.4'} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + + resolve-alpn@1.2.1: + resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} + + resolve-cwd@3.0.0: + resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} + engines: {node: '>=8'} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + + resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + hasBin: true + + responselike@2.0.1: + resolution: {integrity: sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==} + + retry@0.12.0: + resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} + engines: {node: '>= 4'} + + reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + deprecated: Rimraf versions prior to v4 are no longer supported + hasBin: true + + rollup-plugin-sourcemaps@0.6.3: + resolution: {integrity: sha512-paFu+nT1xvuO1tPFYXGe+XnQvg4Hjqv/eIhG8i5EspfYYPBKL57X7iVbfv55aNVASg3dzWvES9dmWsL2KhfByw==} + engines: {node: '>=10.0.0'} + peerDependencies: + '@types/node': '>=10.0.0' + rollup: '>=0.31.2' + peerDependenciesMeta: + '@types/node': + optional: true + + rollup-plugin-terser@7.0.2: + resolution: {integrity: sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==} + deprecated: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser + peerDependencies: + rollup: ^2.0.0 + + rollup@2.79.1: + resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==} + engines: {node: '>=10.0.0'} + hasBin: true + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + safe-array-concat@1.1.2: + resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} + engines: {node: '>=0.4'} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + safe-regex-test@1.0.3: + resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} + engines: {node: '>= 0.4'} + + safe-stable-stringify@2.4.3: + resolution: {integrity: sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==} + engines: {node: '>=10'} + + semver@5.7.2: + resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} + hasBin: true + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + semver@7.6.3: + resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} + engines: {node: '>=10'} + hasBin: true + + serialize-error@7.0.1: + resolution: {integrity: sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==} + engines: {node: '>=10'} + + serialize-javascript@4.0.0: + resolution: {integrity: sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==} + + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + + set-function-name@2.0.2: + resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} + engines: {node: '>= 0.4'} + + setprototypeof@1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + + shebang-command@1.2.0: + resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} + engines: {node: '>=0.10.0'} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@1.0.0: + resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} + engines: {node: '>=0.10.0'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + shell-quote@1.8.1: + resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} + + shiki@0.14.7: + resolution: {integrity: sha512-dNPAPrxSc87ua2sKJ3H5dQ/6ZaY8RNnaAqK+t0eG7p0Soi2ydiqbGOTaZCqaYvA/uZYfS1LJnemt3Q+mSfcPCg==} + + side-channel@1.0.6: + resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} + engines: {node: '>= 0.4'} + + signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + + signale@1.4.0: + resolution: {integrity: sha512-iuh+gPf28RkltuJC7W5MRi6XAjTDCAPC/prJUpQoG4vIP3MJZ+GTydVnodXA7pwvTKb2cA0m9OFZW/cdWy/I/w==} + engines: {node: '>=6'} + + slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + + slash@4.0.0: + resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} + engines: {node: '>=12'} + + slice-ansi@5.0.0: + resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} + engines: {node: '>=12'} + + source-map-resolve@0.6.0: + resolution: {integrity: sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==} + deprecated: See https://github.com/lydell/source-map-resolve#deprecated + + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + sourcemap-codec@1.4.8: + resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} + deprecated: Please use @jridgewell/sourcemap-codec instead + + spdx-correct@3.2.0: + resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} + + spdx-exceptions@2.5.0: + resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} + + spdx-expression-parse@3.0.1: + resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} + + spdx-license-ids@3.0.18: + resolution: {integrity: sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ==} + + sprintf-js@1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + + stack-utils@2.0.6: + resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} + engines: {node: '>=10'} + + statuses@1.5.0: + resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} + engines: {node: '>= 0.6'} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + + string.prototype.padend@3.1.6: + resolution: {integrity: sha512-XZpspuSB7vJWhvJc9DLSlrXl1mcA2BdoY5jjnS135ydXqLoqhs96JjDtCkjJEQHvfqZIp9hBuBMgI589peyx9Q==} + engines: {node: '>= 0.4'} + + string.prototype.trim@1.2.9: + resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} + engines: {node: '>= 0.4'} + + string.prototype.trimend@1.0.8: + resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} + + string.prototype.trimstart@1.0.8: + resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} + engines: {node: '>= 0.4'} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + + strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + supertap@3.0.1: + resolution: {integrity: sha512-u1ZpIBCawJnO+0QePsEiOknOfCRq0yERxiAchT0i4li0WHNUJbf0evXXSXOcCAR4M8iMDoajXYmstm/qO81Isw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + tar@6.2.1: + resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} + engines: {node: '>=10'} + + temp-dir@2.0.0: + resolution: {integrity: sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==} + engines: {node: '>=8'} + + terser@5.31.6: + resolution: {integrity: sha512-PQ4DAriWzKj+qgehQ7LK5bQqCFNMmlhjR2PFFLuqGCpuCAauxemVBWwWOxo3UIwWQx8+Pr61Df++r76wDmkQBg==} + engines: {node: '>=10'} + hasBin: true + + text-encoding-utf-8@1.0.2: + resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==} + + text-table@0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + + time-zone@1.0.0: + resolution: {integrity: sha512-TIsDdtKo6+XrPtiTm1ssmMngN1sAhyKnTO2kunQWqNPWIVvCm15Wmw4SWInwTVgJ5u/Tr04+8Ei9TNcw4x4ONA==} + engines: {node: '>=4'} + + to-fast-properties@2.0.0: + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} + engines: {node: '>=4'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + toidentifier@1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} + + tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + + ts-morph@16.0.0: + resolution: {integrity: sha512-jGNF0GVpFj0orFw55LTsQxVYEUOCWBAbR5Ls7fTYE5pQsbW18ssTb/6UXx/GYAEjS+DQTp8VoTw0vqYMiaaQuw==} + + ts-node@10.9.2: + resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} + hasBin: true + peerDependencies: + '@swc/core': '>=1.2.50' + '@swc/wasm': '>=1.2.50' + '@types/node': '*' + typescript: '>=2.7' + peerDependenciesMeta: + '@swc/core': + optional: true + '@swc/wasm': + optional: true + + tslib@1.14.1: + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + + tsutils@3.21.0: + resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} + engines: {node: '>= 6'} + peerDependencies: + typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' + + turbo-darwin-64@1.13.3: + resolution: {integrity: sha512-glup8Qx1qEFB5jerAnXbS8WrL92OKyMmg5Hnd4PleLljAeYmx+cmmnsmLT7tpaVZIN58EAAwu8wHC6kIIqhbWA==} + cpu: [x64] + os: [darwin] + + turbo-darwin-arm64@1.13.3: + resolution: {integrity: sha512-/np2xD+f/+9qY8BVtuOQXRq5f9LehCFxamiQnwdqWm5iZmdjygC5T3uVSYuagVFsZKMvX3ycySwh8dylGTl6lg==} + cpu: [arm64] + os: [darwin] + + turbo-linux-64@1.13.3: + resolution: {integrity: sha512-G+HGrau54iAnbXLfl+N/PynqpDwi/uDzb6iM9hXEDG+yJnSJxaHMShhOkXYJPk9offm9prH33Khx2scXrYVW1g==} + cpu: [x64] + os: [linux] + + turbo-linux-arm64@1.13.3: + resolution: {integrity: sha512-qWwEl5VR02NqRyl68/3pwp3c/olZuSp+vwlwrunuoNTm6JXGLG5pTeme4zoHNnk0qn4cCX7DFrOboArlYxv0wQ==} + cpu: [arm64] + os: [linux] + + turbo-windows-64@1.13.3: + resolution: {integrity: sha512-Nudr4bRChfJzBPzEmpVV85VwUYRCGKecwkBFpbp2a4NtrJ3+UP1VZES653ckqCu2FRyRuS0n03v9euMbAvzH+Q==} + cpu: [x64] + os: [win32] + + turbo-windows-arm64@1.13.3: + resolution: {integrity: sha512-ouJCgsVLd3icjRLmRvHQDDZnmGzT64GBupM1Y+TjtYn2LVaEBoV6hicFy8x5DUpnqdLy+YpCzRMkWlwhmkX7sQ==} + cpu: [arm64] + os: [win32] + + turbo@1.13.3: + resolution: {integrity: sha512-n17HJv4F4CpsYTvKzUJhLbyewbXjq1oLCi90i5tW1TiWDz16ML1eDG7wi5dHaKxzh5efIM56SITnuVbMq5dk4g==} + hasBin: true + + tweetnacl@1.0.3: + resolution: {integrity: sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==} + + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + + type-fest@0.13.1: + resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==} + engines: {node: '>=10'} + + type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + + typed-array-buffer@1.0.2: + resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} + engines: {node: '>= 0.4'} + + typed-array-byte-length@1.0.1: + resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} + engines: {node: '>= 0.4'} + + typed-array-byte-offset@1.0.2: + resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} + engines: {node: '>= 0.4'} + + typed-array-length@1.0.6: + resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} + engines: {node: '>= 0.4'} + + typedoc@0.25.13: + resolution: {integrity: sha512-pQqiwiJ+Z4pigfOnnysObszLiU3mVLWAExSPf+Mu06G/qsc3wzbuM56SZQvONhHLncLUhYzOVkjFFpFfL5AzhQ==} + engines: {node: '>= 16'} + hasBin: true + peerDependencies: + typescript: 4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x + + typescript@4.7.4: + resolution: {integrity: sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==} + engines: {node: '>=4.2.0'} + hasBin: true + + u3@0.1.1: + resolution: {integrity: sha512-+J5D5ir763y+Am/QY6hXNRlwljIeRMZMGs0cT6qqZVVzzT3X3nFPXVyPOFRMOR4kupB0T8JnCdpWdp6Q/iXn3w==} + + unbox-primitive@1.0.2: + resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + + universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + + update-browserslist-db@1.1.0: + resolution: {integrity: sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + v8-compile-cache-lib@3.0.1: + resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + + validate-npm-package-license@3.0.4: + resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + + vscode-oniguruma@1.7.0: + resolution: {integrity: sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==} + + vscode-textmate@8.0.0: + resolution: {integrity: sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==} + + webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + + well-known-symbols@2.0.0: + resolution: {integrity: sha512-ZMjC3ho+KXo0BfJb7JgtQ5IBuvnShdlACNkKkdsqBmYw3bPAaJfPeYUo6tLUaT5tG/Gkh7xkpBhKRQ9e7pyg9Q==} + engines: {node: '>=6'} + + whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + + which-boxed-primitive@1.0.2: + resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + + which-typed-array@1.1.15: + resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} + engines: {node: '>= 0.4'} + + which@1.3.1: + resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} + hasBin: true + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + write-file-atomic@4.0.2: + resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + + yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + + yn@3.1.1: + resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} + engines: {node: '>=6'} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + + yocto-queue@1.1.1: + resolution: {integrity: sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==} + engines: {node: '>=12.20'} + +snapshots: + + '@ampproject/remapping@2.3.0': + dependencies: + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + + '@babel/code-frame@7.24.7': + dependencies: + '@babel/highlight': 7.24.7 + picocolors: 1.0.1 + + '@babel/compat-data@7.25.2': {} + + '@babel/core@7.25.2': + dependencies: + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.24.7 + '@babel/generator': 7.25.0 + '@babel/helper-compilation-targets': 7.25.2 + '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2) + '@babel/helpers': 7.25.0 + '@babel/parser': 7.25.3 + '@babel/template': 7.25.0 + '@babel/traverse': 7.25.3 + '@babel/types': 7.25.2 + convert-source-map: 2.0.0 + debug: 4.3.6 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/generator@7.25.0': + dependencies: + '@babel/types': 7.25.2 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 2.5.2 + + '@babel/helper-annotate-as-pure@7.24.7': + dependencies: + '@babel/types': 7.25.2 + + '@babel/helper-compilation-targets@7.25.2': + dependencies: + '@babel/compat-data': 7.25.2 + '@babel/helper-validator-option': 7.24.8 + browserslist: 4.23.3 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-create-class-features-plugin@7.25.0(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-annotate-as-pure': 7.24.7 + '@babel/helper-member-expression-to-functions': 7.24.8 + '@babel/helper-optimise-call-expression': 7.24.7 + '@babel/helper-replace-supers': 7.25.0(@babel/core@7.25.2) + '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 + '@babel/traverse': 7.25.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/helper-member-expression-to-functions@7.24.8': + dependencies: + '@babel/traverse': 7.25.3 + '@babel/types': 7.25.2 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-imports@7.24.7': + dependencies: + '@babel/traverse': 7.25.3 + '@babel/types': 7.25.2 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.25.2(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-module-imports': 7.24.7 + '@babel/helper-simple-access': 7.24.7 + '@babel/helper-validator-identifier': 7.24.7 + '@babel/traverse': 7.25.3 + transitivePeerDependencies: + - supports-color + + '@babel/helper-optimise-call-expression@7.24.7': + dependencies: + '@babel/types': 7.25.2 + + '@babel/helper-plugin-utils@7.24.8': {} + + '@babel/helper-replace-supers@7.25.0(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-member-expression-to-functions': 7.24.8 + '@babel/helper-optimise-call-expression': 7.24.7 + '@babel/traverse': 7.25.3 + transitivePeerDependencies: + - supports-color + + '@babel/helper-simple-access@7.24.7': + dependencies: + '@babel/traverse': 7.25.3 + '@babel/types': 7.25.2 + transitivePeerDependencies: + - supports-color + + '@babel/helper-skip-transparent-expression-wrappers@7.24.7': + dependencies: + '@babel/traverse': 7.25.3 + '@babel/types': 7.25.2 + transitivePeerDependencies: + - supports-color + + '@babel/helper-string-parser@7.24.8': {} + + '@babel/helper-validator-identifier@7.24.7': {} + + '@babel/helper-validator-option@7.24.8': {} + + '@babel/helpers@7.25.0': + dependencies: + '@babel/template': 7.25.0 + '@babel/types': 7.25.2 + + '@babel/highlight@7.24.7': + dependencies: + '@babel/helper-validator-identifier': 7.24.7 + chalk: 2.4.2 + js-tokens: 4.0.0 + picocolors: 1.0.1 + + '@babel/parser@7.25.3': + dependencies: + '@babel/types': 7.25.2 + + '@babel/plugin-proposal-decorators@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-create-class-features-plugin': 7.25.0(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-decorators': 7.24.7(@babel/core@7.25.2) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-syntax-decorators@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-syntax-jsx@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-syntax-typescript@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + '@babel/plugin-transform-modules-commonjs@7.24.8(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-simple-access': 7.24.7 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-typescript@7.25.2(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-annotate-as-pure': 7.24.7 + '@babel/helper-create-class-features-plugin': 7.25.0(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 + '@babel/plugin-syntax-typescript': 7.24.7(@babel/core@7.25.2) + transitivePeerDependencies: + - supports-color + + '@babel/preset-typescript@7.24.7(@babel/core@7.25.2)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-validator-option': 7.24.8 + '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-modules-commonjs': 7.24.8(@babel/core@7.25.2) + '@babel/plugin-transform-typescript': 7.25.2(@babel/core@7.25.2) + transitivePeerDependencies: + - supports-color + + '@babel/template@7.25.0': + dependencies: + '@babel/code-frame': 7.24.7 + '@babel/parser': 7.25.3 + '@babel/types': 7.25.2 + + '@babel/traverse@7.25.3': + dependencies: + '@babel/code-frame': 7.24.7 + '@babel/generator': 7.25.0 + '@babel/parser': 7.25.3 + '@babel/template': 7.25.0 + '@babel/types': 7.25.2 + debug: 4.3.6 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/types@7.25.2': + dependencies: + '@babel/helper-string-parser': 7.24.8 + '@babel/helper-validator-identifier': 7.24.7 + to-fast-properties: 2.0.0 + + '@cspotcode/source-map-support@0.8.1': + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + + '@eslint-community/eslint-utils@4.4.0(eslint@8.57.0)': + dependencies: + eslint: 8.57.0 + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.11.0': {} + + '@eslint/eslintrc@2.1.4': + dependencies: + ajv: 6.12.6 + debug: 4.3.6 + espree: 9.6.1 + globals: 13.24.0 + ignore: 5.3.2 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + '@eslint/js@8.57.0': {} + + '@humanwhocodes/config-array@0.11.14': + dependencies: + '@humanwhocodes/object-schema': 2.0.3 + debug: 4.3.6 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/object-schema@2.0.3': {} + + '@jridgewell/gen-mapping@0.3.5': + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping': 0.3.25 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/set-array@1.2.1': {} + + '@jridgewell/source-map@0.3.6': + dependencies: + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + + '@jridgewell/sourcemap-codec@1.5.0': {} + + '@jridgewell/trace-mapping@0.3.25': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + + '@jridgewell/trace-mapping@0.3.9': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + + '@near-js/accounts@0.1.4': + dependencies: + '@near-js/crypto': 0.0.5 + '@near-js/providers': 0.0.7 + '@near-js/signers': 0.0.5 + '@near-js/transactions': 0.2.1 + '@near-js/types': 0.0.4 + '@near-js/utils': 0.0.4 + ajv: 8.17.1 + ajv-formats: 2.1.1(ajv@8.17.1) + bn.js: 5.2.1 + borsh: 0.7.0 + depd: 2.0.0 + near-abi: 0.1.1 + transitivePeerDependencies: + - encoding + + '@near-js/crypto@0.0.5': + dependencies: + '@near-js/types': 0.0.4 + bn.js: 5.2.1 + borsh: 0.7.0 + tweetnacl: 1.0.3 + + '@near-js/keystores-browser@0.0.5': + dependencies: + '@near-js/crypto': 0.0.5 + '@near-js/keystores': 0.0.5 + + '@near-js/keystores-node@0.0.5': + dependencies: + '@near-js/crypto': 0.0.5 + '@near-js/keystores': 0.0.5 + + '@near-js/keystores@0.0.5': + dependencies: + '@near-js/crypto': 0.0.5 + '@near-js/types': 0.0.4 + + '@near-js/providers@0.0.7': + dependencies: + '@near-js/transactions': 0.2.1 + '@near-js/types': 0.0.4 + '@near-js/utils': 0.0.4 + bn.js: 5.2.1 + borsh: 0.7.0 + http-errors: 1.8.1 + optionalDependencies: + node-fetch: 2.7.0 + transitivePeerDependencies: + - encoding + + '@near-js/signers@0.0.5': + dependencies: + '@near-js/crypto': 0.0.5 + '@near-js/keystores': 0.0.5 + js-sha256: 0.9.0 + + '@near-js/transactions@0.2.1': + dependencies: + '@near-js/crypto': 0.0.5 + '@near-js/signers': 0.0.5 + '@near-js/types': 0.0.4 + '@near-js/utils': 0.0.4 + bn.js: 5.2.1 + borsh: 0.7.0 + js-sha256: 0.9.0 + + '@near-js/types@0.0.4': + dependencies: + bn.js: 5.2.1 + + '@near-js/utils@0.0.4': + dependencies: + '@near-js/types': 0.0.4 + bn.js: 5.2.1 + depd: 2.0.0 + mustache: 4.2.0 + + '@near-js/wallet-account@0.0.7': + dependencies: + '@near-js/accounts': 0.1.4 + '@near-js/crypto': 0.0.5 + '@near-js/keystores': 0.0.5 + '@near-js/signers': 0.0.5 + '@near-js/transactions': 0.2.1 + '@near-js/types': 0.0.4 + '@near-js/utils': 0.0.4 + bn.js: 5.2.1 + borsh: 0.7.0 + transitivePeerDependencies: + - encoding + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.17.1 + + '@rollup/plugin-babel@5.3.1(@babel/core@7.25.2)(@types/babel__core@7.20.5)(rollup@2.79.1)': + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-module-imports': 7.24.7 + '@rollup/pluginutils': 3.1.0(rollup@2.79.1) + rollup: 2.79.1 + optionalDependencies: + '@types/babel__core': 7.20.5 + transitivePeerDependencies: + - supports-color + + '@rollup/plugin-commonjs@21.1.0(rollup@2.79.1)': + dependencies: + '@rollup/pluginutils': 3.1.0(rollup@2.79.1) + commondir: 1.0.1 + estree-walker: 2.0.2 + glob: 7.2.3 + is-reference: 1.2.1 + magic-string: 0.25.9 + resolve: 1.22.8 + rollup: 2.79.1 + + '@rollup/plugin-node-resolve@13.3.0(rollup@2.79.1)': + dependencies: + '@rollup/pluginutils': 3.1.0(rollup@2.79.1) + '@types/resolve': 1.17.1 + deepmerge: 4.3.1 + is-builtin-module: 3.2.1 + is-module: 1.0.0 + resolve: 1.22.8 + rollup: 2.79.1 + + '@rollup/plugin-typescript@8.5.0(rollup@2.79.1)(tslib@1.14.1)(typescript@4.7.4)': + dependencies: + '@rollup/pluginutils': 3.1.0(rollup@2.79.1) + resolve: 1.22.8 + rollup: 2.79.1 + typescript: 4.7.4 + optionalDependencies: + tslib: 1.14.1 + + '@rollup/pluginutils@3.1.0(rollup@2.79.1)': + dependencies: + '@types/estree': 0.0.39 + estree-walker: 1.0.1 + picomatch: 2.3.1 + rollup: 2.79.1 + + '@scure/base@1.1.7': {} + + '@sindresorhus/is@4.6.0': {} + + '@szmarczak/http-timer@4.0.6': + dependencies: + defer-to-connect: 2.0.1 + + '@ts-morph/common@0.17.0': + dependencies: + fast-glob: 3.3.2 + minimatch: 5.1.6 + mkdirp: 1.0.4 + path-browserify: 1.0.1 + + '@tsconfig/node10@1.0.11': {} + + '@tsconfig/node12@1.0.11': {} + + '@tsconfig/node14@1.0.3': {} + + '@tsconfig/node16@1.0.4': {} + + '@types/babel__core@7.20.5': + dependencies: + '@babel/parser': 7.25.3 + '@babel/types': 7.25.2 + '@types/babel__generator': 7.6.8 + '@types/babel__template': 7.4.4 + '@types/babel__traverse': 7.20.6 + + '@types/babel__generator@7.6.8': + dependencies: + '@babel/types': 7.25.2 + + '@types/babel__template@7.4.4': + dependencies: + '@babel/parser': 7.25.3 + '@babel/types': 7.25.2 + + '@types/babel__traverse@7.20.6': + dependencies: + '@babel/types': 7.25.2 + + '@types/cacheable-request@6.0.3': + dependencies: + '@types/http-cache-semantics': 4.0.4 + '@types/keyv': 3.1.4 + '@types/node': 17.0.45 + '@types/responselike': 1.0.3 + + '@types/eslint@8.56.11': + dependencies: + '@types/estree': 1.0.5 + '@types/json-schema': 7.0.15 + + '@types/estree@0.0.39': {} + + '@types/estree@1.0.5': {} + + '@types/http-cache-semantics@4.0.4': {} + + '@types/json-schema@7.0.15': {} + + '@types/keyv@3.1.4': + dependencies: + '@types/node': 17.0.45 + + '@types/lodash-es@4.17.12': + dependencies: + '@types/lodash': 4.17.7 + + '@types/lodash@4.17.7': {} + + '@types/node@16.18.105': {} + + '@types/node@17.0.45': {} + + '@types/resolve@1.17.1': + dependencies: + '@types/node': 17.0.45 + + '@types/responselike@1.0.3': + dependencies: + '@types/node': 17.0.45 + + '@types/rollup@0.54.0': + dependencies: + rollup: 2.79.1 + + '@types/semver@7.5.8': {} + + '@types/signale@1.4.7': + dependencies: + '@types/node': 17.0.45 + + '@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@4.7.4))(eslint@8.57.0)(typescript@4.7.4)': + dependencies: + '@eslint-community/regexpp': 4.11.0 + '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@4.7.4) + '@typescript-eslint/scope-manager': 5.62.0 + '@typescript-eslint/type-utils': 5.62.0(eslint@8.57.0)(typescript@4.7.4) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@4.7.4) + debug: 4.3.6 + eslint: 8.57.0 + graphemer: 1.4.0 + ignore: 5.3.2 + natural-compare-lite: 1.4.0 + semver: 7.6.3 + tsutils: 3.21.0(typescript@4.7.4) + optionalDependencies: + typescript: 4.7.4 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@4.7.4)': + dependencies: + '@typescript-eslint/scope-manager': 5.62.0 + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/typescript-estree': 5.62.0(typescript@4.7.4) + debug: 4.3.6 + eslint: 8.57.0 + optionalDependencies: + typescript: 4.7.4 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/scope-manager@5.62.0': + dependencies: + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/visitor-keys': 5.62.0 + + '@typescript-eslint/type-utils@5.62.0(eslint@8.57.0)(typescript@4.7.4)': + dependencies: + '@typescript-eslint/typescript-estree': 5.62.0(typescript@4.7.4) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@4.7.4) + debug: 4.3.6 + eslint: 8.57.0 + tsutils: 3.21.0(typescript@4.7.4) + optionalDependencies: + typescript: 4.7.4 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/types@5.62.0': {} + + '@typescript-eslint/typescript-estree@5.62.0(typescript@4.7.4)': + dependencies: + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/visitor-keys': 5.62.0 + debug: 4.3.6 + globby: 11.1.0 + is-glob: 4.0.3 + semver: 7.6.3 + tsutils: 3.21.0(typescript@4.7.4) + optionalDependencies: + typescript: 4.7.4 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@5.62.0(eslint@8.57.0)(typescript@4.7.4)': + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) + '@types/json-schema': 7.0.15 + '@types/semver': 7.5.8 + '@typescript-eslint/scope-manager': 5.62.0 + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/typescript-estree': 5.62.0(typescript@4.7.4) + eslint: 8.57.0 + eslint-scope: 5.1.1 + semver: 7.6.3 + transitivePeerDependencies: + - supports-color + - typescript + + '@typescript-eslint/visitor-keys@5.62.0': + dependencies: + '@typescript-eslint/types': 5.62.0 + eslint-visitor-keys: 3.4.3 + + '@ungap/structured-clone@1.2.0': {} + + acorn-jsx@5.3.2(acorn@8.12.1): + dependencies: + acorn: 8.12.1 + + acorn-walk@8.3.3: + dependencies: + acorn: 8.12.1 + + acorn@8.12.1: {} + + aggregate-error@3.1.0: + dependencies: + clean-stack: 2.2.0 + indent-string: 4.0.0 + + aggregate-error@4.0.1: + dependencies: + clean-stack: 4.2.0 + indent-string: 5.0.0 + + ajv-formats@2.1.1(ajv@8.17.1): + optionalDependencies: + ajv: 8.17.1 + + ajv@6.12.6: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + + ajv@8.17.1: + dependencies: + fast-deep-equal: 3.1.3 + fast-uri: 3.0.1 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + + ansi-regex@5.0.1: {} + + ansi-regex@6.0.1: {} + + ansi-sequence-parser@1.1.1: {} + + ansi-styles@3.2.1: + dependencies: + color-convert: 1.9.3 + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + ansi-styles@6.2.1: {} + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + arg@4.1.3: {} + + argparse@1.0.10: + dependencies: + sprintf-js: 1.0.3 + + argparse@2.0.1: {} + + array-buffer-byte-length@1.0.1: + dependencies: + call-bind: 1.0.7 + is-array-buffer: 3.0.4 + + array-find-index@1.0.2: {} + + array-union@2.1.0: {} + + arraybuffer.prototype.slice@1.0.3: + dependencies: + array-buffer-byte-length: 1.0.1 + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + is-array-buffer: 3.0.4 + is-shared-array-buffer: 1.0.3 + + arrgv@1.0.2: {} + + arrify@3.0.0: {} + + atob@2.1.2: {} - /ava@4.3.3: - resolution: {integrity: sha512-9Egq/d9R74ExrWohHeqUlexjDbgZJX5jA1Wq4KCTqc3wIfpGEK79zVy4rBtofJ9YKIxs4PzhJ8BgbW5PlAYe6w==} - engines: {node: '>=12.22 <13 || >=14.17 <15 || >=16.4 <17 || >=18'} - hasBin: true - peerDependencies: - '@ava/typescript': '*' - peerDependenciesMeta: - '@ava/typescript': - optional: true + ava@4.3.3: dependencies: - acorn: 8.11.2 - acorn-walk: 8.3.0 + acorn: 8.12.1 + acorn-walk: 8.3.3 ansi-styles: 6.2.1 arrgv: 1.0.2 arrify: 3.0.0 - callsites: 4.1.0 + callsites: 4.2.0 cbor: 8.1.0 chalk: 5.3.0 - chokidar: 3.5.3 + chokidar: 3.6.0 chunkd: 2.0.1 ci-info: 3.9.0 ci-parallel-vars: 1.0.1 @@ -1321,7 +3220,7 @@ packages: common-path-prefix: 3.0.0 concordance: 5.0.4 currently-unhandled: 0.4.1 - debug: 4.3.4 + debug: 4.3.6 del: 6.1.1 emittery: 0.11.0 figures: 4.0.1 @@ -1350,107 +3249,70 @@ packages: yargs: 17.7.2 transitivePeerDependencies: - supports-color - dev: true - /available-typed-arrays@1.0.5: - resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} - engines: {node: '>= 0.4'} - dev: true + available-typed-arrays@1.0.7: + dependencies: + possible-typed-array-names: 1.0.0 - /balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + balanced-match@1.0.2: {} - /base-x@3.0.9: - resolution: {integrity: sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==} + base-x@3.0.10: dependencies: safe-buffer: 5.2.1 - dev: true - /base64url@3.0.1: - resolution: {integrity: sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==} - engines: {node: '>=6.0.0'} - dev: true + base64url@3.0.1: {} - /binary-extensions@2.2.0: - resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} - engines: {node: '>=8'} - dev: true + binary-extensions@2.3.0: {} - /blueimp-md5@2.19.0: - resolution: {integrity: sha512-DRQrD6gJyy8FbiE4s+bDoXS9hiW3Vbx5uCdwvcCf3zLHL+Iv7LtGHLpr+GZV8rHG8tK766FGYBwRbu8pELTt+w==} - dev: true + blueimp-md5@2.19.0: {} - /bn.js@5.2.1: - resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} - dev: true + bn.js@5.2.1: {} - /borsh@0.5.0: - resolution: {integrity: sha512-p9w/qGBeeFdUf2GPBPHdX5JQyez8K5VtoFN7PqSfmR+cVUMSmcwAKhP9n2aXoDSKbtS7xZlZt3MVnrJL7GdYhg==} + borsh@0.5.0: dependencies: bn.js: 5.2.1 bs58: 4.0.1 text-encoding-utf-8: 1.0.2 - dev: true - /borsh@0.7.0: - resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==} + borsh@0.7.0: dependencies: bn.js: 5.2.1 bs58: 4.0.1 text-encoding-utf-8: 1.0.2 - dev: true - /borsh@1.0.0: - resolution: {integrity: sha512-fSVWzzemnyfF89EPwlUNsrS5swF5CrtiN4e+h0/lLf4dz2he4L3ndM20PS9wj7ICSkXJe/TQUHdaPTq15b1mNQ==} - dev: false + borsh@1.0.0: {} - /brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + brace-expansion@1.1.11: dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 - /brace-expansion@2.0.1: - resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + brace-expansion@2.0.1: dependencies: balanced-match: 1.0.2 - /braces@3.0.2: - resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} - engines: {node: '>=8'} + braces@3.0.3: dependencies: - fill-range: 7.0.1 + fill-range: 7.1.1 - /browserslist@4.22.1: - resolution: {integrity: sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true + browserslist@4.23.3: dependencies: - caniuse-lite: 1.0.30001565 - electron-to-chromium: 1.4.597 - node-releases: 2.0.13 - update-browserslist-db: 1.0.13(browserslist@4.22.1) - dev: false + caniuse-lite: 1.0.30001651 + electron-to-chromium: 1.5.8 + node-releases: 2.0.18 + update-browserslist-db: 1.1.0(browserslist@4.23.3) - /bs58@4.0.1: - resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==} + bs58@4.0.1: dependencies: - base-x: 3.0.9 - dev: true + base-x: 3.0.10 - /builtin-modules@3.3.0: - resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} - engines: {node: '>=6'} - dev: false + buffer-from@1.1.2: {} - /cacheable-lookup@5.0.4: - resolution: {integrity: sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==} - engines: {node: '>=10.6.0'} - dev: true + builtin-modules@3.3.0: {} - /cacheable-request@7.0.4: - resolution: {integrity: sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==} - engines: {node: '>=8'} + cacheable-lookup@5.0.4: {} + + cacheable-request@7.0.4: dependencies: clone-response: 1.0.3 get-stream: 5.2.0 @@ -1459,66 +3321,44 @@ packages: lowercase-keys: 2.0.0 normalize-url: 6.1.0 responselike: 2.0.1 - dev: true - /call-bind@1.0.5: - resolution: {integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==} + call-bind@1.0.7: dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 function-bind: 1.1.2 - get-intrinsic: 1.2.2 - set-function-length: 1.1.1 - dev: true + get-intrinsic: 1.2.4 + set-function-length: 1.2.2 - /callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} + callsites@3.1.0: {} - /callsites@4.1.0: - resolution: {integrity: sha512-aBMbD1Xxay75ViYezwT40aQONfr+pSXTHwNKvIXhXD6+LY3F1dLIcceoC5OZKBVHbXcysz1hL9D2w0JJIMXpUw==} - engines: {node: '>=12.20'} - dev: true + callsites@4.2.0: {} - /caniuse-lite@1.0.30001565: - resolution: {integrity: sha512-xrE//a3O7TP0vaJ8ikzkD2c2NgcVUvsEe2IvFTntV4Yd1Z9FVzh+gW+enX96L0psrbaFMcVcH2l90xNuGDWc8w==} - dev: false + caniuse-lite@1.0.30001651: {} - /capability@0.2.5: - resolution: {integrity: sha512-rsJZYVCgXd08sPqwmaIqjAd5SUTfonV0z/gDJ8D6cN8wQphky1kkAYEqQ+hmDxTw7UihvBfjUVUSY+DBEe44jg==} - dev: true + capability@0.2.5: {} - /cbor@8.1.0: - resolution: {integrity: sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg==} - engines: {node: '>=12.19'} + cbor@8.1.0: dependencies: nofilter: 3.1.0 - dev: true - /chalk@2.4.2: - resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} - engines: {node: '>=4'} + chalk@2.4.2: dependencies: ansi-styles: 3.2.1 escape-string-regexp: 1.0.5 supports-color: 5.5.0 - /chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} + chalk@4.1.2: dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 - /chalk@5.3.0: - resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - dev: true + chalk@5.3.0: {} - /chokidar@3.5.3: - resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} - engines: {node: '>= 8.10.0'} + chokidar@3.6.0: dependencies: anymatch: 3.1.3 - braces: 3.0.2 + braces: 3.0.3 glob-parent: 5.1.2 is-binary-path: 2.1.0 is-glob: 4.0.3 @@ -1526,112 +3366,67 @@ packages: readdirp: 3.6.0 optionalDependencies: fsevents: 2.3.3 - dev: true - /chownr@2.0.0: - resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} - engines: {node: '>=10'} - dev: true + chownr@2.0.0: {} - /chunkd@2.0.1: - resolution: {integrity: sha512-7d58XsFmOq0j6el67Ug9mHf9ELUXsQXYJBkyxhH/k+6Ke0qXRnv0kbemx+Twc6fRJ07C49lcbdgm9FL1Ei/6SQ==} - dev: true + chunkd@2.0.1: {} - /ci-info@3.9.0: - resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} - engines: {node: '>=8'} - dev: true + ci-info@3.9.0: {} - /ci-parallel-vars@1.0.1: - resolution: {integrity: sha512-uvzpYrpmidaoxvIQHM+rKSrigjOe9feHYbw4uOI2gdfe1C3xIlxO+kVXq83WQWNniTf8bAxVpy+cQeFQsMERKg==} - dev: true + ci-parallel-vars@1.0.1: {} - /clean-stack@2.2.0: - resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} - engines: {node: '>=6'} - dev: true + clean-stack@2.2.0: {} - /clean-stack@4.2.0: - resolution: {integrity: sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg==} - engines: {node: '>=12'} + clean-stack@4.2.0: dependencies: escape-string-regexp: 5.0.0 - dev: true - /clean-yaml-object@0.1.0: - resolution: {integrity: sha512-3yONmlN9CSAkzNwnRCiJQ7Q2xK5mWuEfL3PuTZcAUzhObbXsfsnMptJzXwz93nc5zn9V9TwCVMmV7w4xsm43dw==} - engines: {node: '>=0.10.0'} - dev: true + clean-yaml-object@0.1.0: {} - /cli-truncate@3.1.0: - resolution: {integrity: sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + cli-truncate@3.1.0: dependencies: slice-ansi: 5.0.0 string-width: 5.1.2 - dev: true - /cliui@8.0.1: - resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} - engines: {node: '>=12'} + cliui@8.0.1: dependencies: string-width: 4.2.3 strip-ansi: 6.0.1 wrap-ansi: 7.0.0 - /clone-response@1.0.3: - resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==} + clone-response@1.0.3: dependencies: mimic-response: 1.0.1 - dev: true - /code-block-writer@11.0.3: - resolution: {integrity: sha512-NiujjUFB4SwScJq2bwbYUtXbZhBSlY6vYzm++3Q6oC+U+injTqfPYFK8wS9COOmb2lueqp0ZRB4nK1VYeHgNyw==} - dev: false + code-block-writer@11.0.3: {} - /code-excerpt@4.0.0: - resolution: {integrity: sha512-xxodCmBen3iy2i0WtAK8FlFNrRzjUqjRsMfho58xT/wvZU1YTM3fCnRjcy1gJPMepaRlgm/0e6w8SpWHpn3/cA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + code-excerpt@4.0.0: dependencies: convert-to-spaces: 2.0.1 - dev: true - /color-convert@1.9.3: - resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + color-convert@1.9.3: dependencies: color-name: 1.1.3 - /color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} + color-convert@2.0.1: dependencies: color-name: 1.1.4 - /color-name@1.1.3: - resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + color-name@1.1.3: {} - /color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + color-name@1.1.4: {} - /commander@9.5.0: - resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} - engines: {node: ^12.20.0 || >=14} - dev: false + commander@2.20.3: {} - /common-path-prefix@3.0.0: - resolution: {integrity: sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==} - dev: true + commander@9.5.0: {} - /commondir@1.0.1: - resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} - dev: false + common-path-prefix@3.0.0: {} - /concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + commondir@1.0.1: {} - /concordance@5.0.4: - resolution: {integrity: sha512-OAcsnTEYu1ARJqWVGwf4zh4JDfHZEaSNlNccFmt8YjB2l/n19/PF2viLINHc57vO4FKIAFl2FWASIGZZWZ2Kxw==} - engines: {node: '>=10.18.0 <11 || >=12.14.0 <13 || >=14'} + concat-map@0.0.1: {} + + concordance@5.0.4: dependencies: date-time: 3.1.0 esutils: 2.0.3 @@ -1639,113 +3434,84 @@ packages: js-string-escape: 1.0.1 lodash: 4.17.21 md5-hex: 3.0.1 - semver: 7.5.4 + semver: 7.6.3 well-known-symbols: 2.0.0 - dev: true - /convert-source-map@2.0.0: - resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - dev: false + convert-source-map@2.0.0: {} - /convert-to-spaces@2.0.1: - resolution: {integrity: sha512-rcQ1bsQO9799wq24uE5AM2tAILy4gXGIK/njFWcVQkGNZ96edlpY+A7bjwvzjYvLDyzmG1MmMLZhpcsb+klNMQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: true + convert-to-spaces@2.0.1: {} - /create-require@1.1.1: - resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} - dev: false + create-require@1.1.1: {} - /cross-spawn@6.0.5: - resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} - engines: {node: '>=4.8'} + cross-spawn@6.0.5: dependencies: nice-try: 1.0.5 path-key: 2.0.1 semver: 5.7.2 shebang-command: 1.2.0 which: 1.3.1 - dev: true - /cross-spawn@7.0.3: - resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} - engines: {node: '>= 8'} + cross-spawn@7.0.3: dependencies: path-key: 3.1.1 shebang-command: 2.0.0 which: 2.0.2 - /currently-unhandled@0.4.1: - resolution: {integrity: sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng==} - engines: {node: '>=0.10.0'} + currently-unhandled@0.4.1: dependencies: array-find-index: 1.0.2 - dev: true - /date-time@3.1.0: - resolution: {integrity: sha512-uqCUKXE5q1PNBXjPqvwhwJf9SwMoAHBgWJ6DcrnS5o+W2JOiIILl0JEdVD8SGujrNS02GGxgwAg2PN2zONgtjg==} - engines: {node: '>=6'} + data-view-buffer@1.0.1: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + + data-view-byte-length@1.0.1: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + + data-view-byte-offset@1.0.0: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + + date-time@3.1.0: dependencies: time-zone: 1.0.0 - dev: true - /debug@4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true + debug@4.3.6: dependencies: ms: 2.1.2 - /decode-uri-component@0.2.2: - resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==} - engines: {node: '>=0.10'} - dev: false + decode-uri-component@0.2.2: {} - /decompress-response@6.0.0: - resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} - engines: {node: '>=10'} + decompress-response@6.0.0: dependencies: mimic-response: 3.1.0 - dev: true - /deep-is@0.1.4: - resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + deep-is@0.1.4: {} - /deepmerge@4.3.1: - resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} - engines: {node: '>=0.10.0'} - dev: false + deepmerge@4.3.1: {} - /defer-to-connect@2.0.1: - resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} - engines: {node: '>=10'} - dev: true + defer-to-connect@2.0.1: {} - /define-data-property@1.1.1: - resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==} - engines: {node: '>= 0.4'} + define-data-property@1.1.4: dependencies: - get-intrinsic: 1.2.2 + es-define-property: 1.0.0 + es-errors: 1.3.0 gopd: 1.0.1 - has-property-descriptors: 1.0.1 - dev: true - /define-properties@1.2.1: - resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} - engines: {node: '>= 0.4'} + define-properties@1.2.1: dependencies: - define-data-property: 1.1.1 - has-property-descriptors: 1.0.1 + define-data-property: 1.1.4 + has-property-descriptors: 1.0.2 object-keys: 1.1.1 - dev: true - /del@6.1.1: - resolution: {integrity: sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==} - engines: {node: '>=10'} + del@6.1.1: dependencies: globby: 11.1.0 graceful-fs: 4.2.11 @@ -1755,218 +3521,170 @@ packages: p-map: 4.0.0 rimraf: 3.0.2 slash: 3.0.0 - dev: true - /depd@1.1.2: - resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} - engines: {node: '>= 0.6'} - dev: true + depd@1.1.2: {} - /depd@2.0.0: - resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} - engines: {node: '>= 0.8'} - dev: true + depd@2.0.0: {} - /diff@4.0.2: - resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} - engines: {node: '>=0.3.1'} - dev: false + diff@4.0.2: {} - /dir-glob@3.0.1: - resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} - engines: {node: '>=8'} + dir-glob@3.0.1: dependencies: path-type: 4.0.0 - /doctrine@3.0.0: - resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} - engines: {node: '>=6.0.0'} + doctrine@3.0.0: dependencies: esutils: 2.0.3 - /eastasianwidth@0.2.0: - resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - dev: true + eastasianwidth@0.2.0: {} - /electron-to-chromium@1.4.597: - resolution: {integrity: sha512-0XOQNqHhg2YgRVRUrS4M4vWjFCFIP2ETXcXe/0KIQBjXE9Cpy+tgzzYfuq6HGai3hWq0YywtG+5XK8fyG08EjA==} - dev: false + electron-to-chromium@1.5.8: {} - /emittery@0.11.0: - resolution: {integrity: sha512-S/7tzL6v5i+4iJd627Nhv9cLFIo5weAIlGccqJFpnBoDB8U1TF2k5tez4J/QNuxyyhWuFqHg1L84Kd3m7iXg6g==} - engines: {node: '>=12'} - dev: true + emittery@0.11.0: {} - /emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + emoji-regex@8.0.0: {} - /emoji-regex@9.2.2: - resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - dev: true + emoji-regex@9.2.2: {} - /end-of-stream@1.4.4: - resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + end-of-stream@1.4.4: dependencies: once: 1.4.0 - dev: true - /error-ex@1.3.2: - resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + error-ex@1.3.2: dependencies: is-arrayish: 0.2.1 - /error-polyfill@0.1.3: - resolution: {integrity: sha512-XHJk60ufE+TG/ydwp4lilOog549iiQF2OAPhkk9DdiYWMrltz5yhDz/xnKuenNwP7gy3dsibssO5QpVhkrSzzg==} + error-polyfill@0.1.3: dependencies: capability: 0.2.5 o3: 1.0.3 u3: 0.1.1 - dev: true - /es-abstract@1.22.3: - resolution: {integrity: sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==} - engines: {node: '>= 0.4'} - dependencies: - array-buffer-byte-length: 1.0.0 - arraybuffer.prototype.slice: 1.0.2 - available-typed-arrays: 1.0.5 - call-bind: 1.0.5 - es-set-tostringtag: 2.0.2 + es-abstract@1.23.3: + dependencies: + array-buffer-byte-length: 1.0.1 + arraybuffer.prototype.slice: 1.0.3 + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + data-view-buffer: 1.0.1 + data-view-byte-length: 1.0.1 + data-view-byte-offset: 1.0.0 + es-define-property: 1.0.0 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + es-set-tostringtag: 2.0.3 es-to-primitive: 1.2.1 function.prototype.name: 1.1.6 - get-intrinsic: 1.2.2 - get-symbol-description: 1.0.0 - globalthis: 1.0.3 + get-intrinsic: 1.2.4 + get-symbol-description: 1.0.2 + globalthis: 1.0.4 gopd: 1.0.1 - has-property-descriptors: 1.0.1 - has-proto: 1.0.1 + has-property-descriptors: 1.0.2 + has-proto: 1.0.3 has-symbols: 1.0.3 - hasown: 2.0.0 - internal-slot: 1.0.6 - is-array-buffer: 3.0.2 + hasown: 2.0.2 + internal-slot: 1.0.7 + is-array-buffer: 3.0.4 is-callable: 1.2.7 - is-negative-zero: 2.0.2 + is-data-view: 1.0.1 + is-negative-zero: 2.0.3 is-regex: 1.1.4 - is-shared-array-buffer: 1.0.2 + is-shared-array-buffer: 1.0.3 is-string: 1.0.7 - is-typed-array: 1.1.12 + is-typed-array: 1.1.13 is-weakref: 1.0.2 - object-inspect: 1.13.1 + object-inspect: 1.13.2 object-keys: 1.1.1 - object.assign: 4.1.4 - regexp.prototype.flags: 1.5.1 - safe-array-concat: 1.0.1 - safe-regex-test: 1.0.0 - string.prototype.trim: 1.2.8 - string.prototype.trimend: 1.0.7 - string.prototype.trimstart: 1.0.7 - typed-array-buffer: 1.0.0 - typed-array-byte-length: 1.0.0 - typed-array-byte-offset: 1.0.0 - typed-array-length: 1.0.4 + object.assign: 4.1.5 + regexp.prototype.flags: 1.5.2 + safe-array-concat: 1.1.2 + safe-regex-test: 1.0.3 + string.prototype.trim: 1.2.9 + string.prototype.trimend: 1.0.8 + string.prototype.trimstart: 1.0.8 + typed-array-buffer: 1.0.2 + typed-array-byte-length: 1.0.1 + typed-array-byte-offset: 1.0.2 + typed-array-length: 1.0.6 unbox-primitive: 1.0.2 - which-typed-array: 1.1.13 - dev: true + which-typed-array: 1.1.15 - /es-set-tostringtag@2.0.2: - resolution: {integrity: sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==} - engines: {node: '>= 0.4'} + es-define-property@1.0.0: dependencies: - get-intrinsic: 1.2.2 - has-tostringtag: 1.0.0 - hasown: 2.0.0 - dev: true + get-intrinsic: 1.2.4 - /es-to-primitive@1.2.1: - resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} - engines: {node: '>= 0.4'} + es-errors@1.3.0: {} + + es-object-atoms@1.0.0: + dependencies: + es-errors: 1.3.0 + + es-set-tostringtag@2.0.3: + dependencies: + get-intrinsic: 1.2.4 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + + es-to-primitive@1.2.1: dependencies: is-callable: 1.2.7 is-date-object: 1.0.5 is-symbol: 1.0.4 - dev: true - /escalade@3.1.1: - resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} - engines: {node: '>=6'} + escalade@3.1.2: {} - /escape-string-regexp@1.0.5: - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} - engines: {node: '>=0.8.0'} + escape-string-regexp@1.0.5: {} - /escape-string-regexp@2.0.0: - resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} - engines: {node: '>=8'} - dev: true + escape-string-regexp@2.0.0: {} - /escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} + escape-string-regexp@4.0.0: {} - /escape-string-regexp@5.0.0: - resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} - engines: {node: '>=12'} - dev: true + escape-string-regexp@5.0.0: {} - /eslint-config-prettier@8.10.0(eslint@8.54.0): - resolution: {integrity: sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==} - hasBin: true - peerDependencies: - eslint: '>=7.0.0' + eslint-config-prettier@8.10.0(eslint@8.57.0): dependencies: - eslint: 8.54.0 - dev: true + eslint: 8.57.0 - /eslint-scope@5.1.1: - resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} - engines: {node: '>=8.0.0'} + eslint-scope@5.1.1: dependencies: esrecurse: 4.3.0 estraverse: 4.3.0 - dev: false - /eslint-scope@7.2.2: - resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + eslint-scope@7.2.2: dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 - /eslint-visitor-keys@3.4.3: - resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + eslint-visitor-keys@3.4.3: {} - /eslint@8.54.0: - resolution: {integrity: sha512-NY0DfAkM8BIZDVl6PgSa1ttZbx3xHgJzSNJKYcQglem6CppHyMhRIQkBVSSMaSRnLhig3jsDbEzOjwCVt4AmmA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - hasBin: true + eslint@8.57.0: dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.54.0) - '@eslint-community/regexpp': 4.10.0 - '@eslint/eslintrc': 2.1.3 - '@eslint/js': 8.54.0 - '@humanwhocodes/config-array': 0.11.13 + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) + '@eslint-community/regexpp': 4.11.0 + '@eslint/eslintrc': 2.1.4 + '@eslint/js': 8.57.0 + '@humanwhocodes/config-array': 0.11.14 '@humanwhocodes/module-importer': 1.0.1 '@nodelib/fs.walk': 1.2.8 '@ungap/structured-clone': 1.2.0 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.4 + debug: 4.3.6 doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.2.2 eslint-visitor-keys: 3.4.3 espree: 9.6.1 - esquery: 1.5.0 + esquery: 1.6.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 file-entry-cache: 6.0.1 find-up: 5.0.0 glob-parent: 6.0.2 - globals: 13.23.0 + globals: 13.24.0 graphemer: 1.4.0 - ignore: 5.3.0 + ignore: 5.3.2 imurmurhash: 0.1.4 is-glob: 4.0.3 is-path-inside: 3.0.3 @@ -1976,242 +3694,160 @@ packages: lodash.merge: 4.6.2 minimatch: 3.1.2 natural-compare: 1.4.0 - optionator: 0.9.3 + optionator: 0.9.4 strip-ansi: 6.0.1 text-table: 0.2.0 transitivePeerDependencies: - supports-color - /espree@9.6.1: - resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + espree@9.6.1: dependencies: - acorn: 8.11.2 - acorn-jsx: 5.3.2(acorn@8.11.2) + acorn: 8.12.1 + acorn-jsx: 5.3.2(acorn@8.12.1) eslint-visitor-keys: 3.4.3 - /esprima@4.0.1: - resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} - engines: {node: '>=4'} - hasBin: true - dev: true + esprima@4.0.1: {} - /esquery@1.5.0: - resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} - engines: {node: '>=0.10'} + esquery@1.6.0: dependencies: estraverse: 5.3.0 - /esrecurse@4.3.0: - resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} - engines: {node: '>=4.0'} + esrecurse@4.3.0: dependencies: estraverse: 5.3.0 - /estraverse@4.3.0: - resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} - engines: {node: '>=4.0'} - dev: false + estraverse@4.3.0: {} - /estraverse@5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} - engines: {node: '>=4.0'} + estraverse@5.3.0: {} - /estree-walker@1.0.1: - resolution: {integrity: sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==} + estree-walker@1.0.1: {} - /estree-walker@2.0.2: - resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} - dev: false + estree-walker@2.0.2: {} - /esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} + esutils@2.0.3: {} - /fast-deep-equal@3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + fast-deep-equal@3.1.3: {} - /fast-diff@1.3.0: - resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} - dev: true + fast-diff@1.3.0: {} - /fast-glob@3.3.2: - resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} - engines: {node: '>=8.6.0'} + fast-glob@3.3.2: dependencies: '@nodelib/fs.stat': 2.0.5 '@nodelib/fs.walk': 1.2.8 glob-parent: 5.1.2 merge2: 1.4.1 - micromatch: 4.0.5 + micromatch: 4.0.7 - /fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + fast-json-stable-stringify@2.1.0: {} - /fast-levenshtein@2.0.6: - resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + fast-levenshtein@2.0.6: {} - /fastq@1.15.0: - resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} + fast-uri@3.0.1: {} + + fastq@1.17.1: dependencies: reusify: 1.0.4 - /figures@2.0.0: - resolution: {integrity: sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==} - engines: {node: '>=4'} + figures@2.0.0: dependencies: escape-string-regexp: 1.0.5 - dev: false - /figures@4.0.1: - resolution: {integrity: sha512-rElJwkA/xS04Vfg+CaZodpso7VqBknOYbzi6I76hI4X80RUjkSxO2oAyPmGbuXUppywjqndOrQDl817hDnI++w==} - engines: {node: '>=12'} + figures@4.0.1: dependencies: escape-string-regexp: 5.0.0 is-unicode-supported: 1.3.0 - dev: true - /file-entry-cache@6.0.1: - resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} - engines: {node: ^10.12.0 || >=12.0.0} + file-entry-cache@6.0.1: dependencies: flat-cache: 3.2.0 - /fill-range@7.0.1: - resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} - engines: {node: '>=8'} + fill-range@7.1.1: dependencies: to-regex-range: 5.0.1 - /find-up@2.1.0: - resolution: {integrity: sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==} - engines: {node: '>=4'} + find-up@2.1.0: dependencies: locate-path: 2.0.0 - dev: false - /find-up@5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} - engines: {node: '>=10'} + find-up@5.0.0: dependencies: locate-path: 6.0.0 path-exists: 4.0.0 - /find-up@6.3.0: - resolution: {integrity: sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + find-up@6.3.0: dependencies: locate-path: 7.2.0 path-exists: 5.0.0 - dev: true - /flat-cache@3.2.0: - resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} - engines: {node: ^10.12.0 || >=12.0.0} + flat-cache@3.2.0: dependencies: - flatted: 3.2.9 + flatted: 3.3.1 keyv: 4.5.4 rimraf: 3.0.2 - /flatted@3.2.9: - resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} + flatted@3.3.1: {} - /for-each@0.3.3: - resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + for-each@0.3.3: dependencies: is-callable: 1.2.7 - dev: true - /fs-extra@10.1.0: - resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} - engines: {node: '>=12'} + fs-extra@10.1.0: dependencies: graceful-fs: 4.2.11 jsonfile: 6.1.0 universalify: 2.0.1 - dev: true - /fs-minipass@2.1.0: - resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} - engines: {node: '>= 8'} + fs-minipass@2.1.0: dependencies: minipass: 3.3.6 - dev: true - /fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + fs.realpath@1.0.0: {} - /fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - requiresBuild: true + fsevents@2.3.3: optional: true - /function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + function-bind@1.1.2: {} - /function.prototype.name@1.1.6: - resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} - engines: {node: '>= 0.4'} + function.prototype.name@1.1.6: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-abstract: 1.23.3 functions-have-names: 1.2.3 - dev: true - /functions-have-names@1.2.3: - resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - dev: true + functions-have-names@1.2.3: {} - /gensync@1.0.0-beta.2: - resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} - engines: {node: '>=6.9.0'} - dev: false + gensync@1.0.0-beta.2: {} - /get-caller-file@2.0.5: - resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} - engines: {node: 6.* || 8.* || >= 10.*} + get-caller-file@2.0.5: {} - /get-intrinsic@1.2.2: - resolution: {integrity: sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==} + get-intrinsic@1.2.4: dependencies: + es-errors: 1.3.0 function-bind: 1.1.2 - has-proto: 1.0.1 + has-proto: 1.0.3 has-symbols: 1.0.3 - hasown: 2.0.0 - dev: true + hasown: 2.0.2 - /get-stream@5.2.0: - resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} - engines: {node: '>=8'} + get-stream@5.2.0: dependencies: pump: 3.0.0 - dev: true - /get-symbol-description@1.0.0: - resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} - engines: {node: '>= 0.4'} + get-symbol-description@1.0.2: dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 - dev: true + call-bind: 1.0.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 - /glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} + glob-parent@5.1.2: dependencies: is-glob: 4.0.3 - /glob-parent@6.0.2: - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} - engines: {node: '>=10.13.0'} + glob-parent@6.0.2: dependencies: is-glob: 4.0.3 - /glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + glob@7.2.3: dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 @@ -2220,55 +3856,39 @@ packages: once: 1.4.0 path-is-absolute: 1.0.1 - /globals@11.12.0: - resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} - engines: {node: '>=4'} - dev: false + globals@11.12.0: {} - /globals@13.23.0: - resolution: {integrity: sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==} - engines: {node: '>=8'} + globals@13.24.0: dependencies: type-fest: 0.20.2 - /globalthis@1.0.3: - resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} - engines: {node: '>= 0.4'} + globalthis@1.0.4: dependencies: define-properties: 1.2.1 - dev: true + gopd: 1.0.1 - /globby@11.1.0: - resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} - engines: {node: '>=10'} + globby@11.1.0: dependencies: array-union: 2.1.0 dir-glob: 3.0.1 fast-glob: 3.3.2 - ignore: 5.3.0 + ignore: 5.3.2 merge2: 1.4.1 slash: 3.0.0 - /globby@13.2.2: - resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + globby@13.2.2: dependencies: dir-glob: 3.0.1 fast-glob: 3.3.2 - ignore: 5.3.0 + ignore: 5.3.2 merge2: 1.4.1 slash: 4.0.0 - dev: true - /gopd@1.0.1: - resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + gopd@1.0.1: dependencies: - get-intrinsic: 1.2.2 - dev: true + get-intrinsic: 1.2.4 - /got@11.8.6: - resolution: {integrity: sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==} - engines: {node: '>=10.19.0'} + got@11.8.6: dependencies: '@sindresorhus/is': 4.6.0 '@szmarczak/http-timer': 4.0.6 @@ -2281,606 +3901,355 @@ packages: lowercase-keys: 2.0.0 p-cancelable: 2.1.1 responselike: 2.0.1 - dev: true - /graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + graceful-fs@4.2.11: {} - /graphemer@1.4.0: - resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + graphemer@1.4.0: {} - /has-bigints@1.0.2: - resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} - dev: true + has-bigints@1.0.2: {} - /has-flag@3.0.0: - resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} - engines: {node: '>=4'} + has-flag@3.0.0: {} - /has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} + has-flag@4.0.0: {} - /has-property-descriptors@1.0.1: - resolution: {integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==} + has-property-descriptors@1.0.2: dependencies: - get-intrinsic: 1.2.2 - dev: true + es-define-property: 1.0.0 - /has-proto@1.0.1: - resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} - engines: {node: '>= 0.4'} - dev: true + has-proto@1.0.3: {} - /has-symbols@1.0.3: - resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} - engines: {node: '>= 0.4'} - dev: true + has-symbols@1.0.3: {} - /has-tostringtag@1.0.0: - resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} - engines: {node: '>= 0.4'} + has-tostringtag@1.0.2: dependencies: has-symbols: 1.0.3 - dev: true - /hasown@2.0.0: - resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} - engines: {node: '>= 0.4'} + hasown@2.0.2: dependencies: function-bind: 1.1.2 - /hosted-git-info@2.8.9: - resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} - dev: true + hosted-git-info@2.8.9: {} - /http-cache-semantics@4.1.1: - resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} - dev: true + http-cache-semantics@4.1.1: {} - /http-errors@1.8.1: - resolution: {integrity: sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==} - engines: {node: '>= 0.6'} + http-errors@1.8.1: dependencies: depd: 1.1.2 inherits: 2.0.4 setprototypeof: 1.2.0 statuses: 1.5.0 toidentifier: 1.0.1 - dev: true - /http2-wrapper@1.0.3: - resolution: {integrity: sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==} - engines: {node: '>=10.19.0'} + http2-wrapper@1.0.3: dependencies: quick-lru: 5.1.1 resolve-alpn: 1.2.1 - dev: true - /ignore-by-default@2.1.0: - resolution: {integrity: sha512-yiWd4GVmJp0Q6ghmM2B/V3oZGRmjrKLXvHR3TE1nfoXsmoggllfZUQe74EN0fJdPFZu2NIvNdrMMLm3OsV7Ohw==} - engines: {node: '>=10 <11 || >=12 <13 || >=14'} - dev: true + ignore-by-default@2.1.0: {} - /ignore@5.3.0: - resolution: {integrity: sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==} - engines: {node: '>= 4'} + ignore@5.3.2: {} - /import-fresh@3.3.0: - resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} - engines: {node: '>=6'} + import-fresh@3.3.0: dependencies: parent-module: 1.0.1 resolve-from: 4.0.0 - /imurmurhash@0.1.4: - resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} - engines: {node: '>=0.8.19'} + imurmurhash@0.1.4: {} - /indent-string@4.0.0: - resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} - engines: {node: '>=8'} - dev: true + indent-string@4.0.0: {} - /indent-string@5.0.0: - resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==} - engines: {node: '>=12'} - dev: true + indent-string@5.0.0: {} - /inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + inflight@1.0.6: dependencies: once: 1.4.0 wrappy: 1.0.2 - /inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + inherits@2.0.4: {} - /internal-slot@1.0.6: - resolution: {integrity: sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==} - engines: {node: '>= 0.4'} + internal-slot@1.0.7: dependencies: - get-intrinsic: 1.2.2 - hasown: 2.0.0 - side-channel: 1.0.4 - dev: true + es-errors: 1.3.0 + hasown: 2.0.2 + side-channel: 1.0.6 - /irregular-plurals@3.5.0: - resolution: {integrity: sha512-1ANGLZ+Nkv1ptFb2pa8oG8Lem4krflKuX/gINiHJHjJUKaJHk/SXk5x6K3J+39/p0h1RQ2saROclJJ+QLvETCQ==} - engines: {node: '>=8'} - dev: true + irregular-plurals@3.5.0: {} - /is-array-buffer@3.0.2: - resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} + is-array-buffer@3.0.4: dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 - is-typed-array: 1.1.12 - dev: true + call-bind: 1.0.7 + get-intrinsic: 1.2.4 - /is-arrayish@0.2.1: - resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + is-arrayish@0.2.1: {} - /is-bigint@1.0.4: - resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + is-bigint@1.0.4: dependencies: has-bigints: 1.0.2 - dev: true - /is-binary-path@2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} - engines: {node: '>=8'} + is-binary-path@2.1.0: dependencies: - binary-extensions: 2.2.0 - dev: true + binary-extensions: 2.3.0 - /is-boolean-object@1.1.2: - resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} - engines: {node: '>= 0.4'} + is-boolean-object@1.1.2: dependencies: - call-bind: 1.0.5 - has-tostringtag: 1.0.0 - dev: true + call-bind: 1.0.7 + has-tostringtag: 1.0.2 - /is-builtin-module@3.2.1: - resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} - engines: {node: '>=6'} + is-builtin-module@3.2.1: dependencies: builtin-modules: 3.3.0 - dev: false - /is-callable@1.2.7: - resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} - engines: {node: '>= 0.4'} - dev: true + is-callable@1.2.7: {} - /is-core-module@2.13.1: - resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} + is-core-module@2.15.0: dependencies: - hasown: 2.0.0 + hasown: 2.0.2 - /is-date-object@1.0.5: - resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} - engines: {node: '>= 0.4'} + is-data-view@1.0.1: dependencies: - has-tostringtag: 1.0.0 - dev: true + is-typed-array: 1.1.13 - /is-error@2.2.2: - resolution: {integrity: sha512-IOQqts/aHWbiisY5DuPJQ0gcbvaLFCa7fBa9xoLfxBZvQ+ZI/Zh9xoI7Gk+G64N0FdK4AbibytHht2tWgpJWLg==} - dev: true + is-date-object@1.0.5: + dependencies: + has-tostringtag: 1.0.2 - /is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} + is-error@2.2.2: {} - /is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} + is-extglob@2.1.1: {} - /is-fullwidth-code-point@4.0.0: - resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} - engines: {node: '>=12'} - dev: true + is-fullwidth-code-point@3.0.0: {} - /is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} + is-fullwidth-code-point@4.0.0: {} + + is-glob@4.0.3: dependencies: is-extglob: 2.1.1 - /is-module@1.0.0: - resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} - dev: false + is-module@1.0.0: {} - /is-negative-zero@2.0.2: - resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} - engines: {node: '>= 0.4'} - dev: true + is-negative-zero@2.0.3: {} - /is-number-object@1.0.7: - resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} - engines: {node: '>= 0.4'} + is-number-object@1.0.7: dependencies: - has-tostringtag: 1.0.0 - dev: true + has-tostringtag: 1.0.2 - /is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} + is-number@7.0.0: {} - /is-path-cwd@2.2.0: - resolution: {integrity: sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==} - engines: {node: '>=6'} - dev: true + is-path-cwd@2.2.0: {} - /is-path-inside@3.0.3: - resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} - engines: {node: '>=8'} + is-path-inside@3.0.3: {} - /is-plain-object@5.0.0: - resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} - engines: {node: '>=0.10.0'} - dev: true + is-plain-object@5.0.0: {} - /is-promise@4.0.0: - resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} - dev: true + is-promise@4.0.0: {} - /is-reference@1.2.1: - resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==} + is-reference@1.2.1: dependencies: '@types/estree': 1.0.5 - dev: false - /is-regex@1.1.4: - resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} - engines: {node: '>= 0.4'} + is-regex@1.1.4: dependencies: - call-bind: 1.0.5 - has-tostringtag: 1.0.0 - dev: true + call-bind: 1.0.7 + has-tostringtag: 1.0.2 - /is-shared-array-buffer@1.0.2: - resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} + is-shared-array-buffer@1.0.3: dependencies: - call-bind: 1.0.5 - dev: true + call-bind: 1.0.7 - /is-string@1.0.7: - resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} - engines: {node: '>= 0.4'} + is-string@1.0.7: dependencies: - has-tostringtag: 1.0.0 - dev: true + has-tostringtag: 1.0.2 - /is-symbol@1.0.4: - resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} - engines: {node: '>= 0.4'} + is-symbol@1.0.4: dependencies: has-symbols: 1.0.3 - dev: true - /is-typed-array@1.1.12: - resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} - engines: {node: '>= 0.4'} + is-typed-array@1.1.13: dependencies: - which-typed-array: 1.1.13 - dev: true + which-typed-array: 1.1.15 - /is-unicode-supported@1.3.0: - resolution: {integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==} - engines: {node: '>=12'} - dev: true + is-unicode-supported@1.3.0: {} - /is-weakref@1.0.2: - resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + is-weakref@1.0.2: dependencies: - call-bind: 1.0.5 - dev: true + call-bind: 1.0.7 - /isarray@2.0.5: - resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} - dev: true + isarray@2.0.5: {} - /isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + isexe@2.0.0: {} - /js-sha256@0.9.0: - resolution: {integrity: sha512-sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA==} - dev: true + jest-worker@26.6.2: + dependencies: + '@types/node': 17.0.45 + merge-stream: 2.0.0 + supports-color: 7.2.0 - /js-string-escape@1.0.1: - resolution: {integrity: sha512-Smw4xcfIQ5LVjAOuJCvN/zIodzA/BBSsluuoSykP+lUvScIi4U6RJLfwHet5cxFnCswUjISV8oAXaqaJDY3chg==} - engines: {node: '>= 0.8'} - dev: true + js-sha256@0.9.0: {} - /js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - dev: false + js-string-escape@1.0.1: {} - /js-yaml@3.14.1: - resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} - hasBin: true + js-tokens@4.0.0: {} + + js-yaml@3.14.1: dependencies: argparse: 1.0.10 esprima: 4.0.1 - dev: true - /js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true + js-yaml@4.1.0: dependencies: argparse: 2.0.1 - /jsesc@2.5.2: - resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} - engines: {node: '>=4'} - hasBin: true - dev: false + jsesc@2.5.2: {} - /json-buffer@3.0.1: - resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + json-buffer@3.0.1: {} - /json-parse-better-errors@1.0.2: - resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} + json-parse-better-errors@1.0.2: {} - /json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + json-schema-traverse@0.4.1: {} - /json-schema-traverse@1.0.0: - resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} - dev: true + json-schema-traverse@1.0.0: {} - /json-schema@0.4.0: - resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} - dev: false + json-schema@0.4.0: {} - /json-stable-stringify-without-jsonify@1.0.1: - resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + json-stable-stringify-without-jsonify@1.0.1: {} - /json5@2.2.3: - resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} - engines: {node: '>=6'} - hasBin: true + json5@2.2.3: {} - /jsonc-parser@3.2.0: - resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==} - dev: true + jsonc-parser@3.3.1: {} - /jsonfile@6.1.0: - resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + jsonfile@6.1.0: dependencies: universalify: 2.0.1 optionalDependencies: graceful-fs: 4.2.11 - dev: true - /keyv@4.5.4: - resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + keyv@4.5.4: dependencies: json-buffer: 3.0.1 - /levn@0.4.1: - resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} - engines: {node: '>= 0.8.0'} + levn@0.4.1: dependencies: prelude-ls: 1.2.1 type-check: 0.4.0 - /load-json-file@4.0.0: - resolution: {integrity: sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==} - engines: {node: '>=4'} + load-json-file@4.0.0: dependencies: graceful-fs: 4.2.11 parse-json: 4.0.0 pify: 3.0.0 strip-bom: 3.0.0 - /load-json-file@7.0.1: - resolution: {integrity: sha512-Gnxj3ev3mB5TkVBGad0JM6dmLiQL+o0t23JPBZ9sd+yvSLk05mFoqKBw5N8gbbkU4TNXyqCgIrl/VM17OgUIgQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: true + load-json-file@7.0.1: {} - /locate-path@2.0.0: - resolution: {integrity: sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==} - engines: {node: '>=4'} + locate-path@2.0.0: dependencies: p-locate: 2.0.0 path-exists: 3.0.0 - dev: false - /locate-path@6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} + locate-path@6.0.0: dependencies: p-locate: 5.0.0 - /locate-path@7.2.0: - resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + locate-path@7.2.0: dependencies: p-locate: 6.0.0 - dev: true - /lodash-es@4.17.21: - resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} - dev: false + lodash-es@4.17.21: {} - /lodash.merge@4.6.2: - resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + lodash.merge@4.6.2: {} - /lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - dev: true + lodash@4.17.21: {} - /lowercase-keys@2.0.0: - resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} - engines: {node: '>=8'} - dev: true + lowercase-keys@2.0.0: {} - /lru-cache@5.1.1: - resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + lru-cache@5.1.1: dependencies: yallist: 3.1.1 - dev: false - - /lru-cache@6.0.0: - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} - engines: {node: '>=10'} - dependencies: - yallist: 4.0.0 - /lunr@2.3.9: - resolution: {integrity: sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==} - dev: true + lunr@2.3.9: {} - /magic-string@0.25.9: - resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} + magic-string@0.25.9: dependencies: sourcemap-codec: 1.4.8 - dev: false - /make-error@1.3.6: - resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} - dev: false + make-error@1.3.6: {} - /map-age-cleaner@0.1.3: - resolution: {integrity: sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==} - engines: {node: '>=6'} + map-age-cleaner@0.1.3: dependencies: p-defer: 1.0.0 - dev: true - /marked@4.3.0: - resolution: {integrity: sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==} - engines: {node: '>= 12'} - hasBin: true - dev: true + marked@4.3.0: {} - /matcher@5.0.0: - resolution: {integrity: sha512-s2EMBOWtXFc8dgqvoAzKJXxNHibcdJMV0gwqKUaw9E2JBJuGUK7DrNKrA6g/i+v72TT16+6sVm5mS3thaMLQUw==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + matcher@5.0.0: dependencies: escape-string-regexp: 5.0.0 - dev: true - /md5-hex@3.0.1: - resolution: {integrity: sha512-BUiRtTtV39LIJwinWBjqVsU9xhdnz7/i889V859IBFpuqGAj6LuOvHv5XLbgZ2R7ptJoJaEcxkv88/h25T7Ciw==} - engines: {node: '>=8'} + md5-hex@3.0.1: dependencies: blueimp-md5: 2.19.0 - dev: true - /mem@9.0.2: - resolution: {integrity: sha512-F2t4YIv9XQUBHt6AOJ0y7lSmP1+cY7Fm1DRh9GClTGzKST7UWLMx6ly9WZdLH/G/ppM5RL4MlQfRT71ri9t19A==} - engines: {node: '>=12.20'} + mem@9.0.2: dependencies: map-age-cleaner: 0.1.3 mimic-fn: 4.0.0 - dev: true - /memorystream@0.3.1: - resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==} - engines: {node: '>= 0.10.0'} - dev: true + memorystream@0.3.1: {} - /merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} + merge-stream@2.0.0: {} - /micromatch@4.0.5: - resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} - engines: {node: '>=8.6'} + merge2@1.4.1: {} + + micromatch@4.0.7: dependencies: - braces: 3.0.2 + braces: 3.0.3 picomatch: 2.3.1 - /mimic-fn@4.0.0: - resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} - engines: {node: '>=12'} - dev: true + mimic-fn@4.0.0: {} - /mimic-response@1.0.1: - resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} - engines: {node: '>=4'} - dev: true + mimic-response@1.0.1: {} - /mimic-response@3.1.0: - resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} - engines: {node: '>=10'} - dev: true + mimic-response@3.1.0: {} - /minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + minimatch@3.1.2: dependencies: brace-expansion: 1.1.11 - /minimatch@5.1.6: - resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} - engines: {node: '>=10'} + minimatch@5.1.6: dependencies: brace-expansion: 2.0.1 - dev: false - /minimatch@9.0.3: - resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} - engines: {node: '>=16 || 14 >=14.17'} + minimatch@9.0.5: dependencies: brace-expansion: 2.0.1 - dev: true - /minipass@3.3.6: - resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} - engines: {node: '>=8'} + minipass@3.3.6: dependencies: yallist: 4.0.0 - dev: true - /minipass@5.0.0: - resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} - engines: {node: '>=8'} - dev: true + minipass@5.0.0: {} - /minizlib@2.1.2: - resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} - engines: {node: '>= 8'} + minizlib@2.1.2: dependencies: minipass: 3.3.6 yallist: 4.0.0 - dev: true - /mkdirp@1.0.4: - resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} - engines: {node: '>=10'} - hasBin: true + mkdirp@1.0.4: {} - /ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + ms@2.1.2: {} - /ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - dev: true + ms@2.1.3: {} - /mustache@4.2.0: - resolution: {integrity: sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==} - hasBin: true - dev: true + mustache@4.2.0: {} - /natural-compare-lite@1.4.0: - resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} - dev: false + natural-compare-lite@1.4.0: {} - /natural-compare@1.4.0: - resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + natural-compare@1.4.0: {} - /near-abi@0.1.1: - resolution: {integrity: sha512-RVDI8O+KVxRpC3KycJ1bpfVj9Zv+xvq9PlW1yIFl46GhrnLw83/72HqHGjGDjQ8DtltkcpSjY9X3YIGZ+1QyzQ==} + near-abi@0.1.1: dependencies: '@types/json-schema': 7.0.15 - /near-api-js@2.1.4: - resolution: {integrity: sha512-e1XicyvJvQMtu7qrG8oWyAdjHJJCoy+cvbW6h2Dky4yj7vC85omQz/x7IgKl71VhzDj2/TGUwjTVESp6NSe75A==} + near-api-js@2.1.4: dependencies: '@near-js/accounts': 0.1.4 '@near-js/crypto': 0.0.5 @@ -2893,8 +4262,8 @@ packages: '@near-js/types': 0.0.4 '@near-js/utils': 0.0.4 '@near-js/wallet-account': 0.0.7 - ajv: 8.12.0 - ajv-formats: 2.1.1(ajv@8.12.0) + ajv: 8.17.1 + ajv-formats: 2.1.1(ajv@8.17.1) bn.js: 5.2.1 borsh: 0.7.0 depd: 2.0.0 @@ -2905,51 +4274,37 @@ packages: tweetnacl: 1.0.3 transitivePeerDependencies: - encoding - dev: true - /near-sandbox@0.0.17: - resolution: {integrity: sha512-bL0We378hFZ0/xHAKP5mAWKS5OjzU6+VuvMlXpMwyFAwG2s5NwOnzRTezvYYwQNtG3iU+xvQ6jWvp7UO1STGLQ==} - hasBin: true - requiresBuild: true + near-sandbox@0.0.17: dependencies: got: 11.8.6 - tar: 6.2.0 - dev: true + tar: 6.2.1 - /near-typescript-json-schema@0.55.0: - resolution: {integrity: sha512-3AFYm89FHB3Bn3+Usow5iP7avF9QIkxh6PP5qCgr66/IT9SIQSG0PGPBtNDcj+WLZCL4yHzLmW7TkdK7nDzy1A==} - hasBin: true + near-typescript-json-schema@0.55.0: dependencies: '@types/json-schema': 7.0.15 - '@types/node': 16.18.66 + '@types/node': 16.18.105 glob: 7.2.3 path-equal: 1.2.5 safe-stable-stringify: 2.4.3 - ts-node: 10.9.1(@types/node@16.18.66)(typescript@4.7.4) + ts-node: 10.9.2(@types/node@16.18.105)(typescript@4.7.4) typescript: 4.7.4 yargs: 17.7.2 transitivePeerDependencies: - '@swc/core' - '@swc/wasm' - dev: false - /near-units@0.1.9: - resolution: {integrity: sha512-xiuBjpNsi+ywiu7P6iWRZdgFm7iCr/cfWlVO6+e5uaAqH4mE1rrurElyrL91llNDSnMwogd9XmlZOw5KbbHNsA==} - hasBin: true + near-units@0.1.9: dependencies: bn.js: 5.2.1 - dev: true - /near-workspaces@3.5.0: - resolution: {integrity: sha512-lkRCP2os8v7W+q1maQPSEI98f+YiPb86ibDyIy8bxr6fqnJPOsIRR3xE33rOwBsiph3WuUH46qtpYK0a+Co+EQ==} - engines: {node: '>= 14.0.0', npm: '>= 6.0.0'} - requiresBuild: true + near-workspaces@3.5.0: dependencies: base64url: 3.0.1 bn.js: 5.2.1 borsh: 0.5.0 bs58: 4.0.1 - callsites: 4.1.0 + callsites: 4.2.0 fs-extra: 10.1.0 js-sha256: 0.9.0 near-api-js: 2.1.4 @@ -2963,60 +4318,31 @@ packages: temp-dir: 2.0.0 transitivePeerDependencies: - encoding - dev: true - /nice-try@1.0.5: - resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} - dev: true + nice-try@1.0.5: {} - /node-fetch@2.7.0: - resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} - engines: {node: 4.x || >=6.0.0} - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true + node-fetch@2.7.0: dependencies: whatwg-url: 5.0.0 - dev: true - /node-port-check@2.0.1: - resolution: {integrity: sha512-PV1tj5OPbWwxvhPcChXxwCIKl/IfVEdPP4u/gQz2lao/VGoeIUXb/4U72KSHLZpTVBmgTnMm0me7yR0wUsIuPg==} - dev: true + node-port-check@2.0.1: {} - /node-releases@2.0.13: - resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==} - dev: false + node-releases@2.0.18: {} - /nofilter@3.1.0: - resolution: {integrity: sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==} - engines: {node: '>=12.19'} - dev: true + nofilter@3.1.0: {} - /normalize-package-data@2.5.0: - resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} + normalize-package-data@2.5.0: dependencies: hosted-git-info: 2.8.9 resolve: 1.22.8 semver: 5.7.2 validate-npm-package-license: 3.0.4 - dev: true - /normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} - dev: true + normalize-path@3.0.0: {} - /normalize-url@6.1.0: - resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} - engines: {node: '>=10'} - dev: true + normalize-url@6.1.0: {} - /npm-run-all@4.1.5: - resolution: {integrity: sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==} - engines: {node: '>= 4'} - hasBin: true + npm-run-all@4.1.5: dependencies: ansi-styles: 3.2.1 chalk: 2.4.2 @@ -3026,703 +4352,443 @@ packages: pidtree: 0.3.1 read-pkg: 3.0.0 shell-quote: 1.8.1 - string.prototype.padend: 3.1.5 - dev: true + string.prototype.padend: 3.1.6 - /o3@1.0.3: - resolution: {integrity: sha512-f+4n+vC6s4ysy7YO7O2gslWZBUu8Qj2i2OUJOvjRxQva7jVjYjB29jrr9NCjmxZQR0gzrOcv1RnqoYOeMs5VRQ==} + o3@1.0.3: dependencies: capability: 0.2.5 - dev: true - /object-inspect@1.13.1: - resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} - dev: true + object-inspect@1.13.2: {} - /object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} - dev: true + object-keys@1.1.1: {} - /object.assign@4.1.4: - resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} - engines: {node: '>= 0.4'} + object.assign@4.1.5: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 has-symbols: 1.0.3 object-keys: 1.1.1 - dev: true - /once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + once@1.4.0: dependencies: wrappy: 1.0.2 - /optionator@0.9.3: - resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} - engines: {node: '>= 0.8.0'} + optionator@0.9.4: dependencies: - '@aashutoshrathi/word-wrap': 1.2.6 deep-is: 0.1.4 fast-levenshtein: 2.0.6 levn: 0.4.1 prelude-ls: 1.2.1 type-check: 0.4.0 + word-wrap: 1.2.5 - /p-cancelable@2.1.1: - resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==} - engines: {node: '>=8'} - dev: true + p-cancelable@2.1.1: {} - /p-defer@1.0.0: - resolution: {integrity: sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw==} - engines: {node: '>=4'} - dev: true + p-defer@1.0.0: {} - /p-event@5.0.1: - resolution: {integrity: sha512-dd589iCQ7m1L0bmC5NLlVYfy3TbBEsMUfWx9PyAgPeIcFZ/E2yaTZ4Rz4MiBmmJShviiftHVXOqfnfzJ6kyMrQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + p-event@5.0.1: dependencies: p-timeout: 5.1.0 - dev: true - /p-limit@1.3.0: - resolution: {integrity: sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==} - engines: {node: '>=4'} + p-limit@1.3.0: dependencies: p-try: 1.0.0 - dev: false - /p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} + p-limit@3.1.0: dependencies: yocto-queue: 0.1.0 - /p-limit@4.0.0: - resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + p-limit@4.0.0: dependencies: - yocto-queue: 1.0.0 - dev: true + yocto-queue: 1.1.1 - /p-locate@2.0.0: - resolution: {integrity: sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==} - engines: {node: '>=4'} + p-locate@2.0.0: dependencies: p-limit: 1.3.0 - dev: false - /p-locate@5.0.0: - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} - engines: {node: '>=10'} + p-locate@5.0.0: dependencies: p-limit: 3.1.0 - /p-locate@6.0.0: - resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + p-locate@6.0.0: dependencies: p-limit: 4.0.0 - dev: true - /p-map@4.0.0: - resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} - engines: {node: '>=10'} + p-map@4.0.0: dependencies: aggregate-error: 3.1.0 - dev: true - /p-map@5.5.0: - resolution: {integrity: sha512-VFqfGDHlx87K66yZrNdI4YGtD70IRyd+zSvgks6mzHPRNkoKy+9EKP4SFC77/vTTQYmRmti7dvqC+m5jBrBAcg==} - engines: {node: '>=12'} + p-map@5.5.0: dependencies: aggregate-error: 4.0.1 - dev: true - /p-timeout@5.1.0: - resolution: {integrity: sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew==} - engines: {node: '>=12'} - dev: true + p-timeout@5.1.0: {} - /p-try@1.0.0: - resolution: {integrity: sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==} - engines: {node: '>=4'} - dev: false + p-try@1.0.0: {} - /parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} + parent-module@1.0.1: dependencies: callsites: 3.1.0 - /parse-json@4.0.0: - resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==} - engines: {node: '>=4'} + parse-json@4.0.0: dependencies: error-ex: 1.3.2 json-parse-better-errors: 1.0.2 - /parse-ms@2.1.0: - resolution: {integrity: sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==} - engines: {node: '>=6'} - dev: true + parse-ms@2.1.0: {} - /path-browserify@1.0.1: - resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} - dev: false + path-browserify@1.0.1: {} - /path-equal@1.2.5: - resolution: {integrity: sha512-i73IctDr3F2W+bsOWDyyVm/lqsXO47aY9nsFZUjTT/aljSbkxHxxCoyZ9UUrM8jK0JVod+An+rl48RCsvWM+9g==} - dev: false + path-equal@1.2.5: {} - /path-exists@3.0.0: - resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} - engines: {node: '>=4'} - dev: false + path-exists@3.0.0: {} - /path-exists@4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} + path-exists@4.0.0: {} - /path-exists@5.0.0: - resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: true + path-exists@5.0.0: {} - /path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} + path-is-absolute@1.0.1: {} - /path-key@2.0.1: - resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==} - engines: {node: '>=4'} - dev: true + path-key@2.0.1: {} - /path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} + path-key@3.1.1: {} - /path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + path-parse@1.0.7: {} - /path-type@3.0.0: - resolution: {integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==} - engines: {node: '>=4'} + path-type@3.0.0: dependencies: pify: 3.0.0 - dev: true - - /path-type@4.0.0: - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} - engines: {node: '>=8'} - /picocolors@1.0.0: - resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} - dev: false - - /picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} + path-type@4.0.0: {} - /pidtree@0.3.1: - resolution: {integrity: sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==} - engines: {node: '>=0.10'} - hasBin: true - dev: true + picocolors@1.0.1: {} - /pify@3.0.0: - resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==} - engines: {node: '>=4'} + picomatch@2.3.1: {} - /pkg-conf@2.1.0: - resolution: {integrity: sha512-C+VUP+8jis7EsQZIhDYmS5qlNtjv2yP4SNtjXK9AP1ZcTRlnSfuumaTnRfYZnYgUUYVIKqL0fRvmUGDV2fmp6g==} - engines: {node: '>=4'} + pidtree@0.3.1: {} + + pify@3.0.0: {} + + pkg-conf@2.1.0: dependencies: find-up: 2.1.0 load-json-file: 4.0.0 - dev: false - /pkg-conf@4.0.0: - resolution: {integrity: sha512-7dmgi4UY4qk+4mj5Cd8v/GExPo0K+SlY+hulOSdfZ/T6jVH6//y7NtzZo5WrfhDBxuQ0jCa7fLZmNaNh7EWL/w==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + pkg-conf@4.0.0: dependencies: find-up: 6.3.0 load-json-file: 7.0.1 - dev: true - /plur@5.1.0: - resolution: {integrity: sha512-VP/72JeXqak2KiOzjgKtQen5y3IZHn+9GOuLDafPv0eXa47xq0At93XahYBs26MsifCQ4enGKwbjBTKgb9QJXg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + plur@5.1.0: dependencies: irregular-plurals: 3.5.0 - dev: true - /prelude-ls@1.2.1: - resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} - engines: {node: '>= 0.8.0'} + possible-typed-array-names@1.0.0: {} - /prettier@2.8.8: - resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} - engines: {node: '>=10.13.0'} - hasBin: true - dev: true + prelude-ls@1.2.1: {} - /pretty-ms@7.0.1: - resolution: {integrity: sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==} - engines: {node: '>=10'} + prettier@2.8.8: {} + + pretty-ms@7.0.1: dependencies: parse-ms: 2.1.0 - dev: true - /promisify-child-process@4.1.2: - resolution: {integrity: sha512-APnkIgmaHNJpkAn7k+CrJSi9WMuff5ctYFbD0CO2XIPkM8yO7d/ShouU2clywbpHV/DUsyc4bpJCsNgddNtx4g==} - engines: {node: '>=8'} - dev: true + promisify-child-process@4.1.2: {} - /proper-lockfile@4.1.2: - resolution: {integrity: sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==} + proper-lockfile@4.1.2: dependencies: graceful-fs: 4.2.11 retry: 0.12.0 signal-exit: 3.0.7 - dev: true - /pump@3.0.0: - resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} + pump@3.0.0: dependencies: end-of-stream: 1.4.4 once: 1.4.0 - dev: true - /punycode@2.3.1: - resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} - engines: {node: '>=6'} + punycode@2.3.1: {} - /pure-uuid@1.8.1: - resolution: {integrity: sha512-PIwHXU7NZb/wTBwUfzCSjI85tfwx6DQOm74sRLtNLH8KHsFZEvAQbBQdz7E5ij8SNSv9WGdQPWiiM6NpNIeNfA==} - engines: {node: '>=8.0.0'} - dev: true + pure-uuid@1.8.1: {} - /queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + queue-microtask@1.2.3: {} - /quick-lru@5.1.1: - resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} - engines: {node: '>=10'} - dev: true + quick-lru@5.1.1: {} - /read-pkg@3.0.0: - resolution: {integrity: sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==} - engines: {node: '>=4'} + randombytes@2.1.0: + dependencies: + safe-buffer: 5.2.1 + + read-pkg@3.0.0: dependencies: load-json-file: 4.0.0 normalize-package-data: 2.5.0 path-type: 3.0.0 - dev: true - /readdirp@3.6.0: - resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} - engines: {node: '>=8.10.0'} + readdirp@3.6.0: dependencies: picomatch: 2.3.1 - dev: true - /regexp.prototype.flags@1.5.1: - resolution: {integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==} - engines: {node: '>= 0.4'} + regexp.prototype.flags@1.5.2: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - set-function-name: 2.0.1 - dev: true + es-errors: 1.3.0 + set-function-name: 2.0.2 - /require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} + require-directory@2.1.1: {} - /require-from-string@2.0.2: - resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} - engines: {node: '>=0.10.0'} - dev: true + require-from-string@2.0.2: {} - /resolve-alpn@1.2.1: - resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} - dev: true + resolve-alpn@1.2.1: {} - /resolve-cwd@3.0.0: - resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} - engines: {node: '>=8'} + resolve-cwd@3.0.0: dependencies: resolve-from: 5.0.0 - dev: true - /resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} + resolve-from@4.0.0: {} - /resolve-from@5.0.0: - resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} - engines: {node: '>=8'} - dev: true + resolve-from@5.0.0: {} - /resolve@1.22.8: - resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} - hasBin: true + resolve@1.22.8: dependencies: - is-core-module: 2.13.1 + is-core-module: 2.15.0 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - /responselike@2.0.1: - resolution: {integrity: sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==} + responselike@2.0.1: dependencies: lowercase-keys: 2.0.0 - dev: true - /retry@0.12.0: - resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} - engines: {node: '>= 4'} - dev: true + retry@0.12.0: {} - /reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + reusify@1.0.4: {} - /rimraf@3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - hasBin: true + rimraf@3.0.2: dependencies: glob: 7.2.3 - /rollup-plugin-sourcemaps@0.6.3(@types/node@17.0.45)(rollup@2.79.1): - resolution: {integrity: sha512-paFu+nT1xvuO1tPFYXGe+XnQvg4Hjqv/eIhG8i5EspfYYPBKL57X7iVbfv55aNVASg3dzWvES9dmWsL2KhfByw==} - engines: {node: '>=10.0.0'} - peerDependencies: - '@types/node': '>=10.0.0' - rollup: '>=0.31.2' - peerDependenciesMeta: - '@types/node': - optional: true + rollup-plugin-sourcemaps@0.6.3(@types/node@17.0.45)(rollup@2.79.1): dependencies: '@rollup/pluginutils': 3.1.0(rollup@2.79.1) - '@types/node': 17.0.45 rollup: 2.79.1 source-map-resolve: 0.6.0 - dev: false + optionalDependencies: + '@types/node': 17.0.45 - /rollup@2.79.1: - resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==} - engines: {node: '>=10.0.0'} - hasBin: true + rollup-plugin-terser@7.0.2(rollup@2.79.1): + dependencies: + '@babel/code-frame': 7.24.7 + jest-worker: 26.6.2 + rollup: 2.79.1 + serialize-javascript: 4.0.0 + terser: 5.31.6 + + rollup@2.79.1: optionalDependencies: fsevents: 2.3.3 - /run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 - /safe-array-concat@1.0.1: - resolution: {integrity: sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==} - engines: {node: '>=0.4'} + safe-array-concat@1.1.2: dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 + call-bind: 1.0.7 + get-intrinsic: 1.2.4 has-symbols: 1.0.3 isarray: 2.0.5 - dev: true - /safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - dev: true + safe-buffer@5.2.1: {} - /safe-regex-test@1.0.0: - resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} + safe-regex-test@1.0.3: dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 + call-bind: 1.0.7 + es-errors: 1.3.0 is-regex: 1.1.4 - dev: true - /safe-stable-stringify@2.4.3: - resolution: {integrity: sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==} - engines: {node: '>=10'} - dev: false + safe-stable-stringify@2.4.3: {} - /semver@5.7.2: - resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} - hasBin: true - dev: true + semver@5.7.2: {} - /semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} - hasBin: true - dev: false + semver@6.3.1: {} - /semver@7.5.4: - resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} - engines: {node: '>=10'} - hasBin: true - dependencies: - lru-cache: 6.0.0 + semver@7.6.3: {} - /serialize-error@7.0.1: - resolution: {integrity: sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==} - engines: {node: '>=10'} + serialize-error@7.0.1: dependencies: type-fest: 0.13.1 - dev: true - /set-function-length@1.1.1: - resolution: {integrity: sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==} - engines: {node: '>= 0.4'} + serialize-javascript@4.0.0: + dependencies: + randombytes: 2.1.0 + + set-function-length@1.2.2: dependencies: - define-data-property: 1.1.1 - get-intrinsic: 1.2.2 + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 gopd: 1.0.1 - has-property-descriptors: 1.0.1 - dev: true + has-property-descriptors: 1.0.2 - /set-function-name@2.0.1: - resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==} - engines: {node: '>= 0.4'} + set-function-name@2.0.2: dependencies: - define-data-property: 1.1.1 + define-data-property: 1.1.4 + es-errors: 1.3.0 functions-have-names: 1.2.3 - has-property-descriptors: 1.0.1 - dev: true + has-property-descriptors: 1.0.2 - /setprototypeof@1.2.0: - resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} - dev: true + setprototypeof@1.2.0: {} - /shebang-command@1.2.0: - resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} - engines: {node: '>=0.10.0'} + shebang-command@1.2.0: dependencies: shebang-regex: 1.0.0 - dev: true - /shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} + shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 - /shebang-regex@1.0.0: - resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} - engines: {node: '>=0.10.0'} - dev: true + shebang-regex@1.0.0: {} - /shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} + shebang-regex@3.0.0: {} - /shell-quote@1.8.1: - resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} - dev: true + shell-quote@1.8.1: {} - /shiki@0.14.5: - resolution: {integrity: sha512-1gCAYOcmCFONmErGTrS1fjzJLA7MGZmKzrBNX7apqSwhyITJg2O102uFzXUeBxNnEkDA9vHIKLyeKq0V083vIw==} + shiki@0.14.7: dependencies: ansi-sequence-parser: 1.1.1 - jsonc-parser: 3.2.0 + jsonc-parser: 3.3.1 vscode-oniguruma: 1.7.0 vscode-textmate: 8.0.0 - dev: true - /side-channel@1.0.4: - resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} + side-channel@1.0.6: dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 - object-inspect: 1.13.1 - dev: true + call-bind: 1.0.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + object-inspect: 1.13.2 - /signal-exit@3.0.7: - resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - dev: true + signal-exit@3.0.7: {} - /signale@1.4.0: - resolution: {integrity: sha512-iuh+gPf28RkltuJC7W5MRi6XAjTDCAPC/prJUpQoG4vIP3MJZ+GTydVnodXA7pwvTKb2cA0m9OFZW/cdWy/I/w==} - engines: {node: '>=6'} + signale@1.4.0: dependencies: chalk: 2.4.2 figures: 2.0.0 pkg-conf: 2.1.0 - dev: false - /slash@3.0.0: - resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} - engines: {node: '>=8'} + slash@3.0.0: {} - /slash@4.0.0: - resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} - engines: {node: '>=12'} - dev: true + slash@4.0.0: {} - /slice-ansi@5.0.0: - resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} - engines: {node: '>=12'} + slice-ansi@5.0.0: dependencies: ansi-styles: 6.2.1 is-fullwidth-code-point: 4.0.0 - dev: true - /source-map-resolve@0.6.0: - resolution: {integrity: sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==} - deprecated: See https://github.com/lydell/source-map-resolve#deprecated + source-map-resolve@0.6.0: dependencies: atob: 2.1.2 decode-uri-component: 0.2.2 - dev: false - /sourcemap-codec@1.4.8: - resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} - deprecated: Please use @jridgewell/sourcemap-codec instead - dev: false + source-map-support@0.5.21: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 - /spdx-correct@3.2.0: - resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} + source-map@0.6.1: {} + + sourcemap-codec@1.4.8: {} + + spdx-correct@3.2.0: dependencies: spdx-expression-parse: 3.0.1 - spdx-license-ids: 3.0.16 - dev: true + spdx-license-ids: 3.0.18 - /spdx-exceptions@2.3.0: - resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==} - dev: true + spdx-exceptions@2.5.0: {} - /spdx-expression-parse@3.0.1: - resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} + spdx-expression-parse@3.0.1: dependencies: - spdx-exceptions: 2.3.0 - spdx-license-ids: 3.0.16 - dev: true + spdx-exceptions: 2.5.0 + spdx-license-ids: 3.0.18 - /spdx-license-ids@3.0.16: - resolution: {integrity: sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==} - dev: true + spdx-license-ids@3.0.18: {} - /sprintf-js@1.0.3: - resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} - dev: true + sprintf-js@1.0.3: {} - /stack-utils@2.0.6: - resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} - engines: {node: '>=10'} + stack-utils@2.0.6: dependencies: escape-string-regexp: 2.0.0 - dev: true - /statuses@1.5.0: - resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} - engines: {node: '>= 0.6'} - dev: true + statuses@1.5.0: {} - /string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} + string-width@4.2.3: dependencies: emoji-regex: 8.0.0 is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 - /string-width@5.1.2: - resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} - engines: {node: '>=12'} + string-width@5.1.2: dependencies: eastasianwidth: 0.2.0 emoji-regex: 9.2.2 strip-ansi: 7.1.0 - dev: true - /string.prototype.padend@3.1.5: - resolution: {integrity: sha512-DOB27b/2UTTD+4myKUFh+/fXWcu/UDyASIXfg+7VzoCNNGOfWvoyU/x5pvVHr++ztyt/oSYI1BcWBBG/hmlNjA==} - engines: {node: '>= 0.4'} + string.prototype.padend@3.1.6: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 - dev: true + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 - /string.prototype.trim@1.2.8: - resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} - engines: {node: '>= 0.4'} + string.prototype.trim@1.2.9: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 - dev: true + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 - /string.prototype.trimend@1.0.7: - resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} + string.prototype.trimend@1.0.8: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 - dev: true + es-object-atoms: 1.0.0 - /string.prototype.trimstart@1.0.7: - resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} + string.prototype.trimstart@1.0.8: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 - dev: true + es-object-atoms: 1.0.0 - /strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} + strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 - /strip-ansi@7.1.0: - resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} - engines: {node: '>=12'} + strip-ansi@7.1.0: dependencies: ansi-regex: 6.0.1 - dev: true - /strip-bom@3.0.0: - resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} - engines: {node: '>=4'} + strip-bom@3.0.0: {} - /strip-json-comments@3.1.1: - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} - engines: {node: '>=8'} + strip-json-comments@3.1.1: {} - /supertap@3.0.1: - resolution: {integrity: sha512-u1ZpIBCawJnO+0QePsEiOknOfCRq0yERxiAchT0i4li0WHNUJbf0evXXSXOcCAR4M8iMDoajXYmstm/qO81Isw==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + supertap@3.0.1: dependencies: indent-string: 5.0.0 js-yaml: 3.14.1 serialize-error: 7.0.1 strip-ansi: 7.1.0 - dev: true - /supports-color@5.5.0: - resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} - engines: {node: '>=4'} + supports-color@5.5.0: dependencies: has-flag: 3.0.0 - /supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} + supports-color@7.2.0: dependencies: has-flag: 4.0.0 - /supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} + supports-preserve-symlinks-flag@1.0.0: {} - /tar@6.2.0: - resolution: {integrity: sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==} - engines: {node: '>=10'} + tar@6.2.1: dependencies: chownr: 2.0.0 fs-minipass: 2.1.0 @@ -3730,73 +4796,47 @@ packages: minizlib: 2.1.2 mkdirp: 1.0.4 yallist: 4.0.0 - dev: true - /temp-dir@2.0.0: - resolution: {integrity: sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==} - engines: {node: '>=8'} - dev: true + temp-dir@2.0.0: {} - /text-encoding-utf-8@1.0.2: - resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==} - dev: true + terser@5.31.6: + dependencies: + '@jridgewell/source-map': 0.3.6 + acorn: 8.12.1 + commander: 2.20.3 + source-map-support: 0.5.21 - /text-table@0.2.0: - resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + text-encoding-utf-8@1.0.2: {} - /time-zone@1.0.0: - resolution: {integrity: sha512-TIsDdtKo6+XrPtiTm1ssmMngN1sAhyKnTO2kunQWqNPWIVvCm15Wmw4SWInwTVgJ5u/Tr04+8Ei9TNcw4x4ONA==} - engines: {node: '>=4'} - dev: true + text-table@0.2.0: {} - /to-fast-properties@2.0.0: - resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} - engines: {node: '>=4'} + time-zone@1.0.0: {} - /to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} + to-fast-properties@2.0.0: {} + + to-regex-range@5.0.1: dependencies: is-number: 7.0.0 - /toidentifier@1.0.1: - resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} - engines: {node: '>=0.6'} - dev: true + toidentifier@1.0.1: {} - /tr46@0.0.3: - resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - dev: true + tr46@0.0.3: {} - /ts-morph@16.0.0: - resolution: {integrity: sha512-jGNF0GVpFj0orFw55LTsQxVYEUOCWBAbR5Ls7fTYE5pQsbW18ssTb/6UXx/GYAEjS+DQTp8VoTw0vqYMiaaQuw==} + ts-morph@16.0.0: dependencies: '@ts-morph/common': 0.17.0 code-block-writer: 11.0.3 - dev: false - /ts-node@10.9.1(@types/node@16.18.66)(typescript@4.7.4): - resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} - hasBin: true - peerDependencies: - '@swc/core': '>=1.2.50' - '@swc/wasm': '>=1.2.50' - '@types/node': '*' - typescript: '>=2.7' - peerDependenciesMeta: - '@swc/core': - optional: true - '@swc/wasm': - optional: true + ts-node@10.9.2(@types/node@16.18.105)(typescript@4.7.4): dependencies: '@cspotcode/source-map-support': 0.8.1 - '@tsconfig/node10': 1.0.9 + '@tsconfig/node10': 1.0.11 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 16.18.66 - acorn: 8.11.2 - acorn-walk: 8.3.0 + '@types/node': 16.18.105 + acorn: 8.12.1 + acorn-walk: 8.3.3 arg: 4.1.3 create-require: 1.1.1 diff: 4.0.2 @@ -3804,318 +4844,193 @@ packages: typescript: 4.7.4 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 - dev: false - /tslib@1.14.1: - resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} - dev: false + tslib@1.14.1: {} - /tsutils@3.21.0(typescript@4.7.4): - resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} - engines: {node: '>= 6'} - peerDependencies: - typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' + tsutils@3.21.0(typescript@4.7.4): dependencies: tslib: 1.14.1 typescript: 4.7.4 - dev: false - /turbo-darwin-64@1.10.16: - resolution: {integrity: sha512-+Jk91FNcp9e9NCLYlvDDlp2HwEDp14F9N42IoW3dmHI5ZkGSXzalbhVcrx3DOox3QfiNUHxzWg4d7CnVNCuuMg==} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true + turbo-darwin-64@1.13.3: optional: true - /turbo-darwin-arm64@1.10.16: - resolution: {integrity: sha512-jqGpFZipIivkRp/i+jnL8npX0VssE6IAVNKtu573LXtssZdV/S+fRGYA16tI46xJGxSAivrZ/IcgZrV6Jk80bw==} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true + turbo-darwin-arm64@1.13.3: optional: true - /turbo-linux-64@1.10.16: - resolution: {integrity: sha512-PpqEZHwLoizQ6sTUvmImcRmACyRk9EWLXGlqceogPZsJ1jTRK3sfcF9fC2W56zkSIzuLEP07k5kl+ZxJd8JMcg==} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true + turbo-linux-64@1.13.3: optional: true - /turbo-linux-arm64@1.10.16: - resolution: {integrity: sha512-TMjFYz8to1QE0fKVXCIvG/4giyfnmqcQIwjdNfJvKjBxn22PpbjeuFuQ5kNXshUTRaTJihFbuuCcb5OYFNx4uw==} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true + turbo-linux-arm64@1.13.3: optional: true - /turbo-windows-64@1.10.16: - resolution: {integrity: sha512-+jsf68krs0N66FfC4/zZvioUap/Tq3sPFumnMV+EBo8jFdqs4yehd6+MxIwYTjSQLIcpH8KoNMB0gQYhJRLZzw==} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true + turbo-windows-64@1.13.3: optional: true - /turbo-windows-arm64@1.10.16: - resolution: {integrity: sha512-sKm3hcMM1bl0B3PLG4ifidicOGfoJmOEacM5JtgBkYM48ncMHjkHfFY7HrJHZHUnXM4l05RQTpLFoOl/uIo2HQ==} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: true + turbo-windows-arm64@1.13.3: optional: true - /turbo@1.10.16: - resolution: {integrity: sha512-2CEaK4FIuSZiP83iFa9GqMTQhroW2QryckVqUydmg4tx78baftTOS0O+oDAhvo9r9Nit4xUEtC1RAHoqs6ZEtg==} - hasBin: true + turbo@1.13.3: optionalDependencies: - turbo-darwin-64: 1.10.16 - turbo-darwin-arm64: 1.10.16 - turbo-linux-64: 1.10.16 - turbo-linux-arm64: 1.10.16 - turbo-windows-64: 1.10.16 - turbo-windows-arm64: 1.10.16 - dev: true - - /tweetnacl@1.0.3: - resolution: {integrity: sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==} - dev: true + turbo-darwin-64: 1.13.3 + turbo-darwin-arm64: 1.13.3 + turbo-linux-64: 1.13.3 + turbo-linux-arm64: 1.13.3 + turbo-windows-64: 1.13.3 + turbo-windows-arm64: 1.13.3 - /type-check@0.4.0: - resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} - engines: {node: '>= 0.8.0'} + tweetnacl@1.0.3: {} + + type-check@0.4.0: dependencies: prelude-ls: 1.2.1 - /type-fest@0.13.1: - resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==} - engines: {node: '>=10'} - dev: true + type-fest@0.13.1: {} - /type-fest@0.20.2: - resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} - engines: {node: '>=10'} + type-fest@0.20.2: {} - /typed-array-buffer@1.0.0: - resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} - engines: {node: '>= 0.4'} + typed-array-buffer@1.0.2: dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 - is-typed-array: 1.1.12 - dev: true + call-bind: 1.0.7 + es-errors: 1.3.0 + is-typed-array: 1.1.13 - /typed-array-byte-length@1.0.0: - resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} - engines: {node: '>= 0.4'} + typed-array-byte-length@1.0.1: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 for-each: 0.3.3 - has-proto: 1.0.1 - is-typed-array: 1.1.12 - dev: true + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 - /typed-array-byte-offset@1.0.0: - resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} - engines: {node: '>= 0.4'} + typed-array-byte-offset@1.0.2: dependencies: - available-typed-arrays: 1.0.5 - call-bind: 1.0.5 + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 for-each: 0.3.3 - has-proto: 1.0.1 - is-typed-array: 1.1.12 - dev: true + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 - /typed-array-length@1.0.4: - resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} + typed-array-length@1.0.6: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 for-each: 0.3.3 - is-typed-array: 1.1.12 - dev: true + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 + possible-typed-array-names: 1.0.0 - /typedoc@0.25.4(typescript@4.7.4): - resolution: {integrity: sha512-Du9ImmpBCw54bX275yJrxPVnjdIyJO/84co0/L9mwe0R3G4FSR6rQ09AlXVRvZEGMUg09+z/usc8mgygQ1aidA==} - engines: {node: '>= 16'} - hasBin: true - peerDependencies: - typescript: 4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x || 5.3.x + typedoc@0.25.13(typescript@4.7.4): dependencies: lunr: 2.3.9 marked: 4.3.0 - minimatch: 9.0.3 - shiki: 0.14.5 + minimatch: 9.0.5 + shiki: 0.14.7 typescript: 4.7.4 - dev: true - /typescript@4.7.4: - resolution: {integrity: sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==} - engines: {node: '>=4.2.0'} - hasBin: true + typescript@4.7.4: {} - /u3@0.1.1: - resolution: {integrity: sha512-+J5D5ir763y+Am/QY6hXNRlwljIeRMZMGs0cT6qqZVVzzT3X3nFPXVyPOFRMOR4kupB0T8JnCdpWdp6Q/iXn3w==} - dev: true + u3@0.1.1: {} - /unbox-primitive@1.0.2: - resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + unbox-primitive@1.0.2: dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 has-bigints: 1.0.2 has-symbols: 1.0.3 which-boxed-primitive: 1.0.2 - dev: true - /universalify@2.0.1: - resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} - engines: {node: '>= 10.0.0'} - dev: true + universalify@2.0.1: {} - /update-browserslist-db@1.0.13(browserslist@4.22.1): - resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' + update-browserslist-db@1.1.0(browserslist@4.23.3): dependencies: - browserslist: 4.22.1 - escalade: 3.1.1 - picocolors: 1.0.0 - dev: false + browserslist: 4.23.3 + escalade: 3.1.2 + picocolors: 1.0.1 - /uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + uri-js@4.4.1: dependencies: punycode: 2.3.1 - /v8-compile-cache-lib@3.0.1: - resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} - dev: false + v8-compile-cache-lib@3.0.1: {} - /validate-npm-package-license@3.0.4: - resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + validate-npm-package-license@3.0.4: dependencies: spdx-correct: 3.2.0 spdx-expression-parse: 3.0.1 - dev: true - /vscode-oniguruma@1.7.0: - resolution: {integrity: sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==} - dev: true + vscode-oniguruma@1.7.0: {} - /vscode-textmate@8.0.0: - resolution: {integrity: sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==} - dev: true + vscode-textmate@8.0.0: {} - /webidl-conversions@3.0.1: - resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} - dev: true + webidl-conversions@3.0.1: {} - /well-known-symbols@2.0.0: - resolution: {integrity: sha512-ZMjC3ho+KXo0BfJb7JgtQ5IBuvnShdlACNkKkdsqBmYw3bPAaJfPeYUo6tLUaT5tG/Gkh7xkpBhKRQ9e7pyg9Q==} - engines: {node: '>=6'} - dev: true + well-known-symbols@2.0.0: {} - /whatwg-url@5.0.0: - resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + whatwg-url@5.0.0: dependencies: tr46: 0.0.3 webidl-conversions: 3.0.1 - dev: true - /which-boxed-primitive@1.0.2: - resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + which-boxed-primitive@1.0.2: dependencies: is-bigint: 1.0.4 is-boolean-object: 1.1.2 is-number-object: 1.0.7 is-string: 1.0.7 is-symbol: 1.0.4 - dev: true - /which-typed-array@1.1.13: - resolution: {integrity: sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==} - engines: {node: '>= 0.4'} + which-typed-array@1.1.15: dependencies: - available-typed-arrays: 1.0.5 - call-bind: 1.0.5 + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 for-each: 0.3.3 gopd: 1.0.1 - has-tostringtag: 1.0.0 - dev: true + has-tostringtag: 1.0.2 - /which@1.3.1: - resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} - hasBin: true + which@1.3.1: dependencies: isexe: 2.0.0 - dev: true - /which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true + which@2.0.2: dependencies: isexe: 2.0.0 - /wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} + word-wrap@1.2.5: {} + + wrap-ansi@7.0.0: dependencies: ansi-styles: 4.3.0 string-width: 4.2.3 strip-ansi: 6.0.1 - /wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + wrappy@1.0.2: {} - /write-file-atomic@4.0.2: - resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + write-file-atomic@4.0.2: dependencies: imurmurhash: 0.1.4 signal-exit: 3.0.7 - dev: true - /y18n@5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} + y18n@5.0.8: {} - /yallist@3.1.1: - resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - dev: false + yallist@3.1.1: {} - /yallist@4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + yallist@4.0.0: {} - /yargs-parser@21.1.1: - resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} - engines: {node: '>=12'} + yargs-parser@21.1.1: {} - /yargs@17.7.2: - resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} - engines: {node: '>=12'} + yargs@17.7.2: dependencies: cliui: 8.0.1 - escalade: 3.1.1 + escalade: 3.1.2 get-caller-file: 2.0.5 require-directory: 2.1.1 string-width: 4.2.3 y18n: 5.0.8 yargs-parser: 21.1.1 - /yn@3.1.1: - resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} - engines: {node: '>=6'} - dev: false + yn@3.1.1: {} - /yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} + yocto-queue@0.1.0: {} - /yocto-queue@1.0.0: - resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} - engines: {node: '>=12.20'} - dev: true + yocto-queue@1.1.1: {} diff --git a/tests/package.json b/tests/package.json index 672077486..2308112b6 100644 --- a/tests/package.json +++ b/tests/package.json @@ -66,7 +66,7 @@ "npm-run-all": "^4.1.5" }, "dependencies": { - "typescript": "^4.7.4", + "typescript": "4.7.4", "near-sdk-js": "workspace:*" } } From d87245f7572c94d0090cf61c52600e0d421dfdad Mon Sep 17 00:00:00 2001 From: Dimitar Daskalov Date: Mon, 9 Sep 2024 18:19:38 +0300 Subject: [PATCH 2/8] add the shared-scripts package, include the generate-report and calculate-file-size scripts --- benchmark/__tests__/results-store.js | 27 ++ .../__tests__/test-deploy-contract.ava.js | 92 +---- .../__tests__/test-expensive-calc.ava.js | 50 ++- .../test-highlevel-collection.ava.js | 15 +- .../__tests__/test-highlevel-minimal.ava.js | 15 +- benchmark/__tests__/test-lowlevel-api.ava.js | 17 +- .../__tests__/test-lowlevel-minimal.ava.js | 15 +- benchmark/__tests__/util.js | 338 ++++++++++++++++-- benchmark/package.json | 12 +- benchmark/src/generate-report.js | 33 ++ examples/package.json | 10 +- packages/shared-scripts/package.json | 12 + .../src/calculate-file-sizes.js | 135 +++++++ pnpm-lock.yaml | 30 ++ tests/package.json | 8 +- 15 files changed, 676 insertions(+), 133 deletions(-) create mode 100644 benchmark/__tests__/results-store.js create mode 100644 benchmark/src/generate-report.js create mode 100644 packages/shared-scripts/package.json create mode 100644 packages/shared-scripts/src/calculate-file-sizes.js diff --git a/benchmark/__tests__/results-store.js b/benchmark/__tests__/results-store.js new file mode 100644 index 000000000..3e7eaf875 --- /dev/null +++ b/benchmark/__tests__/results-store.js @@ -0,0 +1,27 @@ +import fs from "fs"; +import path from "path"; + +const resultsFilePath = path.resolve("temp-all-test-results.json"); + +function readExistingResults() { + if (fs.existsSync(resultsFilePath)) { + const fileContent = fs.readFileSync(resultsFilePath, "utf-8"); + return JSON.parse(fileContent); + } + return {}; +} + +export function saveResults(newResults) { + const existingResults = readExistingResults(); + const combinedResults = { ...existingResults, ...newResults }; + fs.writeFileSync(resultsFilePath, JSON.stringify(combinedResults, null, 2)); +} + +export function addTestResults(testName, result) { + if (process.env.GENERATE_REPORT === "true") { + const tempResults = {}; + tempResults[testName] = result; + + saveResults(tempResults); + } +} diff --git a/benchmark/__tests__/test-deploy-contract.ava.js b/benchmark/__tests__/test-deploy-contract.ava.js index cbbafffc2..ae9d13095 100644 --- a/benchmark/__tests__/test-deploy-contract.ava.js +++ b/benchmark/__tests__/test-deploy-contract.ava.js @@ -1,11 +1,7 @@ import { Worker } from "near-workspaces"; import test from "ava"; -import { - formatGas, - gasBreakdown, - logGasBreakdown, - logGasDetail, -} from "./util.js"; +import { generateGasObject, logTestResults } from "./util.js"; +import { addTestResults } from "./results-store.js"; test.before(async (t) => { // Init the worker and start a Sandbox server @@ -47,8 +43,9 @@ test("JS promise batch deploy contract and call", async (t) => { let r = await bob.callRaw(callerContract, "deploy_contract", "", { gas: "300 Tgas", }); - // console.log(JSON.stringify(r, null, 2)); + let deployed = callerContract.getSubAccount("a"); + t.deepEqual(JSON.parse(Buffer.from(r.result.status.SuccessValue, "base64")), { currentAccountId: deployed.accountId, signerAccountId: bob.accountId, @@ -56,40 +53,11 @@ test("JS promise batch deploy contract and call", async (t) => { input: "abc", }); - t.log( - "Gas used to convert transaction to receipt: ", - formatGas(r.result.transaction_outcome.outcome.gas_burnt) - ); - t.log( - "Gas used to execute the receipt (actual contract call): ", - formatGas(r.result.receipts_outcome[0].outcome.gas_burnt) - ); - let map = gasBreakdown(r.result.receipts_outcome[0].outcome); - logGasBreakdown(map, t); - t.log( - "Gas used to execute the cross contract call: ", - formatGas(r.result.receipts_outcome[1].outcome.gas_burnt) - ); - map = gasBreakdown(r.result.receipts_outcome[1].outcome); - logGasBreakdown(map, t); - t.log( - "Gas used to refund unused gas for cross contract call: ", - formatGas(r.result.receipts_outcome[2].outcome.gas_burnt) - ); - t.log( - "Gas used to refund unused gas: ", - formatGas(r.result.receipts_outcome[3].outcome.gas_burnt) - ); - t.log( - "Total gas used: ", - formatGas( - r.result.transaction_outcome.outcome.gas_burnt + - r.result.receipts_outcome[0].outcome.gas_burnt + - r.result.receipts_outcome[1].outcome.gas_burnt + - r.result.receipts_outcome[2].outcome.gas_burnt + - r.result.receipts_outcome[3].outcome.gas_burnt - ) - ); + logTestResults(r); + + const gasObject = generateGasObject(r); + + addTestResults("JS_promise_batch_deploy_contract_and_call", gasObject); }); test("RS promise batch deploy contract and call", async (t) => { @@ -98,8 +66,9 @@ test("RS promise batch deploy contract and call", async (t) => { let r = await bob.callRaw(callerContractRs, "deploy_contract", "", { gas: "300 Tgas", }); - // console.log(JSON.stringify(r, null, 2)); + let deployed = callerContractRs.getSubAccount("a"); + t.deepEqual(JSON.parse(Buffer.from(r.result.status.SuccessValue, "base64")), { currentAccountId: deployed.accountId, signerAccountId: bob.accountId, @@ -107,38 +76,9 @@ test("RS promise batch deploy contract and call", async (t) => { input: "abc", }); - t.log( - "Gas used to convert transaction to receipt: ", - formatGas(r.result.transaction_outcome.outcome.gas_burnt) - ); - t.log( - "Gas used to execute the receipt (actual contract call): ", - formatGas(r.result.receipts_outcome[0].outcome.gas_burnt) - ); - let map = gasBreakdown(r.result.receipts_outcome[0].outcome); - logGasBreakdown(map, t); - t.log( - "Gas used to execute the cross contract call: ", - formatGas(r.result.receipts_outcome[1].outcome.gas_burnt) - ); - map = gasBreakdown(r.result.receipts_outcome[1].outcome); - logGasBreakdown(map, t); - t.log( - "Gas used to refund unused gas for cross contract call: ", - formatGas(r.result.receipts_outcome[2].outcome.gas_burnt) - ); - t.log( - "Gas used to refund unused gas: ", - formatGas(r.result.receipts_outcome[3].outcome.gas_burnt) - ); - t.log( - "Total gas used: ", - formatGas( - r.result.transaction_outcome.outcome.gas_burnt + - r.result.receipts_outcome[0].outcome.gas_burnt + - r.result.receipts_outcome[1].outcome.gas_burnt + - r.result.receipts_outcome[2].outcome.gas_burnt + - r.result.receipts_outcome[3].outcome.gas_burnt - ) - ); + logTestResults(r); + + const gasObject = generateGasObject(r); + + addTestResults("RS_promise_batch_deploy_contract_and_call", gasObject); }); diff --git a/benchmark/__tests__/test-expensive-calc.ava.js b/benchmark/__tests__/test-expensive-calc.ava.js index 5743227f2..5d7b56530 100644 --- a/benchmark/__tests__/test-expensive-calc.ava.js +++ b/benchmark/__tests__/test-expensive-calc.ava.js @@ -1,12 +1,13 @@ import { Worker } from "near-workspaces"; import test from "ava"; -import { logGasDetail } from "./util.js"; +import { generateMinimalGasObject, logTestResults } from "./util.js"; +import { addTestResults } from "./results-store.js"; test.before(async (t) => { // Init the worker and start a Sandbox server const worker = await Worker.init(); - // Prepare sandbox for tests, create accounts, deploy contracts, etx. + // Prepare sandbox for tests, create accounts, deploy contracts, etc. const root = worker.rootAccount; // Deploy the test contract. @@ -35,14 +36,25 @@ test("JS expensive contract, iterate 100 times", async (t) => { let r = await bob.callRaw(expensiveContract, "expensive", { n: 100 }); t.is(r.result.status.SuccessValue, "LTUw"); - logGasDetail(r, t); + + logTestResults(r); + + const gasObject = generateMinimalGasObject(r); + + addTestResults("JS_expensive_contract_100_times", gasObject); }); test("RS expensive contract. iterate 100 times", async (t) => { const { bob, expensiveContractRs } = t.context.accounts; let r = await bob.callRaw(expensiveContractRs, "expensive", { n: 100 }); + t.is(r.result.status.SuccessValue, "LTUw"); - logGasDetail(r, t); + + logTestResults(r); + + const gasObject = generateMinimalGasObject(r); + + addTestResults("RS_expensive_contract_100_times", gasObject); }); test("JS expensive contract, iterate 10000 times", async (t) => { @@ -55,14 +67,25 @@ test("JS expensive contract, iterate 10000 times", async (t) => { ); t.is(r.result.status.SuccessValue, "LTUwMDA="); - logGasDetail(r, t); + + logTestResults(r); + + const gasObject = generateMinimalGasObject(r); + + addTestResults("JS_expensive_contract_10000_times", gasObject); }); test("RS expensive contract. iterate 10000 times", async (t) => { const { bob, expensiveContractRs } = t.context.accounts; let r = await bob.callRaw(expensiveContractRs, "expensive", { n: 10000 }); + t.is(r.result.status.SuccessValue, "LTUwMDA="); - logGasDetail(r, t); + + logTestResults(r); + + const gasObject = generateMinimalGasObject(r); + + addTestResults("RS_expensive_contract_10000_times", gasObject); }); test("JS expensive contract, iterate 20000 times", async (t) => { @@ -75,12 +98,23 @@ test("JS expensive contract, iterate 20000 times", async (t) => { ); t.is(r.result.status.SuccessValue, "LTEwMDAw"); - logGasDetail(r, t); + + logTestResults(r); + + const gasObject = generateMinimalGasObject(r); + + addTestResults("JS_expensive_contract_20000_times", gasObject); }); test("RS expensive contract. iterate 20000 times", async (t) => { const { bob, expensiveContractRs } = t.context.accounts; let r = await bob.callRaw(expensiveContractRs, "expensive", { n: 20000 }); + t.is(r.result.status.SuccessValue, "LTEwMDAw"); - logGasDetail(r, t); + + logTestResults(r); + + const gasObject = generateMinimalGasObject(r); + + addTestResults("RS_expensive_contract_20000_times", gasObject); }); diff --git a/benchmark/__tests__/test-highlevel-collection.ava.js b/benchmark/__tests__/test-highlevel-collection.ava.js index 70c74d3e4..519e7800b 100644 --- a/benchmark/__tests__/test-highlevel-collection.ava.js +++ b/benchmark/__tests__/test-highlevel-collection.ava.js @@ -1,6 +1,7 @@ import { Worker } from "near-workspaces"; import test from "ava"; -import { logGasDetail } from "./util.js"; +import { generateMinimalGasObject, logTestResults } from "./util.js"; +import { addTestResults } from "./results-store.js"; test.before(async (t) => { // Init the worker and start a Sandbox server @@ -50,7 +51,11 @@ test("JS highlevel collection contract", async (t) => { }); t.is(r.result.status.SuccessValue, ""); - logGasDetail(r, t); + logTestResults(r); + + const gasObject = generateMinimalGasObject(r); + + addTestResults("JS_highlevel_collection_contract", gasObject); }); test("RS highlevel collection contract", async (t) => { @@ -68,5 +73,9 @@ test("RS highlevel collection contract", async (t) => { value: "d".repeat(100), }); t.is(r.result.status.SuccessValue, ""); - logGasDetail(r, t); + logTestResults(r); + + const gasObject = generateMinimalGasObject(r); + + addTestResults("RS_highlevel_collection_contract", gasObject); }); diff --git a/benchmark/__tests__/test-highlevel-minimal.ava.js b/benchmark/__tests__/test-highlevel-minimal.ava.js index 474dd5d03..05138798f 100644 --- a/benchmark/__tests__/test-highlevel-minimal.ava.js +++ b/benchmark/__tests__/test-highlevel-minimal.ava.js @@ -1,6 +1,7 @@ import { Worker } from "near-workspaces"; import test from "ava"; -import { logGasDetail } from "./util.js"; +import { generateMinimalGasObject, logTestResults } from "./util.js"; +import { addTestResults } from "./results-store.js"; test.before(async (t) => { // Init the worker and start a Sandbox server @@ -39,7 +40,11 @@ test("JS highlevel minimal contract", async (t) => { let r = await bob.callRaw(highlevelContract, "empty", ""); t.is(r.result.status.SuccessValue, ""); - logGasDetail(r, t); + logTestResults(r); + + const gasObject = generateMinimalGasObject(r); + + addTestResults("JS_highlevel_minimal_contract", gasObject); }); test("RS highlevel minimal contract", async (t) => { @@ -47,5 +52,9 @@ test("RS highlevel minimal contract", async (t) => { let r = await bob.callRaw(highlevelContractRs, "empty", ""); t.is(r.result.status.SuccessValue, ""); - logGasDetail(r, t); + logTestResults(r); + + const gasObject = generateMinimalGasObject(r); + + addTestResults("RS_highlevel_minimal_contract", gasObject); }); diff --git a/benchmark/__tests__/test-lowlevel-api.ava.js b/benchmark/__tests__/test-lowlevel-api.ava.js index aeffa40e1..ede14cc66 100644 --- a/benchmark/__tests__/test-lowlevel-api.ava.js +++ b/benchmark/__tests__/test-lowlevel-api.ava.js @@ -1,6 +1,7 @@ import { Worker } from "near-workspaces"; import test from "ava"; -import { logGasDetail } from "./util.js"; +import { generateMinimalGasObject, logTestResults } from "./util.js"; +import { addTestResults } from "./results-store.js"; test.before(async (t) => { // Init the worker and start a Sandbox server @@ -35,7 +36,11 @@ test("JS lowlevel API contract", async (t) => { let r = await bob.callRaw(lowlevelContract, "lowlevel_storage_write", ""); t.is(r.result.status.SuccessValue, ""); - logGasDetail(r, t); + logTestResults(r); + + const gasObject = generateMinimalGasObject(r); + + addTestResults("JS_lowlevel_API_contract", gasObject); }); test("RS lowlevel API contract", async (t) => { @@ -43,7 +48,11 @@ test("RS lowlevel API contract", async (t) => { let r = await bob.callRaw(lowlevelContractRs, "lowlevel_storage_write", ""); t.is(r.result.status.SuccessValue, ""); - logGasDetail(r, t); + logTestResults(r); + + const gasObject = generateMinimalGasObject(r); + + addTestResults("RS_lowlevel_API_contract", gasObject); }); test("JS lowlevel API contract, call many", async (t) => { @@ -55,5 +64,5 @@ test("JS lowlevel API contract, call many", async (t) => { ); t.is(r.result.status.SuccessValue, ""); - logGasDetail(r, t); + logTestResults(r); }); diff --git a/benchmark/__tests__/test-lowlevel-minimal.ava.js b/benchmark/__tests__/test-lowlevel-minimal.ava.js index cc169745d..277c2f72d 100644 --- a/benchmark/__tests__/test-lowlevel-minimal.ava.js +++ b/benchmark/__tests__/test-lowlevel-minimal.ava.js @@ -1,6 +1,7 @@ import { Worker } from "near-workspaces"; import test from "ava"; -import { logGasDetail } from "./util.js"; +import { generateMinimalGasObject, logTestResults } from "./util.js"; +import { addTestResults } from "./results-store.js"; test.before(async (t) => { // Init the worker and start a Sandbox server @@ -35,7 +36,11 @@ test("JS lowlevel minimal contract", async (t) => { let r = await bob.callRaw(lowlevelContract, "empty", ""); t.is(r.result.status.SuccessValue, ""); - logGasDetail(r, t); + logTestResults(r); + + const gasObject = generateMinimalGasObject(r); + + addTestResults("JS_lowlevel_minimal_contract", gasObject); }); test("RS lowlevel minimal contract", async (t) => { @@ -43,5 +48,9 @@ test("RS lowlevel minimal contract", async (t) => { let r = await bob.callRaw(lowlevelContractRs, "empty", ""); t.is(r.result.status.SuccessValue, ""); - logGasDetail(r, t); + logTestResults(r); + + const gasObject = generateMinimalGasObject(r); + + addTestResults("RS_lowlevel_minimal_contract", gasObject); }); diff --git a/benchmark/__tests__/util.js b/benchmark/__tests__/util.js index c43f502c3..4545403e0 100644 --- a/benchmark/__tests__/util.js +++ b/benchmark/__tests__/util.js @@ -1,3 +1,6 @@ +import json2md from "json2md"; +import fs from "fs/promises"; + export function formatGas(gas) { if (gas < 10 ** 12) { let tGas = gas / 10 ** 12; @@ -17,33 +20,318 @@ export function gasBreakdown(outcome) { ); } -export function logGasBreakdown(map, t) { - map.forEach((v, k) => { - t.log(" ", k, ": ", formatGas(v)); - }); -} +export function logTestResults(testResults) { + // Determine which function to use based on the structure of the results + const isMinimal = testResults.result.receipts_outcome.length === 2; + const generateGasObjectFn = isMinimal + ? generateMinimalGasObject + : generateGasObject; -export function logGasDetail(r, t) { - t.log( - "Gas used to convert transaction to receipt: ", - formatGas(r.result.transaction_outcome.outcome.gas_burnt) - ); - t.log( - "Gas used to execute the receipt (actual contract call): ", - formatGas(r.result.receipts_outcome[0].outcome.gas_burnt) + const gasObject = generateGasObjectFn(testResults); + + // Convert the gas object to a table-friendly format + const breakdownEntries = Object.entries(gasObject.gasBreakdownForReceipt); + const breakdownRows = breakdownEntries.map(([key, value]) => ({ + Description: key, + GasUsed: value, + })); + + const data = [ + { + Description: "Gas Used to Convert Transaction to Receipt", + GasUsed: gasObject.gasUsedToConvertTransactionToReceipt, + }, + { + Description: "Gas Used to Execute Receipt", + GasUsed: gasObject.gasUsedToExecuteReceipt, + }, + ...breakdownRows, + { + Description: "Gas Used to Refund Unused Gas", + GasUsed: gasObject.gasUsedToRefundUnusedGas, + }, + { Description: "Total Gas Used", GasUsed: gasObject.totalGasUsed }, + ]; + + // Determine column widths + const maxDescriptionLength = Math.max( + ...data.map((row) => row.Description.length) ); - let map = gasBreakdown(r.result.receipts_outcome[0].outcome); - logGasBreakdown(map, t); - t.log( - "Gas used to refund unused gas: ", - formatGas(r.result.receipts_outcome[1].outcome.gas_burnt) + const descriptionWidth = maxDescriptionLength + 4; + const gasWidth = 15; // Increased width for better formatting + + // Create header and separator lines + const header = `| ${"Description".padEnd( + descriptionWidth + )} | ${"GasUsed".padEnd(gasWidth)} |`; + const separator = `|${"-".repeat(descriptionWidth + 2)}|${"-".repeat( + gasWidth + 2 + )}|`; + + // Create rows with separators + const rows = data + .map((row) => { + return `| ${row.Description.padEnd( + descriptionWidth + )} | ${row.GasUsed.padEnd(gasWidth)} |`; + }) + .join("\n" + separator + "\n"); + + // Print the results + console.log(""); + console.log(separator); + console.log(header); + console.log(separator); + console.log(rows); + console.log(separator); +} + +export function generateMinimalGasObject(testMinimalResult) { + const mapResult = gasBreakdown( + testMinimalResult.result.receipts_outcome[0].outcome ); - t.log( - "Total gas used: ", - formatGas( - r.result.transaction_outcome.outcome.gas_burnt + - r.result.receipts_outcome[0].outcome.gas_burnt + - r.result.receipts_outcome[1].outcome.gas_burnt - ) + + const gasBreakdownResults = formatGasBreakdownResults(mapResult); + + return { + gasUsedToConvertTransactionToReceipt: formatGas( + testMinimalResult.result.transaction_outcome.outcome.gas_burnt + ), + gasUsedToExecuteReceipt: formatGas( + testMinimalResult.result.receipts_outcome[0].outcome.gas_burnt + ), + gasBreakdownForReceipt: gasBreakdownResults, + gasUsedToRefundUnusedGas: formatGas( + testMinimalResult.result.receipts_outcome[1].outcome.gas_burnt + ), + totalGasUsed: formatGas( + testMinimalResult.result.transaction_outcome.outcome.gas_burnt + + testMinimalResult.result.receipts_outcome[0].outcome.gas_burnt + + testMinimalResult.result.receipts_outcome[1].outcome.gas_burnt + ), + }; +} + +export function generateGasObject(testResult) { + const mapResult = gasBreakdown(testResult.result.receipts_outcome[0].outcome); + + const gasBreakdownResults = formatGasBreakdownResults(mapResult); + + return { + gasUsedToConvertTransactionToReceipt: formatGas( + testResult.result.transaction_outcome.outcome.gas_burnt + ), + gasUsedToExecuteReceipt: formatGas( + testResult.result.receipts_outcome[0].outcome.gas_burnt + ), + gasBreakdownForReceipt: gasBreakdownResults, + gasUsedToExecuteCrossContractCall: formatGas( + testResult.result.receipts_outcome[1].outcome.gas_burnt + ), + gasUsedToRefundUnusedGasForCrossContractCall: formatGas( + testResult.result.receipts_outcome[2].outcome.gas_burnt + ), + gasUsedToRefundUnusedGas: formatGas( + testResult.result.receipts_outcome[3].outcome.gas_burnt + ), + totalGasUsed: formatGas( + testResult.result.transaction_outcome.outcome.gas_burnt + + testResult.result.receipts_outcome[0].outcome.gas_burnt + + testResult.result.receipts_outcome[1].outcome.gas_burnt + + testResult.result.receipts_outcome[2].outcome.gas_burnt + + testResult.result.receipts_outcome[3].outcome.gas_burnt + ), + }; +} + +function formatGasBreakdownResults(resultsMap) { + return Array.from(resultsMap).reduce((acc, [key, value]) => { + acc[key] = formatGas(value); + return acc; + }, {}); +} + +/** + * Converts JSON data into a Markdown table with a title and writes it to a .md file. + * + * @param {string} title - The title for the Markdown document (H1). + * @param {Array} data - The JSON data to be converted into a Markdown table. + * @param {string} fileName - The name of the Markdown file to be created. + * @returns {Promise} - A promise that resolves when the file is written. + */ +export async function jsonToMarkdown(title, data, fileName) { + const sortedJsonData = sortJsonData(data); + + if (typeof sortedJsonData !== "object" || sortedJsonData === null) { + throw new Error("Expected sortedJsonData to be an object."); + } + + const markdownSections = Object.entries(sortedJsonData).map( + ([name, details]) => { + const headers = ["Metric", "Rust", "JS"]; + + const metrics = new Set(); + const rows = []; + + if (details.gasUsedToConvertTransactionToReceipt) { + rows.push([ + "Convert transaction to receipt", + details.gasUsedToConvertTransactionToReceipt, + "", + ]); + } + if (details.gasUsedToExecuteReceipt) { + rows.push([ + "Execute the receipt (actual contract call)", + details.gasUsedToExecuteReceipt, + "", + ]); + } + + if (details.gasBreakdownForReceipt) { + const breakdown = details.gasBreakdownForReceipt; + Object.keys(breakdown).forEach((subMetric) => { + metrics.add(subMetric); + rows.push([subMetric, breakdown[subMetric], ""]); + }); + } else { + Object.keys(details).forEach((metric) => { + metrics.add(metric); + rows.push([metric, details[metric], ""]); + }); + } + + const jsEntry = Object.entries(sortedJsonData).find( + ([key, _]) => key.startsWith("JS") && key.includes(name.split("_")[1]) + ); + if (jsEntry) { + const [, jsDetails] = jsEntry; + + if (jsDetails.gasBreakdownForReceipt) { + const breakdown = jsDetails.gasBreakdownForReceipt; + Object.keys(breakdown).forEach((subMetric) => { + const row = rows.find((r) => r[0] === subMetric); + if (row) { + row[2] = breakdown[subMetric]; + } + }); + } else { + Object.keys(jsDetails).forEach((metric) => { + const row = rows.find((r) => r[0] === metric); + if (row) { + row[2] = jsDetails[metric]; + } + }); + } + + if (jsDetails.gasUsedToConvertTransactionToReceipt) { + const row = rows.find( + (r) => r[0] === "Convert transaction to receipt" + ); + if (row) row[2] = jsDetails.gasUsedToConvertTransactionToReceipt; + } + if (jsDetails.gasUsedToExecuteReceipt) { + const row = rows.find( + (r) => r[0] === "Execute the receipt (actual contract call)" + ); + if (row) row[2] = jsDetails.gasUsedToExecuteReceipt; + } + } + + rows.push([ + "Gas used to refund unused gas", + details.gasUsedToRefundUnusedGas, + jsEntry ? jsEntry[1].gasUsedToRefundUnusedGas : "", + ]); + rows.push([ + "Total gas used", + details.totalGasUsed, + jsEntry ? jsEntry[1].totalGasUsed : "", + ]); + + return { + h3: name, + table: { + headers, + rows, + }, + }; + } ); + + const markdown = json2md([ + { h1: title }, + ...filterMarkdownSections(markdownSections), + ]); + + await fs.writeFile(`${fileName}.md`, markdown); + + return markdown; +} + +/** + * Sorts JSON data according to a predefined order and converts it into an object. + * + * @param {Object} data - The JSON data to be sorted. + * @returns {Object} - The sorted JSON data as an object with ordered properties. + */ +function sortJsonData(data) { + const order = [ + "RS_lowlevel_API_contract", + "JS_lowlevel_API_contract", + "RS_lowlevel_minimal_contract", + "JS_lowlevel_minimal_contract", + "RS_highlevel_collection_contract", + "JS_highlevel_collection_contract", + "RS_highlevel_minimal_contract", + "JS_highlevel_minimal_contract", + "RS_promise_batch_deploy_contract_and_call", + "JS_promise_batch_deploy_contract_and_call", + "RS_expensive_contract_100_times", + "JS_expensive_contract_100_times", + "RS_expensive_contract_10000_times", + "JS_expensive_contract_10000_times", + "RS_expensive_contract_20000_times", + "JS_expensive_contract_20000_times", + ]; + + const sortedData = {}; + + order.forEach((key) => { + if (data[key]) { + sortedData[key] = data[key]; + } + }); + + return sortedData; +} + +/** + * Filters the markdownSections containing redundant data before including them in the markdown file. + * + * @param {Array} sections - The array of markdown sections data. + * @returns {Array} - The filtered markdown sections data. + */ +function filterMarkdownSections(sections) { + const filteredSections = []; + const rsBaseNames = new Set(); + + sections.forEach((section) => { + if (section.h3.startsWith("RS_")) { + const baseName = section.h3.replace(/^RS_/, ""); + rsBaseNames.add(baseName); + } + }); + + sections.forEach((section) => { + const baseName = section.h3.replace(/^RS_/, "").replace(/^JS_/, ""); + + if (section.h3.startsWith("RS_")) { + filteredSections.push({ ...section, h3: baseName }); + } else if (section.h3.startsWith("JS_") && !rsBaseNames.has(baseName)) { + filteredSections.push({ ...section, h3: baseName }); + } + }); + + return filteredSections; } diff --git a/benchmark/package.json b/benchmark/package.json index 0b9b7acac..69d6bd767 100644 --- a/benchmark/package.json +++ b/benchmark/package.json @@ -13,22 +13,26 @@ "build:expensive-calc": "near-sdk-js build src/expensive-calc.js build/expensive-calc.wasm", "build:deploy-contract": "near-sdk-js build src/deploy-contract.js build/deploy-contract.wasm", "test": "ava", + "test:with-report": "GENERATE_REPORT=true ava && node src/generate-report.js", "test:lowlevel-minimal": "ava __tests__/test-lowlevel-minimal.ava.js", "test:highlevel-minimal": "ava __tests__/test-highlevel-minimal.ava.js", "test:lowlevel-api": "ava __tests__/test-lowlevel-api.ava.js", "test:highlevel-collection": "ava __tests__/test-highlevel-collection.ava.js", "test:expensive-calc": "ava __tests__/test-expensive-calc.ava.js", - "test:deploy-contract": "ava __tests__/test-deploy-contract.ava.js" + "test:deploy-contract": "ava __tests__/test-deploy-contract.ava.js", + "calculate-file-sizes": "WORKING_DIR=$(pwd) pnpm --filter shared-scripts run calculate-file-sizes" }, "author": "Near Inc ", "license": "Apache-2.0", "devDependencies": { "ava": "^4.2.0", + "json2md": "2.0.1", "near-workspaces": "3.5.0", "npm-run-all": "^4.1.5" }, "dependencies": { - "typescript": "4.7.4", - "near-sdk-js": "workspace:*" + "near-sdk-js": "workspace:*", + "shared-scripts": "workspace:*", + "typescript": "4.7.4" } -} +} \ No newline at end of file diff --git a/benchmark/src/generate-report.js b/benchmark/src/generate-report.js new file mode 100644 index 000000000..6adc922e2 --- /dev/null +++ b/benchmark/src/generate-report.js @@ -0,0 +1,33 @@ +import path from "path"; +import fs from "fs/promises"; +import { fileURLToPath } from "url"; +import { jsonToMarkdown } from "../__tests__/util.js"; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); + +const jsonFilePath = path.resolve( + __dirname, + "..", + "temp-all-test-results.json" +); + +async function generateReport() { + try { + const jsonData = JSON.parse(await fs.readFile(jsonFilePath, "utf-8")); + + await jsonToMarkdown( + "Tests Gas Consumption Comparison", + jsonData, + "TESTS-GAS-CONSUMPTION-COMPARISON" + ); + + await fs.unlink(jsonFilePath); + console.log("Report generated and JSON file deleted successfully."); + } catch (error) { + console.error("Error generating report:", error); + process.exit(1); + } +} + +generateReport(); diff --git a/examples/package.json b/examples/package.json index 9f6f2016f..dc95c47ca 100644 --- a/examples/package.json +++ b/examples/package.json @@ -60,16 +60,18 @@ "test:status-message-serialize-err": "ava __tests__/test-status-message-serialize-err.ava.js", "test:status-message-deserialize-err": "ava __tests__/test-status-message-deserialize-err.ava.js", "test:status-deserialize-class": "ava __tests__/test-status-deserialize-class.ava.js", - "test:basic-updates": "ava __tests__/test-basic-updates.ava.js" + "test:basic-updates": "ava __tests__/test-basic-updates.ava.js", + "calculate-file-sizes": "WORKING_DIR=$(pwd) pnpm --filter shared-scripts run calculate-file-sizes" }, "author": "Near Inc ", "license": "Apache-2.0", "dependencies": { + "borsh": "^v1.0.0", "lodash-es": "^4.17.21", "near-contract-standards": "workspace:*", "near-sdk-js": "workspace:*", - "typescript": "4.7.4", - "borsh": "^v1.0.0" + "shared-scripts": "workspace:*", + "typescript": "4.7.4" }, "devDependencies": { "@types/lodash-es": "^4.17.6", @@ -77,4 +79,4 @@ "near-workspaces": "3.5.0", "npm-run-all": "^4.1.5" } -} +} \ No newline at end of file diff --git a/packages/shared-scripts/package.json b/packages/shared-scripts/package.json new file mode 100644 index 000000000..4c9e60240 --- /dev/null +++ b/packages/shared-scripts/package.json @@ -0,0 +1,12 @@ +{ + "name": "shared-scripts", + "version": "1.0.0", + "description": "Package for shared scripts between the repos", + "type": "module", + "scripts": { + "calculate-file-sizes": "node src/calculate-file-sizes.js" + }, + "devDependencies": { + "json2md": "2.0.1" + } +} \ No newline at end of file diff --git a/packages/shared-scripts/src/calculate-file-sizes.js b/packages/shared-scripts/src/calculate-file-sizes.js new file mode 100644 index 000000000..0bd8c756a --- /dev/null +++ b/packages/shared-scripts/src/calculate-file-sizes.js @@ -0,0 +1,135 @@ +import fs from "fs/promises"; +import path from "path"; +import json2md from "json2md"; + +// Get directory and flags from command line arguments +const args = process.argv.slice(2); +const relativeDir = args[0]; +const isBefore = args.includes("--before"); +const isAfter = args.includes("--after"); + +if (!relativeDir) { + console.log("Please provide a directory path as an argument."); + process.exit(1); +} + +if (!isBefore && !isAfter) { + console.log("Please specify either --before or --after flag."); + process.exit(1); +} + +// Get the working directory from the environment variable +const scriptDir = process.env.WORKING_DIR || process.cwd(); +const dir = path.resolve(scriptDir, relativeDir); +const jsonFilePath = path.join(scriptDir, "file-sizes.json"); + +const calculateFileSizes = async () => { + try { + // Check if the directory exists + await fs.access(dir); + + const files = await fs.readdir(dir); + let fileSizes = { beforeOptimization: {}, afterOptimization: {} }; + + // Check if the JSON file already exists and load data + if ( + await fs + .stat(jsonFilePath) + .then(() => true) + .catch(() => false) + ) { + const data = await fs.readFile(jsonFilePath, "utf-8"); + fileSizes = JSON.parse(data); + } + + // If the --after flag is used, ensure beforeOptimization data exists + if (isAfter && Object.keys(fileSizes.beforeOptimization).length === 0) { + console.log( + "No data found before optimization. Please run the script with --before first." + ); + process.exit(1); + } + + // Filter .wasm files and calculate sizes + const wasmFiles = files.filter((file) => path.extname(file) === ".wasm"); + + const fileSizePromises = wasmFiles.map(async (file) => { + const filePath = path.join(dir, file); + const stats = await fs.stat(filePath); + const fileSizeInKB = (stats.size / 1024).toFixed(2); + + // Add file size to the appropriate section + if (isBefore) { + fileSizes.beforeOptimization[file] = `${fileSizeInKB} KB`; + } else if (isAfter) { + fileSizes.afterOptimization[file] = `${fileSizeInKB} KB`; + } + }); + + // Wait for all file size calculations to complete + await Promise.all(fileSizePromises); + + // Write the result to the JSON file + await fs.writeFile(jsonFilePath, JSON.stringify(fileSizes, null, 2)); + console.log(`File sizes saved to ${jsonFilePath}`); + + const updatedData = await fs.readFile(jsonFilePath, "utf-8"); + const updatedFileSizes = JSON.parse(updatedData); + + if ( + Object.keys(updatedFileSizes.beforeOptimization).length && + Object.keys(updatedFileSizes.afterOptimization).length + ) { + // Generate Markdown file + generateMarkdown(scriptDir, fileSizes); + } + } catch (err) { + console.error(`Error: ${err.message}`); + } +}; + +// Function to generate the Markdown file +const generateMarkdown = async (outputDir, data) => { + const folderName = path.basename(outputDir).toUpperCase(); + + const mdContent = { + h1: `NEAR-SDK-JS ${folderName}`, + h3: "WASM File Size Comparison Before and After Optimization", + table: { + headers: ["File Name", "Before Opt (KB)", "After Opt (KB)", "% Diff"], + rows: Object.keys(data.beforeOptimization).map((file) => { + const beforeSize = data.beforeOptimization[file]; + const afterSize = data.afterOptimization[file] || "N/A"; + return [ + file, + beforeSize, + afterSize, + afterSize !== "N/A" + ? calculatePercentageDifference(beforeSize, afterSize) + : "N/A", + ]; + }), + }, + }; + + // Convert JSON to markdown + const markdown = json2md(mdContent); + + // Write markdown to a file + const filePath = path.join(outputDir, "WASM-FILE-SIZE-COMPARISON.md"); + await fs.writeFile(filePath, markdown); + + console.log(`Markdown file has been saved to ${filePath}`); + await fs.unlink(path.join(outputDir, "file-sizes.json")); +}; + +// Function to calculate percentage difference +const calculatePercentageDifference = (beforeSize, afterSize) => { + const beforeSizeNum = parseFloat(beforeSize); + const afterSizeNum = parseFloat(afterSize); + return ( + (((beforeSizeNum - afterSizeNum) / beforeSizeNum) * 100).toFixed(2) + "%" + ); +}; + +calculateFileSizes(); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f8d6c7448..5fb9c6bc8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -23,6 +23,9 @@ importers: near-sdk-js: specifier: workspace:* version: link:../packages/near-sdk-js + shared-scripts: + specifier: workspace:* + version: link:../packages/shared-scripts typescript: specifier: 4.7.4 version: 4.7.4 @@ -30,6 +33,9 @@ importers: ava: specifier: ^4.2.0 version: 4.3.3 + json2md: + specifier: 2.0.1 + version: 2.0.1 near-workspaces: specifier: 3.5.0 version: 3.5.0 @@ -51,6 +57,9 @@ importers: near-sdk-js: specifier: workspace:* version: link:../packages/near-sdk-js + shared-scripts: + specifier: workspace:* + version: link:../packages/shared-scripts typescript: specifier: 4.7.4 version: 4.7.4 @@ -184,11 +193,20 @@ importers: specifier: ^2.7.1 version: 2.8.8 + packages/shared-scripts: + devDependencies: + json2md: + specifier: 2.0.1 + version: 2.0.1 + tests: dependencies: near-sdk-js: specifier: workspace:* version: link:../packages/near-sdk-js + shared-scripts: + specifier: workspace:* + version: link:../packages/shared-scripts typescript: specifier: 4.7.4 version: 4.7.4 @@ -1382,6 +1400,9 @@ packages: resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==} engines: {node: '>=12'} + indento@1.1.13: + resolution: {integrity: sha512-YZWk3mreBEM7sBPddsiQnW9Z8SGg/gNpFfscJq00HCDS7pxcQWWWMSVKJU7YkTRyDu1Zv2s8zaK8gQWKmCXHlg==} + inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. @@ -1565,6 +1586,9 @@ packages: json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + json2md@2.0.1: + resolution: {integrity: sha512-VbwmZ83qmUfKBS2pUOHlzNKEZFPBeJSbzEok3trMYyboZUgdHNn1XZfc1uT8UZs1GHCrmRUBXCfqw4YmmQuOhw==} + json5@2.2.3: resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} engines: {node: '>=6'} @@ -3960,6 +3984,8 @@ snapshots: indent-string@5.0.0: {} + indento@1.1.13: {} + inflight@1.0.6: dependencies: once: 1.4.0 @@ -4113,6 +4139,10 @@ snapshots: json-stable-stringify-without-jsonify@1.0.1: {} + json2md@2.0.1: + dependencies: + indento: 1.1.13 + json5@2.2.3: {} jsonc-parser@3.3.1: {} diff --git a/tests/package.json b/tests/package.json index 2308112b6..75b83e758 100644 --- a/tests/package.json +++ b/tests/package.json @@ -56,7 +56,8 @@ "test:migrate": "ava __tests__/decorators/migrate.ava.js", "test:middlewares": "ava __tests__/test-middlewares.ava.js", "test:abi": "ava __tests__/abi/abi.ava.js", - "test:alt-bn128-api": "ava __tests__/test_alt_bn128_api.ava.js" + "test:alt-bn128-api": "ava __tests__/test_alt_bn128_api.ava.js", + "calculate-file-sizes": "WORKING_DIR=$(pwd) pnpm --filter shared-scripts run calculate-file-sizes" }, "author": "Near Inc ", "license": "Apache-2.0", @@ -67,6 +68,7 @@ }, "dependencies": { "typescript": "4.7.4", - "near-sdk-js": "workspace:*" + "near-sdk-js": "workspace:*", + "shared-scripts": "workspace:*" } -} +} \ No newline at end of file From 10b3c7adcf3409d85f6fe241386c11ede6533537 Mon Sep 17 00:00:00 2001 From: Dimitar Daskalov Date: Tue, 10 Sep 2024 11:12:27 +0300 Subject: [PATCH 3/8] add a README.md for the shared script and .gitignore the file-sizes.json file --- benchmark/.gitignore | 3 +- examples/.gitignore | 3 +- packages/near-contract-standards/.gitignore | 3 +- packages/shared-scripts/README.md | 71 +++++++++++++++++++++ tests/.gitignore | 3 +- 5 files changed, 79 insertions(+), 4 deletions(-) create mode 100644 packages/shared-scripts/README.md diff --git a/benchmark/.gitignore b/benchmark/.gitignore index c795b054e..2cc252265 100644 --- a/benchmark/.gitignore +++ b/benchmark/.gitignore @@ -1 +1,2 @@ -build \ No newline at end of file +build +file-sizes.json \ No newline at end of file diff --git a/examples/.gitignore b/examples/.gitignore index 48912d244..4c17fe918 100644 --- a/examples/.gitignore +++ b/examples/.gitignore @@ -1,2 +1,3 @@ build -node_modules \ No newline at end of file +node_modules +file-sizes.json \ No newline at end of file diff --git a/packages/near-contract-standards/.gitignore b/packages/near-contract-standards/.gitignore index 48912d244..4c17fe918 100644 --- a/packages/near-contract-standards/.gitignore +++ b/packages/near-contract-standards/.gitignore @@ -1,2 +1,3 @@ build -node_modules \ No newline at end of file +node_modules +file-sizes.json \ No newline at end of file diff --git a/packages/shared-scripts/README.md b/packages/shared-scripts/README.md new file mode 100644 index 000000000..fff1e5bbd --- /dev/null +++ b/packages/shared-scripts/README.md @@ -0,0 +1,71 @@ +# NEAR Shared Scripts + +### calculate-file-sizes.js + +It is used to track the file sizes contained in a given folder. + +The script contains a few flags, which needs to be specified in order to work correctly. + +There is a specific command added in every `package.json` for `benchmark`, `examples` and `tests`, which makes it easier to run the script. + +Example: + +In `examples` package, the command: + +`pnpm calculate-file-sizes` will activate the script. + +Message like this will pop up in the terminal: + +`Please provide a directory path as an argument.` + +Directory path will need to be added, for example `build` folder. + +`pnpm calculate-file-sizes build` + +Message like this will pop up in the terminal: + +`Please specify either --before or --after flag.` + +Flags: + +`--before` This flag will trigger the process for calculating file sizes, before any optimization is made. It can ensure that the results before any changes made regarding that are saved into a `file-sizes.json` file, so they can be used after the optimization implementation is made. Do not remove this file if you want accurate results. + +`--after` This flag should be used only after the optimization implementations are made in the project and it has been rebuild. This flag will trigger the process which will generate the results after the changes, compare it with the results from before optimization, generate an `WASM-FILE-SIZE-COMPARISON.md` file with a table including all the files and their data, and remove the `file-sizes.json` file. + +The table generated will look something like this: + +### WASM File Size Comparison Before and After Optimization + +| File Name | Before Opt (KB) | After Opt (KB) | % Diff | +| :------------------------------------ | --------------: | -------------: | ------: | +| basic-updates-base.wasm | 500.53 | 477.35 | -4.63% | +| basic-updates-update.wasm | 562.14 | 498.71 | -11.27% | +| clean-state.wasm | 496.45 | 473.48 | -4.62% | +| counter-lowlevel.wasm | 472.62 | 468.67 | -0.84% | +| counter-ts.wasm | 496.66 | 473.56 | -4.66% | +| counter.wasm | 496.56 | 473.51 | -4.64% | +| cross-contract-call-loop.wasm | 504.86 | 480.77 | -4.77% | +| cross-contract-call-ts.wasm | 498.54 | 475.04 | -4.71% | +| cross-contract-call.wasm | 498.51 | 475.01 | -4.71% | +| fungible-token-helper.wasm | 495.88 | 472.92 | -4.63% | +| fungible-token-lockable.wasm | 505.26 | 481.73 | -4.66% | +| fungible-token.wasm | 505.12 | 481.39 | -4.69% | +| my-ft.wasm | 520.98 | 495.55 | -4.89% | +| my-nft.wasm | 534.88 | 507.94 | -5.04% | +| nested-collections.wasm | 504.90 | 481.18 | -4.71% | +| nft-approval-receiver.wasm | 504.91 | 480.82 | -4.76% | +| nft-receiver.wasm | 505.10 | 481.05 | -4.76% | +| non-fungible-token-receiver.wasm | 496.51 | 473.51 | -4.63% | +| non-fungible-token.wasm | 503.30 | 479.39 | -4.76% | +| parking-lot.wasm | 500.11 | 476.87 | -4.65% | +| programmatic-update-after.wasm | 496.49 | 473.41 | -4.65% | +| programmatic-update-before.wasm | 496.47 | 473.38 | -4.65% | +| state-migration-new.wasm | 501.13 | 477.72 | -4.67% | +| state-migration-original.wasm | 499.98 | 476.68 | -4.65% | +| status-deserialize-class.wasm | 522.52 | 498.15 | -4.66% | +| status-message-borsh.wasm | 506.13 | 482.19 | -4.73% | +| status-message-collections.wasm | 505.38 | 481.67 | -4.70% | +| status-message-deserialize-err.wasm | 496.05 | 473.03 | -4.64% | +| status-message-migrate-add-field.wasm | 498.11 | 475.02 | -4.64% | +| status-message-serialize-err.wasm | 496.05 | 473.03 | -4.64% | +| status-message.wasm | 496.19 | 473.16 | -4.65% | diff --git a/tests/.gitignore b/tests/.gitignore index b7dab5e9c..c921997df 100644 --- a/tests/.gitignore +++ b/tests/.gitignore @@ -1,2 +1,3 @@ node_modules -build \ No newline at end of file +build +file-sizes.json \ No newline at end of file From 227427084a06ecbd065c3822fb0fb0666d70c781 Mon Sep 17 00:00:00 2001 From: Dimitar Daskalov Date: Wed, 11 Sep 2024 15:44:44 +0300 Subject: [PATCH 4/8] address Valeri's comments, move the shared-scripts to devDependencies, format the code and implement the comment suggestions --- benchmark/__tests__/results-store.js | 10 +- .../__tests__/test-expensive-calc.ava.js | 14 +- .../test-highlevel-collection.ava.js | 6 +- .../__tests__/test-highlevel-minimal.ava.js | 6 +- benchmark/__tests__/test-lowlevel-api.ava.js | 6 +- .../__tests__/test-lowlevel-minimal.ava.js | 6 +- benchmark/__tests__/util.js | 181 +++++++++--------- benchmark/package.json | 4 +- examples/package.json | 4 +- .../src/calculate-file-sizes.js | 48 ++--- pnpm-lock.yaml | 18 +- tests/package.json | 6 +- 12 files changed, 154 insertions(+), 155 deletions(-) diff --git a/benchmark/__tests__/results-store.js b/benchmark/__tests__/results-store.js index 3e7eaf875..d77cb192e 100644 --- a/benchmark/__tests__/results-store.js +++ b/benchmark/__tests__/results-store.js @@ -11,17 +11,13 @@ function readExistingResults() { return {}; } -export function saveResults(newResults) { - const existingResults = readExistingResults(); - const combinedResults = { ...existingResults, ...newResults }; - fs.writeFileSync(resultsFilePath, JSON.stringify(combinedResults, null, 2)); -} - export function addTestResults(testName, result) { if (process.env.GENERATE_REPORT === "true") { const tempResults = {}; tempResults[testName] = result; - saveResults(tempResults); + const existingResults = readExistingResults(); + const combinedResults = { ...existingResults, ...tempResults }; + fs.writeFileSync(resultsFilePath, JSON.stringify(combinedResults, null, 2)); } } diff --git a/benchmark/__tests__/test-expensive-calc.ava.js b/benchmark/__tests__/test-expensive-calc.ava.js index 5d7b56530..d3cfc96ec 100644 --- a/benchmark/__tests__/test-expensive-calc.ava.js +++ b/benchmark/__tests__/test-expensive-calc.ava.js @@ -1,6 +1,6 @@ import { Worker } from "near-workspaces"; import test from "ava"; -import { generateMinimalGasObject, logTestResults } from "./util.js"; +import { generateGasObject, logTestResults } from "./util.js"; import { addTestResults } from "./results-store.js"; test.before(async (t) => { @@ -39,7 +39,7 @@ test("JS expensive contract, iterate 100 times", async (t) => { logTestResults(r); - const gasObject = generateMinimalGasObject(r); + const gasObject = generateGasObject(r, true); addTestResults("JS_expensive_contract_100_times", gasObject); }); @@ -52,7 +52,7 @@ test("RS expensive contract. iterate 100 times", async (t) => { logTestResults(r); - const gasObject = generateMinimalGasObject(r); + const gasObject = generateGasObject(r, true); addTestResults("RS_expensive_contract_100_times", gasObject); }); @@ -70,7 +70,7 @@ test("JS expensive contract, iterate 10000 times", async (t) => { logTestResults(r); - const gasObject = generateMinimalGasObject(r); + const gasObject = generateGasObject(r, true); addTestResults("JS_expensive_contract_10000_times", gasObject); }); @@ -83,7 +83,7 @@ test("RS expensive contract. iterate 10000 times", async (t) => { logTestResults(r); - const gasObject = generateMinimalGasObject(r); + const gasObject = generateGasObject(r, true); addTestResults("RS_expensive_contract_10000_times", gasObject); }); @@ -101,7 +101,7 @@ test("JS expensive contract, iterate 20000 times", async (t) => { logTestResults(r); - const gasObject = generateMinimalGasObject(r); + const gasObject = generateGasObject(r, true); addTestResults("JS_expensive_contract_20000_times", gasObject); }); @@ -114,7 +114,7 @@ test("RS expensive contract. iterate 20000 times", async (t) => { logTestResults(r); - const gasObject = generateMinimalGasObject(r); + const gasObject = generateGasObject(r, true); addTestResults("RS_expensive_contract_20000_times", gasObject); }); diff --git a/benchmark/__tests__/test-highlevel-collection.ava.js b/benchmark/__tests__/test-highlevel-collection.ava.js index 519e7800b..3f1db9e11 100644 --- a/benchmark/__tests__/test-highlevel-collection.ava.js +++ b/benchmark/__tests__/test-highlevel-collection.ava.js @@ -1,6 +1,6 @@ import { Worker } from "near-workspaces"; import test from "ava"; -import { generateMinimalGasObject, logTestResults } from "./util.js"; +import { generateGasObject, logTestResults } from "./util.js"; import { addTestResults } from "./results-store.js"; test.before(async (t) => { @@ -53,7 +53,7 @@ test("JS highlevel collection contract", async (t) => { t.is(r.result.status.SuccessValue, ""); logTestResults(r); - const gasObject = generateMinimalGasObject(r); + const gasObject = generateGasObject(r, true); addTestResults("JS_highlevel_collection_contract", gasObject); }); @@ -75,7 +75,7 @@ test("RS highlevel collection contract", async (t) => { t.is(r.result.status.SuccessValue, ""); logTestResults(r); - const gasObject = generateMinimalGasObject(r); + const gasObject = generateGasObject(r, true); addTestResults("RS_highlevel_collection_contract", gasObject); }); diff --git a/benchmark/__tests__/test-highlevel-minimal.ava.js b/benchmark/__tests__/test-highlevel-minimal.ava.js index 05138798f..067121933 100644 --- a/benchmark/__tests__/test-highlevel-minimal.ava.js +++ b/benchmark/__tests__/test-highlevel-minimal.ava.js @@ -1,6 +1,6 @@ import { Worker } from "near-workspaces"; import test from "ava"; -import { generateMinimalGasObject, logTestResults } from "./util.js"; +import { generateGasObject, logTestResults } from "./util.js"; import { addTestResults } from "./results-store.js"; test.before(async (t) => { @@ -42,7 +42,7 @@ test("JS highlevel minimal contract", async (t) => { t.is(r.result.status.SuccessValue, ""); logTestResults(r); - const gasObject = generateMinimalGasObject(r); + const gasObject = generateGasObject(r, true); addTestResults("JS_highlevel_minimal_contract", gasObject); }); @@ -54,7 +54,7 @@ test("RS highlevel minimal contract", async (t) => { t.is(r.result.status.SuccessValue, ""); logTestResults(r); - const gasObject = generateMinimalGasObject(r); + const gasObject = generateGasObject(r, true); addTestResults("RS_highlevel_minimal_contract", gasObject); }); diff --git a/benchmark/__tests__/test-lowlevel-api.ava.js b/benchmark/__tests__/test-lowlevel-api.ava.js index ede14cc66..7f58fa46f 100644 --- a/benchmark/__tests__/test-lowlevel-api.ava.js +++ b/benchmark/__tests__/test-lowlevel-api.ava.js @@ -1,6 +1,6 @@ import { Worker } from "near-workspaces"; import test from "ava"; -import { generateMinimalGasObject, logTestResults } from "./util.js"; +import { generateGasObject, logTestResults } from "./util.js"; import { addTestResults } from "./results-store.js"; test.before(async (t) => { @@ -38,7 +38,7 @@ test("JS lowlevel API contract", async (t) => { t.is(r.result.status.SuccessValue, ""); logTestResults(r); - const gasObject = generateMinimalGasObject(r); + const gasObject = generateGasObject(r, true); addTestResults("JS_lowlevel_API_contract", gasObject); }); @@ -50,7 +50,7 @@ test("RS lowlevel API contract", async (t) => { t.is(r.result.status.SuccessValue, ""); logTestResults(r); - const gasObject = generateMinimalGasObject(r); + const gasObject = generateGasObject(r, true); addTestResults("RS_lowlevel_API_contract", gasObject); }); diff --git a/benchmark/__tests__/test-lowlevel-minimal.ava.js b/benchmark/__tests__/test-lowlevel-minimal.ava.js index 277c2f72d..d533a1879 100644 --- a/benchmark/__tests__/test-lowlevel-minimal.ava.js +++ b/benchmark/__tests__/test-lowlevel-minimal.ava.js @@ -1,6 +1,6 @@ import { Worker } from "near-workspaces"; import test from "ava"; -import { generateMinimalGasObject, logTestResults } from "./util.js"; +import { generateGasObject, logTestResults } from "./util.js"; import { addTestResults } from "./results-store.js"; test.before(async (t) => { @@ -38,7 +38,7 @@ test("JS lowlevel minimal contract", async (t) => { t.is(r.result.status.SuccessValue, ""); logTestResults(r); - const gasObject = generateMinimalGasObject(r); + const gasObject = generateGasObject(r, true); addTestResults("JS_lowlevel_minimal_contract", gasObject); }); @@ -50,7 +50,7 @@ test("RS lowlevel minimal contract", async (t) => { t.is(r.result.status.SuccessValue, ""); logTestResults(r); - const gasObject = generateMinimalGasObject(r); + const gasObject = generateGasObject(r, true); addTestResults("RS_lowlevel_minimal_contract", gasObject); }); diff --git a/benchmark/__tests__/util.js b/benchmark/__tests__/util.js index 4545403e0..5f3c18de0 100644 --- a/benchmark/__tests__/util.js +++ b/benchmark/__tests__/util.js @@ -7,6 +7,7 @@ export function formatGas(gas) { let roundTGas = Math.round(tGas * 100000) / 100000; return roundTGas + "T"; } + let tGas = gas / 10 ** 12; let roundTGas = Math.round(tGas * 100) / 100; return roundTGas + "T"; @@ -23,11 +24,9 @@ export function gasBreakdown(outcome) { export function logTestResults(testResults) { // Determine which function to use based on the structure of the results const isMinimal = testResults.result.receipts_outcome.length === 2; - const generateGasObjectFn = isMinimal - ? generateMinimalGasObject - : generateGasObject; - const gasObject = generateGasObjectFn(testResults); + // Generate the gas object with the appropriate flag + const gasObject = generateGasObject(testResults, isMinimal); // Convert the gas object to a table-friendly format const breakdownEntries = Object.entries(gasObject.gasBreakdownForReceipt); @@ -57,6 +56,7 @@ export function logTestResults(testResults) { const maxDescriptionLength = Math.max( ...data.map((row) => row.Description.length) ); + const descriptionWidth = maxDescriptionLength + 4; const gasWidth = 15; // Increased width for better formatting @@ -86,61 +86,65 @@ export function logTestResults(testResults) { console.log(separator); } -export function generateMinimalGasObject(testMinimalResult) { - const mapResult = gasBreakdown( - testMinimalResult.result.receipts_outcome[0].outcome +export function generateGasObject(testResult, isMinimal = false) { + // Initialize gas breakdown + const gasBreakdownForReceipt = gasBreakdown( + testResult.result.receipts_outcome[0].outcome ); - const gasBreakdownResults = formatGasBreakdownResults(mapResult); + const formattedGasBreakdown = formatGasBreakdownResults( + gasBreakdownForReceipt + ); - return { - gasUsedToConvertTransactionToReceipt: formatGas( - testMinimalResult.result.transaction_outcome.outcome.gas_burnt - ), - gasUsedToExecuteReceipt: formatGas( - testMinimalResult.result.receipts_outcome[0].outcome.gas_burnt - ), - gasBreakdownForReceipt: gasBreakdownResults, - gasUsedToRefundUnusedGas: formatGas( - testMinimalResult.result.receipts_outcome[1].outcome.gas_burnt - ), - totalGasUsed: formatGas( - testMinimalResult.result.transaction_outcome.outcome.gas_burnt + - testMinimalResult.result.receipts_outcome[0].outcome.gas_burnt + - testMinimalResult.result.receipts_outcome[1].outcome.gas_burnt - ), - }; -} + // Common values + const gasUsedToConvertTransactionToReceipt = formatGas( + testResult.result.transaction_outcome.outcome.gas_burnt + ); -export function generateGasObject(testResult) { - const mapResult = gasBreakdown(testResult.result.receipts_outcome[0].outcome); + const gasUsedToExecuteReceipt = formatGas( + testResult.result.receipts_outcome[0].outcome.gas_burnt + ); + + // Initialize optional values + let gasUsedToExecuteCrossContractCall = undefined; + let gasUsedToRefundUnusedGasForCrossContractCall = undefined; + + let gasUsedToRefundUnusedGas = formatGas( + testResult.result.receipts_outcome[1]?.outcome.gas_burnt ?? 0 + ); - const gasBreakdownResults = formatGasBreakdownResults(mapResult); + // If not minimal, set additional values + if (!isMinimal) { + gasUsedToExecuteCrossContractCall = formatGas( + testResult.result.receipts_outcome[1]?.outcome.gas_burnt ?? 0 + ); + gasUsedToRefundUnusedGasForCrossContractCall = formatGas( + testResult.result.receipts_outcome[2]?.outcome.gas_burnt ?? 0 + ); + gasUsedToRefundUnusedGas = formatGas( + testResult.result.receipts_outcome[3]?.outcome.gas_burnt ?? 0 + ); + } + + // Calculate total gas used + const totalGasUsed = formatGas( + testResult.result.transaction_outcome.outcome.gas_burnt + + testResult.result.receipts_outcome[0].outcome.gas_burnt + + (isMinimal + ? testResult.result.receipts_outcome[1]?.outcome.gas_burnt ?? 0 + : (testResult.result.receipts_outcome[1]?.outcome.gas_burnt ?? 0) + + (testResult.result.receipts_outcome[2]?.outcome.gas_burnt ?? 0) + + (testResult.result.receipts_outcome[3]?.outcome.gas_burnt ?? 0)) + ); return { - gasUsedToConvertTransactionToReceipt: formatGas( - testResult.result.transaction_outcome.outcome.gas_burnt - ), - gasUsedToExecuteReceipt: formatGas( - testResult.result.receipts_outcome[0].outcome.gas_burnt - ), - gasBreakdownForReceipt: gasBreakdownResults, - gasUsedToExecuteCrossContractCall: formatGas( - testResult.result.receipts_outcome[1].outcome.gas_burnt - ), - gasUsedToRefundUnusedGasForCrossContractCall: formatGas( - testResult.result.receipts_outcome[2].outcome.gas_burnt - ), - gasUsedToRefundUnusedGas: formatGas( - testResult.result.receipts_outcome[3].outcome.gas_burnt - ), - totalGasUsed: formatGas( - testResult.result.transaction_outcome.outcome.gas_burnt + - testResult.result.receipts_outcome[0].outcome.gas_burnt + - testResult.result.receipts_outcome[1].outcome.gas_burnt + - testResult.result.receipts_outcome[2].outcome.gas_burnt + - testResult.result.receipts_outcome[3].outcome.gas_burnt - ), + gasUsedToConvertTransactionToReceipt, + gasUsedToExecuteReceipt, + gasBreakdownForReceipt: formattedGasBreakdown, + gasUsedToExecuteCrossContractCall, + gasUsedToRefundUnusedGasForCrossContractCall, + gasUsedToRefundUnusedGas, + totalGasUsed, }; } @@ -173,37 +177,30 @@ export async function jsonToMarkdown(title, data, fileName) { const metrics = new Set(); const rows = []; - if (details.gasUsedToConvertTransactionToReceipt) { - rows.push([ - "Convert transaction to receipt", + const gasDetails = { + "Convert transaction to receipt": details.gasUsedToConvertTransactionToReceipt, - "", - ]); - } - if (details.gasUsedToExecuteReceipt) { - rows.push([ - "Execute the receipt (actual contract call)", + "Execute the receipt (actual contract call)": details.gasUsedToExecuteReceipt, - "", - ]); - } + }; - if (details.gasBreakdownForReceipt) { - const breakdown = details.gasBreakdownForReceipt; - Object.keys(breakdown).forEach((subMetric) => { - metrics.add(subMetric); - rows.push([subMetric, breakdown[subMetric], ""]); - }); - } else { - Object.keys(details).forEach((metric) => { - metrics.add(metric); - rows.push([metric, details[metric], ""]); - }); - } + Object.keys(gasDetails).forEach((description) => { + const value = gasDetails[description]; + if (value) { + rows.push([description, value, ""]); + } + }); + + const breakdown = details.gasBreakdownForReceipt ?? details; + Object.keys(breakdown).forEach((metric) => { + metrics.add(metric); + rows.push([metric, breakdown[metric], ""]); + }); const jsEntry = Object.entries(sortedJsonData).find( ([key, _]) => key.startsWith("JS") && key.includes(name.split("_")[1]) ); + if (jsEntry) { const [, jsDetails] = jsEntry; @@ -230,6 +227,7 @@ export async function jsonToMarkdown(title, data, fileName) { ); if (row) row[2] = jsDetails.gasUsedToConvertTransactionToReceipt; } + if (jsDetails.gasUsedToExecuteReceipt) { const row = rows.find( (r) => r[0] === "Execute the receipt (actual contract call)" @@ -238,16 +236,18 @@ export async function jsonToMarkdown(title, data, fileName) { } } - rows.push([ - "Gas used to refund unused gas", - details.gasUsedToRefundUnusedGas, - jsEntry ? jsEntry[1].gasUsedToRefundUnusedGas : "", - ]); - rows.push([ - "Total gas used", - details.totalGasUsed, - jsEntry ? jsEntry[1].totalGasUsed : "", - ]); + rows.push( + [ + "Gas used to refund unused gas", + details.gasUsedToRefundUnusedGas, + jsEntry ? jsEntry[1].gasUsedToRefundUnusedGas : "", + ], + [ + "Total gas used", + details.totalGasUsed, + jsEntry ? jsEntry[1].totalGasUsed : "", + ] + ); return { h3: name, @@ -295,13 +295,12 @@ function sortJsonData(data) { "JS_expensive_contract_20000_times", ]; - const sortedData = {}; - - order.forEach((key) => { + const sortedData = order.reduce((acc, key) => { if (data[key]) { - sortedData[key] = data[key]; + acc[key] = data[key]; } - }); + return acc; + }, {}); return sortedData; } diff --git a/benchmark/package.json b/benchmark/package.json index 69d6bd767..9ce1d7ed3 100644 --- a/benchmark/package.json +++ b/benchmark/package.json @@ -28,11 +28,11 @@ "ava": "^4.2.0", "json2md": "2.0.1", "near-workspaces": "3.5.0", - "npm-run-all": "^4.1.5" + "npm-run-all": "^4.1.5", + "shared-scripts": "workspace:*" }, "dependencies": { "near-sdk-js": "workspace:*", - "shared-scripts": "workspace:*", "typescript": "4.7.4" } } \ No newline at end of file diff --git a/examples/package.json b/examples/package.json index dc95c47ca..3e4516c96 100644 --- a/examples/package.json +++ b/examples/package.json @@ -70,13 +70,13 @@ "lodash-es": "^4.17.21", "near-contract-standards": "workspace:*", "near-sdk-js": "workspace:*", - "shared-scripts": "workspace:*", "typescript": "4.7.4" }, "devDependencies": { "@types/lodash-es": "^4.17.6", "ava": "^4.2.0", "near-workspaces": "3.5.0", - "npm-run-all": "^4.1.5" + "npm-run-all": "^4.1.5", + "shared-scripts": "workspace:*" } } \ No newline at end of file diff --git a/packages/shared-scripts/src/calculate-file-sizes.js b/packages/shared-scripts/src/calculate-file-sizes.js index 0bd8c756a..1f58ae9bd 100644 --- a/packages/shared-scripts/src/calculate-file-sizes.js +++ b/packages/shared-scripts/src/calculate-file-sizes.js @@ -5,6 +5,7 @@ import json2md from "json2md"; // Get directory and flags from command line arguments const args = process.argv.slice(2); const relativeDir = args[0]; + const isBefore = args.includes("--before"); const isAfter = args.includes("--after"); @@ -19,7 +20,8 @@ if (!isBefore && !isAfter) { } // Get the working directory from the environment variable -const scriptDir = process.env.WORKING_DIR || process.cwd(); +const scriptDir = process.env.WORKING_DIR ?? process.cwd(); + const dir = path.resolve(scriptDir, relativeDir); const jsonFilePath = path.join(scriptDir, "file-sizes.json"); @@ -29,17 +31,15 @@ const calculateFileSizes = async () => { await fs.access(dir); const files = await fs.readdir(dir); + let fileSizes = { beforeOptimization: {}, afterOptimization: {} }; // Check if the JSON file already exists and load data - if ( - await fs - .stat(jsonFilePath) - .then(() => true) - .catch(() => false) - ) { + try { const data = await fs.readFile(jsonFilePath, "utf-8"); fileSizes = JSON.parse(data); + } catch { + // If file doesn't exist, initialize fileSizes as default } // If the --after flag is used, ensure beforeOptimization data exists @@ -53,27 +53,30 @@ const calculateFileSizes = async () => { // Filter .wasm files and calculate sizes const wasmFiles = files.filter((file) => path.extname(file) === ".wasm"); - const fileSizePromises = wasmFiles.map(async (file) => { - const filePath = path.join(dir, file); - const stats = await fs.stat(filePath); - const fileSizeInKB = (stats.size / 1024).toFixed(2); - - // Add file size to the appropriate section - if (isBefore) { - fileSizes.beforeOptimization[file] = `${fileSizeInKB} KB`; - } else if (isAfter) { - fileSizes.afterOptimization[file] = `${fileSizeInKB} KB`; - } - }); - // Wait for all file size calculations to complete - await Promise.all(fileSizePromises); + await Promise.all( + wasmFiles.map(async (file) => { + const filePath = path.join(dir, file); + const stats = await fs.stat(filePath); + + const fileSizeInKB = (stats.size / 1024).toFixed(2); + + // Add file size to the appropriate section + if (isBefore) { + fileSizes.beforeOptimization[file] = `${fileSizeInKB} KB`; + } else if (isAfter) { + fileSizes.afterOptimization[file] = `${fileSizeInKB} KB`; + } + }) + ); // Write the result to the JSON file await fs.writeFile(jsonFilePath, JSON.stringify(fileSizes, null, 2)); + console.log(`File sizes saved to ${jsonFilePath}`); const updatedData = await fs.readFile(jsonFilePath, "utf-8"); + const updatedFileSizes = JSON.parse(updatedData); if ( @@ -98,7 +101,7 @@ const generateMarkdown = async (outputDir, data) => { table: { headers: ["File Name", "Before Opt (KB)", "After Opt (KB)", "% Diff"], rows: Object.keys(data.beforeOptimization).map((file) => { - const beforeSize = data.beforeOptimization[file]; + const beforeSize = data.beforeOptimization[file] || "N/A"; const afterSize = data.afterOptimization[file] || "N/A"; return [ file, @@ -127,6 +130,7 @@ const generateMarkdown = async (outputDir, data) => { const calculatePercentageDifference = (beforeSize, afterSize) => { const beforeSizeNum = parseFloat(beforeSize); const afterSizeNum = parseFloat(afterSize); + return ( (((beforeSizeNum - afterSizeNum) / beforeSizeNum) * 100).toFixed(2) + "%" ); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5fb9c6bc8..72dec6d9d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -23,9 +23,6 @@ importers: near-sdk-js: specifier: workspace:* version: link:../packages/near-sdk-js - shared-scripts: - specifier: workspace:* - version: link:../packages/shared-scripts typescript: specifier: 4.7.4 version: 4.7.4 @@ -42,6 +39,9 @@ importers: npm-run-all: specifier: ^4.1.5 version: 4.1.5 + shared-scripts: + specifier: workspace:* + version: link:../packages/shared-scripts examples: dependencies: @@ -57,9 +57,6 @@ importers: near-sdk-js: specifier: workspace:* version: link:../packages/near-sdk-js - shared-scripts: - specifier: workspace:* - version: link:../packages/shared-scripts typescript: specifier: 4.7.4 version: 4.7.4 @@ -76,6 +73,9 @@ importers: npm-run-all: specifier: ^4.1.5 version: 4.1.5 + shared-scripts: + specifier: workspace:* + version: link:../packages/shared-scripts packages/near-contract-standards: dependencies: @@ -204,9 +204,6 @@ importers: near-sdk-js: specifier: workspace:* version: link:../packages/near-sdk-js - shared-scripts: - specifier: workspace:* - version: link:../packages/shared-scripts typescript: specifier: 4.7.4 version: 4.7.4 @@ -220,6 +217,9 @@ importers: npm-run-all: specifier: ^4.1.5 version: 4.1.5 + shared-scripts: + specifier: workspace:* + version: link:../packages/shared-scripts packages: diff --git a/tests/package.json b/tests/package.json index 75b83e758..0be63174c 100644 --- a/tests/package.json +++ b/tests/package.json @@ -64,11 +64,11 @@ "devDependencies": { "ava": "^4.2.0", "near-workspaces": "3.5.0", - "npm-run-all": "^4.1.5" + "npm-run-all": "^4.1.5", + "shared-scripts": "workspace:*" }, "dependencies": { "typescript": "4.7.4", - "near-sdk-js": "workspace:*", - "shared-scripts": "workspace:*" + "near-sdk-js": "workspace:*" } } \ No newline at end of file From 098bacfd88aa62f856eadad52334b118e061777f Mon Sep 17 00:00:00 2001 From: Dimitar Daskalov Date: Wed, 11 Sep 2024 17:43:24 +0300 Subject: [PATCH 5/8] remove the redundant shared-scripts from package.json files --- benchmark/__tests__/util.js | 14 ++++++++++++-- benchmark/package.json | 3 +-- examples/package.json | 3 +-- pnpm-lock.yaml | 9 --------- tests/package.json | 3 +-- 5 files changed, 15 insertions(+), 17 deletions(-) diff --git a/benchmark/__tests__/util.js b/benchmark/__tests__/util.js index 5f3c18de0..beb57d7e5 100644 --- a/benchmark/__tests__/util.js +++ b/benchmark/__tests__/util.js @@ -21,6 +21,16 @@ export function gasBreakdown(outcome) { ); } +/** + * Logs the gas usage breakdown from test results in a table format. + * + * This function determines whether the test results are minimal or full based on + * the number of receipts outcomes. It then generates a gas usage object using the + * appropriate flag, converts this object into a table-friendly format, and logs + * the data in a well-formatted table. + * + * @param {Object} testResults - The test results object containing gas usage metrics. + */ export function logTestResults(testResults) { // Determine which function to use based on the structure of the results const isMinimal = testResults.result.receipts_outcome.length === 2; @@ -63,7 +73,7 @@ export function logTestResults(testResults) { // Create header and separator lines const header = `| ${"Description".padEnd( descriptionWidth - )} | ${"GasUsed".padEnd(gasWidth)} |`; + )} | ${"Gas Used".padEnd(gasWidth)} |`; const separator = `|${"-".repeat(descriptionWidth + 2)}|${"-".repeat( gasWidth + 2 )}|`; @@ -75,7 +85,7 @@ export function logTestResults(testResults) { descriptionWidth )} | ${row.GasUsed.padEnd(gasWidth)} |`; }) - .join("\n" + separator + "\n"); + .join(`\n${separator}\n`); // Print the results console.log(""); diff --git a/benchmark/package.json b/benchmark/package.json index 9ce1d7ed3..42fadd66f 100644 --- a/benchmark/package.json +++ b/benchmark/package.json @@ -28,8 +28,7 @@ "ava": "^4.2.0", "json2md": "2.0.1", "near-workspaces": "3.5.0", - "npm-run-all": "^4.1.5", - "shared-scripts": "workspace:*" + "npm-run-all": "^4.1.5" }, "dependencies": { "near-sdk-js": "workspace:*", diff --git a/examples/package.json b/examples/package.json index 3e4516c96..62d7c5c1d 100644 --- a/examples/package.json +++ b/examples/package.json @@ -76,7 +76,6 @@ "@types/lodash-es": "^4.17.6", "ava": "^4.2.0", "near-workspaces": "3.5.0", - "npm-run-all": "^4.1.5", - "shared-scripts": "workspace:*" + "npm-run-all": "^4.1.5" } } \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 72dec6d9d..b95bc7cc2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -39,9 +39,6 @@ importers: npm-run-all: specifier: ^4.1.5 version: 4.1.5 - shared-scripts: - specifier: workspace:* - version: link:../packages/shared-scripts examples: dependencies: @@ -73,9 +70,6 @@ importers: npm-run-all: specifier: ^4.1.5 version: 4.1.5 - shared-scripts: - specifier: workspace:* - version: link:../packages/shared-scripts packages/near-contract-standards: dependencies: @@ -217,9 +211,6 @@ importers: npm-run-all: specifier: ^4.1.5 version: 4.1.5 - shared-scripts: - specifier: workspace:* - version: link:../packages/shared-scripts packages: diff --git a/tests/package.json b/tests/package.json index 0be63174c..16a8491f3 100644 --- a/tests/package.json +++ b/tests/package.json @@ -64,8 +64,7 @@ "devDependencies": { "ava": "^4.2.0", "near-workspaces": "3.5.0", - "npm-run-all": "^4.1.5", - "shared-scripts": "workspace:*" + "npm-run-all": "^4.1.5" }, "dependencies": { "typescript": "4.7.4", From 32d355893451b25acbad778b804b248df7680698 Mon Sep 17 00:00:00 2001 From: Dimitar Daskalov Date: Wed, 11 Sep 2024 18:15:48 +0300 Subject: [PATCH 6/8] optimize the redundant code and add docstrings on the new functions added --- benchmark/__tests__/results-store.js | 27 +++++- benchmark/__tests__/util.js | 126 +++++++++++++++++---------- 2 files changed, 104 insertions(+), 49 deletions(-) diff --git a/benchmark/__tests__/results-store.js b/benchmark/__tests__/results-store.js index d77cb192e..a344d949a 100644 --- a/benchmark/__tests__/results-store.js +++ b/benchmark/__tests__/results-store.js @@ -3,6 +3,15 @@ import path from "path"; const resultsFilePath = path.resolve("temp-all-test-results.json"); +/** + * Reads existing test results from a JSON file if it exists. + * + * This function checks if the file specified by `resultsFilePath` exists. + * If the file is found, it reads the file's content and parses it as JSON. + * If the file does not exist, it returns an empty object. + * + * @returns {Object} The parsed JSON object from the file, or an empty object if the file does not exist. + */ function readExistingResults() { if (fs.existsSync(resultsFilePath)) { const fileContent = fs.readFileSync(resultsFilePath, "utf-8"); @@ -11,13 +20,25 @@ function readExistingResults() { return {}; } +/** Function to add test results to the report if the GENERATE_REPORT environment variable is set to "true" */ export function addTestResults(testName, result) { + // Check if we need to generate a report if (process.env.GENERATE_REPORT === "true") { - const tempResults = {}; - tempResults[testName] = result; + // Create a temporary object for the new test results + const tempResults = { + [testName]: result, + }; + // Read existing results from the file const existingResults = readExistingResults(); - const combinedResults = { ...existingResults, ...tempResults }; + + // Combine existing results with new test results + const combinedResults = { + ...existingResults, + ...tempResults, + }; + + // Write the combined results to the file fs.writeFileSync(resultsFilePath, JSON.stringify(combinedResults, null, 2)); } } diff --git a/benchmark/__tests__/util.js b/benchmark/__tests__/util.js index beb57d7e5..c19fb6b05 100644 --- a/benchmark/__tests__/util.js +++ b/benchmark/__tests__/util.js @@ -96,6 +96,20 @@ export function logTestResults(testResults) { console.log(separator); } +/** + * Generates a gas usage breakdown object from a test result. + * + * @param {Object} testResult - The result of a test execution, which includes transaction and receipt outcomes. + * @param {boolean} [isMinimal=false] - If true, includes only minimal gas usage data; otherwise, includes additional cross-contract call and refund data. + * @returns {Object} An object containing formatted gas usage values, including: + * - gasUsedToConvertTransactionToReceipt: Gas used to convert the transaction to a receipt. + * - gasUsedToExecuteReceipt: Gas used to execute the receipt. + * - gasBreakdownForReceipt: Formatted gas breakdown results for the receipt. + * - gasUsedToExecuteCrossContractCall: Gas used to execute any cross-contract calls (if not minimal). + * - gasUsedToRefundUnusedGasForCrossContractCall: Gas used to refund unused gas for cross-contract calls (if not minimal). + * - gasUsedToRefundUnusedGas: Gas used to refund any unused gas (if not minimal). + * - totalGasUsed: Total gas used including all relevant transactions and receipts. + */ export function generateGasObject(testResult, isMinimal = false) { // Initialize gas breakdown const gasBreakdownForReceipt = gasBreakdown( @@ -158,6 +172,12 @@ export function generateGasObject(testResult, isMinimal = false) { }; } +/** + * Formats the gas breakdown results. + * + * @param {Map} resultsMap - A map where keys represent gas usage categories and values represent the corresponding gas usage. + * @returns {Object} An object with formatted gas usage values for each category. + */ function formatGasBreakdownResults(resultsMap) { return Array.from(resultsMap).reduce((acc, [key, value]) => { acc[key] = formatGas(value); @@ -165,6 +185,38 @@ function formatGasBreakdownResults(resultsMap) { }, {}); } +/** + * Retrieves an existing row with the specified description from the rows array, + * or initializes a new row if none exists. + * + * @param {Array>} rows - The array of rows where each row is an array of values. + * @param {string} description - The description for the row. + * @param {string} defaultValue - The default value to initialize the row with. + * @returns {Array} - The row array for the given description. + */ +function getOrCreateRow(rows, description, defaultValue) { + let row = rows.find((r) => r[0] === description); + if (!row) { + row = [description, defaultValue, ""]; + rows.push(row); + } + return row; +} + +/** + * Updates the value at a specific index in a row with the given description. + * If the row does not exist, it will be created using getOrCreateRow. + * + * @param {Array>} rows - The array of rows where each row is an array of values. + * @param {string} description - The description for the row to update. + * @param {number} valueIndex - The index in the row where the value should be set. + * @param {string} value - The value to set in the row. + */ +function updateRow(rows, description, valueIndex, value) { + const row = getOrCreateRow(rows, description, ""); + row[valueIndex] = value; +} + /** * Converts JSON data into a Markdown table with a title and writes it to a .md file. * @@ -183,10 +235,9 @@ export async function jsonToMarkdown(title, data, fileName) { const markdownSections = Object.entries(sortedJsonData).map( ([name, details]) => { const headers = ["Metric", "Rust", "JS"]; - - const metrics = new Set(); const rows = []; + // Gas details for Rust const gasDetails = { "Convert transaction to receipt": details.gasUsedToConvertTransactionToReceipt, @@ -194,58 +245,47 @@ export async function jsonToMarkdown(title, data, fileName) { details.gasUsedToExecuteReceipt, }; - Object.keys(gasDetails).forEach((description) => { - const value = gasDetails[description]; + Object.entries(gasDetails).forEach(([description, value]) => { if (value) { - rows.push([description, value, ""]); + updateRow(rows, description, 1, value); } }); + // Breakdown metrics for Rust const breakdown = details.gasBreakdownForReceipt ?? details; - Object.keys(breakdown).forEach((metric) => { - metrics.add(metric); - rows.push([metric, breakdown[metric], ""]); + Object.entries(breakdown).forEach(([metric, value]) => { + updateRow(rows, metric, 1, value); }); + // Find JS entry and update rows with JS values const jsEntry = Object.entries(sortedJsonData).find( - ([key, _]) => key.startsWith("JS") && key.includes(name.split("_")[1]) + ([key]) => key.startsWith("JS") && key.includes(name.split("_")[1]) ); if (jsEntry) { const [, jsDetails] = jsEntry; - if (jsDetails.gasBreakdownForReceipt) { - const breakdown = jsDetails.gasBreakdownForReceipt; - Object.keys(breakdown).forEach((subMetric) => { - const row = rows.find((r) => r[0] === subMetric); - if (row) { - row[2] = breakdown[subMetric]; - } - }); - } else { - Object.keys(jsDetails).forEach((metric) => { - const row = rows.find((r) => r[0] === metric); - if (row) { - row[2] = jsDetails[metric]; - } - }); - } - - if (jsDetails.gasUsedToConvertTransactionToReceipt) { - const row = rows.find( - (r) => r[0] === "Convert transaction to receipt" - ); - if (row) row[2] = jsDetails.gasUsedToConvertTransactionToReceipt; - } + const jsBreakdown = jsDetails.gasBreakdownForReceipt ?? jsDetails; + Object.entries(jsBreakdown).forEach(([metric, value]) => { + updateRow(rows, metric, 2, value); + }); - if (jsDetails.gasUsedToExecuteReceipt) { - const row = rows.find( - (r) => r[0] === "Execute the receipt (actual contract call)" - ); - if (row) row[2] = jsDetails.gasUsedToExecuteReceipt; - } + // Update specific gas used values for JS + updateRow( + rows, + "Convert transaction to receipt", + 2, + jsDetails.gasUsedToConvertTransactionToReceipt + ); + updateRow( + rows, + "Execute the receipt (actual contract call)", + 2, + jsDetails.gasUsedToExecuteReceipt + ); } + // Add remaining metrics rows.push( [ "Gas used to refund unused gas", @@ -322,20 +362,14 @@ function sortJsonData(data) { * @returns {Array} - The filtered markdown sections data. */ function filterMarkdownSections(sections) { - const filteredSections = []; const rsBaseNames = new Set(); - - sections.forEach((section) => { - if (section.h3.startsWith("RS_")) { - const baseName = section.h3.replace(/^RS_/, ""); - rsBaseNames.add(baseName); - } - }); + const filteredSections = []; sections.forEach((section) => { const baseName = section.h3.replace(/^RS_/, "").replace(/^JS_/, ""); if (section.h3.startsWith("RS_")) { + rsBaseNames.add(baseName); filteredSections.push({ ...section, h3: baseName }); } else if (section.h3.startsWith("JS_") && !rsBaseNames.has(baseName)) { filteredSections.push({ ...section, h3: baseName }); From dab3d3388f49aebd1d4684bd141bd89704a3f203 Mon Sep 17 00:00:00 2001 From: Dimitar Daskalov Date: Tue, 17 Sep 2024 14:40:15 +0300 Subject: [PATCH 7/8] address Pavkata's comments, added error handling for file operations --- benchmark/.gitignore | 2 +- benchmark/__tests__/results-store.js | 26 +++++++++++++++---- benchmark/package.json | 2 +- examples/.gitignore | 2 +- examples/package.json | 2 +- packages/near-contract-standards/.gitignore | 2 +- packages/shared-scripts/package.json | 2 +- .../src/calculate-file-sizes.js | 21 ++++++++++++++- tests/.gitignore | 2 +- tests/package.json | 2 +- 10 files changed, 49 insertions(+), 14 deletions(-) diff --git a/benchmark/.gitignore b/benchmark/.gitignore index 2cc252265..61561495f 100644 --- a/benchmark/.gitignore +++ b/benchmark/.gitignore @@ -1,2 +1,2 @@ build -file-sizes.json \ No newline at end of file +file-sizes.json diff --git a/benchmark/__tests__/results-store.js b/benchmark/__tests__/results-store.js index a344d949a..3dec90859 100644 --- a/benchmark/__tests__/results-store.js +++ b/benchmark/__tests__/results-store.js @@ -14,13 +14,22 @@ const resultsFilePath = path.resolve("temp-all-test-results.json"); */ function readExistingResults() { if (fs.existsSync(resultsFilePath)) { - const fileContent = fs.readFileSync(resultsFilePath, "utf-8"); - return JSON.parse(fileContent); + try { + const fileContent = fs.readFileSync(resultsFilePath, "utf-8"); + return JSON.parse(fileContent); + } catch (error) { + console.error("Failed to read or parse results file:", error); + return {}; + } } return {}; } -/** Function to add test results to the report if the GENERATE_REPORT environment variable is set to "true" */ +/** + * Function to add test results to the report if the GENERATE_REPORT environment variable is set to "true" + * @param {string} testName - The name of the test. + * @param {Object} result - The test result object. + */ export function addTestResults(testName, result) { // Check if we need to generate a report if (process.env.GENERATE_REPORT === "true") { @@ -38,7 +47,14 @@ export function addTestResults(testName, result) { ...tempResults, }; - // Write the combined results to the file - fs.writeFileSync(resultsFilePath, JSON.stringify(combinedResults, null, 2)); + try { + // Write the combined results to the file + fs.writeFileSync( + resultsFilePath, + JSON.stringify(combinedResults, null, 2) + ); + } catch (error) { + console.error("Failed to write results to file:", error); + } } } diff --git a/benchmark/package.json b/benchmark/package.json index 42fadd66f..2804a8349 100644 --- a/benchmark/package.json +++ b/benchmark/package.json @@ -34,4 +34,4 @@ "near-sdk-js": "workspace:*", "typescript": "4.7.4" } -} \ No newline at end of file +} diff --git a/examples/.gitignore b/examples/.gitignore index 4c17fe918..d24d084d3 100644 --- a/examples/.gitignore +++ b/examples/.gitignore @@ -1,3 +1,3 @@ build node_modules -file-sizes.json \ No newline at end of file +file-sizes.json diff --git a/examples/package.json b/examples/package.json index 62d7c5c1d..33b17c784 100644 --- a/examples/package.json +++ b/examples/package.json @@ -78,4 +78,4 @@ "near-workspaces": "3.5.0", "npm-run-all": "^4.1.5" } -} \ No newline at end of file +} diff --git a/packages/near-contract-standards/.gitignore b/packages/near-contract-standards/.gitignore index 4c17fe918..d24d084d3 100644 --- a/packages/near-contract-standards/.gitignore +++ b/packages/near-contract-standards/.gitignore @@ -1,3 +1,3 @@ build node_modules -file-sizes.json \ No newline at end of file +file-sizes.json diff --git a/packages/shared-scripts/package.json b/packages/shared-scripts/package.json index 4c9e60240..beb715438 100644 --- a/packages/shared-scripts/package.json +++ b/packages/shared-scripts/package.json @@ -9,4 +9,4 @@ "devDependencies": { "json2md": "2.0.1" } -} \ No newline at end of file +} diff --git a/packages/shared-scripts/src/calculate-file-sizes.js b/packages/shared-scripts/src/calculate-file-sizes.js index 1f58ae9bd..4964461fd 100644 --- a/packages/shared-scripts/src/calculate-file-sizes.js +++ b/packages/shared-scripts/src/calculate-file-sizes.js @@ -8,6 +8,7 @@ const relativeDir = args[0]; const isBefore = args.includes("--before"); const isAfter = args.includes("--after"); +const isHelp = args.includes("--help"); if (!relativeDir) { console.log("Please provide a directory path as an argument."); @@ -19,6 +20,16 @@ if (!isBefore && !isAfter) { process.exit(1); } +if (isBefore && isAfter) { + console.log("Please specify either --before or --after, not both."); + process.exit(1); +} + +if (isHelp) { + console.log(`Usage: node script.js <${relativeDir}> [--before|--after]`); + process.exit(0); +} + // Get the working directory from the environment variable const scriptDir = process.env.WORKING_DIR ?? process.cwd(); @@ -84,7 +95,11 @@ const calculateFileSizes = async () => { Object.keys(updatedFileSizes.afterOptimization).length ) { // Generate Markdown file - generateMarkdown(scriptDir, fileSizes); + try { + await generateMarkdown(scriptDir, fileSizes); + } catch (err) { + console.error(`Error generating Markdown: ${err.message}`); + } } } catch (err) { console.error(`Error: ${err.message}`); @@ -131,6 +146,10 @@ const calculatePercentageDifference = (beforeSize, afterSize) => { const beforeSizeNum = parseFloat(beforeSize); const afterSizeNum = parseFloat(afterSize); + if (isNaN(beforeSizeNum) || isNaN(afterSizeNum)) { + return "N/A"; + } + return ( (((beforeSizeNum - afterSizeNum) / beforeSizeNum) * 100).toFixed(2) + "%" ); diff --git a/tests/.gitignore b/tests/.gitignore index c921997df..d6bbbea57 100644 --- a/tests/.gitignore +++ b/tests/.gitignore @@ -1,3 +1,3 @@ node_modules build -file-sizes.json \ No newline at end of file +file-sizes.json diff --git a/tests/package.json b/tests/package.json index 16a8491f3..3ada0f6e8 100644 --- a/tests/package.json +++ b/tests/package.json @@ -70,4 +70,4 @@ "typescript": "4.7.4", "near-sdk-js": "workspace:*" } -} \ No newline at end of file +} From de6034d8111592b16fa20f68c36f57e0f61c30e9 Mon Sep 17 00:00:00 2001 From: Dimitar Daskalov Date: Tue, 17 Sep 2024 17:32:07 +0300 Subject: [PATCH 8/8] address Pavkata's comments, remove redundand code, optimize the formatGas methods, fix the incorrect versioning --- benchmark/__tests__/util.js | 102 +++++++++++++++++------------------- examples/package.json | 2 +- pnpm-lock.yaml | 2 +- 3 files changed, 51 insertions(+), 55 deletions(-) diff --git a/benchmark/__tests__/util.js b/benchmark/__tests__/util.js index c19fb6b05..75fe27503 100644 --- a/benchmark/__tests__/util.js +++ b/benchmark/__tests__/util.js @@ -2,50 +2,35 @@ import json2md from "json2md"; import fs from "fs/promises"; export function formatGas(gas) { - if (gas < 10 ** 12) { - let tGas = gas / 10 ** 12; - let roundTGas = Math.round(tGas * 100000) / 100000; - return roundTGas + "T"; - } - let tGas = gas / 10 ** 12; - let roundTGas = Math.round(tGas * 100) / 100; + let roundTGas = + gas < 10 ** 12 + ? Math.round(tGas * 100000) / 100000 + : Math.round(tGas * 100) / 100; return roundTGas + "T"; } export function gasBreakdown(outcome) { - return new Map( - outcome.metadata.gas_profile.map((g) => { - return [g.cost, Number(g.gas_used)]; - }) - ); + return outcome.metadata.gas_profile.reduce((acc, g) => { + acc[g.cost] = formatGas(Number(g.gas_used)); + return acc; + }, {}); } /** - * Logs the gas usage breakdown from test results in a table format. + * Converts gas breakdown object to table rows. * - * This function determines whether the test results are minimal or full based on - * the number of receipts outcomes. It then generates a gas usage object using the - * appropriate flag, converts this object into a table-friendly format, and logs - * the data in a well-formatted table. - * - * @param {Object} testResults - The test results object containing gas usage metrics. + * @param {Object} gasObject - The object containing gas breakdown data. + * @returns {Array} An array of objects representing table rows. */ -export function logTestResults(testResults) { - // Determine which function to use based on the structure of the results - const isMinimal = testResults.result.receipts_outcome.length === 2; - - // Generate the gas object with the appropriate flag - const gasObject = generateGasObject(testResults, isMinimal); - - // Convert the gas object to a table-friendly format +function convertGasBreakdownToRows(gasObject) { const breakdownEntries = Object.entries(gasObject.gasBreakdownForReceipt); const breakdownRows = breakdownEntries.map(([key, value]) => ({ Description: key, GasUsed: value, })); - const data = [ + return [ { Description: "Gas Used to Convert Transaction to Receipt", GasUsed: gasObject.gasUsedToConvertTransactionToReceipt, @@ -61,8 +46,14 @@ export function logTestResults(testResults) { }, { Description: "Total Gas Used", GasUsed: gasObject.totalGasUsed }, ]; +} - // Determine column widths +/** + * Formats the data into a Markdown table and logs it. + * + * @param {Array} data - The data to be formatted into a table. + */ +function logMarkdownTable(data) { const maxDescriptionLength = Math.max( ...data.map((row) => row.Description.length) ); @@ -70,7 +61,6 @@ export function logTestResults(testResults) { const descriptionWidth = maxDescriptionLength + 4; const gasWidth = 15; // Increased width for better formatting - // Create header and separator lines const header = `| ${"Description".padEnd( descriptionWidth )} | ${"Gas Used".padEnd(gasWidth)} |`; @@ -78,7 +68,6 @@ export function logTestResults(testResults) { gasWidth + 2 )}|`; - // Create rows with separators const rows = data .map((row) => { return `| ${row.Description.padEnd( @@ -87,7 +76,6 @@ export function logTestResults(testResults) { }) .join(`\n${separator}\n`); - // Print the results console.log(""); console.log(separator); console.log(header); @@ -96,6 +84,23 @@ export function logTestResults(testResults) { console.log(separator); } +/** + * Logs the gas usage breakdown from test results in a table format. + * + * This function determines whether the test results are minimal or full based on + * the number of receipts outcomes. It then generates a gas usage object using the + * appropriate flag, converts this object into a table-friendly format, and logs + * the data in a well-formatted table. + * + * @param {Object} testResults - The test results object containing gas usage metrics. + */ +export function logTestResults(testResults) { + const isMinimal = testResults.result.receipts_outcome.length === 2; + const gasObject = generateGasObject(testResults, isMinimal); + const data = convertGasBreakdownToRows(gasObject); + logMarkdownTable(data); +} + /** * Generates a gas usage breakdown object from a test result. * @@ -116,10 +121,6 @@ export function generateGasObject(testResult, isMinimal = false) { testResult.result.receipts_outcome[0].outcome ); - const formattedGasBreakdown = formatGasBreakdownResults( - gasBreakdownForReceipt - ); - // Common values const gasUsedToConvertTransactionToReceipt = formatGas( testResult.result.transaction_outcome.outcome.gas_burnt @@ -164,7 +165,7 @@ export function generateGasObject(testResult, isMinimal = false) { return { gasUsedToConvertTransactionToReceipt, gasUsedToExecuteReceipt, - gasBreakdownForReceipt: formattedGasBreakdown, + gasBreakdownForReceipt, gasUsedToExecuteCrossContractCall, gasUsedToRefundUnusedGasForCrossContractCall, gasUsedToRefundUnusedGas, @@ -172,19 +173,6 @@ export function generateGasObject(testResult, isMinimal = false) { }; } -/** - * Formats the gas breakdown results. - * - * @param {Map} resultsMap - A map where keys represent gas usage categories and values represent the corresponding gas usage. - * @returns {Object} An object with formatted gas usage values for each category. - */ -function formatGasBreakdownResults(resultsMap) { - return Array.from(resultsMap).reduce((acc, [key, value]) => { - acc[key] = formatGas(value); - return acc; - }, {}); -} - /** * Retrieves an existing row with the specified description from the rows array, * or initializes a new row if none exists. @@ -299,11 +287,15 @@ export async function jsonToMarkdown(title, data, fileName) { ] ); + const filteredRows = rows.filter(([_, rustValue, jsValue]) => { + return rustValue && jsValue; + }); + return { h3: name, table: { headers, - rows, + rows: filteredRows, }, }; } @@ -314,11 +306,15 @@ export async function jsonToMarkdown(title, data, fileName) { ...filterMarkdownSections(markdownSections), ]); - await fs.writeFile(`${fileName}.md`, markdown); + try { + await fs.writeFile(`${fileName}.md`, markdown); + } catch (error) { + console.error(`Failed to write the file: ${error.message}`); + throw error; + } return markdown; } - /** * Sorts JSON data according to a predefined order and converts it into an object. * diff --git a/examples/package.json b/examples/package.json index 33b17c784..a618f13c8 100644 --- a/examples/package.json +++ b/examples/package.json @@ -66,7 +66,7 @@ "author": "Near Inc ", "license": "Apache-2.0", "dependencies": { - "borsh": "^v1.0.0", + "borsh": "^1.0.0", "lodash-es": "^4.17.21", "near-contract-standards": "workspace:*", "near-sdk-js": "workspace:*", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b95bc7cc2..e7a288121 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -43,7 +43,7 @@ importers: examples: dependencies: borsh: - specifier: ^v1.0.0 + specifier: ^1.0.0 version: 1.0.0 lodash-es: specifier: ^4.17.21