diff --git a/.circleci/config.yml b/.circleci/config.yml deleted file mode 100644 index d9006acd060..00000000000 --- a/.circleci/config.yml +++ /dev/null @@ -1,235 +0,0 @@ -orbs: - win: circleci/windows@1.0.0 - -version: 2.1 - -executors: - golang: - docker: - - image: docker.mirror.hashicorp.services/circleci/golang:1.17 - resource_class: medium+ - darwin: - macos: - xcode: "12.0.0" - -commands: - install-go-run-tests-unix: - parameters: - GOOS: - type: string - GOVERSION: - type: string - HOME: - type: string - default: "~" - steps: - - checkout - - run: curl https://dl.google.com/go/go<< parameters.GOVERSION >>.<< parameters.GOOS >>-amd64.tar.gz | tar -C << parameters.HOME >>/ -xz - - run: << parameters.HOME >>/go/bin/go test ./... -coverprofile=coverage.txt -covermode=atomic - install-go-run-tests-windows: - parameters: - GOVERSION: - type: string - steps: - - checkout - - run: curl https://dl.google.com/go/go<< parameters.GOVERSION >>.windows-amd64.zip --output ~/go<< parameters.GOVERSION >>.windows-amd64.zip - - run: unzip ~/go<< parameters.GOVERSION >>.windows-amd64.zip -d ~/ - - run: ~/go/bin/go test ./... -coverprofile=coverage.txt -covermode=atomic - build-and-persist-packer-binary: - parameters: - GOOS: - type: string - GOARCH: - default: "amd64" - type: string - steps: - - checkout - - run: GOOS=<< parameters.GOOS >> GOARCH=<> go build -ldflags="-s -w -X github.com/hashicorp/packer/version.GitCommit=${CIRCLE_SHA1}" -o ./pkg/packer_<< parameters.GOOS >>_<< parameters.GOARCH >> . - - run: zip ./pkg/packer_<< parameters.GOOS >>_<< parameters.GOARCH >>.zip ./pkg/packer_<< parameters.GOOS >>_<< parameters.GOARCH >> - - run: rm ./pkg/packer_<< parameters.GOOS >>_<< parameters.GOARCH >> - - persist_to_workspace: - root: . - paths: - - ./pkg/ - -# Golang CircleCI 2.0 configuration file -# -# Check https://circleci.com/docs/2.0/language-go/ for more details -jobs: - test-linux: - executor: golang - resource_class: large - working_directory: /go/src/github.com/hashicorp/packer - steps: - - checkout - - run: TESTARGS="-coverprofile=coverage.txt -covermode=atomic" make ci - test-darwin: - executor: darwin - working_directory: ~/go/github.com/hashicorp/packer - steps: - - install-go-run-tests-unix: - GOOS: darwin - GOVERSION: "1.17" - test-windows: - executor: - name: win/vs2019 - shell: bash.exe - steps: - - install-go-run-tests-windows: - GOVERSION: "1.17" - check-mod-tidy: - executor: golang - working_directory: /go/src/github.com/hashicorp/packer - steps: - - checkout - - run: go mod tidy -compat=1.17 - check-lint: - executor: golang - resource_class: xlarge - steps: - - checkout - - run: git fetch --all - - run: - command: make ci-lint - no_output_timeout: 30m - check-fmt: - executor: golang - steps: - - checkout - - run: make fmt-check - check-generate: - executor: golang - working_directory: /go/src/github.com/hashicorp/packer - steps: - - checkout - - run: make generate-check - build_linux: - executor: golang - steps: - - build-and-persist-packer-binary: - GOOS: linux - build_windows: - executor: golang - working_directory: /go/src/github.com/hashicorp/packer - steps: - - build-and-persist-packer-binary: - GOOS: windows - build_darwin: - executor: golang - working_directory: /go/src/github.com/hashicorp/packer - steps: - - build-and-persist-packer-binary: - GOOS: darwin - build_darwin_arm64: - executor: golang - working_directory: /go/src/github.com/hashicorp/packer - steps: - - build-and-persist-packer-binary: - GOOS: darwin - GOARCH: arm64 - build_freebsd: - executor: golang - working_directory: /go/src/github.com/hashicorp/packer - steps: - - build-and-persist-packer-binary: - GOOS: freebsd - build_solaris: - executor: golang - working_directory: /go/src/github.com/hashicorp/packer - steps: - - build-and-persist-packer-binary: - GOOS: solaris - build_openbsd: - executor: golang - working_directory: /go/src/github.com/hashicorp/packer - steps: - - build-and-persist-packer-binary: - GOOS: openbsd - store_artifacts: - executor: golang - steps: - - attach_workspace: - at: . - - store_artifacts: - path: ./pkg/ - destination: / - build-website-docker-image: - docker: - - image: docker.mirror.hashicorp.services/circleci/buildpack-deps - shell: /usr/bin/env bash -euo pipefail -c - steps: - - checkout - - setup_remote_docker - - run: - name: Build Docker Image if Necessary - command: | - IMAGE_TAG=$(cat website/Dockerfile website/package-lock.json | sha256sum | awk '{print $1;}') - echo "Using $IMAGE_TAG" - if curl https://hub.docker.com/v2/repositories/hashicorp/packer-website/tags/$IMAGE_TAG -fsL > /dev/null; then - echo "Dependencies have not changed, not building a new website docker image." - else - cd website/ - docker login -u $WEBSITE_DOCKER_USER -p $WEBSITE_DOCKER_PASS - docker build -t hashicorp/packer-website:$IMAGE_TAG . - docker tag hashicorp/packer-website:$IMAGE_TAG hashicorp/packer-website:latest - docker push hashicorp/packer-website - fi - algolia-index: - docker: - - image: docker.mirror.hashicorp.services/node:14 - steps: - - checkout - - run: - name: Push content to Algolia Index - command: | - if [ "$CIRCLE_REPOSITORY_URL" != "git@github.com:hashicorp/packer.git" ]; then - echo "Not Packer OSS Repo, not indexing Algolia" - exit 0 - fi - cd website/ - npm install - node scripts/index_search_content.js - -workflows: - version: 2 - test: - jobs: - - test-linux - - test-darwin - - test-windows - check-code: - jobs: - - check-lint - - check-fmt - - check-mod-tidy - - check-generate - build_packer_binaries: - jobs: - - build_linux - - build_darwin - - build_darwin_arm64 - - build_windows - - build_freebsd - - build_openbsd - - build_solaris - - store_artifacts: - requires: - - build_linux - - build_darwin - - build_darwin_arm64 - - build_windows - - build_freebsd - - build_openbsd - - build_solaris - website: - jobs: - - build-website-docker-image: - filters: - branches: - only: - - master - - algolia-index: - filters: - branches: - only: - - stable-website diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 81f4c8fb31f..ea25cd0ff83 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -216,6 +216,13 @@ the back-and-forth as we make sure that we understand the changes fully. Please bear with us, and please know that we appreciate the time and energy you put into the project. +### PR Checks + +The following checks run when a PR is opened: + +- Contributor License Agreement (CLA): If this is your first contribution to Packer you will be asked to sign the CLA. +- Tests: tests include unit tests, documentation checks, and code formatting checks, and all checks must pass before a PR can be merged. + #### Working on forks The easiest way to work on a fork is to set it as a remote of the Packer diff --git a/.github/workflows/acceptance-test.yml b/.github/workflows/acceptance-test.yml new file mode 100644 index 00000000000..02ac4d95929 --- /dev/null +++ b/.github/workflows/acceptance-test.yml @@ -0,0 +1,93 @@ +# +# This GitHub action runs Packer's acceptance tests every night. +# Failures are reported to slack. +# + +name: "Acceptance Test" + +on: + schedule: + # Runs against the default branch every day at midnight + - cron: "0 0 * * *" + +jobs: + get-go-version: + runs-on: ubuntu-latest + outputs: + go-version: ${{ steps.get-go-version.outputs.go-version }} + steps: + - uses: actions/checkout@v2 + - name: 'Determine Go version' + id: get-go-version + # We use .go-version as our source of truth for current Go + # version, because "goenv" can react to it automatically. + run: | + echo "Building with Go $(cat .go-version)" + echo "::set-output name=go-version::$(cat .go-version)" + acceptance-test: + runs-on: ubuntu-latest + name: Acceptance Test + needs: get-go-version + env: + # AWS Creds for Assume Role + AWS_ROLE_ARN: ${{ secrets.AWS_ROLE_ARN }} + AWS_ACCESS_KEY_ID: ${{ secrets.TESTACC_AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.TESTACC_AWS_SECRET_ACCESS_KEY }} + AWS_REGION: ${{ secrets.TESTACC_AWS_REGION }} + # HCP Creds for Acceptance Tests + HCP_CLIENT_ID: ${{ secrets.HCP_CLIENT_ID }} + HCP_CLIENT_SECRET: ${{ secrets.HCP_CLIENT_SECRET }} + HCP_ORG_ID: ${{ secrets.HCP_ORG_ID }} + HCP_PROJECT_ID: ${{ secrets.HCP_PROJECT_ID }} + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-go@v2 + with: + go-version: ${{ needs.get-go-version.outputs.go-version }} + - name: IAM Assume Role + uses: aws-actions/configure-aws-credentials@v1 + with: + role-to-assume: ${{ env.AWS_ROLE_ARN }} + aws-region: ${{ env.AWS_REGION }} + aws-access-key-id: ${{ env.AWS_ACCESS_KEY_ID }} + aws-secret-access-key: ${{ env.AWS_SECRET_ACCESS_KEY }} + role-duration-seconds: 3600 + - name: Install gotestsum + run: go install gotest.tools/gotestsum@latest + - name: Run acceptance tests per module + run: | + mkdir -p /tmp/test-results + make dev + PACKER_ACC=1 gotestsum --format=short-verbose --junitfile /tmp/test-results/gotestsum-report.xml -- -timeout=120m -p 2 $(go list ./... | grep -v inspec | grep -v profitbricks | grep -v oneandone) + # Send a slack notification if either job defined above fails + slack-notify: + needs: + - get-go-version + - acceptance-test + if: always() && (needs.get-go-version.result == 'failure' || needs.acceptance-test.result == 'failure') + runs-on: ubuntu-latest + steps: + - name: Send slack notification on failure + uses: slackapi/slack-github-action@v1.18.0 + with: + payload: | + { + "text": ":alert: Packer Nightly Acceptance Tests *FAILED* :alert:", + "attachments": [ + { + "color": "#C41E3A", + "blocks": [ + { + "type": "section", + "text": { + "type": "mrkdwn", + "text": "Branch: `${{ github.ref_name }}`\nRef: ${{ github.event.pull_request.html_url || github.event.head_commit.url }}\nWorkflow: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}" + } + } + ] + } + ] + } + env: + SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} + SLACK_WEBHOOK_TYPE: INCOMING_WEBHOOK \ No newline at end of file diff --git a/.github/workflows/algolia-index.yml b/.github/workflows/algolia-index.yml new file mode 100644 index 00000000000..dc5bddbeaca --- /dev/null +++ b/.github/workflows/algolia-index.yml @@ -0,0 +1,27 @@ +# +# This GitHub action pushes content to the Algolia Index. +# + +name: "Algolia index" + +on: + push: + branches: + # Runs on push events to the stable-website branch + - 'stable-website' + +jobs: + algolia-index: + runs-on: ubuntu-latest + name: Push content to Algolia Index + if: github.repository == 'hashicorp/packer' && github.ref_name == 'stable-website' + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-node@v2 + with: + node-version: '14' + - run: | + cd website/ + npm install -g npm@latest + npm install + npx ts-node --skip-ignore -P ./scripts/tsconfig.json ./scripts/index_search_content.ts diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 00000000000..9def7c99927 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,258 @@ +# +# This GitHub action builds Packer binaries, linux packages, +# and Docker images from source, and uploads them to GitHub artifacts. +# Note that artifacts available via GitHub Artifacts are not codesigned or notarized. +# + +name: build + +on: [ workflow_dispatch, push, workflow_call ] + +env: + REPO_NAME: "packer" + GO_TAGS: "" + +jobs: + get-go-version: + runs-on: ubuntu-latest + outputs: + go-version: ${{ steps.get-go-version.outputs.go-version }} + steps: + - uses: actions/checkout@v2 + - name: 'Determine Go version' + id: get-go-version + # We use .go-version as our source of truth for current Go + # version, because "goenv" can react to it automatically. + run: | + echo "Building with Go $(cat .go-version)" + echo "::set-output name=go-version::$(cat .go-version)" + + get-product-version: + runs-on: ubuntu-latest + outputs: + product-version: ${{ steps.get-product-version.outputs.product-version }} + steps: + - uses: actions/checkout@v2 + - name: get product version + id: get-product-version + run: | + make version + echo "::set-output name=product-version::$(make version)" + + generate-metadata-file: + needs: + - get-product-version + runs-on: ubuntu-latest + outputs: + filepath: ${{ steps.generate-metadata-file.outputs.filepath }} + steps: + - name: 'Checkout directory' + uses: actions/checkout@v2 + - name: Generate metadata file + id: generate-metadata-file + uses: hashicorp/actions-generate-metadata@main + with: + version: ${{ needs.get-product-version.outputs.product-version }} + product: ${{ env.REPO_NAME }} + + - uses: actions/upload-artifact@v2 + with: + name: metadata.json + path: ${{ steps.generate-metadata-file.outputs.filepath }} + + set-ld-flags: + needs: get-product-version + runs-on: ubuntu-latest + outputs: + ldflags: ${{ steps.generate-ld-flags.outputs.ldflags }} + steps: + - uses: actions/checkout@v2 + - name: 'Generate ld flags' + id: generate-ld-flags + run: | + project="$(go list -m)" + sha="$(git rev-parse HEAD)" + echo "::set-output name=ldflags::"-s -w -X \'$project/version.GitCommit=$sha\'"" + + build-other: + needs: + - get-product-version + - get-go-version + - set-ld-flags + runs-on: ubuntu-latest + strategy: + matrix: + goos: [ freebsd, windows, netbsd, openbsd, solaris ] + goarch: [ "386", "amd64", "arm" ] + go: [ "${{ needs.get-go-version.outputs.go-version }}" ] + exclude: + - goos: solaris + goarch: 386 + - goos: solaris + goarch: arm + - goos: windows + goarch: arm + fail-fast: true + + name: Go ${{ matrix.go }} ${{ matrix.goos }} ${{ matrix.goarch }} build + env: + GOPRIVATE: "github.com/hashicorp" + GO111MODULE: on + LD_FLAGS: ${{ needs.set-ld-flags.outputs.ldflags }} + steps: + - uses: actions/checkout@v2 + - name: Setup go + uses: actions/setup-go@v2 + with: + go-version: ${{ matrix.go }} + - name: Go Build + env: + GOOS: ${{ matrix.goos }} + GOARCH: ${{ matrix.goarch }} + CGO_ENABLED: 0 + run: | + mkdir -p dist out + unset GOPATH; + go build -v -tags "${{ env.GO_TAGS }}" -ldflags "${{ env.LD_FLAGS }}" -o dist/ . + zip -r -j out/${{ env.REPO_NAME }}_${{ needs.get-product-version.outputs.product-version }}_${{ matrix.goos }}_${{ matrix.goarch }}.zip dist/ + - uses: actions/upload-artifact@v2 + with: + name: ${{ env.REPO_NAME }}_${{ needs.get-product-version.outputs.product-version }}_${{ matrix.goos }}_${{ matrix.goarch }}.zip + path: out/${{ env.REPO_NAME }}_${{ needs.get-product-version.outputs.product-version }}_${{ matrix.goos }}_${{ matrix.goarch }}.zip + + build-linux: + needs: + - get-product-version + - get-go-version + - set-ld-flags + runs-on: ubuntu-latest + strategy: + matrix: + goos: [ linux ] + goarch: [ "arm", "arm64", "386", "amd64" ] + go: [ "${{ needs.get-go-version.outputs.go-version }}" ] + fail-fast: true + + name: Go ${{ matrix.go }} ${{ matrix.goos }} ${{ matrix.goarch }} build + + env: + GOPRIVATE: "github.com/hashicorp" + GO111MODULE: on + LD_FLAGS: ${{ needs.set-ld-flags.outputs.ldflags }} + + steps: + - uses: actions/checkout@v2 + - name: Setup go + uses: actions/setup-go@v2 + with: + go-version: ${{ matrix.go }} + - name: Go Build + env: + GOOS: ${{ matrix.goos }} + GOARCH: ${{ matrix.goarch }} + CGO_ENABLED: 0 + run: | + mkdir -p dist out + unset GOPATH; + go build -v -tags "${{ env.GO_TAGS }}" -ldflags "${{ env.LD_FLAGS }}" -o dist/ . + zip -r -j out/${{ env.REPO_NAME }}_${{ needs.get-product-version.outputs.product-version }}_${{ matrix.goos }}_${{ matrix.goarch }}.zip dist/ + - uses: actions/upload-artifact@v2 + with: + name: ${{ env.REPO_NAME }}_${{ needs.get-product-version.outputs.product-version }}_${{ matrix.goos }}_${{ matrix.goarch }}.zip + path: out/${{ env.REPO_NAME }}_${{ needs.get-product-version.outputs.product-version }}_${{ matrix.goos }}_${{ matrix.goarch }}.zip + + - name: Linux Packaging + uses: hashicorp/actions-packaging-linux@v1 + with: + name: ${{ env.REPO_NAME }} + description: "HashiCorp Packer - A tool for creating identical machine images for multiple platforms from a single source configuration" + arch: ${{ matrix.goarch }} + version: ${{ needs.get-product-version.outputs.product-version }} + maintainer: "HashiCorp" + homepage: "https://www.packer.io/docs" + license: "MPL-2.0" + binary: "dist/${{ env.REPO_NAME }}" + deb_depends: "openssl" + rpm_depends: "openssl" + config_dir: ".release/linux/package/" + preinstall: ".release/linux/preinst" + postremove: ".release/linux/postrm" + - name: Add Linux Package names to env + run: | + echo "RPM_PACKAGE=$(basename out/*.rpm)" >> $GITHUB_ENV + echo "DEB_PACKAGE=$(basename out/*.deb)" >> $GITHUB_ENV + - uses: actions/upload-artifact@v2 + with: + name: ${{ env.RPM_PACKAGE }} + path: out/${{ env.RPM_PACKAGE }} + - uses: actions/upload-artifact@v2 + with: + name: ${{ env.DEB_PACKAGE }} + path: out/${{ env.DEB_PACKAGE }} + + build-darwin: + needs: + - get-product-version + - get-go-version + - set-ld-flags + runs-on: macos-latest + strategy: + matrix: + goos: [ darwin ] + goarch: [ "amd64", "arm64" ] + go: [ "${{ needs.get-go-version.outputs.go-version }}" ] + fail-fast: true + name: Go ${{ matrix.go }} ${{ matrix.goos }} ${{ matrix.goarch }} build + + env: + GOPRIVATE: "github.com/hashicorp" + GO111MODULE: on + LD_FLAGS: ${{ needs.set-ld-flags.outputs.ldflags }} + + steps: + - uses: actions/checkout@v2 + - name: Setup go + uses: actions/setup-go@v2 + with: + go-version: ${{ matrix.go }} + - name: Go Build + env: + GOOS: ${{ matrix.goos }} + GOARCH: ${{ matrix.goarch }} + CGO_ENABLED: 0 + run: | + mkdir -p dist out + unset GOPATH; + go build -v -tags "${{ env.GO_TAGS }} netcgo" -ldflags "${{ env.LD_FLAGS }}" -o dist/ . + zip -r -j out/${{ env.REPO_NAME }}_${{ needs.get-product-version.outputs.product-version }}_${{ matrix.goos }}_${{ matrix.goarch }}.zip dist/ + - uses: actions/upload-artifact@v2 + with: + name: ${{ env.REPO_NAME }}_${{ needs.get-product-version.outputs.product-version }}_${{ matrix.goos }}_${{ matrix.goarch }}.zip + path: out/${{ env.REPO_NAME }}_${{ needs.get-product-version.outputs.product-version }}_${{ matrix.goos }}_${{ matrix.goarch }}.zip + + build-docker: + name: Docker light ${{ matrix.arch }} build + needs: + - get-product-version + - build-linux + runs-on: ubuntu-latest + strategy: + matrix: + arch: [ "arm", "arm64", "386", "amd64" ] + env: + version: ${{ needs.get-product-version.outputs.product-version }} + steps: + - uses: actions/checkout@v2 + - name: Docker Build (Action) + uses: hashicorp/actions-docker-build@v1 + with: + version: ${{ env.version }} + target: release-light + arch: ${{ matrix.arch }} + tags: | + docker.io/hashicorp/${{ env.REPO_NAME }}:light + docker.io/hashicorp/${{ env.REPO_NAME }}:light-${{ env.version }} + docker.io/hashicorp/${{ env.REPO_NAME }}:${{ env.version }} + public.ecr.aws/hashicorp/${{ env.REPO_NAME }}:light + public.ecr.aws/hashicorp/${{ env.REPO_NAME }}:light-${{ env.version }} + public.ecr.aws/hashicorp/${{ env.REPO_NAME }}:${{ env.version }} diff --git a/.github/workflows/go-test.yml b/.github/workflows/go-test.yml new file mode 100644 index 00000000000..44e7fefa8a4 --- /dev/null +++ b/.github/workflows/go-test.yml @@ -0,0 +1,38 @@ +# +# This GitHub action runs Packer go tests across +# Windows, Linux, and MacOS runners. +# + +name: "Go Test" + +on: [ workflow_dispatch, push ] + +jobs: + linux-go-tests: + runs-on: ubuntu-latest + container: + image: ghcr.io/ghcri/golang:1.17 + name: Linux go tests + steps: + - uses: actions/checkout@v2 + - run: TESTARGS="-coverprofile=coverage.txt -covermode=atomic" make ci + darwin-go-tests: + runs-on: macos-latest + name: Darwin go tests + env: + PACKER_GITHUB_API_TOKEN: ${{ secrets.GITHUB_TOKEN }} + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-go@v2 + with: + go-version: '1.17' + - run: go test ./... -coverprofile=coverage.txt -covermode=atomic + windows-go-tests: + runs-on: windows-latest + name: Windows go tests + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-go@v2 + with: + go-version: '1.17' + - run: go test ./... -coverprofile=coverage.txt -covermode=atomic \ No newline at end of file diff --git a/.github/workflows/go-validate.yml b/.github/workflows/go-validate.yml new file mode 100644 index 00000000000..c386cceaaf0 --- /dev/null +++ b/.github/workflows/go-validate.yml @@ -0,0 +1,50 @@ +# +# This GitHub action runs basic linting checks for Packer. +# + +name: "Go Validate" + +on: [ workflow_dispatch, push ] + +jobs: + check-mod-tidy: + runs-on: ubuntu-latest + name: Go Mod Tidy + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-go@v2 + with: + go-version: '1.17' + - run: go mod tidy + check-lint: + runs-on: ubuntu-latest + name: Lint + steps: + - uses: actions/checkout@v2 + with: + fetch-depth: 0 + - uses: actions/setup-go@v2 + with: + go-version: '1.17' + - run: echo "$GITHUB_SHA" + - run: git fetch --all + - run: echo $(git merge-base origin/master $GITHUB_SHA) + - run: make ci-lint + check-fmt: + runs-on: ubuntu-latest + name: Fmt check + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-go@v2 + with: + go-version: '1.17' + - run: make fmt-check + check-generate: + runs-on: ubuntu-latest + name: Generate check + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-go@v2 + with: + go-version: '1.17' + - run: make generate-check diff --git a/.github/workflows/nightly-release-readme.md b/.github/workflows/nightly-release-readme.md new file mode 100644 index 00000000000..4f92515642a --- /dev/null +++ b/.github/workflows/nightly-release-readme.md @@ -0,0 +1,5 @@ +Nightly releases are snapshots of the development activity on the Packer project that may include new features and bug fixes scheduled for upcoming [releases](https://github.com/hashicorp/packer/milestones). These releases are made available to make it easier for users to test their existing build configurations against the latest Packer code base for potential issues or to experiment with new features, with a chance to provide feedback on ways to improve the changes before being released. + +As these releases are snapshots of the latest code, you may encounter an issue compared to the latest stable release. Users are encouraged to run nightly releases in a non production environment. If you encounter an issue, please check our [issue tracker](https://github.com/hashicorp/packer/issues) to see if the issue has already been reported; if a report hasn't been made, please report it so we can review the issue and make any needed fixes. + +**Note**: Nightly releases are only available via GitHub Releases, and artifacts are not codesigned or notarized. Distribution via other [Release Channels](https://www.hashicorp.com/official-release-channels) such as the Releases Site or Homebrew is not yet supported. diff --git a/.github/workflows/nightly-release.yml b/.github/workflows/nightly-release.yml new file mode 100644 index 00000000000..c64eab96f04 --- /dev/null +++ b/.github/workflows/nightly-release.yml @@ -0,0 +1,110 @@ +# +# This GitHub action triggers a fresh set of Packer builds +# and publishes them to GitHub Releases under the `nightly` tag. +# Note that artifacts available via GitHub Releases are not codesigned or notarized. +# Failures are reported to slack. +# + +name: Nightly Release + +on: + schedule: + # Runs against the default branch every day at midnight + - cron: "0 0 * * *" + workflow_dispatch: + + +jobs: + # Build a fresh set of artifacts + build-artifacts: + uses: hashicorp/packer/.github/workflows/build.yml@master + github-release: + needs: build-artifacts + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Download built artifacts + uses: actions/download-artifact@v2 + with: + path: out/ + # Set BUILD_OUTPUT_LIST to out\-.\*,out\... + # This is needed to attach the build artifacts to the GitHub Release + - name: Set BUILD_OUTPUT_LIST + run: | + echo "$(ls -xm1 out/)" > tmp.txt + cat tmp.txt | sed 's:.*:out/&/*:' > tmp2.txt + echo "BUILD_OUTPUT_LIST=$(cat tmp2.txt | tr '\n' ',' | perl -ple 'chop')" >> $GITHUB_ENV + rm -rf tmp.txt && rm -rf tmp2.txt + - name: Advance nightly tag + uses: actions/github-script@v3 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + script: | + try { + await github.git.deleteRef({ + owner: context.repo.owner, + repo: context.repo.repo, + ref: "tags/nightly" + }) + } catch (e) { + console.log("Warning: The nightly tag doesn't exist yet, so there's nothing to do. Trace: " + e) + } + await github.git.createRef({ + owner: context.repo.owner, + repo: context.repo.repo, + ref: "refs/tags/nightly", + sha: context.sha + }) + # This will create a new GitHub Release called `nightly` + # If a release with this name already exists, it will overwrite the existing data + - name: Create a nightly GitHub prerelease + id: create_prerelease + uses: ncipollo/release-action@v1 + with: + name: nightly + artifacts: "${{ env.BUILD_OUTPUT_LIST }}" + tag: nightly + bodyFile: ".github/workflows/nightly-release-readme.md" + prerelease: true + allowUpdates: true + removeArtifacts: true + draft: false + token: ${{ secrets.GITHUB_TOKEN }} + - name: Publish nightly GitHub prerelease + uses: eregon/publish-release@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + release_id: ${{ steps.create_prerelease.outputs.id }} + # Send a slack notification if either job defined above fails + slack-notify: + needs: + - build-artifacts + - github-release + if: always() && (needs.build-artifacts.result == 'failure' || needs.github-release.result == 'failure') + runs-on: ubuntu-latest + steps: + - name: Send slack notification on failure + uses: slackapi/slack-github-action@v1.18.0 + with: + payload: | + { + "text": ":alert: Packer Nightly Release *FAILED* :alert:", + "attachments": [ + { + "color": "#C41E3A", + "blocks": [ + { + "type": "section", + "text": { + "type": "mrkdwn", + "text": "Branch: `${{ github.ref_name }}`\nRef: ${{ github.sha }}\nWorkflow: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}" + } + } + ] + } + ] + } + env: + SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} + SLACK_WEBHOOK_TYPE: INCOMING_WEBHOOK diff --git a/.github/workflows/website-docker-publish.yml b/.github/workflows/website-docker-publish.yml new file mode 100644 index 00000000000..34f60d9a167 --- /dev/null +++ b/.github/workflows/website-docker-publish.yml @@ -0,0 +1,70 @@ +# +# This GitHub action builds, tags, and publishes the Packer +# website docker image when dependencies have changed. +# Failures are reported to slack. +# + +name: "Website Docker Publish" + +on: + push: + # Sequence of patterns matched against refs/heads + branches: + # Push events on master branch + - 'master' + +jobs: + website-docker-publish: + runs-on: ubuntu-latest + name: Build Docker Image if Necessary + env: + DOCKER_USER: ${{ secrets.WEBSITE_DOCKER_USER }} + DOCKER_TOKEN: ${{ secrets.WEBSITE_DOCKER_TOKEN }} + steps: + - uses: actions/checkout@v2 + - uses: docker/login-action@v1 + with: + username: ${{ env.DOCKER_USER }} + password: ${{ env.DOCKER_TOKEN }} + - run: | + IMAGE_TAG=$(cat website/Dockerfile website/package-lock.json | sha256sum | awk '{print $1;}') + echo "Using $IMAGE_TAG" + if curl https://hub.docker.com/v2/repositories/hashicorp/packer-website/tags/$IMAGE_TAG -fsL > /dev/null; then + echo "Dependencies have not changed, not building a new website docker image." + else + cd website/ + docker build -t hashicorp/packer-website:$IMAGE_TAG . + docker tag hashicorp/packer-website:$IMAGE_TAG hashicorp/packer-website:latest + docker push hashicorp/packer-website + fi + # Send a slack notification if the job defined above fails + slack-notify: + needs: + - website-docker-publish + if: always() && (needs.website-docker-publish.result == 'failure') + runs-on: ubuntu-latest + steps: + - name: Send slack notification on failure + uses: slackapi/slack-github-action@v1.18.0 + with: + payload: | + { + "text": ":alert: Packer Website Docker Publish *FAILED* :alert:", + "attachments": [ + { + "color": "#C41E3A", + "blocks": [ + { + "type": "section", + "text": { + "type": "mrkdwn", + "text": "Branch: `${{ github.ref_name }}`\nRef: ${{ github.event.pull_request.html_url || github.event.head_commit.url }}\nWorkflow: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}" + } + } + ] + } + ] + } + env: + SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} + SLACK_WEBHOOK_TYPE: INCOMING_WEBHOOK \ No newline at end of file diff --git a/.go-version b/.go-version new file mode 100644 index 00000000000..a23a1564cd4 --- /dev/null +++ b/.go-version @@ -0,0 +1 @@ +1.17.8 diff --git a/.release/ci.hcl b/.release/ci.hcl new file mode 100644 index 00000000000..2c99b3cfbf3 --- /dev/null +++ b/.release/ci.hcl @@ -0,0 +1,240 @@ +schema = "1" + +project "packer" { + team = "#proj-packer-releases" + slack { + notification_channel = "C032TD9KCMQ" + } + github { + organization = "hashicorp" + repository = "packer" + release_branches = [ + "master" + ] + } +} + +event "merge" { + // "entrypoint" to use if build is not run automatically + // i.e. send "merge" complete signal to orchestrator to trigger build +} + +event "build" { + depends = ["merge"] + action "build" { + organization = "hashicorp" + repository = "packer" + workflow = "build" + } +} + +event "upload-dev" { + depends = ["build"] + action "upload-dev" { + organization = "hashicorp" + repository = "crt-workflows-common" + workflow = "upload-dev" + depends = ["build"] + } + + notification { + on = "fail" + } +} + +event "quality-tests" { + depends = ["upload-dev"] + action "quality-tests" { + organization = "hashicorp" + repository = "crt-workflows-common" + workflow = "quality-tests" + } + + notification { + on = "fail" + } +} + +event "security-scan-binaries" { + depends = ["upload-dev"] + action "security-scan-binaries" { + organization = "hashicorp" + repository = "crt-workflows-common" + workflow = "security-scan-binaries" + config = "security-scan.hcl" + } + + notification { + on = "fail" + } +} + +event "security-scan-containers" { + depends = ["security-scan-binaries"] + action "security-scan-containers" { + organization = "hashicorp" + repository = "crt-workflows-common" + workflow = "security-scan-containers" + config = "security-scan.hcl" + } + + notification { + on = "fail" + } +} + +event "notarize-darwin-amd64" { + depends = ["security-scan-containers"] + action "notarize-darwin-amd64" { + organization = "hashicorp" + repository = "crt-workflows-common" + workflow = "notarize-darwin-amd64" + } + + notification { + on = "fail" + } +} + +event "notarize-windows-386" { + depends = ["notarize-darwin-amd64"] + action "notarize-windows-386" { + organization = "hashicorp" + repository = "crt-workflows-common" + workflow = "notarize-windows-386" + } + + notification { + on = "fail" + } +} + +event "notarize-windows-amd64" { + depends = ["notarize-windows-386"] + action "notarize-windows-amd64" { + organization = "hashicorp" + repository = "crt-workflows-common" + workflow = "notarize-windows-amd64" + } + + notification { + on = "fail" + } +} + +event "sign" { + depends = ["notarize-windows-amd64"] + action "sign" { + organization = "hashicorp" + repository = "crt-workflows-common" + workflow = "sign" + } + + notification { + on = "fail" + } +} + +event "sign-linux-rpms" { + depends = ["sign"] + action "sign-linux-rpms" { + organization = "hashicorp" + repository = "crt-workflows-common" + workflow = "sign-linux-rpms" + } + + notification { + on = "fail" + } +} + +event "verify" { + depends = ["sign-linux-rpms"] + action "verify" { + organization = "hashicorp" + repository = "crt-workflows-common" + workflow = "verify" + } + + notification { + on = "fail" + } +} + +## These are promotion and post-publish events +## they should be added to the end of the file after the verify event stanza. + +event "trigger-staging" { +// This event is dispatched by the bob trigger-promotion command +// and is required - do not delete. +} + +event "promote-staging" { + depends = ["trigger-staging"] + action "promote-staging" { + organization = "hashicorp" + repository = "crt-workflows-common" + workflow = "promote-staging" + } + + notification { + on = "always" + } +} + +event "promote-staging-docker" { + depends = ["promote-staging"] + action "promote-staging-docker" { + organization = "hashicorp" + repository = "crt-workflows-common" + workflow = "promote-staging-docker" + } + + notification { + on = "always" + } +} + +event "trigger-production" { +// This event is dispatched by the bob trigger-promotion command +// and is required - do not delete. +} + +event "promote-production" { + depends = ["trigger-production"] + action "promote-production" { + organization = "hashicorp" + repository = "crt-workflows-common" + workflow = "promote-production" + } + + notification { + on = "always" + } +} + +event "promote-production-docker" { + depends = ["promote-production"] + action "promote-production-docker" { + organization = "hashicorp" + repository = "crt-workflows-common" + workflow = "promote-production-docker" + } + + notification { + on = "always" + } +} + +event "promote-production-packaging" { + depends = ["promote-production-docker"] + action "promote-production-packaging" { + organization = "hashicorp" + repository = "crt-workflows-common" + workflow = "promote-production-packaging" + } + + notification { + on = "always" + } +} \ No newline at end of file diff --git a/.release/docker/README.md b/.release/docker/README.md new file mode 100644 index 00000000000..4fdf9272958 --- /dev/null +++ b/.release/docker/README.md @@ -0,0 +1,99 @@ +# Packer Docker Container + +The root of this repository contains the officially supported HashiCorp Dockerfile to build the hashicorp/packer docker image. The `dev` docker image should be built for local dev and testing, while the production docker image, `release`, is built in CI and makes use of CI-built binaries. The `official` docker image is built using the official binaries from releases.hashicorp.com. + +## Build + +See the Makefile targets in the root of this repository for building Packer images in either +development or release modes: + + - `make docker-dev` + - `make docker-official` + - `make docker-multiarch-official` + - `make docker` + +### Usage + +This repository automatically builds containers for using the +[`packer`](https://packer.io) command line program. It contains two distinct +varieties of build, an `official` version, aka `light`, which just contains the binary. +It also contains a `dev` version, aka `full`, which compiles the binary from source +inside the container before exposing it for use. + +##### `official` + +The `official` version of this container will copy the current stable version of +the binary, taken from releases.hashicorp.com, into the container. It will also +set it for use as the default entrypoint. This will be the best option for most uses, +especially if you are just looking to run the binary from a container. This image +is tagged as both `official` and `light`. +The `latest` tag on DockerHub also points to this version. + +You can use this version with the following: +```shell +docker run hashicorp/packer:official +``` + +##### `dev` + +The `dev` version of this container contains all of the source code found in +the current ref of this [repository](https://github.com/hashicorp/packer). Using [Google's +official `golang` image](https://hub.docker.com/_/golang/) as a base, this +container will copy the source from the current branch, build the binary, and +expose it for running. Because all build artifacts are included, it should be quite a bit larger than +the `official` image. This version of the container is most useful for development or +debugging. + +You can use this version with the following: +```shell +docker run hashicorp/packer:dev +``` + +#### Running a build: + +The easiest way to run a command that references a configuration with one or more template files, is to mount a volume for the local workspace. + +Running `packer init` +```shell +docker run \ + -v `pwd`:/workspace -w /workspace \ + -e PACKER_PLUGIN_PATH=/workspace/.packer.d/plugins \ + hashicorp/packer:latest \ + init . +``` + +~> **Note**: packer init is available from Packer v1.7.0 and later + +The command will mount the working directory (`pwd`) to `workspace`, which is the working directory (`-w`) inside the container. +Any plugin installed with `packer init` will be installed under the directory specified under the `PACKER_PLUGIN_PATH` environment variable. `PACKER_PLUGIN_PATH` must be set to a path inside the volume mount so that plugins can become available at `packer build`. + +Running `packer build` +```shell +docker run \ + -v `pwd`:/workspace -w /workspace \ + -e PACKER_PLUGIN_PATH=/workspace/.packer.d/plugins \ + hashicorp/packer:latest \ + build . +``` +##### Building old-legacy JSON templates + +For old-legacy JSON, the build command must specify the template file(s). + +```shell +docker run \ + -v `pwd`:/workspace -w /workspace \ + hashicorp/packer:latest \ + build template.json +``` + +For the [manual installation](https://www.packer.io/docs/plugins#installing-plugins) of third-party plugins, we recommended that plugin binaries are placed under a sub-directory under the working directory. Add `-e PACKER_PLUGIN_PATH=/workspace/` to the command above to tell Packer where the plugins are. + +To pass a var file (`var.json`) to the build command: + +```shell +docker run \ + -v `pwd`:/workspace -w /workspace \ + hashicorp/packer:latest \ + build --var-file var.json template.json +``` +`var.json` is expected to be inside the local working directory (`pwd`) and in the container's workspace mount. diff --git a/.release/linux/package/etc/packer.d/packer.env b/.release/linux/package/etc/packer.d/packer.env new file mode 100644 index 00000000000..e69de29bb2d diff --git a/.release/linux/package/usr/lib/systemd/system/packer.service b/.release/linux/package/usr/lib/systemd/system/packer.service new file mode 100644 index 00000000000..f97725ad572 --- /dev/null +++ b/.release/linux/package/usr/lib/systemd/system/packer.service @@ -0,0 +1,23 @@ +[Unit] +Description="HashiCorp Packer - A tool for creating identical machine images for multiple platforms from a single source configuration" +Documentation=https://www.packer.io/docs +StartLimitIntervalSec=60 +StartLimitBurst=3 + +[Service] +EnvironmentFile=-/etc/packer.d/packer.env +User=packer +Group=packer +ProtectSystem=full +ProtectHome=read-only +ExecStart=/usr/bin/packer server -config=/etc/packer.d +ExecReload=/bin/kill --signal HUP $MAINPID +KillMode=process +KillSignal=SIGINT +Restart=on-failure +RestartSec=5 +TimeoutStopSec=30 +LimitMEMLOCK=infinity + +[Install] +WantedBy=multi-user.target \ No newline at end of file diff --git a/.release/linux/postrm b/.release/linux/postrm new file mode 100644 index 00000000000..0f32404c551 --- /dev/null +++ b/.release/linux/postrm @@ -0,0 +1,8 @@ +#!/bin/bash + +if [ "$1" = "purge" ] +then + userdel packer +fi + +exit 0 \ No newline at end of file diff --git a/.release/linux/preinst b/.release/linux/preinst new file mode 100644 index 00000000000..d5068c8968c --- /dev/null +++ b/.release/linux/preinst @@ -0,0 +1,13 @@ +#!/bin/bash + +set -eu + +USER="packer" + +if ! id -u $USER > /dev/null 2>&1; then + useradd \ + --system \ + --user-group \ + --shell /bin/false \ + $USER +fi \ No newline at end of file diff --git a/.release/security-scan.hcl b/.release/security-scan.hcl new file mode 100644 index 00000000000..4b0717c7306 --- /dev/null +++ b/.release/security-scan.hcl @@ -0,0 +1,13 @@ +container { + dependencies = false + alpine_secdb = true + secrets = false +} + +binary { + secrets = true + go_modules = true + osv = true + oss_index = true + nvd = true +} \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index a0c0bafe69e..b6745845206 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,17 +1,154 @@ -## 1.7.9 (Upcoming) +## 1.8.1 (Upcoming) +## 1.8.0 (March 4, 2022) ### NOTES: +* **Breaking Change**: The `packer-plugin-check`(github.com/hashicorp/packer/cmd/packer-plugins-check) has been replaced by the [`packer-sdc plugin-check` command](https://github.com/hashicorp/packer-plugin-sdk/tree/main/cmd/packer-sdc#packer-sdc). Plugin maintainers who may be using the packer-plugin-check as part of their release pipeline are encouraged to move to the packer-sdc command. As an alternative, maintainers can continue to use the packer-plugin-check by pinning the command to Packer 1.7.10. [GH-11317](https://github.com/hashicorp/packer/pull/11317) -* HCP Packer compatible plugins now contain a "HCP Packer Ready" badge on their - respective documentation pages. +### FEATURES +* **New Command** `packer plugins` command and subcommands to manage external + plugins. [GH-11553](https://github.com/hashicorp/packer/pull/11553) + [GH-11625](https://github.com/hashicorp/packer/pull/11625) + +### IMPROVEMENTS +* core: Add a `env` argument to provisioner blocks that allow for setting a + map of key/value pairs to inject prior to the execute_command. The env argument + is an alternative to using environment_vars for setting environment variables, + which has the added ability to read from Packer datasources. [GH-11569](https://github.com/hashicorp/packer/pull/11569) +* core: Bump version of go-getter to allow for downloading ISOs with PGP signed + checksums. [GH-11495](https://github.com/hashicorp/packer/pull/11495) +* core: Docker images are now available for all supported architectures that + the linux binaries are built for including arm, arm64, 386, and amd64 + [GH-11564](https://github.com/hashicorp/packer/pull/11564) + [GH-11601](https://github.com/hashicorp/packer/pull/11601) + [GH-11603](https://github.com/hashicorp/packer/pull/11603) +* core: Packer's linux package service configs and pre/post install scripts are + now available under .release/linux. + [GH-11601](https://github.com/hashicorp/packer/pull/11601) + [GH-11603](https://github.com/hashicorp/packer/pull/11603) +* core: Packer's linux packages are now available for all supported linux + architectures including arm, arm64, 386, and amd64 + [GH-11564](https://github.com/hashicorp/packer/pull/11564) + [GH-11601](https://github.com/hashicorp/packer/pull/11601) + [GH-11603](https://github.com/hashicorp/packer/pull/11603) +* core: The dockerfile that is used to build the packer docker image available + at hashicorp/packer now lives in the root of this repo. The README that + describes how to build the docker targets defined in the Dockerfile are + available under ./release/docker/README.md. + [GH-11564](https://github.com/hashicorp/packer/pull/11564) + [GH-11601](https://github.com/hashicorp/packer/pull/11601) + [GH-11603](https://github.com/hashicorp/packer/pull/11603) +* core: The packer-plugin-check command has been removed. Plugin maintainers + should update their release configuration to use the `packer-sdc plugin- + check` command. [GH-11317](https://github.com/hashicorp/packer/pull/11317) + + +### BUG FIXES +* core/hcl2: Fixes an issue preventing builds from pausing between provisioners when + the `--debug` argument has been passed. + [GH-11537](https://github.com/hashicorp/packer/pull/11537) +* core/hcl2: Fixes a data loss issue when merging an empty-object map to a non- + empty map variable. + [GH-11566](https://github.com/hashicorp/packer/pull/11566) +* core/hcl2: Fixes a regression where references to locals via the lookup + function were failing to find defined keys. + [GH-11566](https://github.com/hashicorp/packer/pull/11566) +* core/hcl2: Fixes an issue where HCP Packer build labels from the first + completed build image were being copied to all images within the same + build. [GH-11574](https://github.com/hashicorp/packer/pull/11574) + [GH-11584](https://github.com/hashicorp/packer/pull/11584) +* core: HCP Packer datasources will no longer fail for iterations with + scheduled revocations. + [GH-11619](https://github.com/hashicorp/packer/pull/11619) +* core: Packer darwin builds now use macOS system DNS resolver for resolving + hostnames.[GH-9710](https://github.com/hashicorp/packer/issues/9710) + [GH-11564](https://github.com/hashicorp/packer/pull/11564) + +## 1.7.10 (February 02, 2022) + +### NOTES: + +This patch release fixes a crash in m1 caused by the psutils dep, + https://github.com/hashicorp/packer/pull/11546, originally reported by the + HomeBrew team here https://github.com/hashicorp/packer/issues/11512 + +### IMPROVEMENTS +* Print all locals errors when there is a circular error. + [GH-11527](https://github.com/hashicorp/packer/pull/11527 + +### BUG FIXES +* Prevent duplicate local block creation. + [GH-11534](https://github.com/hashicorp/packer/pull/11534) +* Update psutils dep to avoid crash on Arm64 Macs. + [GH-11546](https://github.com/hashicorp/packer/pull/11546) + +## 1.7.9 (January 19, 2022) +### NOTES: + +* HCP Packer compatible plugins will contain a "HCP Packer Ready" badge at the + top of on their documentation page. [GH-11456](https://github.com/hashicorp/packer/pull/11456) +* Packer core [documentation](https://packer.io/docs) now supports versioning + on Packer.io. Users can select documentation for the version of Packer they + are using. [GH-11434](https://github.com/hashicorp/packer/pull/11434) * The `hcp_packer_registry.labels` argument has been deprecated in favor of the new `bucket_labels` argument to support custom user generated bucket labels. [GH-11401](https://github.com/hashicorp/packer/pull/11401) * The code of the Outscale builder was handed over to the outscale org [GH-11428](https://github.com/hashicorp/packer/pull/11428) -* Version information for external plugins is available on the plugin - docs. [GH-11457](https://github.com/hashicorp/packer/pull/11457) +* Version information for external plugins has been added as a badge to the + plugin documentation. + [GH-11457](https://github.com/hashicorp/packer/pull/11457) +* The following unmaintained external provisioner plugins have been archived: chef, + converge, inspec, salt-masterless, puppet. More + information on what this deprecation means for users can be found on the + blog post - [Plans to Archive Unmaintained Provisioner + Plugins](https://www.hashicorp.com/blog/plans-to-archive-unmaintained-packer-provisioner-plugins) + + +### PLUGINS: + +External plugins have been pinned to the following versions. Please see + their respective changelogs for details on plugin specific bug fixes and + improvements. + +* alicloud@v1.0.1 - [CHANGELOG](https://github.com/hashicorp/packer-plugin-alicloud/releases/tag/v1.0.1) +* amazon@v1.0.6 - [CHANGELOG](https://github.com/hashicorp/packer-plugin-amazon/releases/tag/v1.0.6) +* ansible@v1.0.1 - [CHANGELOG](https://github.com/hashicorp/packer-plugin-ansible/releases/tag/v1.0.1) +* azure@v1.0.4 - [CHANGELOG](https://github.com/hashicorp/packer-plugin-azure/releases/tag/v1.0.4) +* chef@v1.0.2 - [CHANGELOG](https://github.com/hashicorp/packer-plugin-chef/releases/tag/v1.0.2) +* cloudstack@v1.0.0 - [CHANGELOG](https://github.com/hashicorp/packer-plugin-cloudstack/releases/tag/v1.0.0) +* converge@v1.0.1 - [CHANGELOG](https://github.com/hashicorp/packer-plugin-converge/releases/tag/v1.0.1) +* digitalocean@v1.0.1 - [CHANGELOG](https://github.com/hashicorp/packer-plugin-digitalocean/releases/tag/v1.0.1) +* docker@v1.0.3 - [CHANGELOG](https://github.com/hashicorp/packer-plugin-docker/releases/tag/v1.0.3) +* googlecompute@v1.0.9 - [CHANGELOG](https://github.com/hashicorp/packer-plugin-googlecompute/releases/tag/v1.0.9) +* hcloud@v1.0.2 - [CHANGELOG](https://github.com/hashicorp/packer-plugin-hcloud/releases/tag/v1.0.2) +* hyperone@v1.0.0 - [CHANGELOG](https://github.com/hashicorp/packer-plugin-hyperone/releases/tag/v1.0.0) +* hyperv@v1.0.1 - [CHANGELOG](https://github.com/hashicorp/packer-plugin-hyperv/releases/tag/v1.0.1) +* inspec@v1.0.0 - [CHANGELOG](https://github.com/hashicorp/packer-plugin-inspec/releases/tag/v1.0.0) +* jdcloud@v1.0.0 - [CHANGELOG](https://github.com/hashicorp/packer-plugin-jdcloud/releases/tag/v1.0.0) +* linode@v1.0.1 - [CHANGELOG](https://github.com/hashicorp/packer-plugin-linode/releases/tag/v1.0.1) +* lxc@v1.0.0 - [CHANGELOG](https://github.com/hashicorp/packer-plugin-lxc/releases/tag/v1.0.0) +* lxd@v1.0.0 - [CHANGELOG](https://github.com/hashicorp/packer-plugin-lxd/releases/tag/v1.0.0) +* ncloud@v1.0.1 - [CHANGELOG](https://github.com/hashicorp/packer-plugin-ncloud/releases/tag/v1.0.1) +* oneandone@v1.0.0 - [CHANGELOG](https://github.com/hashicorp/packer-plugin-oneandone/releases/tag/v1.0.0) +* openstack@v1.0.0 - [CHANGELOG](https://github.com/hashicorp/packer-plugin-openstack/releases/tag/v1.0.0) +* oracle@v1.0.1 - [CHANGELOG](https://github.com/hashicorp/packer-plugin-oracle/releases/tag/v1.0.1) +* outscale@v1.0.2 - [CHANGELOG](https://github.com/hashicorp/packer-plugin-outscale/releases/tag/v1.0.2) +* parallels@v1.0.0 - [CHANGELOG](https://github.com/hashicorp/packer-plugin-parallels/releases/tag/v1.0.0) +* profitbricks@v1.0.1 - [CHANGELOG](https://github.com/hashicorp/packer-plugin-profitbricks/releases/tag/v1.0.1) +* proxmox@v1.0.4 - [CHANGELOG](https://github.com/hashicorp/packer-plugin-proxmox/releases/tag/v1.0.4) +* puppet@v1.0.1 - [CHANGELOG](https://github.com/hashicorp/packer-plugin-puppet/releases/tag/v1.0.1) +* qemu@v1.0.1 - [CHANGELOG](https://github.com/hashicorp/packer-plugin-qemu/releases/tag/v1.0.1) +* salt@v1.0.0 - [CHANGELOG](https://github.com/hashicorp/packer-plugin-salt/releases/tag/v1.0.0) +* tencentcloud@v1.0.3 - [CHANGELOG](https://github.com/hashicorp/packer-plugin-tencentcloud/releases/tag/v1.0.3) +* triton@v1.0.0 - [CHANGELOG](https://github.com/hashicorp/packer-plugin-triton/releases/tag/v1.0.0) +* ucloud@v1.0.0 - [CHANGELOG](https://github.com/hashicorp/packer-plugin-ucloud/releases/tag/v1.0.0) +* vagrant@v1.0.1 - [CHANGELOG](https://github.com/hashicorp/packer-plugin-vagrant/releases/tag/v1.0.1) +* virtualbox@v1.0.1 - [CHANGELOG](https://github.com/hashicorp/packer-plugin-virtualbox/releases/tag/v1.0.1) +* vmware@v1.0.5 - [CHANGELOG](https://github.com/hashicorp/packer-plugin-vmware/releases/tag/v1.0.5) +* vsphere@v1.0.2 - [CHANGELOG](https://github.com/hashicorp/packer-plugin-vsphere/releases/tag/v1.0.2) +* yandex@v1.0.3 - [CHANGELOG](https://github.com/hashicorp/packer-plugin-yandex/releases/tag/v1.0.3) +* scaleway@v1.0.4 - [CHANGELOG](https://github.com/scaleway/packer-plugin-scaleway/releases/tag/v1.0.4) ### IMPROVEMENTS: @@ -26,21 +163,35 @@ * core/hcl2: Allow for the use of variables and locals within a `hcp_packer_registry` block. [GH-11421](https://github.com/hashicorp/packer/pull/11421) -* core/website: Add HCP Packer Ready badge to support plugins. +* core/website: Add HCP Packer Ready badge to supported plugins. [GH-11456](https://github.com/hashicorp/packer/pull/11456) -* core/website: Add version information to external plugin docs. +* core/website: Add Packer version selection toggle to Packer core + documentation. [GH-11434](https://github.com/hashicorp/packer/pull/11434) +* core/website: Add version information to external plugin documentation. [GH-11456](https://github.com/hashicorp/packer/pull/11456) +* core/website: Extract external plugins documentation from `packer.io/docs/` + into `packer.io/plugins`. + [GH-11464](https://github.com/hashicorp/packer/pull/11464) +* core: Add Packer user agent information to HCP Packer client requests. + [GH-11455](https://github.com/hashicorp/packer/pull/11455) * core: Bump github.com/hashicorp/packer-plugin-sdk from 0.2.9 to 0.2.11 to prevent HCP Packer builds from failing when no SourceImageID is provided.[GH-11459](https://github.com/hashicorp/packer/pull/11459) +* core: Bump to latest preview version of hashicorp/hcp-sdk-go to prevent HCP + Packer builds from trying to update a revoked iteration. + [GH-11492](https://github.com/hashicorp/packer/pull/11492) * provisioner/powwershell: Tiny tweaks and fixes for the PowerShell provisioner. [GH-11410](https://github.com/hashicorp/packer/pull/11410) ### BUG FIXES: -* core: HCP Packer builds containing metadata not expected by Packer core will no longer fail the build [GH-11458](https://github.com/hashicorp/packer/pull/11458) -* core/hcl2: Fix crash when a provisioner `timeout` argument is not properly +* core/hcl2: Allow the use of `build.name` for naming provisioners and + post-processors. [GH-11432](https://github.com/hashicorp/packer/pull/11432) +* core/hcl2: Fix crash when a provisioner `timeout` argument is improperly formatted. [GH-11382](https://github.com/hashicorp/packer/pull/11382) +* core/hcl2: HCP Packer builds containing metadata not expected by Packer core + will no longer fail the build. + [GH-11458](https://github.com/hashicorp/packer/pull/11458) * provisioner/file: File provisioner will now perform a noop when no source file content is specified; previously missing content resulted in a hard fail. [GH-11349](https://github.com/hashicorp/packer/pull/11349) @@ -5005,3 +5156,4 @@ making changes for HCL2. ## 0.1.0 (June 28, 2013) * Initial release + diff --git a/CODEOWNERS b/CODEOWNERS index 06a35ddabe0..0efb6b1ac47 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -1,72 +1,6 @@ * @hashicorp/packer -# builders +# release configuration -/examples/alicloud/ @chhaj5236 @alexyueer -/builder/alicloud/ @chhaj5236 @alexyueer -/website/pages/docs/builders/alicloud* @chhaj5236 @alexyueer - -/examples/azure/ @paulmey -/builder/azure/ @paulmey -/website/pages/docs/builders/azure* @paulmey - -/builder/digitalocean/ @andrewsomething -/website/pages/docs/builders/digitalocean* @andrewsomething - -/examples/jdcloud/ @XiaohanLiang @remrain -/builder/jdcloud/ @XiaohanLiang @remrain -/website/pages/docs/builders/jdcloud* @XiaohanLiang @remrain - -/builder/linode/ @stvnjacobs @charliekenney23 @phillc -/website/pages/docs/builders/linode* @stvnjacobs @charliekenney23 @phillc - -/builder/lxc/ @ChrisLundquist -/website/pages/docs/builders/lxc* @ChrisLundquist -/test/fixtures/builder-lxc/ @ChrisLundquist -/test/builder_lxc* @ChrisLundquist - -/builder/lxd/ @ChrisLundquist -/website/pages/docs/builders/lxd* @ChrisLundquist - -/builder/oneandone/ @jasmingacic -/website/pages/docs/builders/oneandone* @jasmingacic - -/builder/oracle/ @prydie @owainlewis -/website/pages/docs/builders/oracle* @prydie @owainlewis - -/builder/profitbricks/ @LiviusP @mflorin -/website/pages/docs/builders/profitbricks* @LiviusP @mflorin - -/builder/triton/ @sean- -/website/pages/docs/builders/triton* @sean- - -/builder/proxmox/ @carlpett -/website/pages/docs/builders/proxmox* @carlpett - -/builder/scaleway/ @scaleway/devtools -/website/pages/docs/builders/scaleway* @scaleway/devtools - -/builder/hcloud/ @LKaemmerling -/website/pages/docs/builders/hcloud* @LKaemmerling - -/builder/yandex/ @GennadySpb @alexanderKhaustov @seukyaso -/website/pages/docs/builders/yandex* @GennadySpb @alexanderKhaustov @seukyaso - -/examples/tencentcloud/ @likexian -/builder/tencentcloud/ @likexian -/website/pages/docs/builders/tencentcloud* @likexian - -# provisioners - -/examples/ansible/ @bhcleek -/provisioner/ansible/ @bhcleek -/provisioner/converge/ @stevendborrelli - -# post-processors - -/post-processor/alicloud-import/ dongxiao.zzh@alibaba-inc.com -/post-processor/checksum/ v.tolstov@selfip.ru -/post-processor/googlecompute-export/ crunkleton@google.com -/post-processor/yandex-export/ @GennadySpb -/post-processor/yandex-import/ @GennadySpb -/post-processor/vsphere-template/ nelson@bennu.cl +/.release/ @hashicorp/release-engineering +/.github/workflows/build.yml @hashicorp/release-engineering diff --git a/Dockerfile b/Dockerfile index 0b5f50a1b86..5928e73d2c0 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,30 +1,106 @@ -FROM docker.mirror.hashicorp.services/ubuntu:16.04 +# ======================================================================== +# +# This Dockerfile contains multiple targets. +# Use 'docker build --target= .' to build one. +# e.g. `docker build --target=release-light .` +# +# All non-dev targets have a VERSION argument that must be provided +# via --build-arg=VERSION= when building. +# e.g. --build-arg VERSION=1.11.2 +# +# For local dev and testing purposes, please build and use the `dev` docker image. +# +# ======================================================================== -ENV DEBIAN_FRONTEND noninteractive -RUN apt-get update && apt-get install -y \ - locales \ - openssh-server \ - sudo +# Development docker image primarily used for development and debugging. +# This image builds from the locally generated binary in ./bin/. +# To generate the local binary, run `make dev`. +FROM docker.mirror.hashicorp.services/alpine:latest as dev -RUN locale-gen en_US.UTF-8 +RUN apk add --no-cache git bash openssl ca-certificates -RUN if ! getent passwd vagrant; then useradd -d /home/vagrant -m -s /bin/bash vagrant; fi \ - && echo 'vagrant ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers \ - && mkdir -p /etc/sudoers.d \ - && echo 'vagrant ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers.d/vagrant \ - && chmod 0440 /etc/sudoers.d/vagrant +COPY bin/packer /bin/packer -RUN mkdir -p /home/vagrant/.ssh \ - && chmod 0700 /home/vagrant/.ssh \ - && wget --no-check-certificate \ - https://raw.github.com/hashicorp/vagrant/master/keys/vagrant.pub \ - -O /home/vagrant/.ssh/authorized_keys \ - && chmod 0600 /home/vagrant/.ssh/authorized_keys \ - && chown -R vagrant /home/vagrant/.ssh +ENTRYPOINT ["/bin/packer"] -RUN mkdir -p /run/sshd -CMD /usr/sbin/sshd -D \ - -o UseDNS=no \ - -o PidFile=/tmp/sshd.pid +# Official docker image that includes binaries from releases.hashicorp.com. +# This downloads the release from releases.hashicorp.com and therefore requires that +# the release is published before building the Docker image. +FROM docker.mirror.hashicorp.services/alpine:latest as official + +# This is the release of Packer to pull in. +ARG VERSION + +LABEL name="Packer" \ + maintainer="HashiCorp Packer Team " \ + vendor="HashiCorp" \ + version=$VERSION \ + release=$VERSION \ + summary="Packer is a tool for creating identical machine images for multiple platforms from a single source configuration." \ + description="Packer is a tool for creating identical machine images for multiple platforms from a single source configuration. Please submit issues to https://github.com/hashicorp/packer/issues" + +# This is the location of the releases. +ENV HASHICORP_RELEASES=https://releases.hashicorp.com + +RUN set -eux && \ + apk add --no-cache git bash wget openssl gnupg && \ + gpg --keyserver keyserver.ubuntu.com --recv-keys C874011F0AB405110D02105534365D9472D7468F && \ + mkdir -p /tmp/build && \ + cd /tmp/build && \ + apkArch="$(apk --print-arch)" && \ + case "${apkArch}" in \ + aarch64) packerArch='arm64' ;; \ + armhf) packerArch='arm' ;; \ + x86) packerArch='386' ;; \ + x86_64) packerArch='amd64' ;; \ + *) echo >&2 "error: unsupported architecture: ${apkArch} (see ${HASHICORP_RELEASES}/packer/${VERSION}/)" && exit 1 ;; \ + esac && \ + wget ${HASHICORP_RELEASES}/packer/${VERSION}/packer_${VERSION}_linux_${packerArch}.zip && \ + wget ${HASHICORP_RELEASES}/packer/${VERSION}/packer_${VERSION}_SHA256SUMS && \ + wget ${HASHICORP_RELEASES}/packer/${VERSION}/packer_${VERSION}_SHA256SUMS.sig && \ + gpg --batch --verify packer_${VERSION}_SHA256SUMS.sig packer_${VERSION}_SHA256SUMS && \ + grep packer_${VERSION}_linux_${packerArch}.zip packer_${VERSION}_SHA256SUMS | sha256sum -c && \ + unzip -d /tmp/build packer_${VERSION}_linux_${packerArch}.zip && \ + cp /tmp/build/packer /bin/packer && \ + cd /tmp && \ + rm -rf /tmp/build && \ + gpgconf --kill all && \ + apk del gnupg openssl && \ + rm -rf /root/.gnupg && \ + # Tiny smoke test to ensure the binary we downloaded runs + packer version + +ENTRYPOINT ["/bin/packer"] + + +# Light docker image which can be used to run the binary from a container. +# This image builds from the locally generated binary in ./bin/, and from CI-built binaries within CI. +# To generate the local binary, run `make dev`. +# This image is published to DockerHub under the `light`, `light-$VERSION`, and `latest` tags. +FROM docker.mirror.hashicorp.services/alpine:latest as release-light + +ARG VERSION +ARG BIN_NAME + +# TARGETARCH and TARGETOS are set automatically when --platform is provided. +ARG TARGETOS TARGETARCH + +LABEL name="Packer" \ + maintainer="HashiCorp Packer Team " \ + vendor="HashiCorp" \ + version=$VERSION \ + release=$VERSION \ + summary="Packer is a tool for creating identical machine images for multiple platforms from a single source configuration." \ + description="Packer is a tool for creating identical machine images for multiple platforms from a single source configuration. Please submit issues to https://github.com/hashicorp/packer/issues" + +RUN apk add --no-cache git bash wget openssl gnupg + +COPY dist/$TARGETOS/$TARGETARCH/$BIN_NAME /bin/ + +ENTRYPOINT ["/bin/packer"] + + +# Set default target to 'dev'. +FROM dev \ No newline at end of file diff --git a/Makefile b/Makefile index 71e3a33e539..88fe057836b 100644 --- a/Makefile +++ b/Makefile @@ -25,7 +25,7 @@ GOLDFLAGS=-X $(GIT_IMPORT).GitCommit=$(GIT_COMMIT)$(GIT_DIRTY) $(LDFLAGS) export GOLDFLAGS .PHONY: bin checkversion ci ci-lint default install-build-deps install-gen-deps fmt fmt-docs fmt-examples generate install-lint-deps lint \ - releasebin test testacc testrace + releasebin test testacc testrace version default: install-build-deps install-gen-deps generate dev @@ -75,6 +75,45 @@ dev: ## Build and install a development build @cp $(GOPATH)/bin/packer bin/packer @cp $(GOPATH)/bin/packer pkg/$(GOOS)_$(GOARCH) +# Docker build variables and targets +REGISTRY_NAME?=docker.io/hashicorp +IMAGE_NAME=packer +VERSION?=1.7.10 +IMAGE_TAG=$(REGISTRY_NAME)/$(IMAGE_NAME):$(VERSION) +IMAGE_TAG_DEV=$(REGISTRY_NAME)/$(IMAGE_NAME):latest-$(shell git rev-parse --short HEAD) + +docker: docker-official +docker-light: docker-official + +# Builds from the releases.hashicorp.com official binary +docker-official: + docker build \ + --tag $(IMAGE_TAG) \ + --tag hashicorp/packer:latest \ + --target=official \ + --build-arg VERSION=$(VERSION) \ + . + +# Builds multiarch from the releases.hashicorp.com official binary +docker-multiarch-official: + docker buildx build \ + --tag $(IMAGE_TAG) \ + --tag hashicorp/packer:latest \ + --target=official \ + --build-arg VERSION=$(VERSION) \ + --platform linux/amd64,linux/arm64 \ + . + +# Builds from the locally generated binary in ./bin/ +# To generate the local binary, run `make dev` +docker-dev: export GOOS=linux +docker-dev: export GOARCH=amd64 +docker-dev: dev + @docker build \ + --tag $(IMAGE_TAG_DEV) \ + --target=dev \ + . + lint: install-lint-deps ## Lint Go code @if [ ! -z $(PKG_NAME) ]; then \ echo "golangci-lint run ./$(PKG_NAME)/..."; \ @@ -161,3 +200,7 @@ vet: ## Vet Go code help: @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}' + +# This is used for release builds by .github/workflows/build.yml +version: + @$(CURDIR)/scripts/version.sh version/version.go \ No newline at end of file diff --git a/README.md b/README.md index 35600315ab6..af75e1ed95b 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,11 @@ # Packer -[![Build Status][circleci-badge]][circleci] +[![Build Status](https://github.com/hashicorp/packer/actions/workflows/build.yml/badge.svg)](https://github.com/hashicorp/packer/actions/workflows/build.yml) [![Discuss](https://img.shields.io/badge/discuss-packer-3d89ff?style=flat)](https://discuss.hashicorp.com/c/packer) [![PkgGoDev](https://pkg.go.dev/badge/github.com/hashicorp/packer)](https://pkg.go.dev/github.com/hashicorp/packer) [![GoReportCard][report-badge]][report] -[circleci-badge]: https://circleci.com/gh/hashicorp/packer.svg?style=svg -[circleci]: https://app.circleci.com/pipelines/github/hashicorp/packer +[github-badge]: https://github.com/hashicorp/packer/actions/workflows/build.yml/badge.svg [appveyor-badge]: https://ci.appveyor.com/api/projects/status/miavlgnp989e5obc/branch/master?svg=true [godoc-badge]: https://godoc.org/github.com/hashicorp/packer?status.svg [godoc]: https://godoc.org/github.com/hashicorp/packer @@ -35,7 +34,7 @@ The images that Packer creates can easily be turned into ## Quick Start **Note:** There is a great -[introduction and getting started guide](https://www.packer.io/intro) +[introduction and getting started guide](https://learn.hashicorp.com/tutorials/packer/get-started-install-cli) for those with a bit more patience. Otherwise, the quick start below will get you up and running quickly, at the sacrifice of not explaining some key points. diff --git a/acctest/plugin/plugin_acc_test.go b/acctest/plugin/plugin_acc_test.go index b1d1f7d200e..b0eb24be172 100644 --- a/acctest/plugin/plugin_acc_test.go +++ b/acctest/plugin/plugin_acc_test.go @@ -86,9 +86,8 @@ func cleanupPluginInstallation(plugin addrs.Plugin) error { plugin.Namespace, plugin.Type) - if _, ok := os.LookupEnv("CIRCLECI"); ok { - pluginPath = filepath.Join(home, - ".config", + if xdgConfigHome := os.Getenv("XDG_CONFIG_HOME"); xdgConfigHome != "" { + pluginPath = filepath.Join(xdgConfigHome, "packer", "plugins", plugin.Hostname, @@ -118,9 +117,8 @@ func checkPluginInstallation(initOutput string, plugin addrs.Plugin) error { plugin.Namespace, plugin.Type) - if _, ok := os.LookupEnv("CIRCLECI"); ok { - pluginPath = filepath.Join(home, - ".config", + if xdgConfigHome := os.Getenv("XDG_CONFIG_HOME"); xdgConfigHome != "" { + pluginPath = filepath.Join(xdgConfigHome, "packer", "plugins", plugin.Hostname, diff --git a/cmd/packer-plugins-check/main.go b/cmd/packer-plugins-check/main.go deleted file mode 100644 index 7b8caeac3a1..00000000000 --- a/cmd/packer-plugins-check/main.go +++ /dev/null @@ -1,185 +0,0 @@ -// packer-plugin-check is a command used by plugins to validate compatibility and basic configuration -// to work with Packer. -package main - -import ( - "flag" - "fmt" - "io" - "log" - "os" - "path/filepath" - "strings" - - packersdk "github.com/hashicorp/packer-plugin-sdk/packer" - "github.com/hashicorp/packer/packer" -) - -const packerPluginsCheck = "packer-plugins-check" - -var ( - docs = flag.Bool("docs", false, "flag to indicate that documentation files should be checked.") - load = flag.String("load", "", "flag to check if plugin can be loaded by Packer and is compatible with HCL2.") -) - -// Usage is a replacement usage function for the flags package. -func Usage() { - fmt.Fprintf(os.Stderr, "Usage of "+packerPluginsCheck+":\n") - fmt.Fprintf(os.Stderr, "\t"+packerPluginsCheck+" [flags]\n") - fmt.Fprintf(os.Stderr, "Flags:\n") - flag.PrintDefaults() -} - -func main() { - log.SetFlags(0) - log.SetPrefix(packerPluginsCheck + ": ") - flag.Usage = Usage - flag.Parse() - - if flag.NFlag() == 0 { - flag.Usage() - os.Exit(2) - } - - if *docs { - if err := checkDocumentation(); err != nil { - fmt.Printf(err.Error()) - os.Exit(2) - } - fmt.Printf("Plugin succesfully passed docs check.\n") - } - - if len(*load) > 0 { - if err := checkPluginName(*load); err != nil { - fmt.Printf(err.Error()) - os.Exit(2) - } - if err := discoverAndLoad(); err != nil { - fmt.Printf(err.Error()) - os.Exit(2) - } - fmt.Printf("Plugin succesfully passed compatibility check.\n") - } -} - -// checkDocumentation looks for the presence of a docs folder with mdx files inside. -// It is not possible to predict the number of mdx files for a given plugin. -// Because of that, finding one file inside the folder is enough to validate the docs existence. -func checkDocumentation() error { - // TODO: this should be updated once we have defined what's going to be for plguin's docs - wd, err := os.Getwd() - if err != nil { - return err - } - - docsDir := wd + "/docs" - stat, err := os.Stat(docsDir) - if err != nil { - return fmt.Errorf("could not find docs folter: %s", err.Error()) - } - if !stat.IsDir() { - return fmt.Errorf("expecting docs do be a directory of mdx files") - } - - var mdxFound bool - _ = filepath.Walk(docsDir, func(path string, info os.FileInfo, err error) error { - if !info.IsDir() && filepath.Ext(path) == ".mdx" { - mdxFound = true - return io.EOF - } - return nil - }) - - if mdxFound { - fmt.Printf("a mdx file was found inside the docs folder\n") - return nil - } - return fmt.Errorf("no docs files found, make sure to have the docs in place before releasing") -} - -// checkPluginName checks for the possible valid names for a plugin, packer-plugin-* or packer-[builder|provisioner|post-processor]-*. -// If the name is prefixed with `packer-[builder|provisioner|post-processor]-`, packer won't be able to install it, -// therefore a WARNING will be shown. -func checkPluginName(name string) error { - if strings.HasPrefix(name, "packer-plugin-") { - return nil - } - if strings.HasPrefix(name, "packer-builder-") || - strings.HasPrefix(name, "packer-provisioner-") || - strings.HasPrefix(name, "packer-post-processor-") { - fmt.Printf("\n[WARNING] Plugin is named with old prefix `packer-[builder|provisioner|post-processor]-{name})`. " + - "These will be detected but Packer cannot install them automatically. " + - "The plugin must be a multi-component plugin named packer-plugin-{name} to be installable through the `packer init` command.\n") - return nil - } - return fmt.Errorf("plugin's name is not valid") -} - -// discoverAndLoad will discover the plugin binary from the current directory and load any builder/provisioner/post-processor -// in the plugin configuration. At least one builder, provisioner, or post-processor should be found to validate the plugin's -// compatibility with Packer. -func discoverAndLoad() error { - config := packer.PluginConfig{ - PluginMinPort: 10000, - PluginMaxPort: 25000, - } - err := config.Discover() - if err != nil { - return err - } - - // TODO: validate correctness of plugins loaded by checking them against the output of the `describe` command. - if len(config.Builders.List()) == 0 && - len(config.Provisioners.List()) == 0 && - len(config.PostProcessors.List()) == 0 { - return fmt.Errorf("couldn't load any Builder/Provisioner/Post-Processor from the plugin binary") - } - - return checkHCL2ConfigSpec(config) -} - -// checkHCL2ConfigSpec checks if the hcl2spec config is present for the given plugins by validating that ConfigSpec() does not -// return an empty map of specs. -func checkHCL2ConfigSpec(plugins packer.PluginConfig) error { - var errs *packersdk.MultiError - for _, b := range plugins.Builders.List() { - builder, err := plugins.Builders.Start(b) - if err != nil { - return packersdk.MultiErrorAppend(err, errs) - } - if len(builder.ConfigSpec()) == 0 { - errs = packersdk.MultiErrorAppend(fmt.Errorf("builder %q does not contain the required hcl2spec configuration", b), errs) - } - } - for _, p := range plugins.Provisioners.List() { - provisioner, err := plugins.Provisioners.Start(p) - if err != nil { - return packersdk.MultiErrorAppend(err, errs) - } - if len(provisioner.ConfigSpec()) == 0 { - errs = packersdk.MultiErrorAppend(fmt.Errorf("provisioner %q does not contain the required hcl2spec configuration", p), errs) - } - } - for _, pp := range plugins.PostProcessors.List() { - postProcessor, err := plugins.PostProcessors.Start(pp) - if err != nil { - return packersdk.MultiErrorAppend(err, errs) - } - if len(postProcessor.ConfigSpec()) == 0 { - errs = packersdk.MultiErrorAppend(fmt.Errorf("post-processor %q does not contain the required hcl2spec configuration", pp), errs) - } - } - for _, d := range plugins.DataSources.List() { - datasource, err := plugins.DataSources.Start(d) - if err != nil { - return packersdk.MultiErrorAppend(err, errs) - } - if len(datasource.ConfigSpec()) == 0 { - errs = packersdk.MultiErrorAppend(fmt.Errorf("datasource %q does not contain the required hcl2spec configuration", d), errs) - } - } - if errs != nil && len(errs.Errors) > 0 { - return errs - } - return nil -} diff --git a/command/build_test.go b/command/build_test.go index adef38f1963..25683868b8c 100644 --- a/command/build_test.go +++ b/command/build_test.go @@ -435,6 +435,50 @@ func TestBuild(t *testing.T) { }, }, }, + { + name: "hcl - recursive local using input var", + args: []string{ + testFixture("hcl", "recursive_local_with_input"), + }, + fileCheck: fileCheck{ + expectedContent: map[string]string{ + "hey.txt": "hello", + }, + }, + }, + { + name: "hcl - recursive local using an unset input var", + args: []string{ + testFixture("hcl", "recursive_local_with_unset_input"), + }, + fileCheck: fileCheck{}, + expectedCode: 1, + }, + { + name: "hcl - var with default value empty object/list can be set", + args: []string{ + testFixture("hcl", "empty_object"), + }, + fileCheck: fileCheck{ + expectedContent: map[string]string{ + "foo.txt": "yo", + }, + }, + }, + { + name: "hcl - unknown ", + args: []string{ + testFixture("hcl", "data-source-validation.pkr.hcl"), + }, + fileCheck: fileCheck{ + expectedContent: map[string]string{ + "foo.txt": "foo", + }, + expected: []string{ + "s3cr3t", + }, + }, + }, } for _, tt := range tc { diff --git a/command/cli.go b/command/cli.go index 82d6852eb0f..a9486cd5282 100644 --- a/command/cli.go +++ b/command/cli.go @@ -99,12 +99,17 @@ func (ia *InitArgs) AddFlagSets(flags *flag.FlagSet) { ia.MetaArgs.AddFlagSets(flags) } -// InitArgs represents a parsed cli line for a `packer build` +// InitArgs represents a parsed cli line for a `packer init ` type InitArgs struct { MetaArgs Upgrade bool } +// PluginsRequiredArgs represents a parsed cli line for a `packer plugins required ` +type PluginsRequiredArgs struct { + MetaArgs +} + // ConsoleArgs represents a parsed cli line for a `packer console` type ConsoleArgs struct { MetaArgs diff --git a/command/core_wrapper.go b/command/core_wrapper.go index 9d61f558032..f782903facd 100644 --- a/command/core_wrapper.go +++ b/command/core_wrapper.go @@ -29,8 +29,8 @@ func (c *CoreWrapper) Initialize(_ packer.InitializeOptions) hcl.Diagnostics { func (c *CoreWrapper) PluginRequirements() (plugingetter.Requirements, hcl.Diagnostics) { return nil, hcl.Diagnostics{ &hcl.Diagnostic{ - Summary: "Packer init is supported for HCL2 configuration templates only", - Detail: "Please manually install plugins or use a HCL2 configuration that will do that for you.", + Summary: "Packer plugins currently only works with HCL2 configuration templates", + Detail: "Please manually install plugins with the plugins command or use a HCL2 configuration that will do that for you.", Severity: hcl.DiagError, }, } diff --git a/command/plugins.go b/command/plugins.go new file mode 100644 index 00000000000..7ec25538115 --- /dev/null +++ b/command/plugins.go @@ -0,0 +1,32 @@ +package command + +import ( + "strings" + + "github.com/mitchellh/cli" +) + +type PluginsCommand struct { + Meta +} + +func (c *PluginsCommand) Synopsis() string { + return "Interact with Packer plugins and catalog" +} + +func (c *PluginsCommand) Help() string { + helpText := ` +Usage: packer plugins [options] [args] + This command groups subcommands for interacting with Packer plugins. + +Related but not under the "plugins" command : + +- "packer init " will install all plugins required by a config. +` + + return strings.TrimSpace(helpText) +} + +func (c *PluginsCommand) Run(args []string) int { + return cli.RunResultHelp +} diff --git a/command/plugins_install.go b/command/plugins_install.go new file mode 100644 index 00000000000..f9fd0244724 --- /dev/null +++ b/command/plugins_install.go @@ -0,0 +1,128 @@ +package command + +import ( + "context" + "crypto/sha256" + "fmt" + "runtime" + "strings" + + "github.com/hashicorp/go-version" + pluginsdk "github.com/hashicorp/packer-plugin-sdk/plugin" + "github.com/hashicorp/packer/hcl2template/addrs" + "github.com/hashicorp/packer/packer" + plugingetter "github.com/hashicorp/packer/packer/plugin-getter" + "github.com/hashicorp/packer/packer/plugin-getter/github" + pkrversion "github.com/hashicorp/packer/version" + "github.com/mitchellh/cli" +) + +type PluginsInstallCommand struct { + Meta +} + +func (c *PluginsInstallCommand) Synopsis() string { + return "Install latest Packer plugin [matching version constraint]" +} + +func (c *PluginsInstallCommand) Help() string { + helpText := ` +Usage: packer plugins install [] + + This command will install the most recent compatible Packer plugin matching + version constraint. + When the version constraint is omitted, the most recent version will be + installed. + + Ex: packer plugins install github.com/hashicorp/happycloud v1.2.3 +` + + return strings.TrimSpace(helpText) +} + +func (c *PluginsInstallCommand) Run(args []string) int { + ctx, cleanup := handleTermInterrupt(c.Ui) + defer cleanup() + + return c.RunContext(ctx, args) +} + +func (c *PluginsInstallCommand) RunContext(buildCtx context.Context, args []string) int { + if len(args) < 1 || len(args) > 2 { + return cli.RunResultHelp + } + + opts := plugingetter.ListInstallationsOptions{ + FromFolders: c.Meta.CoreConfig.Components.PluginConfig.KnownPluginFolders, + BinaryInstallationOptions: plugingetter.BinaryInstallationOptions{ + OS: runtime.GOOS, + ARCH: runtime.GOARCH, + APIVersionMajor: pluginsdk.APIVersionMajor, + APIVersionMinor: pluginsdk.APIVersionMinor, + Checksummers: []plugingetter.Checksummer{ + {Type: "sha256", Hash: sha256.New()}, + }, + }, + } + + plugin, diags := addrs.ParsePluginSourceString(args[0]) + if diags.HasErrors() { + c.Ui.Error(diags.Error()) + return 1 + } + + // a plugin requirement that matches them all + pluginRequirement := plugingetter.Requirement{ + Identifier: plugin, + Implicit: false, + } + + if len(args) > 1 { + constraints, err := version.NewConstraint(args[1]) + if err != nil { + c.Ui.Error(err.Error()) + return 1 + } + pluginRequirement.VersionConstraints = constraints + } + + if runtime.GOOS == "windows" && opts.Ext == "" { + opts.BinaryInstallationOptions.Ext = ".exe" + } + + getters := []plugingetter.Getter{ + &github.Getter{ + // In the past some terraform plugins downloads were blocked from a + // specific aws region by s3. Changing the user agent unblocked the + // downloads so having one user agent per version will help mitigate + // that a little more. Especially in the case someone forks this + // code to make it more aggressive or something. + // TODO: allow to set this from the config file or an environment + // variable. + UserAgent: "packer-getter-github-" + pkrversion.String(), + }, + } + + newInstall, err := pluginRequirement.InstallLatest(plugingetter.InstallOptions{ + InFolders: opts.FromFolders, + BinaryInstallationOptions: opts.BinaryInstallationOptions, + Getters: getters, + }) + + if err != nil { + c.Ui.Error(err.Error()) + return 1 + } + + if newInstall != nil { + msg := fmt.Sprintf("Installed plugin %s %s in %q", pluginRequirement.Identifier, newInstall.Version, newInstall.BinaryPath) + ui := &packer.ColoredUi{ + Color: packer.UiColorCyan, + Ui: c.Ui, + } + ui.Say(msg) + return 0 + } + + return 0 +} diff --git a/command/plugins_installed.go b/command/plugins_installed.go new file mode 100644 index 00000000000..96ddc65d89c --- /dev/null +++ b/command/plugins_installed.go @@ -0,0 +1,78 @@ +package command + +import ( + "context" + "crypto/sha256" + "log" + "runtime" + "strings" + + plugingetter "github.com/hashicorp/packer/packer/plugin-getter" +) + +type PluginsInstalledCommand struct { + Meta +} + +func (c *PluginsInstalledCommand) Synopsis() string { + return "List all installed Packer plugin binaries" +} + +func (c *PluginsInstalledCommand) Help() string { + helpText := ` +Usage: packer plugins installed + + This command lists all installed plugin binaries that match with the current + OS and architecture. Packer's API version will be ignored. + +` + + return strings.TrimSpace(helpText) +} + +func (c *PluginsInstalledCommand) Run(args []string) int { + ctx, cleanup := handleTermInterrupt(c.Ui) + defer cleanup() + + return c.RunContext(ctx) +} + +func (c *PluginsInstalledCommand) RunContext(buildCtx context.Context) int { + + opts := plugingetter.ListInstallationsOptions{ + FromFolders: c.Meta.CoreConfig.Components.PluginConfig.KnownPluginFolders, + BinaryInstallationOptions: plugingetter.BinaryInstallationOptions{ + OS: runtime.GOOS, + ARCH: runtime.GOARCH, + Checksummers: []plugingetter.Checksummer{ + {Type: "sha256", Hash: sha256.New()}, + }, + }, + } + + if runtime.GOOS == "windows" && opts.Ext == "" { + opts.BinaryInstallationOptions.Ext = ".exe" + } + + log.Printf("[TRACE] init: %#v", opts) + + // a plugin requirement that matches them all + allPlugins := plugingetter.Requirement{ + Accessor: "", + VersionConstraints: nil, + Identifier: nil, + Implicit: false, + } + + installations, err := allPlugins.ListInstallations(opts) + if err != nil { + c.Ui.Error(err.Error()) + return 1 + } + + for _, installation := range installations { + c.Ui.Message(installation.BinaryPath) + } + + return 0 +} diff --git a/command/plugins_remove.go b/command/plugins_remove.go new file mode 100644 index 00000000000..a0258ee522f --- /dev/null +++ b/command/plugins_remove.go @@ -0,0 +1,100 @@ +package command + +import ( + "context" + "crypto/sha256" + "os" + "runtime" + "strings" + + "github.com/hashicorp/go-version" + "github.com/hashicorp/packer/hcl2template/addrs" + plugingetter "github.com/hashicorp/packer/packer/plugin-getter" + "github.com/mitchellh/cli" +) + +type PluginsRemoveCommand struct { + Meta +} + +func (c *PluginsRemoveCommand) Synopsis() string { + return "Remove Packer plugins [matching a version]" +} + +func (c *PluginsRemoveCommand) Help() string { + helpText := ` +Usage: packer plugins remove [] + + This command will remove all Packer plugins matching the version constraint + for the current OS and architecture. + When the version is omitted all installed versions will be removed. + + Ex: packer plugins remove github.com/hashicorp/happycloud v1.2.3 +` + + return strings.TrimSpace(helpText) +} + +func (c *PluginsRemoveCommand) Run(args []string) int { + ctx, cleanup := handleTermInterrupt(c.Ui) + defer cleanup() + + return c.RunContext(ctx, args) +} + +func (c *PluginsRemoveCommand) RunContext(buildCtx context.Context, args []string) int { + if len(args) < 1 || len(args) > 2 { + return cli.RunResultHelp + } + + opts := plugingetter.ListInstallationsOptions{ + FromFolders: c.Meta.CoreConfig.Components.PluginConfig.KnownPluginFolders, + BinaryInstallationOptions: plugingetter.BinaryInstallationOptions{ + OS: runtime.GOOS, + ARCH: runtime.GOARCH, + Checksummers: []plugingetter.Checksummer{ + {Type: "sha256", Hash: sha256.New()}, + }, + }, + } + + if runtime.GOOS == "windows" && opts.Ext == "" { + opts.BinaryInstallationOptions.Ext = ".exe" + } + + plugin, diags := addrs.ParsePluginSourceString(args[0]) + if diags.HasErrors() { + c.Ui.Error(diags.Error()) + return 1 + } + + // a plugin requirement that matches them all + pluginRequirement := plugingetter.Requirement{ + Identifier: plugin, + Implicit: false, + } + + if len(args) > 1 { + constraints, err := version.NewConstraint(args[1]) + if err != nil { + c.Ui.Error(err.Error()) + return 1 + } + pluginRequirement.VersionConstraints = constraints + } + + installations, err := pluginRequirement.ListInstallations(opts) + if err != nil { + c.Ui.Error(err.Error()) + return 1 + } + for _, installation := range installations { + if err := os.Remove(installation.BinaryPath); err != nil { + c.Ui.Error(err.Error()) + return 1 + } + c.Ui.Message(installation.BinaryPath) + } + + return 0 +} diff --git a/command/plugins_required.go b/command/plugins_required.go new file mode 100644 index 00000000000..f3573f1ed07 --- /dev/null +++ b/command/plugins_required.go @@ -0,0 +1,118 @@ +package command + +import ( + "context" + "crypto/sha256" + "fmt" + "runtime" + "strings" + + pluginsdk "github.com/hashicorp/packer-plugin-sdk/plugin" + plugingetter "github.com/hashicorp/packer/packer/plugin-getter" + "github.com/mitchellh/cli" +) + +type PluginsRequiredCommand struct { + Meta +} + +func (c *PluginsRequiredCommand) Synopsis() string { + return "List plugins required by a config" +} + +func (c *PluginsRequiredCommand) Help() string { + helpText := ` +Usage: packer plugins required + + This command will list every Packer plugin required by a Packer config, in + packer.required_plugins blocks. All binaries matching the required version + constrain and the current OS and Architecture will be listed. The most recent + version (and the first of the list) will be the one picked by Packer during a + build. + + Ex: packer plugins required require.pkr.hcl + Ex: packer plugins required path/to/folder/ +` + + return strings.TrimSpace(helpText) +} + +func (c *PluginsRequiredCommand) Run(args []string) int { + ctx, cleanup := handleTermInterrupt(c.Ui) + defer cleanup() + + cfg, ret := c.ParseArgs(args) + if ret != 0 { + return ret + } + + return c.RunContext(ctx, cfg) +} + +func (c *PluginsRequiredCommand) ParseArgs(args []string) (*PluginsRequiredArgs, int) { + var cfg PluginsRequiredArgs + flags := c.Meta.FlagSet("plugins required", 0) + flags.Usage = func() { c.Ui.Say(c.Help()) } + cfg.AddFlagSets(flags) + if err := flags.Parse(args); err != nil { + return &cfg, 1 + } + + args = flags.Args() + if len(args) != 1 { + return &cfg, cli.RunResultHelp + } + cfg.Path = args[0] + return &cfg, 0 +} + +func (c *PluginsRequiredCommand) RunContext(buildCtx context.Context, cla *PluginsRequiredArgs) int { + + packerStarter, ret := c.GetConfig(&cla.MetaArgs) + if ret != 0 { + return ret + } + + // Get plugins requirements + reqs, diags := packerStarter.PluginRequirements() + ret = writeDiags(c.Ui, nil, diags) + if ret != 0 { + return ret + } + + opts := plugingetter.ListInstallationsOptions{ + FromFolders: c.Meta.CoreConfig.Components.PluginConfig.KnownPluginFolders, + BinaryInstallationOptions: plugingetter.BinaryInstallationOptions{ + OS: runtime.GOOS, + ARCH: runtime.GOARCH, + APIVersionMajor: pluginsdk.APIVersionMajor, + APIVersionMinor: pluginsdk.APIVersionMinor, + Checksummers: []plugingetter.Checksummer{ + {Type: "sha256", Hash: sha256.New()}, + }, + }, + } + + for _, pluginRequirement := range reqs { + s := fmt.Sprintf("%s %s %q", pluginRequirement.Accessor, pluginRequirement.Identifier.String(), pluginRequirement.VersionConstraints.String()) + installs, err := pluginRequirement.ListInstallations(opts) + if err != nil { + c.Ui.Error(err.Error()) + return 1 + } + for _, install := range installs { + s += fmt.Sprintf(" %s", install.BinaryPath) + } + c.Ui.Message(s) + } + + if len(reqs) == 0 { + c.Ui.Message(` +No plugins requirement found, make sure you reference a Packer config +containing a packer.required_plugins block. See +https://www.packer.io/docs/templates/hcl_templates/blocks/packer +for more info.`) + } + + return 0 +} diff --git a/command/test-fixtures/hcl/data-source-validation.pkr.hcl b/command/test-fixtures/hcl/data-source-validation.pkr.hcl new file mode 100644 index 00000000000..3a0d5a7a1f1 --- /dev/null +++ b/command/test-fixtures/hcl/data-source-validation.pkr.hcl @@ -0,0 +1,39 @@ + +data "null" "secret" { + input = "s3cr3t" +} + +locals { + secret = data.null.secret.output +} + +source "file" "foo" { + content = "foo" + target = "foo.txt" +} + +build { + sources = ["file.foo"] + provisioner "shell-local" { + only_on = ["darwin", "freebsd", "linux", "openbsd", "solaris"] + # original bug in : + # environment_vars = ["MY_SECRET=${local.secret}"] + env = { + "MY_SECRET":"${local.secret}", + } + inline = [ + "echo yo, my secret is $MY_SECRET", + "echo '' > $MY_SECRET", + ] + } + provisioner "shell-local" { + only_on = ["windows"] + env = { + "MY_SECRET":"${local.secret}", + } + inline = [ + "echo yo, my secret is %MY_SECRET%", + "echo '' > %MY_SECRET%", + ] + } +} diff --git a/command/test-fixtures/hcl/empty_object/setting.auto.pkrvars.hcl b/command/test-fixtures/hcl/empty_object/setting.auto.pkrvars.hcl new file mode 100644 index 00000000000..da5194a0267 --- /dev/null +++ b/command/test-fixtures/hcl/empty_object/setting.auto.pkrvars.hcl @@ -0,0 +1,4 @@ +foo = ["yo"] +bar = { + "baz": "foo", +} diff --git a/command/test-fixtures/hcl/empty_object/var.pkr.hcl b/command/test-fixtures/hcl/empty_object/var.pkr.hcl new file mode 100644 index 00000000000..4cd35319a5b --- /dev/null +++ b/command/test-fixtures/hcl/empty_object/var.pkr.hcl @@ -0,0 +1,18 @@ + +variable "foo" { + default = [] +} + +variable "bar" { + default = {} +} + +source "file" "base" { +} + +build { + source "sources.file.base" { + target = "${var.bar.baz}.txt" + content = var.foo[0] + } +} diff --git a/command/test-fixtures/hcl/recursive_local_with_input/locals.pkr.hcl b/command/test-fixtures/hcl/recursive_local_with_input/locals.pkr.hcl new file mode 100644 index 00000000000..2f99b0dadcd --- /dev/null +++ b/command/test-fixtures/hcl/recursive_local_with_input/locals.pkr.hcl @@ -0,0 +1,25 @@ +variable "vms_to_build" { + default = { + "amgroup": "hey" + } +} + +locals { + vms_to_build = var.vms_to_build + dynamic_slice = { + for vm, val in var.vms_to_build : + vm => lookup(local.vms_to_build, vm, "VM NAME NOT FOUND") + } +} + + +source "file" "chocolate" { + content = "hello" + target = "${local.dynamic_slice.amgroup}.txt" +} + +build { + sources = [ + "sources.file.chocolate", + ] +} diff --git a/command/test-fixtures/hcl/recursive_local_with_unset_input/file.pkr.hcl b/command/test-fixtures/hcl/recursive_local_with_unset_input/file.pkr.hcl new file mode 100644 index 00000000000..05fd53ce3ad --- /dev/null +++ b/command/test-fixtures/hcl/recursive_local_with_unset_input/file.pkr.hcl @@ -0,0 +1,12 @@ + +variable "vms_to_build" { +} + +locals { + vms_to_build = var.vms_to_build + dynamic_map = { + for vm in local.vms_to_build : + vm => lookup(local, vm, "VM NAME NOT FOUND") + } +} + diff --git a/command/test-fixtures/validate/circular_error.pkr.hcl b/command/test-fixtures/validate/circular_error.pkr.hcl new file mode 100644 index 00000000000..4ee895cf26d --- /dev/null +++ b/command/test-fixtures/validate/circular_error.pkr.hcl @@ -0,0 +1,5 @@ + +locals { + timestamp = formatdate("YYYY-MM-DDX", timestamp()) + other_local = "test-${local.timestamp}" +} diff --git a/command/test_utils.go b/command/test_utils.go index 1ad3cc8f34d..ab901bef971 100644 --- a/command/test_utils.go +++ b/command/test_utils.go @@ -9,6 +9,7 @@ import ( "github.com/hashicorp/packer/builder/null" hcppackerimagedatasource "github.com/hashicorp/packer/datasource/hcp-packer-image" hcppackeriterationdatasource "github.com/hashicorp/packer/datasource/hcp-packer-iteration" + nulldatasource "github.com/hashicorp/packer/datasource/null" "github.com/hashicorp/packer/packer" "github.com/hashicorp/packer/post-processor/manifest" shell_local_pp "github.com/hashicorp/packer/post-processor/shell-local" @@ -51,6 +52,7 @@ func testCoreConfigBuilder(t *testing.T) *packer.CoreConfig { }, DataSources: packer.MapOfDatasource{ "mock": func() (packersdk.Datasource, error) { return &packersdk.MockDatasource{}, nil }, + "null": func() (packersdk.Datasource, error) { return &nulldatasource.Datasource{}, nil }, "hcp-packer-image": func() (packersdk.Datasource, error) { return &hcppackerimagedatasource.Datasource{}, nil }, "hcp-packer-iteration": func() (packersdk.Datasource, error) { return &hcppackeriterationdatasource.Datasource{}, nil }, }, diff --git a/command/validate_test.go b/command/validate_test.go index e6a51d4cbf6..051b9c3eecb 100644 --- a/command/validate_test.go +++ b/command/validate_test.go @@ -33,6 +33,12 @@ func TestValidateCommand(t *testing.T) { // wrong packer block {path: filepath.Join(testFixture("validate", "invalid_packer_block.pkr.hcl")), exitCode: 1}, + + // Should return multiple errors, + {path: filepath.Join(testFixture("validate", "circular_error.pkr.hcl")), exitCode: 1}, + + // datasource could be unknown at that moment + {path: filepath.Join(testFixture("hcl", "data-source-validation.pkr.hcl")), exitCode: 0}, } for _, tc := range tt { diff --git a/commands.go b/commands.go index 1ab629925e3..631b943c2cc 100644 --- a/commands.go +++ b/commands.go @@ -62,6 +62,36 @@ func init() { }, nil }, + "plugins": func() (cli.Command, error) { + return &command.PluginsCommand{ + Meta: *CommandMeta, + }, nil + }, + + "plugins installed": func() (cli.Command, error) { + return &command.PluginsInstalledCommand{ + Meta: *CommandMeta, + }, nil + }, + + "plugins install": func() (cli.Command, error) { + return &command.PluginsInstallCommand{ + Meta: *CommandMeta, + }, nil + }, + + "plugins remove": func() (cli.Command, error) { + return &command.PluginsRemoveCommand{ + Meta: *CommandMeta, + }, nil + }, + + "plugins required": func() (cli.Command, error) { + return &command.PluginsRequiredCommand{ + Meta: *CommandMeta, + }, nil + }, + "validate": func() (cli.Command, error) { return &command.ValidateCommand{ Meta: *CommandMeta, diff --git a/go.mod b/go.mod index a6ac69dde36..2da3bb5fda3 100644 --- a/go.mod +++ b/go.mod @@ -2,7 +2,6 @@ module github.com/hashicorp/packer require ( cloud.google.com/go v0.97.0 // indirect - github.com/StackExchange/wmi v1.2.1 // indirect github.com/biogo/hts v1.4.3 github.com/cheggaaa/pb v1.0.27 github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e @@ -18,14 +17,14 @@ require ( github.com/hako/durafmt v0.0.0-20200710122514-c0fb7b4da026 github.com/hashicorp/go-checkpoint v0.0.0-20171009173528-1545e56e46de github.com/hashicorp/go-cty-funcs v0.0.0-20200930094925-2721b1e36840 - github.com/hashicorp/go-getter/v2 v2.0.0 + github.com/hashicorp/go-getter/v2 v2.0.1 github.com/hashicorp/go-multierror v1.1.1 github.com/hashicorp/go-uuid v1.0.2 - github.com/hashicorp/go-version v1.3.0 + github.com/hashicorp/go-version v1.4.0 github.com/hashicorp/hcl/v2 v2.11.1 github.com/hashicorp/hcp-sdk-go v0.15.1-0.20220112153249-f565607d7cc4 - github.com/hashicorp/packer-plugin-amazon v1.0.6 - github.com/hashicorp/packer-plugin-sdk v0.2.11 + github.com/hashicorp/packer-plugin-amazon v1.0.8 + github.com/hashicorp/packer-plugin-sdk v0.2.12-0.20220216103740-f7d4bf877a45 github.com/jehiah/go-strftime v0.0.0-20171201141054-1d33003b3869 github.com/klauspost/compress v1.13.5 // indirect github.com/klauspost/pgzip v1.2.5 @@ -42,17 +41,17 @@ require ( github.com/pierrec/lz4 v2.6.1+incompatible github.com/pkg/sftp v1.13.2 // indirect github.com/posener/complete v1.2.3 - github.com/shirou/gopsutil v3.21.1+incompatible + github.com/shirou/gopsutil v3.21.11+incompatible github.com/stretchr/testify v1.7.0 github.com/ulikunitz/xz v0.5.10 github.com/zclconf/go-cty v1.10.0 github.com/zclconf/go-cty-yaml v1.0.1 - golang.org/x/crypto v0.0.0-20210817164053-32db794688a5 // indirect + golang.org/x/crypto v0.0.0-20210921155107-089bfa567519 // indirect golang.org/x/mod v0.5.0 golang.org/x/net v0.0.0-20210902165921-8d991716f632 golang.org/x/oauth2 v0.0.0-20211005180243-6b3c2da341f1 golang.org/x/sync v0.0.0-20210220032951-036812b2e83c - golang.org/x/sys v0.0.0-20210917161153-d61c044b1678 // indirect + golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27 // indirect golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b // indirect golang.org/x/text v0.3.7 // indirect golang.org/x/tools v0.1.5 @@ -64,7 +63,7 @@ require ( github.com/caarlos0/env/v6 v6.7.2 github.com/hashicorp/packer-plugin-alicloud v1.0.1 github.com/hashicorp/packer-plugin-ansible v1.0.1 - github.com/hashicorp/packer-plugin-azure v1.0.4 + github.com/hashicorp/packer-plugin-azure v1.0.6 github.com/hashicorp/packer-plugin-chef v1.0.2 github.com/hashicorp/packer-plugin-cloudstack v1.0.0 github.com/hashicorp/packer-plugin-converge v1.0.1 @@ -73,7 +72,7 @@ require ( github.com/hashicorp/packer-plugin-googlecompute v1.0.9 github.com/hashicorp/packer-plugin-hcloud v1.0.2 github.com/hashicorp/packer-plugin-hyperone v1.0.0 - github.com/hashicorp/packer-plugin-hyperv v1.0.1 + github.com/hashicorp/packer-plugin-hyperv v1.0.2 github.com/hashicorp/packer-plugin-inspec v1.0.0 github.com/hashicorp/packer-plugin-jdcloud v1.0.0 github.com/hashicorp/packer-plugin-linode v1.0.1 @@ -88,7 +87,7 @@ require ( github.com/hashicorp/packer-plugin-profitbricks v1.0.1 github.com/hashicorp/packer-plugin-proxmox v1.0.4 github.com/hashicorp/packer-plugin-puppet v1.0.1 - github.com/hashicorp/packer-plugin-qemu v1.0.1 + github.com/hashicorp/packer-plugin-qemu v1.0.2 github.com/hashicorp/packer-plugin-salt v1.0.0 github.com/hashicorp/packer-plugin-tencentcloud v1.0.3 github.com/hashicorp/packer-plugin-triton v1.0.0 @@ -96,7 +95,7 @@ require ( github.com/hashicorp/packer-plugin-vagrant v1.0.1 github.com/hashicorp/packer-plugin-virtualbox v1.0.1 github.com/hashicorp/packer-plugin-vmware v1.0.5 - github.com/hashicorp/packer-plugin-vsphere v1.0.2 + github.com/hashicorp/packer-plugin-vsphere v1.0.3 github.com/hashicorp/packer-plugin-yandex v1.0.3 github.com/scaleway/packer-plugin-scaleway v1.0.4 ) @@ -107,7 +106,7 @@ require ( github.com/Azure/azure-sdk-for-go v55.7.0+incompatible // indirect github.com/Azure/go-autorest v14.2.0+incompatible // indirect github.com/Azure/go-autorest/autorest v0.11.19 // indirect - github.com/Azure/go-autorest/autorest/adal v0.9.14 // indirect + github.com/Azure/go-autorest/autorest/adal v0.9.18 // indirect github.com/Azure/go-autorest/autorest/azure/auth v0.4.2 // indirect github.com/Azure/go-autorest/autorest/azure/cli v0.4.2 // indirect github.com/Azure/go-autorest/autorest/date v0.3.0 // indirect @@ -150,11 +149,10 @@ require ( github.com/dylanmei/iso8601 v0.1.0 // indirect github.com/emirpasic/gods v1.12.0 // indirect github.com/fatih/color v1.12.0 // indirect - github.com/form3tech-oss/jwt-go v3.2.2+incompatible // indirect github.com/ghodss/yaml v1.0.0 // indirect github.com/go-git/gcfg v1.5.0 // indirect github.com/go-git/go-billy/v5 v5.3.1 // indirect - github.com/go-ole/go-ole v1.2.5 // indirect + github.com/go-ole/go-ole v1.2.6 // indirect github.com/go-openapi/analysis v0.20.0 // indirect github.com/go-openapi/errors v0.19.9 // indirect github.com/go-openapi/jsonpointer v0.19.5 // indirect @@ -170,7 +168,7 @@ require ( github.com/gofrs/uuid v4.0.0+incompatible // indirect github.com/golang-collections/collections v0.0.0-20130729185459-604e922904d3 // indirect github.com/golang-jwt/jwt v3.2.2+incompatible // indirect - github.com/golang-jwt/jwt/v4 v4.1.0 // indirect + github.com/golang-jwt/jwt/v4 v4.2.0 // indirect github.com/golang/protobuf v1.5.2 // indirect github.com/golang/snappy v0.0.4 // indirect github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect @@ -240,6 +238,8 @@ require ( github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.283 // indirect github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.283 // indirect github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc v1.0.283 // indirect + github.com/tklauser/go-sysconf v0.3.9 // indirect + github.com/tklauser/numcpus v0.4.0 // indirect github.com/ucloud/ucloud-sdk-go v0.20.2 // indirect github.com/ufilesdk-dev/ufile-gosdk v1.0.1 // indirect github.com/ugorji/go/codec v1.2.6 // indirect @@ -248,7 +248,8 @@ require ( github.com/xanzy/ssh-agent v0.3.0 // indirect github.com/yandex-cloud/go-genproto v0.0.0-20211202135052-789603780fb2 // indirect github.com/yandex-cloud/go-sdk v0.0.0-20211206101223-7c4e7926bf53 // indirect - go.mongodb.org/mongo-driver v1.4.6 // indirect + github.com/yusufpapurcu/wmi v1.2.2 // indirect + go.mongodb.org/mongo-driver v1.5.1 // indirect go.opencensus.io v0.23.0 // indirect golang.org/x/mobile v0.0.0-20210901025245-1fde1d6c3ca1 // indirect golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac // indirect diff --git a/go.sum b/go.sum index 3ed80659454..ee9db1bb4a2 100644 --- a/go.sum +++ b/go.sum @@ -68,8 +68,8 @@ github.com/Azure/go-autorest/autorest/adal v0.8.0/go.mod h1:Z6vX6WXXuyieHAXwMj0S github.com/Azure/go-autorest/autorest/adal v0.8.1/go.mod h1:ZjhuQClTqx435SRJ2iMlOxPYt3d2C/T/7TiQCVZSn3Q= github.com/Azure/go-autorest/autorest/adal v0.9.5/go.mod h1:B7KF7jKIeC9Mct5spmyCB/A8CG/sEz1vwIRGv/bbw7A= github.com/Azure/go-autorest/autorest/adal v0.9.13/go.mod h1:W/MM4U6nLxnIskrw4UwWzlHfGjwUS50aOsc/I3yuU8M= -github.com/Azure/go-autorest/autorest/adal v0.9.14 h1:G8hexQdV5D4khOXrWG2YuLCFKhWYmWD8bHYaXN5ophk= -github.com/Azure/go-autorest/autorest/adal v0.9.14/go.mod h1:W/MM4U6nLxnIskrw4UwWzlHfGjwUS50aOsc/I3yuU8M= +github.com/Azure/go-autorest/autorest/adal v0.9.18 h1:kLnPsRjzZZUF3K5REu/Kc+qMQrvuza2bwSnNdhmzLfQ= +github.com/Azure/go-autorest/autorest/adal v0.9.18/go.mod h1:XVVeme+LZwABT8K5Lc3hA4nAe8LDBVle26gTrguhhPQ= github.com/Azure/go-autorest/autorest/azure/auth v0.4.2 h1:iM6UAvjR97ZIeR93qTcwpKNMpV+/FTWjwEbuPD495Tk= github.com/Azure/go-autorest/autorest/azure/auth v0.4.2/go.mod h1:90gmfKdlmKgfjUpnCEpOJzsUEjrWDSLwHIG73tSXddM= github.com/Azure/go-autorest/autorest/azure/cli v0.3.1/go.mod h1:ZG5p860J94/0kI9mNJVoIoLgXcirM2gF5i2kWloofxw= @@ -127,8 +127,6 @@ github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tN github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= -github.com/StackExchange/wmi v1.2.1 h1:VIkavFPXSjcnS+O8yTq7NI32k0R5Aj+v39y29VYDOSA= -github.com/StackExchange/wmi v1.2.1/go.mod h1:rcmrprowKIVzvc+NUiLncP2uuArMWLCbu9SBzvHz7e8= github.com/Telmate/proxmox-api-go v0.0.0-20210804143723-a6998deceba2 h1:Zp/nKTHow4OawYvMRDSe3EUoxUf206k/1POU4JXtQAY= github.com/Telmate/proxmox-api-go v0.0.0-20210804143723-a6998deceba2/go.mod h1:keBhXWLa+UBajvf79xvKcfiqeIc7vZL9wOqxuy1CBGw= github.com/a8m/tree v0.0.0-20210115125333-10a5fd5b637d/go.mod h1:FSdwKX97koS5efgm8WevNf7XS3PqtyFkKDDXrz778cg= @@ -310,7 +308,6 @@ github.com/fatih/color v1.12.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGE github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= github.com/fatih/structtag v1.2.0/go.mod h1:mBJUNpUnHmRKrKlQQlmCrh5PuhftFbNv8Ys4/aAZl94= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= -github.com/form3tech-oss/jwt-go v3.2.2+incompatible h1:TcekIExNqud5crz4xD2pavyTgWiPvpYe4Xau31I0PRk= github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/frankban/quicktest v1.10.0 h1:Gfh+GAJZOAoKZsIZeZbdn2JF10kN1XHNvjsvQK8gVkE= github.com/frankban/quicktest v1.10.0/go.mod h1:ui7WezCLWMWxVWr1GETZY3smRy0G4KWq9vcPtJmFl7Y= @@ -343,8 +340,8 @@ github.com/go-ldap/ldap/v3 v3.1.3/go.mod h1:3rbOH3jRS2u6jg2rJnKAMLE/xQyCKIveG2Sa github.com/go-ldap/ldap/v3 v3.1.10/go.mod h1:5Zun81jBTabRaI8lzN7E1JjyEl1g6zI6u9pd8luAK4Q= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= -github.com/go-ole/go-ole v1.2.5 h1:t4MGB5xEDZvXI+0rMjjsfBsD7yAgp/s9ZDkL1JndXwY= -github.com/go-ole/go-ole v1.2.5/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= +github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= +github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-openapi/analysis v0.0.0-20180825180245-b006789cd277/go.mod h1:k70tL6pCuVxPJOHXQ+wIac1FUrvNkHolPie/cLEU6hI= github.com/go-openapi/analysis v0.17.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= github.com/go-openapi/analysis v0.18.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= @@ -488,8 +485,10 @@ github.com/golang-collections/collections v0.0.0-20130729185459-604e922904d3 h1: github.com/golang-collections/collections v0.0.0-20130729185459-604e922904d3/go.mod h1:nPpo7qLxd6XL3hWJG/O60sR8ZKfMCiIoNap5GvD12KU= github.com/golang-jwt/jwt v3.2.2+incompatible h1:IfV12K8xAKAnZqdXVzCZ+TOjboZ2keLg81eXfW3O+oY= github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I= -github.com/golang-jwt/jwt/v4 v4.1.0 h1:XUgk2Ex5veyVFVeLm0xhusUTQybEbexJXrvPNOKkSY0= +github.com/golang-jwt/jwt/v4 v4.0.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= github.com/golang-jwt/jwt/v4 v4.1.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= +github.com/golang-jwt/jwt/v4 v4.2.0 h1:besgBTC8w8HjP6NzQdxwKH9Z5oQMZ24ThTrHp3cZ8eU= +github.com/golang-jwt/jwt/v4 v4.2.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -634,8 +633,9 @@ github.com/hashicorp/go-getter/gcs/v2 v2.0.0-20200604122502-a6995fa1edad/go.mod github.com/hashicorp/go-getter/s3/v2 v2.0.0-20200604122502-a6995fa1edad h1:hwk5mQRwVvZc/f+So1kHbOhW/f7P2fEcCr2D5pSk9sI= github.com/hashicorp/go-getter/s3/v2 v2.0.0-20200604122502-a6995fa1edad/go.mod h1:kcB6Mv+0wzYXbQjTAeD/Pb85145WcFk2EElpe02fuoE= github.com/hashicorp/go-getter/v2 v2.0.0-20200511090339-3107ec4af37a/go.mod h1:QJ+LwRM91JBKBLyHoKBrcmi49i9Tu/ItpgTNXWSnpGM= -github.com/hashicorp/go-getter/v2 v2.0.0 h1:wamdcQazMBZK6VwUo3HAOWLkcOJBWBoXPKfmf7/S17w= github.com/hashicorp/go-getter/v2 v2.0.0/go.mod h1:w65fE5glbccYjndAuj1kA5lnVBGZYEaH0e5qA1kpIks= +github.com/hashicorp/go-getter/v2 v2.0.1 h1:cHb4azguMwy0NRlEX5U3mT17HM7I17vd8RjBmrJ+1lY= +github.com/hashicorp/go-getter/v2 v2.0.1/go.mod h1:w65fE5glbccYjndAuj1kA5lnVBGZYEaH0e5qA1kpIks= github.com/hashicorp/go-hclog v0.0.0-20180709165350-ff2cf002a8dd/go.mod h1:9bjs9uLqI8l75knNv3lV1kA55veR+WUPSiKIWcQHudI= github.com/hashicorp/go-hclog v0.8.0/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= @@ -681,8 +681,9 @@ github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/b github.com/hashicorp/go-version v1.1.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go-version v1.2.1/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hashicorp/go-version v1.3.0 h1:McDWVJIU/y+u1BRV06dPaLfLCaT7fUTJLp5r04x7iNw= github.com/hashicorp/go-version v1.3.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hashicorp/go-version v1.4.0 h1:aAQzgqIrRKRa7w75CKpbBxYsmUoPjzVm1W59ca1L0J4= +github.com/hashicorp/go-version v1.4.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= @@ -705,12 +706,12 @@ github.com/hashicorp/memberlist v0.2.2 h1:5+RffWKwqJ71YPu9mWsF7ZOscZmwfasdA8kbdC github.com/hashicorp/memberlist v0.2.2/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= github.com/hashicorp/packer-plugin-alicloud v1.0.1 h1:8ZcmCQmUZrhiQT4fIq4y1L86jt1OYKP3B8pBoRWd+Mg= github.com/hashicorp/packer-plugin-alicloud v1.0.1/go.mod h1:fiG0Tv6KM0zFC5nf00xwbYUtgiosH4WSEfC4xbda3xA= -github.com/hashicorp/packer-plugin-amazon v1.0.6 h1:NnepQ/y8fFpuvFe6FOdB8IXgrh7tV7GaQHqsWg622PE= -github.com/hashicorp/packer-plugin-amazon v1.0.6/go.mod h1:AZu6u4f61jsqtpaYy1hzXDjnBMNicrGQBxiqEC2qSC8= +github.com/hashicorp/packer-plugin-amazon v1.0.8 h1:aiLCSt6rTduI8wK7Y39Nw3MJ7ax+rhPONIY8U7Cljdc= +github.com/hashicorp/packer-plugin-amazon v1.0.8/go.mod h1:AZu6u4f61jsqtpaYy1hzXDjnBMNicrGQBxiqEC2qSC8= github.com/hashicorp/packer-plugin-ansible v1.0.1 h1:iyZu3XrdBKGUlJ4SwPGMxE8epXZ8fxy11bEvxPBC02c= github.com/hashicorp/packer-plugin-ansible v1.0.1/go.mod h1:t59UyR2PL+rh0stn++wDrj3nTZ6uT/WbFakQonKV0is= -github.com/hashicorp/packer-plugin-azure v1.0.4 h1:T4XawZz5tMFPTNvJtJkLqsP4aeygJlsYQdb94iuRJMg= -github.com/hashicorp/packer-plugin-azure v1.0.4/go.mod h1:jyAEPwTKRdUPi4OPQH21cR/nRtWOoOQTIt1pcD1seoo= +github.com/hashicorp/packer-plugin-azure v1.0.6 h1:kKmL8hPx5YGymQjlNqx5BA7k+as2decFjzauhHiIrsw= +github.com/hashicorp/packer-plugin-azure v1.0.6/go.mod h1:Ry3sZgp251r6l9AgLovy9pc03V6CeczFcgMbg68iW34= github.com/hashicorp/packer-plugin-chef v1.0.2 h1:hkVhBuglBc5wY4cNfFObW7hzJuT+VdWMAu/gQ9nDNOI= github.com/hashicorp/packer-plugin-chef v1.0.2/go.mod h1:RWNaO+NprfeW4mdZDAGaLPJE3hUR8f/poSw1MNTt+NA= github.com/hashicorp/packer-plugin-cloudstack v1.0.0 h1:TB2XbgaFZ88fJIoldNbCvKjGgaCa3uT2NqrpNrgaCTw= @@ -727,8 +728,8 @@ github.com/hashicorp/packer-plugin-hcloud v1.0.2 h1:1JBtlGmN5fkgekAAOeTQnYz2+KSh github.com/hashicorp/packer-plugin-hcloud v1.0.2/go.mod h1:NlVpYH32AmnTmq7l5ahEQ3g2NhIx1awM7UxoDDvPcy8= github.com/hashicorp/packer-plugin-hyperone v1.0.0 h1:4KAu7WTqsZwC6gnL+AGXSJ+DHQ6K73ywl8W1TOZPjZk= github.com/hashicorp/packer-plugin-hyperone v1.0.0/go.mod h1:5SH11eFa42jjZORgK/V4MNS4ZJFKNtNAf/maGrGKSvY= -github.com/hashicorp/packer-plugin-hyperv v1.0.1 h1:gx0cochGNIfkFx9LNv1cG1OFv2gpS02j7M8J9sTf7gM= -github.com/hashicorp/packer-plugin-hyperv v1.0.1/go.mod h1:4SBBv74Q5VbBGx4e76f2zK1pHOH/xeazZ90XO1FcQog= +github.com/hashicorp/packer-plugin-hyperv v1.0.2 h1:qyorm/BnkI11OS0UJZwSSbjoED9UtF5Ibdhko5xY7s8= +github.com/hashicorp/packer-plugin-hyperv v1.0.2/go.mod h1:4SBBv74Q5VbBGx4e76f2zK1pHOH/xeazZ90XO1FcQog= github.com/hashicorp/packer-plugin-inspec v1.0.0 h1:6qRgH90Q+L3HSzo5UvuSozzS4VzU+ckkwJi9pMHYW1M= github.com/hashicorp/packer-plugin-inspec v1.0.0/go.mod h1:SsVyBs8b/g1wMC+4HgZQWT01kqxrwprA7dKxHAIRFKw= github.com/hashicorp/packer-plugin-jdcloud v1.0.0 h1:I2SspacXTVENzEHkUHiyac/DTScmBTHC7YLqh6L/IYQ= @@ -757,16 +758,17 @@ github.com/hashicorp/packer-plugin-proxmox v1.0.4 h1:z0D7NjGRjHGzlQTk62O33XQiOz4 github.com/hashicorp/packer-plugin-proxmox v1.0.4/go.mod h1:3iqJV2GfdzR0tMo5/wshTpNDeAl1Bxg/NJXyqVSwehk= github.com/hashicorp/packer-plugin-puppet v1.0.1 h1:/obGvsyiKiO2hX9TxRTJ7Y+/44K4WqKJlzg4xHAyIoY= github.com/hashicorp/packer-plugin-puppet v1.0.1/go.mod h1:avMyKLTT/6SVR/hEgJk92SMziK3nwlNJ00kOYgwIDMk= -github.com/hashicorp/packer-plugin-qemu v1.0.1 h1:HZZ4C41GbmOwEG+AeDlPpltWNWUnbXf1wRvsaq8Snc0= -github.com/hashicorp/packer-plugin-qemu v1.0.1/go.mod h1:QnUWZ5+CaAXejL5pIBJGd050OWWI2GOiPa6Gb8FunLU= +github.com/hashicorp/packer-plugin-qemu v1.0.2 h1:/SLvJMrQ/6HszHTQwARgtnJqDlNqTIK66l/RXgGDKyQ= +github.com/hashicorp/packer-plugin-qemu v1.0.2/go.mod h1:viSqIBi1OXQxsmkxZst79zD1d5Rfus19f7IhaDf4yk4= github.com/hashicorp/packer-plugin-salt v1.0.0 h1:bLGdlDG2nLyOzjp/5d2rmZ9XVxDeDUGejOK3wayqEL4= github.com/hashicorp/packer-plugin-salt v1.0.0/go.mod h1:onggPITzeB6LPSW8XlSobu8eI6yj3IMUi5cS6vWnL7s= github.com/hashicorp/packer-plugin-sdk v0.2.3/go.mod h1:MAOhxLneNh27t6N6SMyRcIR5qSE86e6yYCcEfRScwIE= github.com/hashicorp/packer-plugin-sdk v0.2.5/go.mod h1:ii9ub5UNAp30RGod3i3W8qj7wA+H7kpURnD+Jt7oDkQ= github.com/hashicorp/packer-plugin-sdk v0.2.7/go.mod h1:ii9ub5UNAp30RGod3i3W8qj7wA+H7kpURnD+Jt7oDkQ= github.com/hashicorp/packer-plugin-sdk v0.2.9/go.mod h1:ii9ub5UNAp30RGod3i3W8qj7wA+H7kpURnD+Jt7oDkQ= -github.com/hashicorp/packer-plugin-sdk v0.2.11 h1:FsL2oOfLJmXC9F6W9eMFe0eUi3+ggFuqkLGX41fyPE0= github.com/hashicorp/packer-plugin-sdk v0.2.11/go.mod h1:DI8REf9TEIcVkYPErI/nedo6zS2h81ze7sKuc/mIlTE= +github.com/hashicorp/packer-plugin-sdk v0.2.12-0.20220216103740-f7d4bf877a45 h1:NOEkBi0iohcGGVFjM8QBlZS69AbrXCuv5Vx+41CG34A= +github.com/hashicorp/packer-plugin-sdk v0.2.12-0.20220216103740-f7d4bf877a45/go.mod h1:DI8REf9TEIcVkYPErI/nedo6zS2h81ze7sKuc/mIlTE= github.com/hashicorp/packer-plugin-tencentcloud v1.0.3 h1:8U2vMFyIE+pizoMDsSLyMBsbNdB1HzRAIaTJNIELyi4= github.com/hashicorp/packer-plugin-tencentcloud v1.0.3/go.mod h1:TCSlq9lCFU8H8eMMWNtwdnCeyHmaQ1A13PR11EJoJh0= github.com/hashicorp/packer-plugin-triton v1.0.0 h1:Uvh8fjEKqlii61BzIt1VEgSyJXL+UYfuMHCj44aVpU8= @@ -779,8 +781,8 @@ github.com/hashicorp/packer-plugin-virtualbox v1.0.1 h1:jaLZqXBJPjcE2gMA8Prialxh github.com/hashicorp/packer-plugin-virtualbox v1.0.1/go.mod h1:u4P4/2/kLbJPer7wYNwtgoS8ZZH5r50Np8gKtgcMUsQ= github.com/hashicorp/packer-plugin-vmware v1.0.5 h1:ORnhhad1zu1Xr0yBinl0ydwb/9wiqtmnbGsDiMh7BGQ= github.com/hashicorp/packer-plugin-vmware v1.0.5/go.mod h1:uPs9m+Z/5WQCEhV7NAeQBJmeiC2D9SSo4X3UoHsWbC8= -github.com/hashicorp/packer-plugin-vsphere v1.0.2 h1:/fq4iJCbWhPqzpeh7XdK++Lvv7cEciEXLrQ6JE1BltU= -github.com/hashicorp/packer-plugin-vsphere v1.0.2/go.mod h1:VGihqZXUJlvDp/g4qAU3pVmSvKBtBgidjltkGdqLOAI= +github.com/hashicorp/packer-plugin-vsphere v1.0.3 h1:3vUlEJNtRpnv3TiyfQhBxGauDfI10+lFG6ddKGZ4ALg= +github.com/hashicorp/packer-plugin-vsphere v1.0.3/go.mod h1:P35z2Gnq4K0sSeuW8QV+5EzEPsuX4zl2+HBtuRmh6Kc= github.com/hashicorp/packer-plugin-yandex v1.0.3 h1:yulYLS9yPMjV9GgQxbZ6w7B3GRmE0AfFHG2Kr6a8lCU= github.com/hashicorp/packer-plugin-yandex v1.0.3/go.mod h1:aLAiKgTPt0ioLnxEd9ITlyNhoHb7KvpiaNcMw1RbnyI= github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= @@ -1077,8 +1079,8 @@ github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= github.com/sergi/go-diff v1.1.0 h1:we8PVUC3FE2uYfodKH/nBHMSetSfHDR6scGdBi+erh0= github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= -github.com/shirou/gopsutil v3.21.1+incompatible h1:2LwXWdbjXwyDgq26Yy/OT4xozlpmssQfy/rtfhWb0bY= -github.com/shirou/gopsutil v3.21.1+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= +github.com/shirou/gopsutil v3.21.11+incompatible h1:+1+c1VGhc88SSonWP6foOcLhvnKlUeu/erjjvaPEYiI= +github.com/shirou/gopsutil v3.21.11+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4= github.com/sirupsen/logrus v1.0.4-0.20170822132746-89742aefa4b2/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= @@ -1126,6 +1128,11 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc v1.0.283 h1:P0ENpul github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc v1.0.283/go.mod h1:SKgeSsIfPEM6BeoIFiGHsWG9UsEXzkK0SkWx51H/OS8= github.com/tidwall/pretty v1.0.0 h1:HsD+QiTn7sK6flMKIvNmpqz1qrpP3Ps6jOKIKMooyg4= github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= +github.com/tklauser/go-sysconf v0.3.9 h1:JeUVdAOWhhxVcU6Eqr/ATFHgXk/mmiItdKeJPev3vTo= +github.com/tklauser/go-sysconf v0.3.9/go.mod h1:11DU/5sG7UexIrp/O6g35hrWzu0JxlwQ3LSFUzyeuhs= +github.com/tklauser/numcpus v0.3.0/go.mod h1:yFGUr7TUHQRAhyqBcEg0Ge34zDBAsIvJJcyE6boqnA8= +github.com/tklauser/numcpus v0.4.0 h1:E53Dm1HjH1/R2/aoCtXtPgzmElmn51aOkhCFSuZq//o= +github.com/tklauser/numcpus v0.4.0/go.mod h1:1+UI3pD8NW14VMwdgJNJ1ESk2UnwhAnz5hMwiKKqXCQ= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= github.com/ucloud/ucloud-sdk-go v0.20.2 h1:ZNB38C7oZ2imCHEC79mVFvVT+ASkbryriOkZ+q2E0XI= @@ -1158,6 +1165,9 @@ github.com/xanzy/go-cloudstack v2.4.1+incompatible h1:Oc4xa2+I94h1g/QJ+nHoq597nJ github.com/xanzy/go-cloudstack v2.4.1+incompatible/go.mod h1:s3eL3z5pNXF5FVybcT+LIVdId8pYn709yv6v5mrkrQE= github.com/xanzy/ssh-agent v0.3.0 h1:wUMzuKtKilRgBAD1sUb8gOwwRr2FGoBVumcjoOACClI= github.com/xanzy/ssh-agent v0.3.0/go.mod h1:3s9xbODqPuuhK9JV1R321M/FlMZSBvE5aY6eAcqrDh0= +github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI= +github.com/xdg-go/scram v1.0.2/go.mod h1:1WAq6h33pAW+iRreB34OORO2Nf7qel3VV3fjBj+hCSs= +github.com/xdg-go/stringprep v1.0.2/go.mod h1:8F9zXuvzgwmyT5DUm4GUfZGDdT3W+LCvS6+da4O5kxM= github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c/go.mod h1:lB8K/P019DLNhemzwFU4jHLhdvlE6uDZjXFejJXr49I= github.com/xdg/stringprep v0.0.0-20180714160509-73f8eece6fdc/go.mod h1:Jhud4/sHMO4oL310DaZAKk9ZaJ08SJfe+sJh0HrGL1Y= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= @@ -1166,11 +1176,14 @@ github.com/yandex-cloud/go-genproto v0.0.0-20211202135052-789603780fb2 h1:NOMh7O github.com/yandex-cloud/go-genproto v0.0.0-20211202135052-789603780fb2/go.mod h1:HEUYX/p8966tMUHHT+TsS0hF/Ca/NYwqprC5WXSDMfE= github.com/yandex-cloud/go-sdk v0.0.0-20211206101223-7c4e7926bf53 h1:SOTpRQ+mqmu3IbemdahJSev3Srp7CYNUzjDbFlBPeHU= github.com/yandex-cloud/go-sdk v0.0.0-20211206101223-7c4e7926bf53/go.mod h1:fjnP1VWobOVjfhIfeOZvq+zxhdTbqsddVXUm4psPkRU= +github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7JulP+udvsHwJoVG1YGAP6VLg4y9I5dyZdqmA= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yusufpapurcu/wmi v1.2.2 h1:KBNDSne4vP5mbSWnJbO+51IMOXJB67QiYCSBrubbPRg= +github.com/yusufpapurcu/wmi v1.2.2/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= github.com/zclconf/go-cty v1.0.0/go.mod h1:xnAOWiHeOqg2nWS62VtQ7pbOu17FtxJNW8RLEih+O3s= github.com/zclconf/go-cty v1.2.0/go.mod h1:hOPWgoHbaTUnI5k4D2ld+GRpFJSCe6bCM7m1q/N4PQ8= github.com/zclconf/go-cty v1.4.0/go.mod h1:nHzOclRkoj++EU9ZjSrZvRG0BXIWt8c7loYc0qXAFGQ= @@ -1189,8 +1202,9 @@ go.mongodb.org/mongo-driver v1.3.0/go.mod h1:MSWZXKOynuguX+JSvwP8i+58jYCXxbia8HS go.mongodb.org/mongo-driver v1.3.4/go.mod h1:MSWZXKOynuguX+JSvwP8i+58jYCXxbia8HS3gZBapIE= go.mongodb.org/mongo-driver v1.4.3/go.mod h1:WcMNYLx/IlOxLe6JRJiv2uXuCz6zBLndR4SoGjYphSc= go.mongodb.org/mongo-driver v1.4.4/go.mod h1:WcMNYLx/IlOxLe6JRJiv2uXuCz6zBLndR4SoGjYphSc= -go.mongodb.org/mongo-driver v1.4.6 h1:rh7GdYmDrb8AQSkF8yteAus8qYOgOASWDOv1BWqBXkU= go.mongodb.org/mongo-driver v1.4.6/go.mod h1:WcMNYLx/IlOxLe6JRJiv2uXuCz6zBLndR4SoGjYphSc= +go.mongodb.org/mongo-driver v1.5.1 h1:9nOVLGDfOaZ9R0tBumx/BcuqkbFpyTCU2r/Po7A2azI= +go.mongodb.org/mongo-driver v1.5.1/go.mod h1:gRXCHX4Jo7J0IJ1oDQyUxF7jfy19UfxniMS4xxMmUqw= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= @@ -1224,6 +1238,7 @@ golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3 golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191202143827-86a70503ff7e/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200302210943-78000ba7a073/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200422194213-44a606286825/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200604202706-70a84ac30bf9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= @@ -1234,8 +1249,9 @@ golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWP golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210415154028-4f45737414dc/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= -golang.org/x/crypto v0.0.0-20210817164053-32db794688a5 h1:HWj/xjIHfjYU5nVXpTM0s39J9CbLn7Cc5a7IC5rwsMQ= golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519 h1:7I4JAnoQBe7ZtJcBaYHi5UtiO8tQHbUSXxL+pnGRANg= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -1445,11 +1461,13 @@ golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210816074244-15123e1e1f71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210831042530-f4d43177bf5e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210917161153-d61c044b1678 h1:J27LZFQBFoihqXoegpscI10HpjZ7B5WQLLKL2FZXQKw= golang.org/x/sys v0.0.0-20210917161153-d61c044b1678/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27 h1:XDXtA5hveEEV8JB2l7nhMTp3t3cHp9ZpwcdjqyEWLlo= +golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b h1:9zKuko04nR4gjZ4+DNjHqRlAJqbJETHwiNKDqTfOjfE= diff --git a/hcl2template/parser.go b/hcl2template/parser.go index c84934c53df..1dc518c0590 100644 --- a/hcl2template/parser.go +++ b/hcl2template/parser.go @@ -193,7 +193,7 @@ func (p *Parser) Parse(filename string, varFiles []string, argVars map[string]st } for _, file := range files { - moreLocals, morediags := cfg.parseLocalVariables(file) + moreLocals, morediags := parseLocalVariableBlocks(file) diags = append(diags, morediags...) cfg.LocalBlocks = append(cfg.LocalBlocks, moreLocals...) } @@ -315,6 +315,7 @@ func (cfg *PackerConfig) Initialize(opts packer.InitializeOptions) hcl.Diagnosti moreDiags = cfg.LocalVariables.ValidateValues() diags = append(diags, moreDiags...) diags = append(diags, cfg.evaluateDatasources(opts.SkipDatasourcesExecution)...) + diags = append(diags, checkForDuplicateLocalDefinition(cfg.LocalBlocks)...) diags = append(diags, cfg.evaluateLocalVariables(cfg.LocalBlocks)...) filterVarsFromLogs(cfg.InputVariables) diff --git a/hcl2template/types.packer_config.go b/hcl2template/types.packer_config.go index f91d3ae4db2..bee8276e092 100644 --- a/hcl2template/types.packer_config.go +++ b/hcl2template/types.packer_config.go @@ -177,42 +177,29 @@ func (c *PackerConfig) decodeInputVariables(f *hcl.File) hcl.Diagnostics { return diags } -// parseLocalVariables looks in the found blocks for 'locals' blocks. It -// should be called after parsing input variables so that they can be -// referenced. -func (c *PackerConfig) parseLocalVariables(f *hcl.File) ([]*LocalBlock, hcl.Diagnostics) { +// parseLocalVariableBlocks looks in the AST for 'local' and 'locals' blocks and +// returns them all. +func parseLocalVariableBlocks(f *hcl.File) ([]*LocalBlock, hcl.Diagnostics) { var diags hcl.Diagnostics content, moreDiags := f.Body.Content(configSchema) diags = append(diags, moreDiags...) - locals := c.LocalBlocks + var locals []*LocalBlock for _, block := range content.Blocks { switch block.Type { case localLabel: - l, moreDiags := decodeLocalBlock(block, locals) + block, moreDiags := decodeLocalBlock(block) diags = append(diags, moreDiags...) - if l != nil { - locals = append(locals, l) - } if moreDiags.HasErrors() { return locals, diags } + locals = append(locals, block) case localsLabel: attrs, moreDiags := block.Body.JustAttributes() diags = append(diags, moreDiags...) for name, attr := range attrs { - if _, found := c.LocalVariables[name]; found { - diags = append(diags, &hcl.Diagnostic{ - Severity: hcl.DiagError, - Summary: "Duplicate value in " + localsLabel, - Detail: "Duplicate " + name + " definition found.", - Subject: attr.NameRange.Ptr(), - Context: block.DefRange.Ptr(), - }) - return locals, diags - } locals = append(locals, &LocalBlock{ Name: name, Expr: attr.Expr, @@ -221,52 +208,76 @@ func (c *PackerConfig) parseLocalVariables(f *hcl.File) ([]*LocalBlock, hcl.Diag } } - c.LocalBlocks = locals return locals, diags } +func (c *PackerConfig) evaluateAllLocalVariables(locals []*LocalBlock) hcl.Diagnostics { + var diags hcl.Diagnostics + + for _, local := range locals { + diags = append(diags, c.evaluateLocalVariable(local)...) + } + + return diags +} + func (c *PackerConfig) evaluateLocalVariables(locals []*LocalBlock) hcl.Diagnostics { var diags hcl.Diagnostics - if len(locals) > 0 && c.LocalVariables == nil { + if len(locals) == 0 { + return diags + } + + if c.LocalVariables == nil { c.LocalVariables = Variables{} } - var retry, previousL int - for len(locals) > 0 { - local := locals[0] - moreDiags := c.evaluateLocalVariable(local) - if moreDiags.HasErrors() { - if len(locals) == 1 { - // If this is the only local left there's no need - // to try evaluating again - return append(diags, moreDiags...) - } - if previousL == len(locals) { - if retry == 100 { - // To get to this point, locals must have a circle dependency - return append(diags, moreDiags...) - } - retry++ + for foundSomething := true; foundSomething; { + foundSomething = false + for i := 0; i < len(locals); { + local := locals[i] + moreDiags := c.evaluateLocalVariable(local) + if moreDiags.HasErrors() { + i++ + continue } - previousL = len(locals) - - // If local uses another local that has not been evaluated yet this could be the reason of errors - // Push local to the end of slice to be evaluated later - locals = append(locals, local) - } else { - retry = 0 - diags = append(diags, moreDiags...) + foundSomething = true + locals = append(locals[:i], locals[i+1:]...) } - // Remove local from slice - locals = append(locals[:0], locals[1:]...) + } + + if len(locals) != 0 { + // get errors from remaining variables + return c.evaluateAllLocalVariables(locals) } return diags } +func checkForDuplicateLocalDefinition(locals []*LocalBlock) hcl.Diagnostics { + var diags hcl.Diagnostics + + // we could sort by name and then check contiguous names to use less memory, + // but using a map sounds good enough. + names := map[string]struct{}{} + for _, local := range locals { + if _, found := names[local.Name]; found { + diags = append(diags, &hcl.Diagnostic{ + Severity: hcl.DiagError, + Summary: "Duplicate local definition", + Detail: "Duplicate " + local.Name + " definition found.", + Subject: local.Expr.Range().Ptr(), + }) + continue + } + names[local.Name] = struct{}{} + } + return diags +} + func (c *PackerConfig) evaluateLocalVariable(local *LocalBlock) hcl.Diagnostics { var diags hcl.Diagnostics + value, moreDiags := local.Expr.Value(c.EvalContext(LocalContext, nil)) diags = append(diags, moreDiags...) if moreDiags.HasErrors() { @@ -587,6 +598,10 @@ func (cfg *PackerConfig) GetBuilds(opts packer.GetBuildsOptions) ([]packersdk.Bu Type: srcUsage.String(), } + pcb.SetDebug(cfg.debug) + pcb.SetForce(cfg.force) + pcb.SetOnError(cfg.onError) + // Apply the -only and -except command-line options to exclude matching builds. buildName := pcb.Name() possibleBuildNames = append(possibleBuildNames, buildName) diff --git a/hcl2template/types.variables.go b/hcl2template/types.variables.go index 61bb5434527..6cb4977e0e3 100644 --- a/hcl2template/types.variables.go +++ b/hcl2template/types.variables.go @@ -275,18 +275,8 @@ var localBlockSchema = &hcl.BodySchema{ }, } -func decodeLocalBlock(block *hcl.Block, locals []*LocalBlock) (*LocalBlock, hcl.Diagnostics) { +func decodeLocalBlock(block *hcl.Block) (*LocalBlock, hcl.Diagnostics) { name := block.Labels[0] - for _, loc := range locals { - if loc.Name == name { - return nil, []*hcl.Diagnostic{{ - Severity: hcl.DiagError, - Summary: "Duplicate variable", - Detail: "Duplicate " + block.Labels[0] + " variable definition found.", - Context: block.DefRange.Ptr(), - }} - } - } content, diags := block.Body.Content(localBlockSchema) if !hclsyntax.ValidIdentifier(name) { @@ -345,6 +335,7 @@ func (variables *Variables) decodeVariableBlock(block *hcl.Block, ectx *hcl.Eval v := &Variable{ Name: name, Range: block.DefRange, + Type: cty.DynamicPseudoType, } if attr, exists := content.Attributes["description"]; exists { @@ -396,7 +387,9 @@ func (variables *Variables) decodeVariableBlock(block *hcl.Block, ectx *hcl.Eval // It's possible no type attribute was assigned so lets make sure we // have a valid type otherwise there could be issues parsing the value. - if v.Type == cty.NilType { + if v.Type == cty.DynamicPseudoType && + !defaultValue.Type().Equals(cty.EmptyObject) && + !defaultValue.Type().Equals(cty.EmptyTuple) { v.Type = defaultValue.Type() } } @@ -762,7 +755,7 @@ func (cfg *PackerConfig) collectInputVariableValues(env []string, files []*hcl.F // The specified filename is to identify the source of where value originated from in the diagnostics report, if there is an error. func expressionFromVariableDefinition(filename string, value string, variableType cty.Type) (hclsyntax.Expression, hcl.Diagnostics) { switch variableType { - case cty.String, cty.Number, cty.NilType: + case cty.String, cty.Number, cty.NilType, cty.DynamicPseudoType: // when the type is nil (not set in a variable block) we default to // interpreting everything as a string literal. return &hclsyntax.LiteralValueExpr{Val: cty.StringVal(value)}, nil diff --git a/internal/registry/acctest/par.go b/internal/registry/acctest/par.go index 75a5f6553bf..da03088fb37 100644 --- a/internal/registry/acctest/par.go +++ b/internal/registry/acctest/par.go @@ -46,8 +46,8 @@ func NewTestConfig(t *testing.T) (*Config, error) { return &Config{ Client: cli, Loc: &sharedmodels.HashicorpCloudLocationLocation{ - OrganizationID: cfg.OrgId, - ProjectID: cfg.ProjectId, + OrganizationID: cli.OrganizationID, + ProjectID: cli.ProjectID, }, T: t, }, nil diff --git a/internal/registry/mock_service.go b/internal/registry/mock_service.go index 098d4c5db9e..0980260ac95 100644 --- a/internal/registry/mock_service.go +++ b/internal/registry/mock_service.go @@ -12,10 +12,14 @@ import ( "google.golang.org/grpc/status" ) +//MockPackerClientService represents a basic mock of the Cloud Packer Service. +//Upon calling a service method a boolean is set to true to indicate that a method has been called. +//To skip the setting of these booleans set TrackCalledServiceMethods to false; defaults to true in NewMockPackerClientService(). type MockPackerClientService struct { CreateBucketCalled, UpdateBucketCalled, BucketAlreadyExist bool CreateIterationCalled, GetIterationCalled, IterationAlreadyExist, IterationCompleted bool CreateBuildCalled, UpdateBuildCalled, ListBuildsCalled, BuildAlreadyDone bool + TrackCalledServiceMethods bool // Mock Creates CreateBucketResp *models.HashicorpCloudPackerCreateBucketResponse @@ -25,46 +29,27 @@ type MockPackerClientService struct { // Mock Gets GetIterationResp *models.HashicorpCloudPackerGetIterationResponse - ExistingBuilds []string + ExistingBuilds []string + ExistingBuildLabels map[string]string packerSvc.ClientService } +//NewMockPackerClientService returns a basic mock of the Cloud Packer Service. +//Upon calling a service method a boolean is set to true to indicate that a method has been called. +//To skip the setting of these booleans set TrackCalledServiceMethods to false. By default it is true. func NewMockPackerClientService() *MockPackerClientService { m := MockPackerClientService{ - ExistingBuilds: make([]string, 0), - } - - m.CreateBucketResp = &models.HashicorpCloudPackerCreateBucketResponse{ - Bucket: &models.HashicorpCloudPackerBucket{ - ID: "bucket-id", - }, - } - - m.CreateIterationResp = &models.HashicorpCloudPackerCreateIterationResponse{ - Iteration: &models.HashicorpCloudPackerIteration{ - ID: "iteration-id", - }, - } - - m.CreateBuildResp = &models.HashicorpCloudPackerCreateBuildResponse{ - Build: &models.HashicorpCloudPackerBuild{ - PackerRunUUID: "test-uuid", - Status: models.HashicorpCloudPackerBuildStatusUNSET, - }, - } - - m.GetIterationResp = &models.HashicorpCloudPackerGetIterationResponse{ - Iteration: &models.HashicorpCloudPackerIteration{ - ID: "iteration-id", - Builds: make([]*models.HashicorpCloudPackerBuild, 0), - }, + ExistingBuilds: make([]string, 0), + ExistingBuildLabels: make(map[string]string), + TrackCalledServiceMethods: true, } return &m } func (svc *MockPackerClientService) PackerServiceCreateBucket(params *packerSvc.PackerServiceCreateBucketParams, _ runtime.ClientAuthInfoWriter) (*packerSvc.PackerServiceCreateBucketOK, error) { + if svc.BucketAlreadyExist { return nil, status.Error(codes.AlreadyExists, fmt.Sprintf("Code:%d %s", codes.AlreadyExists, codes.AlreadyExists.String())) } @@ -76,19 +61,27 @@ func (svc *MockPackerClientService) PackerServiceCreateBucket(params *packerSvc. return nil, errors.New("No bucket slug was passed in") } - svc.CreateBucketCalled = true - // This is set in NewMockPackerClientService() - svc.CreateBucketResp.Bucket.Slug = params.Body.BucketSlug + if svc.TrackCalledServiceMethods { + svc.CreateBucketCalled = true + } + payload := &models.HashicorpCloudPackerCreateBucketResponse{ + Bucket: &models.HashicorpCloudPackerBucket{ + ID: "bucket-id", + }, + } + payload.Bucket.Slug = params.Body.BucketSlug ok := &packerSvc.PackerServiceCreateBucketOK{ - Payload: svc.CreateBucketResp, + Payload: payload, } return ok, nil } func (svc *MockPackerClientService) PackerServiceUpdateBucket(params *packerSvc.PackerServiceUpdateBucketParams, _ runtime.ClientAuthInfoWriter) (*packerSvc.PackerServiceUpdateBucketOK, error) { - svc.UpdateBucketCalled = true + if svc.TrackCalledServiceMethods { + svc.UpdateBucketCalled = true + } return packerSvc.NewPackerServiceUpdateBucketOK(), nil } @@ -106,12 +99,20 @@ func (svc *MockPackerClientService) PackerServiceCreateIteration(params *packerS return nil, errors.New("No valid Fingerprint was passed in") } - svc.CreateIterationCalled = true - svc.CreateIterationResp.Iteration.BucketSlug = params.Body.BucketSlug - svc.CreateIterationResp.Iteration.Fingerprint = params.Body.Fingerprint + if svc.TrackCalledServiceMethods { + svc.CreateIterationCalled = true + } + payload := &models.HashicorpCloudPackerCreateIterationResponse{ + Iteration: &models.HashicorpCloudPackerIteration{ + ID: "iteration-id", + }, + } + + payload.Iteration.BucketSlug = params.Body.BucketSlug + payload.Iteration.Fingerprint = params.Body.Fingerprint ok := &packerSvc.PackerServiceCreateIterationOK{ - Payload: svc.CreateIterationResp, + Payload: payload, } return ok, nil @@ -130,11 +131,21 @@ func (svc *MockPackerClientService) PackerServiceGetIteration(params *packerSvc. return nil, errors.New("No valid Fingerprint was passed in") } - svc.GetIterationCalled = true + if svc.TrackCalledServiceMethods { + svc.GetIterationCalled = true + } + + payload := &models.HashicorpCloudPackerGetIterationResponse{ + Iteration: &models.HashicorpCloudPackerIteration{ + ID: "iteration-id", + Builds: make([]*models.HashicorpCloudPackerBuild, 0), + }, + } - // + payload.Iteration.BucketSlug = params.BucketSlug + payload.Iteration.Fingerprint = *params.Fingerprint ok := &packerSvc.PackerServiceGetIterationOK{ - Payload: svc.GetIterationResp, + Payload: payload, } if svc.IterationCompleted { @@ -147,6 +158,7 @@ func (svc *MockPackerClientService) PackerServiceGetIteration(params *packerSvc. Images: []*models.HashicorpCloudPackerImage{ {ImageID: "image-id", Region: "somewhere"}, }, + Labels: make(map[string]string), }) } @@ -166,13 +178,22 @@ func (svc *MockPackerClientService) PackerServiceCreateBuild(params *packerSvc.P return nil, errors.New("No build componentType was passed in") } - svc.CreateBuildCalled = true + if svc.TrackCalledServiceMethods { + svc.CreateBuildCalled = true + } - svc.CreateBuildResp.Build.ComponentType = params.Body.Build.ComponentType - svc.CreateBuildResp.Build.IterationID = params.IterationID + payload := &models.HashicorpCloudPackerCreateBuildResponse{ + Build: &models.HashicorpCloudPackerBuild{ + PackerRunUUID: "test-uuid", + Status: models.HashicorpCloudPackerBuildStatusUNSET, + }, + } + + payload.Build.ComponentType = params.Body.Build.ComponentType + payload.Build.IterationID = params.IterationID ok := packerSvc.NewPackerServiceCreateBuildOK() - ok.Payload = svc.CreateBuildResp + ok.Payload = payload return ok, nil } @@ -190,7 +211,10 @@ func (svc *MockPackerClientService) PackerServiceUpdateBuild(params *packerSvc.P return nil, errors.New("No build status was passed in") } - svc.UpdateBuildCalled = true + if svc.TrackCalledServiceMethods { + svc.UpdateBuildCalled = true + } + ok := packerSvc.NewPackerServiceUpdateBuildOK() ok.Payload = &models.HashicorpCloudPackerUpdateBuildResponse{ Build: &models.HashicorpCloudPackerBuild{ @@ -204,9 +228,14 @@ func (svc *MockPackerClientService) PackerServiceListBuilds(params *packerSvc.Pa status := models.HashicorpCloudPackerBuildStatusUNSET images := make([]*models.HashicorpCloudPackerImage, 0) + labels := make(map[string]string) if svc.BuildAlreadyDone { status = models.HashicorpCloudPackerBuildStatusDONE - images = append(images, &models.HashicorpCloudPackerImage{ID: "image-id", Region: "somewhere"}) + images = append(images, &models.HashicorpCloudPackerImage{ImageID: "image-id", Region: "somewhere"}) + } + + for k, v := range svc.ExistingBuildLabels { + labels[k] = v } builds := make([]*models.HashicorpCloudPackerBuild, 0, len(svc.ExistingBuilds)) @@ -214,8 +243,10 @@ func (svc *MockPackerClientService) PackerServiceListBuilds(params *packerSvc.Pa builds = append(builds, &models.HashicorpCloudPackerBuild{ ID: name + "--" + strconv.Itoa(i), ComponentType: name, + CloudProvider: "mockProvider", Status: status, Images: images, + Labels: labels, }) } diff --git a/internal/registry/service.go b/internal/registry/service.go index 1382fe492bc..3556bb2232a 100644 --- a/internal/registry/service.go +++ b/internal/registry/service.go @@ -4,7 +4,6 @@ import ( "context" "errors" "fmt" - "time" "github.com/hashicorp/hcp-sdk-go/clients/cloud-packer-service/preview/2021-04-30/client/packer_service" "github.com/hashicorp/hcp-sdk-go/clients/cloud-packer-service/preview/2021-04-30/models" @@ -127,12 +126,6 @@ func (client *Client) GetIteration(ctx context.Context, bucketSlug string, opts } if resp.Payload.Iteration != nil { - if !time.Time(resp.Payload.Iteration.RevokeAt).IsZero() { - // If RevokeAt is not a zero date, it means this iteration is revoked and should not be used - // to build new images. - return nil, fmt.Errorf("the iteration %s is revoked and can not be used on Packer builds", - resp.Payload.Iteration.ID) - } return resp.Payload.Iteration, nil } @@ -254,12 +247,6 @@ func (client *Client) GetIterationFromChannel( if resp.Payload.Channel != nil { if resp.Payload.Channel.Iteration != nil { - if !time.Time(resp.Payload.Channel.Iteration.RevokeAt).IsZero() { - // If RevokeAt is not a zero date, it means this iteration is revoked and should not be used - // to build new images. - return nil, fmt.Errorf("the iteration associated with the channel %s is revoked and can not be used on Packer builds", - channelName) - } return resp.Payload.Channel.Iteration, nil } return nil, fmt.Errorf("there is no iteration associated with the channel %s", diff --git a/internal/registry/types.bucket.go b/internal/registry/types.bucket.go index 4b40b2ef34c..babd9d9ccf4 100644 --- a/internal/registry/types.bucket.go +++ b/internal/registry/types.bucket.go @@ -29,7 +29,10 @@ type Bucket struct { // NewBucketWithIteration initializes a simple Bucket that can be used publishing Packer build // images to the HCP Packer registry. func NewBucketWithIteration(opts IterationOptions) (*Bucket, error) { - b := Bucket{} + b := Bucket{ + BucketLabels: make(map[string]string), + BuildLabels: make(map[string]string), + } i, err := NewIteration(opts) if err != nil { @@ -90,9 +93,10 @@ func (b *Bucket) RegisterBuildForComponent(sourceName string) { return } - if _, ok := b.Iteration.builds.Load(sourceName); ok { + if ok := b.Iteration.HasBuild(sourceName); ok { return } + b.Iteration.expectedBuilds = append(b.Iteration.expectedBuilds, sourceName) } @@ -112,23 +116,22 @@ func (b *Bucket) CreateInitialBuildForIteration(ctx context.Context, componentTy if err != nil { return err } - id := resp.Payload.Build.ID - if b.BuildLabels == nil { - b.BuildLabels = make(map[string]string) + build, err := NewBuildFromCloudPackerBuild(resp.Payload.Build) + if err != nil { + log.Printf("[TRACE] unable to load created build for %q: %v", componentType, err) } - build := &Build{ - ID: id, - ComponentType: componentType, - RunUUID: b.Iteration.RunUUID, - Status: status, - Labels: b.BuildLabels, - Images: make(map[string]registryimage.Image), - } + build.Labels = make(map[string]string) + build.Images = make(map[string]registryimage.Image) - log.Println("[TRACE] creating initial build for component", componentType) - b.Iteration.builds.Store(componentType, build) + // Initial build labels are only pushed to the registry when an actual Packer run is executed on the said build. + // For example filtered builds (e.g --only or except) will not get the initial build labels until a build is executed on them. + // Global build label updates to existing builds are handled in PopulateIteration. + if len(b.BuildLabels) > 0 { + build.MergeLabels(b.BuildLabels) + } + b.Iteration.StoreBuild(componentType, build) return nil } @@ -139,22 +142,16 @@ func (b *Bucket) UpdateBuildStatus(ctx context.Context, name string, status mode return b.markBuildComplete(ctx, name) } - // Lets check if we have something already for this build - build, ok := b.Iteration.builds.Load(name) - if !ok { - return fmt.Errorf("no build for the component %q associated to the iteration %q", name, b.Iteration.ID) - } - - buildToUpdate, ok := build.(*Build) - if !ok { - return fmt.Errorf("the build for the component %q does not appear to be a valid registry Build", name) + buildToUpdate, err := b.Iteration.Build(name) + if err != nil { + return err } if buildToUpdate.ID == "" { return fmt.Errorf("the build for the component %q does not have a valid id", name) } - _, err := b.client.UpdateBuild(ctx, + _, err = b.client.UpdateBuild(ctx, buildToUpdate.ID, buildToUpdate.RunUUID, buildToUpdate.CloudProvider, @@ -167,7 +164,7 @@ func (b *Bucket) UpdateBuildStatus(ctx context.Context, name string, status mode return err } buildToUpdate.Status = status - b.Iteration.builds.Store(name, buildToUpdate) + b.Iteration.StoreBuild(name, buildToUpdate) return nil } @@ -175,14 +172,9 @@ func (b *Bucket) UpdateBuildStatus(ctx context.Context, name string, status mode // Upon a successful call markBuildComplete will publish all images created by the named build, // and set the registry build to done. A build with no images can not be set to DONE. func (b *Bucket) markBuildComplete(ctx context.Context, name string) error { - build, ok := b.Iteration.builds.Load(name) - if !ok { - return fmt.Errorf("no build for the component %q associated to the iteration %q", name, b.Iteration.ID) - } - - buildToUpdate, ok := build.(*Build) - if !ok { - return fmt.Errorf("the build for the component %q does not appear to be a valid registry Build", name) + buildToUpdate, err := b.Iteration.Build(name) + if err != nil { + return err } if buildToUpdate.ID == "" { @@ -215,7 +207,7 @@ func (b *Bucket) markBuildComplete(ctx context.Context, name string) error { images = append(images, &models.HashicorpCloudPackerImageCreateBody{ImageID: image.ImageID, Region: image.ProviderRegion}) } - _, err := b.client.UpdateBuild(ctx, + _, err = b.client.UpdateBuild(ctx, buildToUpdate.ID, buildToUpdate.RunUUID, buildToUpdate.CloudProvider, @@ -229,7 +221,7 @@ func (b *Bucket) markBuildComplete(ctx context.Context, name string) error { } buildToUpdate.Status = status - b.Iteration.builds.Store(name, buildToUpdate) + b.Iteration.StoreBuild(name, buildToUpdate) return nil } @@ -307,7 +299,7 @@ func (b *Bucket) initializeIteration(ctx context.Context) error { return nil } -// populateIteration populates the bucket iteration with the details needed for tracking builds for a Packer run. +// PopulateIteration populates the bucket iteration with the details needed for tracking builds for a Packer run. // If an existing Packer registry iteration exists for the said iteration fingerprint, calling initialize on iteration // that doesn't yet exist will call createIteration to create the entry on the HCP packer registry for the given bucket. // All build details will be created (if they don't exists) and added to b.Iteration.builds for tracking during runtime. @@ -323,32 +315,27 @@ func (b *Bucket) PopulateIteration(ctx context.Context) error { for _, expected := range b.Iteration.expectedBuilds { var found bool for _, existing := range existingBuilds { + if existing.ComponentType == expected { found = true - build := &Build{ - ID: existing.ID, - ComponentType: existing.ComponentType, - RunUUID: b.Iteration.RunUUID, - Status: existing.Status, - Labels: existing.Labels, + build, err := NewBuildFromCloudPackerBuild(existing) + if err != nil { + return fmt.Errorf("Unable to load existing build for %q: %v", existing.ComponentType, err) } - b.Iteration.builds.Store(existing.ComponentType, build) - - // TODO validate that this is safe. For builds that are DONE do we want to keep track of completed things - // potential issue on updating the status of a build that is already DONE. Is this possible? - for _, image := range existing.Images { - err := b.UpdateImageForBuild(existing.ComponentType, registryimage.Image{ - ImageID: image.ImageID, - ProviderRegion: image.Region, - }) + // When running against an existing build the Packer RunUUID is most likely different. + // We capture that difference here to know that the image was created in a different Packer run. + build.RunUUID = b.Iteration.RunUUID - if err != nil { - log.Printf("[TRACE] unable to load existing images for %q: %v", existing.ComponentType, err) - } + // When bucket build labels represent some dynamic data set, possibly set via some user variable, + // we need to make sure that any newly executed builds get the labels at runtime. + if build.IsNotDone() && len(b.BuildLabels) > 0 { + build.MergeLabels(b.BuildLabels) } log.Printf("[TRACE] a build of component type %s already exists; skipping the create call", expected) + b.Iteration.StoreBuild(existing.ComponentType, build) + break } } @@ -359,25 +346,31 @@ func (b *Bucket) PopulateIteration(ctx context.Context) error { } } + if len(toCreate) == 0 { + return nil + } + var errs *multierror.Error var wg sync.WaitGroup - + var mu sync.Mutex for _, buildName := range toCreate { wg.Add(1) go func(name string) { defer wg.Done() + log.Printf("[TRACE] registering build with iteration for %q.", name) - // Need a way to handle skipping builds that were already created. - // TODO when we load an existing iteration we will probably have a build Id so we should skip. - // we also need to bubble up the errors here. err := b.CreateInitialBuildForIteration(ctx, name) + if checkErrorCode(err, codes.AlreadyExists) { - // Check whether build is complete, and if so, skip it. log.Printf("[TRACE] build %s already exists in Packer registry, continuing...", name) return } - errs = multierror.Append(errs, err) + if err != nil { + mu.Lock() + errs = multierror.Append(errs, err) + mu.Unlock() + } }(buildName) } wg.Wait() @@ -389,15 +382,14 @@ func (b *Bucket) PopulateIteration(ctx context.Context) error { // and is not marked as DONE on the HCP Packer registry. func (b *Bucket) IsExpectingBuildForComponent(buildName string) bool { - v, ok := b.Iteration.builds.Load(buildName) - if !ok { + if !b.Iteration.HasBuild(buildName) { return false } - build := v.(*Build) - hasBuildID := build.ID != "" - hasImages := len(build.Images) == 0 - isNotDone := build.Status != models.HashicorpCloudPackerBuildStatusDONE + build, err := b.Iteration.Build(buildName) + if err != nil { + return false + } - return hasBuildID && hasImages && isNotDone + return build.IsNotDone() } diff --git a/internal/registry/types.bucket_service_test.go b/internal/registry/types.bucket_service_test.go new file mode 100644 index 00000000000..5e3750b3e4e --- /dev/null +++ b/internal/registry/types.bucket_service_test.go @@ -0,0 +1,361 @@ +package registry + +import ( + "context" + "os" + "testing" + + "github.com/hashicorp/hcp-sdk-go/clients/cloud-packer-service/preview/2021-04-30/models" +) + +func TestInitialize_NewBucketNewIteration(t *testing.T) { + //nolint:errcheck + os.Setenv("HCP_PACKER_BUILD_FINGEPRINT", "testnumber") + defer os.Unsetenv("HCP_PACKER_BUILD_FINGERPRINT") + mockService := NewMockPackerClientService() + + b := &Bucket{ + Slug: "TestBucket", + client: &Client{ + Packer: mockService, + }, + } + + var err error + b.Iteration, err = NewIteration(IterationOptions{}) + if err != nil { + t.Errorf("unexpected failure: %v", err) + } + + b.Iteration.expectedBuilds = append(b.Iteration.expectedBuilds, "happycloud.image") + + err = b.Initialize(context.TODO()) + if err != nil { + t.Errorf("unexpected failure: %v", err) + } + + if !mockService.CreateBucketCalled { + t.Errorf("expected a call to CreateBucket but it didn't happen") + } + + if !mockService.CreateIterationCalled { + t.Errorf("expected a call to CreateIteration but it didn't happen") + } + + if mockService.CreateBuildCalled { + t.Errorf("Didn't expect a call to CreateBuild") + } + + if b.Iteration.ID != "iteration-id" { + t.Errorf("expected an iteration to created but it didn't") + } + + err = b.PopulateIteration(context.TODO()) + if err != nil { + t.Errorf("unexpected failure: %v", err) + } + if !mockService.CreateBuildCalled { + t.Errorf("Expected a call to CreateBuild but it didn't happen") + } + + if ok := b.Iteration.HasBuild("happycloud.image"); !ok { + t.Errorf("expected a basic build entry to be created but it didn't") + } + +} + +func TestInitialize_ExistingBucketNewIteration(t *testing.T) { + //nolint:errcheck + os.Setenv("HCP_PACKER_BUILD_FINGEPRINT", "testnumber") + defer os.Unsetenv("HCP_PACKER_BUILD_FINGERPRINT") + mockService := NewMockPackerClientService() + mockService.BucketAlreadyExist = true + + b := &Bucket{ + Slug: "TestBucket", + client: &Client{ + Packer: mockService, + }, + } + + var err error + b.Iteration, err = NewIteration(IterationOptions{}) + if err != nil { + t.Errorf("unexpected failure: %v", err) + } + + b.Iteration.expectedBuilds = append(b.Iteration.expectedBuilds, "happycloud.image") + + err = b.Initialize(context.TODO()) + if err != nil { + t.Errorf("unexpected failure: %v", err) + } + + if !mockService.UpdateBucketCalled { + t.Errorf("expected call to UpdateBucket but it didn't happen") + } + + if !mockService.CreateIterationCalled { + t.Errorf("expected a call to CreateIteration but it didn't happen") + } + + if mockService.CreateBuildCalled { + t.Errorf("Didn't expect a call to CreateBuild") + } + + if b.Iteration.ID != "iteration-id" { + t.Errorf("expected an iteration to created but it didn't") + } + + err = b.PopulateIteration(context.TODO()) + if err != nil { + t.Errorf("unexpected failure: %v", err) + } + if !mockService.CreateBuildCalled { + t.Errorf("Expected a call to CreateBuild but it didn't happen") + } + + if ok := b.Iteration.HasBuild("happycloud.image"); !ok { + t.Errorf("expected a basic build entry to be created but it didn't") + } + +} + +func TestInitialize_ExistingBucketExistingIteration(t *testing.T) { + //nolint:errcheck + os.Setenv("HCP_PACKER_BUILD_FINGEPRINT", "testnumber") + defer os.Unsetenv("HCP_PACKER_BUILD_FINGERPRINT") + mockService := NewMockPackerClientService() + mockService.BucketAlreadyExist = true + mockService.IterationAlreadyExist = true + + b := &Bucket{ + Slug: "TestBucket", + client: &Client{ + Packer: mockService, + }, + } + + var err error + b.Iteration, err = NewIteration(IterationOptions{}) + if err != nil { + t.Errorf("unexpected failure: %v", err) + } + + b.Iteration.expectedBuilds = append(b.Iteration.expectedBuilds, "happycloud.image") + mockService.ExistingBuilds = append(mockService.ExistingBuilds, "happycloud.image") + + err = b.Initialize(context.TODO()) + if err != nil { + t.Errorf("unexpected failure: %v", err) + } + err = b.PopulateIteration(context.TODO()) + if err != nil { + t.Errorf("unexpected failure: %v", err) + } + + if mockService.CreateBucketCalled { + t.Errorf("unexpected call to CreateBucket") + } + + if !mockService.UpdateBucketCalled { + t.Errorf("expected call to UpdateBucket but it didn't happen") + } + + if mockService.CreateIterationCalled { + t.Errorf("unexpected a call to CreateIteration") + } + + if !mockService.GetIterationCalled { + t.Errorf("expected a call to GetIteration but it didn't happen") + } + + if mockService.CreateBuildCalled { + t.Errorf("unexpected a call to CreateBuild") + } + + if b.Iteration.ID != "iteration-id" { + t.Errorf("expected an iteration to created but it didn't") + } + + err = b.PopulateIteration(context.TODO()) + if err != nil { + t.Errorf("unexpected failure: %v", err) + } + + existingBuild, err := b.Iteration.Build("happycloud.image") + if err != nil { + t.Errorf("expected the existing build loaded from an existing bucket to be valid: %v", err) + } + + if existingBuild.Status != models.HashicorpCloudPackerBuildStatusUNSET { + t.Errorf("expected the existing build to be in the default state") + } +} + +func TestInitialize_ExistingBucketCompleteIteration(t *testing.T) { + //nolint:errcheck + os.Setenv("HCP_PACKER_BUILD_FINGEPRINT", "testnumber") + defer os.Unsetenv("HCP_PACKER_BUILD_FINGERPRINT") + mockService := NewMockPackerClientService() + mockService.BucketAlreadyExist = true + mockService.IterationAlreadyExist = true + mockService.IterationCompleted = true + mockService.BuildAlreadyDone = true + + b := &Bucket{ + Slug: "TestBucket", + client: &Client{ + Packer: mockService, + }, + } + + var err error + b.Iteration, err = NewIteration(IterationOptions{}) + if err != nil { + t.Errorf("unexpected failure: %v", err) + } + + b.Iteration.expectedBuilds = append(b.Iteration.expectedBuilds, "happycloud.image") + mockService.ExistingBuilds = append(mockService.ExistingBuilds, "happycloud.image") + + err = b.Initialize(context.TODO()) + if err == nil { + t.Errorf("unexpected failure: %v", err) + } + + if mockService.CreateIterationCalled { + t.Errorf("unexpected call to CreateIteration") + } + + if !mockService.GetIterationCalled { + t.Errorf("expected a call to GetIteration but it didn't happen") + } + + if mockService.CreateBuildCalled { + t.Errorf("unexpected call to CreateBuild") + } + + if b.Iteration.ID != "iteration-id" { + t.Errorf("expected an iteration to be returned but it wasn't") + } +} + +func TestUpdateBuildStatus(t *testing.T) { + //nolint:errcheck + os.Setenv("HCP_PACKER_BUILD_FINGEPRINT", "testnumber") + defer os.Unsetenv("HCP_PACKER_BUILD_FINGERPRINT") + mockService := NewMockPackerClientService() + mockService.BucketAlreadyExist = true + mockService.IterationAlreadyExist = true + + b := &Bucket{ + Slug: "TestBucket", + client: &Client{ + Packer: mockService, + }, + } + + var err error + b.Iteration, err = NewIteration(IterationOptions{}) + if err != nil { + t.Errorf("unexpected failure: %v", err) + } + + b.Iteration.expectedBuilds = append(b.Iteration.expectedBuilds, "happycloud.image") + mockService.ExistingBuilds = append(mockService.ExistingBuilds, "happycloud.image") + + err = b.Initialize(context.TODO()) + if err != nil { + t.Errorf("unexpected failure: %v", err) + } + err = b.PopulateIteration(context.TODO()) + if err != nil { + t.Errorf("unexpected failure: %v", err) + } + + existingBuild, err := b.Iteration.Build("happycloud.image") + if err != nil { + t.Errorf("expected the existing build loaded from an existing bucket to be valid: %v", err) + } + + if existingBuild.Status != models.HashicorpCloudPackerBuildStatusUNSET { + t.Errorf("expected the existing build to be in the default state") + } + + err = b.UpdateBuildStatus(context.TODO(), "happycloud.image", models.HashicorpCloudPackerBuildStatusRUNNING) + if err != nil { + t.Errorf("unexpected failure for PublishBuildStatus: %v", err) + } + + existingBuild, err = b.Iteration.Build("happycloud.image") + if err != nil { + t.Errorf("expected the existing build loaded from an existing bucket to be valid: %v", err) + } + + if existingBuild.Status != models.HashicorpCloudPackerBuildStatusRUNNING { + t.Errorf("expected the existing build to be in the running state") + } +} + +func TestUpdateBuildStatus_DONENoImages(t *testing.T) { + //nolint:errcheck + os.Setenv("HCP_PACKER_BUILD_FINGEPRINT", "testnumber") + defer os.Unsetenv("HCP_PACKER_BUILD_FINGERPRINT") + mockService := NewMockPackerClientService() + mockService.BucketAlreadyExist = true + mockService.IterationAlreadyExist = true + + b := &Bucket{ + Slug: "TestBucket", + client: &Client{ + Packer: mockService, + }, + } + + var err error + b.Iteration, err = NewIteration(IterationOptions{}) + if err != nil { + t.Errorf("unexpected failure: %v", err) + } + + b.Iteration.expectedBuilds = append(b.Iteration.expectedBuilds, "happycloud.image") + mockService.ExistingBuilds = append(mockService.ExistingBuilds, "happycloud.image") + + err = b.Initialize(context.TODO()) + if err != nil { + t.Errorf("unexpected failure: %v", err) + } + err = b.PopulateIteration(context.TODO()) + if err != nil { + t.Errorf("unexpected failure: %v", err) + } + + existingBuild, err := b.Iteration.Build("happycloud.image") + if err != nil { + t.Errorf("expected the existing build loaded from an existing bucket to be valid: %v", err) + } + + if existingBuild.Status != models.HashicorpCloudPackerBuildStatusUNSET { + t.Errorf("expected the existing build to be in the default state") + } + + //nolint:errcheck + b.UpdateBuildStatus(context.TODO(), "happycloud.image", models.HashicorpCloudPackerBuildStatusRUNNING) + + err = b.UpdateBuildStatus(context.TODO(), "happycloud.image", models.HashicorpCloudPackerBuildStatusDONE) + if err == nil { + t.Errorf("expected failure for PublishBuildStatus when setting status to DONE with no images") + } + + existingBuild, err = b.Iteration.Build("happycloud.image") + if err != nil { + t.Errorf("expected the existing build loaded from an existing bucket to be valid: %v", err) + } + + if existingBuild.Status != models.HashicorpCloudPackerBuildStatusRUNNING { + t.Errorf("expected the existing build to be in the running state") + } +} + +//func (b *Bucket) PublishBuildStatus(ctx context.Context, name string, status models.HashicorpCloudPackerBuildStatus) error {} diff --git a/internal/registry/types.bucket_test.go b/internal/registry/types.bucket_test.go index 5a8cbdf7d39..f21319c5144 100644 --- a/internal/registry/types.bucket_test.go +++ b/internal/registry/types.bucket_test.go @@ -5,381 +5,331 @@ import ( "os" "testing" - "github.com/hashicorp/hcp-sdk-go/clients/cloud-packer-service/preview/2021-04-30/models" + "github.com/google/go-cmp/cmp" ) -func TestInitialize_NewBucketNewIteration(t *testing.T) { - //nolint:errcheck - os.Setenv("HCP_PACKER_BUILD_FINGEPRINT", "testnumber") - defer os.Unsetenv("HCP_PACKER_BUILD_FINGERPRINT") - mockService := NewMockPackerClientService() - - b := &Bucket{ - Slug: "TestBucket", - client: &Client{ - Packer: mockService, - }, - } - - var err error - b.Iteration, err = NewIteration(IterationOptions{}) - if err != nil { - t.Errorf("unexpected failure: %v", err) - } - - b.Iteration.expectedBuilds = append(b.Iteration.expectedBuilds, "happycloud.image") +func createInitialTestBucket(t testing.TB) *Bucket { + oldEnv := os.Getenv("HCP_PACKER_BUILD_FINGERPRINT") + os.Setenv("HCP_PACKER_BUILD_FINGERPRINT", "no-fingerprint-here") + defer func() { + os.Setenv("HCP_PACKER_BUILD_FINGERPRINT", oldEnv) + }() - err = b.Initialize(context.TODO()) + t.Helper() + bucket, err := NewBucketWithIteration(IterationOptions{}) if err != nil { - t.Errorf("unexpected failure: %v", err) + t.Fatalf("failed when calling NewBucketWithIteration: %s", err) } - if !mockService.CreateBucketCalled { - t.Errorf("expected a call to CreateBucket but it didn't happen") - } - - if !mockService.CreateIterationCalled { - t.Errorf("expected a call to CreateIteration but it didn't happen") + mockService := NewMockPackerClientService() + mockService.TrackCalledServiceMethods = false + bucket.Slug = "TestBucket" + bucket.client = &Client{ + Packer: mockService, } - if mockService.CreateBuildCalled { - t.Errorf("Didn't expect a call to CreateBuild") - } + return bucket +} - if b.Iteration.ID != "iteration-id" { - t.Errorf("expected an iteration to created but it didn't") - } +func checkError(t testing.TB, err error) { + t.Helper() - err = b.PopulateIteration(context.TODO()) - if err != nil { - t.Errorf("unexpected failure: %v", err) - } - if !mockService.CreateBuildCalled { - t.Errorf("Expected a call to CreateBuild but it didn't happen") - } - - if _, ok := b.Iteration.builds.Load("happycloud.image"); !ok { - t.Errorf("expected a basic build entry to be created but it didn't") + if err == nil { + return } + t.Errorf("received an error during testing %s", err) } -func TestInitialize_ExistingBucketNewIteration(t *testing.T) { - //nolint:errcheck - os.Setenv("HCP_PACKER_BUILD_FINGEPRINT", "testnumber") - defer os.Unsetenv("HCP_PACKER_BUILD_FINGERPRINT") - mockService := NewMockPackerClientService() - mockService.BucketAlreadyExist = true +func TestBucket_CreateInitialBuildForIteration(t *testing.T) { + bucket := createInitialTestBucket(t) - b := &Bucket{ - Slug: "TestBucket", - client: &Client{ - Packer: mockService, - }, + componentName := "happycloud.image" + bucket.RegisterBuildForComponent(componentName) + bucket.BuildLabels = map[string]string{ + "version": "1.7.0", + "based_off": "alpine", } + err := bucket.CreateInitialBuildForIteration(context.TODO(), componentName) + checkError(t, err) - var err error - b.Iteration, err = NewIteration(IterationOptions{}) + // Assert that a build stored on the iteration + build, err := bucket.Iteration.Build(componentName) if err != nil { - t.Errorf("unexpected failure: %v", err) - } - - b.Iteration.expectedBuilds = append(b.Iteration.expectedBuilds, "happycloud.image") - - err = b.Initialize(context.TODO()) - if err != nil { - t.Errorf("unexpected failure: %v", err) - } - - if !mockService.UpdateBucketCalled { - t.Errorf("expected call to UpdateBucket but it didn't happen") - } - - if !mockService.CreateIterationCalled { - t.Errorf("expected a call to CreateIteration but it didn't happen") - } - - if mockService.CreateBuildCalled { - t.Errorf("Didn't expect a call to CreateBuild") + t.Errorf("expected an initial build for %s to be created, but it failed", componentName) } - if b.Iteration.ID != "iteration-id" { - t.Errorf("expected an iteration to created but it didn't") + if build.ComponentType != componentName { + t.Errorf("expected the initial build to have the defined component type") } - err = b.PopulateIteration(context.TODO()) - if err != nil { - t.Errorf("unexpected failure: %v", err) - } - if !mockService.CreateBuildCalled { - t.Errorf("Expected a call to CreateBuild but it didn't happen") - } - - if _, ok := b.Iteration.builds.Load("happycloud.image"); !ok { - t.Errorf("expected a basic build entry to be created but it didn't") + if diff := cmp.Diff(build.Labels, bucket.BuildLabels); diff != "" { + t.Errorf("expected the initial build to have the defined build labels %v", diff) } - } -func TestInitialize_ExistingBucketExistingIteration(t *testing.T) { - //nolint:errcheck - os.Setenv("HCP_PACKER_BUILD_FINGEPRINT", "testnumber") - defer os.Unsetenv("HCP_PACKER_BUILD_FINGERPRINT") - mockService := NewMockPackerClientService() - mockService.BucketAlreadyExist = true - mockService.IterationAlreadyExist = true - - b := &Bucket{ - Slug: "TestBucket", - client: &Client{ - Packer: mockService, +func TestBucket_UpdateLabelsForBuild(t *testing.T) { + tc := []struct { + desc string + buildName string + bucketBuildLabels map[string]string + buildLabels map[string]string + labelsCount int + noDiffExpected bool + }{ + { + desc: "no bucket or build specific labels", + buildName: "happcloud.image", + noDiffExpected: true, + }, + { + desc: "bucket build labels", + buildName: "happcloud.image", + bucketBuildLabels: map[string]string{ + "version": "1.7.0", + "based_off": "alpine", + }, + labelsCount: 2, + noDiffExpected: true, + }, + { + desc: "bucket build labels and build specific label", + buildName: "happcloud.image", + bucketBuildLabels: map[string]string{ + "version": "1.7.0", + "based_off": "alpine", + }, + buildLabels: map[string]string{ + "source_image": "another-happycloud-image", + }, + labelsCount: 3, + noDiffExpected: false, + }, + { + desc: "build specific label", + buildName: "happcloud.image", + buildLabels: map[string]string{ + "source_image": "another-happycloud-image", + }, + labelsCount: 1, + noDiffExpected: false, }, } - var err error - b.Iteration, err = NewIteration(IterationOptions{}) - if err != nil { - t.Errorf("unexpected failure: %v", err) - } - - b.Iteration.expectedBuilds = append(b.Iteration.expectedBuilds, "happycloud.image") - mockService.ExistingBuilds = append(mockService.ExistingBuilds, "happycloud.image") - - err = b.Initialize(context.TODO()) - if err != nil { - t.Errorf("unexpected failure: %v", err) - } - err = b.PopulateIteration(context.TODO()) - if err != nil { - t.Errorf("unexpected failure: %v", err) - } - - if mockService.CreateBucketCalled { - t.Errorf("unexpected call to CreateBucket") - } - - if !mockService.UpdateBucketCalled { - t.Errorf("expected call to UpdateBucket but it didn't happen") - } - - if mockService.CreateIterationCalled { - t.Errorf("unexpected a call to CreateIteration") - } - - if !mockService.GetIterationCalled { - t.Errorf("expected a call to GetIteration but it didn't happen") - } - - if mockService.CreateBuildCalled { - t.Errorf("unexpected a call to CreateBuild") - } - - if b.Iteration.ID != "iteration-id" { - t.Errorf("expected an iteration to created but it didn't") - } - - err = b.PopulateIteration(context.TODO()) - if err != nil { - t.Errorf("unexpected failure: %v", err) - } - loadedBuild, ok := b.Iteration.builds.Load("happycloud.image") - if !ok { - t.Errorf("expected a basic build entry to be created but it didn't") - } - - existingBuild, ok := loadedBuild.(*Build) - if !ok { - t.Errorf("expected the existing build loaded from an existing bucket to be valid") - } + for _, tt := range tc { + tt := tt + t.Run(tt.desc, func(t *testing.T) { + bucket := createInitialTestBucket(t) - if existingBuild.Status != models.HashicorpCloudPackerBuildStatusUNSET { - t.Errorf("expected the existing build to be in the default state") - } -} + componentName := tt.buildName + bucket.RegisterBuildForComponent(componentName) -func TestInitialize_ExistingBucketCompleteIteration(t *testing.T) { - //nolint:errcheck - os.Setenv("HCP_PACKER_BUILD_FINGEPRINT", "testnumber") - defer os.Unsetenv("HCP_PACKER_BUILD_FINGERPRINT") - mockService := NewMockPackerClientService() - mockService.BucketAlreadyExist = true - mockService.IterationAlreadyExist = true - mockService.IterationCompleted = true - mockService.BuildAlreadyDone = true - - b := &Bucket{ - Slug: "TestBucket", - client: &Client{ - Packer: mockService, - }, - } + for k, v := range tt.bucketBuildLabels { + bucket.BuildLabels[k] = v + } - var err error - b.Iteration, err = NewIteration(IterationOptions{}) - if err != nil { - t.Errorf("unexpected failure: %v", err) - } + err := bucket.CreateInitialBuildForIteration(context.TODO(), componentName) + checkError(t, err) - b.Iteration.expectedBuilds = append(b.Iteration.expectedBuilds, "happycloud.image") - mockService.ExistingBuilds = append(mockService.ExistingBuilds, "happycloud.image") + // Assert that the build is stored on the iteration + build, err := bucket.Iteration.Build(componentName) + if err != nil { + t.Errorf("expected an initial build for %s to be created, but it failed", componentName) + } - err = b.Initialize(context.TODO()) - if err == nil { - t.Errorf("unexpected failure: %v", err) - } + if build.ComponentType != componentName { + t.Errorf("expected the build to have the defined component type") + } - if mockService.CreateIterationCalled { - t.Errorf("unexpected call to CreateIteration") - } + err = bucket.UpdateLabelsForBuild(componentName, tt.buildLabels) + checkError(t, err) - if !mockService.GetIterationCalled { - t.Errorf("expected a call to GetIteration but it didn't happen") - } + if len(build.Labels) != tt.labelsCount { + t.Errorf("expected the build to have %d build labels but there is only: %d", tt.labelsCount, len(build.Labels)) + } - if mockService.CreateBuildCalled { - t.Errorf("unexpected call to CreateBuild") - } + diff := cmp.Diff(build.Labels, bucket.BuildLabels) + if (diff == "") != tt.noDiffExpected { + t.Errorf("expected the build to have an additional build label but there is no diff: %q", diff) + } - if b.Iteration.ID != "iteration-id" { - t.Errorf("expected an iteration to be returned but it wasn't") + }) } } -func TestUpdateBuildStatus(t *testing.T) { - //nolint:errcheck - os.Setenv("HCP_PACKER_BUILD_FINGEPRINT", "testnumber") - defer os.Unsetenv("HCP_PACKER_BUILD_FINGERPRINT") - mockService := NewMockPackerClientService() - mockService.BucketAlreadyExist = true - mockService.IterationAlreadyExist = true +func TestBucket_UpdateLabelsForBuild_withMultipleBuilds(t *testing.T) { + bucket := createInitialTestBucket(t) - b := &Bucket{ - Slug: "TestBucket", - client: &Client{ - Packer: mockService, - }, - } + firstComponent := "happycloud.image" + bucket.RegisterBuildForComponent(firstComponent) - var err error - b.Iteration, err = NewIteration(IterationOptions{}) - if err != nil { - t.Errorf("unexpected failure: %v", err) - } + secondComponent := "happycloud.image2" + bucket.RegisterBuildForComponent(secondComponent) - b.Iteration.expectedBuilds = append(b.Iteration.expectedBuilds, "happycloud.image") - mockService.ExistingBuilds = append(mockService.ExistingBuilds, "happycloud.image") + err := bucket.PopulateIteration(context.TODO()) + checkError(t, err) - err = b.Initialize(context.TODO()) - if err != nil { - t.Errorf("unexpected failure: %v", err) - } - err = b.PopulateIteration(context.TODO()) - if err != nil { - t.Errorf("unexpected failure: %v", err) - } + err = bucket.UpdateLabelsForBuild(firstComponent, map[string]string{ + "source_image": "another-happycloud-image", + }) + checkError(t, err) - loadedBuild, ok := b.Iteration.builds.Load("happycloud.image") - if !ok { - t.Errorf("expected a basic build entry to be created but it didn't") - } + err = bucket.UpdateLabelsForBuild(secondComponent, map[string]string{ + "source_image": "the-original-happycloud-image", + "role_name": "no-role-is-a-good-role", + }) + checkError(t, err) - existingBuild, ok := loadedBuild.(*Build) - if !ok { - t.Errorf("expected the existing build loaded from an existing bucket to be valid") - } + var registeredBuilds []*Build + expectedComponents := []string{firstComponent, secondComponent} + for _, componentName := range expectedComponents { + // Assert that a build stored on the iteration + build, err := bucket.Iteration.Build(componentName) + if err != nil { + t.Errorf("expected an initial build for %s to be created, but it failed", componentName) + } + registeredBuilds = append(registeredBuilds, build) - if existingBuild.Status != models.HashicorpCloudPackerBuildStatusUNSET { - t.Errorf("expected the existing build to be in the default state") - } - - err = b.UpdateBuildStatus(context.TODO(), "happycloud.image", models.HashicorpCloudPackerBuildStatusRUNNING) - if err != nil { - t.Errorf("unexpected failure for PublishBuildStatus: %v", err) - } + if build.ComponentType != componentName { + t.Errorf("expected the initial build to have the defined component type") + } - reloadedBuild, ok := b.Iteration.builds.Load("happycloud.image") - if !ok { - t.Errorf("expected a basic build entry to be created but it didn't") + if ok := cmp.Equal(build.Labels, bucket.BuildLabels); ok { + t.Errorf("expected the build to have an additional build label but they are equal") + } } - existingBuild, ok = reloadedBuild.(*Build) - if !ok { - t.Errorf("expected the existing build loaded from an existing bucket to be valid") + if len(registeredBuilds) != 2 { + t.Errorf("expected the bucket to have 2 registered builds but got %d", len(registeredBuilds)) } - if existingBuild.Status != models.HashicorpCloudPackerBuildStatusRUNNING { - t.Errorf("expected the existing build to be in the running state") + if ok := cmp.Equal(registeredBuilds[0].Labels, registeredBuilds[1].Labels); ok { + t.Errorf("expected registered builds to have different labels but they are equal") } } -func TestUpdateBuildStatus_DONENoImages(t *testing.T) { - //nolint:errcheck - os.Setenv("HCP_PACKER_BUILD_FINGEPRINT", "testnumber") - defer os.Unsetenv("HCP_PACKER_BUILD_FINGERPRINT") - mockService := NewMockPackerClientService() - mockService.BucketAlreadyExist = true - mockService.IterationAlreadyExist = true - - b := &Bucket{ - Slug: "TestBucket", - client: &Client{ - Packer: mockService, +func TestBucket_PopulateIteration(t *testing.T) { + tc := []struct { + desc string + buildName string + bucketBuildLabels map[string]string + buildLabels map[string]string + labelsCount int + buildCompleted bool + noDiffExpected bool + }{ + { + desc: "populating iteration with existing incomplete build and no bucket build labels does nothing", + buildName: "happcloud.image", + labelsCount: 0, + buildCompleted: false, + noDiffExpected: true, + }, + { + desc: "populating iteration with existing incomplete build should add bucket build labels", + buildName: "happcloud.image", + bucketBuildLabels: map[string]string{ + "version": "1.7.0", + "based_off": "alpine", + }, + labelsCount: 2, + buildCompleted: false, + noDiffExpected: true, + }, + { + desc: "populating iteration with existing incomplete build should update bucket build labels", + buildName: "happcloud.image", + bucketBuildLabels: map[string]string{ + "version": "1.7.3", + "based_off": "alpine-3.14", + }, + buildLabels: map[string]string{ + "version": "packer.version", + "based_off": "var.distro", + }, + labelsCount: 2, + buildCompleted: false, + noDiffExpected: true, + }, + { + desc: "populating iteration with completed build should not modify any labels", + buildName: "happcloud.image", + bucketBuildLabels: map[string]string{ + "version": "1.7.0", + "based_off": "alpine", + }, + labelsCount: 0, + buildCompleted: true, + noDiffExpected: false, + }, + { + desc: "populating iteration with existing build should only modify bucket build labels", + buildName: "happcloud.image", + bucketBuildLabels: map[string]string{ + "version": "1.7.3", + "based_off": "alpine-3.14", + }, + buildLabels: map[string]string{ + "arch": "linux/386", + }, + labelsCount: 3, + buildCompleted: false, + noDiffExpected: false, }, } - var err error - b.Iteration, err = NewIteration(IterationOptions{}) - if err != nil { - t.Errorf("unexpected failure: %v", err) - } - - b.Iteration.expectedBuilds = append(b.Iteration.expectedBuilds, "happycloud.image") - mockService.ExistingBuilds = append(mockService.ExistingBuilds, "happycloud.image") - - err = b.Initialize(context.TODO()) - if err != nil { - t.Errorf("unexpected failure: %v", err) - } - err = b.PopulateIteration(context.TODO()) - if err != nil { - t.Errorf("unexpected failure: %v", err) - } - - loadedBuild, ok := b.Iteration.builds.Load("happycloud.image") - if !ok { - t.Errorf("expected a basic build entry to be created but it didn't") - } - - existingBuild, ok := loadedBuild.(*Build) - if !ok { - t.Errorf("expected the existing build loaded from an existing bucket to be valid") - } - - if existingBuild.Status != models.HashicorpCloudPackerBuildStatusUNSET { - t.Errorf("expected the existing build to be in the default state") - } - - //nolint:errcheck - b.UpdateBuildStatus(context.TODO(), "happycloud.image", models.HashicorpCloudPackerBuildStatusRUNNING) - - err = b.UpdateBuildStatus(context.TODO(), "happycloud.image", models.HashicorpCloudPackerBuildStatusDONE) - if err == nil { - t.Errorf("expected failure for PublishBuildStatus when setting status to DONE with no images") - } - - reloadedBuild, ok := b.Iteration.builds.Load("happycloud.image") - if !ok { - t.Errorf("expected a basic build entry to be created but it didn't") - } - - existingBuild, ok = reloadedBuild.(*Build) - if !ok { - t.Errorf("expected the existing build loaded from an existing bucket to be valid") - } - - if existingBuild.Status != models.HashicorpCloudPackerBuildStatusRUNNING { - t.Errorf("expected the existing build to be in the running state") + for _, tt := range tc { + tt := tt + t.Run(tt.desc, func(t *testing.T) { + + mockService := NewMockPackerClientService() + mockService.BucketAlreadyExist = true + mockService.IterationAlreadyExist = true + mockService.BuildAlreadyDone = tt.buildCompleted + + bucket, err := NewBucketWithIteration(IterationOptions{}) + if err != nil { + t.Fatalf("failed when calling NewBucketWithIteration: %s", err) + } + + bucket.Slug = "TestBucket" + bucket.client = &Client{ + Packer: mockService, + } + for k, v := range tt.bucketBuildLabels { + bucket.BuildLabels[k] = v + } + + componentName := "happycloud.image" + bucket.RegisterBuildForComponent(componentName) + + mockService.ExistingBuilds = append(mockService.ExistingBuilds, componentName) + mockService.ExistingBuildLabels = tt.buildLabels + + err = bucket.PopulateIteration(context.TODO()) + checkError(t, err) + + if mockService.CreateBuildCalled { + t.Errorf("expected an initial build for %s to already exist, but it called CreateBuild", componentName) + } + // Assert that a build stored on the iteration + build, err := bucket.Iteration.Build(componentName) + if err != nil { + t.Errorf("expected an existing build for %s to be stored, but it failed", componentName) + } + + if build.ComponentType != componentName { + t.Errorf("expected the build to have the defined component type") + } + + if len(build.Labels) != tt.labelsCount { + t.Errorf("expected the build to have %d build labels but there is only: %d", tt.labelsCount, len(build.Labels)) + } + + diff := cmp.Diff(build.Labels, bucket.BuildLabels) + if (diff == "") != tt.noDiffExpected { + t.Errorf("expected the build to have bucket build labels but there is no diff: %q", diff) + } + }) } } - -//func (b *Bucket) PublishBuildStatus(ctx context.Context, name string, status models.HashicorpCloudPackerBuildStatus) error {} diff --git a/internal/registry/types.builds.go b/internal/registry/types.builds.go index 705eb76bf90..b40361483e1 100644 --- a/internal/registry/types.builds.go +++ b/internal/registry/types.builds.go @@ -1,6 +1,8 @@ package registry import ( + "fmt" + "github.com/hashicorp/hcp-sdk-go/clients/cloud-packer-service/preview/2021-04-30/models" registryimage "github.com/hashicorp/packer-plugin-sdk/packer/registry/image" ) @@ -15,3 +17,89 @@ type Build struct { Images map[string]registryimage.Image Status models.HashicorpCloudPackerBuildStatus } + +// NewBuildFromCloudPackerBuild converts a HashicorpCloudePackerBuild to a local build that can be tracked and published to the HCP Packer Registry. +// Any existing labels or images associated to src will be copied to the returned Build. +func NewBuildFromCloudPackerBuild(src *models.HashicorpCloudPackerBuild) (*Build, error) { + + build := Build{ + ID: src.ID, + ComponentType: src.ComponentType, + CloudProvider: src.CloudProvider, + RunUUID: src.PackerRunUUID, + Status: src.Status, + Labels: src.Labels, + } + + var err error + for _, image := range src.Images { + image := image + err = build.AddImages(registryimage.Image{ + ImageID: image.ImageID, + ProviderName: build.CloudProvider, + ProviderRegion: image.Region, + }) + + if err != nil { + return nil, fmt.Errorf("NewBuildFromCloudPackerBuild: %w", err) + } + } + + return &build, nil +} + +// AddLabelsToBuild merges the contents of data to the labels associated with the build. +// Duplicate keys will be updated to reflect the new value. +func (b *Build) MergeLabels(data map[string]string) { + if data == nil { + return + } + + if b.Labels == nil { + b.Labels = make(map[string]string) + } + + for k, v := range data { + // TODO: (nywilken) Determine why we skip labels already set + //if _, ok := build.Labels[k]; ok { + //continue + //} + b.Labels[k] = v + } + +} + +// AddImages appends one or more images artifacts to the build. +func (b *Build) AddImages(images ...registryimage.Image) error { + + if b.Images == nil { + b.Images = make(map[string]registryimage.Image) + } + + for _, image := range images { + image := image + + if err := image.Validate(); err != nil { + return fmt.Errorf("AddImages: failed to add image to build %q: %w", b.ComponentType, err) + } + + if b.CloudProvider == "" { + b.CloudProvider = image.ProviderName + } + + b.MergeLabels(image.Labels) + b.Images[image.String()] = image + } + + return nil +} + +// IsNotDone returns true if build does not satisfy all requirements of a completed build. +// A completed build must have a valid ID, one or more Images, and its Status is HashicorpCloudPackerBuildStatusDONE. +func (b *Build) IsNotDone() bool { + hasBuildID := b.ID != "" + hasImages := len(b.Images) == 0 + isNotDone := b.Status != models.HashicorpCloudPackerBuildStatusDONE + + return hasBuildID && hasImages && isNotDone +} diff --git a/internal/registry/types.iterations.go b/internal/registry/types.iterations.go index 1995f096725..7d9dce8a804 100644 --- a/internal/registry/types.iterations.go +++ b/internal/registry/types.iterations.go @@ -82,65 +82,58 @@ func GetGitFingerprint(opts IterationOptions) (string, error) { return ref.Hash().String(), nil } -// AddImageToBuild appends one or more images artifacts to the build referred to by buildName. -func (i *Iteration) AddImageToBuild(buildName string, images ...registryimage.Image) error { - existingBuild, ok := i.builds.Load(buildName) +//StoreBuild stores a build for buildName to an active iteration. +func (i *Iteration) StoreBuild(buildName string, build *Build) { + i.builds.Store(buildName, build) +} + +//Build gets the store build associated with buildName in the active iteration. +func (i *Iteration) Build(buildName string) (*Build, error) { + build, ok := i.builds.Load(buildName) if !ok { - return errors.New("no build found for the name " + buildName) + return nil, errors.New("no associated build found for the name " + buildName) } - build, ok := existingBuild.(*Build) + b, ok := build.(*Build) if !ok { - return fmt.Errorf("the build for the component %q does not appear to be a valid registry Build", buildName) + return nil, fmt.Errorf("the build for the component %q does not appear to be a valid registry Build", buildName) } - if build.Images == nil { - build.Images = make(map[string]registryimage.Image) - } + return b, nil +} - for _, image := range images { - if err := image.Validate(); err != nil { - return fmt.Errorf("failed to add image to build %q: %v", buildName, err) - } +//HasBuild checks if iteration has a stored build associated with buildName. +func (i *Iteration) HasBuild(buildName string) bool { + _, ok := i.builds.Load(buildName) - if build.CloudProvider == "" { - build.CloudProvider = image.ProviderName - } + return ok +} - for k, v := range image.Labels { - if _, ok := build.Labels[k]; ok { - continue - } - build.Labels[k] = v - } +// AddImageToBuild appends one or more images artifacts to the build referred to by buildName. +func (i *Iteration) AddImageToBuild(buildName string, images ...registryimage.Image) error { + build, err := i.Build(buildName) + if err != nil { + return fmt.Errorf("AddImageToBuild: %w", err) + } - build.Images[image.String()] = image + err = build.AddImages(images...) + if err != nil { + return fmt.Errorf("AddImageToBuild: %w", err) } - i.builds.Store(buildName, build) + i.StoreBuild(buildName, build) return nil } // AddLabelsToBuild merges the contents of data to the labels associated with the build referred to by buildName. func (i *Iteration) AddLabelsToBuild(buildName string, data map[string]string) error { - existingBuild, ok := i.builds.Load(buildName) - if !ok { - return errors.New("no associated build found for the name " + buildName) - } - - build, ok := existingBuild.(*Build) - if !ok { - return fmt.Errorf("the build for the component %q does not appear to be a valid registry Build", buildName) - } - - for k, v := range data { - if _, ok := build.Labels[k]; ok { - continue - } - build.Labels[k] = v + build, err := i.Build(buildName) + if err != nil { + return fmt.Errorf("AddLabelsToBuild: %w", err) } - i.builds.Store(buildName, build) + build.MergeLabels(data) + i.StoreBuild(buildName, build) return nil } diff --git a/packer/plugin-getter/plugins.go b/packer/plugin-getter/plugins.go index bae24099ba0..98842e3a4f8 100644 --- a/packer/plugin-getter/plugins.go +++ b/packer/plugin-getter/plugins.go @@ -83,6 +83,9 @@ func (rlerr *RateLimitError) Error() string { } func (pr Requirement) FilenamePrefix() string { + if pr.Identifier == nil { + return "packer-plugin-" + } return "packer-plugin-" + pr.Identifier.Type + "_" } @@ -104,7 +107,12 @@ func (pr Requirement) ListInstallations(opts ListInstallationsOptions) (InstallL filenameSuffix := opts.filenameSuffix() log.Printf("[TRACE] listing potential installations for %q that match %q. %#v", pr.Identifier, pr.VersionConstraints, opts) for _, knownFolder := range opts.FromFolders { - glob := filepath.Join(knownFolder, pr.Identifier.Hostname, pr.Identifier.Namespace, pr.Identifier.Type, FilenamePrefix+"*"+filenameSuffix) + glob := "" + if pr.Identifier == nil { + glob = filepath.Join(knownFolder, "*", "*", "*", FilenamePrefix+"*"+filenameSuffix) + } else { + glob = filepath.Join(knownFolder, pr.Identifier.Hostname, pr.Identifier.Namespace, pr.Identifier.Type, FilenamePrefix+"*"+filenameSuffix) + } matches, err := filepath.Glob(glob) if err != nil { @@ -120,7 +128,13 @@ func (pr Requirement) ListInstallations(opts ListInstallationsOptions) (InstallL versionsStr := strings.TrimPrefix(fname, FilenamePrefix) versionsStr = strings.TrimSuffix(versionsStr, filenameSuffix) - // versionsStr now looks like v1.2.3_x5.1 + if pr.Identifier == nil { + if idx := strings.Index(versionsStr, "_"); idx > 0 { + versionsStr = versionsStr[idx+1:] + } + } + + // versionsStr now looks like v1.2.3_x5.1 or amazon_v1.2.3_x5.1 parts := strings.SplitN(versionsStr, "_", 2) pluginVersionStr, protocolVerionStr := parts[0], parts[1] pv, err := version.NewVersion(pluginVersionStr) @@ -131,7 +145,7 @@ func (pr Requirement) ListInstallations(opts ListInstallationsOptions) (InstallL } // no constraint means always pass, this will happen for implicit - // plugin requirements + // plugin requirements and when we list all plugins. if !pr.VersionConstraints.Check(pv) { log.Printf("[TRACE] version %q of file %q does not match constraint %q", pluginVersionStr, path, pr.VersionConstraints.String()) continue @@ -258,6 +272,11 @@ func (binOpts *BinaryInstallationOptions) CheckProtocolVersion(remoteProt string } vMajor, vMinor := parts[0], parts[1] + // no protocol version check + if binOpts.APIVersionMajor == "" && binOpts.APIVersionMinor == "" { + return nil + } + if vMajor != binOpts.APIVersionMajor { return fmt.Errorf("Unsupported remote protocol MAJOR version %q. The current MAJOR protocol version is %q."+ " This version of Packer can only communicate with plugins using that version.", vMajor, binOpts.APIVersionMajor) diff --git a/packer/plugin-getter/plugins_test.go b/packer/plugin-getter/plugins_test.go index fcd0a18d516..1e3fbe0b705 100644 --- a/packer/plugin-getter/plugins_test.go +++ b/packer/plugin-getter/plugins_test.go @@ -16,6 +16,7 @@ import ( "github.com/google/go-cmp/cmp" "github.com/hashicorp/go-version" + "github.com/hashicorp/hcl/v2" "github.com/hashicorp/packer/hcl2template/addrs" ) @@ -66,6 +67,61 @@ func TestPlugin_ListInstallations(t *testing.T) { wantErr bool want InstallList }{ + + { + "windows_all_plugins", + fields{ + // empty + }, + ListInstallationsOptions{ + []string{ + pluginFolderOne, + pluginFolderTwo, + }, + BinaryInstallationOptions{ + OS: "windows", ARCH: "amd64", + Ext: ".exe", + Checksummers: []Checksummer{ + { + Type: "sha256", + Hash: sha256.New(), + }, + }, + }, + }, + false, + []*Installation{ + { + Version: "v1.2.3", + BinaryPath: filepath.Join(pluginFolderOne, "github.com", "hashicorp", "amazon", "packer-plugin-amazon_v1.2.3_x5.0_windows_amd64.exe"), + }, + { + Version: "v1.2.4", + BinaryPath: filepath.Join(pluginFolderOne, "github.com", "hashicorp", "amazon", "packer-plugin-amazon_v1.2.4_x5.0_windows_amd64.exe"), + }, + { + Version: "v1.2.5", + BinaryPath: filepath.Join(pluginFolderOne, "github.com", "hashicorp", "amazon", "packer-plugin-amazon_v1.2.5_x5.0_windows_amd64.exe"), + }, + { + BinaryPath: filepath.Join(pluginFolderOne, "github.com", "hashicorp", "google", "packer-plugin-google_v4.5.6_x5.0_windows_amd64.exe"), + Version: "v4.5.6", + }, + { + Version: "v4.5.7", + BinaryPath: filepath.Join(pluginFolderOne, "github.com", "hashicorp", "google", "packer-plugin-google_v4.5.7_x5.0_windows_amd64.exe"), + }, + { + Version: "v4.5.8", + BinaryPath: filepath.Join(pluginFolderOne, "github.com", "hashicorp", "google", "packer-plugin-google_v4.5.8_x5.0_windows_amd64.exe"), + }, + { + Version: "v4.5.9", + BinaryPath: filepath.Join(pluginFolderTwo, "github.com", "hashicorp", "google", "packer-plugin-google_v4.5.9_x5.0_windows_amd64.exe"), + }, + }, + }, + { "darwin_amazon_prot_5.0", fields{ @@ -227,9 +283,13 @@ func TestPlugin_ListInstallations(t *testing.T) { } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - identifier, diags := addrs.ParsePluginSourceString(tt.fields.Identifier) - if diags.HasErrors() { - t.Fatalf("%v", diags) + var identifier *addrs.Plugin + if tt.fields.Identifier != "" { + var diags hcl.Diagnostics + identifier, diags = addrs.ParsePluginSourceString(tt.fields.Identifier) + if diags.HasErrors() { + t.Fatalf("%v", diags) + } } p := Requirement{ Identifier: identifier, diff --git a/provisioner/powershell/provisioner.hcl2spec.go b/provisioner/powershell/provisioner.hcl2spec.go index ce4a84c3354..cbeb427ce74 100644 --- a/provisioner/powershell/provisioner.hcl2spec.go +++ b/provisioner/powershell/provisioner.hcl2spec.go @@ -23,6 +23,7 @@ type FlatConfig struct { Scripts []string `cty:"scripts" hcl:"scripts"` ValidExitCodes []int `mapstructure:"valid_exit_codes" cty:"valid_exit_codes" hcl:"valid_exit_codes"` Vars []string `mapstructure:"environment_vars" cty:"environment_vars" hcl:"environment_vars"` + Env map[string]string `mapstructure:"env" cty:"env" hcl:"env"` EnvVarFormat *string `mapstructure:"env_var_format" cty:"env_var_format" hcl:"env_var_format"` Binary *bool `cty:"binary" hcl:"binary"` RemotePath *string `mapstructure:"remote_path" cty:"remote_path" hcl:"remote_path"` @@ -63,6 +64,7 @@ func (*FlatConfig) HCL2Spec() map[string]hcldec.Spec { "scripts": &hcldec.AttrSpec{Name: "scripts", Type: cty.List(cty.String), Required: false}, "valid_exit_codes": &hcldec.AttrSpec{Name: "valid_exit_codes", Type: cty.List(cty.Number), Required: false}, "environment_vars": &hcldec.AttrSpec{Name: "environment_vars", Type: cty.List(cty.String), Required: false}, + "env": &hcldec.AttrSpec{Name: "env", Type: cty.Map(cty.String), Required: false}, "env_var_format": &hcldec.AttrSpec{Name: "env_var_format", Type: cty.String, Required: false}, "binary": &hcldec.AttrSpec{Name: "binary", Type: cty.Bool, Required: false}, "remote_path": &hcldec.AttrSpec{Name: "remote_path", Type: cty.String, Required: false}, diff --git a/provisioner/shell/provisioner.hcl2spec.go b/provisioner/shell/provisioner.hcl2spec.go index d287215b44c..4ea77be55fa 100644 --- a/provisioner/shell/provisioner.hcl2spec.go +++ b/provisioner/shell/provisioner.hcl2spec.go @@ -23,6 +23,7 @@ type FlatConfig struct { Scripts []string `cty:"scripts" hcl:"scripts"` ValidExitCodes []int `mapstructure:"valid_exit_codes" cty:"valid_exit_codes" hcl:"valid_exit_codes"` Vars []string `mapstructure:"environment_vars" cty:"environment_vars" hcl:"environment_vars"` + Env map[string]string `mapstructure:"env" cty:"env" hcl:"env"` EnvVarFormat *string `mapstructure:"env_var_format" cty:"env_var_format" hcl:"env_var_format"` Binary *bool `cty:"binary" hcl:"binary"` RemotePath *string `mapstructure:"remote_path" cty:"remote_path" hcl:"remote_path"` @@ -62,6 +63,7 @@ func (*FlatConfig) HCL2Spec() map[string]hcldec.Spec { "scripts": &hcldec.AttrSpec{Name: "scripts", Type: cty.List(cty.String), Required: false}, "valid_exit_codes": &hcldec.AttrSpec{Name: "valid_exit_codes", Type: cty.List(cty.Number), Required: false}, "environment_vars": &hcldec.AttrSpec{Name: "environment_vars", Type: cty.List(cty.String), Required: false}, + "env": &hcldec.AttrSpec{Name: "env", Type: cty.Map(cty.String), Required: false}, "env_var_format": &hcldec.AttrSpec{Name: "env_var_format", Type: cty.String, Required: false}, "binary": &hcldec.AttrSpec{Name: "binary", Type: cty.Bool, Required: false}, "remote_path": &hcldec.AttrSpec{Name: "remote_path", Type: cty.String, Required: false}, diff --git a/provisioner/windows-restart/provisioner.go b/provisioner/windows-restart/provisioner.go index c7761c7ff55..c98087063e6 100644 --- a/provisioner/windows-restart/provisioner.go +++ b/provisioner/windows-restart/provisioner.go @@ -40,8 +40,9 @@ type Config struct { // The command used to restart the guest machine RestartCommand string `mapstructure:"restart_command"` - // The command used to check if the guest machine has restarted - // The output of this command will be displayed to the user + // The command to run after executing `restart_command` to check if the guest machine has restarted. + // This command will retry until the connection to the guest machine has been restored or `restart_timeout` has exceeded. + // The output of this command will be displayed to the user. RestartCheckCommand string `mapstructure:"restart_check_command"` // The timeout for waiting for the machine to restart diff --git a/provisioner/windows-shell/provisioner.hcl2spec.go b/provisioner/windows-shell/provisioner.hcl2spec.go index abcbcee217f..34e7e1921b5 100644 --- a/provisioner/windows-shell/provisioner.hcl2spec.go +++ b/provisioner/windows-shell/provisioner.hcl2spec.go @@ -23,6 +23,7 @@ type FlatConfig struct { Scripts []string `cty:"scripts" hcl:"scripts"` ValidExitCodes []int `mapstructure:"valid_exit_codes" cty:"valid_exit_codes" hcl:"valid_exit_codes"` Vars []string `mapstructure:"environment_vars" cty:"environment_vars" hcl:"environment_vars"` + Env map[string]string `mapstructure:"env" cty:"env" hcl:"env"` EnvVarFormat *string `mapstructure:"env_var_format" cty:"env_var_format" hcl:"env_var_format"` Binary *bool `cty:"binary" hcl:"binary"` RemotePath *string `mapstructure:"remote_path" cty:"remote_path" hcl:"remote_path"` @@ -55,6 +56,7 @@ func (*FlatConfig) HCL2Spec() map[string]hcldec.Spec { "scripts": &hcldec.AttrSpec{Name: "scripts", Type: cty.List(cty.String), Required: false}, "valid_exit_codes": &hcldec.AttrSpec{Name: "valid_exit_codes", Type: cty.List(cty.Number), Required: false}, "environment_vars": &hcldec.AttrSpec{Name: "environment_vars", Type: cty.List(cty.String), Required: false}, + "env": &hcldec.AttrSpec{Name: "env", Type: cty.Map(cty.String), Required: false}, "env_var_format": &hcldec.AttrSpec{Name: "env_var_format", Type: cty.String, Required: false}, "binary": &hcldec.AttrSpec{Name: "binary", Type: cty.Bool, Required: false}, "remote_path": &hcldec.AttrSpec{Name: "remote_path", Type: cty.String, Required: false}, diff --git a/scripts/version.sh b/scripts/version.sh new file mode 100755 index 00000000000..c854cab307b --- /dev/null +++ b/scripts/version.sh @@ -0,0 +1,12 @@ +#!/usr/bin/env bash +set -euo pipefail + +version_file=$1 +version=$(awk '$1 == "Version" && $2 == "=" { gsub(/"/, "", $3); print $3 }' < "${version_file}") +prerelease=$(awk '$1 == "VersionPrerelease" && $2 == "=" { gsub(/"/, "", $3); print $3 }' < "${version_file}") + +if [ -n "$prerelease" ]; then + echo "${version}-${prerelease}" +else + echo "${version}" +fi \ No newline at end of file diff --git a/version/version.go b/version/version.go index ad0b87e4678..96250b84be1 100644 --- a/version/version.go +++ b/version/version.go @@ -5,16 +5,22 @@ import ( pluginVersion "github.com/hashicorp/packer-plugin-sdk/version" ) -// The git commit that was compiled. This will be filled in by the compiler. -var GitCommit string - -// The main version number that is being run at the moment. -const Version = "1.7.9" - -// A pre-release marker for the version. If this is "" (empty string) -// then it means that it is a final release. Otherwise, this is a pre-release -// such as "dev" (in development), "beta", "rc1", etc. -const VersionPrerelease = "dev" +var ( + // The git commit that was compiled. This will be filled in by the compiler. + GitCommit string + GitDescribe string + + // Whether cgo is enabled or not; set at build time + CgoEnabled bool + + // The main version number that is being run at the moment. + Version = "1.8.1" + // A pre-release marker for the version. If this is "" (empty string) + // then it means that it is a final release. Otherwise, this is a pre-release + // such as "dev" (in development), "beta", "rc1", etc. + VersionPrerelease = "dev" + VersionMetadata = "" +) var PackerVersion *pluginVersion.PluginVersion diff --git a/website/components/badge/index.tsx b/website/components/badge/index.tsx index 358085806b3..039b114919a 100644 --- a/website/components/badge/index.tsx +++ b/website/components/badge/index.tsx @@ -3,24 +3,27 @@ import InlineSvg from '@hashicorp/react-inline-svg' import classnames from 'classnames' import s from './style.module.css' -type BadgeTheme = 'gray' | 'blue' | 'gold' +type BadgeTheme = 'gray' | 'blue' | 'gold' | 'purple' | 'light-gray' interface BadgeProps { label: string iconSvg?: string theme?: BadgeTheme + href?: string } function Badge({ theme = 'gray', label, iconSvg, + href, }: BadgeProps): React.ReactElement { + const Elem = href ? 'a' : 'div' return ( -
+ {iconSvg ? : null} {label} -
+ ) } diff --git a/website/components/badge/style.module.css b/website/components/badge/style.module.css index f7ba1bba646..d9fa0f64435 100644 --- a/website/components/badge/style.module.css +++ b/website/components/badge/style.module.css @@ -1,5 +1,5 @@ .root { - /* theming. Note that gold and gray + /* theming. Note that gold, gray, and purple have been set to hex values in order to match Terraform Registry tier labels. */ &.theme-gray { @@ -18,6 +18,10 @@ --background-color: var(--packer); --text-color: var(--packer-text-on-primary); } + &.theme-purple { + --background-color: #5c4ee5; + --text-color: var(--white); + } align-items: center; background: var(--background-color); diff --git a/website/components/homepage-hero/index.tsx b/website/components/homepage-hero/index.tsx index 81e1408e1b5..39c05d6c47c 100644 --- a/website/components/homepage-hero/index.tsx +++ b/website/components/homepage-hero/index.tsx @@ -14,7 +14,6 @@ export default function HomepageHero({
{alert ? ( - // @ts-expect-error -- prop types are incorrect, state is not needed `) } - // Add badge showing the latest release version number + // If the plugin is archived, add an "Archived" badge + if (pluginData?.archived == true) { + badgesMdx.push(``) + } + // Add badge showing the latest release version number, + // and link this badge to the latest release if (latestReleaseTag) { - badgesMdx.push(``) + const href = `https://github.com/${pluginData.repo}/releases/tag/${latestReleaseTag}` + badgesMdx.push( + `` + ) } // If we have badges to add, inject them into the MDX if (badgesMdx.length > 0) { diff --git a/website/components/remote-plugin-docs/utils/fetch-latest-release-tag.js b/website/components/remote-plugin-docs/utils/fetch-latest-release-tag.js index a31ce54198f..883c28a67aa 100644 --- a/website/components/remote-plugin-docs/utils/fetch-latest-release-tag.js +++ b/website/components/remote-plugin-docs/utils/fetch-latest-release-tag.js @@ -6,10 +6,25 @@ const fetch = require('node-fetch') */ async function fetchLatestReleaseTag(repo) { const latestReleaseUrl = `https://github.com/${repo}/releases/latest` - let res = await fetch(latestReleaseUrl) + let res = await fetch(latestReleaseUrl, { + headers: { + Authorization: `Bearer ${process.env.PLUGIN_REPO_GITHUB_TOKEN}`, + }, + }) if (res.status !== 200) { - console.error(`failed to fetch: ${latestReleaseUrl}`) + console.error( + `failed to fetch: ${latestReleaseUrl}`, + res.status, + res.statusText + ) + + if (res.status === 429) { + console.error( + 'GitHub API rate limit exceeded: Double check that a `PLUGIN_REPO_GITHUB_TOKEN` environment variable is set.' + ) + } + return false } diff --git a/website/components/remote-plugin-docs/utils/resolve-nav-data.js b/website/components/remote-plugin-docs/utils/resolve-nav-data.js index 49f76bf96a9..9b85add4397 100644 --- a/website/components/remote-plugin-docs/utils/resolve-nav-data.js +++ b/website/components/remote-plugin-docs/utils/resolve-nav-data.js @@ -92,6 +92,7 @@ async function resolvePluginEntryDocs(pluginConfigEntry, currentPath) { repo, version, pluginTier, + archived = false, isHcpPackerReady = false, sourceBranch = 'main', zipFile = '', @@ -141,6 +142,7 @@ async function resolvePluginEntryDocs(pluginConfigEntry, currentPath) { tier: parsedPluginTier, isHcpPackerReady, version, + archived, }, } }) diff --git a/website/content/docs/builders/index.mdx b/website/content/docs/builders/index.mdx index 322a6005fd8..18f1f5c4e69 100644 --- a/website/content/docs/builders/index.mdx +++ b/website/content/docs/builders/index.mdx @@ -10,7 +10,7 @@ page_title: Builders Builders are responsible for creating machines and generating images from them for various platforms. For example, there are separate builders for EC2, VMware, VirtualBox, etc. Packer comes with many builders by default, and can -also be extended to add new builders. +also be extended to add new builders. See [`plugins`](/plugins) for a list of plugins and their builders. See the [`source`](/docs/templates/hcl_templates/blocks/source) block documentation to learn more about configuring builders in the Packer language. diff --git a/website/content/docs/commands/plugins/index.mdx b/website/content/docs/commands/plugins/index.mdx new file mode 100644 index 00000000000..382b791fda1 --- /dev/null +++ b/website/content/docs/commands/plugins/index.mdx @@ -0,0 +1,30 @@ +--- +description: | + The "plugin" command groups subcommands for interacting with + Packer's plugin and the plugin catalog. +page_title: plugins Command +--- + +# `plugins` + +The `plugins` command groups subcommands for interacting with Packers' plugins. + +```shell-session +$ packer plugins -h +Usage: packer plugins [options] [args] + This command groups subcommands for interacting with Packer plugins. + +Related but not under the "plugins" command : + +- "packer init " will install all plugins required by a config. + +Subcommands: + install Install latest Packer plugin [matching version constraint] + installed List all installed Packer plugin binaries + remove Remove Packer plugins [matching a version] + required List plugins required by a config +``` + +## Related + +- [`packer init`](/docs/commands/init) will install all required plugins. diff --git a/website/content/docs/commands/plugins/install.mdx b/website/content/docs/commands/plugins/install.mdx new file mode 100644 index 00000000000..b5a931458e6 --- /dev/null +++ b/website/content/docs/commands/plugins/install.mdx @@ -0,0 +1,24 @@ +--- +description: | + The "plugins install" command can install a plugin at a version constraint. +page_title: plugins Command +--- + +# `plugins install` + +The `plugins install` subcommand installs a Packer plugin at a version constraint + +```shell-session +$ packer plugins install -h +Usage: packer plugins install [] + + This command will install the most recent compatible Packer plugin matching + version constraint. When the version constraint is omitted, the most recent + version will be installed. + + Ex: packer plugins install github.com/hashicorp/happycloud v1.2.3 +``` + +## Related + +- [`packer init`](/docs/commands/init) will install all required plugins. diff --git a/website/content/docs/commands/plugins/installed.mdx b/website/content/docs/commands/plugins/installed.mdx new file mode 100644 index 00000000000..2b0b330c2f2 --- /dev/null +++ b/website/content/docs/commands/plugins/installed.mdx @@ -0,0 +1,21 @@ +--- +description: | + The "plugins installed" command will list installed plugins. +page_title: plugins Command +--- + +# `plugins installed` + +The `plugins installed` subcommand lists installed Packer plugins + +```shell-session +$ packer plugins installed -h +Usage: packer plugins installed + + This command lists all installed plugin binaries that match with the current + OS and architecture. Packer's API version will be ignored. +``` + +## Related + +- [`packer init`](/docs/commands/init) will install all required plugins. diff --git a/website/content/docs/commands/plugins/remove.mdx b/website/content/docs/commands/plugins/remove.mdx new file mode 100644 index 00000000000..8887df5112d --- /dev/null +++ b/website/content/docs/commands/plugins/remove.mdx @@ -0,0 +1,24 @@ +--- +description: | + The "plugins remove" command can remove a plugin at a version constraint. +page_title: plugins Command +--- + +# `plugins remove` + +The `plugins remove` subcommand removes a Packer plugin at a version constraint + +```shell-session +$ packer plugins remove -h +Usage: packer plugins remove [] + + This command will remove all Packer plugins matching the version constraint + for the current OS and architecture. + When the version is omitted all installed versions will be removed. + + Ex: packer plugins remove github.com/hashicorp/happycloud v1.2.3 +``` + +## Related + +- [`packer init`](/docs/commands/init) will install all required plugins. diff --git a/website/content/docs/commands/plugins/required.mdx b/website/content/docs/commands/plugins/required.mdx new file mode 100644 index 00000000000..25b16a64d24 --- /dev/null +++ b/website/content/docs/commands/plugins/required.mdx @@ -0,0 +1,30 @@ +--- +description: | + The "plugins required" command lists all plugins required in a Packer configuration. +page_title: plugins Command +--- + +# `plugins required` + +The `plugins required` command lists all plugins required by a Packer config and +all the installed binaries that match the constraint. The first binary +is the most up-to-date installed version and will be the one picked by Packer in a build. + +```shell-session +$ packer plugins required -h +Usage: packer plugins required + + This command will list every Packer plugin required by a Packer config, in + packer.required_plugins blocks. All binaries matching the required version + constrain and the current OS and Architecture will be listed. The most recent + version (and the first of the list) will be the one picked by Packer during a + build. + + + Ex: packer plugins required require.pkr.hcl + Ex: packer plugins required path/to/folder/ +``` + +## Related + +- [`packer init`](/docs/commands/init) will install all required plugins. diff --git a/website/content/docs/commands/validate.mdx b/website/content/docs/commands/validate.mdx index 4498459e5a4..57026315ec5 100644 --- a/website/content/docs/commands/validate.mdx +++ b/website/content/docs/commands/validate.mdx @@ -34,7 +34,7 @@ Errors validating build 'vmware'. 1 error(s) occurred: - `-except=foo,bar,baz` - Validates all the builds except those with the comma-separated names. In legacy JSON templates, build names default to the types of their builders (e.g. `docker` or - `amazon-ebs` or `virtualbox-iso`, unless a specific `name` attribute is + `amazon-ebs` or `virtualbox-iso`), unless a specific `name` attribute is specified within the configuration. In HCL2 templates, the "name" is the source block's "name" label, unless an in-build source definition adds the "name" configuration option. @@ -42,7 +42,7 @@ Errors validating build 'vmware'. 1 error(s) occurred: - `-only=foo,bar,baz` - Only validate the builds with the given comma-separated names. In legacy JSON templates, build names default to the types of their builders (e.g. `docker` or - `amazon-ebs` or `virtualbox-iso`, unless a specific `name` attribute is + `amazon-ebs` or `virtualbox-iso`), unless a specific `name` attribute is specified within the configuration. In HCL2 templates, the "name" is the source block's "name" label, unless an in-build source definition adds the "name" configuration option. diff --git a/website/content/docs/datasources/hcp/hcp-packer-image.mdx b/website/content/docs/datasources/hcp/hcp-packer-image.mdx index 921c10fbd15..443716eb575 100644 --- a/website/content/docs/datasources/hcp/hcp-packer-image.mdx +++ b/website/content/docs/datasources/hcp/hcp-packer-image.mdx @@ -19,8 +19,9 @@ The `HCP Packer Image` Data Source retrieves information about an image from the HCP Packer registry. This information can be used to provide a source image to various Packer builders. -~> **Note:** HCP Packer is under active development, and we are currently offering a [public beta version](https://portal.cloud.hashicorp.com) to collect feedback and continue improving the product. -To get started, visit the [HCP Packer documentation](https://cloud.hashicorp.com/docs/packer) or try the [Get Started with HCP Packer](https://learn.hashicorp.com/collections/packer/hcp-get-started) collection on HashiCorp Learn. +To get started with HCP Packer, refer to the [HCP Packer documentation](https://cloud.hashicorp.com/docs/packer) or try the [Get Started with HCP Packer](https://learn.hashicorp.com/collections/packer/hcp-get-started) collection on HashiCorp Learn. + +~> **Note:** You will receive an error if you try to reference metadata from a deactivated or deleted registry. An administrator can manually deactivate or delete a registry, and HCP Packer automatically deactivates registries with billing issues. Contact [HashiCorp Support](https://support.hashicorp.com/) with questions. ## Basic Example diff --git a/website/content/docs/datasources/hcp/hcp-packer-iteration.mdx b/website/content/docs/datasources/hcp/hcp-packer-iteration.mdx index 1f1f43b0959..1b28fa696b7 100644 --- a/website/content/docs/datasources/hcp/hcp-packer-iteration.mdx +++ b/website/content/docs/datasources/hcp/hcp-packer-iteration.mdx @@ -19,8 +19,9 @@ The `HCP Packer Iteration` Data Source retrieves information about an iteration from the HCP Packer registry. This information can be used to query HCP for a source image for various Packer builders. -~> **Note:** HCP Packer is under active development, and we are currently offering a [public beta version](https://portal.cloud.hashicorp.com) to collect feedback and continue improving the product. -To get started, visit the [HCP Packer documentation](https://cloud.hashicorp.com/docs/packer) or try the [Get Started with HCP Packer](https://learn.hashicorp.com/collections/packer/hcp-get-started) collection on HashiCorp Learn. +To get started with HCP Packer, refer to the [HCP Packer documentation](https://cloud.hashicorp.com/docs/packer) or try the [Get Started with HCP Packer](https://learn.hashicorp.com/collections/packer/hcp-get-started) collection on HashiCorp Learn. + +~> **Note:** You will receive an error if you try to reference metadata from a deactivated or deleted registry. An administrator can manually deactivate or delete a registry, and HCP Packer automatically deactivates registries with billing issues. Contact [HashiCorp Support](https://support.hashicorp.com/) with questions. ## Basic Example diff --git a/website/content/docs/datasources/hcp/index.mdx b/website/content/docs/datasources/hcp/index.mdx index 3355a7a587b..22af507fffc 100644 --- a/website/content/docs/datasources/hcp/index.mdx +++ b/website/content/docs/datasources/hcp/index.mdx @@ -13,7 +13,7 @@ sidebar_title: Overview The HCP Packer registry bridges the gap between image factories and image deployments, allowing development and security teams to work together to create, -manage, and consume golden images in a centralized way. +manage, and consume images in a centralized way. The HCP Packer registry stores metadata about your images, including when they were created, where the image exists in the cloud, and what (if any) git commit @@ -23,10 +23,6 @@ designate which images are appropriate for test and production environments, and query for the right golden images to use in both Packer and Terraform configurations. -HCP Packer is under active development, and we are currently offering a public -beta version to collect feedback and continue improving the product. We -encourage you to try HCP Packer and submit your feedback. - Packer has two data sources that work together to retrieve information from the HCP Packer registry: diff --git a/website/content/docs/datasources/hcp/packer-image-iteration.mdx b/website/content/docs/datasources/hcp/packer-image-iteration.mdx index b1204d80cc6..4ac87250535 100644 --- a/website/content/docs/datasources/hcp/packer-image-iteration.mdx +++ b/website/content/docs/datasources/hcp/packer-image-iteration.mdx @@ -19,8 +19,9 @@ The `Packer Image Iteration` Data Source retrieves information about an iteration from the HCP Packer registry. This information can be parsed to provide a source image to various Packer builders. -~> **Note:** HCP Packer is under active development, and we are currently offering a [public beta version](https://portal.cloud.hashicorp.com) to collect feedback and continue improving the product. -To get started, visit the [HCP Packer documentation](https://cloud.hashicorp.com/docs/packer) or try the [Get Started with HCP Packer](https://learn.hashicorp.com/collections/packer/hcp-get-started) collection on HashiCorp Learn. +To get started with HCP Packer, refer to the [HCP Packer documentation](https://cloud.hashicorp.com/docs/packer) or try the [Get Started with HCP Packer](https://learn.hashicorp.com/collections/packer/hcp-get-started) collection on HashiCorp Learn. + +~> **Note:** You will receive an error if you try to reference metadata from a deactivated or deleted registry. An administrator can manually deactivate or delete a registry, and HCP Packer automatically deactivates registries with billing issues. Contact [HashiCorp Support](https://support.hashicorp.com/) with questions. ## Basic Example diff --git a/website/content/docs/index.mdx b/website/content/docs/index.mdx index 186ad6e51e5..2758108db72 100644 --- a/website/content/docs/index.mdx +++ b/website/content/docs/index.mdx @@ -12,10 +12,8 @@ To install Packer and learn the standard Packer workflow, try the [Get Started t ## HCP Packer -The HCP Packer registry bridges the gap between image factories and image deployments, allowing development and security teams to work together to create, manage, and consume golden images in a centralized way. +The HCP Packer registry bridges the gap between image factories and image deployments, allowing development and security teams to work together to create, manage, and consume images in a centralized way. The HCP Packer registry stores metadata about your images, including when they were created, where the image exists in the cloud, and what (if any) git commit is associated with your image build. You can use the registry to track information about the golden images your Packer builds produce, clearly designate which images are appropriate for test and production environments, and query for the right golden images to use in both Packer and Terraform configurations. -HCP Packer is under active development, and we are currently offering a [public beta version](https://portal.cloud.hashicorp.com) to collect feedback and continue improving the product. We encourage you to try HCP Packer and submit your feedback. - To get started, visit the [HCP Packer documentation](https://cloud.hashicorp.com/docs/packer) or try the [Get Started with HCP Packer](https://learn.hashicorp.com/collections/packer/hcp-get-started) collection on HashiCorp Learn. diff --git a/website/content/docs/packer-integration-program.mdx b/website/content/docs/partnerships.mdx similarity index 100% rename from website/content/docs/packer-integration-program.mdx rename to website/content/docs/partnerships.mdx diff --git a/website/content/docs/plugins/creation/index.mdx b/website/content/docs/plugins/creation/index.mdx index f6e049fee1f..4b48f16fce7 100644 --- a/website/content/docs/plugins/creation/index.mdx +++ b/website/content/docs/plugins/creation/index.mdx @@ -216,7 +216,7 @@ Here's what you need to create releases using GitHub Actions: 4. Go to your repository page on GitHub and navigate to Settings > Secrets. Add the following secrets: - `GPG_PRIVATE_KEY` - Your ASCII-armored GPG private key. You can export this with `gpg --armor --export-secret-keys [key ID or email]`. - - `PASSPHRASE` - The passphrase for your GPG private key. + - `GPG_PASSPHRASE` - The passphrase for your GPG private key. 5. Push a new valid version tag (e.g. `v1.2.3`) to test that the GitHub Actions releaser is working. The tag must be a valid [Semantic Version](https://semver.org/) preceded with a `v`. Once the tag is pushed, the github actions you just configured will automatically build release binaries that Packer can download using `packer init`. For more details on how @@ -232,7 +232,7 @@ To help with the discovery of remote Packer plugins on GitHub, plugins maintaine The registration process requires the creation of a `docs.zip` file archive containing the `.mdx` files for each of the plugin components in the remote plugin's repository. A working example can be seen at the [packer-plugin-docker repository](https://github.com/hashicorp/packer-plugin-docker/releases/latest). -Once in place the remote plugin can be added to Packer's website builds by opening a pull-request against [hashicorp/packer](https://github.com/packer), with the needed configuration for pulling in the remote documentation. +Once in place the remote plugin can be added to Packer's website builds by opening a pull-request against [hashicorp/packer](https://github.com/hashicorp/packer), with the needed configuration for pulling in the remote documentation. Remote plugins will have their components listed under the respected types (i.e builders, provisioners, etc) using the names specified in the remote block configuration, and labeled with their respective [tier and namespace](/docs/plugins#tiers-and-namespaces). @@ -262,7 +262,7 @@ The documentation structure needed for Packer.io can be generated manually, by c Once the first `docs.zip` file has been included into a release you will need to open a one time pull-request against [hashicorp/packer](https://github.com/hashicorp/packer) to register the plugin docs. -This is done by adding the block below for the respective plugin to the file [website/data/docs-remote-plugins.json](https://github.com/hashicorp/packer/blob/master/website/data/docs-remote-plugins.json). +This is done by adding the block below for the respective plugin to the file [website/data/plugins-manifest.json](https://github.com/hashicorp/packer/blob/master/website/data/plugins-manifest.json). ```json { @@ -288,7 +288,7 @@ Follow the next steps to get the Packer website running and preview the document - Get the [Packer source code](https://github.com/hashicorp/packer). Our website code is under the [website folder](https://github.com/hashicorp/packer/tree/master/website). - Generate the `docs.zip` file. You can find above the steps to do so. -- Add the `zipFile` attribute to the plugin entry in `docs-remote-plugins.json`. The value should be the full path of the `docs.zip` generated. For example: +- Add the `zipFile` attribute to the plugin entry in `plugins-manifest.json`. The value should be the full path of the `docs.zip` generated. For example: ```json { diff --git a/website/content/docs/post-processors/shell-local.mdx b/website/content/docs/post-processors/shell-local.mdx index f2fe6fbb78f..0d4d77d31b2 100644 --- a/website/content/docs/post-processors/shell-local.mdx +++ b/website/content/docs/post-processors/shell-local.mdx @@ -94,6 +94,11 @@ Exactly _one_ of the following is required: Optional parameters: +- `env` (map of strings) - A map of key/value pairs to inject prior to the + execute_command. Packer injects some environmental variables by default into + the environment, as well, which are covered in the section below. Duplciate + `env` settings override `environment_vars` settings. + - `environment_vars` (array of strings) - An array of key/value pairs to inject prior to the `execute_command`. The format should be `key=value`. Packer injects some environmental variables by default into the diff --git a/website/content/docs/provisioners/powershell.mdx b/website/content/docs/provisioners/powershell.mdx index df2423ce8a6..f0402121b9b 100644 --- a/website/content/docs/provisioners/powershell.mdx +++ b/website/content/docs/provisioners/powershell.mdx @@ -17,8 +17,8 @@ The PowerShell Packer provisioner runs PowerShell scripts on Windows machines. It assumes that the communicator in use is WinRM. However, the provisioner can work equally well (with a few caveats) when combined with the SSH communicator. See the [section -below](/docs/provisioners/powershell#combining-the-powershell-provisioner-with-the-ssh-communicator) -for details. +below](#combining-the-powershell-provisioner-with-the-ssh-communicator) for +details. `@include 'path/separator-note.mdx'` @@ -75,6 +75,12 @@ provisioner "powershell" { - `Vars`: The location of a temp file containing the list of `environment_vars`, if configured. +- `env` (map of strings) - A map of key/value pairs to inject prior to the + execute_command. Packer injects some environmental variables by default into + the environment, as well, which are covered in the section below. Duplciate + `env` settings override `environment_vars` settings. This is not a JSON + template engine enabled function. HCL interpolation works as usual. + - `environment_vars` (array of strings) - An array of key/value pairs to inject prior to the execute_command. The format should be `key=value`. Packer injects some environmental variables by default into the diff --git a/website/content/docs/provisioners/shell-local.mdx b/website/content/docs/provisioners/shell-local.mdx index 088351e5244..7aa172de311 100644 --- a/website/content/docs/provisioners/shell-local.mdx +++ b/website/content/docs/provisioners/shell-local.mdx @@ -103,6 +103,11 @@ Exactly _one_ of the following is required: Optional parameters: +- `env` (map of strings) - A map of key/value pairs to inject prior to the + execute_command. Packer injects some environmental variables by default into + the environment, as well, which are covered in the section below. Duplciate + `env` settings override `environment_vars` settings. + - `environment_vars` (array of strings) - An array of key/value pairs to inject prior to the `execute_command`. The format should be `key=value`. Packer injects some environmental variables by default into the diff --git a/website/content/docs/provisioners/shell.mdx b/website/content/docs/provisioners/shell.mdx index c94eda2cad7..d00081f0057 100644 --- a/website/content/docs/provisioners/shell.mdx +++ b/website/content/docs/provisioners/shell.mdx @@ -52,6 +52,11 @@ provisioner "shell" { @include 'provisioners/shell-config.mdx' +- `env` (map of strings) - A map of key/value pairs to inject prior to the + execute_command. Packer injects some environmental variables by default into + the environment, as well, which are covered in the section below. Duplciate + `env` settings override `environment_vars` settings. + - `environment_vars` (array of strings) - An array of key/value pairs to inject prior to the execute_command. The format should be `key=value`. Packer injects some environmental variables by default into the diff --git a/website/content/docs/provisioners/windows-restart.mdx b/website/content/docs/provisioners/windows-restart.mdx index c6c46b4c04c..9c78bced5ce 100644 --- a/website/content/docs/provisioners/windows-restart.mdx +++ b/website/content/docs/provisioners/windows-restart.mdx @@ -78,8 +78,9 @@ Optional parameters: - `restart_command` (string) - The command to execute to initiate the restart. By default this is `shutdown /r /f /t 0 /c "packer restart"`. -- `restart_check_command` (string) - A command to execute to check if the - restart succeeded. This will be done in a loop. Example usage: +- `restart_check_command` (string) - The command to run after executing `restart_command` + to check if the guest machine has restarted. This command will retry until the connection + to the guest machine has been restored or `restart_timeout` has exceeded. diff --git a/website/content/docs/provisioners/windows-shell.mdx b/website/content/docs/provisioners/windows-shell.mdx index e38c47e3428..f2b5d3adb3a 100644 --- a/website/content/docs/provisioners/windows-shell.mdx +++ b/website/content/docs/provisioners/windows-shell.mdx @@ -46,6 +46,11 @@ provisioner "windows-shell" { @include 'provisioners/shell-config.mdx' +- `env` (map of strings) - A map of key/value pairs to inject prior to the + execute_command. Packer injects some environmental variables by default into + the environment, as well, which are covered in the section below. Duplciate + `env` settings override `environment_vars` settings. + - `environment_vars` (array of strings) - An array of key/value pairs to inject prior to the execute_command. The format should be `key=value`. Packer injects some environmental variables by default into the diff --git a/website/content/docs/templates/hcl_templates/blocks/build/hcp_packer_registry.mdx b/website/content/docs/templates/hcl_templates/blocks/build/hcp_packer_registry.mdx index ef341fd065a..666b152b37b 100644 --- a/website/content/docs/templates/hcl_templates/blocks/build/hcp_packer_registry.mdx +++ b/website/content/docs/templates/hcl_templates/blocks/build/hcp_packer_registry.mdx @@ -7,18 +7,11 @@ page_title: hcp_packer_registry - build - Blocks # The `hcp_packer_registry` block -~> **Note:** HCP Packer is under active development, and we are currently -offering a [public beta version](https://portal.cloud.hashicorp.com) to collect -feedback and continue improving the product. -To get started, visit the -[HCP Packer documentation](https://cloud.hashicorp.com/docs/packer) or try the -[Get Started with HCP Packer](https://learn.hashicorp.com/collections/packer/hcp-get-started) -collection on HashiCorp Learn. +The `hcp_packer_registry` block lets you customize the metadata Packer sends to HCP Packer Registry. It configures the details of an image that is created or updated within the HCP Packer registry. +To get started with HCP Packer, refer to the [HCP Packer documentation](https://cloud.hashicorp.com/docs/packer) or try the [Get Started with HCP Packer](https://learn.hashicorp.com/collections/packer/hcp-get-started) collection on HashiCorp Learn. -The `hcp_packer_registry` block allows operators the ability to customize the -metadata sent to HCP Packer Registry. It configures the details of an image -that is created or updated within the HCP Packer registry. +## Usage This block is available from version 1.7.7 of Packer. @@ -29,6 +22,8 @@ registry if the appropriate HCP credentials are set (`HCP_CLIENT_ID` and and exit immediately to avoid any potential artifact drift between the defined builders (source blocks) and the HCP Packer registry. +~> **Note:** You will receive an error if you try to reference metadata from a deactivated or deleted registry. An administrator can manually deactivate or delete a registry, and HCP Packer automatically deactivates registries with billing issues. Contact [HashiCorp Support](https://support.hashicorp.com/) with questions. + ```hcl # file: builds.pkr.hcl source "happycloud" "macos" { diff --git a/website/content/docs/templates/hcl_templates/functions/collection/lookup.mdx b/website/content/docs/templates/hcl_templates/functions/collection/lookup.mdx index c01fddd0e4d..c7cdb671cf8 100644 --- a/website/content/docs/templates/hcl_templates/functions/collection/lookup.mdx +++ b/website/content/docs/templates/hcl_templates/functions/collection/lookup.mdx @@ -12,10 +12,6 @@ If the given key does not exist, a the given default value is returned instead. lookup(map, key, default) ``` --> For historical reasons, the `default` parameter is actually optional. However, -omitting `default` is deprecated since v0.7 because that would then be -equivalent to the native index syntax, `map[key]`. - ## Examples ```shell-session diff --git a/website/content/docs/templates/hcl_templates/functions/contextual/vault.mdx b/website/content/docs/templates/hcl_templates/functions/contextual/vault.mdx index 5d4a7a020b6..e818b61575c 100644 --- a/website/content/docs/templates/hcl_templates/functions/contextual/vault.mdx +++ b/website/content/docs/templates/hcl_templates/functions/contextual/vault.mdx @@ -41,7 +41,24 @@ locals { This example accesses the Vault path `secret/foo` and returns the value stored at the key `foo`, storing it as the local variable `local.foo`. -In order for this to work, you must set the environment variables `VAULT_TOKEN` +If the Vault secret contains a highly sensitive value the `local` block, not to be confused with +the `locals` block, can be used to mark the value as sensitive. + +```hcl +local "foo" { + expression = vault("secrets/hello", "foo") + sensitive = true +} + +The `local` block example accesses the Vault path `secrets/foo` and returns the value +stored at the key `foo`, storing it as the local variable `local.foo`. However, the output of +the newly stored local variable will be filtered from the Packer build output, and replaced +with the value ''. See [Local Values](/docs/templates/hcl_templates/locals) for more details. + + +## Usage + +In order for the Vault function to work, you must set the environment variables `VAULT_TOKEN` and `VAULT_ADDR` to valid values. -> **NOTE:** HCL functions can be used in local variable definitions or inline diff --git a/website/content/docs/templates/legacy_json_templates/post-processors.mdx b/website/content/docs/templates/legacy_json_templates/post-processors.mdx index 08dde151157..b694d8eb430 100644 --- a/website/content/docs/templates/legacy_json_templates/post-processors.mdx +++ b/website/content/docs/templates/legacy_json_templates/post-processors.mdx @@ -171,5 +171,5 @@ option _ignores_ post-processors. The values within `only` or `except` are _build names_, not builder types. Name is a required block label in HCL, but in legacy JSON, build names default to the types of their builders (e.g. `docker` or `amazon-ebs` or -`virtualbox-iso`, unless a specific `name` attribute is specified within the +`virtualbox-iso`), unless a specific `name` attribute is specified within the configuration. diff --git a/website/content/guides/automatic-operating-system-installs/autounattend_windows.mdx b/website/content/guides/automatic-operating-system-installs/autounattend_windows.mdx index e644a096cdc..061b45d248d 100644 --- a/website/content/guides/automatic-operating-system-installs/autounattend_windows.mdx +++ b/website/content/guides/automatic-operating-system-installs/autounattend_windows.mdx @@ -57,7 +57,7 @@ If you want to be able to use provisioners, the Answer file must also contain a script that sets up SSH or WinRM so that Packer can connect to the instance. Finally, your Packer build will be much smoother if the Answer File handles or -disables windows updates rather than you tyring to run them using a Packer +disables windows updates rather than you trying to run them using a Packer provisioner. This is because the winrm communicator does not handle the disconnects caused by automatic reboots in Windows updates well, and the disconnections can fail a build. diff --git a/website/content/partials/builders/community_builders.mdx b/website/content/partials/builders/community_builders.mdx index dedeb5574f1..79f8355a14e 100644 --- a/website/content/partials/builders/community_builders.mdx +++ b/website/content/partials/builders/community_builders.mdx @@ -9,10 +9,6 @@ - [Huawei Cloud ECS builder](https://github.com/huaweicloud/packer-builder-huaweicloud-ecs) - Plugin for creating [Huawei Cloud ECS](https://www.huaweicloud.com/intl/en-us/) images. -- [UpCloud builder](https://github.com/UpCloudLtd/packer-plugin-upcloud) - A suite of Packer plugins for provisioning Upcloud servers. - -- [Vultr builder](https://github.com/vultr/packer-builder-vultr) - A builder for creating [Vultr](https://www.vultr.com/) snapshots. - - [Citrix XenServer/Citrix Hypervisor](https://github.com/xenserver/packer-builder-xenserver) - Plugin for creating [Citrix XenServer/Citrix Hypervisor](https://xenserver.org/) images from an iso image or from an existing template. -- [XCP-NG/Citrix XenServer/Citrix Hypervisor/Updated Fork](https://github.com/ddelnano/packer-plugin-xenserver) - Plugin for creating [XCP-NG/Citrix XenServer/Citrix Hypervisor](https://xcp-ng.org/) images from an iso image or from an existing template. This is a fork of the orginal, and reccomended by the developers of XCP-NG. +- [XCP-NG/Citrix XenServer/Citrix Hypervisor/Updated Fork](https://github.com/ddelnano/packer-plugin-xenserver) - Plugin for creating [XCP-NG/Citrix XenServer/Citrix Hypervisor](https://xcp-ng.org/) images from an iso image or from an existing template. This is a fork of the orginal, and reccomended by the developers of XCP-NG. diff --git a/website/content/partials/commands/except.mdx b/website/content/partials/commands/except.mdx index 85941ed583f..5677c0e1190 100644 --- a/website/content/partials/commands/except.mdx +++ b/website/content/partials/commands/except.mdx @@ -1,7 +1,7 @@ - `-except=foo,bar,baz` - Run all the builds and post-processors except those with the given comma-separated names. In legacy JSON templates, build names default to the types of their builders (e.g. `docker` or - `amazon-ebs` or `virtualbox-iso`, unless a specific `name` attribute is + `amazon-ebs` or `virtualbox-iso`), unless a specific `name` attribute is specified within the configuration. In HCL2 templates, the "name" is the source block's "name" label, unless an in-build source definition adds the "name" configuration option. Any post-processor following diff --git a/website/content/partials/commands/only.mdx b/website/content/partials/commands/only.mdx index ab532b5f541..a6c901cb258 100644 --- a/website/content/partials/commands/only.mdx +++ b/website/content/partials/commands/only.mdx @@ -1,7 +1,7 @@ - `-only=foo,bar,baz` - Only run the builds with the given comma-separated names. In legacy JSON templates, build names default to the types of their builders (e.g. `docker` or - `amazon-ebs` or `virtualbox-iso`, unless a specific `name` attribute is + `amazon-ebs` or `virtualbox-iso`), unless a specific `name` attribute is specified within the configuration. In HCL2 templates, the "name" is the source block's "name" label, unless an in-build source definition adds the - "name" configuration option. \ No newline at end of file + "name" configuration option. diff --git a/website/content/partials/plugins/installing-plugins.mdx b/website/content/partials/plugins/installing-plugins.mdx index fa2ff799fae..0fc563432fe 100644 --- a/website/content/partials/plugins/installing-plugins.mdx +++ b/website/content/partials/plugins/installing-plugins.mdx @@ -165,6 +165,9 @@ will avoid conflicting with other plugins for other tools, like Terraform. +-> The [`packer plugins`](/docs/commands/plugins) command allows to install plugins without going through +`init`. For manual installation of plugin binaries, without the `packer plugins` command, please continue reading. + The easiest way to manually install a plugin is to name it correctly, then place it in the proper directory. To name a plugin correctly, make sure the binary is named `packer-plugin-NAME`. For example, `packer-plugin-amazon` for a "plugin" diff --git a/website/content/partials/plugins/plugin-location.mdx b/website/content/partials/plugins/plugin-location.mdx index cfb6df94da6..5fb7e80344c 100644 --- a/website/content/partials/plugins/plugin-location.mdx +++ b/website/content/partials/plugins/plugin-location.mdx @@ -12,7 +12,7 @@ found version matching `required_plugins` will be taken into consideration. 1. The directory where `packer` is, or the executable directory. 1. The current working directory. (`"."`) -1. The `PACKER_HOME_DIR/plugins` directory. PACKER_HOME_DIR refers to *[Packer's home +1. The `PACKER_HOME_DIR/plugins` directory. `PACKER_HOME_DIR` refers to *[Packer's home directory](/docs/configure#packer-s-home-directory)*, if it could be found. 1. The director(y/ies) under the `PACKER_PLUGIN_PATH` env var, if `PACKER_PLUGIN_PATH` is set. diff --git a/website/content/partials/plugins/plugin-tiers-and-namespaces.mdx b/website/content/partials/plugins/plugin-tiers-and-namespaces.mdx index d3c15440b8d..0ff38b8f875 100644 --- a/website/content/partials/plugins/plugin-tiers-and-namespaces.mdx +++ b/website/content/partials/plugins/plugin-tiers-and-namespaces.mdx @@ -2,16 +2,17 @@ Packer plugins are published and maintained by a variety of sources, including HashiCorp, and the Packer community. This website uses tiers and badges to -denote the source of a provider. Additionally, namespaces are used to help users +denote the source of a plugin. Additionally, namespaces are used to help users identify the organization or publisher responsible for the integration, as shown in the table below. | Tier | Description | Namespace | | -------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------- | | | Official plugins are owned and maintained by HashiCorp. | hashicorp | +| | Verified plugins are owned and maintained by third-party technology partners. Plugins in this tier indicate HashiCorp has verified the authenticity of the Plugin’s publisher, and that the partner is a member of the [HashiCorp Technology Partner Program](https://www.hashicorp.com/partners).| Third-party organization | | | Community providers are published by individual maintainers, groups of maintainers, or other members of the Packer community. | Third-party organization or maintainer's individual account | +| | Archived plugins are plugins that are no longer maintained by HashiCorp, a partner, or the community. This may occur if an API is deprecated or interest was low. | hashicorp or third-party | - is present when a Packer builder using -this plugin and version will be able to communicate build statuses with HCP -Packer. +## HCP Packer Badge + is present for plugins that HashiCorp has verified to communicate build status to the HCP Packer registry. diff --git a/website/content/partials/provisioners/community_provisioners.mdx b/website/content/partials/provisioners/community_provisioners.mdx index 4a3ab72f00b..d52c6bdf290 100644 --- a/website/content/partials/provisioners/community_provisioners.mdx +++ b/website/content/partials/provisioners/community_provisioners.mdx @@ -4,6 +4,6 @@ Example provisioner that allows you to annotate your build with bubble-text comments. -- [Windows Update provisioner](https://github.com/rgl/packer-provisioner-windows-update) - +- [Windows Update provisioner](https://github.com/rgl/packer-plugin-windows-update) - A provisioner for gracefully handling windows updates and the reboots they cause. diff --git a/website/data/alert-banner.js b/website/data/alert-banner.js index 6fe98879495..0c149100413 100644 --- a/website/data/alert-banner.js +++ b/website/data/alert-banner.js @@ -1,13 +1,13 @@ -export const ALERT_BANNER_ACTIVE = false +export const ALERT_BANNER_ACTIVE = true // https://github.com/hashicorp/web-components/tree/master/packages/alert-banner export default { - tag: 'Blog post', - url: 'https://www.hashicorp.com/blog/a-new-chapter-for-hashicorp', + tag: 'New', + url: 'https://cloud.hashicorp.com/products/packer ', text: - 'HashiCorp shares have begun trading on the Nasdaq. Read the blog from our founders, Mitchell Hashimoto and Armon Dadgar.', - linkText: 'Read the post', + 'HCP Packer offers automation and security workflows for Packer, and is now generally available.', + linkText: 'Sign up for free', // Set the expirationDate prop with a datetime string (e.g. '2020-01-31T12:00:00-07:00') // if you'd like the component to stop showing at or after a certain date - expirationDate: '2021-12-17T23:00:00-07:00', + expirationDate: '2022-04-07T23:00:00-07:00', } diff --git a/website/data/docs-nav-data.json b/website/data/docs-nav-data.json index b131d274cc4..58fc8488146 100644 --- a/website/data/docs-nav-data.json +++ b/website/data/docs-nav-data.json @@ -17,6 +17,31 @@ "title": "init", "path": "commands/init" }, + { + "title": "plugins", + "routes": [ + { + "title": "Overview", + "path": "commands/plugins" + }, + { + "title": "install", + "path": "commands/plugins/install" + }, + { + "title": "installed", + "path": "commands/plugins/installed" + }, + { + "title": "remove", + "path": "commands/plugins/remove" + }, + { + "title": "required", + "path": "commands/plugins/required" + } + ] + }, { "title": "build", "path": "commands/build" @@ -871,8 +896,8 @@ ] }, { - "title": "Packer Integration Program", - "path": "packer-integration-program" + "title": "Integration Program", + "path": "partnerships" }, { "divider": true diff --git a/website/data/plugins-manifest.json b/website/data/plugins-manifest.json index 4bff2f6d801..b81e9d3dec1 100644 --- a/website/data/plugins-manifest.json +++ b/website/data/plugins-manifest.json @@ -18,6 +18,7 @@ "path": "anka", "repo": "veertuinc/packer-plugin-veertu-anka", "pluginTier": "community", + "source_branch": "master", "version": "latest" }, { @@ -45,7 +46,8 @@ "path": "chef", "repo": "hashicorp/packer-plugin-chef", "pluginTier": "community", - "version": "latest" + "version": "latest", + "archived": true }, { "title": "Cloudstack", @@ -59,7 +61,8 @@ "path": "converge", "repo": "hashicorp/packer-plugin-converge", "pluginTier": "community", - "version": "latest" + "version": "latest", + "archived": true }, { "title": "DigitalOcean", @@ -130,7 +133,8 @@ "path": "inspec", "repo": "hashicorp/packer-plugin-inspec", "pluginTier": "community", - "version": "latest" + "version": "latest", + "archived": true }, { "title": "JD Cloud", @@ -193,7 +197,7 @@ "path": "outscale", "repo": "outscale/packer-plugin-outscale", "version": "latest", - "pluginTier": "community" + "pluginTier": "verified" }, { "title": "Parallels", @@ -220,7 +224,8 @@ "path": "puppet", "repo": "hashicorp/packer-plugin-puppet", "version": "latest", - "pluginTier": "community" + "pluginTier": "community", + "archived": true }, { "title": "QEMU", @@ -233,13 +238,14 @@ "path": "salt", "repo": "hashicorp/packer-plugin-salt", "pluginTier": "community", - "version": "latest" + "version": "latest", + "archived": true }, { "title": "Scaleway", "path": "scaleway", "repo": "scaleway/packer-plugin-scaleway", - "pluginTier": "community", + "pluginTier": "verified", "version": "latest" }, { @@ -270,6 +276,14 @@ "version": "latest", "pluginTier": "community" }, + { + "title": "UpCloud", + "path": "upcloud", + "repo": "UpCloudLtd/packer-plugin-upcloud", + "version": "latest", + "pluginTier": "verified", + "sourceBranch": "master" + }, { "title": "Vagrant", "path": "vagrant", diff --git a/website/data/version.js b/website/data/version.js index 1416dbab2de..5507b15a85a 100644 --- a/website/data/version.js +++ b/website/data/version.js @@ -1 +1 @@ -export default '1.7.8' +export default '1.8.0' diff --git a/website/next.config.js b/website/next.config.js index dfcf9c46e03..c8801d90a20 100644 --- a/website/next.config.js +++ b/website/next.config.js @@ -19,5 +19,6 @@ module.exports = withHashicorp({ SEGMENT_WRITE_KEY: 'AjXdfmTTk1I9q9dfyePuDFHBrz1tCO3l', BUGSNAG_CLIENT_KEY: 'de0b822b269aa57b620efd8927e03744', BUGSNAG_SERVER_KEY: 'b6c57b27a37e531a5de94f065dd98bc0', + ENABLE_VERSIONED_DOCS: process.env.ENABLE_VERSIONED_DOCS || false, }, }) diff --git a/website/package-lock.json b/website/package-lock.json index e9aaf74a6b0..83fa8cd0f4a 100644 --- a/website/package-lock.json +++ b/website/package-lock.json @@ -19,12 +19,12 @@ "@hashicorp/react-button": "^6.0.1", "@hashicorp/react-command-line-terminal": "^2.0.4", "@hashicorp/react-consent-manager": "^7.0.3", - "@hashicorp/react-docs-page": "^14.4.2", + "@hashicorp/react-docs-page": "^14.14.3", "@hashicorp/react-hashi-stack-menu": "^2.1.2", "@hashicorp/react-head": "^3.1.2", "@hashicorp/react-inline-svg": "^6.0.3", "@hashicorp/react-markdown-page": "^1.4.3", - "@hashicorp/react-product-downloads-page": "^2.5.3", + "@hashicorp/react-product-downloads-page": "^2.7.0", "@hashicorp/react-product-features-list": "^5.0.0", "@hashicorp/react-search": "^6.1.1", "@hashicorp/react-section-header": "^5.0.4", @@ -42,13 +42,14 @@ "react-dom": "^17.0.2" }, "devDependencies": { - "@hashicorp/platform-cli": "^1.2.0", + "@hashicorp/platform-cli": "^2.0.0", "@hashicorp/platform-nextjs-plugin": "^1.0.1", "@hashicorp/platform-types": "^0.1.1", "@types/react": "^17.0.3", "dart-linkcheck": "2.0.15", "husky": "4.3.5", "prettier": "2.2.1", + "ts-node": "^10.4.0", "typescript": "^4.3.5" }, "engines": { @@ -56,118 +57,123 @@ } }, "node_modules/@algolia/cache-browser-local-storage": { - "version": "4.10.5", - "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.10.5.tgz", - "integrity": "sha512-cfX2rEKOtuuljcGI5DMDHClwZHdDqd2nT2Ohsc8aHtBiz6bUxKVyIqxr2gaC6tU8AgPtrTVBzcxCA+UavXpKww==", + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.12.1.tgz", + "integrity": "sha512-ERFFOnC9740xAkuO0iZTQqm2AzU7Dpz/s+g7o48GlZgx5p9GgNcsuK5eS0GoW/tAK+fnKlizCtlFHNuIWuvfsg==", "dependencies": { - "@algolia/cache-common": "4.10.5" + "@algolia/cache-common": "4.12.1" } }, "node_modules/@algolia/cache-common": { - "version": "4.10.5", - "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.10.5.tgz", - "integrity": "sha512-1mClwdmTHll+OnHkG+yeRoFM17kSxDs4qXkjf6rNZhoZGXDvfYLy3YcZ1FX4Kyz0DJv8aroq5RYGBDsWkHj6Tw==" + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.12.1.tgz", + "integrity": "sha512-UugTER3V40jT+e19Dmph5PKMeliYKxycNPwrPNADin0RcWNfT2QksK9Ff2N2W7UKraqMOzoeDb4LAJtxcK1a8Q==" }, "node_modules/@algolia/cache-in-memory": { - "version": "4.10.5", - "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.10.5.tgz", - "integrity": "sha512-+ciQnfIGi5wjMk02XhEY8fmy2pzy+oY1nIIfu8LBOglaSipCRAtjk6WhHc7/KIbXPiYzIwuDbM2K1+YOwSGjwA==", + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.12.1.tgz", + "integrity": "sha512-U6iaunaxK1lHsAf02UWF58foKFEcrVLsHwN56UkCtwn32nlP9rz52WOcHsgk6TJrL8NDcO5swMjtOQ5XHESFLw==", "dependencies": { - "@algolia/cache-common": "4.10.5" + "@algolia/cache-common": "4.12.1" } }, "node_modules/@algolia/client-account": { - "version": "4.10.5", - "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.10.5.tgz", - "integrity": "sha512-I9UkSS2glXm7RBZYZIALjBMmXSQbw/fI/djPcBHxiwXIheNIlqIFl2SNPkvihpPF979BSkzjqdJNRPhE1vku3Q==", + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.12.1.tgz", + "integrity": "sha512-jGo4ConJNoMdTCR2zouO0jO/JcJmzOK6crFxMMLvdnB1JhmMbuIKluOTJVlBWeivnmcsqb7r0v7qTCPW5PAyxQ==", "dependencies": { - "@algolia/client-common": "4.10.5", - "@algolia/client-search": "4.10.5", - "@algolia/transporter": "4.10.5" + "@algolia/client-common": "4.12.1", + "@algolia/client-search": "4.12.1", + "@algolia/transporter": "4.12.1" } }, "node_modules/@algolia/client-analytics": { - "version": "4.10.5", - "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.10.5.tgz", - "integrity": "sha512-h2owwJSkovPxzc+xIsjY1pMl0gj+jdVwP9rcnGjlaTY2fqHbSLrR9yvGyyr6305LvTppxsQnfAbRdE/5Z3eFxw==", + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.12.1.tgz", + "integrity": "sha512-h1It7KXzIthlhuhfBk7LteYq72tym9maQDUsyRW0Gft8b6ZQahnRak9gcCvKwhcJ1vJoP7T7JrNYGiYSicTD9g==", "dependencies": { - "@algolia/client-common": "4.10.5", - "@algolia/client-search": "4.10.5", - "@algolia/requester-common": "4.10.5", - "@algolia/transporter": "4.10.5" + "@algolia/client-common": "4.12.1", + "@algolia/client-search": "4.12.1", + "@algolia/requester-common": "4.12.1", + "@algolia/transporter": "4.12.1" } }, "node_modules/@algolia/client-common": { - "version": "4.10.5", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.10.5.tgz", - "integrity": "sha512-21FAvIai5qm8DVmZHm2Gp4LssQ/a0nWwMchAx+1hIRj1TX7OcdW6oZDPyZ8asQdvTtK7rStQrRnD8a95SCUnzA==", + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.12.1.tgz", + "integrity": "sha512-obnJ8eSbv+h94Grk83DTGQ3bqhViSWureV6oK1s21/KMGWbb3DkduHm+lcwFrMFkjSUSzosLBHV9EQUIBvueTw==", "dependencies": { - "@algolia/requester-common": "4.10.5", - "@algolia/transporter": "4.10.5" + "@algolia/requester-common": "4.12.1", + "@algolia/transporter": "4.12.1" } }, "node_modules/@algolia/client-personalization": { - "version": "4.10.5", - "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.10.5.tgz", - "integrity": "sha512-nH+IyFKBi8tCyzGOanJTbXC5t4dspSovX3+ABfmwKWUYllYzmiQNFUadpb3qo+MLA3jFx5IwBesjneN6dD5o3w==", + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.12.1.tgz", + "integrity": "sha512-sMSnjjPjRgByGHYygV+5L/E8a6RgU7l2GbpJukSzJ9GRY37tHmBHuvahv8JjdCGJ2p7QDYLnQy5bN5Z02qjc7Q==", "dependencies": { - "@algolia/client-common": "4.10.5", - "@algolia/requester-common": "4.10.5", - "@algolia/transporter": "4.10.5" + "@algolia/client-common": "4.12.1", + "@algolia/requester-common": "4.12.1", + "@algolia/transporter": "4.12.1" } }, "node_modules/@algolia/client-search": { - "version": "4.10.5", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.10.5.tgz", - "integrity": "sha512-1eQFMz9uodrc5OM+9HeT+hHcfR1E1AsgFWXwyJ9Q3xejA2c1c4eObGgOgC9ZoshuHHdptaTN1m3rexqAxXRDBg==", + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.12.1.tgz", + "integrity": "sha512-MwwKKprfY6X2nJ5Ki/ccXM2GDEePvVjZnnoOB2io3dLKW4fTqeSRlC5DRXeFD7UM0vOPPHr4ItV2aj19APKNVQ==", "dependencies": { - "@algolia/client-common": "4.10.5", - "@algolia/requester-common": "4.10.5", - "@algolia/transporter": "4.10.5" + "@algolia/client-common": "4.12.1", + "@algolia/requester-common": "4.12.1", + "@algolia/transporter": "4.12.1" } }, + "node_modules/@algolia/events": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@algolia/events/-/events-4.0.1.tgz", + "integrity": "sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ==" + }, "node_modules/@algolia/logger-common": { - "version": "4.10.5", - "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.10.5.tgz", - "integrity": "sha512-gRJo9zt1UYP4k3woEmZm4iuEBIQd/FrArIsjzsL/b+ihNoOqIxZKTSuGFU4UUZOEhvmxDReiA4gzvQXG+TMTmA==" + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.12.1.tgz", + "integrity": "sha512-fCgrzlXGATNqdFTxwx0GsyPXK+Uqrx1SZ3iuY2VGPPqdt1a20clAG2n2OcLHJpvaa6vMFPlJyWvbqAgzxdxBlQ==" }, "node_modules/@algolia/logger-console": { - "version": "4.10.5", - "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.10.5.tgz", - "integrity": "sha512-4WfIbn4253EDU12u9UiYvz+QTvAXDv39mKNg9xSoMCjKE5szcQxfcSczw2byc6pYhahOJ9PmxPBfs1doqsdTKQ==", + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.12.1.tgz", + "integrity": "sha512-0owaEnq/davngQMYqxLA4KrhWHiXujQ1CU3FFnyUcMyBR7rGHI48zSOUpqnsAXrMBdSH6rH5BDkSUUFwsh8RkQ==", "dependencies": { - "@algolia/logger-common": "4.10.5" + "@algolia/logger-common": "4.12.1" } }, "node_modules/@algolia/requester-browser-xhr": { - "version": "4.10.5", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.10.5.tgz", - "integrity": "sha512-53/MURQEqtK+bGdfq4ITSPwTh5hnADU99qzvpAINGQveUFNSFGERipJxHjTJjIrjFz3vxj5kKwjtxDnU6ygO9g==", + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.12.1.tgz", + "integrity": "sha512-OaMxDyG0TZG0oqz1lQh9e3woantAG1bLnuwq3fmypsrQxra4IQZiyn1x+kEb69D2TcXApI5gOgrD4oWhtEVMtw==", "dependencies": { - "@algolia/requester-common": "4.10.5" + "@algolia/requester-common": "4.12.1" } }, "node_modules/@algolia/requester-common": { - "version": "4.10.5", - "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.10.5.tgz", - "integrity": "sha512-UkVa1Oyuj6NPiAEt5ZvrbVopEv1m/mKqjs40KLB+dvfZnNcj+9Fry4Oxnt15HMy/HLORXsx4UwcthAvBuOXE9Q==" + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.12.1.tgz", + "integrity": "sha512-XWIrWQNJ1vIrSuL/bUk3ZwNMNxl+aWz6dNboRW6+lGTcMIwc3NBFE90ogbZKhNrFRff8zI4qCF15tjW+Fyhpow==" }, "node_modules/@algolia/requester-node-http": { - "version": "4.10.5", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.10.5.tgz", - "integrity": "sha512-aNEKVKXL4fiiC+bS7yJwAHdxln81ieBwY3tsMCtM4zF9f5KwCzY2OtN4WKEZa5AAADVcghSAUdyjs4AcGUlO5w==", + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.12.1.tgz", + "integrity": "sha512-awBtwaD+s0hxkA1aehYn8F0t9wqGoBVWgY4JPHBmp1ChO3pK7RKnnvnv7QQa9vTlllX29oPt/BBVgMo1Z3n1Qg==", "dependencies": { - "@algolia/requester-common": "4.10.5" + "@algolia/requester-common": "4.12.1" } }, "node_modules/@algolia/transporter": { - "version": "4.10.5", - "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.10.5.tgz", - "integrity": "sha512-F8DLkmIlvCoMwSCZA3FKHtmdjH3o5clbt0pi2ktFStVNpC6ZDmY307HcK619bKP5xW6h8sVJhcvrLB775D2cyA==", + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.12.1.tgz", + "integrity": "sha512-BGeNgdEHc6dXIk2g8kdlOoQ6fQ6OIaKQcplEj7HPoi+XZUeAvRi3Pff3QWd7YmybWkjzd9AnTzieTASDWhL+sQ==", "dependencies": { - "@algolia/cache-common": "4.10.5", - "@algolia/logger-common": "4.10.5", - "@algolia/requester-common": "4.10.5" + "@algolia/cache-common": "4.12.1", + "@algolia/logger-common": "4.12.1", + "@algolia/requester-common": "4.12.1" } }, "node_modules/@babel/code-frame": { @@ -579,6 +585,27 @@ "resolved": "https://registry.npmjs.org/@bugsnag/safe-json-stringify/-/safe-json-stringify-6.0.0.tgz", "integrity": "sha512-htzFO1Zc57S8kgdRK9mLcPVTW1BY2ijfH7Dk2CeZmspTWKdKqSo1iwmqrq2WtRjFlo8aRZYgLX0wFrDXF/9DLA==" }, + "node_modules/@cspotcode/source-map-consumer": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz", + "integrity": "sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==", + "dev": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz", + "integrity": "sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==", + "dev": true, + "dependencies": { + "@cspotcode/source-map-consumer": "0.8.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/@csstools/convert-colors": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/@csstools/convert-colors/-/convert-colors-1.4.0.tgz", @@ -856,6 +883,146 @@ "node": ">=4.0.0" } }, + "node_modules/@hashicorp/nextjs-scripts/node_modules/@hashicorp/react-code-block": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@hashicorp/react-code-block/-/react-code-block-4.1.2.tgz", + "integrity": "sha512-kHlk0lid8kp1MmrGGtmPvRP2BNSz8rQBYWH0txqipBJv5ZPsXnyflypcBlivIppxA1+gciwAwg3B/Zcx8L6m1A==", + "dependencies": { + "@hashicorp/react-inline-svg": "6.0.1", + "@reach/listbox": "0.15.0", + "shellwords": "^0.1.1" + }, + "peerDependencies": { + "@hashicorp/mktg-global-styles": ">=3.x", + "@hashicorp/nextjs-scripts": ">=17.x", + "react": ">=16.x" + } + }, + "node_modules/@hashicorp/nextjs-scripts/node_modules/@hashicorp/react-code-block/node_modules/@hashicorp/react-inline-svg": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@hashicorp/react-inline-svg/-/react-inline-svg-6.0.1.tgz", + "integrity": "sha512-EpvJd0AkE5tvlentS/Oez5W7SFJ32UjvU0RVFPYQlwR6tOTMOR9wK7Ose69WjkmtdjPMHWRE6MxWeSn0c1N5Bw==", + "peerDependencies": { + "@hashicorp/mktg-global-styles": ">=3.x", + "@hashicorp/nextjs-scripts": ">=17.x", + "react": ">=16.x" + } + }, + "node_modules/@hashicorp/nextjs-scripts/node_modules/@hashicorp/react-code-block/node_modules/@reach/listbox": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@reach/listbox/-/listbox-0.15.0.tgz", + "integrity": "sha512-3Vvpte0HQkfo3sT4Cz6gG9h+E/La2IwbtLQDTesEmDzToQ8bk9rOfuFDVp7IXUyOdDggfDCOEz/ZphsuniADWA==", + "dependencies": { + "@reach/auto-id": "0.15.0", + "@reach/descendants": "0.15.0", + "@reach/machine": "0.15.0", + "@reach/popover": "0.15.0", + "@reach/utils": "0.15.0", + "prop-types": "^15.7.2" + }, + "peerDependencies": { + "react": "^16.8.0 || 17.x", + "react-dom": "^16.8.0 || 17.x" + } + }, + "node_modules/@hashicorp/nextjs-scripts/node_modules/@hashicorp/react-code-block/node_modules/@reach/listbox/node_modules/@reach/auto-id": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@reach/auto-id/-/auto-id-0.15.0.tgz", + "integrity": "sha512-iACaCcZeqAhDf4OOwJpmHHS/LaRj9z3Ip8JmlhpCrFWV2YOIiiZk42amlBZX6CKH66Md+eriYZQk3TyAjk6Oxg==", + "dependencies": { + "@reach/utils": "0.15.0", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "react": "^16.8.0 || 17.x", + "react-dom": "^16.8.0 || 17.x" + } + }, + "node_modules/@hashicorp/nextjs-scripts/node_modules/@hashicorp/react-code-block/node_modules/@reach/listbox/node_modules/@reach/descendants": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@reach/descendants/-/descendants-0.15.0.tgz", + "integrity": "sha512-MGs+7sGjx07sm29Wc2d/Ya72qwatNVHofnYwwHMT6LImv99kE5TQMCgkMSDeRwqQxHURmcjb4I7Tab+ahvCGiw==", + "dependencies": { + "@reach/utils": "0.15.0", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "react": "^16.8.0 || 17.x", + "react-dom": "^16.8.0 || 17.x" + } + }, + "node_modules/@hashicorp/nextjs-scripts/node_modules/@hashicorp/react-code-block/node_modules/@reach/listbox/node_modules/@reach/machine": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@reach/machine/-/machine-0.15.0.tgz", + "integrity": "sha512-o3vvqsTQyj7apxpbSuIn4xKYlqNagcjhlMnroJ2uqgJfFwy1tLrsQo4Sr8GnZu4hitPbNAfqGExYjV8ZV8SHpA==", + "dependencies": { + "@reach/utils": "0.15.0", + "@xstate/fsm": "1.4.0", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "react": "^16.8.0 || 17.x", + "react-dom": "^16.8.0 || 17.x" + } + }, + "node_modules/@hashicorp/nextjs-scripts/node_modules/@hashicorp/react-code-block/node_modules/@reach/listbox/node_modules/@reach/popover": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@reach/popover/-/popover-0.15.0.tgz", + "integrity": "sha512-nBR6ZlULF7ZZIqkN47QEWmdqUX2Zd6FSeYJku1il9OkiMnWzI3aTOyu1B+IJfYeIqg28D/aeF4ff0oVu1VUrqQ==", + "dependencies": { + "@reach/portal": "0.15.0", + "@reach/rect": "0.15.0", + "@reach/utils": "0.15.0", + "tabbable": "^4.0.0", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "react": "^16.8.0 || 17.x", + "react-dom": "^16.8.0 || 17.x" + } + }, + "node_modules/@hashicorp/nextjs-scripts/node_modules/@hashicorp/react-code-block/node_modules/@reach/listbox/node_modules/@reach/popover/node_modules/@reach/portal": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@reach/portal/-/portal-0.15.0.tgz", + "integrity": "sha512-Aulqjk/PIRu+R7yhINYAAYfYh++ZdC30qwHDWDtGk2cmTEJT7m9AlvBX+W7T+Q3Ux6Wy5f37eV+TTGid1CcjFw==", + "dependencies": { + "@reach/utils": "0.15.0", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "react": "^16.8.0 || 17.x", + "react-dom": "^16.8.0 || 17.x" + } + }, + "node_modules/@hashicorp/nextjs-scripts/node_modules/@hashicorp/react-code-block/node_modules/@reach/listbox/node_modules/@reach/popover/node_modules/@reach/rect": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@reach/rect/-/rect-0.15.0.tgz", + "integrity": "sha512-Nu0zG4Xq8Z0C3Yr3wbjtj7fvII1q2KopHDStNtmL26oWPzlaZJ9A1K6rZSPIqxKkx1hvl6AUTeom7eHTIKhHjA==", + "dependencies": { + "@reach/observe-rect": "1.2.0", + "@reach/utils": "0.15.0", + "prop-types": "^15.7.2", + "tiny-warning": "^1.0.3", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "react": "^16.8.0 || 17.x", + "react-dom": "^16.8.0 || 17.x" + } + }, + "node_modules/@hashicorp/nextjs-scripts/node_modules/@hashicorp/react-code-block/node_modules/@reach/listbox/node_modules/@reach/utils": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@reach/utils/-/utils-0.15.0.tgz", + "integrity": "sha512-JHHN7T5ucFiuQbqkgv8ECbRWKfRiJxrO/xHR3fHf+f2C7mVs/KkJHhYtovS1iEapR4silygX9PY0+QUmHPOTYw==", + "dependencies": { + "tiny-warning": "^1.0.3", + "tslib": "^2.1.0" + }, + "peerDependencies": { + "react": "^16.8.0 || 17.x", + "react-dom": "^16.8.0 || 17.x" + } + }, "node_modules/@hashicorp/nextjs-scripts/node_modules/@hashicorp/react-consent-manager": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/@hashicorp/react-consent-manager/-/react-consent-manager-5.1.0.tgz", @@ -918,29 +1085,29 @@ } }, "node_modules/@hashicorp/platform-cli": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@hashicorp/platform-cli/-/platform-cli-1.2.0.tgz", - "integrity": "sha512-bdGYmqRxxApO+WKPoj8Tc6cWLY2zfPIOQUwnSAcheSE3hIwhscEeudkAxQhKGtgjX4HazgfhEBmQEcJ8T28Bew==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@hashicorp/platform-cli/-/platform-cli-2.0.0.tgz", + "integrity": "sha512-+el+rRD6tlAECLKYhLBvppjyojZQWZAROznuZv/IwSoyVwLx4Z7hgGLt9IJ3jFGsCStBG9BseVf71zesbl+jTw==", "dev": true, "dependencies": { "@hashicorp/platform-cms": "0.3.0", - "@typescript-eslint/eslint-plugin": "4.9.1", - "@typescript-eslint/parser": "4.9.1", + "@typescript-eslint/eslint-plugin": "5.10.2", + "@typescript-eslint/parser": "5.10.2", "babel-eslint": "10.1.0", "chalk": "4.1.0", "commander": "7.2.0", "ejs": "3.1.5", - "eslint": "7.23.0", - "eslint-config-next": "^11.0.1", - "eslint-config-prettier": "7.0.0", - "eslint-plugin-jsx-a11y": "6.4.1", - "eslint-plugin-prettier": "3.3.0", + "eslint": "8.8.0", + "eslint-config-next": "12.0.10", + "eslint-config-prettier": "8.3.0", + "eslint-plugin-jsx-a11y": "6.5.1", + "eslint-plugin-prettier": "4.0.0", "fs-extra": "9.0.1", "globby": "11.0.1", "inquirer": "7.3.3", "lint-staged": "11.1.2", "open": "7.3.0", - "prettier": "2.2.1", + "prettier": "2.5.1", "readdirp": "3.5.0", "signale": "1.4.0", "slugify": "1.4.6", @@ -958,46 +1125,118 @@ "next-hashicorp": "next-hashicorp" } }, - "node_modules/@hashicorp/platform-cli/node_modules/@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "node_modules/@hashicorp/platform-cli/node_modules/@babel/runtime": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.7.tgz", + "integrity": "sha512-9E9FJowqAsytyOY6LG+1KuueckRL+aQW+mKvXRXnuFGyRAyepJPmEo9vgMfXUA6O9u3IeEdv9MAkppFcaQwogQ==", "dev": true, "dependencies": { - "@babel/highlight": "^7.10.4" + "regenerator-runtime": "^0.13.4" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@hashicorp/platform-cli/node_modules/@eslint/eslintrc": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", - "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.5.tgz", + "integrity": "sha512-BLxsnmK3KyPunz5wmCCpqy0YelEoxxGmH73Is+Z74oOTMtExcjkr3dDR6quwrjh1YspA8DH9gnX1o069KiS9AQ==", "dev": true, "dependencies": { "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", + "debug": "^4.3.2", + "espree": "^9.2.0", "globals": "^13.9.0", "ignore": "^4.0.6", "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", + "js-yaml": "^4.1.0", "minimatch": "^3.0.4", "strip-json-comments": "^3.1.1" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@hashicorp/platform-cli/node_modules/@eslint/eslintrc/node_modules/ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/@hashicorp/platform-cli/node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.10.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.10.2.tgz", + "integrity": "sha512-4W/9lLuE+v27O/oe7hXJKjNtBLnZE8tQAFpapdxwSVHqtmIoPB1gph3+ahNwVuNL37BX7YQHyGF9Xv6XCnIX2Q==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "5.10.2", + "@typescript-eslint/type-utils": "5.10.2", + "@typescript-eslint/utils": "5.10.2", + "debug": "^4.3.2", + "functional-red-black-tree": "^1.0.1", + "ignore": "^5.1.8", + "regexpp": "^3.2.0", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@hashicorp/platform-cli/node_modules/@typescript-eslint/parser": { + "version": "5.10.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.10.2.tgz", + "integrity": "sha512-JaNYGkaQVhP6HNF+lkdOr2cAs2wdSZBoalE22uYWq8IEv/OVH0RksSGydk+sW8cLoSeYmC+OHvRyv2i4AQ7Czg==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "5.10.2", + "@typescript-eslint/types": "5.10.2", + "@typescript-eslint/typescript-estree": "5.10.2", + "debug": "^4.3.2" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, "node_modules/@hashicorp/platform-cli/node_modules/@typescript-eslint/scope-manager": { - "version": "4.32.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.32.0.tgz", - "integrity": "sha512-DK+fMSHdM216C0OM/KR1lHXjP1CNtVIhJ54kQxfOE6x8UGFAjha8cXgDMBEIYS2XCYjjCtvTkjQYwL3uvGOo0w==", + "version": "5.10.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.10.2.tgz", + "integrity": "sha512-39Tm6f4RoZoVUWBYr3ekS75TYgpr5Y+X0xLZxXqcZNDWZdJdYbKd3q2IR4V9y5NxxiPu/jxJ8XP7EgHiEQtFnw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "4.32.0", - "@typescript-eslint/visitor-keys": "4.32.0" + "@typescript-eslint/types": "5.10.2", + "@typescript-eslint/visitor-keys": "5.10.2" }, "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", @@ -1005,12 +1244,12 @@ } }, "node_modules/@hashicorp/platform-cli/node_modules/@typescript-eslint/types": { - "version": "4.32.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.32.0.tgz", - "integrity": "sha512-LE7Z7BAv0E2UvqzogssGf1x7GPpUalgG07nGCBYb1oK4mFsOiFC/VrSMKbZQzFJdN2JL5XYmsx7C7FX9p9ns0w==", + "version": "5.10.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.10.2.tgz", + "integrity": "sha512-Qfp0qk/5j2Rz3p3/WhWgu4S1JtMcPgFLnmAKAW061uXxKSa7VWKZsDXVaMXh2N60CX9h6YLaBoy9PJAfCOjk3w==", "dev": true, "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", @@ -1018,21 +1257,21 @@ } }, "node_modules/@hashicorp/platform-cli/node_modules/@typescript-eslint/typescript-estree": { - "version": "4.32.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.32.0.tgz", - "integrity": "sha512-tRYCgJ3g1UjMw1cGG8Yn1KzOzNlQ6u1h9AmEtPhb5V5a1TmiHWcRyF/Ic+91M4f43QeChyYlVTcf3DvDTZR9vw==", + "version": "5.10.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.10.2.tgz", + "integrity": "sha512-WHHw6a9vvZls6JkTgGljwCsMkv8wu8XU8WaYKeYhxhWXH/atZeiMW6uDFPLZOvzNOGmuSMvHtZKd6AuC8PrwKQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "4.32.0", - "@typescript-eslint/visitor-keys": "4.32.0", - "debug": "^4.3.1", - "globby": "^11.0.3", - "is-glob": "^4.0.1", + "@typescript-eslint/types": "5.10.2", + "@typescript-eslint/visitor-keys": "5.10.2", + "debug": "^4.3.2", + "globby": "^11.0.4", + "is-glob": "^4.0.3", "semver": "^7.3.5", "tsutils": "^3.21.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", @@ -1045,16 +1284,16 @@ } }, "node_modules/@hashicorp/platform-cli/node_modules/@typescript-eslint/typescript-estree/node_modules/globby": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", - "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", "slash": "^3.0.0" }, "engines": { @@ -1064,41 +1303,41 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@hashicorp/platform-cli/node_modules/@typescript-eslint/typescript-estree/node_modules/ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, "node_modules/@hashicorp/platform-cli/node_modules/@typescript-eslint/visitor-keys": { - "version": "4.32.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.32.0.tgz", - "integrity": "sha512-e7NE0qz8W+atzv3Cy9qaQ7BTLwWsm084Z0c4nIO2l3Bp6u9WIgdqCgyPyV5oSPDMIW3b20H59OOCmVk3jw3Ptw==", + "version": "5.10.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.10.2.tgz", + "integrity": "sha512-zHIhYGGGrFJvvyfwHk5M08C5B5K4bewkm+rrvNTKk1/S15YHR+SA/QUF8ZWscXSfEaB8Nn2puZj+iHcoxVOD/Q==", "dev": true, "dependencies": { - "@typescript-eslint/types": "4.32.0", - "eslint-visitor-keys": "^2.0.0" + "@typescript-eslint/types": "5.10.2", + "eslint-visitor-keys": "^3.0.0" }, "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@hashicorp/platform-cli/node_modules/astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "node_modules/@hashicorp/platform-cli/node_modules/acorn": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", + "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", "dev": true, + "bin": { + "acorn": "bin/acorn" + }, "engines": { - "node": ">=8" + "node": ">=0.4.0" } }, + "node_modules/@hashicorp/platform-cli/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, "node_modules/@hashicorp/platform-cli/node_modules/commander": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", @@ -1108,53 +1347,80 @@ "node": ">= 10" } }, + "node_modules/@hashicorp/platform-cli/node_modules/debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, "node_modules/@hashicorp/platform-cli/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", "dev": true }, + "node_modules/@hashicorp/platform-cli/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@hashicorp/platform-cli/node_modules/eslint": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.23.0.tgz", - "integrity": "sha512-kqvNVbdkjzpFy0XOszNwjkKzZ+6TcwCQ/h+ozlcIWwaimBBuhlQ4nN6kbiM2L+OjDcznkTJxzYfRFH92sx4a0Q==", + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.8.0.tgz", + "integrity": "sha512-H3KXAzQGBH1plhYS3okDix2ZthuYJlQQEGE5k0IKuEqUSiyu4AmxxlJ2MtTYeJ3xB4jDhcYCwGOg2TXYdnDXlQ==", "dev": true, "dependencies": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.0", + "@eslint/eslintrc": "^1.0.5", + "@humanwhocodes/config-array": "^0.9.2", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", - "debug": "^4.0.1", + "debug": "^4.3.2", "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.0", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.2.0", + "espree": "^9.3.0", "esquery": "^1.4.0", "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.0.0", + "glob-parent": "^6.0.1", "globals": "^13.6.0", - "ignore": "^4.0.6", + "ignore": "^5.2.0", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", + "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", - "lodash": "^4.17.21", + "lodash.merge": "^4.6.2", "minimatch": "^3.0.4", "natural-compare": "^1.4.0", "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", "strip-json-comments": "^3.1.0", - "table": "^6.0.4", "text-table": "^0.2.0", "v8-compile-cache": "^2.0.3" }, @@ -1162,30 +1428,30 @@ "eslint": "bin/eslint.js" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, "node_modules/@hashicorp/platform-cli/node_modules/eslint-config-next": { - "version": "11.1.2", - "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-11.1.2.tgz", - "integrity": "sha512-dFutecxX2Z5/QVlLwdtKt+gIfmNMP8Qx6/qZh3LM/DFVdGJEAnUKrr4VwGmACB2kx/PQ5bx3R+QxnEg4fDPiTg==", + "version": "12.0.10", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-12.0.10.tgz", + "integrity": "sha512-l1er6mwSo1bltjLwmd71p5BdT6k/NQxV1n4lKZI6xt3MDMrq7ChUBr+EecxOry8GC/rCRUtPpH8Ygs0BJc5YLg==", "dev": true, "dependencies": { - "@next/eslint-plugin-next": "11.1.2", - "@rushstack/eslint-patch": "^1.0.6", - "@typescript-eslint/parser": "^4.20.0", + "@next/eslint-plugin-next": "12.0.10", + "@rushstack/eslint-patch": "^1.0.8", + "@typescript-eslint/parser": "^5.0.0", "eslint-import-resolver-node": "^0.3.4", "eslint-import-resolver-typescript": "^2.4.0", - "eslint-plugin-import": "^2.22.1", - "eslint-plugin-jsx-a11y": "^6.4.1", - "eslint-plugin-react": "^7.23.1", - "eslint-plugin-react-hooks": "^4.2.0" + "eslint-plugin-import": "^2.25.2", + "eslint-plugin-jsx-a11y": "^6.5.1", + "eslint-plugin-react": "^7.27.0", + "eslint-plugin-react-hooks": "^4.3.0" }, "peerDependencies": { - "eslint": "^7.23.0", + "eslint": "^7.23.0 || ^8.0.0", "next": ">=10.2.0", "typescript": ">=3.3.1" }, @@ -1195,169 +1461,181 @@ } } }, - "node_modules/@hashicorp/platform-cli/node_modules/eslint-config-next/node_modules/@typescript-eslint/parser": { - "version": "4.32.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.32.0.tgz", - "integrity": "sha512-lhtYqQ2iEPV5JqV7K+uOVlPePjClj4dOw7K4/Z1F2yvjIUvyr13yJnDzkK6uon4BjHYuHy3EG0c2Z9jEhFk56w==", + "node_modules/@hashicorp/platform-cli/node_modules/eslint-config-prettier": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz", + "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==", "dev": true, - "dependencies": { - "@typescript-eslint/scope-manager": "4.32.0", - "@typescript-eslint/types": "4.32.0", - "@typescript-eslint/typescript-estree": "4.32.0", - "debug": "^4.3.1" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "bin": { + "eslint-config-prettier": "bin/cli.js" }, "peerDependencies": { - "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "eslint": ">=7.0.0" } }, - "node_modules/@hashicorp/platform-cli/node_modules/eslint-config-next/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "node_modules/@hashicorp/platform-cli/node_modules/eslint-plugin-jsx-a11y": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.5.1.tgz", + "integrity": "sha512-sVCFKX9fllURnXT2JwLN5Qgo24Ug5NF6dxhkmxsMEUZhXRcGg+X3e1JbJ84YePQKBl5E0ZjAH5Q4rkdcGY99+g==", "dev": true, "dependencies": { - "esutils": "^2.0.2" + "@babel/runtime": "^7.16.3", + "aria-query": "^4.2.2", + "array-includes": "^3.1.4", + "ast-types-flow": "^0.0.7", + "axe-core": "^4.3.5", + "axobject-query": "^2.2.0", + "damerau-levenshtein": "^1.0.7", + "emoji-regex": "^9.2.2", + "has": "^1.0.3", + "jsx-ast-utils": "^3.2.1", + "language-tags": "^1.0.5", + "minimatch": "^3.0.4" }, "engines": { - "node": ">=0.10.0" + "node": ">=4.0" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" } }, - "node_modules/@hashicorp/platform-cli/node_modules/eslint-config-next/node_modules/eslint-import-resolver-typescript": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.5.0.tgz", - "integrity": "sha512-qZ6e5CFr+I7K4VVhQu3M/9xGv9/YmwsEXrsm3nimw8vWaVHRDrQRp26BgCypTxBp3vUp4o5aVEJRiy0F2DFddQ==", + "node_modules/@hashicorp/platform-cli/node_modules/eslint-plugin-prettier": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.0.0.tgz", + "integrity": "sha512-98MqmCJ7vJodoQK359bqQWaxOE0CS8paAz/GgjaZLyex4TTk3g9HugoO89EqWCrFiOqn9EVvcoo7gZzONCWVwQ==", "dev": true, "dependencies": { - "debug": "^4.3.1", - "glob": "^7.1.7", - "is-glob": "^4.0.1", - "resolve": "^1.20.0", - "tsconfig-paths": "^3.9.0" + "prettier-linter-helpers": "^1.0.0" }, "engines": { - "node": ">=4" + "node": ">=6.0.0" }, "peerDependencies": { - "eslint": "*", - "eslint-plugin-import": "*" + "eslint": ">=7.28.0", + "prettier": ">=2.0.0" + }, + "peerDependenciesMeta": { + "eslint-config-prettier": { + "optional": true + } } }, - "node_modules/@hashicorp/platform-cli/node_modules/eslint-config-next/node_modules/eslint-plugin-import": { - "version": "2.24.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.24.2.tgz", - "integrity": "sha512-hNVtyhiEtZmpsabL4neEj+6M5DCLgpYyG9nzJY8lZQeQXEn5UPW1DpUdsMHMXsq98dbNm7nt1w9ZMSVpfJdi8Q==", + "node_modules/@hashicorp/platform-cli/node_modules/eslint-plugin-react": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.28.0.tgz", + "integrity": "sha512-IOlFIRHzWfEQQKcAD4iyYDndHwTQiCMcJVJjxempf203jnNLUnW34AXLrV33+nEXoifJE2ZEGmcjKPL8957eSw==", "dev": true, "dependencies": { - "array-includes": "^3.1.3", - "array.prototype.flat": "^1.2.4", - "debug": "^2.6.9", + "array-includes": "^3.1.4", + "array.prototype.flatmap": "^1.2.5", "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-module-utils": "^2.6.2", - "find-up": "^2.0.0", - "has": "^1.0.3", - "is-core-module": "^2.6.0", + "estraverse": "^5.3.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", "minimatch": "^3.0.4", - "object.values": "^1.1.4", - "pkg-up": "^2.0.0", - "read-pkg-up": "^3.0.0", - "resolve": "^1.20.0", - "tsconfig-paths": "^3.11.0" + "object.entries": "^1.1.5", + "object.fromentries": "^2.0.5", + "object.hasown": "^1.1.0", + "object.values": "^1.1.5", + "prop-types": "^15.7.2", + "resolve": "^2.0.0-next.3", + "semver": "^6.3.0", + "string.prototype.matchall": "^4.0.6" }, "engines": { "node": ">=4" }, "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0" + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" } }, - "node_modules/@hashicorp/platform-cli/node_modules/eslint-config-next/node_modules/eslint-plugin-import/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/@hashicorp/platform-cli/node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "dependencies": { - "ms": "2.0.0" + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@hashicorp/platform-cli/node_modules/eslint-plugin-react/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_modules/@hashicorp/platform-cli/node_modules/eslint-scope": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.0.tgz", + "integrity": "sha512-aWwkhnS0qAXqNOgKOK0dJ2nvzEbhEvpy8OlJ9kZ0FeZnA6zpjv1/Vei+puGFFX7zkPCkHHXb7IDX3A+7yPrRWg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/@hashicorp/platform-cli/node_modules/eslint-config-next/node_modules/eslint-plugin-react": { - "version": "7.26.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.26.1.tgz", - "integrity": "sha512-Lug0+NOFXeOE+ORZ5pbsh6mSKjBKXDXItUD2sQoT+5Yl0eoT82DqnXeTMfUare4QVCn9QwXbfzO/dBLjLXwVjQ==", + "node_modules/@hashicorp/platform-cli/node_modules/eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", "dev": true, "dependencies": { - "array-includes": "^3.1.3", - "array.prototype.flatmap": "^1.2.4", - "doctrine": "^2.1.0", - "estraverse": "^5.2.0", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.0.4", - "object.entries": "^1.1.4", - "object.fromentries": "^2.0.4", - "object.hasown": "^1.0.0", - "object.values": "^1.1.4", - "prop-types": "^15.7.2", - "resolve": "^2.0.0-next.3", - "semver": "^6.3.0", - "string.prototype.matchall": "^4.0.5" + "eslint-visitor-keys": "^2.0.0" }, "engines": { - "node": ">=4" + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" }, "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7" + "eslint": ">=5" } }, - "node_modules/@hashicorp/platform-cli/node_modules/eslint-config-next/node_modules/eslint-plugin-react-hooks": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.2.0.tgz", - "integrity": "sha512-623WEiZJqxR7VdxFCKLI6d6LLpwJkGPYKODnkH3D7WpOG5KM8yWueBd8TLsNAetEJNF5iJmolaAKO3F8yzyVBQ==", + "node_modules/@hashicorp/platform-cli/node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "dev": true, "engines": { "node": ">=10" - }, - "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" } }, - "node_modules/@hashicorp/platform-cli/node_modules/eslint-config-next/node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.3", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.3.tgz", - "integrity": "sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==", + "node_modules/@hashicorp/platform-cli/node_modules/eslint-visitor-keys": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.2.0.tgz", + "integrity": "sha512-IOzT0X126zn7ALX0dwFiUQEdsfzrm4+ISsQS8nukaJXwEyYKRSnEIIDULYg1mCtGp7UUXgfGl7BIolXREQK+XQ==", "dev": true, - "dependencies": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/@hashicorp/platform-cli/node_modules/eslint-config-next/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "node_modules/@hashicorp/platform-cli/node_modules/espree": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.0.tgz", + "integrity": "sha512-d/5nCsb0JcqsSEeQzFZ8DH1RmxPcglRWh24EFTlUEmCKoehXGdpsx0RkHDubqUI8LSAIKMQp4r9SzQ3n+sm4HQ==", "dev": true, - "bin": { - "semver": "bin/semver.js" + "dependencies": { + "acorn": "^8.7.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^3.1.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/@hashicorp/platform-cli/node_modules/estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, "engines": { "node": ">=4.0" @@ -1386,18 +1664,6 @@ "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/@hashicorp/platform-cli/node_modules/find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "dependencies": { - "locate-path": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/@hashicorp/platform-cli/node_modules/get-stream": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", @@ -1410,10 +1676,22 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@hashicorp/platform-cli/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/@hashicorp/platform-cli/node_modules/globals": { - "version": "13.11.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz", - "integrity": "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==", + "version": "13.12.1", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.1.tgz", + "integrity": "sha512-317dFlgY2pdJZ9rspXDks7073GpDmXdfbM3vYYp0HAMKGDh1FfWPleI2ljVNLQX5M5lXcAslTcPTrOrMEFOjyw==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -1434,30 +1712,18 @@ "node": ">=10.17.0" } }, - "node_modules/@hashicorp/platform-cli/node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/@hashicorp/platform-cli/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "node_modules/@hashicorp/platform-cli/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, - "engines": { - "node": ">=8" + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/@hashicorp/platform-cli/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, "node_modules/@hashicorp/platform-cli/node_modules/lint-staged": { "version": "11.1.2", "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-11.1.2.tgz", @@ -1502,172 +1768,29 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@hashicorp/platform-cli/node_modules/load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "node_modules/@hashicorp/platform-cli/node_modules/prettier": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.1.tgz", + "integrity": "sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==", "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@hashicorp/platform-cli/node_modules/locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "dependencies": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@hashicorp/platform-cli/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/@hashicorp/platform-cli/node_modules/p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "dependencies": { - "p-try": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@hashicorp/platform-cli/node_modules/p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "dependencies": { - "p-limit": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@hashicorp/platform-cli/node_modules/p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@hashicorp/platform-cli/node_modules/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "dependencies": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@hashicorp/platform-cli/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@hashicorp/platform-cli/node_modules/path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "dependencies": { - "pify": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@hashicorp/platform-cli/node_modules/pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@hashicorp/platform-cli/node_modules/read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", - "dev": true, - "dependencies": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@hashicorp/platform-cli/node_modules/read-pkg-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", - "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", - "dev": true, - "dependencies": { - "find-up": "^2.0.0", - "read-pkg": "^3.0.0" + "bin": { + "prettier": "bin-prettier.js" }, "engines": { - "node": ">=4" + "node": ">=10.13.0" } }, - "node_modules/@hashicorp/platform-cli/node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "node_modules/@hashicorp/platform-cli/node_modules/resolve": { + "version": "2.0.0-next.3", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.3.tgz", + "integrity": "sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==", "dev": true, "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=10" + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" }, "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/@hashicorp/platform-cli/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/@hashicorp/platform-cli/node_modules/strip-ansi": { @@ -1682,48 +1805,6 @@ "node": ">=8" } }, - "node_modules/@hashicorp/platform-cli/node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@hashicorp/platform-cli/node_modules/table": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", - "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", - "dev": true, - "dependencies": { - "ajv": "^8.0.1", - "lodash.clonedeep": "^4.5.0", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@hashicorp/platform-cli/node_modules/table/node_modules/ajv": { - "version": "8.6.3", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.3.tgz", - "integrity": "sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, "node_modules/@hashicorp/platform-cli/node_modules/type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", @@ -1758,11 +1839,11 @@ } }, "node_modules/@hashicorp/platform-docs-mdx": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@hashicorp/platform-docs-mdx/-/platform-docs-mdx-0.1.3.tgz", - "integrity": "sha512-NPVvn3s/JuFfebvymJ9JkOd6CHKfCVISz/QenmPgPim1nzJfe3uXKFeqolYdfMb8k1++XpX7KM70nJMVDyQLpw==", + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@hashicorp/platform-docs-mdx/-/platform-docs-mdx-0.1.4.tgz", + "integrity": "sha512-/yAZDWR7pgrTkNzoNxZXyWZ1dvSO+KVw5/ZFsUR8d+kZhSKqiLAHVEAH6i7Jd4GlW074OytUzWmA3Je2jAVetA==", "dependencies": { - "@hashicorp/react-code-block": "^4.1.0", + "@hashicorp/react-code-block": "^4.4.2", "@hashicorp/react-enterprise-alert": "^6.0.1", "@hashicorp/react-tabs": "^7.0.1", "@mdx-js/react": "1.6.22" @@ -1785,13 +1866,13 @@ } }, "node_modules/@hashicorp/platform-docs-mdx/node_modules/@hashicorp/react-tabs": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@hashicorp/react-tabs/-/react-tabs-7.0.1.tgz", - "integrity": "sha512-qmQscQkIxNhZc/QhWo5RCEu39rKXl4iQHlk0Q0Zk+ClqKSplDuVMMJqg3GtrG056em9xA2p+n7J501EZlOfzGg==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/@hashicorp/react-tabs/-/react-tabs-7.1.2.tgz", + "integrity": "sha512-0ZWPVOvF/FtiXlCVHPsBUfNx4GFNoiakvciE0jdu9it3nJc64GXVKYdlhuBHxF9TSfAMNEqyoeqRsK+HzsCYMA==", "dependencies": { - "@hashicorp/react-inline-svg": "^6.0.1", - "@reach/portal": "^0.16.0", - "@reach/tooltip": "^0.16.0", + "@hashicorp/react-inline-svg": "^6.0.3", + "@reach/portal": "^0.16.2", + "@reach/tooltip": "^0.16.2", "classnames": "^2.3.1" }, "peerDependencies": { @@ -1799,39 +1880,13 @@ "react": ">=16.x" } }, - "node_modules/@hashicorp/platform-docs-mdx/node_modules/@reach/portal": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/@reach/portal/-/portal-0.16.0.tgz", - "integrity": "sha512-vXJ0O9T+72HiSEWHPs2cx7YbSO7pQsTMhgqPc5aaddIYpo2clJx1PnYuS0lSNlVaDO0IxQhwYq43evXaXnmviw==", - "dependencies": { - "@reach/utils": "0.16.0", - "tslib": "^2.3.0" - }, - "peerDependencies": { - "react": "^16.8.0 || 17.x", - "react-dom": "^16.8.0 || 17.x" - } - }, - "node_modules/@hashicorp/platform-docs-mdx/node_modules/@reach/utils": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/@reach/utils/-/utils-0.16.0.tgz", - "integrity": "sha512-PCggBet3qaQmwFNcmQ/GqHSefadAFyNCUekq9RrWoaU9hh/S4iaFgf2MBMdM47eQj5i/Bk0Mm07cP/XPFlkN+Q==", - "dependencies": { - "tiny-warning": "^1.0.3", - "tslib": "^2.3.0" - }, - "peerDependencies": { - "react": "^16.8.0 || 17.x", - "react-dom": "^16.8.0 || 17.x" - } - }, "node_modules/@hashicorp/platform-markdown-utils": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@hashicorp/platform-markdown-utils/-/platform-markdown-utils-0.1.3.tgz", - "integrity": "sha512-WIVCYljXQAhT+wFb8EtN3AEkgFDcbXMEvF4XkBg8OE/UWlrKWUNICjhrwTN68Q4Vl11ChX/ifH803DmLcSninA==", + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@hashicorp/platform-markdown-utils/-/platform-markdown-utils-0.1.4.tgz", + "integrity": "sha512-ey24VxU99+ECQ7SPUqFrYpBMJZJKayD6hz8t3gDm/SxfSCEz/NXzqVye/ToWcEfRTtHqasBVDaVa2lf7UwzqKw==", "dependencies": { "@hashicorp/platform-types": "^0.1.0", - "@hashicorp/remark-plugins": "^3.2.0", + "@hashicorp/remark-plugins": "^3.2.1", "@mapbox/rehype-prism": "^0.6.0", "@mdx-js/react": "1.6.22", "rehype-katex": "^5.0.0", @@ -1842,6 +1897,22 @@ "react": ">= 16.x" } }, + "node_modules/@hashicorp/platform-markdown-utils/node_modules/@hashicorp/remark-plugins": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@hashicorp/remark-plugins/-/remark-plugins-3.3.1.tgz", + "integrity": "sha512-7xThpsBFWasdC/E+E/BAjHxMYqyCcQFiTVspvhBzN51meiQIacVCnyAox/lyvwWiP4N3Yj/ruH4UsR2ifskNeA==", + "dependencies": { + "@mdx-js/util": "1.6.22", + "github-slugger": "^1.3.0", + "remark": "12.0.1", + "remark-mdx": "1.6.22", + "to-vfile": "^6.1.0", + "unist-util-flatmap": "^1.0.0", + "unist-util-is": "^4.0.2", + "unist-util-map": "^2.0.1", + "unist-util-visit": "^2.0.3" + } + }, "node_modules/@hashicorp/platform-markdown-utils/node_modules/@mapbox/rehype-prism": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/@mapbox/rehype-prism/-/rehype-prism-0.6.0.tgz", @@ -2037,15 +2108,16 @@ } }, "node_modules/@hashicorp/react-alert": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@hashicorp/react-alert/-/react-alert-6.0.0.tgz", - "integrity": "sha512-uTRt9aux5NWyxBWifKD/QsQ1U/S4CurAMUpGbgvOe1gkAoKyl/0KdtlcXMEb1/jMmRH2F2sgj5gPmczPmiz/yg==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@hashicorp/react-alert/-/react-alert-6.0.2.tgz", + "integrity": "sha512-8ePxXMYR6kU0cYb4T3WZ74bInPQdbzfM4B+ZWqmW+raEpVAS2MTqDFl7X55L0syWx6JDbBmrlhzYaRzTDf6qug==", "dependencies": { "@hashicorp/platform-product-meta": "^0.1.0", - "classnames": "^2.2.6" + "classnames": "^2.3.1" }, "peerDependencies": { - "@hashicorp/mktg-global-styles": ">=3.x" + "@hashicorp/mktg-global-styles": ">=3.x", + "react": ">=16.x" } }, "node_modules/@hashicorp/react-alert-banner": { @@ -2096,27 +2168,16 @@ } }, "node_modules/@hashicorp/react-code-block": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/@hashicorp/react-code-block/-/react-code-block-4.1.2.tgz", - "integrity": "sha512-kHlk0lid8kp1MmrGGtmPvRP2BNSz8rQBYWH0txqipBJv5ZPsXnyflypcBlivIppxA1+gciwAwg3B/Zcx8L6m1A==", + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@hashicorp/react-code-block/-/react-code-block-4.4.2.tgz", + "integrity": "sha512-isnojue1SuTaq4jjh6C03jxVLCGmHaSK6D/m3OdEsUeV5PovZ7uNF9MFfhwHErIHKZztxOuIePepqaAB5sMHCw==", "dependencies": { - "@hashicorp/react-inline-svg": "6.0.1", - "@reach/listbox": "0.15.0", + "@hashicorp/react-inline-svg": "^6.0.3", + "@reach/listbox": "0.16.2", "shellwords": "^0.1.1" }, "peerDependencies": { "@hashicorp/mktg-global-styles": ">=3.x", - "@hashicorp/nextjs-scripts": ">=17.x", - "react": ">=16.x" - } - }, - "node_modules/@hashicorp/react-code-block/node_modules/@hashicorp/react-inline-svg": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@hashicorp/react-inline-svg/-/react-inline-svg-6.0.1.tgz", - "integrity": "sha512-EpvJd0AkE5tvlentS/Oez5W7SFJ32UjvU0RVFPYQlwR6tOTMOR9wK7Ose69WjkmtdjPMHWRE6MxWeSn0c1N5Bw==", - "peerDependencies": { - "@hashicorp/mktg-global-styles": ">=3.x", - "@hashicorp/nextjs-scripts": ">=17.x", "react": ">=16.x" } }, @@ -2160,9 +2221,9 @@ } }, "node_modules/@hashicorp/react-content": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@hashicorp/react-content/-/react-content-8.0.2.tgz", - "integrity": "sha512-FNE1IiXizUDPL/rsvo37uYSBsAB8LhtCianMU/h3MIj8Khcwc/qC3pTabGs9Kv3ujA+fiIp/ImzWEGAhB22T7g==", + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/@hashicorp/react-content/-/react-content-8.2.1.tgz", + "integrity": "sha512-qqyK1uejHfsrd+jRlTqQtJpihyUYGdeUottoFmsfPwvcs0Wy+r+AyzetknGiXYbflidjgM9pP6kw2PLtAMwoVQ==", "dependencies": { "@hashicorp/platform-product-meta": "^0.1.0", "classnames": "^2.3.1" @@ -2173,26 +2234,27 @@ } }, "node_modules/@hashicorp/react-docs-page": { - "version": "14.4.2", - "resolved": "https://registry.npmjs.org/@hashicorp/react-docs-page/-/react-docs-page-14.4.2.tgz", - "integrity": "sha512-K/KITJsAYA8sjxCy4JbAJKEgEKA924MNm4bd4SPniomzSYmsCNxeDaM/bSM/EpaGR7cX9r6htSyugKwo7V3QFQ==", - "dependencies": { - "@hashicorp/platform-docs-mdx": "^0.1.3", - "@hashicorp/platform-markdown-utils": "^0.1.3", - "@hashicorp/react-alert": "^6.0.0", - "@hashicorp/react-content": "^8.0.2", - "@hashicorp/react-docs-sidenav": "^8.4.0", + "version": "14.14.3", + "resolved": "https://registry.npmjs.org/@hashicorp/react-docs-page/-/react-docs-page-14.14.3.tgz", + "integrity": "sha512-prRWKE/Ykr+LGouJgdYfxTOMrpjRQf72IJYFUrZx+wL+LV+bT5hFNyWiHgJWNKg7DCUMQreX7RNAidzNOoxc6g==", + "dependencies": { + "@hashicorp/platform-docs-mdx": "^0.1.4", + "@hashicorp/platform-markdown-utils": "^0.2.0", + "@hashicorp/react-alert": "^6.0.2", + "@hashicorp/react-content": "^8.2.1", + "@hashicorp/react-docs-sidenav": "^8.4.1", "@hashicorp/react-head": "^3.1.2", "@hashicorp/react-placeholder": "^0.1.0", - "@hashicorp/react-search": "^6.1.1", - "@hashicorp/react-version-select": "^0.2.0", + "@hashicorp/react-search": "^6.4.1", + "@hashicorp/react-version-select": "^0.3.0", "classnames": "^2.3.1", "fs-exists-sync": "^0.1.0", "gray-matter": "^4.0.3", "js-yaml": "^4.1.0", "line-reader": "^0.4.0", - "moize": "^6.0.3", - "readdirp": "^3.6.0" + "moize": "^6.1.0", + "readdirp": "^3.6.0", + "semver": "^7.3.5" }, "peerDependencies": { "@hashicorp/mktg-global-styles": ">=3.x", @@ -2200,11 +2262,65 @@ "react": ">=16.x" } }, + "node_modules/@hashicorp/react-docs-page/node_modules/@hashicorp/platform-markdown-utils": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@hashicorp/platform-markdown-utils/-/platform-markdown-utils-0.2.0.tgz", + "integrity": "sha512-xs/yiP/vcgvGX5wYggvYIhG4WTmTS3e5oUE7QuTtukOHcCN+HmN79z9xn8yCDnJ0GiAm51dv42lmCBiWj3JF6Q==", + "dependencies": { + "@hashicorp/platform-types": "^0.1.0", + "@hashicorp/remark-plugins": "^3.3.1", + "@mapbox/rehype-prism": "^0.6.0", + "@mdx-js/react": "1.6.22", + "rehype-katex": "^5.0.0", + "remark-math": "^4.0.0", + "remark-rehype": "^7.0.0" + }, + "peerDependencies": { + "react": ">= 16.x" + } + }, + "node_modules/@hashicorp/react-docs-page/node_modules/@hashicorp/remark-plugins": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@hashicorp/remark-plugins/-/remark-plugins-3.3.1.tgz", + "integrity": "sha512-7xThpsBFWasdC/E+E/BAjHxMYqyCcQFiTVspvhBzN51meiQIacVCnyAox/lyvwWiP4N3Yj/ruH4UsR2ifskNeA==", + "dependencies": { + "@mdx-js/util": "1.6.22", + "github-slugger": "^1.3.0", + "remark": "12.0.1", + "remark-mdx": "1.6.22", + "to-vfile": "^6.1.0", + "unist-util-flatmap": "^1.0.0", + "unist-util-is": "^4.0.2", + "unist-util-map": "^2.0.1", + "unist-util-visit": "^2.0.3" + } + }, + "node_modules/@hashicorp/react-docs-page/node_modules/@mapbox/rehype-prism": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@mapbox/rehype-prism/-/rehype-prism-0.6.0.tgz", + "integrity": "sha512-/0Ev/PB4fXdKPT6VDzVpnAPxGpWFIc4Yz3mf/DzLEMxlpIPZpZlCzaFk4V4NGFofQXPc41+GpEcZtWP3VuFWVA==", + "dependencies": { + "hast-util-to-string": "^1.0.4", + "refractor": "^3.3.1", + "unist-util-visit": "^2.0.3" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@hashicorp/react-docs-page/node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, + "node_modules/@hashicorp/react-docs-page/node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "engines": { + "node": ">= 12" + } + }, "node_modules/@hashicorp/react-docs-page/node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -2216,6 +2332,52 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/@hashicorp/react-docs-page/node_modules/katex": { + "version": "0.13.24", + "resolved": "https://registry.npmjs.org/katex/-/katex-0.13.24.tgz", + "integrity": "sha512-jZxYuKCma3VS5UuxOx/rFV1QyGSl3Uy/i0kTJF3HgQ5xMinCQVF8Zd4bMY/9aI9b9A2pjIBOsjSSm68ykTAr8w==", + "funding": [ + "https://opencollective.com/katex", + "https://github.com/sponsors/katex" + ], + "dependencies": { + "commander": "^8.0.0" + }, + "bin": { + "katex": "cli.js" + } + }, + "node_modules/@hashicorp/react-docs-page/node_modules/mdast-util-definitions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-3.0.1.tgz", + "integrity": "sha512-BAv2iUm/e6IK/b2/t+Fx69EL/AGcq/IG2S+HxHjDJGfLJtd6i9SZUS76aC9cig+IEucsqxKTR0ot3m933R3iuA==", + "dependencies": { + "unist-util-visit": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@hashicorp/react-docs-page/node_modules/mdast-util-to-hast": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-9.1.2.tgz", + "integrity": "sha512-OpkFLBC2VnNAb2FNKcKWu9FMbJhQKog+FCT8nuKmQNIKXyT1n3SIskE7uWDep6x+cA20QXlK5AETHQtYmQmxtQ==", + "dependencies": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "mdast-util-definitions": "^3.0.0", + "mdurl": "^1.0.0", + "unist-builder": "^2.0.0", + "unist-util-generated": "^1.0.0", + "unist-util-position": "^3.0.0", + "unist-util-visit": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/@hashicorp/react-docs-page/node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -2227,10 +2389,39 @@ "node": ">=8.10.0" } }, + "node_modules/@hashicorp/react-docs-page/node_modules/rehype-katex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/rehype-katex/-/rehype-katex-5.0.0.tgz", + "integrity": "sha512-ksSuEKCql/IiIadOHiKRMjypva9BLhuwQNascMqaoGLDVd0k2NlE2wMvgZ3rpItzRKCd6vs8s7MFbb8pcR0AEg==", + "dependencies": { + "@types/katex": "^0.11.0", + "hast-util-to-text": "^2.0.0", + "katex": "^0.13.0", + "rehype-parse": "^7.0.0", + "unified": "^9.0.0", + "unist-util-visit": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@hashicorp/react-docs-page/node_modules/remark-rehype": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-7.0.0.tgz", + "integrity": "sha512-uqQ/VbaTdxyu/da6npHAso6hA00cMqhA3a59RziQdOLN2KEIkPykAVy52IcmZEVTuauXO0VtpxkyCey4phtHzQ==", + "dependencies": { + "mdast-util-to-hast": "^9.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/@hashicorp/react-docs-sidenav": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/@hashicorp/react-docs-sidenav/-/react-docs-sidenav-8.4.0.tgz", - "integrity": "sha512-r2yFLuAD4+9RbPvBzWwcv7b9wrk1MooUJJMdLFP6WUUPYxt3r0Jju6/y4CubVUwtDnNCe3iqo3KoRmWrfNSS0Q==", + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/@hashicorp/react-docs-sidenav/-/react-docs-sidenav-8.4.1.tgz", + "integrity": "sha512-X7J19jCrcYiZEa7/ApMn6R5LFmDymJC1/sHSXpaMcXDIW5DD+H0DRYwJKVUPgdJDWhjZ5PXXWeDJTOKcQWBNog==", "dependencies": { "@hashicorp/platform-product-meta": "^0.1.0", "@hashicorp/react-link-wrap": "^3.0.3", @@ -2356,9 +2547,9 @@ } }, "node_modules/@hashicorp/react-product-downloads-page": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/@hashicorp/react-product-downloads-page/-/react-product-downloads-page-2.5.3.tgz", - "integrity": "sha512-SY3sEM/xYZDbd7XSDaqkT4L+DVRdGJYPpF/0WRDHfR0PObf2zE+iqRjm2APaIACg32sAM1NIZPuc+oQv6vKq5A==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/@hashicorp/react-product-downloads-page/-/react-product-downloads-page-2.7.0.tgz", + "integrity": "sha512-GAw+Ztq4Cr/GJ5kyL3HvpLzs2wtpTFrs0FGDp6TRXjAVgqgfqrQU3cJzthtwkvKAZBmgGmubpQf84bhtfgtvLA==", "dependencies": { "@hashicorp/platform-product-meta": "^0.1.0", "@hashicorp/react-button": "^6.0.0", @@ -2386,32 +2577,6 @@ "react": ">=16.x" } }, - "node_modules/@hashicorp/react-product-downloads-page/node_modules/@reach/portal": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/@reach/portal/-/portal-0.16.0.tgz", - "integrity": "sha512-vXJ0O9T+72HiSEWHPs2cx7YbSO7pQsTMhgqPc5aaddIYpo2clJx1PnYuS0lSNlVaDO0IxQhwYq43evXaXnmviw==", - "dependencies": { - "@reach/utils": "0.16.0", - "tslib": "^2.3.0" - }, - "peerDependencies": { - "react": "^16.8.0 || 17.x", - "react-dom": "^16.8.0 || 17.x" - } - }, - "node_modules/@hashicorp/react-product-downloads-page/node_modules/@reach/utils": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/@reach/utils/-/utils-0.16.0.tgz", - "integrity": "sha512-PCggBet3qaQmwFNcmQ/GqHSefadAFyNCUekq9RrWoaU9hh/S4iaFgf2MBMdM47eQj5i/Bk0Mm07cP/XPFlkN+Q==", - "dependencies": { - "tiny-warning": "^1.0.3", - "tslib": "^2.3.0" - }, - "peerDependencies": { - "react": "^16.8.0 || 17.x", - "react-dom": "^16.8.0 || 17.x" - } - }, "node_modules/@hashicorp/react-product-features-list": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/@hashicorp/react-product-features-list/-/react-product-features-list-5.0.0.tgz", @@ -2427,19 +2592,19 @@ } }, "node_modules/@hashicorp/react-search": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/@hashicorp/react-search/-/react-search-6.1.1.tgz", - "integrity": "sha512-azaXjFP/om+DN6InI/WD+qH9jmLE3/9pqIc2Dp4rYY/tn1KuWyJ5MefvcsbYxIFUVX/wiT2n+8HZFwRfxhdA+w==", + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/@hashicorp/react-search/-/react-search-6.4.1.tgz", + "integrity": "sha512-VoFdfjSCyhmbwNT2nB5+midHjZBy+mO5jXAWAzXbQjTvlBA6NEEgPNXnCLCniOKFouiEVSsn9TnqsWfJt41SqQ==", "dependencies": { - "@hashicorp/react-inline-svg": "^6.0.1", - "@hashicorp/remark-plugins": "^3.1.1", + "@hashicorp/react-inline-svg": "^6.0.3", + "@hashicorp/remark-plugins": "^3.3.1", "@reach/visually-hidden": "^0.16.0", - "algoliasearch": "^4.10.3", + "algoliasearch": "^4.12.0", "classnames": "^2.3.1", - "dotenv": "^10.0.0", - "glob": "^7.1.7", + "dotenv": "^14.3.1", + "glob": "^7.2.0", "gray-matter": "^4.0.3", - "react-instantsearch-dom": "^6.12.1", + "react-instantsearch-dom": "^6.21.1", "remark": "^13.0.0", "search-insights": "^1.7.1", "unist-util-visit": "^2.0.3" @@ -2449,6 +2614,107 @@ "react": ">=16.x" } }, + "node_modules/@hashicorp/react-search/node_modules/@hashicorp/remark-plugins": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@hashicorp/remark-plugins/-/remark-plugins-3.3.1.tgz", + "integrity": "sha512-7xThpsBFWasdC/E+E/BAjHxMYqyCcQFiTVspvhBzN51meiQIacVCnyAox/lyvwWiP4N3Yj/ruH4UsR2ifskNeA==", + "dependencies": { + "@mdx-js/util": "1.6.22", + "github-slugger": "^1.3.0", + "remark": "12.0.1", + "remark-mdx": "1.6.22", + "to-vfile": "^6.1.0", + "unist-util-flatmap": "^1.0.0", + "unist-util-is": "^4.0.2", + "unist-util-map": "^2.0.1", + "unist-util-visit": "^2.0.3" + } + }, + "node_modules/@hashicorp/react-search/node_modules/@hashicorp/remark-plugins/node_modules/remark": { + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/remark/-/remark-12.0.1.tgz", + "integrity": "sha512-gS7HDonkdIaHmmP/+shCPejCEEW+liMp/t/QwmF0Xt47Rpuhl32lLtDV1uKWvGoq+kxr5jSgg5oAIpGuyULjUw==", + "dependencies": { + "remark-parse": "^8.0.0", + "remark-stringify": "^8.0.0", + "unified": "^9.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@hashicorp/react-search/node_modules/@hashicorp/remark-plugins/node_modules/remark-parse": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-8.0.3.tgz", + "integrity": "sha512-E1K9+QLGgggHxCQtLt++uXltxEprmWzNfg+MxpfHsZlrddKzZ/hZyWHDbK3/Ap8HJQqYJRXP+jHczdL6q6i85Q==", + "dependencies": { + "ccount": "^1.0.0", + "collapse-white-space": "^1.0.2", + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-whitespace-character": "^1.0.0", + "is-word-character": "^1.0.0", + "markdown-escapes": "^1.0.0", + "parse-entities": "^2.0.0", + "repeat-string": "^1.5.4", + "state-toggle": "^1.0.0", + "trim": "0.0.1", + "trim-trailing-lines": "^1.0.0", + "unherit": "^1.0.4", + "unist-util-remove-position": "^2.0.0", + "vfile-location": "^3.0.0", + "xtend": "^4.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@hashicorp/react-search/node_modules/@hashicorp/remark-plugins/node_modules/remark-stringify": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-8.1.1.tgz", + "integrity": "sha512-q4EyPZT3PcA3Eq7vPpT6bIdokXzFGp9i85igjmhRyXWmPs0Y6/d2FYwUNotKAWyLch7g0ASZJn/KHHcHZQ163A==", + "dependencies": { + "ccount": "^1.0.0", + "is-alphanumeric": "^1.0.0", + "is-decimal": "^1.0.0", + "is-whitespace-character": "^1.0.0", + "longest-streak": "^2.0.1", + "markdown-escapes": "^1.0.0", + "markdown-table": "^2.0.0", + "mdast-util-compact": "^2.0.0", + "parse-entities": "^2.0.0", + "repeat-string": "^1.5.4", + "state-toggle": "^1.0.0", + "stringify-entities": "^3.0.0", + "unherit": "^1.0.4", + "xtend": "^4.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@hashicorp/react-search/node_modules/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/@hashicorp/react-search/node_modules/remark": { "version": "13.0.0", "resolved": "https://registry.npmjs.org/remark/-/remark-13.0.0.tgz", @@ -2488,11 +2754,11 @@ } }, "node_modules/@hashicorp/react-select-input": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@hashicorp/react-select-input/-/react-select-input-4.0.3.tgz", - "integrity": "sha512-HN7uy2acXOCNE2cz844da0V8JHesnCLjKXis7/n+PB9O6wLfSYblWYPoPLEPx83Ph0dQfAtUT8dsJ9v6S2TSiw==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@hashicorp/react-select-input/-/react-select-input-4.0.5.tgz", + "integrity": "sha512-iN7iq7HZTQh3sa3LViuXbS84Si5hL6eWOqXd4DHfWYcZuuwping88l8SwwPWtqr+HVDcFsRixpVuvOCwgQSX0Q==", "dependencies": { - "classnames": "^2.2.6", + "classnames": "^2.3.1", "downshift": "3.1.5" }, "peerDependencies": { @@ -2592,9 +2858,9 @@ } }, "node_modules/@hashicorp/react-version-select": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@hashicorp/react-version-select/-/react-version-select-0.2.1.tgz", - "integrity": "sha512-E7BW4FotIYq1S5d/GrUPH2NvXmzYmeNpM01wNThDEbes47RfT8nzN3dg64QOUdCvWoUcUaOlGMQHNychBTif2g==", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@hashicorp/react-version-select/-/react-version-select-0.3.0.tgz", + "integrity": "sha512-wd708z+ftdUkK+jKBLFHdHE3U4a0g37LTOxH9X68LzFDWPUT9gTAI5dPEfT0Os/DeJxWcRvUoaS8Fbtd7SQPmg==", "dependencies": { "@hashicorp/react-select-input": ">=4.x" }, @@ -2633,6 +2899,26 @@ "unist-util-visit": "^2.0.3" } }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.3.tgz", + "integrity": "sha512-3xSMlXHh03hCcCmFc0rbKp3Ivt2PFEJnQUJDDMTJQ2wkECZWdq4GePs2ctc5H8zV+cHPaq8k2vU8mrQjA6iHdQ==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, "node_modules/@jest/types": { "version": "26.6.2", "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", @@ -2776,9 +3062,9 @@ "integrity": "sha512-5+vaeooJuWmICSlmVaAC8KG3O8hwKasACVfkHj58xQuCB5SW0TKW3hWxgxkBuefMBn1nM0yEVPKokXCsYjBtng==" }, "node_modules/@next/eslint-plugin-next": { - "version": "11.1.2", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-11.1.2.tgz", - "integrity": "sha512-cN+ojHRsufr9Yz0rtvjv8WI5En0RPZRJnt0y16Ha7DD+0n473evz8i1ETEJHmOLeR7iPJR0zxRrxeTN/bJMOjg==", + "version": "12.0.10", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-12.0.10.tgz", + "integrity": "sha512-PbGRnV5HGSfRGLjf8uTh1MaWgLwnjKjWiGVjK752ifITJbZ28/5AmLAFT2shDYeux8BHgpgVll5QXu7GN3YLFw==", "dev": true, "dependencies": { "glob": "7.1.7" @@ -2868,13 +3154,9 @@ "version": "11.1.3", "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-11.1.3.tgz", "integrity": "sha512-TwP4krjhs+uU9pesDYCShEXZrLSbJr78p12e7XnLBBaNf20SgWLlVmQUT9gX9KbWan5V0sUbJfmcS8MRNHgYuA==", - "cpu": [ - "arm64" - ], + "cpu": ["arm64"], "optional": true, - "os": [ - "darwin" - ], + "os": ["darwin"], "engines": { "node": ">= 10" } @@ -2883,13 +3165,9 @@ "version": "11.1.3", "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-11.1.3.tgz", "integrity": "sha512-ZSWmkg/PxccHFNUSeBdrfaH8KwSkoeUtewXKvuYYt7Ph0yRsbqSyNIvhUezDua96lApiXXq6EL2d1THfeWomvw==", - "cpu": [ - "x64" - ], + "cpu": ["x64"], "optional": true, - "os": [ - "darwin" - ], + "os": ["darwin"], "engines": { "node": ">= 10" } @@ -2898,13 +3176,9 @@ "version": "11.1.3", "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-11.1.3.tgz", "integrity": "sha512-PrTBN0iZudAuj4jSbtXcdBdmfpaDCPIneG4Oms4zcs93KwMgLhivYW082Mvlgx9QVEiRm7+RkFpIVtG/i7JitA==", - "cpu": [ - "x64" - ], + "cpu": ["x64"], "optional": true, - "os": [ - "linux" - ], + "os": ["linux"], "engines": { "node": ">= 10" } @@ -2913,13 +3187,9 @@ "version": "11.1.3", "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-11.1.3.tgz", "integrity": "sha512-mRwbscVjRoHk+tDY7XbkT5d9FCwujFIQJpGp0XNb1i5OHCSDO8WW/C9cLEWS4LxKRbIZlTLYg1MTXqLQkvva8w==", - "cpu": [ - "x64" - ], + "cpu": ["x64"], "optional": true, - "os": [ - "win32" - ], + "os": ["win32"], "engines": { "node": ">= 10" } @@ -2965,12 +3235,12 @@ } }, "node_modules/@reach/auto-id": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@reach/auto-id/-/auto-id-0.15.0.tgz", - "integrity": "sha512-iACaCcZeqAhDf4OOwJpmHHS/LaRj9z3Ip8JmlhpCrFWV2YOIiiZk42amlBZX6CKH66Md+eriYZQk3TyAjk6Oxg==", + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/@reach/auto-id/-/auto-id-0.16.0.tgz", + "integrity": "sha512-5ssbeP5bCkM39uVsfQCwBBL+KT8YColdnMN5/Eto6Rj7929ql95R3HZUOkKIvj7mgPtEb60BLQxd1P3o6cjbmg==", "dependencies": { - "@reach/utils": "0.15.0", - "tslib": "^2.1.0" + "@reach/utils": "0.16.0", + "tslib": "^2.3.0" }, "peerDependencies": { "react": "^16.8.0 || 17.x", @@ -2978,12 +3248,12 @@ } }, "node_modules/@reach/descendants": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@reach/descendants/-/descendants-0.15.0.tgz", - "integrity": "sha512-MGs+7sGjx07sm29Wc2d/Ya72qwatNVHofnYwwHMT6LImv99kE5TQMCgkMSDeRwqQxHURmcjb4I7Tab+ahvCGiw==", + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@reach/descendants/-/descendants-0.16.1.tgz", + "integrity": "sha512-3WZgRnD9O4EORKE31rrduJDiPFNMOjUkATx0zl192ZxMq3qITe4tUj70pS5IbJl/+v9zk78JwyQLvA1pL7XAPA==", "dependencies": { - "@reach/utils": "0.15.0", - "tslib": "^2.1.0" + "@reach/utils": "0.16.0", + "tslib": "^2.3.0" }, "peerDependencies": { "react": "^16.8.0 || 17.x", @@ -2991,15 +3261,15 @@ } }, "node_modules/@reach/listbox": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@reach/listbox/-/listbox-0.15.0.tgz", - "integrity": "sha512-3Vvpte0HQkfo3sT4Cz6gG9h+E/La2IwbtLQDTesEmDzToQ8bk9rOfuFDVp7IXUyOdDggfDCOEz/ZphsuniADWA==", + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/@reach/listbox/-/listbox-0.16.2.tgz", + "integrity": "sha512-UBotBw7X8e2ajHn6tg1M9ArinisvSvwtu/aP3edEQKCvobd95nAa+dqnfAdihPAQFH2AQ2NFfa/73yawWV3LOQ==", "dependencies": { - "@reach/auto-id": "0.15.0", - "@reach/descendants": "0.15.0", - "@reach/machine": "0.15.0", - "@reach/popover": "0.15.0", - "@reach/utils": "0.15.0", + "@reach/auto-id": "0.16.0", + "@reach/descendants": "0.16.1", + "@reach/machine": "0.16.0", + "@reach/popover": "0.16.2", + "@reach/utils": "0.16.0", "prop-types": "^15.7.2" }, "peerDependencies": { @@ -3008,13 +3278,13 @@ } }, "node_modules/@reach/machine": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@reach/machine/-/machine-0.15.0.tgz", - "integrity": "sha512-o3vvqsTQyj7apxpbSuIn4xKYlqNagcjhlMnroJ2uqgJfFwy1tLrsQo4Sr8GnZu4hitPbNAfqGExYjV8ZV8SHpA==", + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/@reach/machine/-/machine-0.16.0.tgz", + "integrity": "sha512-c8SRQz2xGtg5M9aXuuM5pFgaV1ZW5/nyMIYpZzBwHUlNFKGO+VBhwedbnqUxO0yLcbgl3wPvjPh740O3YjqiHg==", "dependencies": { - "@reach/utils": "0.15.0", + "@reach/utils": "0.16.0", "@xstate/fsm": "1.4.0", - "tslib": "^2.1.0" + "tslib": "^2.3.0" }, "peerDependencies": { "react": "^16.8.0 || 17.x", @@ -3027,15 +3297,15 @@ "integrity": "sha512-Ba7HmkFgfQxZqqaeIWWkNK0rEhpxVQHIoVyW1YDSkGsGIXzcaW4deC8B0pZrNSSyLTdIk7y+5olKt5+g0GmFIQ==" }, "node_modules/@reach/popover": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@reach/popover/-/popover-0.15.0.tgz", - "integrity": "sha512-nBR6ZlULF7ZZIqkN47QEWmdqUX2Zd6FSeYJku1il9OkiMnWzI3aTOyu1B+IJfYeIqg28D/aeF4ff0oVu1VUrqQ==", + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/@reach/popover/-/popover-0.16.2.tgz", + "integrity": "sha512-IwkRrHM7Vt33BEkSXneovymJv7oIToOfTDwRKpuYEB/BWYMAuNfbsRL7KVe6MjkgchDeQzAk24cYY1ztQj5HQQ==", "dependencies": { - "@reach/portal": "0.15.0", - "@reach/rect": "0.15.0", - "@reach/utils": "0.15.0", + "@reach/portal": "0.16.2", + "@reach/rect": "0.16.0", + "@reach/utils": "0.16.0", "tabbable": "^4.0.0", - "tslib": "^2.1.0" + "tslib": "^2.3.0" }, "peerDependencies": { "react": "^16.8.0 || 17.x", @@ -3043,12 +3313,13 @@ } }, "node_modules/@reach/portal": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@reach/portal/-/portal-0.15.0.tgz", - "integrity": "sha512-Aulqjk/PIRu+R7yhINYAAYfYh++ZdC30qwHDWDtGk2cmTEJT7m9AlvBX+W7T+Q3Ux6Wy5f37eV+TTGid1CcjFw==", + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/@reach/portal/-/portal-0.16.2.tgz", + "integrity": "sha512-9ur/yxNkuVYTIjAcfi46LdKUvH0uYZPfEp4usWcpt6PIp+WDF57F/5deMe/uGi/B/nfDweQu8VVwuMVrCb97JQ==", "dependencies": { - "@reach/utils": "0.15.0", - "tslib": "^2.1.0" + "@reach/utils": "0.16.0", + "tiny-warning": "^1.0.3", + "tslib": "^2.3.0" }, "peerDependencies": { "react": "^16.8.0 || 17.x", @@ -3056,15 +3327,15 @@ } }, "node_modules/@reach/rect": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@reach/rect/-/rect-0.15.0.tgz", - "integrity": "sha512-Nu0zG4Xq8Z0C3Yr3wbjtj7fvII1q2KopHDStNtmL26oWPzlaZJ9A1K6rZSPIqxKkx1hvl6AUTeom7eHTIKhHjA==", + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/@reach/rect/-/rect-0.16.0.tgz", + "integrity": "sha512-/qO9jQDzpOCdrSxVPR6l674mRHNTqfEjkaxZHluwJ/2qGUtYsA0GSZiF/+wX/yOWeBif1ycxJDa6HusAMJZC5Q==", "dependencies": { "@reach/observe-rect": "1.2.0", - "@reach/utils": "0.15.0", + "@reach/utils": "0.16.0", "prop-types": "^15.7.2", "tiny-warning": "^1.0.3", - "tslib": "^2.1.0" + "tslib": "^2.3.0" }, "peerDependencies": { "react": "^16.8.0 || 17.x", @@ -3072,12 +3343,12 @@ } }, "node_modules/@reach/tooltip": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/@reach/tooltip/-/tooltip-0.16.0.tgz", - "integrity": "sha512-kZr/OqfmmBQVBxJh+OQRCq++T5f6iQaWinpLnwD5FlG5HRKPwNzTnsy+hpyY9pR2mabk+96POp/TsT4Dv3K/qQ==", + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/@reach/tooltip/-/tooltip-0.16.2.tgz", + "integrity": "sha512-wtJPnbJ6l4pmudMpQHGU9v1NS4ncDgcwRNi9re9KsIdsM525zccZvHQLteBKYiaW4ib7k09t2dbwhyNU9oa0Iw==", "dependencies": { "@reach/auto-id": "0.16.0", - "@reach/portal": "0.16.0", + "@reach/portal": "0.16.2", "@reach/rect": "0.16.0", "@reach/utils": "0.16.0", "@reach/visually-hidden": "0.16.0", @@ -3090,49 +3361,7 @@ "react-dom": "^16.8.0 || 17.x" } }, - "node_modules/@reach/tooltip/node_modules/@reach/auto-id": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/@reach/auto-id/-/auto-id-0.16.0.tgz", - "integrity": "sha512-5ssbeP5bCkM39uVsfQCwBBL+KT8YColdnMN5/Eto6Rj7929ql95R3HZUOkKIvj7mgPtEb60BLQxd1P3o6cjbmg==", - "dependencies": { - "@reach/utils": "0.16.0", - "tslib": "^2.3.0" - }, - "peerDependencies": { - "react": "^16.8.0 || 17.x", - "react-dom": "^16.8.0 || 17.x" - } - }, - "node_modules/@reach/tooltip/node_modules/@reach/portal": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/@reach/portal/-/portal-0.16.0.tgz", - "integrity": "sha512-vXJ0O9T+72HiSEWHPs2cx7YbSO7pQsTMhgqPc5aaddIYpo2clJx1PnYuS0lSNlVaDO0IxQhwYq43evXaXnmviw==", - "dependencies": { - "@reach/utils": "0.16.0", - "tslib": "^2.3.0" - }, - "peerDependencies": { - "react": "^16.8.0 || 17.x", - "react-dom": "^16.8.0 || 17.x" - } - }, - "node_modules/@reach/tooltip/node_modules/@reach/rect": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/@reach/rect/-/rect-0.16.0.tgz", - "integrity": "sha512-/qO9jQDzpOCdrSxVPR6l674mRHNTqfEjkaxZHluwJ/2qGUtYsA0GSZiF/+wX/yOWeBif1ycxJDa6HusAMJZC5Q==", - "dependencies": { - "@reach/observe-rect": "1.2.0", - "@reach/utils": "0.16.0", - "prop-types": "^15.7.2", - "tiny-warning": "^1.0.3", - "tslib": "^2.3.0" - }, - "peerDependencies": { - "react": "^16.8.0 || 17.x", - "react-dom": "^16.8.0 || 17.x" - } - }, - "node_modules/@reach/tooltip/node_modules/@reach/utils": { + "node_modules/@reach/utils": { "version": "0.16.0", "resolved": "https://registry.npmjs.org/@reach/utils/-/utils-0.16.0.tgz", "integrity": "sha512-PCggBet3qaQmwFNcmQ/GqHSefadAFyNCUekq9RrWoaU9hh/S4iaFgf2MBMdM47eQj5i/Bk0Mm07cP/XPFlkN+Q==", @@ -3145,19 +3374,6 @@ "react-dom": "^16.8.0 || 17.x" } }, - "node_modules/@reach/utils": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@reach/utils/-/utils-0.15.0.tgz", - "integrity": "sha512-JHHN7T5ucFiuQbqkgv8ECbRWKfRiJxrO/xHR3fHf+f2C7mVs/KkJHhYtovS1iEapR4silygX9PY0+QUmHPOTYw==", - "dependencies": { - "tiny-warning": "^1.0.3", - "tslib": "^2.1.0" - }, - "peerDependencies": { - "react": "^16.8.0 || 17.x", - "react-dom": "^16.8.0 || 17.x" - } - }, "node_modules/@reach/visually-hidden": { "version": "0.16.0", "resolved": "https://registry.npmjs.org/@reach/visually-hidden/-/visually-hidden-0.16.0.tgz", @@ -3172,9 +3388,9 @@ } }, "node_modules/@rushstack/eslint-patch": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.0.7.tgz", - "integrity": "sha512-3Zi2LGbCLDz4IIL7ir6wD0u/ggHotLkK5SlVzFzTcYaNgPR4MAt/9JYZqXWKcofPWEoptfpnCJU8Bq9sxw8QUg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.1.0.tgz", + "integrity": "sha512-JLo+Y592QzIE+q7Dl2pMUtt4q8SKYI5jDrZxrozEQxnGVOyYE+GWK9eLkwTaeN9DDctlaRAQ3TBmzZ1qdLE30A==", "dev": true }, "node_modules/@segment/in-eu": { @@ -3258,6 +3474,30 @@ "react-dom": ">=16.8" } }, + "node_modules/@tsconfig/node10": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz", + "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==", + "dev": true + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz", + "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==", + "dev": true + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz", + "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==", + "dev": true + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz", + "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==", + "dev": true + }, "node_modules/@types/hast": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.1.tgz", @@ -3291,9 +3531,9 @@ } }, "node_modules/@types/json-schema": { - "version": "7.0.8", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.8.tgz", - "integrity": "sha512-YSBPTLTVm2e2OoQIDYx8HaeWJ5tTToLH67kXR7zYNGupXMEHa2++G8k+DczX2cFVgalypqtyZIcU19AFcmOpmg==" + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", + "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==" }, "node_modules/@types/json5": { "version": "0.0.29", @@ -3487,6 +3727,49 @@ "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@typescript-eslint/type-utils": { + "version": "5.10.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.10.2.tgz", + "integrity": "sha512-uRKSvw/Ccs5FYEoXW04Z5VfzF2iiZcx8Fu7DGIB7RHozuP0VbKNzP1KfZkHBTM75pCpsWxIthEH1B33dmGBKHw==", + "dev": true, + "dependencies": { + "@typescript-eslint/utils": "5.10.2", + "debug": "^4.3.2", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/type-utils/node_modules/debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, "node_modules/@typescript-eslint/types": { "version": "4.9.1", "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.9.1.tgz", @@ -3526,6 +3809,168 @@ } } }, + "node_modules/@typescript-eslint/utils": { + "version": "5.10.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.10.2.tgz", + "integrity": "sha512-vuJaBeig1NnBRkf7q9tgMLREiYD7zsMrsN1DA3wcoMDvr3BTFiIpKjGiYZoKPllfEwN7spUjv7ZqD+JhbVjEPg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "@typescript-eslint/scope-manager": "5.10.2", + "@typescript-eslint/types": "5.10.2", + "@typescript-eslint/typescript-estree": "5.10.2", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/scope-manager": { + "version": "5.10.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.10.2.tgz", + "integrity": "sha512-39Tm6f4RoZoVUWBYr3ekS75TYgpr5Y+X0xLZxXqcZNDWZdJdYbKd3q2IR4V9y5NxxiPu/jxJ8XP7EgHiEQtFnw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.10.2", + "@typescript-eslint/visitor-keys": "5.10.2" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/types": { + "version": "5.10.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.10.2.tgz", + "integrity": "sha512-Qfp0qk/5j2Rz3p3/WhWgu4S1JtMcPgFLnmAKAW061uXxKSa7VWKZsDXVaMXh2N60CX9h6YLaBoy9PJAfCOjk3w==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/typescript-estree": { + "version": "5.10.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.10.2.tgz", + "integrity": "sha512-WHHw6a9vvZls6JkTgGljwCsMkv8wu8XU8WaYKeYhxhWXH/atZeiMW6uDFPLZOvzNOGmuSMvHtZKd6AuC8PrwKQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.10.2", + "@typescript-eslint/visitor-keys": "5.10.2", + "debug": "^4.3.2", + "globby": "^11.0.4", + "is-glob": "^4.0.3", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/visitor-keys": { + "version": "5.10.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.10.2.tgz", + "integrity": "sha512-zHIhYGGGrFJvvyfwHk5M08C5B5K4bewkm+rrvNTKk1/S15YHR+SA/QUF8ZWscXSfEaB8Nn2puZj+iHcoxVOD/Q==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.10.2", + "eslint-visitor-keys": "^3.0.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.2.0.tgz", + "integrity": "sha512-IOzT0X126zn7ALX0dwFiUQEdsfzrm4+ISsQS8nukaJXwEyYKRSnEIIDULYg1mCtGp7UUXgfGl7BIolXREQK+XQ==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/utils/node_modules/eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "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/@typescript-eslint/visitor-keys": { "version": "4.9.1", "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.9.1.tgz", @@ -3646,45 +4091,37 @@ } }, "node_modules/algoliasearch": { - "version": "4.10.5", - "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.10.5.tgz", - "integrity": "sha512-KmH2XkiN+8FxhND4nWFbQDkIoU6g2OjfeU9kIv4Lb+EiOOs3Gpp7jvd+JnatsCisAZsnWQdjd7zVlW7I/85QvQ==", - "dependencies": { - "@algolia/cache-browser-local-storage": "4.10.5", - "@algolia/cache-common": "4.10.5", - "@algolia/cache-in-memory": "4.10.5", - "@algolia/client-account": "4.10.5", - "@algolia/client-analytics": "4.10.5", - "@algolia/client-common": "4.10.5", - "@algolia/client-personalization": "4.10.5", - "@algolia/client-search": "4.10.5", - "@algolia/logger-common": "4.10.5", - "@algolia/logger-console": "4.10.5", - "@algolia/requester-browser-xhr": "4.10.5", - "@algolia/requester-common": "4.10.5", - "@algolia/requester-node-http": "4.10.5", - "@algolia/transporter": "4.10.5" + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.12.1.tgz", + "integrity": "sha512-c0dM1g3zZBJrkzE5GA/Nu1y3fFxx3LCzxKzcmp2dgGS8P4CjszB/l3lsSh2MSrrK1Hn/KV4BlbBMXtYgG1Bfrw==", + "dependencies": { + "@algolia/cache-browser-local-storage": "4.12.1", + "@algolia/cache-common": "4.12.1", + "@algolia/cache-in-memory": "4.12.1", + "@algolia/client-account": "4.12.1", + "@algolia/client-analytics": "4.12.1", + "@algolia/client-common": "4.12.1", + "@algolia/client-personalization": "4.12.1", + "@algolia/client-search": "4.12.1", + "@algolia/logger-common": "4.12.1", + "@algolia/logger-console": "4.12.1", + "@algolia/requester-browser-xhr": "4.12.1", + "@algolia/requester-common": "4.12.1", + "@algolia/requester-node-http": "4.12.1", + "@algolia/transporter": "4.12.1" } }, "node_modules/algoliasearch-helper": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.6.0.tgz", - "integrity": "sha512-F4Smiq+Vyv/JJytuKNFuzXndPSb4pjtiHZSkEztQCcB+SORu71A8grgt2NSJhbB5VhqHW19QDtlPKbdYdcNrLg==", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.7.0.tgz", + "integrity": "sha512-XJ3QfERBLfeVCyTVx80gon7r3/rgm/CE8Ha1H7cbablRe/X7SfYQ14g/eO+MhjVKIQp+gy9oC6G5ilmLwS1k6w==", "dependencies": { - "events": "^1.1.1" + "@algolia/events": "^4.0.1" }, "peerDependencies": { "algoliasearch": ">= 3.1 < 5" } }, - "node_modules/algoliasearch-helper/node_modules/events": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", - "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", - "engines": { - "node": ">=0.4.x" - } - }, "node_modules/anser": { "version": "1.4.9", "resolved": "https://registry.npmjs.org/anser/-/anser-1.4.9.tgz", @@ -3795,6 +4232,12 @@ "node": ">=4" } }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, "node_modules/argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -3853,15 +4296,15 @@ "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" }, "node_modules/array-includes": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.3.tgz", - "integrity": "sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.4.tgz", + "integrity": "sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", + "es-abstract": "^1.19.1", "get-intrinsic": "^1.1.1", - "is-string": "^1.0.5" + "is-string": "^1.0.7" }, "engines": { "node": ">= 0.4" @@ -3895,14 +4338,14 @@ } }, "node_modules/array.prototype.flat": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz", - "integrity": "sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz", + "integrity": "sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg==", "dev": true, "dependencies": { - "call-bind": "^1.0.0", + "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1" + "es-abstract": "^1.19.0" }, "engines": { "node": ">= 0.4" @@ -3912,14 +4355,13 @@ } }, "node_modules/array.prototype.flatmap": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz", - "integrity": "sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.5.tgz", + "integrity": "sha512-08u6rVyi1Lj7oqWbS9nUxliETrtIROT4XGTA4D/LWGten6E3ocm7cy9SIrmNHOL5XVbVuckUp3X6Xyg8/zpvHA==", "dependencies": { "call-bind": "^1.0.0", "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1", - "function-bind": "^1.1.1" + "es-abstract": "^1.19.0" }, "engines": { "node": ">= 0.4" @@ -4151,9 +4593,9 @@ } }, "node_modules/axe-core": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.3.1.tgz", - "integrity": "sha512-3WVgVPs/7OnKU3s+lqMtkv3wQlg3WxK1YifmpJSDO0E1aPBrZWlrrTO6cxRqCXLuX2aYgCljqXIQd0VnRidV0g==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.4.0.tgz", + "integrity": "sha512-btWy2rze3NnxSSxb7LtNhPYYFrRoFBfjiGzmSc/5Hu47wApO2KNXjP/w7Nv2Uz/Fyr/pfEiwOkcXhDxu0jz5FA==", "engines": { "node": ">=4" } @@ -5921,6 +6363,12 @@ "sha.js": "^2.4.8" } }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, "node_modules/cross-fetch": { "version": "3.1.4", "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.4.tgz", @@ -6776,6 +7224,15 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, "node_modules/diffie-hellman": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", @@ -6867,11 +7324,11 @@ } }, "node_modules/dotenv": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", - "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", + "version": "14.3.2", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-14.3.2.tgz", + "integrity": "sha512-vwEppIphpFdvaMCaHfCEv9IgwcxMljMw2TnAQBB4VWPvzXQLTb82jwmdOKzlEVUL3gNFT4l4TPKO+Bn+sqcrVQ==", "engines": { - "node": ">=10" + "node": ">=12" } }, "node_modules/download": { @@ -7075,21 +7532,25 @@ } }, "node_modules/es-abstract": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", - "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", + "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", "dependencies": { "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", "has": "^1.0.3", "has-symbols": "^1.0.2", - "is-callable": "^1.2.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.3", - "is-string": "^1.0.6", - "object-inspect": "^1.10.3", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.1", + "is-string": "^1.0.7", + "is-weakref": "^1.0.1", + "object-inspect": "^1.11.0", "object-keys": "^1.1.1", "object.assign": "^4.1.2", "string.prototype.trimend": "^1.0.4", @@ -7237,14 +7698,34 @@ "ms": "^2.1.1" } }, + "node_modules/eslint-import-resolver-typescript": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.5.0.tgz", + "integrity": "sha512-qZ6e5CFr+I7K4VVhQu3M/9xGv9/YmwsEXrsm3nimw8vWaVHRDrQRp26BgCypTxBp3vUp4o5aVEJRiy0F2DFddQ==", + "dev": true, + "dependencies": { + "debug": "^4.3.1", + "glob": "^7.1.7", + "is-glob": "^4.0.1", + "resolve": "^1.20.0", + "tsconfig-paths": "^3.9.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "*", + "eslint-plugin-import": "*" + } + }, "node_modules/eslint-module-utils": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.2.tgz", - "integrity": "sha512-QG8pcgThYOuqxupd06oYTZoNOGaUdTY1PqK+oS6ElF6vs4pBdk/aYxFVQQXzcrAqp9m7cl7lb2ubazX+g16k2Q==", + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz", + "integrity": "sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==", "dev": true, "dependencies": { "debug": "^3.2.7", - "pkg-dir": "^2.0.0" + "find-up": "^2.1.0" }, "engines": { "node": ">=4" @@ -7326,18 +7807,60 @@ "node": ">=4" } }, - "node_modules/eslint-module-utils/node_modules/pkg-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", - "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "node_modules/eslint-plugin-import": { + "version": "2.25.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.25.4.tgz", + "integrity": "sha512-/KJBASVFxpu0xg1kIBn9AUa8hQVnszpwgE7Ld0lKAlx7Ie87yzEzCgSkekt+le/YVhiaosO4Y14GDAOc41nfxA==", "dev": true, "dependencies": { - "find-up": "^2.1.0" + "array-includes": "^3.1.4", + "array.prototype.flat": "^1.2.5", + "debug": "^2.6.9", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-module-utils": "^2.7.2", + "has": "^1.0.3", + "is-core-module": "^2.8.0", + "is-glob": "^4.0.3", + "minimatch": "^3.0.4", + "object.values": "^1.1.5", + "resolve": "^1.20.0", + "tsconfig-paths": "^3.12.0" }, "engines": { "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" } }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, "node_modules/eslint-plugin-jsx-a11y": { "version": "6.4.1", "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.4.1.tgz", @@ -7411,6 +7934,18 @@ "eslint": "^3 || ^4 || ^5 || ^6 || ^7" } }, + "node_modules/eslint-plugin-react-hooks": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.3.0.tgz", + "integrity": "sha512-XslZy0LnMn+84NEG9jSGR6eGqaZB3133L8xewQo3fQagbQuGt7a63gf+P1NGKZavEYEC3UXaWEAA/AqDkuN6xA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + } + }, "node_modules/eslint-plugin-react/node_modules/doctrine": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", @@ -8040,14 +8575,14 @@ "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==" }, "node_modules/fast-equals": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-2.0.3.tgz", - "integrity": "sha512-0EMw4TTUxsMDpDkCg0rXor2gsg+npVrMIHbEhvD0HZyIhUX6AktC/yasm+qKwfyswd06Qy95ZKk8p2crTo0iPA==" + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-2.0.4.tgz", + "integrity": "sha512-caj/ZmjHljPrZtbzJ3kfH5ia/k4mTJe/qSiXAGzxZWRZgsgDV0cvNaQULqUX8t0/JVlzzEdYOwCN5DmzTxoD4w==" }, "node_modules/fast-glob": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", - "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -8056,7 +8591,7 @@ "micromatch": "^4.0.4" }, "engines": { - "node": ">=8" + "node": ">=8.6.0" } }, "node_modules/fast-json-stable-stringify": { @@ -8415,9 +8950,7 @@ "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "hasInstallScript": true, "optional": true, - "os": [ - "darwin" - ], + "os": ["darwin"], "engines": { "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } @@ -8504,6 +9037,21 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/get-value": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", @@ -8812,6 +9360,20 @@ "node": "*" } }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/has-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", @@ -9269,9 +9831,9 @@ ] }, "node_modules/ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", "engines": { "node": ">= 4" } @@ -9946,9 +10508,9 @@ } }, "node_modules/is-callable": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", - "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", "engines": { "node": ">= 0.4" }, @@ -9969,9 +10531,9 @@ } }, "node_modules/is-core-module": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.7.0.tgz", - "integrity": "sha512-ByY+tjCciCr+9nLryBYcSD50EOGWt95c7tIsKTG1J2ixKKXPvF7Ej3AVd+UfDydAJom3biBGDBALaO79ktwgEQ==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", + "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", "dependencies": { "has": "^1.0.3" }, @@ -10108,9 +10670,9 @@ } }, "node_modules/is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dependencies": { "is-extglob": "^2.1.1" }, @@ -10237,12 +10799,12 @@ } }, "node_modules/is-regex": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", - "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dependencies": { "call-bind": "^1.0.2", - "has-symbols": "^1.0.2" + "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -10267,6 +10829,14 @@ "node": ">=0.10.0" } }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", + "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", @@ -10276,9 +10846,12 @@ } }, "node_modules/is-string": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", - "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, "engines": { "node": ">= 0.4" }, @@ -10364,6 +10937,17 @@ "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-whitespace-character": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz", @@ -10654,11 +11238,11 @@ } }, "node_modules/jsx-ast-utils": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.0.tgz", - "integrity": "sha512-EIsmt3O3ljsU6sot/J4E1zDRxfBNrhjyf/OKjlydwgEimQuznlM4Wv7U+ueONJMyEn1WRE0K8dhi3dVAXYT24Q==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.1.tgz", + "integrity": "sha512-uP5vu8xfy2F9A6LGC22KO7e2/vGTS1MhP+18f++ZNlf0Ohaxbc9nIEwHAsejlJKyzfZzU5UIhe5ItYkitcZnZA==", "dependencies": { - "array-includes": "^3.1.2", + "array-includes": "^3.1.3", "object.assign": "^4.1.2" }, "engines": { @@ -10867,6 +11451,12 @@ "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=" }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, "node_modules/lodash.sortby": { "version": "4.7.0", "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", @@ -12436,27 +13026,26 @@ } }, "node_modules/object.entries": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.4.tgz", - "integrity": "sha512-h4LWKWE+wKQGhtMjZEBud7uLGhqyLwj8fpHOarZhD2uY3C9cRtk57VQ89ke3moByLXMedqs3XCHzyb4AmA2DjA==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz", + "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.18.2" + "es-abstract": "^1.19.1" }, "engines": { "node": ">= 0.4" } }, "node_modules/object.fromentries": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.4.tgz", - "integrity": "sha512-EsFBshs5RUUpQEY1D4q/m59kMfz4YJvxuNCJcv/jWwOJr34EaVnG11ZrZa0UHB3wnzV1wx8m58T4hQL8IuNXlQ==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.5.tgz", + "integrity": "sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "has": "^1.0.3" + "es-abstract": "^1.19.1" }, "engines": { "node": ">= 0.4" @@ -12482,13 +13071,13 @@ } }, "node_modules/object.hasown": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.0.0.tgz", - "integrity": "sha512-qYMF2CLIjxxLGleeM0jrcB4kiv3loGVAjKQKvH8pSU/i2VcRRvUNmxbD+nEMmrXRfORhuVJuH8OtSYCZoue3zA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.0.tgz", + "integrity": "sha512-MhjYRfj3GBlhSkDHo6QmvgjRLXQ2zndabdf3nX0yTyZK9rPfxb6uRpAac8HXNLy1GpqWtZ81Qh4v3uOls2sRAg==", "dev": true, "dependencies": { "define-properties": "^1.1.3", - "es-abstract": "^1.18.1" + "es-abstract": "^1.19.1" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -12514,13 +13103,13 @@ } }, "node_modules/object.values": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.4.tgz", - "integrity": "sha512-TnGo7j4XSnKQoK3MfvkzqKCi0nVe/D9I9IjwTNYdb/fxYHpjrluHVOgw0AF6jrRFGMPHdfuidR09tIDiIvnaSg==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", + "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.18.2" + "es-abstract": "^1.19.1" }, "engines": { "node": ">= 0.4" @@ -13108,85 +13697,6 @@ "node": ">=8" } }, - "node_modules/pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz", - "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=", - "dev": true, - "dependencies": { - "find-up": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/pkg-up/node_modules/find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "dependencies": { - "locate-path": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/pkg-up/node_modules/locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "dependencies": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/pkg-up/node_modules/p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "dependencies": { - "p-try": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/pkg-up/node_modules/p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "dependencies": { - "p-limit": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/pkg-up/node_modules/p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/pkg-up/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/platform": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/platform/-/platform-1.3.6.tgz", @@ -17599,12 +18109,12 @@ "integrity": "sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA==" }, "node_modules/react-instantsearch-core": { - "version": "6.12.1", - "resolved": "https://registry.npmjs.org/react-instantsearch-core/-/react-instantsearch-core-6.12.1.tgz", - "integrity": "sha512-X4OqakDI3DOcFiS1S46z+cciKEQcKBmH8HGQLztzW14hoHRqFfZzuqWydlSxfJZN5WksMMm78EmL2jvoqIHd/A==", + "version": "6.21.1", + "resolved": "https://registry.npmjs.org/react-instantsearch-core/-/react-instantsearch-core-6.21.1.tgz", + "integrity": "sha512-be4+J9sOA2cR+uYi4vGvZGC4u19Rs379UtOzv0JBNSUD8hDSxewhxqovqhJRhMH6y5RKw7EFYQUYp9bHxj01rw==", "dependencies": { "@babel/runtime": "^7.1.2", - "algoliasearch-helper": "^3.5.3", + "algoliasearch-helper": "^3.7.0", "prop-types": "^15.6.2", "react-fast-compare": "^3.0.0" }, @@ -17614,16 +18124,16 @@ } }, "node_modules/react-instantsearch-dom": { - "version": "6.12.1", - "resolved": "https://registry.npmjs.org/react-instantsearch-dom/-/react-instantsearch-dom-6.12.1.tgz", - "integrity": "sha512-KXk2UDmJ3OP9B57owPC0+7fdcVtmYAA6/UWimR9CXhvFGCMi11xlR/wscYMYxdPuxs9IkmnnLDIJSjSGADYnow==", + "version": "6.21.1", + "resolved": "https://registry.npmjs.org/react-instantsearch-dom/-/react-instantsearch-dom-6.21.1.tgz", + "integrity": "sha512-3f7VrKW4L1jnah51UbRitDMcfFIl6FoLSc2JmCF9qND2nbDh/NlZvcT45BPxbCYnK4qNc2HJFx0ipe+zoGbNtA==", "dependencies": { "@babel/runtime": "^7.1.2", - "algoliasearch-helper": "^3.5.3", + "algoliasearch-helper": "^3.7.0", "classnames": "^2.2.5", "prop-types": "^15.6.2", "react-fast-compare": "^3.0.0", - "react-instantsearch-core": "^6.12.1" + "react-instantsearch-core": "6.21.1" }, "peerDependencies": { "react": ">= 16.3.0 < 18", @@ -19190,13 +19700,13 @@ } }, "node_modules/string.prototype.matchall": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.5.tgz", - "integrity": "sha512-Z5ZaXO0svs0M2xd/6By3qpeKpLKd9mO4v4q3oMEQrk8Ck4xOD5d5XeBOOjGrmVZZ/AHB1S0CgG4N5r1G9N3E2Q==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.6.tgz", + "integrity": "sha512-6WgDX8HmQqvEd7J+G6VtAahhsQIssiZ8zl7zKh1VDMFyL3hRTJP4FTNA3RbIp2TOQ9AYNDcc7e3fH0Qbup+DBg==", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.18.2", + "es-abstract": "^1.19.1", "get-intrinsic": "^1.1.1", "has-symbols": "^1.0.2", "internal-slot": "^1.0.3", @@ -20804,6 +21314,68 @@ "node": ">=10" } }, + "node_modules/ts-node": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.4.0.tgz", + "integrity": "sha512-g0FlPvvCXSIO1JDF6S232P5jPYqBkRL9qly81ZgAOSU7rwI0stphCgd2kLiCrU9DjQCrJMWEqcNSjQL02s6d8A==", + "dev": true, + "dependencies": { + "@cspotcode/source-map-support": "0.7.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/ts-node/node_modules/acorn": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", + "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ts-node/node_modules/acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/ts-pnp": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.2.0.tgz", @@ -20818,9 +21390,9 @@ } }, "node_modules/tsconfig-paths": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.11.0.tgz", - "integrity": "sha512-7ecdYDnIdmv639mmDwslG6KQg1Z9STTz1j7Gcz0xa+nshh/gKDAHcPxRbWOsA3SPp0tXP2leTcY9Kw+NAkfZzA==", + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.12.0.tgz", + "integrity": "sha512-e5adrnOYT6zqVnWqZu7i/BQ3BnhzvGbjEjejFXO20lKIKpwTaupkCPgEfv4GZK1IBciJUEhYs3J3p75FdaTFVg==", "dev": true, "dependencies": { "@types/json5": "^0.0.29", @@ -21761,6 +22333,15 @@ "fd-slicer": "~1.1.0" } }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", @@ -21784,118 +22365,123 @@ }, "dependencies": { "@algolia/cache-browser-local-storage": { - "version": "4.10.5", - "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.10.5.tgz", - "integrity": "sha512-cfX2rEKOtuuljcGI5DMDHClwZHdDqd2nT2Ohsc8aHtBiz6bUxKVyIqxr2gaC6tU8AgPtrTVBzcxCA+UavXpKww==", + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.12.1.tgz", + "integrity": "sha512-ERFFOnC9740xAkuO0iZTQqm2AzU7Dpz/s+g7o48GlZgx5p9GgNcsuK5eS0GoW/tAK+fnKlizCtlFHNuIWuvfsg==", "requires": { - "@algolia/cache-common": "4.10.5" + "@algolia/cache-common": "4.12.1" } }, "@algolia/cache-common": { - "version": "4.10.5", - "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.10.5.tgz", - "integrity": "sha512-1mClwdmTHll+OnHkG+yeRoFM17kSxDs4qXkjf6rNZhoZGXDvfYLy3YcZ1FX4Kyz0DJv8aroq5RYGBDsWkHj6Tw==" + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.12.1.tgz", + "integrity": "sha512-UugTER3V40jT+e19Dmph5PKMeliYKxycNPwrPNADin0RcWNfT2QksK9Ff2N2W7UKraqMOzoeDb4LAJtxcK1a8Q==" }, "@algolia/cache-in-memory": { - "version": "4.10.5", - "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.10.5.tgz", - "integrity": "sha512-+ciQnfIGi5wjMk02XhEY8fmy2pzy+oY1nIIfu8LBOglaSipCRAtjk6WhHc7/KIbXPiYzIwuDbM2K1+YOwSGjwA==", + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.12.1.tgz", + "integrity": "sha512-U6iaunaxK1lHsAf02UWF58foKFEcrVLsHwN56UkCtwn32nlP9rz52WOcHsgk6TJrL8NDcO5swMjtOQ5XHESFLw==", "requires": { - "@algolia/cache-common": "4.10.5" + "@algolia/cache-common": "4.12.1" } }, "@algolia/client-account": { - "version": "4.10.5", - "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.10.5.tgz", - "integrity": "sha512-I9UkSS2glXm7RBZYZIALjBMmXSQbw/fI/djPcBHxiwXIheNIlqIFl2SNPkvihpPF979BSkzjqdJNRPhE1vku3Q==", + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.12.1.tgz", + "integrity": "sha512-jGo4ConJNoMdTCR2zouO0jO/JcJmzOK6crFxMMLvdnB1JhmMbuIKluOTJVlBWeivnmcsqb7r0v7qTCPW5PAyxQ==", "requires": { - "@algolia/client-common": "4.10.5", - "@algolia/client-search": "4.10.5", - "@algolia/transporter": "4.10.5" + "@algolia/client-common": "4.12.1", + "@algolia/client-search": "4.12.1", + "@algolia/transporter": "4.12.1" } }, "@algolia/client-analytics": { - "version": "4.10.5", - "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.10.5.tgz", - "integrity": "sha512-h2owwJSkovPxzc+xIsjY1pMl0gj+jdVwP9rcnGjlaTY2fqHbSLrR9yvGyyr6305LvTppxsQnfAbRdE/5Z3eFxw==", + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.12.1.tgz", + "integrity": "sha512-h1It7KXzIthlhuhfBk7LteYq72tym9maQDUsyRW0Gft8b6ZQahnRak9gcCvKwhcJ1vJoP7T7JrNYGiYSicTD9g==", "requires": { - "@algolia/client-common": "4.10.5", - "@algolia/client-search": "4.10.5", - "@algolia/requester-common": "4.10.5", - "@algolia/transporter": "4.10.5" + "@algolia/client-common": "4.12.1", + "@algolia/client-search": "4.12.1", + "@algolia/requester-common": "4.12.1", + "@algolia/transporter": "4.12.1" } }, "@algolia/client-common": { - "version": "4.10.5", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.10.5.tgz", - "integrity": "sha512-21FAvIai5qm8DVmZHm2Gp4LssQ/a0nWwMchAx+1hIRj1TX7OcdW6oZDPyZ8asQdvTtK7rStQrRnD8a95SCUnzA==", + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.12.1.tgz", + "integrity": "sha512-obnJ8eSbv+h94Grk83DTGQ3bqhViSWureV6oK1s21/KMGWbb3DkduHm+lcwFrMFkjSUSzosLBHV9EQUIBvueTw==", "requires": { - "@algolia/requester-common": "4.10.5", - "@algolia/transporter": "4.10.5" + "@algolia/requester-common": "4.12.1", + "@algolia/transporter": "4.12.1" } }, "@algolia/client-personalization": { - "version": "4.10.5", - "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.10.5.tgz", - "integrity": "sha512-nH+IyFKBi8tCyzGOanJTbXC5t4dspSovX3+ABfmwKWUYllYzmiQNFUadpb3qo+MLA3jFx5IwBesjneN6dD5o3w==", + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.12.1.tgz", + "integrity": "sha512-sMSnjjPjRgByGHYygV+5L/E8a6RgU7l2GbpJukSzJ9GRY37tHmBHuvahv8JjdCGJ2p7QDYLnQy5bN5Z02qjc7Q==", "requires": { - "@algolia/client-common": "4.10.5", - "@algolia/requester-common": "4.10.5", - "@algolia/transporter": "4.10.5" + "@algolia/client-common": "4.12.1", + "@algolia/requester-common": "4.12.1", + "@algolia/transporter": "4.12.1" } }, "@algolia/client-search": { - "version": "4.10.5", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.10.5.tgz", - "integrity": "sha512-1eQFMz9uodrc5OM+9HeT+hHcfR1E1AsgFWXwyJ9Q3xejA2c1c4eObGgOgC9ZoshuHHdptaTN1m3rexqAxXRDBg==", + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.12.1.tgz", + "integrity": "sha512-MwwKKprfY6X2nJ5Ki/ccXM2GDEePvVjZnnoOB2io3dLKW4fTqeSRlC5DRXeFD7UM0vOPPHr4ItV2aj19APKNVQ==", "requires": { - "@algolia/client-common": "4.10.5", - "@algolia/requester-common": "4.10.5", - "@algolia/transporter": "4.10.5" + "@algolia/client-common": "4.12.1", + "@algolia/requester-common": "4.12.1", + "@algolia/transporter": "4.12.1" } }, + "@algolia/events": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@algolia/events/-/events-4.0.1.tgz", + "integrity": "sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ==" + }, "@algolia/logger-common": { - "version": "4.10.5", - "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.10.5.tgz", - "integrity": "sha512-gRJo9zt1UYP4k3woEmZm4iuEBIQd/FrArIsjzsL/b+ihNoOqIxZKTSuGFU4UUZOEhvmxDReiA4gzvQXG+TMTmA==" + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.12.1.tgz", + "integrity": "sha512-fCgrzlXGATNqdFTxwx0GsyPXK+Uqrx1SZ3iuY2VGPPqdt1a20clAG2n2OcLHJpvaa6vMFPlJyWvbqAgzxdxBlQ==" }, "@algolia/logger-console": { - "version": "4.10.5", - "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.10.5.tgz", - "integrity": "sha512-4WfIbn4253EDU12u9UiYvz+QTvAXDv39mKNg9xSoMCjKE5szcQxfcSczw2byc6pYhahOJ9PmxPBfs1doqsdTKQ==", + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.12.1.tgz", + "integrity": "sha512-0owaEnq/davngQMYqxLA4KrhWHiXujQ1CU3FFnyUcMyBR7rGHI48zSOUpqnsAXrMBdSH6rH5BDkSUUFwsh8RkQ==", "requires": { - "@algolia/logger-common": "4.10.5" + "@algolia/logger-common": "4.12.1" } }, "@algolia/requester-browser-xhr": { - "version": "4.10.5", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.10.5.tgz", - "integrity": "sha512-53/MURQEqtK+bGdfq4ITSPwTh5hnADU99qzvpAINGQveUFNSFGERipJxHjTJjIrjFz3vxj5kKwjtxDnU6ygO9g==", + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.12.1.tgz", + "integrity": "sha512-OaMxDyG0TZG0oqz1lQh9e3woantAG1bLnuwq3fmypsrQxra4IQZiyn1x+kEb69D2TcXApI5gOgrD4oWhtEVMtw==", "requires": { - "@algolia/requester-common": "4.10.5" + "@algolia/requester-common": "4.12.1" } }, "@algolia/requester-common": { - "version": "4.10.5", - "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.10.5.tgz", - "integrity": "sha512-UkVa1Oyuj6NPiAEt5ZvrbVopEv1m/mKqjs40KLB+dvfZnNcj+9Fry4Oxnt15HMy/HLORXsx4UwcthAvBuOXE9Q==" + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.12.1.tgz", + "integrity": "sha512-XWIrWQNJ1vIrSuL/bUk3ZwNMNxl+aWz6dNboRW6+lGTcMIwc3NBFE90ogbZKhNrFRff8zI4qCF15tjW+Fyhpow==" }, "@algolia/requester-node-http": { - "version": "4.10.5", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.10.5.tgz", - "integrity": "sha512-aNEKVKXL4fiiC+bS7yJwAHdxln81ieBwY3tsMCtM4zF9f5KwCzY2OtN4WKEZa5AAADVcghSAUdyjs4AcGUlO5w==", + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.12.1.tgz", + "integrity": "sha512-awBtwaD+s0hxkA1aehYn8F0t9wqGoBVWgY4JPHBmp1ChO3pK7RKnnvnv7QQa9vTlllX29oPt/BBVgMo1Z3n1Qg==", "requires": { - "@algolia/requester-common": "4.10.5" + "@algolia/requester-common": "4.12.1" } }, "@algolia/transporter": { - "version": "4.10.5", - "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.10.5.tgz", - "integrity": "sha512-F8DLkmIlvCoMwSCZA3FKHtmdjH3o5clbt0pi2ktFStVNpC6ZDmY307HcK619bKP5xW6h8sVJhcvrLB775D2cyA==", + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.12.1.tgz", + "integrity": "sha512-BGeNgdEHc6dXIk2g8kdlOoQ6fQ6OIaKQcplEj7HPoi+XZUeAvRi3Pff3QWd7YmybWkjzd9AnTzieTASDWhL+sQ==", "requires": { - "@algolia/cache-common": "4.10.5", - "@algolia/logger-common": "4.10.5", - "@algolia/requester-common": "4.10.5" + "@algolia/cache-common": "4.12.1", + "@algolia/logger-common": "4.12.1", + "@algolia/requester-common": "4.12.1" } }, "@babel/code-frame": { @@ -22254,6 +22840,21 @@ "resolved": "https://registry.npmjs.org/@bugsnag/safe-json-stringify/-/safe-json-stringify-6.0.0.tgz", "integrity": "sha512-htzFO1Zc57S8kgdRK9mLcPVTW1BY2ijfH7Dk2CeZmspTWKdKqSo1iwmqrq2WtRjFlo8aRZYgLX0wFrDXF/9DLA==" }, + "@cspotcode/source-map-consumer": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz", + "integrity": "sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==", + "dev": true + }, + "@cspotcode/source-map-support": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz", + "integrity": "sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==", + "dev": true, + "requires": { + "@cspotcode/source-map-consumer": "0.8.0" + } + }, "@csstools/convert-colors": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/@csstools/convert-colors/-/convert-colors-1.4.0.tgz", @@ -22490,6 +23091,111 @@ } } }, + "@hashicorp/react-code-block": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@hashicorp/react-code-block/-/react-code-block-4.1.2.tgz", + "integrity": "sha512-kHlk0lid8kp1MmrGGtmPvRP2BNSz8rQBYWH0txqipBJv5ZPsXnyflypcBlivIppxA1+gciwAwg3B/Zcx8L6m1A==", + "requires": { + "@hashicorp/react-inline-svg": "6.0.1", + "@reach/listbox": "0.15.0", + "shellwords": "^0.1.1" + }, + "dependencies": { + "@hashicorp/react-inline-svg": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@hashicorp/react-inline-svg/-/react-inline-svg-6.0.1.tgz", + "integrity": "sha512-EpvJd0AkE5tvlentS/Oez5W7SFJ32UjvU0RVFPYQlwR6tOTMOR9wK7Ose69WjkmtdjPMHWRE6MxWeSn0c1N5Bw==", + "requires": {} + }, + "@reach/listbox": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@reach/listbox/-/listbox-0.15.0.tgz", + "integrity": "sha512-3Vvpte0HQkfo3sT4Cz6gG9h+E/La2IwbtLQDTesEmDzToQ8bk9rOfuFDVp7IXUyOdDggfDCOEz/ZphsuniADWA==", + "requires": { + "@reach/auto-id": "0.15.0", + "@reach/descendants": "0.15.0", + "@reach/machine": "0.15.0", + "@reach/popover": "0.15.0", + "@reach/utils": "0.15.0", + "prop-types": "^15.7.2" + }, + "dependencies": { + "@reach/auto-id": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@reach/auto-id/-/auto-id-0.15.0.tgz", + "integrity": "sha512-iACaCcZeqAhDf4OOwJpmHHS/LaRj9z3Ip8JmlhpCrFWV2YOIiiZk42amlBZX6CKH66Md+eriYZQk3TyAjk6Oxg==", + "requires": { + "@reach/utils": "0.15.0", + "tslib": "^2.1.0" + } + }, + "@reach/descendants": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@reach/descendants/-/descendants-0.15.0.tgz", + "integrity": "sha512-MGs+7sGjx07sm29Wc2d/Ya72qwatNVHofnYwwHMT6LImv99kE5TQMCgkMSDeRwqQxHURmcjb4I7Tab+ahvCGiw==", + "requires": { + "@reach/utils": "0.15.0", + "tslib": "^2.1.0" + } + }, + "@reach/machine": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@reach/machine/-/machine-0.15.0.tgz", + "integrity": "sha512-o3vvqsTQyj7apxpbSuIn4xKYlqNagcjhlMnroJ2uqgJfFwy1tLrsQo4Sr8GnZu4hitPbNAfqGExYjV8ZV8SHpA==", + "requires": { + "@reach/utils": "0.15.0", + "@xstate/fsm": "1.4.0", + "tslib": "^2.1.0" + } + }, + "@reach/popover": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@reach/popover/-/popover-0.15.0.tgz", + "integrity": "sha512-nBR6ZlULF7ZZIqkN47QEWmdqUX2Zd6FSeYJku1il9OkiMnWzI3aTOyu1B+IJfYeIqg28D/aeF4ff0oVu1VUrqQ==", + "requires": { + "@reach/portal": "0.15.0", + "@reach/rect": "0.15.0", + "@reach/utils": "0.15.0", + "tabbable": "^4.0.0", + "tslib": "^2.1.0" + }, + "dependencies": { + "@reach/portal": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@reach/portal/-/portal-0.15.0.tgz", + "integrity": "sha512-Aulqjk/PIRu+R7yhINYAAYfYh++ZdC30qwHDWDtGk2cmTEJT7m9AlvBX+W7T+Q3Ux6Wy5f37eV+TTGid1CcjFw==", + "requires": { + "@reach/utils": "0.15.0", + "tslib": "^2.1.0" + } + }, + "@reach/rect": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@reach/rect/-/rect-0.15.0.tgz", + "integrity": "sha512-Nu0zG4Xq8Z0C3Yr3wbjtj7fvII1q2KopHDStNtmL26oWPzlaZJ9A1K6rZSPIqxKkx1hvl6AUTeom7eHTIKhHjA==", + "requires": { + "@reach/observe-rect": "1.2.0", + "@reach/utils": "0.15.0", + "prop-types": "^15.7.2", + "tiny-warning": "^1.0.3", + "tslib": "^2.1.0" + } + } + } + }, + "@reach/utils": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@reach/utils/-/utils-0.15.0.tgz", + "integrity": "sha512-JHHN7T5ucFiuQbqkgv8ECbRWKfRiJxrO/xHR3fHf+f2C7mVs/KkJHhYtovS1iEapR4silygX9PY0+QUmHPOTYw==", + "requires": { + "tiny-warning": "^1.0.3", + "tslib": "^2.1.0" + } + } + } + } + } + }, "@hashicorp/react-consent-manager": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/@hashicorp/react-consent-manager/-/react-consent-manager-5.1.0.tgz", @@ -22534,29 +23240,29 @@ } }, "@hashicorp/platform-cli": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@hashicorp/platform-cli/-/platform-cli-1.2.0.tgz", - "integrity": "sha512-bdGYmqRxxApO+WKPoj8Tc6cWLY2zfPIOQUwnSAcheSE3hIwhscEeudkAxQhKGtgjX4HazgfhEBmQEcJ8T28Bew==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@hashicorp/platform-cli/-/platform-cli-2.0.0.tgz", + "integrity": "sha512-+el+rRD6tlAECLKYhLBvppjyojZQWZAROznuZv/IwSoyVwLx4Z7hgGLt9IJ3jFGsCStBG9BseVf71zesbl+jTw==", "dev": true, "requires": { "@hashicorp/platform-cms": "0.3.0", - "@typescript-eslint/eslint-plugin": "4.9.1", - "@typescript-eslint/parser": "4.9.1", + "@typescript-eslint/eslint-plugin": "5.10.2", + "@typescript-eslint/parser": "5.10.2", "babel-eslint": "10.1.0", "chalk": "4.1.0", "commander": "7.2.0", "ejs": "3.1.5", - "eslint": "7.23.0", - "eslint-config-next": "^11.0.1", - "eslint-config-prettier": "7.0.0", - "eslint-plugin-jsx-a11y": "6.4.1", - "eslint-plugin-prettier": "3.3.0", + "eslint": "8.8.0", + "eslint-config-next": "12.0.10", + "eslint-config-prettier": "8.3.0", + "eslint-plugin-jsx-a11y": "6.5.1", + "eslint-plugin-prettier": "4.0.0", "fs-extra": "9.0.1", "globby": "11.0.1", "inquirer": "7.3.3", "lint-staged": "11.1.2", "open": "7.3.0", - "prettier": "2.2.1", + "prettier": "2.5.1", "readdirp": "3.5.0", "signale": "1.4.0", "slugify": "1.4.6", @@ -22571,99 +23277,136 @@ "ts-jest": "^26.4.4" }, "dependencies": { - "@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "@babel/runtime": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.7.tgz", + "integrity": "sha512-9E9FJowqAsytyOY6LG+1KuueckRL+aQW+mKvXRXnuFGyRAyepJPmEo9vgMfXUA6O9u3IeEdv9MAkppFcaQwogQ==", "dev": true, "requires": { - "@babel/highlight": "^7.10.4" + "regenerator-runtime": "^0.13.4" } }, "@eslint/eslintrc": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", - "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.5.tgz", + "integrity": "sha512-BLxsnmK3KyPunz5wmCCpqy0YelEoxxGmH73Is+Z74oOTMtExcjkr3dDR6quwrjh1YspA8DH9gnX1o069KiS9AQ==", "dev": true, "requires": { "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", + "debug": "^4.3.2", + "espree": "^9.2.0", "globals": "^13.9.0", "ignore": "^4.0.6", "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", + "js-yaml": "^4.1.0", "minimatch": "^3.0.4", "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + } + } + }, + "@typescript-eslint/eslint-plugin": { + "version": "5.10.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.10.2.tgz", + "integrity": "sha512-4W/9lLuE+v27O/oe7hXJKjNtBLnZE8tQAFpapdxwSVHqtmIoPB1gph3+ahNwVuNL37BX7YQHyGF9Xv6XCnIX2Q==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "5.10.2", + "@typescript-eslint/type-utils": "5.10.2", + "@typescript-eslint/utils": "5.10.2", + "debug": "^4.3.2", + "functional-red-black-tree": "^1.0.1", + "ignore": "^5.1.8", + "regexpp": "^3.2.0", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/parser": { + "version": "5.10.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.10.2.tgz", + "integrity": "sha512-JaNYGkaQVhP6HNF+lkdOr2cAs2wdSZBoalE22uYWq8IEv/OVH0RksSGydk+sW8cLoSeYmC+OHvRyv2i4AQ7Czg==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "5.10.2", + "@typescript-eslint/types": "5.10.2", + "@typescript-eslint/typescript-estree": "5.10.2", + "debug": "^4.3.2" } }, "@typescript-eslint/scope-manager": { - "version": "4.32.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.32.0.tgz", - "integrity": "sha512-DK+fMSHdM216C0OM/KR1lHXjP1CNtVIhJ54kQxfOE6x8UGFAjha8cXgDMBEIYS2XCYjjCtvTkjQYwL3uvGOo0w==", + "version": "5.10.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.10.2.tgz", + "integrity": "sha512-39Tm6f4RoZoVUWBYr3ekS75TYgpr5Y+X0xLZxXqcZNDWZdJdYbKd3q2IR4V9y5NxxiPu/jxJ8XP7EgHiEQtFnw==", "dev": true, "requires": { - "@typescript-eslint/types": "4.32.0", - "@typescript-eslint/visitor-keys": "4.32.0" + "@typescript-eslint/types": "5.10.2", + "@typescript-eslint/visitor-keys": "5.10.2" } }, "@typescript-eslint/types": { - "version": "4.32.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.32.0.tgz", - "integrity": "sha512-LE7Z7BAv0E2UvqzogssGf1x7GPpUalgG07nGCBYb1oK4mFsOiFC/VrSMKbZQzFJdN2JL5XYmsx7C7FX9p9ns0w==", + "version": "5.10.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.10.2.tgz", + "integrity": "sha512-Qfp0qk/5j2Rz3p3/WhWgu4S1JtMcPgFLnmAKAW061uXxKSa7VWKZsDXVaMXh2N60CX9h6YLaBoy9PJAfCOjk3w==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "4.32.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.32.0.tgz", - "integrity": "sha512-tRYCgJ3g1UjMw1cGG8Yn1KzOzNlQ6u1h9AmEtPhb5V5a1TmiHWcRyF/Ic+91M4f43QeChyYlVTcf3DvDTZR9vw==", + "version": "5.10.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.10.2.tgz", + "integrity": "sha512-WHHw6a9vvZls6JkTgGljwCsMkv8wu8XU8WaYKeYhxhWXH/atZeiMW6uDFPLZOvzNOGmuSMvHtZKd6AuC8PrwKQ==", "dev": true, "requires": { - "@typescript-eslint/types": "4.32.0", - "@typescript-eslint/visitor-keys": "4.32.0", - "debug": "^4.3.1", - "globby": "^11.0.3", - "is-glob": "^4.0.1", + "@typescript-eslint/types": "5.10.2", + "@typescript-eslint/visitor-keys": "5.10.2", + "debug": "^4.3.2", + "globby": "^11.0.4", + "is-glob": "^4.0.3", "semver": "^7.3.5", "tsutils": "^3.21.0" }, "dependencies": { "globby": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", - "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, "requires": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", "slash": "^3.0.0" } - }, - "ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", - "dev": true } } }, "@typescript-eslint/visitor-keys": { - "version": "4.32.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.32.0.tgz", - "integrity": "sha512-e7NE0qz8W+atzv3Cy9qaQ7BTLwWsm084Z0c4nIO2l3Bp6u9WIgdqCgyPyV5oSPDMIW3b20H59OOCmVk3jw3Ptw==", + "version": "5.10.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.10.2.tgz", + "integrity": "sha512-zHIhYGGGrFJvvyfwHk5M08C5B5K4bewkm+rrvNTKk1/S15YHR+SA/QUF8ZWscXSfEaB8Nn2puZj+iHcoxVOD/Q==", "dev": true, "requires": { - "@typescript-eslint/types": "4.32.0", - "eslint-visitor-keys": "^2.0.0" + "@typescript-eslint/types": "5.10.2", + "eslint-visitor-keys": "^3.0.0" } }, - "astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "acorn": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", + "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", + "dev": true + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, "commander": { @@ -22672,86 +23415,145 @@ "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", "dev": true }, + "debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true }, "eslint": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.23.0.tgz", - "integrity": "sha512-kqvNVbdkjzpFy0XOszNwjkKzZ+6TcwCQ/h+ozlcIWwaimBBuhlQ4nN6kbiM2L+OjDcznkTJxzYfRFH92sx4a0Q==", + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.8.0.tgz", + "integrity": "sha512-H3KXAzQGBH1plhYS3okDix2ZthuYJlQQEGE5k0IKuEqUSiyu4AmxxlJ2MtTYeJ3xB4jDhcYCwGOg2TXYdnDXlQ==", "dev": true, "requires": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.0", + "@eslint/eslintrc": "^1.0.5", + "@humanwhocodes/config-array": "^0.9.2", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", - "debug": "^4.0.1", + "debug": "^4.3.2", "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.0", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.2.0", + "espree": "^9.3.0", "esquery": "^1.4.0", "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.0.0", + "glob-parent": "^6.0.1", "globals": "^13.6.0", - "ignore": "^4.0.6", + "ignore": "^5.2.0", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", + "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", - "lodash": "^4.17.21", + "lodash.merge": "^4.6.2", "minimatch": "^3.0.4", "natural-compare": "^1.4.0", "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", "strip-json-comments": "^3.1.0", - "table": "^6.0.4", "text-table": "^0.2.0", "v8-compile-cache": "^2.0.3" } }, "eslint-config-next": { - "version": "11.1.2", - "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-11.1.2.tgz", - "integrity": "sha512-dFutecxX2Z5/QVlLwdtKt+gIfmNMP8Qx6/qZh3LM/DFVdGJEAnUKrr4VwGmACB2kx/PQ5bx3R+QxnEg4fDPiTg==", + "version": "12.0.10", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-12.0.10.tgz", + "integrity": "sha512-l1er6mwSo1bltjLwmd71p5BdT6k/NQxV1n4lKZI6xt3MDMrq7ChUBr+EecxOry8GC/rCRUtPpH8Ygs0BJc5YLg==", "dev": true, "requires": { - "@next/eslint-plugin-next": "11.1.2", - "@rushstack/eslint-patch": "^1.0.6", - "@typescript-eslint/parser": "^4.20.0", + "@next/eslint-plugin-next": "12.0.10", + "@rushstack/eslint-patch": "^1.0.8", + "@typescript-eslint/parser": "^5.0.0", "eslint-import-resolver-node": "^0.3.4", "eslint-import-resolver-typescript": "^2.4.0", - "eslint-plugin-import": "^2.22.1", - "eslint-plugin-jsx-a11y": "^6.4.1", - "eslint-plugin-react": "^7.23.1", - "eslint-plugin-react-hooks": "^4.2.0" + "eslint-plugin-import": "^2.25.2", + "eslint-plugin-jsx-a11y": "^6.5.1", + "eslint-plugin-react": "^7.27.0", + "eslint-plugin-react-hooks": "^4.3.0" + } + }, + "eslint-config-prettier": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz", + "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==", + "dev": true, + "requires": {} + }, + "eslint-plugin-jsx-a11y": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.5.1.tgz", + "integrity": "sha512-sVCFKX9fllURnXT2JwLN5Qgo24Ug5NF6dxhkmxsMEUZhXRcGg+X3e1JbJ84YePQKBl5E0ZjAH5Q4rkdcGY99+g==", + "dev": true, + "requires": { + "@babel/runtime": "^7.16.3", + "aria-query": "^4.2.2", + "array-includes": "^3.1.4", + "ast-types-flow": "^0.0.7", + "axe-core": "^4.3.5", + "axobject-query": "^2.2.0", + "damerau-levenshtein": "^1.0.7", + "emoji-regex": "^9.2.2", + "has": "^1.0.3", + "jsx-ast-utils": "^3.2.1", + "language-tags": "^1.0.5", + "minimatch": "^3.0.4" + } + }, + "eslint-plugin-prettier": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.0.0.tgz", + "integrity": "sha512-98MqmCJ7vJodoQK359bqQWaxOE0CS8paAz/GgjaZLyex4TTk3g9HugoO89EqWCrFiOqn9EVvcoo7gZzONCWVwQ==", + "dev": true, + "requires": { + "prettier-linter-helpers": "^1.0.0" + } + }, + "eslint-plugin-react": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.28.0.tgz", + "integrity": "sha512-IOlFIRHzWfEQQKcAD4iyYDndHwTQiCMcJVJjxempf203jnNLUnW34AXLrV33+nEXoifJE2ZEGmcjKPL8957eSw==", + "dev": true, + "requires": { + "array-includes": "^3.1.4", + "array.prototype.flatmap": "^1.2.5", + "doctrine": "^2.1.0", + "estraverse": "^5.3.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.0.4", + "object.entries": "^1.1.5", + "object.fromentries": "^2.0.5", + "object.hasown": "^1.1.0", + "object.values": "^1.1.5", + "prop-types": "^15.7.2", + "resolve": "^2.0.0-next.3", + "semver": "^6.3.0", + "string.prototype.matchall": "^4.0.6" }, "dependencies": { - "@typescript-eslint/parser": { - "version": "4.32.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.32.0.tgz", - "integrity": "sha512-lhtYqQ2iEPV5JqV7K+uOVlPePjClj4dOw7K4/Z1F2yvjIUvyr13yJnDzkK6uon4BjHYuHy3EG0c2Z9jEhFk56w==", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "4.32.0", - "@typescript-eslint/types": "4.32.0", - "@typescript-eslint/typescript-estree": "4.32.0", - "debug": "^4.3.1" - } - }, "doctrine": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", @@ -22761,94 +23563,6 @@ "esutils": "^2.0.2" } }, - "eslint-import-resolver-typescript": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.5.0.tgz", - "integrity": "sha512-qZ6e5CFr+I7K4VVhQu3M/9xGv9/YmwsEXrsm3nimw8vWaVHRDrQRp26BgCypTxBp3vUp4o5aVEJRiy0F2DFddQ==", - "dev": true, - "requires": { - "debug": "^4.3.1", - "glob": "^7.1.7", - "is-glob": "^4.0.1", - "resolve": "^1.20.0", - "tsconfig-paths": "^3.9.0" - } - }, - "eslint-plugin-import": { - "version": "2.24.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.24.2.tgz", - "integrity": "sha512-hNVtyhiEtZmpsabL4neEj+6M5DCLgpYyG9nzJY8lZQeQXEn5UPW1DpUdsMHMXsq98dbNm7nt1w9ZMSVpfJdi8Q==", - "dev": true, - "requires": { - "array-includes": "^3.1.3", - "array.prototype.flat": "^1.2.4", - "debug": "^2.6.9", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-module-utils": "^2.6.2", - "find-up": "^2.0.0", - "has": "^1.0.3", - "is-core-module": "^2.6.0", - "minimatch": "^3.0.4", - "object.values": "^1.1.4", - "pkg-up": "^2.0.0", - "read-pkg-up": "^3.0.0", - "resolve": "^1.20.0", - "tsconfig-paths": "^3.11.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } - } - }, - "eslint-plugin-react": { - "version": "7.26.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.26.1.tgz", - "integrity": "sha512-Lug0+NOFXeOE+ORZ5pbsh6mSKjBKXDXItUD2sQoT+5Yl0eoT82DqnXeTMfUare4QVCn9QwXbfzO/dBLjLXwVjQ==", - "dev": true, - "requires": { - "array-includes": "^3.1.3", - "array.prototype.flatmap": "^1.2.4", - "doctrine": "^2.1.0", - "estraverse": "^5.2.0", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.0.4", - "object.entries": "^1.1.4", - "object.fromentries": "^2.0.4", - "object.hasown": "^1.0.0", - "object.values": "^1.1.4", - "prop-types": "^15.7.2", - "resolve": "^2.0.0-next.3", - "semver": "^6.3.0", - "string.prototype.matchall": "^4.0.5" - }, - "dependencies": { - "resolve": { - "version": "2.0.0-next.3", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.3.tgz", - "integrity": "sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==", - "dev": true, - "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - } - } - } - }, - "eslint-plugin-react-hooks": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.2.0.tgz", - "integrity": "sha512-623WEiZJqxR7VdxFCKLI6d6LLpwJkGPYKODnkH3D7WpOG5KM8yWueBd8TLsNAetEJNF5iJmolaAKO3F8yzyVBQ==", - "dev": true, - "requires": {} - }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -22857,10 +23571,54 @@ } } }, + "eslint-scope": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.0.tgz", + "integrity": "sha512-aWwkhnS0qAXqNOgKOK0dJ2nvzEbhEvpy8OlJ9kZ0FeZnA6zpjv1/Vei+puGFFX7zkPCkHHXb7IDX3A+7yPrRWg==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^2.0.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true + } + } + }, + "eslint-visitor-keys": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.2.0.tgz", + "integrity": "sha512-IOzT0X126zn7ALX0dwFiUQEdsfzrm4+ISsQS8nukaJXwEyYKRSnEIIDULYg1mCtGp7UUXgfGl7BIolXREQK+XQ==", + "dev": true + }, + "espree": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.0.tgz", + "integrity": "sha512-d/5nCsb0JcqsSEeQzFZ8DH1RmxPcglRWh24EFTlUEmCKoehXGdpsx0RkHDubqUI8LSAIKMQp4r9SzQ3n+sm4HQ==", + "dev": true, + "requires": { + "acorn": "^8.7.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^3.1.0" + } + }, "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true }, "execa": { @@ -22880,25 +23638,25 @@ "strip-final-newline": "^2.0.0" } }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, "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 }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + }, "globals": { - "version": "13.11.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz", - "integrity": "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==", + "version": "13.12.1", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.1.tgz", + "integrity": "sha512-317dFlgY2pdJZ9rspXDks7073GpDmXdfbM3vYYp0HAMKGDh1FfWPleI2ljVNLQX5M5lXcAslTcPTrOrMEFOjyw==", "dev": true, "requires": { "type-fest": "^0.20.2" @@ -22910,23 +23668,14 @@ "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } }, "lint-staged": { "version": "11.1.2", @@ -22962,130 +23711,20 @@ } } }, - "load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - }, - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "requires": { - "pify": "^3.0.0" - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "prettier": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.1.tgz", + "integrity": "sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==", "dev": true }, - "read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", - "dev": true, - "requires": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - } - }, - "read-pkg-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", - "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", - "dev": true, - "requires": { - "find-up": "^2.0.0", - "read-pkg": "^3.0.0" - } - }, - "slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - } - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "resolve": { + "version": "2.0.0-next.3", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.3.tgz", + "integrity": "sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==", "dev": true, "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" } }, "strip-ansi": { @@ -23097,40 +23736,6 @@ "ansi-regex": "^5.0.1" } }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - }, - "table": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", - "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", - "dev": true, - "requires": { - "ajv": "^8.0.1", - "lodash.clonedeep": "^4.5.0", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ajv": { - "version": "8.6.3", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.3.tgz", - "integrity": "sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - } - } - }, "type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", @@ -23161,11 +23766,11 @@ } }, "@hashicorp/platform-docs-mdx": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@hashicorp/platform-docs-mdx/-/platform-docs-mdx-0.1.3.tgz", - "integrity": "sha512-NPVvn3s/JuFfebvymJ9JkOd6CHKfCVISz/QenmPgPim1nzJfe3uXKFeqolYdfMb8k1++XpX7KM70nJMVDyQLpw==", + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@hashicorp/platform-docs-mdx/-/platform-docs-mdx-0.1.4.tgz", + "integrity": "sha512-/yAZDWR7pgrTkNzoNxZXyWZ1dvSO+KVw5/ZFsUR8d+kZhSKqiLAHVEAH6i7Jd4GlW074OytUzWmA3Je2jAVetA==", "requires": { - "@hashicorp/react-code-block": "^4.1.0", + "@hashicorp/react-code-block": "^4.4.2", "@hashicorp/react-enterprise-alert": "^6.0.1", "@hashicorp/react-tabs": "^7.0.1", "@mdx-js/react": "1.6.22" @@ -23181,43 +23786,25 @@ } }, "@hashicorp/react-tabs": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@hashicorp/react-tabs/-/react-tabs-7.0.1.tgz", - "integrity": "sha512-qmQscQkIxNhZc/QhWo5RCEu39rKXl4iQHlk0Q0Zk+ClqKSplDuVMMJqg3GtrG056em9xA2p+n7J501EZlOfzGg==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/@hashicorp/react-tabs/-/react-tabs-7.1.2.tgz", + "integrity": "sha512-0ZWPVOvF/FtiXlCVHPsBUfNx4GFNoiakvciE0jdu9it3nJc64GXVKYdlhuBHxF9TSfAMNEqyoeqRsK+HzsCYMA==", "requires": { - "@hashicorp/react-inline-svg": "^6.0.1", - "@reach/portal": "^0.16.0", - "@reach/tooltip": "^0.16.0", + "@hashicorp/react-inline-svg": "^6.0.3", + "@reach/portal": "^0.16.2", + "@reach/tooltip": "^0.16.2", "classnames": "^2.3.1" } - }, - "@reach/portal": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/@reach/portal/-/portal-0.16.0.tgz", - "integrity": "sha512-vXJ0O9T+72HiSEWHPs2cx7YbSO7pQsTMhgqPc5aaddIYpo2clJx1PnYuS0lSNlVaDO0IxQhwYq43evXaXnmviw==", - "requires": { - "@reach/utils": "0.16.0", - "tslib": "^2.3.0" - } - }, - "@reach/utils": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/@reach/utils/-/utils-0.16.0.tgz", - "integrity": "sha512-PCggBet3qaQmwFNcmQ/GqHSefadAFyNCUekq9RrWoaU9hh/S4iaFgf2MBMdM47eQj5i/Bk0Mm07cP/XPFlkN+Q==", - "requires": { - "tiny-warning": "^1.0.3", - "tslib": "^2.3.0" - } } } }, "@hashicorp/platform-markdown-utils": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@hashicorp/platform-markdown-utils/-/platform-markdown-utils-0.1.3.tgz", - "integrity": "sha512-WIVCYljXQAhT+wFb8EtN3AEkgFDcbXMEvF4XkBg8OE/UWlrKWUNICjhrwTN68Q4Vl11ChX/ifH803DmLcSninA==", + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@hashicorp/platform-markdown-utils/-/platform-markdown-utils-0.1.4.tgz", + "integrity": "sha512-ey24VxU99+ECQ7SPUqFrYpBMJZJKayD6hz8t3gDm/SxfSCEz/NXzqVye/ToWcEfRTtHqasBVDaVa2lf7UwzqKw==", "requires": { "@hashicorp/platform-types": "^0.1.0", - "@hashicorp/remark-plugins": "^3.2.0", + "@hashicorp/remark-plugins": "^3.2.1", "@mapbox/rehype-prism": "^0.6.0", "@mdx-js/react": "1.6.22", "rehype-katex": "^5.0.0", @@ -23225,6 +23812,22 @@ "remark-rehype": "^7.0.0" }, "dependencies": { + "@hashicorp/remark-plugins": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@hashicorp/remark-plugins/-/remark-plugins-3.3.1.tgz", + "integrity": "sha512-7xThpsBFWasdC/E+E/BAjHxMYqyCcQFiTVspvhBzN51meiQIacVCnyAox/lyvwWiP4N3Yj/ruH4UsR2ifskNeA==", + "requires": { + "@mdx-js/util": "1.6.22", + "github-slugger": "^1.3.0", + "remark": "12.0.1", + "remark-mdx": "1.6.22", + "to-vfile": "^6.1.0", + "unist-util-flatmap": "^1.0.0", + "unist-util-is": "^4.0.2", + "unist-util-map": "^2.0.1", + "unist-util-visit": "^2.0.3" + } + }, "@mapbox/rehype-prism": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/@mapbox/rehype-prism/-/rehype-prism-0.6.0.tgz", @@ -23294,236 +23897,326 @@ } } }, - "@hashicorp/platform-nextjs-plugin": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@hashicorp/platform-nextjs-plugin/-/platform-nextjs-plugin-1.0.1.tgz", - "integrity": "sha512-gT26wGylFuAUuMHuQ57PRrrL414xWsqaVUfrvlcQcrOXUF9YsUjNnVAWo+JLoo9y37vpdOMhdEPWrwPxXoeItw==", - "dev": true, - "requires": { - "@hashicorp/next-optimized-images": "0.1.0", - "@next/bundle-analyzer": "10.0.3", - "imagemin-mozjpeg": "9.0.0", - "imagemin-optipng": "8.0.0", - "imagemin-svgo": "8.0.0", - "next-transpile-modules": "^8.0.0", - "postcss-normalize": "10.0.1" - }, - "dependencies": { - "next-transpile-modules": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/next-transpile-modules/-/next-transpile-modules-8.0.0.tgz", - "integrity": "sha512-Q2f2yB0zMJ8KJbIYAeZoIxG6cSfVk813zr6B5HzsLMBVcJ3FaF8lKr7WG66n0KlHCwjLSmf/6EkgI6QQVWHrDw==", - "dev": true, - "requires": { - "enhanced-resolve": "^5.7.0", - "escalade": "^3.1.1" - } - }, - "postcss-browser-comments": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-browser-comments/-/postcss-browser-comments-4.0.0.tgz", - "integrity": "sha512-X9X9/WN3KIvY9+hNERUqX9gncsgBA25XaeR+jshHz2j8+sYyHktHw1JdKuMjeLpGktXidqDhA7b/qm1mrBDmgg==", - "dev": true, - "requires": {} - }, - "postcss-normalize": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize/-/postcss-normalize-10.0.1.tgz", - "integrity": "sha512-+5w18/rDev5mqERcG3W5GZNMJa1eoYYNGo8gB7tEwaos0ajk3ZXAI4mHGcNT47NE+ZnZD1pEpUOFLvltIwmeJA==", - "dev": true, - "requires": { - "@csstools/normalize.css": "*", - "postcss-browser-comments": "^4", - "sanitize.css": "*" - } - } - } - }, - "@hashicorp/platform-product-meta": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@hashicorp/platform-product-meta/-/platform-product-meta-0.1.0.tgz", - "integrity": "sha512-UXAiYENDP8I0mD9+LNMyaCksUPthPRkxAIzg12SbERgx5kAjEaBCzYRHKXibL1dZpVQiRfs0i/0ieSw0mP2y+Q==", - "requires": { - "@hashicorp/platform-util": "^0.1.0" - } - }, - "@hashicorp/platform-runtime-error-monitoring": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@hashicorp/platform-runtime-error-monitoring/-/platform-runtime-error-monitoring-0.1.0.tgz", - "integrity": "sha512-G6YhBPIu9cPPE2j+uLVoCuamPzxrpEPi45B0ySa+1CTCUmG+3fswvPHXILbyr91ZtpuBsFg1nYJOBwlwEftHdg==", - "requires": { - "@bugsnag/js": "7.5.4", - "@bugsnag/plugin-react": "7.5.4" - } - }, - "@hashicorp/platform-types": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@hashicorp/platform-types/-/platform-types-0.1.1.tgz", - "integrity": "sha512-aQU6hyzBpMax7WoZKF6f/OkCER/SxsVn25RBVgU7JHxmebYJB4VfmDXAfa0TyKaPz2cDWPeOgc8MVezGVjouSw==", - "requires": { - "@types/segment-analytics": "^0.0.33" - } - }, - "@hashicorp/platform-util": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@hashicorp/platform-util/-/platform-util-0.1.0.tgz", - "integrity": "sha512-XGWmQnMThygQKUsB5fPfhWT2KIbAq3Zax1K7TiEarX7IrngpEk7oTpVUR0uEraZgpfsaOfhHGSilvBRZjCZ+Ew==", - "requires": { - "nprogress": "0.2.0" - } - }, - "@hashicorp/react-alert": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@hashicorp/react-alert/-/react-alert-6.0.0.tgz", - "integrity": "sha512-uTRt9aux5NWyxBWifKD/QsQ1U/S4CurAMUpGbgvOe1gkAoKyl/0KdtlcXMEb1/jMmRH2F2sgj5gPmczPmiz/yg==", - "requires": { - "@hashicorp/platform-product-meta": "^0.1.0", - "classnames": "^2.2.6" - } - }, - "@hashicorp/react-alert-banner": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@hashicorp/react-alert-banner/-/react-alert-banner-7.0.1.tgz", - "integrity": "sha512-h6M9NhQQxDJZQwhrT1I+Rwfiko8yGsQGrTp6jF0XUrOnteok69SfuDfc0/Vv50aNG0029R4pnBvgK3e1Xc7TlQ==", - "requires": { - "@hashicorp/platform-product-meta": "^0.1.0", - "@hashicorp/react-inline-svg": "^6.0.3", - "@reach/visually-hidden": "^0.16.0", - "js-cookie": "^2.2.1", - "slugify": "^1.6.0" - }, - "dependencies": { - "slugify": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.0.tgz", - "integrity": "sha512-FkMq+MQc5hzYgM86nLuHI98Acwi3p4wX+a5BO9Hhw4JdK4L7WueIiZ4tXEobImPqBz2sVcV0+Mu3GRB30IGang==" - } - } - }, - "@hashicorp/react-button": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@hashicorp/react-button/-/react-button-6.0.3.tgz", - "integrity": "sha512-CRK93cWw5ap4tGGvMoyr/Ydvvz1Ie1RTyTdBhcpARlH7pCIAmvxHKMK+FCWXWGJNjpM9suKenXfdTJRfz7+KNw==", - "requires": { - "@hashicorp/platform-product-meta": "^0.1.0", - "@hashicorp/react-inline-svg": "^6.0.1", - "classnames": "^2.3.1", - "slugify": "^1.6.0" - }, - "dependencies": { - "slugify": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.0.tgz", - "integrity": "sha512-FkMq+MQc5hzYgM86nLuHI98Acwi3p4wX+a5BO9Hhw4JdK4L7WueIiZ4tXEobImPqBz2sVcV0+Mu3GRB30IGang==" - } - } - }, - "@hashicorp/react-code-block": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/@hashicorp/react-code-block/-/react-code-block-4.1.2.tgz", - "integrity": "sha512-kHlk0lid8kp1MmrGGtmPvRP2BNSz8rQBYWH0txqipBJv5ZPsXnyflypcBlivIppxA1+gciwAwg3B/Zcx8L6m1A==", - "requires": { - "@hashicorp/react-inline-svg": "6.0.1", - "@reach/listbox": "0.15.0", - "shellwords": "^0.1.1" - }, - "dependencies": { - "@hashicorp/react-inline-svg": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@hashicorp/react-inline-svg/-/react-inline-svg-6.0.1.tgz", - "integrity": "sha512-EpvJd0AkE5tvlentS/Oez5W7SFJ32UjvU0RVFPYQlwR6tOTMOR9wK7Ose69WjkmtdjPMHWRE6MxWeSn0c1N5Bw==", - "requires": {} - } - } - }, - "@hashicorp/react-command-line-terminal": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@hashicorp/react-command-line-terminal/-/react-command-line-terminal-2.0.4.tgz", - "integrity": "sha512-e3TLZHhvo6L+/YApp698nn/KuxEFWnTtJirIh5EzD6lxapxvLI3Ud8bd9l8T+c8NGsFOrotl96+9psD4eRe4pw==", - "requires": { - "@hashicorp/platform-product-meta": "^0.1.0" - } - }, - "@hashicorp/react-consent-manager": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/@hashicorp/react-consent-manager/-/react-consent-manager-7.0.3.tgz", - "integrity": "sha512-AGeTVg7C7f6s4ahvN02hvt3SA09ilQIgf+4k05ctX0xOyOccWLNZL1/9h6BbYy+oVOZKYsPIVHkp2dyI6YKKKA==", - "requires": { - "@hashicorp/react-button": "^6.0.0", - "@hashicorp/react-toggle": "^4.0.1", - "classnames": "^2.3.1", - "js-cookie": "^2.2.1" - }, - "dependencies": { - "@hashicorp/react-toggle": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@hashicorp/react-toggle/-/react-toggle-4.0.1.tgz", - "integrity": "sha512-pPcFs3mlR7qt6j+bbfRnkxr1dEpTInuvLfYZ27L92uEcd83MBLcc+jp6c/idMuzHyLGSFU5aGqrAz5ufhLERZw==", - "requires": { - "classnames": "^2.3.1" - } - } - } - }, - "@hashicorp/react-content": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@hashicorp/react-content/-/react-content-8.0.2.tgz", - "integrity": "sha512-FNE1IiXizUDPL/rsvo37uYSBsAB8LhtCianMU/h3MIj8Khcwc/qC3pTabGs9Kv3ujA+fiIp/ImzWEGAhB22T7g==", - "requires": { - "@hashicorp/platform-product-meta": "^0.1.0", - "classnames": "^2.3.1" - } - }, - "@hashicorp/react-docs-page": { - "version": "14.4.2", - "resolved": "https://registry.npmjs.org/@hashicorp/react-docs-page/-/react-docs-page-14.4.2.tgz", - "integrity": "sha512-K/KITJsAYA8sjxCy4JbAJKEgEKA924MNm4bd4SPniomzSYmsCNxeDaM/bSM/EpaGR7cX9r6htSyugKwo7V3QFQ==", - "requires": { - "@hashicorp/platform-docs-mdx": "^0.1.3", - "@hashicorp/platform-markdown-utils": "^0.1.3", - "@hashicorp/react-alert": "^6.0.0", - "@hashicorp/react-content": "^8.0.2", - "@hashicorp/react-docs-sidenav": "^8.4.0", - "@hashicorp/react-head": "^3.1.2", - "@hashicorp/react-placeholder": "^0.1.0", - "@hashicorp/react-search": "^6.1.1", - "@hashicorp/react-version-select": "^0.2.0", - "classnames": "^2.3.1", - "fs-exists-sync": "^0.1.0", - "gray-matter": "^4.0.3", - "js-yaml": "^4.1.0", - "line-reader": "^0.4.0", - "moize": "^6.0.3", - "readdirp": "^3.6.0" - }, - "dependencies": { - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "requires": { - "argparse": "^2.0.1" - } - }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "requires": { - "picomatch": "^2.2.1" - } - } - } - }, + "@hashicorp/platform-nextjs-plugin": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@hashicorp/platform-nextjs-plugin/-/platform-nextjs-plugin-1.0.1.tgz", + "integrity": "sha512-gT26wGylFuAUuMHuQ57PRrrL414xWsqaVUfrvlcQcrOXUF9YsUjNnVAWo+JLoo9y37vpdOMhdEPWrwPxXoeItw==", + "dev": true, + "requires": { + "@hashicorp/next-optimized-images": "0.1.0", + "@next/bundle-analyzer": "10.0.3", + "imagemin-mozjpeg": "9.0.0", + "imagemin-optipng": "8.0.0", + "imagemin-svgo": "8.0.0", + "next-transpile-modules": "^8.0.0", + "postcss-normalize": "10.0.1" + }, + "dependencies": { + "next-transpile-modules": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/next-transpile-modules/-/next-transpile-modules-8.0.0.tgz", + "integrity": "sha512-Q2f2yB0zMJ8KJbIYAeZoIxG6cSfVk813zr6B5HzsLMBVcJ3FaF8lKr7WG66n0KlHCwjLSmf/6EkgI6QQVWHrDw==", + "dev": true, + "requires": { + "enhanced-resolve": "^5.7.0", + "escalade": "^3.1.1" + } + }, + "postcss-browser-comments": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-browser-comments/-/postcss-browser-comments-4.0.0.tgz", + "integrity": "sha512-X9X9/WN3KIvY9+hNERUqX9gncsgBA25XaeR+jshHz2j8+sYyHktHw1JdKuMjeLpGktXidqDhA7b/qm1mrBDmgg==", + "dev": true, + "requires": {} + }, + "postcss-normalize": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize/-/postcss-normalize-10.0.1.tgz", + "integrity": "sha512-+5w18/rDev5mqERcG3W5GZNMJa1eoYYNGo8gB7tEwaos0ajk3ZXAI4mHGcNT47NE+ZnZD1pEpUOFLvltIwmeJA==", + "dev": true, + "requires": { + "@csstools/normalize.css": "*", + "postcss-browser-comments": "^4", + "sanitize.css": "*" + } + } + } + }, + "@hashicorp/platform-product-meta": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@hashicorp/platform-product-meta/-/platform-product-meta-0.1.0.tgz", + "integrity": "sha512-UXAiYENDP8I0mD9+LNMyaCksUPthPRkxAIzg12SbERgx5kAjEaBCzYRHKXibL1dZpVQiRfs0i/0ieSw0mP2y+Q==", + "requires": { + "@hashicorp/platform-util": "^0.1.0" + } + }, + "@hashicorp/platform-runtime-error-monitoring": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@hashicorp/platform-runtime-error-monitoring/-/platform-runtime-error-monitoring-0.1.0.tgz", + "integrity": "sha512-G6YhBPIu9cPPE2j+uLVoCuamPzxrpEPi45B0ySa+1CTCUmG+3fswvPHXILbyr91ZtpuBsFg1nYJOBwlwEftHdg==", + "requires": { + "@bugsnag/js": "7.5.4", + "@bugsnag/plugin-react": "7.5.4" + } + }, + "@hashicorp/platform-types": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@hashicorp/platform-types/-/platform-types-0.1.1.tgz", + "integrity": "sha512-aQU6hyzBpMax7WoZKF6f/OkCER/SxsVn25RBVgU7JHxmebYJB4VfmDXAfa0TyKaPz2cDWPeOgc8MVezGVjouSw==", + "requires": { + "@types/segment-analytics": "^0.0.33" + } + }, + "@hashicorp/platform-util": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@hashicorp/platform-util/-/platform-util-0.1.0.tgz", + "integrity": "sha512-XGWmQnMThygQKUsB5fPfhWT2KIbAq3Zax1K7TiEarX7IrngpEk7oTpVUR0uEraZgpfsaOfhHGSilvBRZjCZ+Ew==", + "requires": { + "nprogress": "0.2.0" + } + }, + "@hashicorp/react-alert": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@hashicorp/react-alert/-/react-alert-6.0.2.tgz", + "integrity": "sha512-8ePxXMYR6kU0cYb4T3WZ74bInPQdbzfM4B+ZWqmW+raEpVAS2MTqDFl7X55L0syWx6JDbBmrlhzYaRzTDf6qug==", + "requires": { + "@hashicorp/platform-product-meta": "^0.1.0", + "classnames": "^2.3.1" + } + }, + "@hashicorp/react-alert-banner": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@hashicorp/react-alert-banner/-/react-alert-banner-7.0.1.tgz", + "integrity": "sha512-h6M9NhQQxDJZQwhrT1I+Rwfiko8yGsQGrTp6jF0XUrOnteok69SfuDfc0/Vv50aNG0029R4pnBvgK3e1Xc7TlQ==", + "requires": { + "@hashicorp/platform-product-meta": "^0.1.0", + "@hashicorp/react-inline-svg": "^6.0.3", + "@reach/visually-hidden": "^0.16.0", + "js-cookie": "^2.2.1", + "slugify": "^1.6.0" + }, + "dependencies": { + "slugify": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.0.tgz", + "integrity": "sha512-FkMq+MQc5hzYgM86nLuHI98Acwi3p4wX+a5BO9Hhw4JdK4L7WueIiZ4tXEobImPqBz2sVcV0+Mu3GRB30IGang==" + } + } + }, + "@hashicorp/react-button": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@hashicorp/react-button/-/react-button-6.0.3.tgz", + "integrity": "sha512-CRK93cWw5ap4tGGvMoyr/Ydvvz1Ie1RTyTdBhcpARlH7pCIAmvxHKMK+FCWXWGJNjpM9suKenXfdTJRfz7+KNw==", + "requires": { + "@hashicorp/platform-product-meta": "^0.1.0", + "@hashicorp/react-inline-svg": "^6.0.1", + "classnames": "^2.3.1", + "slugify": "^1.6.0" + }, + "dependencies": { + "slugify": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.0.tgz", + "integrity": "sha512-FkMq+MQc5hzYgM86nLuHI98Acwi3p4wX+a5BO9Hhw4JdK4L7WueIiZ4tXEobImPqBz2sVcV0+Mu3GRB30IGang==" + } + } + }, + "@hashicorp/react-code-block": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@hashicorp/react-code-block/-/react-code-block-4.4.2.tgz", + "integrity": "sha512-isnojue1SuTaq4jjh6C03jxVLCGmHaSK6D/m3OdEsUeV5PovZ7uNF9MFfhwHErIHKZztxOuIePepqaAB5sMHCw==", + "requires": { + "@hashicorp/react-inline-svg": "^6.0.3", + "@reach/listbox": "0.16.2", + "shellwords": "^0.1.1" + } + }, + "@hashicorp/react-command-line-terminal": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@hashicorp/react-command-line-terminal/-/react-command-line-terminal-2.0.4.tgz", + "integrity": "sha512-e3TLZHhvo6L+/YApp698nn/KuxEFWnTtJirIh5EzD6lxapxvLI3Ud8bd9l8T+c8NGsFOrotl96+9psD4eRe4pw==", + "requires": { + "@hashicorp/platform-product-meta": "^0.1.0" + } + }, + "@hashicorp/react-consent-manager": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@hashicorp/react-consent-manager/-/react-consent-manager-7.0.3.tgz", + "integrity": "sha512-AGeTVg7C7f6s4ahvN02hvt3SA09ilQIgf+4k05ctX0xOyOccWLNZL1/9h6BbYy+oVOZKYsPIVHkp2dyI6YKKKA==", + "requires": { + "@hashicorp/react-button": "^6.0.0", + "@hashicorp/react-toggle": "^4.0.1", + "classnames": "^2.3.1", + "js-cookie": "^2.2.1" + }, + "dependencies": { + "@hashicorp/react-toggle": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@hashicorp/react-toggle/-/react-toggle-4.0.1.tgz", + "integrity": "sha512-pPcFs3mlR7qt6j+bbfRnkxr1dEpTInuvLfYZ27L92uEcd83MBLcc+jp6c/idMuzHyLGSFU5aGqrAz5ufhLERZw==", + "requires": { + "classnames": "^2.3.1" + } + } + } + }, + "@hashicorp/react-content": { + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/@hashicorp/react-content/-/react-content-8.2.1.tgz", + "integrity": "sha512-qqyK1uejHfsrd+jRlTqQtJpihyUYGdeUottoFmsfPwvcs0Wy+r+AyzetknGiXYbflidjgM9pP6kw2PLtAMwoVQ==", + "requires": { + "@hashicorp/platform-product-meta": "^0.1.0", + "classnames": "^2.3.1" + } + }, + "@hashicorp/react-docs-page": { + "version": "14.14.3", + "resolved": "https://registry.npmjs.org/@hashicorp/react-docs-page/-/react-docs-page-14.14.3.tgz", + "integrity": "sha512-prRWKE/Ykr+LGouJgdYfxTOMrpjRQf72IJYFUrZx+wL+LV+bT5hFNyWiHgJWNKg7DCUMQreX7RNAidzNOoxc6g==", + "requires": { + "@hashicorp/platform-docs-mdx": "^0.1.4", + "@hashicorp/platform-markdown-utils": "^0.2.0", + "@hashicorp/react-alert": "^6.0.2", + "@hashicorp/react-content": "^8.2.1", + "@hashicorp/react-docs-sidenav": "^8.4.1", + "@hashicorp/react-head": "^3.1.2", + "@hashicorp/react-placeholder": "^0.1.0", + "@hashicorp/react-search": "^6.4.1", + "@hashicorp/react-version-select": "^0.3.0", + "classnames": "^2.3.1", + "fs-exists-sync": "^0.1.0", + "gray-matter": "^4.0.3", + "js-yaml": "^4.1.0", + "line-reader": "^0.4.0", + "moize": "^6.1.0", + "readdirp": "^3.6.0", + "semver": "^7.3.5" + }, + "dependencies": { + "@hashicorp/platform-markdown-utils": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@hashicorp/platform-markdown-utils/-/platform-markdown-utils-0.2.0.tgz", + "integrity": "sha512-xs/yiP/vcgvGX5wYggvYIhG4WTmTS3e5oUE7QuTtukOHcCN+HmN79z9xn8yCDnJ0GiAm51dv42lmCBiWj3JF6Q==", + "requires": { + "@hashicorp/platform-types": "^0.1.0", + "@hashicorp/remark-plugins": "^3.3.1", + "@mapbox/rehype-prism": "^0.6.0", + "@mdx-js/react": "1.6.22", + "rehype-katex": "^5.0.0", + "remark-math": "^4.0.0", + "remark-rehype": "^7.0.0" + } + }, + "@hashicorp/remark-plugins": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@hashicorp/remark-plugins/-/remark-plugins-3.3.1.tgz", + "integrity": "sha512-7xThpsBFWasdC/E+E/BAjHxMYqyCcQFiTVspvhBzN51meiQIacVCnyAox/lyvwWiP4N3Yj/ruH4UsR2ifskNeA==", + "requires": { + "@mdx-js/util": "1.6.22", + "github-slugger": "^1.3.0", + "remark": "12.0.1", + "remark-mdx": "1.6.22", + "to-vfile": "^6.1.0", + "unist-util-flatmap": "^1.0.0", + "unist-util-is": "^4.0.2", + "unist-util-map": "^2.0.1", + "unist-util-visit": "^2.0.3" + } + }, + "@mapbox/rehype-prism": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@mapbox/rehype-prism/-/rehype-prism-0.6.0.tgz", + "integrity": "sha512-/0Ev/PB4fXdKPT6VDzVpnAPxGpWFIc4Yz3mf/DzLEMxlpIPZpZlCzaFk4V4NGFofQXPc41+GpEcZtWP3VuFWVA==", + "requires": { + "hast-util-to-string": "^1.0.4", + "refractor": "^3.3.1", + "unist-util-visit": "^2.0.3" + } + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==" + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "requires": { + "argparse": "^2.0.1" + } + }, + "katex": { + "version": "0.13.24", + "resolved": "https://registry.npmjs.org/katex/-/katex-0.13.24.tgz", + "integrity": "sha512-jZxYuKCma3VS5UuxOx/rFV1QyGSl3Uy/i0kTJF3HgQ5xMinCQVF8Zd4bMY/9aI9b9A2pjIBOsjSSm68ykTAr8w==", + "requires": { + "commander": "^8.0.0" + } + }, + "mdast-util-definitions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-3.0.1.tgz", + "integrity": "sha512-BAv2iUm/e6IK/b2/t+Fx69EL/AGcq/IG2S+HxHjDJGfLJtd6i9SZUS76aC9cig+IEucsqxKTR0ot3m933R3iuA==", + "requires": { + "unist-util-visit": "^2.0.0" + } + }, + "mdast-util-to-hast": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-9.1.2.tgz", + "integrity": "sha512-OpkFLBC2VnNAb2FNKcKWu9FMbJhQKog+FCT8nuKmQNIKXyT1n3SIskE7uWDep6x+cA20QXlK5AETHQtYmQmxtQ==", + "requires": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "mdast-util-definitions": "^3.0.0", + "mdurl": "^1.0.0", + "unist-builder": "^2.0.0", + "unist-util-generated": "^1.0.0", + "unist-util-position": "^3.0.0", + "unist-util-visit": "^2.0.0" + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "requires": { + "picomatch": "^2.2.1" + } + }, + "rehype-katex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/rehype-katex/-/rehype-katex-5.0.0.tgz", + "integrity": "sha512-ksSuEKCql/IiIadOHiKRMjypva9BLhuwQNascMqaoGLDVd0k2NlE2wMvgZ3rpItzRKCd6vs8s7MFbb8pcR0AEg==", + "requires": { + "@types/katex": "^0.11.0", + "hast-util-to-text": "^2.0.0", + "katex": "^0.13.0", + "rehype-parse": "^7.0.0", + "unified": "^9.0.0", + "unist-util-visit": "^2.0.0" + } + }, + "remark-rehype": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-7.0.0.tgz", + "integrity": "sha512-uqQ/VbaTdxyu/da6npHAso6hA00cMqhA3a59RziQdOLN2KEIkPykAVy52IcmZEVTuauXO0VtpxkyCey4phtHzQ==", + "requires": { + "mdast-util-to-hast": "^9.1.0" + } + } + } + }, "@hashicorp/react-docs-sidenav": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/@hashicorp/react-docs-sidenav/-/react-docs-sidenav-8.4.0.tgz", - "integrity": "sha512-r2yFLuAD4+9RbPvBzWwcv7b9wrk1MooUJJMdLFP6WUUPYxt3r0Jju6/y4CubVUwtDnNCe3iqo3KoRmWrfNSS0Q==", + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/@hashicorp/react-docs-sidenav/-/react-docs-sidenav-8.4.1.tgz", + "integrity": "sha512-X7J19jCrcYiZEa7/ApMn6R5LFmDymJC1/sHSXpaMcXDIW5DD+H0DRYwJKVUPgdJDWhjZ5PXXWeDJTOKcQWBNog==", "requires": { "@hashicorp/platform-product-meta": "^0.1.0", "@hashicorp/react-link-wrap": "^3.0.3", @@ -23613,9 +24306,9 @@ "requires": {} }, "@hashicorp/react-product-downloads-page": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/@hashicorp/react-product-downloads-page/-/react-product-downloads-page-2.5.3.tgz", - "integrity": "sha512-SY3sEM/xYZDbd7XSDaqkT4L+DVRdGJYPpF/0WRDHfR0PObf2zE+iqRjm2APaIACg32sAM1NIZPuc+oQv6vKq5A==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/@hashicorp/react-product-downloads-page/-/react-product-downloads-page-2.7.0.tgz", + "integrity": "sha512-GAw+Ztq4Cr/GJ5kyL3HvpLzs2wtpTFrs0FGDp6TRXjAVgqgfqrQU3cJzthtwkvKAZBmgGmubpQf84bhtfgtvLA==", "requires": { "@hashicorp/platform-product-meta": "^0.1.0", "@hashicorp/react-button": "^6.0.0", @@ -23634,24 +24327,6 @@ "@reach/tooltip": "^0.16.0", "classnames": "^2.3.1" } - }, - "@reach/portal": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/@reach/portal/-/portal-0.16.0.tgz", - "integrity": "sha512-vXJ0O9T+72HiSEWHPs2cx7YbSO7pQsTMhgqPc5aaddIYpo2clJx1PnYuS0lSNlVaDO0IxQhwYq43evXaXnmviw==", - "requires": { - "@reach/utils": "0.16.0", - "tslib": "^2.3.0" - } - }, - "@reach/utils": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/@reach/utils/-/utils-0.16.0.tgz", - "integrity": "sha512-PCggBet3qaQmwFNcmQ/GqHSefadAFyNCUekq9RrWoaU9hh/S4iaFgf2MBMdM47eQj5i/Bk0Mm07cP/XPFlkN+Q==", - "requires": { - "tiny-warning": "^1.0.3", - "tslib": "^2.3.0" - } } } }, @@ -23666,24 +24341,109 @@ } }, "@hashicorp/react-search": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/@hashicorp/react-search/-/react-search-6.1.1.tgz", - "integrity": "sha512-azaXjFP/om+DN6InI/WD+qH9jmLE3/9pqIc2Dp4rYY/tn1KuWyJ5MefvcsbYxIFUVX/wiT2n+8HZFwRfxhdA+w==", + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/@hashicorp/react-search/-/react-search-6.4.1.tgz", + "integrity": "sha512-VoFdfjSCyhmbwNT2nB5+midHjZBy+mO5jXAWAzXbQjTvlBA6NEEgPNXnCLCniOKFouiEVSsn9TnqsWfJt41SqQ==", "requires": { - "@hashicorp/react-inline-svg": "^6.0.1", - "@hashicorp/remark-plugins": "^3.1.1", + "@hashicorp/react-inline-svg": "^6.0.3", + "@hashicorp/remark-plugins": "^3.3.1", "@reach/visually-hidden": "^0.16.0", - "algoliasearch": "^4.10.3", + "algoliasearch": "^4.12.0", "classnames": "^2.3.1", - "dotenv": "^10.0.0", - "glob": "^7.1.7", + "dotenv": "^14.3.1", + "glob": "^7.2.0", "gray-matter": "^4.0.3", - "react-instantsearch-dom": "^6.12.1", + "react-instantsearch-dom": "^6.21.1", "remark": "^13.0.0", "search-insights": "^1.7.1", "unist-util-visit": "^2.0.3" }, "dependencies": { + "@hashicorp/remark-plugins": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@hashicorp/remark-plugins/-/remark-plugins-3.3.1.tgz", + "integrity": "sha512-7xThpsBFWasdC/E+E/BAjHxMYqyCcQFiTVspvhBzN51meiQIacVCnyAox/lyvwWiP4N3Yj/ruH4UsR2ifskNeA==", + "requires": { + "@mdx-js/util": "1.6.22", + "github-slugger": "^1.3.0", + "remark": "12.0.1", + "remark-mdx": "1.6.22", + "to-vfile": "^6.1.0", + "unist-util-flatmap": "^1.0.0", + "unist-util-is": "^4.0.2", + "unist-util-map": "^2.0.1", + "unist-util-visit": "^2.0.3" + }, + "dependencies": { + "remark": { + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/remark/-/remark-12.0.1.tgz", + "integrity": "sha512-gS7HDonkdIaHmmP/+shCPejCEEW+liMp/t/QwmF0Xt47Rpuhl32lLtDV1uKWvGoq+kxr5jSgg5oAIpGuyULjUw==", + "requires": { + "remark-parse": "^8.0.0", + "remark-stringify": "^8.0.0", + "unified": "^9.0.0" + } + }, + "remark-parse": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-8.0.3.tgz", + "integrity": "sha512-E1K9+QLGgggHxCQtLt++uXltxEprmWzNfg+MxpfHsZlrddKzZ/hZyWHDbK3/Ap8HJQqYJRXP+jHczdL6q6i85Q==", + "requires": { + "ccount": "^1.0.0", + "collapse-white-space": "^1.0.2", + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-whitespace-character": "^1.0.0", + "is-word-character": "^1.0.0", + "markdown-escapes": "^1.0.0", + "parse-entities": "^2.0.0", + "repeat-string": "^1.5.4", + "state-toggle": "^1.0.0", + "trim": "0.0.1", + "trim-trailing-lines": "^1.0.0", + "unherit": "^1.0.4", + "unist-util-remove-position": "^2.0.0", + "vfile-location": "^3.0.0", + "xtend": "^4.0.1" + } + }, + "remark-stringify": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-8.1.1.tgz", + "integrity": "sha512-q4EyPZT3PcA3Eq7vPpT6bIdokXzFGp9i85igjmhRyXWmPs0Y6/d2FYwUNotKAWyLch7g0ASZJn/KHHcHZQ163A==", + "requires": { + "ccount": "^1.0.0", + "is-alphanumeric": "^1.0.0", + "is-decimal": "^1.0.0", + "is-whitespace-character": "^1.0.0", + "longest-streak": "^2.0.1", + "markdown-escapes": "^1.0.0", + "markdown-table": "^2.0.0", + "mdast-util-compact": "^2.0.0", + "parse-entities": "^2.0.0", + "repeat-string": "^1.5.4", + "state-toggle": "^1.0.0", + "stringify-entities": "^3.0.0", + "unherit": "^1.0.4", + "xtend": "^4.0.1" + } + } + } + }, + "glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, "remark": { "version": "13.0.0", "resolved": "https://registry.npmjs.org/remark/-/remark-13.0.0.tgz", @@ -23713,11 +24473,11 @@ } }, "@hashicorp/react-select-input": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@hashicorp/react-select-input/-/react-select-input-4.0.3.tgz", - "integrity": "sha512-HN7uy2acXOCNE2cz844da0V8JHesnCLjKXis7/n+PB9O6wLfSYblWYPoPLEPx83Ph0dQfAtUT8dsJ9v6S2TSiw==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@hashicorp/react-select-input/-/react-select-input-4.0.5.tgz", + "integrity": "sha512-iN7iq7HZTQh3sa3LViuXbS84Si5hL6eWOqXd4DHfWYcZuuwping88l8SwwPWtqr+HVDcFsRixpVuvOCwgQSX0Q==", "requires": { - "classnames": "^2.2.6", + "classnames": "^2.3.1", "downshift": "3.1.5" } }, @@ -23792,9 +24552,9 @@ "requires": {} }, "@hashicorp/react-version-select": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@hashicorp/react-version-select/-/react-version-select-0.2.1.tgz", - "integrity": "sha512-E7BW4FotIYq1S5d/GrUPH2NvXmzYmeNpM01wNThDEbes47RfT8nzN3dg64QOUdCvWoUcUaOlGMQHNychBTif2g==", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@hashicorp/react-version-select/-/react-version-select-0.3.0.tgz", + "integrity": "sha512-wd708z+ftdUkK+jKBLFHdHE3U4a0g37LTOxH9X68LzFDWPUT9gTAI5dPEfT0Os/DeJxWcRvUoaS8Fbtd7SQPmg==", "requires": { "@hashicorp/react-select-input": ">=4.x" } @@ -23826,6 +24586,23 @@ "unist-util-visit": "^2.0.3" } }, + "@humanwhocodes/config-array": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.3.tgz", + "integrity": "sha512-3xSMlXHh03hCcCmFc0rbKp3Ivt2PFEJnQUJDDMTJQ2wkECZWdq4GePs2ctc5H8zV+cHPaq8k2vU8mrQjA6iHdQ==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + } + }, + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, "@jest/types": { "version": "26.6.2", "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", @@ -23946,9 +24723,9 @@ "integrity": "sha512-5+vaeooJuWmICSlmVaAC8KG3O8hwKasACVfkHj58xQuCB5SW0TKW3hWxgxkBuefMBn1nM0yEVPKokXCsYjBtng==" }, "@next/eslint-plugin-next": { - "version": "11.1.2", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-11.1.2.tgz", - "integrity": "sha512-cN+ojHRsufr9Yz0rtvjv8WI5En0RPZRJnt0y16Ha7DD+0n473evz8i1ETEJHmOLeR7iPJR0zxRrxeTN/bJMOjg==", + "version": "12.0.10", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-12.0.10.tgz", + "integrity": "sha512-PbGRnV5HGSfRGLjf8uTh1MaWgLwnjKjWiGVjK752ifITJbZ28/5AmLAFT2shDYeux8BHgpgVll5QXu7GN3YLFw==", "dev": true, "requires": { "glob": "7.1.7" @@ -24071,44 +24848,44 @@ } }, "@reach/auto-id": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@reach/auto-id/-/auto-id-0.15.0.tgz", - "integrity": "sha512-iACaCcZeqAhDf4OOwJpmHHS/LaRj9z3Ip8JmlhpCrFWV2YOIiiZk42amlBZX6CKH66Md+eriYZQk3TyAjk6Oxg==", + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/@reach/auto-id/-/auto-id-0.16.0.tgz", + "integrity": "sha512-5ssbeP5bCkM39uVsfQCwBBL+KT8YColdnMN5/Eto6Rj7929ql95R3HZUOkKIvj7mgPtEb60BLQxd1P3o6cjbmg==", "requires": { - "@reach/utils": "0.15.0", - "tslib": "^2.1.0" + "@reach/utils": "0.16.0", + "tslib": "^2.3.0" } }, "@reach/descendants": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@reach/descendants/-/descendants-0.15.0.tgz", - "integrity": "sha512-MGs+7sGjx07sm29Wc2d/Ya72qwatNVHofnYwwHMT6LImv99kE5TQMCgkMSDeRwqQxHURmcjb4I7Tab+ahvCGiw==", + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/@reach/descendants/-/descendants-0.16.1.tgz", + "integrity": "sha512-3WZgRnD9O4EORKE31rrduJDiPFNMOjUkATx0zl192ZxMq3qITe4tUj70pS5IbJl/+v9zk78JwyQLvA1pL7XAPA==", "requires": { - "@reach/utils": "0.15.0", - "tslib": "^2.1.0" + "@reach/utils": "0.16.0", + "tslib": "^2.3.0" } }, "@reach/listbox": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@reach/listbox/-/listbox-0.15.0.tgz", - "integrity": "sha512-3Vvpte0HQkfo3sT4Cz6gG9h+E/La2IwbtLQDTesEmDzToQ8bk9rOfuFDVp7IXUyOdDggfDCOEz/ZphsuniADWA==", + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/@reach/listbox/-/listbox-0.16.2.tgz", + "integrity": "sha512-UBotBw7X8e2ajHn6tg1M9ArinisvSvwtu/aP3edEQKCvobd95nAa+dqnfAdihPAQFH2AQ2NFfa/73yawWV3LOQ==", "requires": { - "@reach/auto-id": "0.15.0", - "@reach/descendants": "0.15.0", - "@reach/machine": "0.15.0", - "@reach/popover": "0.15.0", - "@reach/utils": "0.15.0", + "@reach/auto-id": "0.16.0", + "@reach/descendants": "0.16.1", + "@reach/machine": "0.16.0", + "@reach/popover": "0.16.2", + "@reach/utils": "0.16.0", "prop-types": "^15.7.2" } }, "@reach/machine": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@reach/machine/-/machine-0.15.0.tgz", - "integrity": "sha512-o3vvqsTQyj7apxpbSuIn4xKYlqNagcjhlMnroJ2uqgJfFwy1tLrsQo4Sr8GnZu4hitPbNAfqGExYjV8ZV8SHpA==", + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/@reach/machine/-/machine-0.16.0.tgz", + "integrity": "sha512-c8SRQz2xGtg5M9aXuuM5pFgaV1ZW5/nyMIYpZzBwHUlNFKGO+VBhwedbnqUxO0yLcbgl3wPvjPh740O3YjqiHg==", "requires": { - "@reach/utils": "0.15.0", + "@reach/utils": "0.16.0", "@xstate/fsm": "1.4.0", - "tslib": "^2.1.0" + "tslib": "^2.3.0" } }, "@reach/observe-rect": { @@ -24117,101 +24894,61 @@ "integrity": "sha512-Ba7HmkFgfQxZqqaeIWWkNK0rEhpxVQHIoVyW1YDSkGsGIXzcaW4deC8B0pZrNSSyLTdIk7y+5olKt5+g0GmFIQ==" }, "@reach/popover": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@reach/popover/-/popover-0.15.0.tgz", - "integrity": "sha512-nBR6ZlULF7ZZIqkN47QEWmdqUX2Zd6FSeYJku1il9OkiMnWzI3aTOyu1B+IJfYeIqg28D/aeF4ff0oVu1VUrqQ==", + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/@reach/popover/-/popover-0.16.2.tgz", + "integrity": "sha512-IwkRrHM7Vt33BEkSXneovymJv7oIToOfTDwRKpuYEB/BWYMAuNfbsRL7KVe6MjkgchDeQzAk24cYY1ztQj5HQQ==", "requires": { - "@reach/portal": "0.15.0", - "@reach/rect": "0.15.0", - "@reach/utils": "0.15.0", + "@reach/portal": "0.16.2", + "@reach/rect": "0.16.0", + "@reach/utils": "0.16.0", "tabbable": "^4.0.0", - "tslib": "^2.1.0" + "tslib": "^2.3.0" } }, "@reach/portal": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@reach/portal/-/portal-0.15.0.tgz", - "integrity": "sha512-Aulqjk/PIRu+R7yhINYAAYfYh++ZdC30qwHDWDtGk2cmTEJT7m9AlvBX+W7T+Q3Ux6Wy5f37eV+TTGid1CcjFw==", + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/@reach/portal/-/portal-0.16.2.tgz", + "integrity": "sha512-9ur/yxNkuVYTIjAcfi46LdKUvH0uYZPfEp4usWcpt6PIp+WDF57F/5deMe/uGi/B/nfDweQu8VVwuMVrCb97JQ==", "requires": { - "@reach/utils": "0.15.0", - "tslib": "^2.1.0" + "@reach/utils": "0.16.0", + "tiny-warning": "^1.0.3", + "tslib": "^2.3.0" } }, "@reach/rect": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@reach/rect/-/rect-0.15.0.tgz", - "integrity": "sha512-Nu0zG4Xq8Z0C3Yr3wbjtj7fvII1q2KopHDStNtmL26oWPzlaZJ9A1K6rZSPIqxKkx1hvl6AUTeom7eHTIKhHjA==", + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/@reach/rect/-/rect-0.16.0.tgz", + "integrity": "sha512-/qO9jQDzpOCdrSxVPR6l674mRHNTqfEjkaxZHluwJ/2qGUtYsA0GSZiF/+wX/yOWeBif1ycxJDa6HusAMJZC5Q==", "requires": { "@reach/observe-rect": "1.2.0", - "@reach/utils": "0.15.0", + "@reach/utils": "0.16.0", "prop-types": "^15.7.2", "tiny-warning": "^1.0.3", - "tslib": "^2.1.0" + "tslib": "^2.3.0" } }, "@reach/tooltip": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/@reach/tooltip/-/tooltip-0.16.0.tgz", - "integrity": "sha512-kZr/OqfmmBQVBxJh+OQRCq++T5f6iQaWinpLnwD5FlG5HRKPwNzTnsy+hpyY9pR2mabk+96POp/TsT4Dv3K/qQ==", + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/@reach/tooltip/-/tooltip-0.16.2.tgz", + "integrity": "sha512-wtJPnbJ6l4pmudMpQHGU9v1NS4ncDgcwRNi9re9KsIdsM525zccZvHQLteBKYiaW4ib7k09t2dbwhyNU9oa0Iw==", "requires": { "@reach/auto-id": "0.16.0", - "@reach/portal": "0.16.0", + "@reach/portal": "0.16.2", "@reach/rect": "0.16.0", "@reach/utils": "0.16.0", "@reach/visually-hidden": "0.16.0", "prop-types": "^15.7.2", "tiny-warning": "^1.0.3", "tslib": "^2.3.0" - }, - "dependencies": { - "@reach/auto-id": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/@reach/auto-id/-/auto-id-0.16.0.tgz", - "integrity": "sha512-5ssbeP5bCkM39uVsfQCwBBL+KT8YColdnMN5/Eto6Rj7929ql95R3HZUOkKIvj7mgPtEb60BLQxd1P3o6cjbmg==", - "requires": { - "@reach/utils": "0.16.0", - "tslib": "^2.3.0" - } - }, - "@reach/portal": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/@reach/portal/-/portal-0.16.0.tgz", - "integrity": "sha512-vXJ0O9T+72HiSEWHPs2cx7YbSO7pQsTMhgqPc5aaddIYpo2clJx1PnYuS0lSNlVaDO0IxQhwYq43evXaXnmviw==", - "requires": { - "@reach/utils": "0.16.0", - "tslib": "^2.3.0" - } - }, - "@reach/rect": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/@reach/rect/-/rect-0.16.0.tgz", - "integrity": "sha512-/qO9jQDzpOCdrSxVPR6l674mRHNTqfEjkaxZHluwJ/2qGUtYsA0GSZiF/+wX/yOWeBif1ycxJDa6HusAMJZC5Q==", - "requires": { - "@reach/observe-rect": "1.2.0", - "@reach/utils": "0.16.0", - "prop-types": "^15.7.2", - "tiny-warning": "^1.0.3", - "tslib": "^2.3.0" - } - }, - "@reach/utils": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/@reach/utils/-/utils-0.16.0.tgz", - "integrity": "sha512-PCggBet3qaQmwFNcmQ/GqHSefadAFyNCUekq9RrWoaU9hh/S4iaFgf2MBMdM47eQj5i/Bk0Mm07cP/XPFlkN+Q==", - "requires": { - "tiny-warning": "^1.0.3", - "tslib": "^2.3.0" - } - } } }, "@reach/utils": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@reach/utils/-/utils-0.15.0.tgz", - "integrity": "sha512-JHHN7T5ucFiuQbqkgv8ECbRWKfRiJxrO/xHR3fHf+f2C7mVs/KkJHhYtovS1iEapR4silygX9PY0+QUmHPOTYw==", + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/@reach/utils/-/utils-0.16.0.tgz", + "integrity": "sha512-PCggBet3qaQmwFNcmQ/GqHSefadAFyNCUekq9RrWoaU9hh/S4iaFgf2MBMdM47eQj5i/Bk0Mm07cP/XPFlkN+Q==", "requires": { "tiny-warning": "^1.0.3", - "tslib": "^2.1.0" + "tslib": "^2.3.0" } }, "@reach/visually-hidden": { @@ -24224,9 +24961,9 @@ } }, "@rushstack/eslint-patch": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.0.7.tgz", - "integrity": "sha512-3Zi2LGbCLDz4IIL7ir6wD0u/ggHotLkK5SlVzFzTcYaNgPR4MAt/9JYZqXWKcofPWEoptfpnCJU8Bq9sxw8QUg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.1.0.tgz", + "integrity": "sha512-JLo+Y592QzIE+q7Dl2pMUtt4q8SKYI5jDrZxrozEQxnGVOyYE+GWK9eLkwTaeN9DDctlaRAQ3TBmzZ1qdLE30A==", "dev": true }, "@segment/in-eu": { @@ -24288,6 +25025,30 @@ "tippy.js": "^5.1.1" } }, + "@tsconfig/node10": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz", + "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==", + "dev": true + }, + "@tsconfig/node12": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz", + "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==", + "dev": true + }, + "@tsconfig/node14": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz", + "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==", + "dev": true + }, + "@tsconfig/node16": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz", + "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==", + "dev": true + }, "@types/hast": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.1.tgz", @@ -24321,9 +25082,9 @@ } }, "@types/json-schema": { - "version": "7.0.8", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.8.tgz", - "integrity": "sha512-YSBPTLTVm2e2OoQIDYx8HaeWJ5tTToLH67kXR7zYNGupXMEHa2++G8k+DczX2cFVgalypqtyZIcU19AFcmOpmg==" + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", + "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==" }, "@types/json5": { "version": "0.0.29", @@ -24469,6 +25230,28 @@ "@typescript-eslint/visitor-keys": "4.9.1" } }, + "@typescript-eslint/type-utils": { + "version": "5.10.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.10.2.tgz", + "integrity": "sha512-uRKSvw/Ccs5FYEoXW04Z5VfzF2iiZcx8Fu7DGIB7RHozuP0VbKNzP1KfZkHBTM75pCpsWxIthEH1B33dmGBKHw==", + "dev": true, + "requires": { + "@typescript-eslint/utils": "5.10.2", + "debug": "^4.3.2", + "tsutils": "^3.21.0" + }, + "dependencies": { + "debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + } + } + }, "@typescript-eslint/types": { "version": "4.9.1", "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.9.1.tgz", @@ -24489,6 +25272,103 @@ "tsutils": "^3.17.1" } }, + "@typescript-eslint/utils": { + "version": "5.10.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.10.2.tgz", + "integrity": "sha512-vuJaBeig1NnBRkf7q9tgMLREiYD7zsMrsN1DA3wcoMDvr3BTFiIpKjGiYZoKPllfEwN7spUjv7ZqD+JhbVjEPg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "@typescript-eslint/scope-manager": "5.10.2", + "@typescript-eslint/types": "5.10.2", + "@typescript-eslint/typescript-estree": "5.10.2", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + }, + "dependencies": { + "@typescript-eslint/scope-manager": { + "version": "5.10.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.10.2.tgz", + "integrity": "sha512-39Tm6f4RoZoVUWBYr3ekS75TYgpr5Y+X0xLZxXqcZNDWZdJdYbKd3q2IR4V9y5NxxiPu/jxJ8XP7EgHiEQtFnw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.10.2", + "@typescript-eslint/visitor-keys": "5.10.2" + } + }, + "@typescript-eslint/types": { + "version": "5.10.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.10.2.tgz", + "integrity": "sha512-Qfp0qk/5j2Rz3p3/WhWgu4S1JtMcPgFLnmAKAW061uXxKSa7VWKZsDXVaMXh2N60CX9h6YLaBoy9PJAfCOjk3w==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "5.10.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.10.2.tgz", + "integrity": "sha512-WHHw6a9vvZls6JkTgGljwCsMkv8wu8XU8WaYKeYhxhWXH/atZeiMW6uDFPLZOvzNOGmuSMvHtZKd6AuC8PrwKQ==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.10.2", + "@typescript-eslint/visitor-keys": "5.10.2", + "debug": "^4.3.2", + "globby": "^11.0.4", + "is-glob": "^4.0.3", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "5.10.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.10.2.tgz", + "integrity": "sha512-zHIhYGGGrFJvvyfwHk5M08C5B5K4bewkm+rrvNTKk1/S15YHR+SA/QUF8ZWscXSfEaB8Nn2puZj+iHcoxVOD/Q==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.10.2", + "eslint-visitor-keys": "^3.0.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.2.0.tgz", + "integrity": "sha512-IOzT0X126zn7ALX0dwFiUQEdsfzrm4+ISsQS8nukaJXwEyYKRSnEIIDULYg1mCtGp7UUXgfGl7BIolXREQK+XQ==", + "dev": true + } + } + }, + "debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^2.0.0" + } + }, + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "requires": { + "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" + } + } + } + }, "@typescript-eslint/visitor-keys": { "version": "4.9.1", "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.9.1.tgz", @@ -24573,39 +25453,32 @@ "requires": {} }, "algoliasearch": { - "version": "4.10.5", - "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.10.5.tgz", - "integrity": "sha512-KmH2XkiN+8FxhND4nWFbQDkIoU6g2OjfeU9kIv4Lb+EiOOs3Gpp7jvd+JnatsCisAZsnWQdjd7zVlW7I/85QvQ==", - "requires": { - "@algolia/cache-browser-local-storage": "4.10.5", - "@algolia/cache-common": "4.10.5", - "@algolia/cache-in-memory": "4.10.5", - "@algolia/client-account": "4.10.5", - "@algolia/client-analytics": "4.10.5", - "@algolia/client-common": "4.10.5", - "@algolia/client-personalization": "4.10.5", - "@algolia/client-search": "4.10.5", - "@algolia/logger-common": "4.10.5", - "@algolia/logger-console": "4.10.5", - "@algolia/requester-browser-xhr": "4.10.5", - "@algolia/requester-common": "4.10.5", - "@algolia/requester-node-http": "4.10.5", - "@algolia/transporter": "4.10.5" + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.12.1.tgz", + "integrity": "sha512-c0dM1g3zZBJrkzE5GA/Nu1y3fFxx3LCzxKzcmp2dgGS8P4CjszB/l3lsSh2MSrrK1Hn/KV4BlbBMXtYgG1Bfrw==", + "requires": { + "@algolia/cache-browser-local-storage": "4.12.1", + "@algolia/cache-common": "4.12.1", + "@algolia/cache-in-memory": "4.12.1", + "@algolia/client-account": "4.12.1", + "@algolia/client-analytics": "4.12.1", + "@algolia/client-common": "4.12.1", + "@algolia/client-personalization": "4.12.1", + "@algolia/client-search": "4.12.1", + "@algolia/logger-common": "4.12.1", + "@algolia/logger-console": "4.12.1", + "@algolia/requester-browser-xhr": "4.12.1", + "@algolia/requester-common": "4.12.1", + "@algolia/requester-node-http": "4.12.1", + "@algolia/transporter": "4.12.1" } }, "algoliasearch-helper": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.6.0.tgz", - "integrity": "sha512-F4Smiq+Vyv/JJytuKNFuzXndPSb4pjtiHZSkEztQCcB+SORu71A8grgt2NSJhbB5VhqHW19QDtlPKbdYdcNrLg==", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.7.0.tgz", + "integrity": "sha512-XJ3QfERBLfeVCyTVx80gon7r3/rgm/CE8Ha1H7cbablRe/X7SfYQ14g/eO+MhjVKIQp+gy9oC6G5ilmLwS1k6w==", "requires": { - "events": "^1.1.1" - }, - "dependencies": { - "events": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", - "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=" - } + "@algolia/events": "^4.0.1" } }, "anser": { @@ -24675,6 +25548,12 @@ } } }, + "arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -24718,15 +25597,15 @@ "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" }, "array-includes": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.3.tgz", - "integrity": "sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.4.tgz", + "integrity": "sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==", "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", + "es-abstract": "^1.19.1", "get-intrinsic": "^1.1.1", - "is-string": "^1.0.5" + "is-string": "^1.0.7" } }, "array-union": { @@ -24745,25 +25624,24 @@ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" }, "array.prototype.flat": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz", - "integrity": "sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz", + "integrity": "sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg==", "dev": true, "requires": { - "call-bind": "^1.0.0", + "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1" + "es-abstract": "^1.19.0" } }, "array.prototype.flatmap": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz", - "integrity": "sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.5.tgz", + "integrity": "sha512-08u6rVyi1Lj7oqWbS9nUxliETrtIROT4XGTA4D/LWGten6E3ocm7cy9SIrmNHOL5XVbVuckUp3X6Xyg8/zpvHA==", "requires": { "call-bind": "^1.0.0", "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1", - "function-bind": "^1.1.1" + "es-abstract": "^1.19.0" } }, "arrify": { @@ -24936,9 +25814,9 @@ "integrity": "sha512-SA5mXJWrId1TaQjfxUYghbqQ/hYioKmLJvPJyDuYRtXXenFNMjj4hSSt1Cf1xsuXSXrtxrVC5Ot4eU6cOtBDdA==" }, "axe-core": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.3.1.tgz", - "integrity": "sha512-3WVgVPs/7OnKU3s+lqMtkv3wQlg3WxK1YifmpJSDO0E1aPBrZWlrrTO6cxRqCXLuX2aYgCljqXIQd0VnRidV0g==" + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.4.0.tgz", + "integrity": "sha512-btWy2rze3NnxSSxb7LtNhPYYFrRoFBfjiGzmSc/5Hu47wApO2KNXjP/w7Nv2Uz/Fyr/pfEiwOkcXhDxu0jz5FA==" }, "axobject-query": { "version": "2.2.0", @@ -26327,6 +27205,12 @@ "sha.js": "^2.4.8" } }, + "create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, "cross-fetch": { "version": "3.1.4", "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.4.tgz", @@ -26974,6 +27858,12 @@ "repeat-string": "^1.5.4" } }, + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true + }, "diffie-hellman": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", @@ -27051,9 +27941,9 @@ } }, "dotenv": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", - "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==" + "version": "14.3.2", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-14.3.2.tgz", + "integrity": "sha512-vwEppIphpFdvaMCaHfCEv9IgwcxMljMw2TnAQBB4VWPvzXQLTb82jwmdOKzlEVUL3gNFT4l4TPKO+Bn+sqcrVQ==" }, "download": { "version": "6.2.5", @@ -27226,21 +28116,25 @@ } }, "es-abstract": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", - "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", + "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", "requires": { "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", "has": "^1.0.3", "has-symbols": "^1.0.2", - "is-callable": "^1.2.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.3", - "is-string": "^1.0.6", - "object-inspect": "^1.10.3", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.1", + "is-string": "^1.0.7", + "is-weakref": "^1.0.1", + "object-inspect": "^1.11.0", "object-keys": "^1.1.1", "object.assign": "^4.1.2", "string.prototype.trimend": "^1.0.4", @@ -27369,14 +28263,27 @@ } } }, + "eslint-import-resolver-typescript": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.5.0.tgz", + "integrity": "sha512-qZ6e5CFr+I7K4VVhQu3M/9xGv9/YmwsEXrsm3nimw8vWaVHRDrQRp26BgCypTxBp3vUp4o5aVEJRiy0F2DFddQ==", + "dev": true, + "requires": { + "debug": "^4.3.1", + "glob": "^7.1.7", + "is-glob": "^4.0.1", + "resolve": "^1.20.0", + "tsconfig-paths": "^3.9.0" + } + }, "eslint-module-utils": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.2.tgz", - "integrity": "sha512-QG8pcgThYOuqxupd06oYTZoNOGaUdTY1PqK+oS6ElF6vs4pBdk/aYxFVQQXzcrAqp9m7cl7lb2ubazX+g16k2Q==", + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz", + "integrity": "sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==", "dev": true, "requires": { "debug": "^3.2.7", - "pkg-dir": "^2.0.0" + "find-up": "^2.1.0" }, "dependencies": { "debug": { @@ -27436,15 +28343,53 @@ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", "dev": true + } + } + }, + "eslint-plugin-import": { + "version": "2.25.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.25.4.tgz", + "integrity": "sha512-/KJBASVFxpu0xg1kIBn9AUa8hQVnszpwgE7Ld0lKAlx7Ie87yzEzCgSkekt+le/YVhiaosO4Y14GDAOc41nfxA==", + "dev": true, + "requires": { + "array-includes": "^3.1.4", + "array.prototype.flat": "^1.2.5", + "debug": "^2.6.9", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-module-utils": "^2.7.2", + "has": "^1.0.3", + "is-core-module": "^2.8.0", + "is-glob": "^4.0.3", + "minimatch": "^3.0.4", + "object.values": "^1.1.5", + "resolve": "^1.20.0", + "tsconfig-paths": "^3.12.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } }, - "pkg-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", - "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "requires": { - "find-up": "^2.1.0" + "esutils": "^2.0.2" } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true } } }, @@ -27509,6 +28454,13 @@ } } }, + "eslint-plugin-react-hooks": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.3.0.tgz", + "integrity": "sha512-XslZy0LnMn+84NEG9jSGR6eGqaZB3133L8xewQo3fQagbQuGt7a63gf+P1NGKZavEYEC3UXaWEAA/AqDkuN6xA==", + "dev": true, + "requires": {} + }, "eslint-scope": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", @@ -27978,14 +28930,14 @@ "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==" }, "fast-equals": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-2.0.3.tgz", - "integrity": "sha512-0EMw4TTUxsMDpDkCg0rXor2gsg+npVrMIHbEhvD0HZyIhUX6AktC/yasm+qKwfyswd06Qy95ZKk8p2crTo0iPA==" + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-2.0.4.tgz", + "integrity": "sha512-caj/ZmjHljPrZtbzJ3kfH5ia/k4mTJe/qSiXAGzxZWRZgsgDV0cvNaQULqUX8t0/JVlzzEdYOwCN5DmzTxoD4w==" }, "fast-glob": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", - "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", "requires": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -28335,6 +29287,15 @@ "pump": "^3.0.0" } }, + "get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, "get-value": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", @@ -28562,6 +29523,14 @@ "has-symbol-support-x": "^1.4.1" } }, + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "requires": { + "has-symbols": "^1.0.2" + } + }, "has-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", @@ -28896,9 +29865,9 @@ "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" }, "ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==" + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==" }, "image-size": { "version": "1.0.0", @@ -29406,9 +30375,9 @@ "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==" }, "is-callable": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", - "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==" + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==" }, "is-ci": { "version": "2.0.0", @@ -29420,9 +30389,9 @@ } }, "is-core-module": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.7.0.tgz", - "integrity": "sha512-ByY+tjCciCr+9nLryBYcSD50EOGWt95c7tIsKTG1J2ixKKXPvF7Ej3AVd+UfDydAJom3biBGDBALaO79ktwgEQ==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", + "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", "requires": { "has": "^1.0.3" } @@ -29508,9 +30477,9 @@ "integrity": "sha512-ZJ34p1uvIfptHCN7sFTjGibB9/oBg17sHqzDLfuwhvmN/qLVvIQXRQ8licZQ35WJ8KuEQt/etnnzQFI9C9Ue/A==" }, "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "requires": { "is-extglob": "^2.1.1" } @@ -29590,12 +30559,12 @@ "integrity": "sha512-4KPGizaVGj2LK7xwJIz8o5B2ubu1D/vcQsgOGFEDlpcvgZHto4gBnyd0ig7Ws+67ixmwKoNmu0hYnpo6AaKb5g==" }, "is-regex": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", - "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "requires": { "call-bind": "^1.0.2", - "has-symbols": "^1.0.2" + "has-tostringtag": "^1.0.0" } }, "is-regexp": { @@ -29608,15 +30577,23 @@ "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==" }, + "is-shared-array-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", + "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==" + }, "is-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==" }, "is-string": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", - "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==" + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "requires": { + "has-tostringtag": "^1.0.0" + } }, "is-svg": { "version": "4.3.1", @@ -29669,6 +30646,14 @@ "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" }, + "is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "requires": { + "call-bind": "^1.0.2" + } + }, "is-whitespace-character": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz", @@ -29895,11 +30880,11 @@ "integrity": "sha512-8hfl5RD6P7rEeIbzStBz3h4f+BQHfq/ABtoU6gXKQv5OcZhnmrIpG7e1pYaZ8hS9e0mp+bxUj08fnDUbKctYyA==" }, "jsx-ast-utils": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.0.tgz", - "integrity": "sha512-EIsmt3O3ljsU6sot/J4E1zDRxfBNrhjyf/OKjlydwgEimQuznlM4Wv7U+ueONJMyEn1WRE0K8dhi3dVAXYT24Q==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.1.tgz", + "integrity": "sha512-uP5vu8xfy2F9A6LGC22KO7e2/vGTS1MhP+18f++ZNlf0Ohaxbc9nIEwHAsejlJKyzfZzU5UIhe5ItYkitcZnZA==", "requires": { - "array-includes": "^3.1.2", + "array-includes": "^3.1.3", "object.assign": "^4.1.2" } }, @@ -30069,6 +31054,12 @@ "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=" }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, "lodash.sortby": { "version": "4.7.0", "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", @@ -31290,24 +32281,23 @@ } }, "object.entries": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.4.tgz", - "integrity": "sha512-h4LWKWE+wKQGhtMjZEBud7uLGhqyLwj8fpHOarZhD2uY3C9cRtk57VQ89ke3moByLXMedqs3XCHzyb4AmA2DjA==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz", + "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==", "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.18.2" + "es-abstract": "^1.19.1" } }, "object.fromentries": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.4.tgz", - "integrity": "sha512-EsFBshs5RUUpQEY1D4q/m59kMfz4YJvxuNCJcv/jWwOJr34EaVnG11ZrZa0UHB3wnzV1wx8m58T4hQL8IuNXlQ==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.5.tgz", + "integrity": "sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==", "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "has": "^1.0.3" + "es-abstract": "^1.19.1" } }, "object.getownpropertydescriptors": { @@ -31321,13 +32311,13 @@ } }, "object.hasown": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.0.0.tgz", - "integrity": "sha512-qYMF2CLIjxxLGleeM0jrcB4kiv3loGVAjKQKvH8pSU/i2VcRRvUNmxbD+nEMmrXRfORhuVJuH8OtSYCZoue3zA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.0.tgz", + "integrity": "sha512-MhjYRfj3GBlhSkDHo6QmvgjRLXQ2zndabdf3nX0yTyZK9rPfxb6uRpAac8HXNLy1GpqWtZ81Qh4v3uOls2sRAg==", "dev": true, "requires": { "define-properties": "^1.1.3", - "es-abstract": "^1.18.1" + "es-abstract": "^1.19.1" } }, "object.pick": { @@ -31346,13 +32336,13 @@ } }, "object.values": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.4.tgz", - "integrity": "sha512-TnGo7j4XSnKQoK3MfvkzqKCi0nVe/D9I9IjwTNYdb/fxYHpjrluHVOgw0AF6jrRFGMPHdfuidR09tIDiIvnaSg==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", + "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.18.2" + "es-abstract": "^1.19.1" } }, "on-finished": { @@ -31768,66 +32758,6 @@ "find-up": "^4.0.0" } }, - "pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz", - "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=", - "dev": true, - "requires": { - "find-up": "^2.1.0" - }, - "dependencies": { - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - } - } - }, "platform": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/platform/-/platform-1.3.6.tgz", @@ -35231,27 +36161,27 @@ "integrity": "sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA==" }, "react-instantsearch-core": { - "version": "6.12.1", - "resolved": "https://registry.npmjs.org/react-instantsearch-core/-/react-instantsearch-core-6.12.1.tgz", - "integrity": "sha512-X4OqakDI3DOcFiS1S46z+cciKEQcKBmH8HGQLztzW14hoHRqFfZzuqWydlSxfJZN5WksMMm78EmL2jvoqIHd/A==", + "version": "6.21.1", + "resolved": "https://registry.npmjs.org/react-instantsearch-core/-/react-instantsearch-core-6.21.1.tgz", + "integrity": "sha512-be4+J9sOA2cR+uYi4vGvZGC4u19Rs379UtOzv0JBNSUD8hDSxewhxqovqhJRhMH6y5RKw7EFYQUYp9bHxj01rw==", "requires": { "@babel/runtime": "^7.1.2", - "algoliasearch-helper": "^3.5.3", + "algoliasearch-helper": "^3.7.0", "prop-types": "^15.6.2", "react-fast-compare": "^3.0.0" } }, "react-instantsearch-dom": { - "version": "6.12.1", - "resolved": "https://registry.npmjs.org/react-instantsearch-dom/-/react-instantsearch-dom-6.12.1.tgz", - "integrity": "sha512-KXk2UDmJ3OP9B57owPC0+7fdcVtmYAA6/UWimR9CXhvFGCMi11xlR/wscYMYxdPuxs9IkmnnLDIJSjSGADYnow==", + "version": "6.21.1", + "resolved": "https://registry.npmjs.org/react-instantsearch-dom/-/react-instantsearch-dom-6.21.1.tgz", + "integrity": "sha512-3f7VrKW4L1jnah51UbRitDMcfFIl6FoLSc2JmCF9qND2nbDh/NlZvcT45BPxbCYnK4qNc2HJFx0ipe+zoGbNtA==", "requires": { "@babel/runtime": "^7.1.2", - "algoliasearch-helper": "^3.5.3", + "algoliasearch-helper": "^3.7.0", "classnames": "^2.2.5", "prop-types": "^15.6.2", "react-fast-compare": "^3.0.0", - "react-instantsearch-core": "^6.12.1" + "react-instantsearch-core": "6.21.1" } }, "react-is": { @@ -36501,13 +37431,13 @@ } }, "string.prototype.matchall": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.5.tgz", - "integrity": "sha512-Z5ZaXO0svs0M2xd/6By3qpeKpLKd9mO4v4q3oMEQrk8Ck4xOD5d5XeBOOjGrmVZZ/AHB1S0CgG4N5r1G9N3E2Q==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.6.tgz", + "integrity": "sha512-6WgDX8HmQqvEd7J+G6VtAahhsQIssiZ8zl7zKh1VDMFyL3hRTJP4FTNA3RbIp2TOQ9AYNDcc7e3fH0Qbup+DBg==", "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.18.2", + "es-abstract": "^1.19.1", "get-intrinsic": "^1.1.1", "has-symbols": "^1.0.2", "internal-slot": "^1.0.3", @@ -37704,15 +38634,49 @@ } } }, + "ts-node": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.4.0.tgz", + "integrity": "sha512-g0FlPvvCXSIO1JDF6S232P5jPYqBkRL9qly81ZgAOSU7rwI0stphCgd2kLiCrU9DjQCrJMWEqcNSjQL02s6d8A==", + "dev": true, + "requires": { + "@cspotcode/source-map-support": "0.7.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "yn": "3.1.1" + }, + "dependencies": { + "acorn": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", + "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", + "dev": true + }, + "acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true + } + } + }, "ts-pnp": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.2.0.tgz", "integrity": "sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==" }, "tsconfig-paths": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.11.0.tgz", - "integrity": "sha512-7ecdYDnIdmv639mmDwslG6KQg1Z9STTz1j7Gcz0xa+nshh/gKDAHcPxRbWOsA3SPp0tXP2leTcY9Kw+NAkfZzA==", + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.12.0.tgz", + "integrity": "sha512-e5adrnOYT6zqVnWqZu7i/BQ3BnhzvGbjEjejFXO20lKIKpwTaupkCPgEfv4GZK1IBciJUEhYs3J3p75FdaTFVg==", "dev": true, "requires": { "@types/json5": "^0.0.29", @@ -38429,6 +39393,12 @@ "fd-slicer": "~1.1.0" } }, + "yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true + }, "yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", diff --git a/website/package.json b/website/package.json index bb361727bd8..96ded222d79 100644 --- a/website/package.json +++ b/website/package.json @@ -15,12 +15,12 @@ "@hashicorp/react-button": "^6.0.1", "@hashicorp/react-command-line-terminal": "^2.0.4", "@hashicorp/react-consent-manager": "^7.0.3", - "@hashicorp/react-docs-page": "^14.4.2", + "@hashicorp/react-docs-page": "^14.14.3", "@hashicorp/react-hashi-stack-menu": "^2.1.2", "@hashicorp/react-head": "^3.1.2", "@hashicorp/react-inline-svg": "^6.0.3", "@hashicorp/react-markdown-page": "^1.4.3", - "@hashicorp/react-product-downloads-page": "^2.5.3", + "@hashicorp/react-product-downloads-page": "^2.7.0", "@hashicorp/react-product-features-list": "^5.0.0", "@hashicorp/react-search": "^6.1.1", "@hashicorp/react-section-header": "^5.0.4", @@ -38,13 +38,14 @@ "react-dom": "^17.0.2" }, "devDependencies": { - "@hashicorp/platform-cli": "^1.2.0", + "@hashicorp/platform-cli": "^2.0.0", "@hashicorp/platform-nextjs-plugin": "^1.0.1", "@hashicorp/platform-types": "^0.1.1", "@types/react": "^17.0.3", "dart-linkcheck": "2.0.15", "husky": "4.3.5", "prettier": "2.2.1", + "ts-node": "^10.4.0", "typescript": "^4.3.5" }, "husky": { diff --git a/website/pages/_document.js b/website/pages/_document.js index 43130228999..7d7c349a79a 100644 --- a/website/pages/_document.js +++ b/website/pages/_document.js @@ -14,7 +14,7 @@ export default class MyDocument extends Document {