diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md new file mode 100644 index 000000000..4148f5128 --- /dev/null +++ b/.github/CONTRIBUTING.md @@ -0,0 +1,19 @@ +# Contributing + +Thank you for considering contributing to this product! We welcome any contributions, whether it's bug fixes, new features, or improvements to the existing codebase. + +### Your First Pull Request + +Working on your first Pull Request? You can learn how from this free video series: + +[How to Contribute to an Open Source Project on GitHub](https://egghead.io/courses/how-to-contribute-to-an-open-source-project-on-github) + +To help you get familiar with our contribution process, we have a list of [good first issues](../../issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) that contain enhancements or bugs that have a relatively limited scope. This is a great place to get started. + +If you decide to fix an issue, please be sure to check the comment thread in case somebody is already working on a fix. If nobody is working on it at the moment, please leave a comment stating that you intend to work on it so other people don’t accidentally duplicate your effort. + +If somebody claims an issue but doesn’t follow up for more than two weeks, it’s fine to take it over but you should still leave a comment. **Issues won't be assigned to anyone outside the core team**. + +### Contribution Prerequisites + +... 🚧 Work in progress 🚧 ... diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 000000000..7b12f85ff --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,33 @@ +--- +name: Bug report +about: Create a report to help us improve +title: '' +labels: 'Bug' + +--- + +**Describe the bug** +A clear and concise description of what the bug is. + + +**To Reproduce** +Steps to reproduce the behavior: +1. Go to '...' +2. Click on '....' +3. Scroll down to '....' +4. See error + +**Expected behavior** +A clear and concise description of what you expected to happen. + +**Screenshots** +If applicable, add screenshots or consol.log to help explain your problem. + +**Environment (please complete the following information):** + - OS (version): [e.g. macOS (13.4.1)] + - Docker version [e.g. 24.0.4] + - Clarinet version [e.g. 1.7.0] - Please use the latest version + + +**Additional context** +Add any other context about the problem here: diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 000000000..9e27ed982 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,4 @@ +contact_links: + - name: Ask the community + url: https://discord.gg/KrqnVg8D + about: Ask and discuss questions with other Stacks community developers. \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 000000000..1e8733f9a --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,23 @@ +--- +name: Feature request +about: Suggest an idea for this project +title: '' +labels: 'enhancement' + +--- + +**Please review the existing enhancement issues at the link below before creating a new one to ensure you do not create a duplicate request.** +If you see an [existing enhancement issues](https://github.com/blockstack/explorer/issues?q=is%3Aissue+is%3Aopen+label%3Aenhancement) please comment on the issue or upvote the issue with a :thumbsup: + + +**Is your feature request related to a problem? Please describe.** +A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] + +**Describe the solution you'd like** +A clear and concise description of what you want to happen. + +**Describe alternatives you've considered** +A clear and concise description of any alternative solutions or features you've considered. + +**Additional context** +Add any other context or screenshots about the feature request here. diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 000000000..26229dddc --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,18 @@ +### Description + + + +#### Breaking change? + + + +### Example + + + +--- + +### Checklist + +- [ ] Tests added in this PR (if applicable) + diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index b1e643b71..db35b54b3 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -6,6 +6,10 @@ on: - main - develop - rc/next + paths-ignore: + - '**/CHANGELOG.md' + - 'docs/**' + workflow_dispatch: jobs: diff --git a/CHANGELOG.md b/CHANGELOG.md index 2dcd2a06f..40296fb5a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,19 @@ +#### [1.7.1](https://github.com/hirosystems/clarinet/compare/v1.7.0...v1.7.1) (2023-07-19) + +##### Chores + +* Update default epoch to 2.4 (#1082) (fcabffac) +* Update subnet node to 0.8.1 (#1081) (db547ce8) +* Update subnet image and contract version (4dd02518) + +##### Bug Fixes + +* Fix clarity version of nested requirements (#1080) (ced0faab) +* Safety check on invalid line number in coverage (#1085) (29eb81b9) +* Add FAUCET_PRIVATE_KEY to stacks-blockchain-api env (#1071) (ab121210) +* Add `--allow-read` flag to allow filesystem read access in `clarinet test` (#1060) (4de49fde) +* Fix Panic at get_current_block_height for unexisting block (#1061) (edb77595) + # [1.7.0](https://github.com/hirosystems/clarinet/compare/v1.6.1...v1.7.0) (2023-06-14) ##### New Features @@ -6,11 +22,11 @@ ##### Chores -* update chainhook-sdk (5eed0bf6) -* update chainhook-types (57a7957d) -* handle clarity-vm 2.1 (#1037) (7fe94b80) -* bump clarity repl to 1.6.4 (#1036) (3bad4177) -* remove unused deps (#1032) (c30af614) +* Update chainhook-sdk (5eed0bf6) +* Update chainhook-types (57a7957d) +* Handle clarity-vm 2.1 (#1037) (7fe94b80) +* Bump clarity repl to 1.6.4 (#1036) (3bad4177) +* Remove unused deps (#1032) (c30af614) # [1.6.1](https://github.com/hirosystems/clarinet/compare/v1.6.0...v1.6.1) (2023-05-16) @@ -18,14 +34,14 @@ ##### Chores -* upgrade uuid crate (5b9b4015) -* upgrade lsp dependencies (be8d2ceb) +* Upgrade uuid crate (5b9b4015) +* Upgrade lsp dependencies (be8d2ceb) ##### Bug Fixes * **lsp:** -* functions first parameter highlighting (9a28a9a1) -* clarity keywords syntax highlighting (724379dc) +* Functions first parameter highlighting (9a28a9a1) +* Clarity keywords syntax highlighting (724379dc) # [1.6.0](https://github.com/hirosystems/clarinet/compare/v1.5.3...v1.6.0) (2023-05-09) diff --git a/Cargo.lock b/Cargo.lock index 931a1ef9c..7d9af5d01 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -876,7 +876,7 @@ checksum = "2da6da31387c7e4ef160ffab6d5e7f00c42626fe39aea70a7b0f1773f7dd6c1b" [[package]] name = "clarinet-cli" -version = "1.7.0" +version = "1.7.1" dependencies = [ "aes 0.7.5", "ansi_term", @@ -892,7 +892,7 @@ dependencies = [ "clarinet-files", "clarinet-utils 1.0.0", "clarity-lsp", - "clarity-repl 1.7.0", + "clarity-repl 1.7.1", "crossbeam-channel", "crossterm 0.22.1", "ctrlc", @@ -992,7 +992,7 @@ dependencies = [ "bitcoincore-rpc-json", "clarinet-files", "clarinet-utils 1.0.0", - "clarity-repl 1.7.0", + "clarity-repl 1.7.1", "libsecp256k1 0.7.1", "reqwest", "serde", @@ -1011,7 +1011,7 @@ dependencies = [ "bitcoin", "chainhook-types", "clarinet-utils 1.0.0", - "clarity-repl 1.7.0", + "clarity-repl 1.7.1", "js-sys", "libsecp256k1 0.7.1", "serde", @@ -1051,7 +1051,7 @@ version = "1.0.0" dependencies = [ "clap 3.2.23", "clarinet-files", - "clarity-repl 1.7.0", + "clarity-repl 1.7.1", "serde", "serde_derive", "serde_json", @@ -1063,7 +1063,7 @@ name = "clarity-jupyter-kernel" version = "1.0.0" dependencies = [ "chrono", - "clarity-repl 1.7.0", + "clarity-repl 1.7.1", "colored", "dirs", "failure", @@ -1085,7 +1085,7 @@ version = "1.0.0" dependencies = [ "clarinet-deployments", "clarinet-files", - "clarity-repl 1.7.0", + "clarity-repl 1.7.1", "console_error_panic_hook", "js-sys", "lazy_static", @@ -1136,7 +1136,7 @@ dependencies = [ [[package]] name = "clarity-repl" -version = "1.7.0" +version = "1.7.1" dependencies = [ "ansi_term", "atty", @@ -5307,9 +5307,9 @@ dependencies = [ [[package]] name = "serde-wasm-bindgen" -version = "0.4.5" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3b4c031cd0d9014307d82b8abf653c0290fbdaeb4c02d00c63cf52f728628bf" +checksum = "f3b143e2833c57ab9ad3ea280d21fd34e285a42837aeb0ee301f4f41890fa00e" dependencies = [ "js-sys", "serde", @@ -5835,7 +5835,7 @@ dependencies = [ [[package]] name = "stacks-devnet-js" -version = "1.7.0" +version = "1.7.1" dependencies = [ "clarinet-deployments", "clarinet-files", @@ -5851,7 +5851,7 @@ dependencies = [ [[package]] name = "stacks-network" -version = "1.7.0" +version = "1.7.1" dependencies = [ "ansi_term", "atty", @@ -5866,7 +5866,7 @@ dependencies = [ "clarinet-deployments", "clarinet-files", "clarinet-utils 1.0.0", - "clarity-repl 1.7.0", + "clarity-repl 1.7.1", "crossbeam-channel", "crossterm 0.22.1", "ctrlc", @@ -5902,7 +5902,7 @@ dependencies = [ name = "stacks-rpc-client" version = "1.0.7" dependencies = [ - "clarity-repl 1.7.0", + "clarity-repl 1.7.1", "hmac 0.12.1", "libsecp256k1 0.7.1", "pbkdf2", diff --git a/README.md b/README.md index a79226455..de5d8e3b0 100644 --- a/README.md +++ b/README.md @@ -139,7 +139,7 @@ For a detailed video description on how you can create a new project, please see Clarinet can handle adding a new contract and its configuration to your project with the following command: ```bash -$ clarinet contract new bbtc +clarinet contract new bbtc ``` Clarinet will add 2 files to your project: the contract file in the `contracts` directory, and the contract test file @@ -175,7 +175,7 @@ to `Clarinet.toml` in order for Clarinet to recognize the contracts. Clarinet provides syntax and semantics checkers for Clarity, which enable you to check if the Clarity code in your project is valid by using the following command: ```bash -$ clarinet check +clarinet check ``` This command uses the `Clarinet.toml` file to locate and analyze all of the contracts in the project. If the Clarity code is valid, the command will indicate success with the following message: @@ -189,7 +189,7 @@ The checker may also report warnings that indicate the code is valid; however, y You may also perform syntax-check on a single file by using the following command. ```bash -$ clarinet check +clarinet check ``` If there are no syntax errors, the output of the command will be a success message similar to the example below. @@ -354,7 +354,7 @@ This annotation tells the check-checker to consider the specified variables to b Clarinet provides a testing harness based on Deno that can enable you to create automated unit tests or pseudo-integration tests using Typescript. ```bash -$ clarinet test +clarinet test ``` For more information on how to create unit tests using Typescript, see the [Writing Unit Tests Using Typescript](https://www.youtube.com/watch?v=Z4YEHUxHWuE&list=PL5Ujm489LoJaAz9kUJm8lYUWdGJ2AnQTb&index=7) YouTube video. @@ -378,15 +378,15 @@ See the [billboard example](examples/billboard/tests/billboard_test.ts) for samp To help maximize a smart contract's test coverage, Clarinet can produce a `lcov` report, using the following option: ```bash -$ clarinet test --coverage +clarinet test --coverage ``` From there, you can use the `lcov` tooling suite to produce HTML reports: ```bash -$ brew install lcov -$ genhtml --branch-coverage -o coverage coverage.lcov -$ open coverage/index.html +brew install lcov +genhtml --branch-coverage -o coverage coverage.lcov +open coverage/index.html ``` ![lcov](docs/images/lcov.png) @@ -396,7 +396,7 @@ $ open coverage/index.html Clarinet can also be used to optimize costs. When executing a test suite, Clarinet will keep track of all the costs being computed when executing the `contract-call`, and display the most expensive ones in a table: ```bash -$ clarinet test --cost +clarinet test --cost ``` The `--cost` option can be used in conjunction with `--watch` and filters to maximize productivity, as illustrated here: @@ -409,7 +409,7 @@ The Clarinet console is an interactive Clarity REPL environment that runs in-mem automatically loaded into memory. ```bash -$ clarinet console +clarinet console ``` You can use the `::help` command in the console for a list of valid commands, which can control the state of the @@ -427,7 +427,7 @@ You can use Clarinet to deploy your contracts to your own local offline environm evaluation on a blockchain by using the following command: ```bash -$ clarinet integrate +clarinet integrate ``` **Note** Make sure you have a working installation of Docker running locally. @@ -513,7 +513,7 @@ trusted_caller = false callee_filter = false ``` -As a next step we can generate a deployment plan for this project. If you are running `$ clarinet integrate` for the first time, this file should be created by Clarinet. In addition, you can run `$ clarinet deployment generate --devnet` to create or overwrite the file. +As a next step we can generate a deployment plan for this project. If you are running `clarinet integrate` for the first time, this file should be created by Clarinet. In addition, you can run `clarinet deployment generate --devnet` to create or overwrite the file. ```yaml --- @@ -562,13 +562,13 @@ You can use Clarinet to publish your contracts to Devnet / Testnet / Mainnet env The first step to deploy a contract is to generate a deployment plan, with the following command: ```bash -$ clarinet deployment generate --mainnet +clarinet deployment generate --mainnet ``` After **cautiously** reviewing (and updating if needed) the generated plan, you can use the command to handle the deployments of your contract, according to your deployment plan: ```bash -$ clarinet deployment apply -p +clarinet deployment apply -p ``` ### Use Clarinet in your CI workflow as a GitHub Action @@ -615,7 +615,7 @@ Clarinet can easily be extended by community members: open source contributions Extensions are run with the following syntax: ``` -$ clarinet run --allow-write https://deno.land/x/clarinet@v0.29.0/ext/stacksjs-helper-generator.ts +clarinet run --allow-write https://deno.land/x/clarinet@v0.29.0/ext/stacksjs-helper-generator.ts ``` An extension can be deployed as a standalone plugin on Deno, or may also be a local file if it includes sensitive / private setup informations. @@ -740,11 +740,21 @@ This same file may also be used for customizing the subnet-node (miner, etc). When running the command: ```bash -$ clarinet integrate +clarinet integrate ``` Clarinet will spin-up a subnet node. More documentation on how to use and interact with this incoming L2 can be found on the [Hyperchain repository](https://github.com/hirosystems/stacks-subnets). +## Bugs and feature requests + +If you encounter a bug or have a feature request, we encourage you to follow the steps below: + + 1. **Search for existing issues:** Before submitting a new issue, please search [existing and closed issues](../../issues) to check if a similar problem or feature request has already been reported. + 1. **Open a new issue:** If it hasn't been addressed, please [open a new issue](../../issues/new/choose). Choose the appropriate issue template and provide as much detail as possible, including steps to reproduce the bug or a clear description of the requested feature. + 1. **Evaluation SLA:** Our team reads and evaluates all the issues and pull requests. We are avaliable Monday to Friday and we make a best effort to respond within 7 business days. + +Please **do not** use the issue tracker for personal support requests or to ask for the status of a transaction. You'll find help at the [#support Discord channel](https://discord.gg/SK3DxdsP). + ## Contributing to Clarinet Contributions are welcome and appreciated. The following sections provide information on how you can contribute to Clarinet. @@ -782,23 +792,23 @@ To start contributing: Here is an example of a bad message response: ```bash - $ git commit -m "bad message" - $ ⧗ input: bad message - $ ✖ subject may not be empty [subject-empty] - $ ✖ type may not be empty [type-empty] - $ - $ ✖ found 2 problems, 0 warnings - $ ⓘ Get help: https://github.com/conventional-changelog/commitlint/#what-is-commitlint - $ - $ husky - commit-msg hook exited with code 1 (error) + git commit -m "bad message" + ⧗ input: bad message + ✖ subject may not be empty [subject-empty] + ✖ type may not be empty [type-empty] + + ✖ found 2 problems, 0 warnings + ⓘ Get help: https://github.com/conventional-changelog/commitlint/#what-is-commitlint + + husky - commit-msg hook exited with code 1 (error) ``` Here is an example of a good message response: ```bash - $ git commit -m "fix: added missing dependency" - $ [my-branch 4c028af] fix: added missing dependency - $ 1 file changed, 50 insertions(+) + git commit -m "fix: added missing dependency" + [my-branch 4c028af] fix: added missing dependency + 1 file changed, 50 insertions(+) ``` 5. After making your changes, ensure the following: @@ -814,3 +824,16 @@ To start contributing: done ``` 6. Submit a pull request against the `develop` branch for review. + +### Code of Conduct +Please read our [Code of conduct](../../../.github/blob/main/CODE_OF_CONDUCT.md) since we expect project participants to adhere to it. + +## Community + +Join our community and stay connected with the latest updates and discussions: + +- [Join our Discord community chat](https://discord.gg/ZQR6cyZC) to engage with other users, ask questions, and participate in discussions. + +- [Visit hiro.so](https://www.hiro.so/) for updates and subcribing to the mailing list. + +- Follow [Hiro on Twitter.](https://twitter.com/hirosystems) diff --git a/components/clarinet-cli/Cargo.toml b/components/clarinet-cli/Cargo.toml index 1c3242147..13da08780 100644 --- a/components/clarinet-cli/Cargo.toml +++ b/components/clarinet-cli/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "clarinet-cli" -version = "1.7.0" +version = "1.7.1" authors = ["Ludo Galabru ", "Brice Dobry "] edition = "2021" description = "Clarinet is a simple, modern and opinionated runtime for testing, integrating and deploying Clarity smart contracts." diff --git a/components/clarinet-cli/examples/cbtc/README.md b/components/clarinet-cli/examples/cbtc/README.md index bbc2ee2f0..adf3c8a18 100644 --- a/components/clarinet-cli/examples/cbtc/README.md +++ b/components/clarinet-cli/examples/cbtc/README.md @@ -1,10 +1,10 @@ # cBTC example -In this example we are exploring a naive and centralized but yet functional approach for wrapping / unwrapping BTC to SIP10 tokens. +In this example we are exploring a naive and centralized but, yet functional approach for wrapping / unwrapping BTC to SIP10 tokens. By sending BTC to the `authority` address, a party would see an equivalent amount of cBTC being minted on the Stacks Blockchain. -When burning cBTC, a token owner will see some Bitcoin being transfered to his Bitcoin address. +When burning cBTC, a token owner will see some Bitcoin being transferred to his Bitcoin address. This protocol was meant to illustrate possible interactions between Bitcoin and Stacks using a mechanism called `chainhooks`. The design of this protocol is limited (proofs not being checked, central trustee, etc) and should not be used in production. @@ -13,28 +13,29 @@ This protocol was meant to illustrate possible interactions between Bitcoin and Start a local Devnet with the command: ```bash -$ clarinet integrate +clarinet integrate ``` In another console, change the directory to `./serverless/`. After running ```bash -$ cd serverless -$ yarn global add serverless # Install serverless globally -$ yarn add --dev serverless-plugin-typescript@latest -$ yarn # Install dependencies +cd serverless +yarn global add serverless # Install serverless globally +yarn add --dev serverless-plugin-typescript@latest +yarn # Install dependencies ``` and making sure that the command `serverless` is available in your `$PATH`, the lambda functions can be started locally with the following command: ```bash -$ serverless offline --verbose +serverless offline --verbose ``` Once the message `Protocol deployed` appears on the screen, transfers tokens back and forth between the Bitcoin Blockchain and the Stacks Blockchain can be performed thanks to the deployment plans: - `deployments/wrap-btc.devnet-plan.yaml`: a BTC transaction is being performed, using the following parameters: + ```yaml - btc-transfer: expected-sender: mjSrB3wS4xab3kYqFktwBzfTdPg367ZJ2d @@ -42,7 +43,9 @@ thanks to the deployment plans: sats-amount: 100000000 sats-per-byte: 10 ``` + A chainhook predicate, specified in `chainhooks/wrap-btc.json` is observing BTC transfers being performed to the address `mr1iPkD9N3RJZZxXRk7xF9d36gffa6exNC` thanks to the following configuration: + ```json "if_this": { "scope": "outputs", @@ -57,10 +60,12 @@ A chainhook predicate, specified in `chainhooks/wrap-btc.json` is observing BTC } } ``` + In this protocol, this transaction assumes usage of p2pkh addresses, and sends the change back to the sender, using the same address. When minting the `cBTC` tokens, the authority is converting the 2nd output of the transaction to a Stacks address, and sending the minted tokens to this address. - `deployments/unwrap-btc.devnet-plan.yaml`: a contract call is being issued, using the following settings: + ```yaml - contract-call: contract-id: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM.cbtc-token @@ -70,7 +75,9 @@ the 2nd output of the transaction to a Stacks address, and sending the minted to - u100000 cost: 5960 ``` + Another chainhook predicate, specified in `chainhooks/unwrap-btc.json` is observing cBTC burn events occuring on the Stacks blockchain, thanks to the following configuration: + ```json "if_this": { "scope": "ft_event", @@ -86,17 +93,17 @@ Another chainhook predicate, specified in `chainhooks/unwrap-btc.json` is observ } } ``` + When the authority process this chainhook occurences, it sends BTC from its reserve to `cBTC` burner, by assuming that a p2pkh is being used. The wrap / unwrap deployment plans can both be respectively performed with the commands: ```bash -$ clarinet deployment apply -p deployments/wrap-btc.devnet-plan.yaml +clarinet deployment apply -p deployments/wrap-btc.devnet-plan.yaml ``` -and +and ```bash -$ clarinet deployment apply -p deployments/unwrap-btc.devnet-plan.yaml +clarinet deployment apply -p deployments/unwrap-btc.devnet-plan.yaml ``` - diff --git a/components/clarinet-cli/examples/cbtc/serverless/yarn.lock b/components/clarinet-cli/examples/cbtc/serverless/yarn.lock index bd56fdedc..47c6e678f 100644 --- a/components/clarinet-cli/examples/cbtc/serverless/yarn.lock +++ b/components/clarinet-cli/examples/cbtc/serverless/yarn.lock @@ -3110,9 +3110,9 @@ seek-bzip@^1.0.5: commander "^2.8.1" semver@^6.0.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + version "6.3.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== serverless-offline@11.3.0: version "11.3.0" diff --git a/components/clarinet-cli/examples/swappool/.gitignore b/components/clarinet-cli/examples/swappool/.gitignore new file mode 100644 index 000000000..20352ca30 --- /dev/null +++ b/components/clarinet-cli/examples/swappool/.gitignore @@ -0,0 +1,4 @@ +**/settings/Mainnet.toml +**/settings/Testnet.toml +.cache/** +history.txt diff --git a/components/clarinet-cli/examples/swappool/Clarinet.toml b/components/clarinet-cli/examples/swappool/Clarinet.toml new file mode 100644 index 000000000..7c5647007 --- /dev/null +++ b/components/clarinet-cli/examples/swappool/Clarinet.toml @@ -0,0 +1,23 @@ +[project] +name = 'swappool' +description = '' +authors = [] +telemetry = false +cache_dir = './.cache' + +[[project.requirements]] +contract_id = 'SP3K8BC0PPEVCV7NZ6QSRWPQ2JE9E5B6N3PA0KBR9.amm-swap-pool-v1-1' + +[contracts.empty] +path = 'contracts/empty.clar' +clarity_version = 2 +epoch = 2.4 + +[repl.analysis] +passes = ['check_checker'] + +[repl.analysis.check_checker] +strict = false +trusted_sender = false +trusted_caller = false +callee_filter = false diff --git a/components/clarinet-cli/examples/swappool/README.md b/components/clarinet-cli/examples/swappool/README.md new file mode 100644 index 000000000..e70b95e90 --- /dev/null +++ b/components/clarinet-cli/examples/swappool/README.md @@ -0,0 +1,10 @@ +# Description + +The purpose of this example is too make sure that clarinet properly handles the clarity versions of contracts dependencies. + +This project only has a requirements: +`SP3K8BC0PPEVCV7NZ6QSRWPQ2JE9E5B6N3PA0KBR9.amm-swap-pool-v1-1`, which relies on `SP3K8...KBR9.alex-vault-v1-1` which itself relies on the [semi-fongible trait contract](https://explorer.hiro.so/txid/0x74db763fbaa66da3368e642ddac48dc5ac81f3c6e5a9b1aaf358c5745608fdde). + +The semi-fongible contract caused issues in the past because it's valid with Clarity 1 contract but **invalid** with Clarity 2. (The function `get-total-supply-fixed` is declared twice, which is now illegal). So when loaded with the wrong clarity version, this dependency would lead to issue. + +Reference issues: #997, #1079. diff --git a/components/clarinet-cli/examples/swappool/contracts/empty.clar b/components/clarinet-cli/examples/swappool/contracts/empty.clar new file mode 100644 index 000000000..2dfd6e2b3 --- /dev/null +++ b/components/clarinet-cli/examples/swappool/contracts/empty.clar @@ -0,0 +1,30 @@ + +;; title: empty +;; version: +;; summary: +;; description: + +;; traits +;; + +;; token definitions +;; + +;; constants +;; + +;; data vars +;; + +;; data maps +;; + +;; public functions +;; + +;; read only functions +;; + +;; private functions +;; + diff --git a/components/clarinet-cli/examples/swappool/settings/Devnet.toml b/components/clarinet-cli/examples/swappool/settings/Devnet.toml new file mode 100644 index 000000000..ab225e935 --- /dev/null +++ b/components/clarinet-cli/examples/swappool/settings/Devnet.toml @@ -0,0 +1,147 @@ +[network] +name = "devnet" +deployment_fee_rate = 10 + +[accounts.deployer] +mnemonic = "twice kind fence tip hidden tilt action fragile skin nothing glory cousin green tomorrow spring wrist shed math olympic multiply hip blue scout claw" +balance = 100_000_000_000_000 +# secret_key: 753b7cc01a1a2e86221266a154af739463fce51219d97e4f856cd7200c3bd2a601 +# stx_address: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM +# btc_address: mqVnk6NPRdhntvfm4hh9vvjiRkFDUuSYsH + +[accounts.wallet_1] +mnemonic = "sell invite acquire kitten bamboo drastic jelly vivid peace spawn twice guilt pave pen trash pretty park cube fragile unaware remain midnight betray rebuild" +balance = 100_000_000_000_000 +# secret_key: 7287ba251d44a4d3fd9276c88ce34c5c52a038955511cccaf77e61068649c17801 +# stx_address: ST1SJ3DTE5DN7X54YDH5D64R3BCB6A2AG2ZQ8YPD5 +# btc_address: mr1iPkD9N3RJZZxXRk7xF9d36gffa6exNC + +[accounts.wallet_2] +mnemonic = "hold excess usual excess ring elephant install account glad dry fragile donkey gaze humble truck breeze nation gasp vacuum limb head keep delay hospital" +balance = 100_000_000_000_000 +# secret_key: 530d9f61984c888536871c6573073bdfc0058896dc1adfe9a6a10dfacadc209101 +# stx_address: ST2CY5V39NHDPWSXMW9QDT3HC3GD6Q6XX4CFRK9AG +# btc_address: muYdXKmX9bByAueDe6KFfHd5Ff1gdN9ErG + +[accounts.wallet_3] +mnemonic = "cycle puppy glare enroll cost improve round trend wrist mushroom scorpion tower claim oppose clever elephant dinosaur eight problem before frozen dune wagon high" +balance = 100_000_000_000_000 +# secret_key: d655b2523bcd65e34889725c73064feb17ceb796831c0e111ba1a552b0f31b3901 +# stx_address: ST2JHG361ZXG51QTKY2NQCVBPPRRE2KZB1HR05NNC +# btc_address: mvZtbibDAAA3WLpY7zXXFqRa3T4XSknBX7 + +[accounts.wallet_4] +mnemonic = "board list obtain sugar hour worth raven scout denial thunder horse logic fury scorpion fold genuine phrase wealth news aim below celery when cabin" +balance = 100_000_000_000_000 +# secret_key: f9d7206a47f14d2870c163ebab4bf3e70d18f5d14ce1031f3902fbbc894fe4c701 +# stx_address: ST2NEB84ASENDXKYGJPQW86YXQCEFEX2ZQPG87ND +# btc_address: mg1C76bNTutiCDV3t9nWhZs3Dc8LzUufj8 + +[accounts.wallet_5] +mnemonic = "hurry aunt blame peanut heavy update captain human rice crime juice adult scale device promote vast project quiz unit note reform update climb purchase" +balance = 100_000_000_000_000 +# secret_key: 3eccc5dac8056590432db6a35d52b9896876a3d5cbdea53b72400bc9c2099fe801 +# stx_address: ST2REHHS5J3CERCRBEPMGH7921Q6PYKAADT7JP2VB +# btc_address: mweN5WVqadScHdA81aATSdcVr4B6dNokqx + +[accounts.wallet_6] +mnemonic = "area desk dutch sign gold cricket dawn toward giggle vibrant indoor bench warfare wagon number tiny universe sand talk dilemma pottery bone trap buddy" +balance = 100_000_000_000_000 +# secret_key: 7036b29cb5e235e5fd9b09ae3e8eec4404e44906814d5d01cbca968a60ed4bfb01 +# stx_address: ST3AM1A56AK2C1XAFJ4115ZSV26EB49BVQ10MGCS0 +# btc_address: mzxXgV6e4BZSsz8zVHm3TmqbECt7mbuErt + +[accounts.wallet_7] +mnemonic = "prevent gallery kind limb income control noise together echo rival record wedding sense uncover school version force bleak nuclear include danger skirt enact arrow" +balance = 100_000_000_000_000 +# secret_key: b463f0df6c05d2f156393eee73f8016c5372caa0e9e29a901bb7171d90dc4f1401 +# stx_address: ST3PF13W7Z0RRM42A8VZRVFQ75SV1K26RXEP8YGKJ +# btc_address: n37mwmru2oaVosgfuvzBwgV2ysCQRrLko7 + +[accounts.wallet_8] +mnemonic = "female adjust gallery certain visit token during great side clown fitness like hurt clip knife warm bench start reunion globe detail dream depend fortune" +balance = 100_000_000_000_000 +# secret_key: 6a1a754ba863d7bab14adbbc3f8ebb090af9e871ace621d3e5ab634e1422885e01 +# stx_address: ST3NBRSFKX28FQ2ZJ1MAKX58HKHSDGNV5N7R21XCP +# btc_address: n2v875jbJ4RjBnTjgbfikDfnwsDV5iUByw + +[accounts.faucet] +mnemonic = "shadow private easily thought say logic fault paddle word top book during ignore notable orange flight clock image wealth health outside kitten belt reform" +balance = 100_000_000_000_000 +# secret_key: de433bdfa14ec43aa1098d5be594c8ffb20a31485ff9de2923b2689471c401b801 +# stx_address: STNHKEPYEPJ8ET55ZZ0M5A34J0R3N5FM2CMMMAZ6 +# btc_address: mjSrB3wS4xab3kYqFktwBzfTdPg367ZJ2d + +[devnet] +disable_stacks_explorer = false +disable_stacks_api = false +# disable_subnet_api = false +# disable_bitcoin_explorer = true +# working_dir = "tmp/devnet" +# stacks_node_events_observers = ["host.docker.internal:8002"] +# miner_mnemonic = "fragile loan twenty basic net assault jazz absorb diet talk art shock innocent float punch travel gadget embrace caught blossom hockey surround initial reduce" +# miner_derivation_path = "m/44'/5757'/0'/0/0" +# faucet_mnemonic = "shadow private easily thought say logic fault paddle word top book during ignore notable orange flight clock image wealth health outside kitten belt reform" +# faucet_derivation_path = "m/44'/5757'/0'/0/0" +# orchestrator_port = 20445 +# bitcoin_node_p2p_port = 18444 +# bitcoin_node_rpc_port = 18443 +# bitcoin_node_username = "devnet" +# bitcoin_node_password = "devnet" +# bitcoin_controller_block_time = 30_000 +# stacks_node_rpc_port = 20443 +# stacks_node_p2p_port = 20444 +# stacks_api_port = 3999 +# stacks_api_events_port = 3700 +# bitcoin_explorer_port = 8001 +# stacks_explorer_port = 8000 +# postgres_port = 5432 +# postgres_username = "postgres" +# postgres_password = "postgres" +# postgres_database = "postgres" +# bitcoin_node_image_url = "quay.io/hirosystems/bitcoind:devnet-v3" +# stacks_node_image_url = "quay.io/hirosystems/stacks-node:devnet-2.4.0.0.0" +# stacks_api_image_url = "hirosystems/stacks-blockchain-api:latest" +# stacks_explorer_image_url = "hirosystems/explorer:latest" +# bitcoin_explorer_image_url = "quay.io/hirosystems/bitcoin-explorer:devnet" +# postgres_image_url = "postgres:14" +# enable_subnet_node = true +# subnet_node_image_url = "hirosystems/stacks-subnets:0.5.0" +# subnet_leader_mnemonic = "twice kind fence tip hidden tilt action fragile skin nothing glory cousin green tomorrow spring wrist shed math olympic multiply hip blue scout claw" +# subnet_leader_derivation_path = "m/44'/5757'/0'/0/0" +# subnet_contract_id = "ST13F481SBR0R7Z6NMMH8YV2FJJYXA5JPA0AD3HP9.subnet-v1-2" +# subnet_node_rpc_port = 30443 +# subnet_node_p2p_port = 30444 +# subnet_events_ingestion_port = 30445 +# subnet_node_events_observers = ["host.docker.internal:8002"] +# subnet_api_image_url = "hirosystems/stacks-blockchain-api:7.1.0-subnets.1" +# subnet_api_postgres_database = "subnet_api" + +# For testing in epoch 2.1 / using Clarity2 +# epoch_2_0 = 100 +# epoch_2_05 = 102 +# epoch_2_1 = 106 +# pox_2_activation = 109 + + +# Send some stacking orders +[[devnet.pox_stacking_orders]] +start_at_cycle = 3 +duration = 12 +wallet = "wallet_1" +slots = 2 +btc_address = "mr1iPkD9N3RJZZxXRk7xF9d36gffa6exNC" + +[[devnet.pox_stacking_orders]] +start_at_cycle = 3 +duration = 12 +wallet = "wallet_2" +slots = 1 +btc_address = "muYdXKmX9bByAueDe6KFfHd5Ff1gdN9ErG" + +[[devnet.pox_stacking_orders]] +start_at_cycle = 3 +duration = 12 +wallet = "wallet_3" +slots = 1 +btc_address = "mvZtbibDAAA3WLpY7zXXFqRa3T4XSknBX7" diff --git a/components/clarinet-cli/examples/swappool/tests/empty_test.ts b/components/clarinet-cli/examples/swappool/tests/empty_test.ts new file mode 100644 index 000000000..021489326 --- /dev/null +++ b/components/clarinet-cli/examples/swappool/tests/empty_test.ts @@ -0,0 +1,15 @@ +import { + Clarinet, + Chain, + Account, +} from "https://deno.land/x/clarinet@v1.7.0/index.ts"; +import { assertEquals } from "https://deno.land/std@0.170.0/testing/asserts.ts"; + +Clarinet.test({ + name: "Ensure that <...>", + fn(chain: Chain, accounts: Map) { + const block = chain.mineBlock([]); + + assertEquals(block.receipts.length, 0); + }, +}); diff --git a/components/clarinet-cli/src/generate/project.rs b/components/clarinet-cli/src/generate/project.rs index c342a7c8a..147624260 100644 --- a/components/clarinet-cli/src/generate/project.rs +++ b/components/clarinet-cli/src/generate/project.rs @@ -1,10 +1,10 @@ use clarinet_files::{ DEFAULT_BITCOIN_EXPLORER_IMAGE, DEFAULT_BITCOIN_NODE_IMAGE, DEFAULT_DERIVATION_PATH, - DEFAULT_EPOCH_2_0, DEFAULT_EPOCH_2_05, DEFAULT_EPOCH_2_1, DEFAULT_FAUCET_MNEMONIC, - DEFAULT_POSTGRES_IMAGE, DEFAULT_POX2_ACTIVATION, DEFAULT_STACKS_API_IMAGE, - DEFAULT_STACKS_EXPLORER_IMAGE, DEFAULT_STACKS_MINER_MNEMONIC, DEFAULT_STACKS_NODE_IMAGE, - DEFAULT_SUBNET_API_IMAGE, DEFAULT_SUBNET_CONTRACT_ID, DEFAULT_SUBNET_MNEMONIC, - DEFAULT_SUBNET_NODE_IMAGE, + DEFAULT_EPOCH_2_0, DEFAULT_EPOCH_2_05, DEFAULT_EPOCH_2_1, DEFAULT_EPOCH_2_2, DEFAULT_EPOCH_2_3, + DEFAULT_EPOCH_2_4, DEFAULT_FAUCET_MNEMONIC, DEFAULT_POSTGRES_IMAGE, DEFAULT_POX2_ACTIVATION, + DEFAULT_STACKS_API_IMAGE, DEFAULT_STACKS_EXPLORER_IMAGE, DEFAULT_STACKS_MINER_MNEMONIC, + DEFAULT_STACKS_NODE_IMAGE, DEFAULT_SUBNET_API_IMAGE, DEFAULT_SUBNET_CONTRACT_ID, + DEFAULT_SUBNET_MNEMONIC, DEFAULT_SUBNET_NODE_IMAGE, }; use super::changes::{Changes, DirectoryCreation, FileCreation}; @@ -403,6 +403,9 @@ disable_stacks_api = false # epoch_2_05 = {default_epoch_2_05} # epoch_2_1 = {default_epoch_2_1} # pox_2_activation = {default_pox2_activation} +# epoch_2_2 = {default_epoch_2_2} +# epoch_2_3 = {default_epoch_2_3} +# epoch_2_4 = {default_epoch_2_4} # Send some stacking orders @@ -444,6 +447,9 @@ btc_address = "mvZtbibDAAA3WLpY7zXXFqRa3T4XSknBX7" default_epoch_2_05 = DEFAULT_EPOCH_2_05, default_epoch_2_1 = DEFAULT_EPOCH_2_1, default_pox2_activation = DEFAULT_POX2_ACTIVATION, + default_epoch_2_2 = DEFAULT_EPOCH_2_2, + default_epoch_2_3 = DEFAULT_EPOCH_2_3, + default_epoch_2_4 = DEFAULT_EPOCH_2_4, ); let name = format!("Devnet.toml"); let path = format!( diff --git a/components/clarinet-deno/ext/stacksjs-helper-generator.ts b/components/clarinet-deno/ext/stacksjs-helper-generator.ts index d52943e4d..5c0bba2ad 100644 --- a/components/clarinet-deno/ext/stacksjs-helper-generator.ts +++ b/components/clarinet-deno/ext/stacksjs-helper-generator.ts @@ -5,7 +5,7 @@ // can use in their frontend code. // // When running: -// $ clarinet run --allow-write scripts/stacksjs-helper-generator.ts +// clarinet run --allow-write scripts/stacksjs-helper-generator.ts // // This script will write a file at the path artifacts/contracts.ts: // diff --git a/components/clarinet-deployments/src/lib.rs b/components/clarinet-deployments/src/lib.rs index d71c6d67a..863926eff 100644 --- a/components/clarinet-deployments/src/lib.rs +++ b/components/clarinet-deployments/src/lib.rs @@ -1,7 +1,6 @@ use clarity_repl::clarity::stacks_common::types::StacksEpochId; -use clarity_repl::clarity::ClarityVersion; -use clarity_repl::repl::DEFAULT_EPOCH; use clarity_repl::repl::{ClarityCodeSource, ClarityContract, ContractDeployer}; +use clarity_repl::repl::{DEFAULT_CLARITY_VERSION, DEFAULT_EPOCH}; extern crate serde; @@ -322,11 +321,7 @@ pub async fn generate_default_deployment( )) } }; - queue.push_front(( - contract_id, - StacksEpochId::Epoch21, - ClarityVersion::Clarity2, - )); + queue.push_front((contract_id, Some(DEFAULT_CLARITY_VERSION))); } } @@ -350,14 +345,10 @@ pub async fn generate_default_deployment( )) } }; - // Download the code - let (_source, epoch, clarity_version, _contract_location) = - requirements::retrieve_contract(&contract_id, &cache_location, &file_accessor) - .await?; - queue.push_front((contract_id, epoch, clarity_version)); + queue.push_front((contract_id, None)); } - while let Some((contract_id, epoch, clarity_version)) = queue.pop_front() { + while let Some((contract_id, forced_clarity_version)) = queue.pop_front() { if requirements_deps.contains_key(&contract_id) { continue; } @@ -432,6 +423,18 @@ pub async fn generate_default_deployment( // Detect the eventual dependencies for this AST let mut contract_data = BTreeMap::new(); let (_, ast) = requirement_data; + let clarity_version = match forced_clarity_version { + Some(clarity_version) => clarity_version, + None => { + let (_, _, clarity_version, _) = requirements::retrieve_contract( + &contract_id, + &cache_location, + &file_accessor, + ) + .await?; + clarity_version + } + }; contract_data.insert(contract_id.clone(), (clarity_version, ast)); let dependencies = ASTDependencyDetector::detect_dependencies(&contract_data, &requirements_data); @@ -446,11 +449,7 @@ pub async fn generate_default_deployment( // result in the `inferable_dependencies` map. We will just extract and keep the associated data (source, ast, deps). for (contract_id, dependencies) in inferable_dependencies.into_iter() { for dependency in dependencies.iter() { - queue.push_back(( - dependency.contract_id.clone(), - epoch.clone(), - clarity_version.clone(), - )); + queue.push_back((dependency.contract_id.clone(), None)); } requirements_deps.insert(contract_id.clone(), dependencies); requirements_data.insert(contract_id.clone(), (clarity_version, ast)); @@ -463,18 +462,14 @@ pub async fn generate_default_deployment( // and we will keep the source in memory to avoid useless disk access. for (_, dependencies) in inferable_dependencies.iter() { for dependency in dependencies.iter() { - queue.push_back(( - dependency.contract_id.clone(), - epoch.clone(), - clarity_version.clone(), - )); + queue.push_back((dependency.contract_id.clone(), None)); } } requirements_data.insert(contract_id.clone(), (clarity_version, ast)); - queue.push_front((contract_id, epoch, clarity_version)); + queue.push_front((contract_id, None)); for non_inferable_contract_id in non_inferable_dependencies.into_iter() { - queue.push_front((non_inferable_contract_id, epoch, clarity_version)); + queue.push_front((non_inferable_contract_id, None)); } } }; diff --git a/components/clarinet-files/Cargo.toml b/components/clarinet-files/Cargo.toml index 663479d71..474b7cb10 100644 --- a/components/clarinet-files/Cargo.toml +++ b/components/clarinet-files/Cargo.toml @@ -21,7 +21,7 @@ bitcoin = { version = "0.29.2", optional = true } # wasm js-sys = { version = "0.3", optional = true } -serde-wasm-bindgen = { version = "0.4", optional = true } +serde-wasm-bindgen = { version = "0.5", optional = true } wasm-bindgen = { version = "0.2", optional = true } wasm-bindgen-futures = { version = "0.4", optional = true } diff --git a/components/clarinet-files/src/lib.rs b/components/clarinet-files/src/lib.rs index 8b380621a..cdd8b0129 100644 --- a/components/clarinet-files/src/lib.rs +++ b/components/clarinet-files/src/lib.rs @@ -21,11 +21,11 @@ pub use network_manifest::{ compute_addresses, AccountConfig, DevnetConfig, DevnetConfigFile, NetworkManifest, NetworkManifestFile, PoxStackingOrder, DEFAULT_BITCOIN_EXPLORER_IMAGE, DEFAULT_BITCOIN_NODE_IMAGE, DEFAULT_DERIVATION_PATH, DEFAULT_DOCKER_PLATFORM, - DEFAULT_EPOCH_2_0, DEFAULT_EPOCH_2_05, DEFAULT_EPOCH_2_1, DEFAULT_FAUCET_MNEMONIC, - DEFAULT_POSTGRES_IMAGE, DEFAULT_POX2_ACTIVATION, DEFAULT_STACKS_API_IMAGE, - DEFAULT_STACKS_EXPLORER_IMAGE, DEFAULT_STACKS_MINER_MNEMONIC, DEFAULT_STACKS_NODE_IMAGE, - DEFAULT_SUBNET_API_IMAGE, DEFAULT_SUBNET_CONTRACT_ID, DEFAULT_SUBNET_MNEMONIC, - DEFAULT_SUBNET_NODE_IMAGE, + DEFAULT_EPOCH_2_0, DEFAULT_EPOCH_2_05, DEFAULT_EPOCH_2_1, DEFAULT_EPOCH_2_2, DEFAULT_EPOCH_2_3, + DEFAULT_EPOCH_2_4, DEFAULT_FAUCET_MNEMONIC, DEFAULT_POSTGRES_IMAGE, DEFAULT_POX2_ACTIVATION, + DEFAULT_STACKS_API_IMAGE, DEFAULT_STACKS_EXPLORER_IMAGE, DEFAULT_STACKS_MINER_MNEMONIC, + DEFAULT_STACKS_NODE_IMAGE, DEFAULT_SUBNET_API_IMAGE, DEFAULT_SUBNET_CONTRACT_ID, + DEFAULT_SUBNET_MNEMONIC, DEFAULT_SUBNET_NODE_IMAGE, }; pub use project_manifest::{ProjectManifest, ProjectManifestFile, RequirementConfig}; use serde::ser::{Serialize, SerializeMap, Serializer}; diff --git a/components/clarinet-files/src/network_manifest.rs b/components/clarinet-files/src/network_manifest.rs index f46945f15..5e1c1bf3c 100644 --- a/components/clarinet-files/src/network_manifest.rs +++ b/components/clarinet-files/src/network_manifest.rs @@ -20,10 +20,10 @@ pub const DEFAULT_BITCOIN_EXPLORER_IMAGE: &str = "quay.io/hirosystems/bitcoin-ex pub const DEFAULT_STACKS_API_IMAGE: &str = "hirosystems/stacks-blockchain-api:latest"; pub const DEFAULT_STACKS_EXPLORER_IMAGE: &str = "hirosystems/explorer:latest"; pub const DEFAULT_POSTGRES_IMAGE: &str = "postgres:14"; -pub const DEFAULT_SUBNET_NODE_IMAGE: &str = "hirosystems/stacks-subnets:0.5.0"; -pub const DEFAULT_SUBNET_API_IMAGE: &str = "hirosystems/stacks-blockchain-api:7.1.0-subnets.1"; +pub const DEFAULT_SUBNET_NODE_IMAGE: &str = "hirosystems/stacks-subnets:0.8.1"; +pub const DEFAULT_SUBNET_API_IMAGE: &str = "hirosystems/stacks-blockchain-api:latest"; pub const DEFAULT_SUBNET_CONTRACT_ID: &str = - "ST13F481SBR0R7Z6NMMH8YV2FJJYXA5JPA0AD3HP9.subnet-v1-2"; + "ST173JK7NZBA4BS05ZRATQH1K89YJMTGEH1Z5J52E.subnet-v3-0-1"; pub const DEFAULT_STACKS_MINER_MNEMONIC: &str = "fragile loan twenty basic net assault jazz absorb diet talk art shock innocent float punch travel gadget embrace caught blossom hockey surround initial reduce"; pub const DEFAULT_FAUCET_MNEMONIC: &str = "shadow private easily thought say logic fault paddle word top book during ignore notable orange flight clock image wealth health outside kitten belt reform"; pub const DEFAULT_SUBNET_MNEMONIC: &str = "twice kind fence tip hidden tilt action fragile skin nothing glory cousin green tomorrow spring wrist shed math olympic multiply hip blue scout claw"; @@ -36,12 +36,12 @@ pub const DEFAULT_DOCKER_SOCKET: &str = "/var/run/docker.sock"; pub const DEFAULT_DOCKER_PLATFORM: &str = "linux/amd64"; pub const DEFAULT_EPOCH_2_0: u64 = 100; -pub const DEFAULT_EPOCH_2_05: u64 = 102; -pub const DEFAULT_EPOCH_2_1: u64 = 106; -pub const DEFAULT_POX2_ACTIVATION: u64 = 109; -pub const DEFAULT_EPOCH_2_2: u64 = 122; -pub const DEFAULT_EPOCH_2_3: u64 = 128; -pub const DEFAULT_EPOCH_2_4: u64 = 134; +pub const DEFAULT_EPOCH_2_05: u64 = 100; +pub const DEFAULT_EPOCH_2_1: u64 = 101; +pub const DEFAULT_POX2_ACTIVATION: u64 = 102; +pub const DEFAULT_EPOCH_2_2: u64 = 103; +pub const DEFAULT_EPOCH_2_3: u64 = 104; +pub const DEFAULT_EPOCH_2_4: u64 = 105; #[derive(Serialize, Deserialize, Debug)] pub struct NetworkManifestFile { @@ -77,6 +77,7 @@ pub struct DevnetConfigFile { pub stacks_node_env_vars: Option>, pub stacks_api_env_vars: Option>, pub stacks_explorer_env_vars: Option>, + pub subnet_node_env_vars: Option>, pub stacks_api_port: Option, pub stacks_api_events_port: Option, pub bitcoin_explorer_port: Option, @@ -120,6 +121,7 @@ pub struct DevnetConfigFile { pub subnet_api_image_url: Option, pub subnet_api_port: Option, pub subnet_api_events_port: Option, + pub subnet_api_env_vars: Option>, pub disable_subnet_api: Option, pub docker_host: Option, pub components_host: Option, @@ -241,9 +243,11 @@ pub struct DevnetConfig { pub subnet_node_events_observers: Vec, pub subnet_contract_id: String, pub remapped_subnet_contract_id: String, + pub subnet_node_env_vars: Vec, pub subnet_api_image_url: String, pub subnet_api_port: u16, pub subnet_api_events_port: u16, + pub subnet_api_env_vars: Vec, pub disable_subnet_api: bool, pub docker_host: String, pub components_host: String, @@ -870,6 +874,8 @@ impl NetworkManifest { .stacks_explorer_env_vars .take() .unwrap_or(vec![]), + subnet_node_env_vars: devnet_config.subnet_node_env_vars.take().unwrap_or(vec![]), + subnet_api_env_vars: devnet_config.subnet_api_env_vars.take().unwrap_or(vec![]), use_docker_gateway_routing: devnet_config .use_docker_gateway_routing .unwrap_or(false), diff --git a/components/clarity-lsp/Cargo.toml b/components/clarity-lsp/Cargo.toml index f154333f3..b5210e9be 100644 --- a/components/clarity-lsp/Cargo.toml +++ b/components/clarity-lsp/Cargo.toml @@ -16,7 +16,7 @@ clarinet-deployments = { path = "../clarinet-deployments", default-features = fa # WASM console_error_panic_hook = { version = "0.1", optional = true } js-sys = { version = "0.3", optional = true } -serde-wasm-bindgen = { version = "0.4", optional = true } +serde-wasm-bindgen = { version = "0.5", optional = true } wasm-bindgen = { version = "0.2", optional = true } wasm-bindgen-futures = { version = "0.4", optional = true } web-sys = { version = "0.3", features = ["console"], optional = true } diff --git a/components/clarity-repl/Cargo.toml b/components/clarity-repl/Cargo.toml index 1ca89ac94..8614e557c 100644 --- a/components/clarity-repl/Cargo.toml +++ b/components/clarity-repl/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "clarity-repl" -version = "1.7.0" +version = "1.7.1" description = "Clarity REPL" authors = [ "Ludo Galabru ", diff --git a/components/clarity-repl/src/analysis/coverage.rs b/components/clarity-repl/src/analysis/coverage.rs index da97997c6..fb5c0b57e 100644 --- a/components/clarity-repl/src/analysis/coverage.rs +++ b/components/clarity-repl/src/analysis/coverage.rs @@ -183,18 +183,24 @@ impl CoverageReporter { file_content.push_str(&format!("FNF:{}\n", functions.len())); file_content.push_str(&format!("FNH:{}\n", function_hits.len())); - for (line_number, count) in line_execution_counts.iter() { - file_content.push_str(&format!("DA:{},{}\n", line_number, count)); + for (line, count) in line_execution_counts.iter() { + // the ast can contain elements with a span starting at line 0 that we want to ignore + if line > &&0 { + file_content.push_str(&format!("DA:{},{}\n", line, count)); + } } file_content.push_str(&format!("BRF:{}\n", branches.len())); file_content.push_str(&format!("BRH:{}\n", branches_hits.len())); for ((line, block_id, branch_nb), count) in branch_execution_counts.iter() { - file_content.push_str(&format!( - "BRDA:{},{},{},{}\n", - line, block_id, branch_nb, count - )); + // the ast can contain elements with a span starting at line 0 that we want to ignore + if line > &&0 { + file_content.push_str(&format!( + "BRDA:{},{},{},{}\n", + line, block_id, branch_nb, count + )); + } } } file_content.push_str("end_of_record\n"); diff --git a/components/clarity-repl/src/repl/mod.rs b/components/clarity-repl/src/repl/mod.rs index bfaf80e9d..1ed28fc67 100644 --- a/components/clarity-repl/src/repl/mod.rs +++ b/components/clarity-repl/src/repl/mod.rs @@ -22,7 +22,7 @@ use clarity::types::StacksEpochId; use clarity::vm::ClarityVersion; pub const DEFAULT_CLARITY_VERSION: ClarityVersion = ClarityVersion::Clarity2; -pub const DEFAULT_EPOCH: StacksEpochId = StacksEpochId::Epoch21; +pub const DEFAULT_EPOCH: StacksEpochId = StacksEpochId::Epoch24; #[derive(Deserialize, Debug, Clone)] pub struct ClarityContract { diff --git a/components/clarity-vscode/README.md b/components/clarity-vscode/README.md index 21fb81508..f0ec921db 100644 --- a/components/clarity-vscode/README.md +++ b/components/clarity-vscode/README.md @@ -1,6 +1,8 @@ # Clarity for Visual Studio Code -Clarity is a **decidable** Smart Contract language that optimizes for predictability and security. This VS Code extension brings essential features to write safe and clean Clarity code: auto-completion, linting, safety checks, debugger and more. +Clarity is a **decidable** Smart Contract language that optimizes for predictability and security. It's used on the Stacks blockchain to build decentralized applications on Bitcoin. + +This VS Code extension brings essential features to write safe and clean Clarity code: auto-completion, documentation, go-to definition, linting, safety checks, debugger and more. ![screenshot](https://raw.githubusercontent.com/hirosystems/clarinet/develop/components/clarity-vscode/docs/images/screenshot.png) @@ -10,6 +12,12 @@ You can install the latest release of the extension directly from VS Code or fro ## Features +### Documentation on hover + +Access all of Clarity documentation right in your editor by hovering functions and keywords. + +![documentation screenshot](https://raw.githubusercontent.com/hirosystems/clarinet/develop/components/clarity-vscode/docs/images/documentation.png) + ### Auto Complete Functions This feature enables you to start typing a function name, and then have the editor automatically suggest auto-completion with the documentation related to the suggestion. @@ -17,6 +25,12 @@ When you select a function, the extension adds the necessary parentheses around ![autocomplete gif](https://raw.githubusercontent.com/hirosystems/clarinet/develop/components/clarity-vscode/docs/images/autocomplete.gif) +### Go-to definition + +Easily find functions, constants and variables declarations in the same contract or in contract calls. + +![go-to definition screenshot](https://raw.githubusercontent.com/hirosystems/clarinet/develop/components/clarity-vscode/docs/images/documentation.png) + ### Resolve contract-call targeting local contracts The extension auto-completes local contract calls as well. diff --git a/components/clarity-vscode/docs/images/documentation.png b/components/clarity-vscode/docs/images/documentation.png new file mode 100644 index 000000000..6da5538e2 Binary files /dev/null and b/components/clarity-vscode/docs/images/documentation.png differ diff --git a/components/clarity-vscode/docs/images/go-to-definition.png b/components/clarity-vscode/docs/images/go-to-definition.png new file mode 100644 index 000000000..0c5fa0044 Binary files /dev/null and b/components/clarity-vscode/docs/images/go-to-definition.png differ diff --git a/components/clarity-vscode/package-lock.json b/components/clarity-vscode/package-lock.json index 03376548a..284f92dbe 100644 --- a/components/clarity-vscode/package-lock.json +++ b/components/clarity-vscode/package-lock.json @@ -1,12 +1,12 @@ { "name": "clarity-lsp", - "version": "1.7.0", + "version": "1.7.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "clarity-lsp", - "version": "1.7.0", + "version": "1.7.2", "license": "GPL-3.0-only", "workspaces": [ "client", @@ -64,10 +64,19 @@ "lookpath": "^1.2.2" } }, + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/@babel/runtime": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.5.tgz", - "integrity": "sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA==", + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.6.tgz", + "integrity": "sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ==", "dev": true, "dependencies": { "regenerator-runtime": "^0.13.11" @@ -110,14 +119,14 @@ } }, "node_modules/@eslint/eslintrc": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.3.tgz", - "integrity": "sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.0.tgz", + "integrity": "sha512-Lj7DECXqIVCqnqjjHMPna4vn6GJcMgul/wuS0je9OZ9gsL0zzDpKPVtcG1HaDVc+9y+qgXneTeUMbCqXJNpH1A==", "dev": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.5.2", + "espree": "^9.6.0", "globals": "^13.19.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", @@ -133,9 +142,9 @@ } }, "node_modules/@eslint/js": { - "version": "8.42.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.42.0.tgz", - "integrity": "sha512-6SWlXpWU5AvId8Ac7zjzmIOqMOba/JWY8XZ4A7q7Gn1Vlfg/SFFIlrtHXt9nPn4op9ZPAkl91Jao+QQv3r/ukw==", + "version": "8.44.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.44.0.tgz", + "integrity": "sha512-Ag+9YM4ocKQx9AarydN0KY2j0ErMHNIocPDrVo8zAE44xLTjEtz81OdR68/cydGtk6m6jDb5Za3r2useMzYmSw==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -303,9 +312,9 @@ } }, "node_modules/@jridgewell/source-map": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.3.tgz", - "integrity": "sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", + "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", "dev": true, "dependencies": { "@jridgewell/gen-mapping": "^0.3.0", @@ -461,9 +470,9 @@ } }, "node_modules/@swc/core": { - "version": "1.3.64", - "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.3.64.tgz", - "integrity": "sha512-be1dk2pfjzBjFp/+p47/wvOAm7KpEtsi7hqI3ofox6pK3hBJChHgVTLVV9xqZm7CnYdyYYw3Z78hH6lrwutxXQ==", + "version": "1.3.70", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.3.70.tgz", + "integrity": "sha512-LWVWlEDLlOD25PvA2NEz41UzdwXnlDyBiZbe69s3zM0DfCPwZXLUm79uSqH9ItsOjTrXSL5/1+XUL6C/BZwChA==", "dev": true, "hasInstallScript": true, "engines": { @@ -474,16 +483,16 @@ "url": "https://opencollective.com/swc" }, "optionalDependencies": { - "@swc/core-darwin-arm64": "1.3.64", - "@swc/core-darwin-x64": "1.3.64", - "@swc/core-linux-arm-gnueabihf": "1.3.64", - "@swc/core-linux-arm64-gnu": "1.3.64", - "@swc/core-linux-arm64-musl": "1.3.64", - "@swc/core-linux-x64-gnu": "1.3.64", - "@swc/core-linux-x64-musl": "1.3.64", - "@swc/core-win32-arm64-msvc": "1.3.64", - "@swc/core-win32-ia32-msvc": "1.3.64", - "@swc/core-win32-x64-msvc": "1.3.64" + "@swc/core-darwin-arm64": "1.3.70", + "@swc/core-darwin-x64": "1.3.70", + "@swc/core-linux-arm-gnueabihf": "1.3.70", + "@swc/core-linux-arm64-gnu": "1.3.70", + "@swc/core-linux-arm64-musl": "1.3.70", + "@swc/core-linux-x64-gnu": "1.3.70", + "@swc/core-linux-x64-musl": "1.3.70", + "@swc/core-win32-arm64-msvc": "1.3.70", + "@swc/core-win32-ia32-msvc": "1.3.70", + "@swc/core-win32-x64-msvc": "1.3.70" }, "peerDependencies": { "@swc/helpers": "^0.5.0" @@ -495,9 +504,9 @@ } }, "node_modules/@swc/core-darwin-arm64": { - "version": "1.3.64", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.64.tgz", - "integrity": "sha512-gSPld6wxZBZoEvZXWmNfd+eJGlGvrEXmhMBCUwSccpuMa0KqK7F6AAZVu7kFkmlXPq2kS8owjk6/VXnVBmm5Vw==", + "version": "1.3.70", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.70.tgz", + "integrity": "sha512-31+mcl0dgdRHvZRjhLOK9V6B+qJ7nxDZYINr9pBlqGWxknz37Vld5KK19Kpr79r0dXUZvaaelLjCnJk9dA2PcQ==", "cpu": [ "arm64" ], @@ -511,9 +520,9 @@ } }, "node_modules/@swc/core-darwin-x64": { - "version": "1.3.64", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.3.64.tgz", - "integrity": "sha512-SJd1pr+U2pz5ZVv5BL36CN879Pn1V0014uVNlB+6yNh3e8T0fjUbtRJcbFiBB+OeYuJ1UNUeslaRJtKJNtMH7A==", + "version": "1.3.70", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.3.70.tgz", + "integrity": "sha512-GMFJ65E18zQC80t0os+TZvI+8lbRuitncWVge/RXmXbVLPRcdykP4EJ87cqzcG5Ah0z18/E0T+ixD6jHRisrYQ==", "cpu": [ "x64" ], @@ -527,9 +536,9 @@ } }, "node_modules/@swc/core-linux-arm-gnueabihf": { - "version": "1.3.64", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.64.tgz", - "integrity": "sha512-XE60bZS+qO+d8IQYAayhn3TRqyzVmQeOsX2B1yUHuKZU3Zb/mt/cmD/HLzZZW7J3z19kYf2na7Hvmnt3amUGoA==", + "version": "1.3.70", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.70.tgz", + "integrity": "sha512-wjhCwS8LCiAq2VedF1b4Bryyw68xZnfMED4pLRazAl8BaUlDFANfRBORNunxlfHQj4V3x39IaiLgCZRHMdzXBg==", "cpu": [ "arm" ], @@ -543,9 +552,9 @@ } }, "node_modules/@swc/core-linux-arm64-gnu": { - "version": "1.3.64", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.64.tgz", - "integrity": "sha512-+jcUua4cYLRMqDicv+4AaTZUGgYWXkXVI9AzaAgfkMNLU2TMXwuYXopxk1giAMop88+ovzYIqrxErRdu70CgtQ==", + "version": "1.3.70", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.70.tgz", + "integrity": "sha512-9D/Rx67cAOnMiexvCqARxvhj7coRajTp5HlJHuf+rfwMqI2hLhpO9/pBMQxBUAWxODO/ksQ/OF+GJRjmtWw/2A==", "cpu": [ "arm64" ], @@ -559,9 +568,9 @@ } }, "node_modules/@swc/core-linux-arm64-musl": { - "version": "1.3.64", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.64.tgz", - "integrity": "sha512-50MI8NFYUKhLncqY2piM/XOnNqZT6zY2ZoNOFsy63/T2gAYy1ts4mF4YUEkg4XOA2zhue1JSLZBUrHQXbgMYUQ==", + "version": "1.3.70", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.70.tgz", + "integrity": "sha512-gkjxBio7XD+1GlQVVyPP/qeFkLu83VhRHXaUrkNYpr5UZG9zZurBERT9nkS6Y+ouYh+Q9xmw57aIyd2KvD2zqQ==", "cpu": [ "arm64" ], @@ -575,9 +584,9 @@ } }, "node_modules/@swc/core-linux-x64-gnu": { - "version": "1.3.64", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.64.tgz", - "integrity": "sha512-bT8seQ41Q4J2JDgn2JpFCGNehGAIilAkZ476gEaKKroEWepBhkD0K1MspSSVYSJhLSGbBVSaadUEiBPxWgu1Rw==", + "version": "1.3.70", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.70.tgz", + "integrity": "sha512-/nCly+V4xfMVwfEUoLLAukxUSot/RcSzsf6GdsGTjFcrp5sZIntAjokYRytm3VT1c2TK321AfBorsi9R5w8Y7Q==", "cpu": [ "x64" ], @@ -591,9 +600,9 @@ } }, "node_modules/@swc/core-linux-x64-musl": { - "version": "1.3.64", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.64.tgz", - "integrity": "sha512-sJgh3TXCDOEq/Au4XLAgNqy4rVcLeywQBoftnV3rcvX1/u9OCSRzgKLgYc5d1pEN5AMJV1l4u26kbGlQuZ+yRw==", + "version": "1.3.70", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.70.tgz", + "integrity": "sha512-HoOsPJbt361KGKaivAK0qIiYARkhzlxeAfvF5NlnKxkIMOZpQ46Lwj3tR0VWohKbrhS+cYKFlVuDi5XnDkx0XA==", "cpu": [ "x64" ], @@ -607,9 +616,9 @@ } }, "node_modules/@swc/core-win32-arm64-msvc": { - "version": "1.3.64", - "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.64.tgz", - "integrity": "sha512-zWIy+mAWDjtJjl4e4mmhQL7g9KbkOwcWbeoIk4C6NT4VpjnjdX1pMml/Ez2sF5J5cGBwu7B1ePfTe/kAE6G36Q==", + "version": "1.3.70", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.70.tgz", + "integrity": "sha512-hm4IBK/IaRil+aj1cWU6f0GyAdHpw/Jr5nyFYLM2c/tt7w2t5hgb8NjzM2iM84lOClrig1fG6edj2vCF1dFzNQ==", "cpu": [ "arm64" ], @@ -623,9 +632,9 @@ } }, "node_modules/@swc/core-win32-ia32-msvc": { - "version": "1.3.64", - "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.64.tgz", - "integrity": "sha512-6HMiuUeSMpTUAimb1E+gUNjy8m211oAzw+wjU8oOdA6iihWaLBz4TOhU9IaKZPPjqEcYGwqaT3tj5b5+mxde6Q==", + "version": "1.3.70", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.70.tgz", + "integrity": "sha512-5cgKUKIT/9Fp5fCA+zIjYCQ4dSvjFYOeWGZR3QiTXGkC4bGa1Ji9SEPyeIAX0iruUnKjYaZB9RvHK2tNn7RLrQ==", "cpu": [ "ia32" ], @@ -639,9 +648,9 @@ } }, "node_modules/@swc/core-win32-x64-msvc": { - "version": "1.3.64", - "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.64.tgz", - "integrity": "sha512-c8Al0JJfmgnO9sg6w34PICibqI4p7iXywo+wOxjY88oFwMcfV5rGaif1Fe3RqxJP/1WtUV7lYuKKZrneMXtyLA==", + "version": "1.3.70", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.70.tgz", + "integrity": "sha512-LE8lW46+TQBzVkn2mHBlk8DIElPIZ2dO5P8AbJiARNBAnlqQWu67l9gWM89UiZ2l33J2cI37pHzON3tKnT8f9g==", "cpu": [ "x64" ], @@ -691,9 +700,9 @@ "dev": true }, "node_modules/@types/eslint": { - "version": "8.40.2", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.40.2.tgz", - "integrity": "sha512-PRVjQ4Eh9z9pmmtaq8nTjZjQwKFk7YIHIud3lRoKRBgUQjgjRmoGxxGEPXQkF+lH7QkHJRNr5F4aBgYCW0lqpQ==", + "version": "8.44.0", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.0.tgz", + "integrity": "sha512-gsF+c/0XOguWgaOgvFs+xnnRqt9GwgTvIks36WpE6ueeI4KCEHHd8K/CKHqhOqrJKsYH8m27kRzQEvWXAwXUTw==", "dev": true, "dependencies": { "@types/estree": "*", @@ -744,9 +753,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.3.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.3.1.tgz", - "integrity": "sha512-EhcH/wvidPy1WeML3TtYFGR83UzjxeWRen9V402T8aUGYsCHOmfoisV3ZSg03gAFIbLq8TnWOJ0f4cALtnSEUg==", + "version": "20.4.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.4.2.tgz", + "integrity": "sha512-Dd0BYtWgnWJKwO1jkmTrzofjK2QXXcai0dmtzvIBhcA+RsG5h8R3xlyta0kGOZRNfL9GuRtb1knmPEhQrePCEw==", "dev": true }, "node_modules/@types/responselike": { @@ -765,9 +774,9 @@ "dev": true }, "node_modules/@types/vscode": { - "version": "1.79.1", - "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.79.1.tgz", - "integrity": "sha512-Ikwc4YbHABzqthrWfeAvItaAIfX9mdjMWxqNgTpGjhgOu0TMRq9LzyZ2yBK0JhYqoSjEubEPawf6zJgnl6Egtw==", + "version": "1.80.0", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.80.0.tgz", + "integrity": "sha512-qK/CmOdS2o7ry3k6YqU4zD3R2AYlJfbwBoSbKpBoP+GpXNE+0NEgJOli4n0bm0diK5kfBnchgCEj4igQz/44Hg==", "dev": true }, "node_modules/@types/webpack-env": { @@ -777,17 +786,17 @@ "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.59.11", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.11.tgz", - "integrity": "sha512-XxuOfTkCUiOSyBWIvHlUraLw/JT/6Io1365RO6ZuI88STKMavJZPNMU0lFcUTeQXEhHiv64CbxYxBNoDVSmghg==", + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", + "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", "dev": true, "dependencies": { "@eslint-community/regexpp": "^4.4.0", - "@typescript-eslint/scope-manager": "5.59.11", - "@typescript-eslint/type-utils": "5.59.11", - "@typescript-eslint/utils": "5.59.11", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/type-utils": "5.62.0", + "@typescript-eslint/utils": "5.62.0", "debug": "^4.3.4", - "grapheme-splitter": "^1.0.4", + "graphemer": "^1.4.0", "ignore": "^5.2.0", "natural-compare-lite": "^1.4.0", "semver": "^7.3.7", @@ -811,14 +820,14 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "5.59.11", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.59.11.tgz", - "integrity": "sha512-s9ZF3M+Nym6CAZEkJJeO2TFHHDsKAM3ecNkLuH4i4s8/RCPnF5JRip2GyviYkeEAcwGMJxkqG9h2dAsnA1nZpA==", + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", + "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.59.11", - "@typescript-eslint/types": "5.59.11", - "@typescript-eslint/typescript-estree": "5.59.11", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", "debug": "^4.3.4" }, "engines": { @@ -838,13 +847,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "5.59.11", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.59.11.tgz", - "integrity": "sha512-dHFOsxoLFtrIcSj5h0QoBT/89hxQONwmn3FOQ0GOQcLOOXm+MIrS8zEAhs4tWl5MraxCY3ZJpaXQQdFMc2Tu+Q==", + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", + "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.59.11", - "@typescript-eslint/visitor-keys": "5.59.11" + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -855,13 +864,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "5.59.11", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.59.11.tgz", - "integrity": "sha512-LZqVY8hMiVRF2a7/swmkStMYSoXMFlzL6sXV6U/2gL5cwnLWQgLEG8tjWPpaE4rMIdZ6VKWwcffPlo1jPfk43g==", + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", + "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "5.59.11", - "@typescript-eslint/utils": "5.59.11", + "@typescript-eslint/typescript-estree": "5.62.0", + "@typescript-eslint/utils": "5.62.0", "debug": "^4.3.4", "tsutils": "^3.21.0" }, @@ -882,9 +891,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "5.59.11", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.59.11.tgz", - "integrity": "sha512-epoN6R6tkvBYSc+cllrz+c2sOFWkbisJZWkOE+y3xHtvYaOE6Wk6B8e114McRJwFRjGvYdJwLXQH5c9osME/AA==", + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", + "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -895,13 +904,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.59.11", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.11.tgz", - "integrity": "sha512-YupOpot5hJO0maupJXixi6l5ETdrITxeo5eBOeuV7RSKgYdU3G5cxO49/9WRnJq9EMrB7AuTSLH/bqOsXi7wPA==", + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", + "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.59.11", - "@typescript-eslint/visitor-keys": "5.59.11", + "@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", @@ -922,17 +931,17 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "5.59.11", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.59.11.tgz", - "integrity": "sha512-didu2rHSOMUdJThLk4aZ1Or8IcO3HzCw/ZvEjTTIfjIrcdd5cvSIwwDy2AOlE7htSNp7QIZ10fLMyRCveesMLg==", + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", + "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@types/json-schema": "^7.0.9", "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.59.11", - "@typescript-eslint/types": "5.59.11", - "@typescript-eslint/typescript-estree": "5.59.11", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", "eslint-scope": "^5.1.1", "semver": "^7.3.7" }, @@ -948,12 +957,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.59.11", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.11.tgz", - "integrity": "sha512-KGYniTGG3AMTuKF9QBD7EIrvufkB6O6uX3knP73xbKLMpH+QRPcgnCxjWXSHjMRuOxFLovljqQgQpR0c7GvjoA==", + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", + "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.59.11", + "@typescript-eslint/types": "5.62.0", "eslint-visitor-keys": "^3.3.0" }, "engines": { @@ -1037,9 +1046,9 @@ } }, "node_modules/@vscode/vsce/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, "bin": { "semver": "bin/semver" @@ -1272,9 +1281,9 @@ } }, "node_modules/acorn": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.9.0.tgz", - "integrity": "sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==", + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -1543,14 +1552,14 @@ } }, "node_modules/bin-version-check": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/bin-version-check/-/bin-version-check-5.0.0.tgz", - "integrity": "sha512-Q3FMQnS5eZmrBGqmDXLs4dbAn/f+52voP6ykJYmweSA60t6DyH4UTSwZhtbK5UH+LBoWvDljILUQMLRUtsynsA==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/bin-version-check/-/bin-version-check-5.1.0.tgz", + "integrity": "sha512-bYsvMqJ8yNGILLz1KP9zKLzQ6YpljV3ln1gqhuLkUtyfGi3qXKGuK2p+U4NAvjVFzDFiBBtOpCOSFNuYYEGZ5g==", "dev": true, "dependencies": { "bin-version": "^6.0.0", - "semver": "^7.3.5", - "semver-truncate": "^2.0.0" + "semver": "^7.5.3", + "semver-truncate": "^3.0.0" }, "engines": { "node": ">=12" @@ -1582,6 +1591,18 @@ "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, + "node_modules/bin-version/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/bin-version/node_modules/is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", @@ -1615,6 +1636,29 @@ "node": ">=8" } }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bl/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/boolbase": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", @@ -1815,9 +1859,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001503", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001503.tgz", - "integrity": "sha512-Sf9NiF+wZxPfzv8Z3iS0rXM1Do+iOy2Lxvib38glFX+08TCYYYGR5fRJXk4d77C4AYwhUjgYgMsMudbh2TqCKw==", + "version": "1.0.30001517", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001517.tgz", + "integrity": "sha512-Vdhm5S11DaFVLlyiKu4hiUTkpZu+y1KA/rZZqVQfOD5YdDT/eQKlkt7NaE0WGOFgX32diqt9MiP9CAiFeRklaA==", "dev": true, "funding": [ { @@ -2237,14 +2281,14 @@ } }, "node_modules/copy-webpack-plugin/node_modules/globby": { - "version": "13.1.4", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.4.tgz", - "integrity": "sha512-iui/IiiW+QrJ1X1hKH5qwlMQyv34wJAYwH1vrf8b9kBA4sNiif3gKsMHa+BrdnOpEudWjpotfa7LrTzB1ERS/g==", + "version": "13.2.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", + "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", "dev": true, "dependencies": { "dir-glob": "^3.0.1", - "fast-glob": "^3.2.11", - "ignore": "^5.2.0", + "fast-glob": "^3.3.0", + "ignore": "^5.2.4", "merge2": "^1.4.1", "slash": "^4.0.0" }, @@ -2458,9 +2502,9 @@ } }, "node_modules/detect-libc": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", - "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz", + "integrity": "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==", "dev": true, "optional": true, "engines": { @@ -2566,33 +2610,6 @@ "stream-shift": "^1.0.0" } }, - "node_modules/duplexify/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/duplexify/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/duplexify/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", @@ -2605,9 +2622,9 @@ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "node_modules/electron-to-chromium": { - "version": "1.4.432", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.432.tgz", - "integrity": "sha512-yz3U/khQgAFT2HURJA3/F4fKIyO2r5eK09BQzBZFd6BvBSSaRuzKc2ZNBHtJcO75/EKiRYbVYJZ2RB0P4BuD2g==", + "version": "1.4.466", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.466.tgz", + "integrity": "sha512-TSkRvbXRXD8BwhcGlZXDsbI2lRoP8dvqR7LQnqQNk9KxXBc4tG8O+rTuXgTyIpEdiqSGKEBSqrxdqEntnjNncA==", "dev": true }, "node_modules/emoji-regex": { @@ -2658,9 +2675,9 @@ } }, "node_modules/envinfo": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", - "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.10.0.tgz", + "integrity": "sha512-ZtUjZO6l5mwTHvc1L9+1q5p/R3wTopcfqMW8r5t8SJSKqeVI/LtajORwRFEKpEFuekjD0VBjwu1HMxL4UalIRw==", "dev": true, "bin": { "envinfo": "dist/cli.js" @@ -2699,15 +2716,15 @@ } }, "node_modules/eslint": { - "version": "8.42.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.42.0.tgz", - "integrity": "sha512-ulg9Ms6E1WPf67PHaEY4/6E2tEn5/f7FXGzr3t9cBMugOmf1INYvuUwwh1aXQN4MfJ6a5K2iNwP3w4AColvI9A==", + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.45.0.tgz", + "integrity": "sha512-pd8KSxiQpdYRfYa9Wufvdoct3ZPQQuVuU5O6scNgMuOMYuxvH0IGaYK0wUFjo4UYYQQCUndlXiMbnxopwvvTiw==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.4.0", - "@eslint/eslintrc": "^2.0.3", - "@eslint/js": "8.42.0", + "@eslint/eslintrc": "^2.1.0", + "@eslint/js": "8.44.0", "@humanwhocodes/config-array": "^0.11.10", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", @@ -2719,7 +2736,7 @@ "escape-string-regexp": "^4.0.0", "eslint-scope": "^7.2.0", "eslint-visitor-keys": "^3.4.1", - "espree": "^9.5.2", + "espree": "^9.6.0", "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", @@ -2729,7 +2746,6 @@ "globals": "^13.19.0", "graphemer": "^1.4.0", "ignore": "^5.2.0", - "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "is-path-inside": "^3.0.3", @@ -2739,9 +2755,8 @@ "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.9.1", + "optionator": "^0.9.3", "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", "text-table": "^0.2.0" }, "bin": { @@ -2841,9 +2856,9 @@ } }, "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", - "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.1.tgz", + "integrity": "sha512-CvefSOsDdaYYvxChovdrPo/ZGt8d5lrJWleAc1diXRKhHGiTYEI26cvo8Kle/wGnsizoCJjK73FMg1/IkIwiNA==", "dev": true, "dependencies": { "esrecurse": "^4.3.0", @@ -2887,12 +2902,12 @@ } }, "node_modules/espree": { - "version": "9.5.2", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.2.tgz", - "integrity": "sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==", + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, "dependencies": { - "acorn": "^8.8.0", + "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^3.4.1" }, @@ -3001,15 +3016,6 @@ "which": "^1.2.9" } }, - "node_modules/execa/node_modules/get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/execa/node_modules/lru-cache": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", @@ -3113,9 +3119,9 @@ "dev": true }, "node_modules/fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.0.tgz", + "integrity": "sha512-ChDuvbOypPuNjO8yIDf36x7BlZX1smcUMTTcyoIjycexOxd6DFsKsg21qVBzEmr3G7fUKIRy2/psii+CIUt7FA==", "dev": true, "dependencies": { "@nodelib/fs.stat": "^2.0.2", @@ -3457,15 +3463,12 @@ } }, "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", "dev": true, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, "node_modules/github-from-package": { @@ -3579,12 +3582,6 @@ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "dev": true }, - "node_modules/grapheme-splitter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", - "dev": true - }, "node_modules/graphemer": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", @@ -3795,9 +3792,9 @@ } }, "node_modules/https-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.0.tgz", - "integrity": "sha512-0euwPCRyAPSgGdzD1IVN9nJYHtBhJwb6XPfbpQcYbPCwrBidX6GzxmchnaF4sfF/jPb74Ojx5g4yTg3sixlyPw==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.1.tgz", + "integrity": "sha512-Eun8zV0kcYS1g19r78osiQLEFIRspRUDd9tIfBCTBPBeMieF/EsJNL8VI3xOIdYRDEkjQnqOYPsZ2DsWsVsFwQ==", "dependencies": { "agent-base": "^7.0.2", "debug": "4" @@ -4201,9 +4198,9 @@ } }, "node_modules/keyv": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.2.tgz", - "integrity": "sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==", + "version": "4.5.3", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.3.tgz", + "integrity": "sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==", "dev": true, "dependencies": { "json-buffer": "3.0.1" @@ -4721,9 +4718,9 @@ } }, "node_modules/minipass": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-6.0.2.tgz", - "integrity": "sha512-MzWSV5nYVT7mVyWCwn2o7JH13w2TBRmmSqSRCKzTw+lmft9X4z+3wjvs06Tzijo5z4W/kahUCDpRXTF+ZrmF/w==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.2.tgz", + "integrity": "sha512-eL79dXrE1q9dBbDCLg7xfn/vl7MS4F1gvJAgjJrQli/jbQWdUttuVawphqpffoIYfRdq78LHx6GP4bU/EQ2ATA==", "dev": true, "engines": { "node": ">=16 || 14 >=14.17" @@ -5058,9 +5055,9 @@ } }, "node_modules/node-releases": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz", - "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==", + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", + "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", "dev": true }, "node_modules/normalize-path": { @@ -5174,17 +5171,17 @@ "integrity": "sha512-Fvw+Jemq5fjjyWz6CpKx6w9s7xxqo3+JCyM0WXWeCSOboZ8ABkyvP8ID4CZuChA/wxSx+XSJmdOm8rGVyJ1hdQ==" }, "node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", "dev": true, "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" + "type-check": "^0.4.0" }, "engines": { "node": ">= 0.8.0" @@ -5286,9 +5283,9 @@ } }, "node_modules/parse-semver/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, "bin": { "semver": "bin/semver" @@ -5366,13 +5363,13 @@ "dev": true }, "node_modules/path-scurry": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.9.2.tgz", - "integrity": "sha512-qSDLy2aGFPm8i4rsbHd4MNyTcrzHFsLQykrtbuGRknZZCBBVXSv2tSCDN2Cg6Rt/GFRw8GoW9y9Ecw5rIPG1sg==", + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", + "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", "dev": true, "dependencies": { - "lru-cache": "^9.1.1", - "minipass": "^5.0.0 || ^6.0.2" + "lru-cache": "^9.1.1 || ^10.0.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" }, "engines": { "node": ">=16 || 14 >=14.17" @@ -5382,9 +5379,9 @@ } }, "node_modules/path-scurry/node_modules/lru-cache": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-9.1.2.tgz", - "integrity": "sha512-ERJq3FOzJTxBbFjZ7iDs+NiK4VI9Wz+RdrrAB8dio1oV+YvdPzUEE4QNiT2VD51DkIbCYRUUzCRkssXCHqSnKQ==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.0.tgz", + "integrity": "sha512-svTf/fzsKHffP42sujkO/Rjs37BCIsQVRCeNYIm9WN8rgT7ffoUnRtZCqU+6BqcSBdv8gwJeTz8knJpgACeQMw==", "dev": true, "engines": { "node": "14 || >=16.14" @@ -5534,12 +5531,12 @@ } }, "node_modules/playwright": { - "version": "1.35.1", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.35.1.tgz", - "integrity": "sha512-NbwBeGJLu5m7VGM0+xtlmLAH9VUfWwYOhUi/lSEDyGg46r1CA9RWlvoc5yywxR9AzQb0mOCm7bWtOXV7/w43ZA==", + "version": "1.36.1", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.36.1.tgz", + "integrity": "sha512-2ZqHpD0U0COKR8bqR3W5IkyIAAM0mT9FgGJB9xWCI1qAUkqLxJskA1ueeQOTH2Qfz3+oxdwwf2EzdOX+RkZmmQ==", "hasInstallScript": true, "dependencies": { - "playwright-core": "1.35.1" + "playwright-core": "1.36.1" }, "bin": { "playwright": "cli.js" @@ -5549,9 +5546,9 @@ } }, "node_modules/playwright-core": { - "version": "1.35.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.35.1.tgz", - "integrity": "sha512-pNXb6CQ7OqmGDRspEjlxE49w+4YtR6a3X6mT1hZXeJHWmsEz7SunmvZeiG/+y1yyMZdHnnn73WKYdtV1er0Xyg==", + "version": "1.36.1", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.36.1.tgz", + "integrity": "sha512-7+tmPuMcEW4xeCL9cp9KxmYpQYHKkyjwoXRnoeTowaeNat8PoBMk/HwCYhqkH2fRkshfKEOiVus/IhID2Pg8kg==", "bin": { "playwright-core": "cli.js" }, @@ -5738,18 +5735,24 @@ } }, "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, + "node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, "node_modules/readable-web-to-node-stream": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz", @@ -5766,6 +5769,20 @@ "url": "https://github.com/sponsors/Borewit" } }, + "node_modules/readable-web-to-node-stream/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -5969,16 +5986,16 @@ } }, "node_modules/rimraf/node_modules/glob": { - "version": "10.2.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.2.7.tgz", - "integrity": "sha512-jTKehsravOJo8IJxUGfZILnkvVJM/MOfHRs8QcXolVef2zNI9Tqyy5+SeuOAZd3upViEZQLyFpQhYiHLrMUNmA==", + "version": "10.3.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.3.tgz", + "integrity": "sha512-92vPiMb/iqpmEgsOoIDvTjc50wf9CCCvMzsi6W0JLPeUKE8TWP1a73PgqSrqy7iAZxaSD1YdzU7QZR5LF51MJw==", "dev": true, "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^2.0.3", "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2", - "path-scurry": "^1.7.0" + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" }, "bin": { "glob": "dist/cjs/src/bin.js" @@ -5991,9 +6008,9 @@ } }, "node_modules/rimraf/node_modules/minimatch": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", - "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" @@ -6116,9 +6133,9 @@ "dev": true }, "node_modules/semver": { - "version": "7.5.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.2.tgz", - "integrity": "sha512-SoftuTROv/cRjCze/scjGyiDtcUyxw1rgYQSZY7XTmtR5hX+dm76iDbTH8TkLPHCQmlbQVSSbNZCPM2hb0knnQ==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dependencies": { "lru-cache": "^6.0.0" }, @@ -6142,24 +6159,18 @@ } }, "node_modules/semver-truncate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/semver-truncate/-/semver-truncate-2.0.0.tgz", - "integrity": "sha512-Rh266MLDYNeML5h90ttdMwfXe1+Nc4LAWd9X1KdJe8pPHP4kFmvLZALtsMNHNdvTyQygbEC0D59sIz47DIaq8w==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/semver-truncate/-/semver-truncate-3.0.0.tgz", + "integrity": "sha512-LJWA9kSvMolR51oDE6PN3kALBNaUdkxzAGcexw8gjMA8xr5zUqK0JiR3CgARSqanYF3Z1YHvsErb1KDgh+v7Rg==", "dev": true, "dependencies": { - "semver": "^6.0.0" + "semver": "^7.3.5" }, "engines": { - "node": ">=8" - } - }, - "node_modules/semver-truncate/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/serialize-javascript": { @@ -6366,13 +6377,18 @@ "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==" }, "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dependencies": { - "safe-buffer": "~5.2.0" + "safe-buffer": "~5.1.0" } }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, "node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -6540,17 +6556,7 @@ "tar-stream": "^2.1.4" } }, - "node_modules/tar-fs/node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/tar-fs/node_modules/tar-stream": { + "node_modules/tar-stream": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", @@ -6565,10 +6571,23 @@ "node": ">=6" } }, + "node_modules/tar-stream/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/terser": { - "version": "5.18.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.18.0.tgz", - "integrity": "sha512-pdL757Ig5a0I+owA42l6tIuEycRuM7FPY4n62h44mRLRfnOxJkkOHd6i89dOpwZlpF6JXBwaAHF6yWzFrt+QyA==", + "version": "5.19.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.19.1.tgz", + "integrity": "sha512-27hxBUVdV6GoNg1pKQ7Z5cbR6V9txPVyBA+FQw3BaZ1Wuzvztce5p156DaP0NVZNrMZZ+6iG9Syf7WgMNKDg2Q==", "dev": true, "dependencies": { "@jridgewell/source-map": "^0.3.3", @@ -6656,33 +6675,6 @@ "xtend": "~4.0.1" } }, - "node_modules/through2/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/through2/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/through2/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/tmp": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", @@ -6786,9 +6778,9 @@ } }, "node_modules/tslib": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", - "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.0.tgz", + "integrity": "sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA==", "dev": true }, "node_modules/tsscmp": { @@ -6888,9 +6880,9 @@ } }, "node_modules/typed-rest-client": { - "version": "1.8.9", - "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.9.tgz", - "integrity": "sha512-uSmjE38B80wjL85UFX3sTYEUlvZ1JgCRhsWj/fJ4rZ0FqDUFoIuodtiVeE+cUqiVTOKPdKrp/sdftD15MDek6g==", + "version": "1.8.11", + "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.11.tgz", + "integrity": "sha512-5UvfMpd1oelmUPRbbaVnq+rHP7ng2cE4qoQkQeAqxRL6PklkxsM0g32/HL0yfvruK6ojQ5x8EE+HF4YV6DtuCA==", "dev": true, "dependencies": { "qs": "^6.9.1", @@ -6899,9 +6891,9 @@ } }, "node_modules/typescript": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.3.tgz", - "integrity": "sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==", + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz", + "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -7073,9 +7065,9 @@ } }, "node_modules/webpack": { - "version": "5.87.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.87.0.tgz", - "integrity": "sha512-GOu1tNbQ7p1bDEoFRs2YPcfyGs8xq52yyPBZ3m2VGnXGtV9MxjrkABHm4V9Ia280OefsSLzvbVoXcfLxjKY/Iw==", + "version": "5.88.2", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.88.2.tgz", + "integrity": "sha512-JmcgNZ1iKj+aiR0OvTYtWQqJwq37Pf683dY9bVORwVbUrDhLhdn/PlO2sHsFHPkj7sHNQF3JwaAkp49V+Sq1tQ==", "dev": true, "dependencies": { "@types/eslint-scope": "^3.7.3", @@ -7234,15 +7226,6 @@ "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", "dev": true }, - "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/workerpool": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", diff --git a/components/clarity-vscode/package.json b/components/clarity-vscode/package.json index 408707b08..6b1b7d8ad 100644 --- a/components/clarity-vscode/package.json +++ b/components/clarity-vscode/package.json @@ -1,14 +1,14 @@ { "name": "clarity-lsp", "displayName": "Clarity", - "description": "Provides validation, syntax highlighting, code completion, and debugging for Clarity smart contracts", + "description": "Syntax highlighting, code completion, documentation, and debugging for Clarity smart contracts. Build decentralized applications on Stacks.", "author": "Hiro Systems", "publisher": "hirosystems", "icon": "assets/images/clarity-logo.png", "homepage": "https://github.com/hirosystems/clarinet", "bugs": "https://github.com/hirosystems/clarinet/issues", "license": "GPL-3.0-only", - "version": "1.7.0", + "version": "1.7.2", "workspaces": [ "client", "server", @@ -37,14 +37,12 @@ "Debuggers" ], "keywords": [ - "blockchain", "clarity", - "bitcoin", "stacks", "smart contract", "lsp", - "stx", - "btc" + "bitcoin", + "blockchain" ], "galleryBanner": { "color": "#242424", diff --git a/components/clarity-vscode/web-extension.code-workspace b/components/clarity-vscode/web-extension.code-workspace index 1cc29bc97..5c9cd5042 100644 --- a/components/clarity-vscode/web-extension.code-workspace +++ b/components/clarity-vscode/web-extension.code-workspace @@ -10,7 +10,7 @@ "settings": { "rust-analyzer.cargo.noDefaultFeatures": true, "rust-analyzer.cargo.features": ["clarity-lsp/wasm"], - "rust-analyzer.checkOnSave.overrideCommand": [ + "rust-analyzer.check.overrideCommand": [ "cargo", "check", "--no-default-features", diff --git a/components/stacks-devnet-js/Cargo.toml b/components/stacks-devnet-js/Cargo.toml index b98b6349e..2bb503c5f 100644 --- a/components/stacks-devnet-js/Cargo.toml +++ b/components/stacks-devnet-js/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "stacks-devnet-js" -version = "1.7.0" +version = "1.7.1" license = "ISC" edition = "2018" exclude = ["index.node"] diff --git a/components/stacks-devnet-js/package-lock.json b/components/stacks-devnet-js/package-lock.json index 6adcc2ced..b98fa6742 100644 --- a/components/stacks-devnet-js/package-lock.json +++ b/components/stacks-devnet-js/package-lock.json @@ -1,12 +1,12 @@ { "name": "@hirosystems/stacks-devnet-js", - "version": "1.6.2", + "version": "1.7.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@hirosystems/stacks-devnet-js", - "version": "1.6.2", + "version": "1.7.0", "hasInstallScript": true, "license": "GPL-3.0", "dependencies": { @@ -869,10 +869,9 @@ } }, "node_modules/make-dir/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "license": "ISC", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "bin": { "semver": "bin/semver.js" } @@ -1198,10 +1197,9 @@ "license": "MIT" }, "node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "license": "ISC", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dependencies": { "lru-cache": "^6.0.0" }, @@ -2121,9 +2119,9 @@ }, "dependencies": { "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" } } }, @@ -2323,9 +2321,9 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "requires": { "lru-cache": "^6.0.0" } diff --git a/components/stacks-devnet-js/package.json b/components/stacks-devnet-js/package.json index 5ab5a13ad..2276a5406 100644 --- a/components/stacks-devnet-js/package.json +++ b/components/stacks-devnet-js/package.json @@ -1,6 +1,6 @@ { "name": "@hirosystems/stacks-devnet-js", - "version": "1.7.0", + "version": "1.7.1", "description": "stacks-devnet-js is a library for writing end to end tests for protocols interacting with the Stacks blockchain and the Bitcoin blockchain.", "author": "Ludo Galabru", "repository": "https://github.com/hirosystems/clarinet/tree/main/components/stacks-devnet-js", diff --git a/components/stacks-network/Cargo.toml b/components/stacks-network/Cargo.toml index 0f876a6ee..e4bbdce86 100644 --- a/components/stacks-network/Cargo.toml +++ b/components/stacks-network/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "stacks-network" -version = "1.7.0" +version = "1.7.1" edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/components/stacks-network/src/orchestrator.rs b/components/stacks-network/src/orchestrator.rs index e49f4025b..6668f2e82 100644 --- a/components/stacks-network/src/orchestrator.rs +++ b/components/stacks-network/src/orchestrator.rs @@ -1400,6 +1400,13 @@ events_keys = ["*"] )) } + let mut env = vec![ + "STACKS_LOG_PP=1".to_string(), + "STACKS_LOG_DEBUG=1".to_string(), + // "BLOCKSTACK_USE_TEST_GENESIS_CHAINSTATE=1".to_string(), + ]; + env.append(&mut devnet_config.subnet_node_env_vars.clone()); + let config = Config { labels: Some(labels), image: Some(devnet_config.subnet_node_image_url.clone()), @@ -1411,11 +1418,7 @@ events_keys = ["*"] "start".into(), "--config=/src/subnet-node/Subnet.toml".into(), ]), - env: Some(vec![ - "STACKS_LOG_PP=1".to_string(), - "STACKS_LOG_DEBUG=1".to_string(), - // "BLOCKSTACK_USE_TEST_GENESIS_CHAINSTATE=1".to_string(), - ]), + env: Some(env), host_config: Some(HostConfig { auto_remove: Some(true), binds: Some(binds), @@ -1560,6 +1563,7 @@ events_keys = ["*"] format!("PG_DATABASE={}", devnet_config.stacks_api_postgres_database), format!("STACKS_CHAIN_ID=2147483648"), format!("V2_POX_MIN_AMOUNT_USTX=90000000260"), + format!("FAUCET_PRIVATE_KEY={}", devnet_config.faucet_secret_key_hex), "NODE_ENV=development".to_string(), ]; env.append(&mut devnet_config.stacks_api_env_vars.clone()); @@ -1657,39 +1661,43 @@ events_keys = ["*"] let mut labels = HashMap::new(); labels.insert("project".to_string(), self.network_name.to_string()); + let mut env = vec![ + format!("STACKS_CORE_RPC_HOST=subnet-node.{}", self.network_name), + format!("STACKS_BLOCKCHAIN_API_DB=pg"), + format!( + "STACKS_CORE_RPC_PORT={}", + devnet_config.subnet_node_rpc_port + ), + format!( + "STACKS_BLOCKCHAIN_API_PORT={}", + devnet_config.subnet_api_port + ), + format!("STACKS_BLOCKCHAIN_API_HOST=0.0.0.0"), + format!( + "STACKS_CORE_EVENT_PORT={}", + devnet_config.subnet_api_events_port + ), + format!("STACKS_CORE_EVENT_HOST=0.0.0.0"), + format!("STACKS_API_ENABLE_FT_METADATA=1"), + format!("PG_HOST=postgres.{}", self.network_name), + format!("PG_PORT={}", devnet_config.postgres_port), + format!("PG_USER={}", devnet_config.postgres_username), + format!("PG_PASSWORD={}", devnet_config.postgres_password), + format!("PG_DATABASE={}", devnet_config.subnet_api_postgres_database), + format!("STACKS_CHAIN_ID=0x55005500"), + format!("CUSTOM_CHAIN_IDS=testnet=0x55005500"), + format!("V2_POX_MIN_AMOUNT_USTX=90000000260"), + "NODE_ENV=development".to_string(), + ]; + env.append(&mut devnet_config.subnet_api_env_vars.clone()); + let config = Config { labels: Some(labels), image: Some(devnet_config.subnet_api_image_url.clone()), // domainname: Some(self.network_name.to_string()), tty: None, exposed_ports: Some(exposed_ports), - env: Some(vec![ - format!("STACKS_CORE_RPC_HOST=subnet-node.{}", self.network_name), - format!("STACKS_BLOCKCHAIN_API_DB=pg"), - format!( - "STACKS_CORE_RPC_PORT={}", - devnet_config.subnet_node_rpc_port - ), - format!( - "STACKS_BLOCKCHAIN_API_PORT={}", - devnet_config.subnet_api_port - ), - format!("STACKS_BLOCKCHAIN_API_HOST=0.0.0.0"), - format!( - "STACKS_CORE_EVENT_PORT={}", - devnet_config.subnet_api_events_port - ), - format!("STACKS_CORE_EVENT_HOST=0.0.0.0"), - format!("STACKS_API_ENABLE_FT_METADATA=1"), - format!("PG_HOST=postgres.{}", self.network_name), - format!("PG_PORT={}", devnet_config.postgres_port), - format!("PG_USER={}", devnet_config.postgres_username), - format!("PG_PASSWORD={}", devnet_config.postgres_password), - format!("PG_DATABASE={}", devnet_config.subnet_api_postgres_database), - format!("STACKS_CHAIN_ID=2147483648"), - format!("V2_POX_MIN_AMOUNT_USTX=90000000260"), - "NODE_ENV=development".to_string(), - ]), + env: Some(env), host_config: Some(HostConfig { auto_remove: Some(true), network_mode: Some(self.network_name.clone()), @@ -1921,7 +1929,7 @@ events_keys = ["*"] format!("NEXT_PUBLIC_DEFAULT_POLLING_INTERVAL={}", 5000), "NODE_ENV=development".to_string(), ]; - env.append(&mut devnet_config.stacks_node_env_vars.clone()); + env.append(&mut devnet_config.stacks_explorer_env_vars.clone()); let config = Config { labels: Some(labels), diff --git a/docs/faq.md b/docs/faq.md index 858a4e666..b6ec3e232 100644 --- a/docs/faq.md +++ b/docs/faq.md @@ -28,7 +28,7 @@ Clarinet integrate uses Docker to run Bitcoin, Stacks nodes, and other services. #### **Where can I find the logs for Clarinet Integrate?** -If you're using Docker desktop, you can open the UI and select `stacks-node` container to see its logs. +If you're using Docker desktop, you can open the UI and select `stacks-node` container to see its logs. If you are not using the Docker desktop, use the following command in your terminal: diff --git a/docs/feature-guides/analyze-with-check-checker.md b/docs/feature-guides/analyze-with-check-checker.md index 0d0beb7d5..c8d47939c 100644 --- a/docs/feature-guides/analyze-with-check-checker.md +++ b/docs/feature-guides/analyze-with-check-checker.md @@ -11,6 +11,7 @@ The check-checker is a static analysis pass you can use to help find potential v * [Annotations](#annotations) ## Enable static analysis pass + To enable the static analysis pass, add the following lines to your Clarinet.toml file: ```toml diff --git a/docs/feature-guides/chainhooks.md b/docs/feature-guides/chainhooks.md index c8ac92b53..aab4fbdda 100644 --- a/docs/feature-guides/chainhooks.md +++ b/docs/feature-guides/chainhooks.md @@ -4,7 +4,7 @@ title: Chainhooks ## Overview -Chainhooks are a powerful feature that enables you to automatically trigger an action based upon a predicate event occurring. Adhering to an event-based architecture, chainhooks allow you to pre-determine an underlying set of events that, when triggered, set into motion a logical series of follow-on steps and actions to address the specific event that was triggered. +Chainhooks are a powerful feature that enables you to automatically trigger an action based upon a predicate event occurring. Adhering to an event-based architecture, chainhooks allow you to pre-determine an underlying set of events that, when triggered, set into motion a logical series of follow-on steps and actions to address the specific event that was triggered. *Topics covered in this guide*: @@ -12,7 +12,6 @@ Chainhooks are a powerful feature that enables you to automatically trigger an a * [Use chainhooks](#using-chainhooks) * [References](#references) - ## Design Chainhooks were designed with a very specific set of requirements and limitations to make them easy to work with in a development environment. These constraints include portability and performance. diff --git a/docs/feature-guides/clarinet-deploy.md b/docs/feature-guides/clarinet-deploy.md index 6063917c1..88b1fdcab 100644 --- a/docs/feature-guides/clarinet-deploy.md +++ b/docs/feature-guides/clarinet-deploy.md @@ -12,7 +12,6 @@ Deployment Plans are reproducible deployment steps that publish a collection of * [Plan primitives](#deployment-plan-primitives) * [References](#references) - ## Design The default deployment plan of every Clarinet project is contained within specifications set inside certain files. In addition to this default deployment plan, the user can manually configure each plan, adding additional transactions or contract calls, across multiple Stacks or Bitcoin blocks. @@ -29,7 +28,6 @@ You can commit, audit, and test contracts without including any secrets in the D | wait for block | - Test or automate contract deployment across multiple Stacks or Bitcoin blocks | | send STX | - send stacks to an address or contract | - ## References For a more detailed discussion of how to use Deployment Plans, please see the following resources: diff --git a/docs/feature-guides/extend-clarinet.md b/docs/feature-guides/extend-clarinet.md index 00a792936..80e900640 100644 --- a/docs/feature-guides/extend-clarinet.md +++ b/docs/feature-guides/extend-clarinet.md @@ -4,13 +4,13 @@ title: Extend Clarinet Extend Clarinet to integrate clarity contracts with your own tooling and workflow. - *Topics covered in this guide*: * [Use clarinet run command](#clarinet-run) * [Standalone plugin deployment](#standalone-plugin) ## Clarinet run + | Name | wallet access | disk write | disk read | Deployment | Description | | ------------------------- | ------------- | ---------- | --------- | --------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | | stacksjs-helper-generator | no | yes | no | https://deno.land/x/clarinet@v0.29.0/ext/stacksjs-helper-generator.ts | Facilitates contract integration by generating some typescript constants that can be used with stacks.js. Never hard code a stacks address again! | @@ -19,10 +19,11 @@ Extend Clarinet to integrate clarity contracts with your own tooling and workflo Extensions are run with the following syntax: ``` -$ clarinet run --allow-write https://deno.land/x/clarinet@v0.29.0/ext/stacksjs-helper-generator.ts +clarinet run --allow-write https://deno.land/x/clarinet@v0.29.0/ext/stacksjs-helper-generator.ts ``` ## Standalone plugin -An extension can be deployed as a standalone plugin on [Deno](https://deno.land/), or can also just be a local file if it includes sensitive / private setup informations. + +An extension can be deployed as a standalone plugin on [Deno](https://deno.land/), or can also just be a local file if it includes sensitive / private setup information. As illustrated in the example above, permissions (wallet / disk read / disk write) are declared using command flags. If at runtime, the Clarinet extension is trying to write to disk, read disk, or access wallets without permission, the script will end up failing. diff --git a/docs/how-to-guides/how-to-add-contract.md b/docs/how-to-guides/how-to-add-contract.md index 5e6d948ed..d57f58a67 100644 --- a/docs/how-to-guides/how-to-add-contract.md +++ b/docs/how-to-guides/how-to-add-contract.md @@ -14,7 +14,7 @@ Clarinet can handle adding a new contract and its configuration to your project. You can use the command below to add a new contract. ```bash -$ clarinet contract new bbtc +clarinet contract new bbtc ``` Clarinet will add two files to your project: @@ -41,8 +41,9 @@ Clarinet will also add your contract configuration in the `Clarinet.toml`. ```toml [contracts.my-contract] path = "contracts/my-contract.clar" +clarity_version = 2 +epoch = 2.4 ``` You can add contracts to your project by adding the files manually; however, you must make sure to add the appropriate configuration to `Clarinet.toml` for Clarinet to recognize the contracts. - diff --git a/docs/how-to-guides/how-to-check-contract.md b/docs/how-to-guides/how-to-check-contract.md index faa0b7145..d0d06e134 100644 --- a/docs/how-to-guides/how-to-check-contract.md +++ b/docs/how-to-guides/how-to-check-contract.md @@ -13,7 +13,7 @@ Clarinet provides syntax and semantics checkers for Clarity. You can verify if the Clarity code in your project is valid with the command listed below. ```bash -$ clarinet check +clarinet check ``` This command uses the `Clarinet.toml` file to locate and analyze all the contracts in the project. @@ -28,7 +28,7 @@ The command may also report warnings indicating the code is valid. You may also perform a syntax-check on a single file by using the command below. ```bash -$ clarinet check +clarinet check ``` The command output will be a success message if there are no syntax errors. @@ -39,4 +39,3 @@ The command output will be a success message if there are no syntax errors. Any syntactical errors in the Clarity code will be reported, but type-checking and other semantic checks are not performed. This is because Clarinet is only looking at this one contract and needs the full context to perform a complete check. - diff --git a/docs/how-to-guides/how-to-deploy-contracts.md b/docs/how-to-guides/how-to-deploy-contracts.md index 5e08610f7..50a3acd24 100644 --- a/docs/how-to-guides/how-to-deploy-contracts.md +++ b/docs/how-to-guides/how-to-deploy-contracts.md @@ -14,7 +14,7 @@ You can use Clarinet to publish your contracts to the public testnet or mainnet The first step is to generate a deployment plan with the command below (note: replace `--mainnet` with `--testnet` to deploy to the latter). Please specify a cost strategy to incentivize miners to carry your transaction (either `--low-cost`, `--medium-cost`, `--high-cost`, or `--manual-cost`). The final command might look like: ```bash -$ clarinet deployment generate --mainnet --medium-cost +clarinet deployment generate --mainnet --medium-cost ``` # Deploy @@ -22,5 +22,5 @@ $ clarinet deployment generate --mainnet --medium-cost After **carefully** reviewing (and updating if needed) the generated deployment plan, you can use the command below to handle the deployments of your contracts. ```bash -$ clarinet deployment apply --mainnet +clarinet deployment apply --mainnet ``` diff --git a/docs/how-to-guides/how-to-deploy-with-subnets.md b/docs/how-to-guides/how-to-deploy-with-subnets.md index b5c59ee98..eecb94bec 100644 --- a/docs/how-to-guides/how-to-deploy-with-subnets.md +++ b/docs/how-to-guides/how-to-deploy-with-subnets.md @@ -24,7 +24,7 @@ You can use the `Devnet.toml` to customize the subnet-node (miner, etc). Spin up your subnet node with the command below. ```bash -$ clarinet integrate +clarinet integrate ``` You can find more information on using and interacting with Subnets in the [subnets repository](https://github.com/hirosystems/stacks-subnets). diff --git a/docs/how-to-guides/how-to-test-contract.md b/docs/how-to-guides/how-to-test-contract.md index b255790c6..559e11836 100644 --- a/docs/how-to-guides/how-to-test-contract.md +++ b/docs/how-to-guides/how-to-test-contract.md @@ -41,7 +41,7 @@ Our `counter` application keeps track of an initialized value, allows for increm ### Unit tests for `counter` example -When you created your Clarity contract with `$ clarinet contract new `, Clarinet automatically created a test file for the contract within the tests directory: `tests/my-projects_test.ts`. Other files under the `tests/` directory following the Deno test naming convention will also be included: +When you created your Clarity contract with `clarinet contract new `, Clarinet automatically created a test file for the contract within the tests directory: `tests/my-projects_test.ts`. Other files under the `tests/` directory following the Deno test naming convention will also be included: - named test.{ts, tsx, mts, js, mjs, jsx, cjs, cts}, - or ending with .test.{ts, tsx, mts, js, mjs, jsx, cjs, cts}, @@ -84,7 +84,7 @@ Clarinet.test({ We run this test with ```zsh -$ clarinet test +clarinet test ``` For a complete list of classes, objects, and interfaces available, see [Deno's Clarinet module index](https://deno.land/x/clarinet/index.ts). @@ -168,15 +168,15 @@ Here, variously, we: To help developers maximizing their test coverage, Clarinet can produce a `lcov` report, using the following option: ```bash -$ clarinet test --coverage +clarinet test --coverage ``` From there, you can use the `lcov` tooling suite to produce HTML reports. ```bash -$ brew install lcov -$ genhtml --branch-coverage -o coverage coverage.lcov -$ open coverage/index.html +brew install lcov +genhtml --branch-coverage -o coverage coverage.lcov +open coverage/index.html ``` ![lcov](../images/lcov.png) @@ -186,7 +186,7 @@ $ open coverage/index.html Clarinet can also be used for optimizing costs. When you execute a test suite, Clarinet keeps track of all costs being computed when executing the `contract-call`, and display the most expensive ones in a table: ```bash -$ clarinet test --cost +clarinet test --cost ``` The `--cost` option can be used in conjunction with `--watch` and filters to maximize productivity, as illustrated here: @@ -199,7 +199,7 @@ The Clarinet console is an interactive Clarity Read, Evaluate, Print, Loop (REPL automatically loaded into memory. ```bash -$ clarinet console +clarinet console ``` You can use the `::help` command in the console for a list of valid commands, which can control the state of the REPL chain, and let you advance the chain tip. Additionally, you may enter Clarity commands into the console and observe @@ -216,7 +216,7 @@ You can use Clarinet to deploy your contracts to your own local offline environm Use the following command: ```bash -$ clarinet integrate +clarinet integrate ``` Make sure that you have a working installation of Docker running locally. @@ -300,9 +300,9 @@ callee_filter = false As a next step, we may generate a deployment plan for this project. -If running `$ clarinet integrate` for the first time, this file should be created by Clarinet. +If running `clarinet integrate` for the first time, this file should be created by Clarinet. -In addition, you may run `$ clarinet deployment generate --devnet` to create or overwrite. +In addition, you may run `clarinet deployment generate --devnet` to create or overwrite. ```yaml --- diff --git a/docs/troubleshooting.md b/docs/troubleshooting.md index a34be5420..62d210f6f 100644 --- a/docs/troubleshooting.md +++ b/docs/troubleshooting.md @@ -5,7 +5,7 @@ title: Troubleshooting This page answers some common issues you may encounter when using Clarinet. Updates will be made to this page regularly as we receive feedback and comments from our developer community. -## I am unable to run Clarinet after installation. +## I am unable to run Clarinet after installation. > **_NOTE:_** > @@ -20,7 +20,7 @@ To manually add the directory to your path: 1. Open "System Properties." 2. Click the "Environment Variables" button under "System variables." -3. Select "Path" and then click "Edit." +3. Select "Path" and then click "Edit." 4. Click the "New" button and add "C:\Program Files\clarinet\bin." 5. Follow the on-screen prompts and click "OK" after each prompt. 6. Restart your shell/VSCode. @@ -55,8 +55,6 @@ If you have trouble setting up docker on your Linux machine, follow the steps be ``` 2. Install docker-desktop by following the steps [here](https://docs.docker.com/desktop/install/ubuntu/#install-docker-desktop). - 3. You will need to update the settings in the Clarinet project. You can do this by navigating to the Clarinet/components/clarinet-cli/examples/simple-nft/settings/Devnet.toml file. In the `[Devnet]` settings, add the following setting and replace `username` with your username: - `docker_host = "/home//.docker/desktop/docker.sock"` 4. Save the `Devnet.toml` and run docker now.