From 19a7bf7d323dd60f74ef1bf722aa941f91da0e41 Mon Sep 17 00:00:00 2001 From: Cleve Stuart Date: Fri, 7 Feb 2025 10:19:29 -0500 Subject: [PATCH 1/6] Automate CLI releases. --- .github/workflows/release.yml | 84 +++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 .github/workflows/release.yml diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 00000000..8ee10f89 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,84 @@ +name: NPM Release + +on: + push: + branches: + - main + paths: + - 'package.json' + workflow_dispatch: + inputs: + version: + description: 'Test Version' + required: false + +jobs: + release: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Check Version Change + id: check_version + run: | + if [[ "${{ github.event_name }}" == "workflow_dispatch" ]]; then + if [[ -n "${{ github.event.inputs.version }}" ]]; then + echo "version_changed=true" >> $GITHUB_OUTPUT + echo "new_version=${{ github.event.inputs.version }}" >> $GITHUB_OUTPUT + else + echo "No version specified for manual dispatch" + exit 0 + fi + else + PREVIOUS_VERSION=$(git show HEAD~1:package.json | jq -r .version) + CURRENT_VERSION=$(jq -r .version package.json) + if [ "$PREVIOUS_VERSION" != "$CURRENT_VERSION" ]; then + echo "version_changed=true" >> $GITHUB_OUTPUT + echo "new_version=$CURRENT_VERSION" >> $GITHUB_OUTPUT + fi + fi + + - name: Generate Release Notes + if: steps.check_version.outputs.version_changed == 'true' + run: | + if [ -f "RELEASE_NOTES.md" ] && grep -q "## \[${{ steps.check_version.outputs.new_version }}\]" RELEASE_NOTES.md; then + sed -n "/## \[${{ steps.check_version.outputs.new_version }}\]/,/## \[/p" RELEASE_NOTES.md | sed '$d' > release_body.md + else + echo "### Automated Release Notes" > release_body.md + echo "" >> release_body.md + echo "#### Changes" >> release_body.md + git log $(git describe --tags --abbrev=0)..HEAD --pretty=format:"- %s" >> release_body.md + fi + + - name: Create Git Tag + if: steps.check_version.outputs.version_changed == 'true' + run: | + git config user.name github-actions + git config user.email github-actions@github.com + git tag v${{ steps.check_version.outputs.new_version }} + git push origin v${{ steps.check_version.outputs.new_version }} + + - name: Setup Node + if: steps.check_version.outputs.version_changed == 'true' + uses: actions/setup-node@v4 + with: + node-version: 'lts/*' + registry-url: 'https://registry.npmjs.org' + + - name: Publish to NPM + if: steps.check_version.outputs.version_changed == 'true' + run: npm publish --dry-run + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} + + - name: Create GitHub Release + if: steps.check_version.outputs.version_changed == 'true' + uses: actions/create-release@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: v${{ steps.check_version.outputs.new_version }} + release_name: Release ${{ steps.check_version.outputs.new_version }} + body_path: release_body.md \ No newline at end of file From 018c92fde272e287512b080ef6ce5dbb9ce3250e Mon Sep 17 00:00:00 2001 From: Cleve Stuart Date: Fri, 7 Feb 2025 10:22:16 -0500 Subject: [PATCH 2/6] Format changes --- .github/workflows/release.yml | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 8ee10f89..9d9bd83c 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -5,11 +5,11 @@ on: branches: - main paths: - - 'package.json' + - "package.json" workflow_dispatch: inputs: version: - description: 'Test Version' + description: "Test Version" required: false jobs: @@ -19,7 +19,7 @@ jobs: - uses: actions/checkout@v4 with: fetch-depth: 0 - + - name: Check Version Change id: check_version run: | @@ -39,7 +39,7 @@ jobs: echo "new_version=$CURRENT_VERSION" >> $GITHUB_OUTPUT fi fi - + - name: Generate Release Notes if: steps.check_version.outputs.version_changed == 'true' run: | @@ -51,7 +51,7 @@ jobs: echo "#### Changes" >> release_body.md git log $(git describe --tags --abbrev=0)..HEAD --pretty=format:"- %s" >> release_body.md fi - + - name: Create Git Tag if: steps.check_version.outputs.version_changed == 'true' run: | @@ -59,20 +59,20 @@ jobs: git config user.email github-actions@github.com git tag v${{ steps.check_version.outputs.new_version }} git push origin v${{ steps.check_version.outputs.new_version }} - + - name: Setup Node if: steps.check_version.outputs.version_changed == 'true' uses: actions/setup-node@v4 with: - node-version: 'lts/*' - registry-url: 'https://registry.npmjs.org' - + node-version: "lts/*" + registry-url: "https://registry.npmjs.org" + - name: Publish to NPM if: steps.check_version.outputs.version_changed == 'true' run: npm publish --dry-run env: NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} - + - name: Create GitHub Release if: steps.check_version.outputs.version_changed == 'true' uses: actions/create-release@v1 @@ -81,4 +81,4 @@ jobs: with: tag_name: v${{ steps.check_version.outputs.new_version }} release_name: Release ${{ steps.check_version.outputs.new_version }} - body_path: release_body.md \ No newline at end of file + body_path: release_body.md From 29625562906cff199c84e58267113a14fbf81592 Mon Sep 17 00:00:00 2001 From: Ashton Eby Date: Fri, 7 Feb 2025 16:33:16 -0800 Subject: [PATCH 3/6] iterate on release (not yet tested) --- .github/workflows/release.yml | 71 ++++++++++++----------------------- scripts/check-version.js | 51 +++++++++++++++++++++++++ 2 files changed, 76 insertions(+), 46 deletions(-) create mode 100644 scripts/check-version.js diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 9d9bd83c..243a95bc 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -6,11 +6,6 @@ on: - main paths: - "package.json" - workflow_dispatch: - inputs: - version: - description: "Test Version" - required: false jobs: release: @@ -18,63 +13,47 @@ jobs: steps: - uses: actions/checkout@v4 with: - fetch-depth: 0 + # we need two commits + fetch-depth: 2 - - name: Check Version Change - id: check_version - run: | - if [[ "${{ github.event_name }}" == "workflow_dispatch" ]]; then - if [[ -n "${{ github.event.inputs.version }}" ]]; then - echo "version_changed=true" >> $GITHUB_OUTPUT - echo "new_version=${{ github.event.inputs.version }}" >> $GITHUB_OUTPUT - else - echo "No version specified for manual dispatch" - exit 0 - fi - else - PREVIOUS_VERSION=$(git show HEAD~1:package.json | jq -r .version) - CURRENT_VERSION=$(jq -r .version package.json) - if [ "$PREVIOUS_VERSION" != "$CURRENT_VERSION" ]; then - echo "version_changed=true" >> $GITHUB_OUTPUT - echo "new_version=$CURRENT_VERSION" >> $GITHUB_OUTPUT - fi - fi + - name: Setup Node + uses: actions/setup-node@v4 + with: + node-version: "lts/*" + registry-url: "https://registry.npmjs.org" - - name: Generate Release Notes - if: steps.check_version.outputs.version_changed == 'true' - run: | - if [ -f "RELEASE_NOTES.md" ] && grep -q "## \[${{ steps.check_version.outputs.new_version }}\]" RELEASE_NOTES.md; then - sed -n "/## \[${{ steps.check_version.outputs.new_version }}\]/,/## \[/p" RELEASE_NOTES.md | sed '$d' > release_body.md - else - echo "### Automated Release Notes" > release_body.md - echo "" >> release_body.md - echo "#### Changes" >> release_body.md - git log $(git describe --tags --abbrev=0)..HEAD --pretty=format:"- %s" >> release_body.md - fi + - name: Check version + id: check_version + run: ./scripts/check-version.js + + # - name: Generate Release Notes + # if: steps.check_version.outputs.do_publish == 'true' + # run: | + # if [ -f "RELEASE_NOTES.md" ] && grep -q "## \[${{ steps.check_version.outputs.new_version }}\]" RELEASE_NOTES.md; then + # sed -n "/## \[${{ steps.check_version.outputs.new_version }}\]/,/## \[/p" RELEASE_NOTES.md | sed '$d' > release_body.md + # else + # echo "### Automated Release Notes" > release_body.md + # echo "" >> release_body.md + # echo "#### Changes" >> release_body.md + # git log $(git describe --tags --abbrev=0)..HEAD --pretty=format:"- %s" >> release_body.md + # fi - name: Create Git Tag - if: steps.check_version.outputs.version_changed == 'true' + if: steps.check_version.outputs.do_publish == 'true' run: | git config user.name github-actions git config user.email github-actions@github.com git tag v${{ steps.check_version.outputs.new_version }} git push origin v${{ steps.check_version.outputs.new_version }} - - name: Setup Node - if: steps.check_version.outputs.version_changed == 'true' - uses: actions/setup-node@v4 - with: - node-version: "lts/*" - registry-url: "https://registry.npmjs.org" - - name: Publish to NPM - if: steps.check_version.outputs.version_changed == 'true' + if: steps.check_version.outputs.do_publish == 'true' run: npm publish --dry-run env: NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} - name: Create GitHub Release - if: steps.check_version.outputs.version_changed == 'true' + if: steps.check_version.outputs.do_publish == 'true' uses: actions/create-release@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/scripts/check-version.js b/scripts/check-version.js new file mode 100644 index 00000000..f538fa66 --- /dev/null +++ b/scripts/check-version.js @@ -0,0 +1,51 @@ +#!/usr/bin/env node + +/* eslint no-console: 0 */ + +import { exec as _exec } from "node:child_process"; +import { appendFileSync, readFileSync } from "node:fs"; +import { join } from "node:path"; +import { promisify } from "node:util"; + +import * as semver from "semver"; + +const exec = promisify(_exec); +const __dirname = import.meta.dirname; + +const writeOutput = (key, value) => { + appendFileSync(process.env.GITHUB_OUTPUT, `${key}=${value}\n`); +}; + +const versions = JSON.parse( + (await exec("npm view fauna-shell versions --json")).stdout, +); +const proposedVersionString = JSON.parse( + readFileSync(join(__dirname, "../package.json"), { encoding: "utf8" }), +).version; +const proposedVersion = semver.valid(semver.clean(proposedVersionString)); +const currentVersion = versions[versions.length - 1]; + +console.log(`Current published version: ${currentVersion}`); +console.log(`Proposed version to publish: ${proposedVersion}`); + +if (proposedVersion === null) + throw new Error( + `Could not parse proposed version "${proposedVersion}" from package.json as a semantic version.`, + ); + +if (versions.includes(proposedVersion)) + throw new Error( + `Version "${proposedVersion}" from package.json has already been published.`, + ); + +if (semver.lt(proposedVersion, currentVersion)) + throw new Error( + `Version "${proposedVersion}" is a lower semantic version number than the current version "${currentVersion}".`, + ); + +console.log(`Passed version check.`); + +if (process.env.GITHUB_ACTIONS) { + writeOutput("do_publish", "true"); + writeOutput("new_version", proposedVersion); +} From 5443f86a933ea7f789cb363b7c4c45e9c3e8f4e1 Mon Sep 17 00:00:00 2001 From: Ashton Eby Date: Mon, 10 Feb 2025 16:24:44 -0800 Subject: [PATCH 4/6] add changesets for features in next release --- .changeset/README.md | 8 + .changeset/config.json | 11 + .changeset/forty-seas-pull.md | 7 + .changeset/lovely-suns-suffer.md | 7 + .changeset/modern-garlics-fetch.md | 15 + .changeset/small-mugs-drum.md | 8 + .changeset/sour-zoos-sniff.md | 5 + package-lock.json | 848 +++++++++++++++++++++++++++++ package.json | 1 + 9 files changed, 910 insertions(+) create mode 100644 .changeset/README.md create mode 100644 .changeset/config.json create mode 100644 .changeset/forty-seas-pull.md create mode 100644 .changeset/lovely-suns-suffer.md create mode 100644 .changeset/modern-garlics-fetch.md create mode 100644 .changeset/small-mugs-drum.md create mode 100644 .changeset/sour-zoos-sniff.md diff --git a/.changeset/README.md b/.changeset/README.md new file mode 100644 index 00000000..e5b6d8d6 --- /dev/null +++ b/.changeset/README.md @@ -0,0 +1,8 @@ +# Changesets + +Hello and welcome! This folder has been automatically generated by `@changesets/cli`, a build tool that works +with multi-package repos, or single-package repos to help you version and publish your code. You can +find the full documentation for it [in our repository](https://github.com/changesets/changesets) + +We have a quick list of common questions to get you started engaging with this project in +[our documentation](https://github.com/changesets/changesets/blob/main/docs/common-questions.md) diff --git a/.changeset/config.json b/.changeset/config.json new file mode 100644 index 00000000..6b372552 --- /dev/null +++ b/.changeset/config.json @@ -0,0 +1,11 @@ +{ + "$schema": "https://unpkg.com/@changesets/config@3.0.5/schema.json", + "changelog": "@changesets/cli/changelog", + "commit": false, + "fixed": [], + "linked": [], + "access": "restricted", + "baseBranch": "main", + "updateInternalDependencies": "patch", + "ignore": [] +} diff --git a/.changeset/forty-seas-pull.md b/.changeset/forty-seas-pull.md new file mode 100644 index 00000000..0a04e200 --- /dev/null +++ b/.changeset/forty-seas-pull.md @@ -0,0 +1,7 @@ +--- +"fauna-shell": patch +--- + +Redact secrets in verbose logging. + +Logging the resolved CLI config could log out credentials if you had stored credentials in your config file. The CLI already redacts secrets that are logged by the verbose logger while parsing arguments/flags/environment variables, but this change additionally redacts secrets that would otherwise be logged by the verbose logger while parsing config files. diff --git a/.changeset/lovely-suns-suffer.md b/.changeset/lovely-suns-suffer.md new file mode 100644 index 00000000..33d55f9a --- /dev/null +++ b/.changeset/lovely-suns-suffer.md @@ -0,0 +1,7 @@ +--- +"fauna-shell": patch +--- + +Fix incorrect nodeJS minimum version + +The documentation and package.json's "engine" field asserted that the CLI could be run with versions of nodeJS >= 20.x.x, but it makes use of APIs (specifically, the single-executable application API) that aren't available until nodeJS >= 20.18.x. This change updates the docs, "engines" field in the package.json file, and changes our test runner to test at 20.18 instead of the latest 20.x to prevent additions of further backwards-incompatible changes. diff --git a/.changeset/modern-garlics-fetch.md b/.changeset/modern-garlics-fetch.md new file mode 100644 index 00000000..d2ea9453 --- /dev/null +++ b/.changeset/modern-garlics-fetch.md @@ -0,0 +1,15 @@ +--- +"fauna-shell": patch +--- + +Remove `--json` flag on commands that don't support it. + +The `--json` flag was presented as an option at the top level (modifying all commands), but only has an effect for a subset of commands. After this change, only the following commands have a `--json` field: + +- database create +- database list +- export get +- export create +- export list +- query +- shell diff --git a/.changeset/small-mugs-drum.md b/.changeset/small-mugs-drum.md new file mode 100644 index 00000000..d47e5bbf --- /dev/null +++ b/.changeset/small-mugs-drum.md @@ -0,0 +1,8 @@ +--- +"fauna-shell": patch +--- + +Improve export user experience. + +- Export create now allows users to provide S3 URIs as a target to export to (with the flag `--desination`) in addition to providing each part independently (`--bucket`, `--path`) +- Export create now supports user-provided idempotency tokens. Customers can use this to retry failed requests without triggering additional export workflows. diff --git a/.changeset/sour-zoos-sniff.md b/.changeset/sour-zoos-sniff.md new file mode 100644 index 00000000..e13e8c41 --- /dev/null +++ b/.changeset/sour-zoos-sniff.md @@ -0,0 +1,5 @@ +--- +"fauna-shell": patch +--- + +Support user-provided query retry and back-off settings for query and shell commands. For queries using FQLv10, `--max-attempts`, `--max-backoff`, `--timeout`, and `--max-contention-retries` are supported. For queries using FQLv4, `--timeout` and `--max-contention-retries` are supported. diff --git a/package-lock.json b/package-lock.json index 1fc3943b..084e413c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -31,6 +31,7 @@ "fauna": "dist/cli.cjs" }, "devDependencies": { + "@changesets/cli": "^2.27.12", "@eslint/eslintrc": "^3.1.0", "@eslint/js": "^9.16.0", "@fauna/ts-dev-utils": "^0.0.16", @@ -62,12 +63,360 @@ "node": ">=20.18.0" } }, + "node_modules/@babel/runtime": { + "version": "7.26.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.7.tgz", + "integrity": "sha512-AOPI3D+a8dXnja+iwsUqGRjr1BbZIe771sXdapOtYI531gSqpi92vXivKcq2asu/DFpdl1ceFAKZyRzK2PCVcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@balena/dockerignore": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@balena/dockerignore/-/dockerignore-1.0.2.tgz", "integrity": "sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q==", "license": "Apache-2.0" }, + "node_modules/@changesets/apply-release-plan": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/@changesets/apply-release-plan/-/apply-release-plan-7.0.8.tgz", + "integrity": "sha512-qjMUj4DYQ1Z6qHawsn7S71SujrExJ+nceyKKyI9iB+M5p9lCL55afuEd6uLBPRpLGWQwkwvWegDHtwHJb1UjpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@changesets/config": "^3.0.5", + "@changesets/get-version-range-type": "^0.4.0", + "@changesets/git": "^3.0.2", + "@changesets/should-skip-package": "^0.1.1", + "@changesets/types": "^6.0.0", + "@manypkg/get-packages": "^1.1.3", + "detect-indent": "^6.0.0", + "fs-extra": "^7.0.1", + "lodash.startcase": "^4.4.0", + "outdent": "^0.5.0", + "prettier": "^2.7.1", + "resolve-from": "^5.0.0", + "semver": "^7.5.3" + } + }, + "node_modules/@changesets/apply-release-plan/node_modules/prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/@changesets/apply-release-plan/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@changesets/assemble-release-plan": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/@changesets/assemble-release-plan/-/assemble-release-plan-6.0.5.tgz", + "integrity": "sha512-IgvBWLNKZd6k4t72MBTBK3nkygi0j3t3zdC1zrfusYo0KpdsvnDjrMM9vPnTCLCMlfNs55jRL4gIMybxa64FCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@changesets/errors": "^0.2.0", + "@changesets/get-dependents-graph": "^2.1.2", + "@changesets/should-skip-package": "^0.1.1", + "@changesets/types": "^6.0.0", + "@manypkg/get-packages": "^1.1.3", + "semver": "^7.5.3" + } + }, + "node_modules/@changesets/changelog-git": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@changesets/changelog-git/-/changelog-git-0.2.0.tgz", + "integrity": "sha512-bHOx97iFI4OClIT35Lok3sJAwM31VbUM++gnMBV16fdbtBhgYu4dxsphBF/0AZZsyAHMrnM0yFcj5gZM1py6uQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@changesets/types": "^6.0.0" + } + }, + "node_modules/@changesets/cli": { + "version": "2.27.12", + "resolved": "https://registry.npmjs.org/@changesets/cli/-/cli-2.27.12.tgz", + "integrity": "sha512-9o3fOfHYOvBnyEn0mcahB7wzaA3P4bGJf8PNqGit5PKaMEFdsRixik+txkrJWd2VX+O6wRFXpxQL8j/1ANKE9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@changesets/apply-release-plan": "^7.0.8", + "@changesets/assemble-release-plan": "^6.0.5", + "@changesets/changelog-git": "^0.2.0", + "@changesets/config": "^3.0.5", + "@changesets/errors": "^0.2.0", + "@changesets/get-dependents-graph": "^2.1.2", + "@changesets/get-release-plan": "^4.0.6", + "@changesets/git": "^3.0.2", + "@changesets/logger": "^0.1.1", + "@changesets/pre": "^2.0.1", + "@changesets/read": "^0.6.2", + "@changesets/should-skip-package": "^0.1.1", + "@changesets/types": "^6.0.0", + "@changesets/write": "^0.3.2", + "@manypkg/get-packages": "^1.1.3", + "ansi-colors": "^4.1.3", + "ci-info": "^3.7.0", + "enquirer": "^2.4.1", + "external-editor": "^3.1.0", + "fs-extra": "^7.0.1", + "mri": "^1.2.0", + "p-limit": "^2.2.0", + "package-manager-detector": "^0.2.0", + "picocolors": "^1.1.0", + "resolve-from": "^5.0.0", + "semver": "^7.5.3", + "spawndamnit": "^3.0.1", + "term-size": "^2.1.0" + }, + "bin": { + "changeset": "bin.js" + } + }, + "node_modules/@changesets/cli/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@changesets/cli/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@changesets/config": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@changesets/config/-/config-3.0.5.tgz", + "integrity": "sha512-QyXLSSd10GquX7hY0Mt4yQFMEeqnO5z/XLpbIr4PAkNNoQNKwDyiSrx4yd749WddusH1v3OSiA0NRAYmH/APpQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@changesets/errors": "^0.2.0", + "@changesets/get-dependents-graph": "^2.1.2", + "@changesets/logger": "^0.1.1", + "@changesets/types": "^6.0.0", + "@manypkg/get-packages": "^1.1.3", + "fs-extra": "^7.0.1", + "micromatch": "^4.0.8" + } + }, + "node_modules/@changesets/errors": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@changesets/errors/-/errors-0.2.0.tgz", + "integrity": "sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow==", + "dev": true, + "license": "MIT", + "dependencies": { + "extendable-error": "^0.1.5" + } + }, + "node_modules/@changesets/get-dependents-graph": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@changesets/get-dependents-graph/-/get-dependents-graph-2.1.2.tgz", + "integrity": "sha512-sgcHRkiBY9i4zWYBwlVyAjEM9sAzs4wYVwJUdnbDLnVG3QwAaia1Mk5P8M7kraTOZN+vBET7n8KyB0YXCbFRLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@changesets/types": "^6.0.0", + "@manypkg/get-packages": "^1.1.3", + "picocolors": "^1.1.0", + "semver": "^7.5.3" + } + }, + "node_modules/@changesets/get-release-plan": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@changesets/get-release-plan/-/get-release-plan-4.0.6.tgz", + "integrity": "sha512-FHRwBkY7Eili04Y5YMOZb0ezQzKikTka4wL753vfUA5COSebt7KThqiuCN9BewE4/qFGgF/5t3AuzXx1/UAY4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@changesets/assemble-release-plan": "^6.0.5", + "@changesets/config": "^3.0.5", + "@changesets/pre": "^2.0.1", + "@changesets/read": "^0.6.2", + "@changesets/types": "^6.0.0", + "@manypkg/get-packages": "^1.1.3" + } + }, + "node_modules/@changesets/get-version-range-type": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@changesets/get-version-range-type/-/get-version-range-type-0.4.0.tgz", + "integrity": "sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@changesets/git": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@changesets/git/-/git-3.0.2.tgz", + "integrity": "sha512-r1/Kju9Y8OxRRdvna+nxpQIsMsRQn9dhhAZt94FLDeu0Hij2hnOozW8iqnHBgvu+KdnJppCveQwK4odwfw/aWQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@changesets/errors": "^0.2.0", + "@manypkg/get-packages": "^1.1.3", + "is-subdir": "^1.1.1", + "micromatch": "^4.0.8", + "spawndamnit": "^3.0.1" + } + }, + "node_modules/@changesets/logger": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@changesets/logger/-/logger-0.1.1.tgz", + "integrity": "sha512-OQtR36ZlnuTxKqoW4Sv6x5YIhOmClRd5pWsjZsddYxpWs517R0HkyiefQPIytCVh4ZcC5x9XaG8KTdd5iRQUfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "picocolors": "^1.1.0" + } + }, + "node_modules/@changesets/parse": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@changesets/parse/-/parse-0.4.0.tgz", + "integrity": "sha512-TS/9KG2CdGXS27S+QxbZXgr8uPsP4yNJYb4BC2/NeFUj80Rni3TeD2qwWmabymxmrLo7JEsytXH1FbpKTbvivw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@changesets/types": "^6.0.0", + "js-yaml": "^3.13.1" + } + }, + "node_modules/@changesets/parse/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/@changesets/parse/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@changesets/pre": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@changesets/pre/-/pre-2.0.1.tgz", + "integrity": "sha512-vvBJ/If4jKM4tPz9JdY2kGOgWmCowUYOi5Ycv8dyLnEE8FgpYYUo1mgJZxcdtGGP3aG8rAQulGLyyXGSLkIMTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@changesets/errors": "^0.2.0", + "@changesets/types": "^6.0.0", + "@manypkg/get-packages": "^1.1.3", + "fs-extra": "^7.0.1" + } + }, + "node_modules/@changesets/read": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/@changesets/read/-/read-0.6.2.tgz", + "integrity": "sha512-wjfQpJvryY3zD61p8jR87mJdyx2FIhEcdXhKUqkja87toMrP/3jtg/Yg29upN+N4Ckf525/uvV7a4tzBlpk6gg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@changesets/git": "^3.0.2", + "@changesets/logger": "^0.1.1", + "@changesets/parse": "^0.4.0", + "@changesets/types": "^6.0.0", + "fs-extra": "^7.0.1", + "p-filter": "^2.1.0", + "picocolors": "^1.1.0" + } + }, + "node_modules/@changesets/should-skip-package": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@changesets/should-skip-package/-/should-skip-package-0.1.1.tgz", + "integrity": "sha512-H9LjLbF6mMHLtJIc/eHR9Na+MifJ3VxtgP/Y+XLn4BF7tDTEN1HNYtH6QMcjP1uxp9sjaFYmW8xqloaCi/ckTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@changesets/types": "^6.0.0", + "@manypkg/get-packages": "^1.1.3" + } + }, + "node_modules/@changesets/types": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@changesets/types/-/types-6.0.0.tgz", + "integrity": "sha512-b1UkfNulgKoWfqyHtzKS5fOZYSJO+77adgL7DLRDr+/7jhChN+QcHnbjiQVOz/U+Ts3PGNySq7diAItzDgugfQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@changesets/write": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@changesets/write/-/write-0.3.2.tgz", + "integrity": "sha512-kDxDrPNpUgsjDbWBvUo27PzKX4gqeKOlhibaOXDJA6kuBisGqNHv/HwGJrAu8U/dSf8ZEFIeHIPtvSlZI1kULw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@changesets/types": "^6.0.0", + "fs-extra": "^7.0.1", + "human-id": "^1.0.2", + "prettier": "^2.7.1" + } + }, + "node_modules/@changesets/write/node_modules/prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, "node_modules/@cloudcmd/stub": { "version": "2.3.4", "resolved": "https://registry.npmjs.org/@cloudcmd/stub/-/stub-2.3.4.tgz", @@ -569,6 +918,134 @@ "node": ">=8" } }, + "node_modules/@manypkg/find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@manypkg/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.5.5", + "@types/node": "^12.7.1", + "find-up": "^4.1.0", + "fs-extra": "^8.1.0" + } + }, + "node_modules/@manypkg/find-root/node_modules/@types/node": { + "version": "12.20.55", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", + "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@manypkg/find-root/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@manypkg/find-root/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/@manypkg/find-root/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@manypkg/find-root/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@manypkg/find-root/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@manypkg/get-packages": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@manypkg/get-packages/-/get-packages-1.1.3.tgz", + "integrity": "sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.5.5", + "@changesets/types": "^4.0.1", + "@manypkg/find-root": "^1.1.0", + "fs-extra": "^8.1.0", + "globby": "^11.0.0", + "read-yaml-file": "^1.1.0" + } + }, + "node_modules/@manypkg/get-packages/node_modules/@changesets/types": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@changesets/types/-/types-4.1.0.tgz", + "integrity": "sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@manypkg/get-packages/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -1017,6 +1494,16 @@ "node": ">=6" } }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/asn1": { "version": "0.2.6", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", @@ -1091,6 +1578,19 @@ "tweetnacl": "^0.14.3" } }, + "node_modules/better-path-resolve": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/better-path-resolve/-/better-path-resolve-1.0.0.tgz", + "integrity": "sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-windows": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/binary-extensions": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", @@ -1393,6 +1893,22 @@ "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", "license": "ISC" }, + "node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/cli-boxes": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", @@ -1667,6 +2183,16 @@ "node": ">=6" } }, + "node_modules/detect-indent": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", + "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/devlop": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", @@ -1700,6 +2226,19 @@ "node": ">= 8.3" } }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/docker-modem": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/docker-modem/-/docker-modem-5.0.3.tgz", @@ -1774,6 +2313,33 @@ "once": "^1.4.0" } }, + "node_modules/enquirer": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", + "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-colors": "^4.1.1", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/enquirer/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/esbuild": { "version": "0.24.0", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.24.0.tgz", @@ -2059,6 +2625,13 @@ "node": ">=0.10.0" } }, + "node_modules/extendable-error": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/extendable-error/-/extendable-error-0.1.7.tgz", + "integrity": "sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==", + "dev": true, + "license": "MIT" + }, "node_modules/external-editor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", @@ -2242,6 +2815,21 @@ "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", "license": "MIT" }, + "node_modules/fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -2374,6 +2962,27 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", @@ -2472,6 +3081,13 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/human-id": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/human-id/-/human-id-1.0.2.tgz", + "integrity": "sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw==", + "dev": true, + "license": "MIT" + }, "node_modules/husky": { "version": "9.1.7", "resolved": "https://registry.npmjs.org/husky/-/husky-9.1.7.tgz", @@ -2750,6 +3366,19 @@ "node": ">=8" } }, + "node_modules/is-subdir": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-subdir/-/is-subdir-1.2.0.tgz", + "integrity": "sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==", + "dev": true, + "license": "MIT", + "dependencies": { + "better-path-resolve": "1.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/is-unicode-supported": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", @@ -2763,6 +3392,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-wsl": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", @@ -2854,6 +3493,16 @@ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "license": "MIT" }, + "node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, "node_modules/just-extend": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-6.2.0.tgz", @@ -2943,6 +3592,13 @@ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "license": "MIT" }, + "node_modules/lodash.startcase": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz", + "integrity": "sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==", + "dev": true, + "license": "MIT" + }, "node_modules/log-symbols": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", @@ -3370,6 +4026,16 @@ "node": ">=10" } }, + "node_modules/mri": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", + "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -3544,6 +4210,26 @@ "node": ">=0.10.0" } }, + "node_modules/outdent": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/outdent/-/outdent-0.5.0.tgz", + "integrity": "sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/p-filter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-2.1.0.tgz", + "integrity": "sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-map": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -3574,6 +4260,26 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/p-map": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/package-json": { "version": "10.0.1", "resolved": "https://registry.npmjs.org/package-json/-/package-json-10.0.1.tgz", @@ -3592,6 +4298,13 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/package-manager-detector": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-0.2.9.tgz", + "integrity": "sha512-+vYvA/Y31l8Zk8dwxHhL3JfTuHPm6tlxM2A3GeQyl7ovYnSp1+mzAxClxaOr0qO1TtPxbQxetI7v5XqKLJZk7Q==", + "dev": true, + "license": "MIT" + }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -3656,6 +4369,16 @@ "node": ">=16" } }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/pathval": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.0.tgz", @@ -3666,6 +4389,13 @@ "node": ">= 14.16" } }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, "node_modules/picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", @@ -3678,6 +4408,16 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/postject": { "version": "1.0.0-alpha.6", "resolved": "https://registry.npmjs.org/postject/-/postject-1.0.0-alpha.6.tgz", @@ -3844,6 +4584,46 @@ "dev": true, "license": "MIT" }, + "node_modules/read-yaml-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-yaml-file/-/read-yaml-file-1.1.0.tgz", + "integrity": "sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.5", + "js-yaml": "^3.6.1", + "pify": "^4.0.1", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/read-yaml-file/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/read-yaml-file/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, "node_modules/readable-stream": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", @@ -3871,6 +4651,13 @@ "node": ">=8.10.0" } }, + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "dev": true, + "license": "MIT" + }, "node_modules/regex": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/regex/-/regex-5.0.2.tgz", @@ -4149,6 +4936,16 @@ "node": ">=0.3.1" } }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/space-separated-tokens": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", @@ -4159,12 +4956,30 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/spawndamnit": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spawndamnit/-/spawndamnit-3.0.1.tgz", + "integrity": "sha512-MmnduQUuHCoFckZoWnXsTg7JaiLBJrKFj9UI2MbRPGaJeVpsLcVBu6P/IGZovziM/YBsellCmsprgNA+w0CzVg==", + "dev": true, + "license": "SEE LICENSE IN LICENSE", + "dependencies": { + "cross-spawn": "^7.0.5", + "signal-exit": "^4.0.1" + } + }, "node_modules/split-ca": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/split-ca/-/split-ca-1.0.1.tgz", "integrity": "sha512-Q5thBSxp5t8WPTTJQS59LrGqOZqOsrhDGDVm8azCqIBjSBd7nd9o2PM+mDulQQkh8h//4U6hFZnc/mul8t5pWQ==", "license": "ISC" }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true, + "license": "BSD-3-Clause" + }, "node_modules/ssh2": { "version": "1.16.0", "resolved": "https://registry.npmjs.org/ssh2/-/ssh2-1.16.0.tgz", @@ -4258,6 +5073,16 @@ "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -4315,6 +5140,19 @@ "node": ">=6" } }, + "node_modules/term-size": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", + "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/text-table": { "version": "0.2.0", "license": "MIT" @@ -4495,6 +5333,16 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, "node_modules/update-notifier": { "version": "7.3.1", "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-7.3.1.tgz", diff --git a/package.json b/package.json index b2a08797..b456ab2b 100644 --- a/package.json +++ b/package.json @@ -28,6 +28,7 @@ "yargs": "^17.7.2" }, "devDependencies": { + "@changesets/cli": "^2.27.12", "@eslint/eslintrc": "^3.1.0", "@eslint/js": "^9.16.0", "@fauna/ts-dev-utils": "^0.0.16", From e887d3b3c520e0bcd5ca95ea0fd789be36ace938 Mon Sep 17 00:00:00 2001 From: Ashton Eby Date: Mon, 10 Feb 2025 16:26:17 -0800 Subject: [PATCH 5/6] clean up dependencies - remove unused inquirer dependency (all our usages of inquirer use the newer, non-deprecated @inquirer/prompts package). - move @shikijs/cli and eslint to dev dependencies instead of runtime dependencies. --- package.json | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index b456ab2b..3d79b7a1 100644 --- a/package.json +++ b/package.json @@ -10,16 +10,13 @@ "bugs": "https://github.com/fauna/fauna-shell/issues", "dependencies": { "@inquirer/prompts": "^7.0.0", - "@shikijs/cli": "^1.24.0", "awilix": "^12.0.2", "chalk": "^5.3.0", "dockerode": "^4.0.2", - "eslint": "^9.12.0", "esprima": "^4.0.1", "fauna": "^2.4.1", "faunadb": "^4.8.2", "has-ansi": "^6.0.0", - "inquirer": "^12.0.0", "luxon": "^3.5.0", "open": "10.1.0", "shiki": "^1.15.2", @@ -33,6 +30,7 @@ "@eslint/js": "^9.16.0", "@fauna/ts-dev-utils": "^0.0.16", "@inquirer/testing": "^2.1.7", + "@shikijs/cli": "^1.24.0", "@types/chai": "^5.0.0", "@types/mocha": "^10.0.1", "@types/node": "^22.7.5", @@ -40,6 +38,7 @@ "@types/yargs": "^17.0.33", "chai": "^5.1.1", "esbuild": "^0.24.0", + "eslint": "^9.12.0", "eslint-config-prettier": "^9.1.0", "globals": "^15.10.0", "husky": "^9.1.7", From 3dec38cde0cb0cdbfb9992b82a699093ec109a68 Mon Sep 17 00:00:00 2001 From: echo-bravo-yahoo Date: Tue, 11 Feb 2025 10:31:21 -0800 Subject: [PATCH 6/6] Apply suggestions from code review Co-authored-by: James Rodewig --- .changeset/forty-seas-pull.md | 2 +- .changeset/lovely-suns-suffer.md | 4 ++-- .changeset/modern-garlics-fetch.md | 4 ++-- .changeset/small-mugs-drum.md | 6 +++--- .changeset/sour-zoos-sniff.md | 4 +++- 5 files changed, 11 insertions(+), 9 deletions(-) diff --git a/.changeset/forty-seas-pull.md b/.changeset/forty-seas-pull.md index 0a04e200..b0355d4f 100644 --- a/.changeset/forty-seas-pull.md +++ b/.changeset/forty-seas-pull.md @@ -4,4 +4,4 @@ Redact secrets in verbose logging. -Logging the resolved CLI config could log out credentials if you had stored credentials in your config file. The CLI already redacts secrets that are logged by the verbose logger while parsing arguments/flags/environment variables, but this change additionally redacts secrets that would otherwise be logged by the verbose logger while parsing config files. +With verbose logging enabled, the CLI previously logged the full resolved CLI config, which could inadvertently expose account keys and secrets stored in a config file. The CLI masks sensitive information, such as account keys and secrets, when logging details from arguments, flags, or environment variables. This change updates verbose logging to redact account keys and secrets logged from config files. diff --git a/.changeset/lovely-suns-suffer.md b/.changeset/lovely-suns-suffer.md index 33d55f9a..87a31df3 100644 --- a/.changeset/lovely-suns-suffer.md +++ b/.changeset/lovely-suns-suffer.md @@ -2,6 +2,6 @@ "fauna-shell": patch --- -Fix incorrect nodeJS minimum version +Fix incorrect minimum Node.js version -The documentation and package.json's "engine" field asserted that the CLI could be run with versions of nodeJS >= 20.x.x, but it makes use of APIs (specifically, the single-executable application API) that aren't available until nodeJS >= 20.18.x. This change updates the docs, "engines" field in the package.json file, and changes our test runner to test at 20.18 instead of the latest 20.x to prevent additions of further backwards-incompatible changes. +The documentation and package.json's "engines" field previously stated that the CLI could be run with Node.js 20.x.x or later. However, the CLI uses APIs, such as the single-executable application (SEA) API, that aren't available until Node.js 20.18.x. This change updates the documentation, the "engines" field of package.json, and the test runner to test against Node.js 20.18.x to prevent further backward-incompatible changes. diff --git a/.changeset/modern-garlics-fetch.md b/.changeset/modern-garlics-fetch.md index d2ea9453..ccaaa5c1 100644 --- a/.changeset/modern-garlics-fetch.md +++ b/.changeset/modern-garlics-fetch.md @@ -2,9 +2,9 @@ "fauna-shell": patch --- -Remove `--json` flag on commands that don't support it. +Remove the `--json` flag from commands that don't support it. -The `--json` flag was presented as an option at the top level (modifying all commands), but only has an effect for a subset of commands. After this change, only the following commands have a `--json` field: +The `--json` flag was implemented as a top-level option, implying it could be used with all commands. However, it only has an effect for a subset of commands. After this change, only the following commands support the `--json` flag: - database create - database list diff --git a/.changeset/small-mugs-drum.md b/.changeset/small-mugs-drum.md index d47e5bbf..c35759a4 100644 --- a/.changeset/small-mugs-drum.md +++ b/.changeset/small-mugs-drum.md @@ -2,7 +2,7 @@ "fauna-shell": patch --- -Improve export user experience. +Improve the export user experience. -- Export create now allows users to provide S3 URIs as a target to export to (with the flag `--desination`) in addition to providing each part independently (`--bucket`, `--path`) -- Export create now supports user-provided idempotency tokens. Customers can use this to retry failed requests without triggering additional export workflows. +- `fauna export create` allows you to provide a target S3 URI with the `--destination` flag. Previously, you had to provide both the `--bucket` and `--path` separately. +- `fauna export create` now supports custom idempotency tokens with the `--idempotency` flag. You can use the flag to retry requests without triggering duplicate exports. diff --git a/.changeset/sour-zoos-sniff.md b/.changeset/sour-zoos-sniff.md index e13e8c41..4940b7b3 100644 --- a/.changeset/sour-zoos-sniff.md +++ b/.changeset/sour-zoos-sniff.md @@ -2,4 +2,6 @@ "fauna-shell": patch --- -Support user-provided query retry and back-off settings for query and shell commands. For queries using FQLv10, `--max-attempts`, `--max-backoff`, `--timeout`, and `--max-contention-retries` are supported. For queries using FQLv4, `--timeout` and `--max-contention-retries` are supported. +Add retry options for queries. + +The `fauna query` and `fauna shell` commands now support retry flags for throttling and contended transactions. For FQL v10 queries, the following flags are supported: `--max-attempts`, `--max-backoff`, and `--max-contention-retries`. For FQL v4 queries, only `--max-contention-retries` is supported.