diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 12c5981..69d0971 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -95,7 +95,7 @@ jobs: breaking: false push: false archive: false - comment: false + pr_comment: false test-format: runs-on: ubuntu-latest needs: build @@ -112,7 +112,7 @@ jobs: breaking: false push: false archive: false - comment: false + pr_comment: false test-breaking: runs-on: ubuntu-latest needs: build @@ -130,7 +130,7 @@ jobs: breaking_against: . push: false archive: false - comment: false + pr_comment: false test-comment: runs-on: ubuntu-latest if: github.event_name == 'pull_request' @@ -158,13 +158,13 @@ jobs: breaking_against: . push: false archive: false - comment: true + pr_comment: true - uses: actions/github-script@v7 with: script: | const expectedComment = `The latest Buf updates on your PR. -
NameStatus
build✅ passed
format❌ failed
breaking✅ passed
+
NameStatus
build✅ passed
lint⏩ skipped
format❌ failed
breaking✅ passed
` const commentTag = ""; const { owner, repo } = context.repo; @@ -231,7 +231,7 @@ jobs: breaking: false push: true archive: false - comment: false + pr_comment: false test-push-token-only: needs: build runs-on: ubuntu-latest @@ -252,7 +252,7 @@ jobs: breaking: false push: true archive: false - comment: false + pr_comment: false test-push-unnamed: needs: build runs-on: ubuntu-latest @@ -272,7 +272,7 @@ jobs: breaking: false push: true archive: false - comment: false + pr_comment: false # Test v1 buf.yaml config. - run: | rm -rf proto @@ -287,7 +287,7 @@ jobs: breaking: false push: true archive: false - comment: false + pr_comment: false input: proto # Test v2 with multiple modules, one without a name. - env: @@ -306,7 +306,7 @@ jobs: breaking: false push: true archive: false - comment: false + pr_comment: false test-archive: if: github.event_name == 'push' && github.ref_name != github.event.repository.default_branch runs-on: ubuntu-latest @@ -331,38 +331,8 @@ jobs: breaking: false push: false archive: true - # On push github.ref_name, on delete github.event.ref_name. - archive_labels: ${{ github.ref_name }} - comment: false - test-archive-name: - # Check the archive command parses non-module names. - runs-on: ubuntu-latest - needs: - - test-push - - test-push-token-only - - test-push-unnamed - steps: - - uses: actions/checkout@v4 - - env: - BUF_USERNAME: ${{ secrets.BUF_USERNAME }} - run: | - mkdir -p foo/v1 - printf "version: v2\nname: ${BUF_MODULE}\n" > buf.yaml - printf "syntax = \"proto3\";\npackage foo.v1;\nmessage Bar {}\n" > foo/v1/bar.proto - - uses: ./ - with: - username: ${{ secrets.BUF_USERNAME }} - token: ${{ secrets.BUF_TOKEN }} - lint: false - format: false - breaking: false - push: true # Push to re-create. - push_git_metadata: false - push_labels: ${{ github.event.ref }}-root-name - archive: true # Archive the pushed module. - archive_labels: ${{ github.event.ref }}-root-name - comment: false - test-archive-not-exists: + pr_comment: false + test-archive-unnamed: if: github.event_name == 'push' runs-on: ubuntu-latest needs: @@ -371,70 +341,54 @@ jobs: - test-push-unnamed steps: - uses: actions/checkout@v4 - - env: - BUF_USERNAME: ${{ secrets.BUF_USERNAME }} - run: | + - run: | mkdir -p proto/foo/v1 - printf "version: v2\nmodules:\n - path: proto\n name: ${BUF_MODULE}\n" > buf.yaml + printf "version: v2\nmodules:\n - path: proto\n" > buf.yaml printf "syntax = \"proto3\";\npackage foo.v1;\nmessage Bar {}\n" > proto/foo/v1/bar.proto - uses: ./ with: - username: ${{ secrets.BUF_USERNAME }} token: ${{ secrets.BUF_TOKEN }} lint: false format: false breaking: false push: false archive: true - archive_labels: label_does_not_exist - comment: false + pr_comment: false + - run: | + rm -rf proto + mkdir -p proto/foo/v1 + printf "version: v1\n" > proto/buf.yaml + printf "syntax = \"proto3\";\npackage foo.v1;\nmessage Bar {}\n" > proto/foo/v1/bar.proto - uses: ./ with: - username: ${{ secrets.BUF_USERNAME }} token: ${{ secrets.BUF_TOKEN }} lint: false format: false breaking: false push: false archive: true - archive_labels: | - label_does_not_exist - label_does_not_exist_either - comment: false - test-archive-unnamed: - if: github.event_name == 'push' + pr_comment: false + input: proto + test-archive-root: + # Check the archive command parses non-module names. runs-on: ubuntu-latest needs: - - test-push - - test-push-token-only - - test-push-unnamed + - test-archive steps: - uses: actions/checkout@v4 - - run: | - mkdir -p proto/foo/v1 - printf "version: v2\nmodules:\n - path: proto\n" > buf.yaml - printf "syntax = \"proto3\";\npackage foo.v1;\nmessage Bar {}\n" > proto/foo/v1/bar.proto - - uses: ./ - with: - token: ${{ secrets.BUF_TOKEN }} - lint: false - format: false - breaking: false - push: false - archive: true - comment: false - - run: | - rm -rf proto - mkdir -p proto/foo/v1 - printf "version: v1\n" > proto/buf.yaml - printf "syntax = \"proto3\";\npackage foo.v1;\nmessage Bar {}\n" > proto/foo/v1/bar.proto + - env: + BUF_USERNAME: ${{ secrets.BUF_USERNAME }} + run: | + mkdir -p foo/v1 + printf "version: v2\nname: ${BUF_MODULE}\n" > buf.yaml + printf "syntax = \"proto3\";\npackage foo.v1;\nmessage Bar {}\n" > foo/v1/bar.proto - uses: ./ with: + username: ${{ secrets.BUF_USERNAME }} token: ${{ secrets.BUF_TOKEN }} lint: false format: false breaking: false - push: false - archive: true + push: true # Push to re-create. + archive: true # Archive the pushed module. comment: false - input: proto diff --git a/README.md b/README.md index b720b66..cae4192 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ This GitHub action makes it easy to run [`buf`][buf] within a workflow to check [lint](https://buf.build/docs/lint/overview), [format](https://buf.build/docs/format/style), and [breaking change](https://buf.build/docs/breaking/overview) errors, -as well as to automatically [publish schema changes](https://buf.build/docs/bsr/module/publish) to a public or private instance of the [Buf Schema Registry](https://buf.build/product/bsr). +as well as to automatically [publish schema changes](https://buf.build/docs/bsr/module/publish) to the [Buf Schema Registry (BSR)](https://buf.build/product/bsr). ![Annotations example for lint and breaking changes](./static/img/annotations-example.png "Annotations example") @@ -42,31 +42,72 @@ jobs: token: ${{ secrets.BUF_TOKEN }} ``` -See [action.yml](action.yml) for all options. - ### Default behavior -The default behavior of this action is the recommended workflow for a GitHub repository that contains Protobuf files. +When you push a Git commit, tag, or branch to GitHub, the action will [push named modules to the BSR](https://buf.build/docs/bsr/module/publish) using `buf push`. + +On a pull request, the action will run all checks (using `buf build`, `buf lint`, `buf format`, `buf breaking`) and then post a [summary comment](#summary-comment) on the PR. + +When you delete a Git branch or tag, the action will archive the corresponding label on the BSR. -| GitHub action event | Default behavior | `buf` commands | -| - | - | - | -| [`push`][push-event] | Modules that are configured with a BSR name are [pushed to the BSR](https://buf.build/docs/bsr/module/publish) every time a new Git commit, tag, or branch is pushed to GitHub. | `buf push` | -| [`pull_request`][pull-request-event] | Run all checks and post (or update) a [summary comment](#summary-comment) on the PR every time the PR is updated. Errors are added as annotations on the PR. | `buf build`
`buf lint`
`buf format`
`buf breaking` | -| [`delete`][delete-event] | Archive the corresponding label on the BSR every time a Git branch or tag is deleted from GitHub. | `buf beta registry archive --label` | -### Skipping steps +### Configuration -The default configuration makes it possible to skip lint, formatting, or breaking change checks on a PR -by adding a label with a (case-insensitive) special name to that PR. +To customize the behavior of the action, you can set the following parameters in the workflow file. +Add these parameters under the `with` section of the `uses` step in the workflow file. + +```yaml +- uses: bufbuild/buf-action@v0.1 + with: + ... +``` -- `buf skip breaking`: skips breaking change detection. -- `buf skip lint`: skips lint. -- `buf skip format`: skips format. +| Parameter | Description | Default | +|:--------------------------------|:---------------------------------------------------|:-------------------| +| `version` | Version of the `buf` CLI to use. | Latest [version][buf-releases] | +| `username` | Username for [logging into the BSR](https://buf.build/docs/bsr/authentication). | | +| `token` | API token for [logging into the BSR](https://buf.build/docs/bsr/authentication). | | +| `domain` | Domain for logging into the BSR, enterprise only.| `buf.build` | +| `input` | [Input](https://buf.build/docs/reference/inputs) for the `buf` command. | | +| `paths` | Limit to specific files or directories (separated by newlines). | | +| `exclude_imports` | Exclude files imported by the target modules. | False | +| `exclude_paths` | Exclude specific files or directories, e.g. "proto/a/a.proto", "proto/a" (separated by newlines). | | +| `pr_comment` | Comment the results on the pull request. | Only on pull requests | +| `format` | Whether to run the formatting step. | Runs on pushes to Git PR | +| `lint` | Whether to run the linting step. | Runs on pushes to Git PR | +| `breaking` | Whether to run the breaking change detection step. | Runs on pushes to Git PR | +| `breaking_against` | [Input](https://buf.build/docs/reference/inputs) to compare against. | Base of the PR or the commit before the event | +| `push` | Whether to run the push step. | Runs on Git pushes | +| `push_disable_create` | Disables repository creation if it does not exist. | False | +| `archive` | Whether to run the archive step. | Runs on Git deletes | +| `setup_only` | Setup only the `buf` environment, optionally logging into the BSR, but without executing other commands. | | + + +### Skip the breaking change detection step + +By default, the action runs the breaking change detection step on every pull request. +To skip this step, add the label `buf skip breaking` to the PR. + +![Skip breaking changes example](./static/img/skip-breaking-example.png "Skip breaking changes example") Ensure the workflow file includes the `pull_request` event types `labeled` and `unlabeled` so checks re-run on label changes. -To disable this behaviour, override the action inputs `breaking`, `lint`, and `format`. + +To disable the ability to skip breaking change checks via a label, set the `breaking` parameter to the value `${{ github.event_name == 'pull_request' }}` so it runs on all PRs. See [examples/disable-skip/buf-ci.yaml](examples/disable-skip/buf-ci.yaml) for an example. +### Disable steps + +To disable parts of the workflow, each step corresponds to a boolean flag in the parameters. +For example to disable formatting set the parameter `format` to `false`: + +```yaml +- uses: bufbuild/buf-action@v0.1 + with: + format: false +``` + +See [action.yml](action.yml) for all available parameters. + ### Versioning For reproducible builds, you can pin to an explicit version of `buf` by setting `version`. @@ -77,21 +118,21 @@ For reproducible builds, you can pin to an explicit version of `buf` by setting version: 1.34.0 ``` -If no version is specified in the workflow config, the action will resolve the version in order of precendence: +If no version is specified in the workflow config, the action will resolve the version in order of precedence: - A version specified in the environment variable `${BUF_VERSION}`. - The version of `buf` that is already installed on the runner (if it exists). - The latest version of the `buf` binary from the official releases on GitHub. ### Authentication -[Publishing schemas](https://buf.build/docs/bsr/module/publish) to the Buf Schema Registry (BSR) provides a seamless +[Publishing schemas](https://buf.build/docs/bsr/module/publish) to the BSR provides a seamless way for consumers of your APIs to generate code. Authenticating with the BSR is required for both the push and archive label steps. -To authenticate with the BSR, set the inputs `username` and `token`. +To authenticate with the BSR, set the parameters `username` and `token`. The `username` and `token` values should be [stored as secrets in the repository settings](https://docs.github.com/en/actions/security-guides/using-secrets-in-github-actions). -The `token` value can be [generated from the Buf Schema Registry UI](https://buf.build/docs/bsr/authentication#create-an-api-token). +The `token` value can be [generated from the BSR UI](https://buf.build/docs/bsr/authentication#create-an-api-token). ```yaml - uses: bufbuild/buf-action@v0.1 @@ -100,7 +141,7 @@ The `token` value can be [generated from the Buf Schema Registry UI](https://buf token: ${{ secrets.BUF_TOKEN }} ``` -For more information on authentication, see the [Buf Schema Registry Authentication Reference](https://buf.build/docs/bsr/authentication). +For more information on authentication, see the [BSR Authentication Reference](https://buf.build/docs/bsr/authentication). ### Summary comment @@ -108,7 +149,7 @@ The action reports the status of the most recent checks in a comment on each pul ![Comment example showing the GitHub summary](./static/img/comment-example.png "Summary comment example") -To disable the comment, set the input `comment` to `false` and remove the permission `pull_request: write` as this is no longer required. +To disable the comment, set the parameter `comment` to `false` and remove the permission `pull_request: write` as this is no longer required. ```diff name: Buf CI @@ -129,27 +170,32 @@ jobs: with: username: ${{ secrets.BUF_USERNAME }} token: ${{ secrets.BUF_TOKEN }} -+ comment: false ++ pr_comment: false ``` -### Specify input directory +### Specify the input directory -To run the action for inputs not specified at the root of the repository, -set the input `input` to the path of your `buf.yaml` directory. +To run the action for parameters not declared at the root of the repository, +set the parameter `input` to the directory of your `buf.yaml` file. + +```yaml +- uses: bufbuild/buf-action@v0.1 + with: + input: +``` -Breaking change detection will also need to be configured with the correct value for `breaking_against`. -If you are using a URL, add the `subdir` parameter to match `input`. +Breaking change detection by default will use the `input` value as a subdirectory for the breaking against value. +To customize this behavior, set the parameter `breaking_against` to the desired input. ```yaml - uses: bufbuild/buf-action@v0.1 with: - input: protos - breaking_against: | - ${{ github.event.repository.clone_url }}#format=git,commit=${{ github.event.pull_request.base.sha }},subdir=protos + input: + breaking_against: ${{ github.event.repository.clone_url }}#format=git,commit=${{ github.event.pull_request.base.sha }},subdir= ``` Alternatively, you can checkout the base for the breaking comparison to a local folder -and then set the value of `breaking_against` to point to that local folder. +and then set the value of `breaking_against` to the path of the base. ```yaml - uses: actions/checkout@v4 @@ -161,15 +207,15 @@ and then set the value of `breaking_against` to point to that local folder. ref: ${{ github.event.pull_request.base.sha }} - uses: bufbuild/buf-action@v0.1 with: - input: head/protos - breaking_against: base/protos + input: head/ + breaking_against: base/ ``` For more information on inputs, see the [Buf Inputs Reference](https://buf.build/docs/reference/inputs). ### Setup only -To only setup the action without running any commands, set the input `setup_only` to `true`. +To only setup the action without running any commands, set the parameter `setup_only` to `true`. This will install `buf` and optionally login to the schema registry but no additional commands will be run. Subsequent steps will have `buf` available in their $PATH and can invoke `buf` directly. @@ -182,23 +228,10 @@ Subsequent steps will have `buf` available in their $PATH and can invoke `buf` d See the [only-setup.yaml](examples/only-setup/buf-ci.yaml) example. -### Skip steps - -To skip or disable parts of the workflow, each step corresponds to a boolean flag in the input. -For example to disable formatting set the input `format` to `false`: - -```yaml -- uses: bufbuild/buf-action@v0.1 - with: - format: false -``` - -See [action.yml](action.yml) for all available inputs. - ### Customize when steps run To trigger steps on different events use the GitHub action context to deduce the event type. -For example to enable formatting checks on both pull requests and push create an expression for the input `format`: +For example to enable formatting checks on both pull requests and push create an expression for the parameter `format`: ```yaml - uses: bufbuild/buf-action@v0.1 @@ -208,10 +241,10 @@ For example to enable formatting checks on both pull requests and push create an See [GitHub Actions expressions](https://docs.github.com/en/actions/learn-github-actions/expressions) documentation. -### Skip checks on commit messages +### Skip checks if commit message matches a specific pattern To conditionally run checks based on user input, use the GitHub action context to check for the contents of the commit. -For example to disable breaking change detection on commits, create an expression on the input `breaking` to check the contents of the commit message: +For example to disable breaking change detection on commits, create an expression on the parameter `breaking` to check the contents of the commit message: ```yaml - uses: bufbuild/buf-action@v0.1 @@ -223,9 +256,9 @@ For example to disable breaking change detection on commits, create an expressio See [GitHub Actions job context](https://docs.github.com/en/actions/reference/context-and-expression-syntax-for-github-actions#job-context) documentation. -### Only push on changes +### Only push on changes to APIs -To push only on changes to the protos, restrict the push step for any changes to buf releated files. +To push only on changes to when your module changes, restrict the push step for any changes to `buf` related files. This can be achieved by using the `paths` filter on the `push` event. ```yaml @@ -241,27 +274,6 @@ push: See the [push-on-changes.yaml](examples/push-on-changes/buf-ci.yaml) example. -### Verify generated files are up-to-date - -If your project uses local code generation, we recommend checking for diffs on pull requests. -This isn't available as a built-in step because generating code may require manual setup, but can easily be added by invoking `buf`. - -To check that generated files match committed protobuf files, run the `buf generate` command and then `git diff`. -If differences exist, `git diff` returns a non-zero exit code with the `--exit-code` flag. - -```yaml -- name: Run buf generate - run: | - buf generate --error-format github-actions - git diff --exit-code gen -``` - -#### Builtin protoc plugins - -Some projects require the use of builtin `protoc` plugins, such as `protoc-gen-cpp`. -To use these plugins, please additionaly install `protoc` such as with the action -[`setup-protoc`](https://github.com/marketplace/actions/setup-protoc). - ### Example workflows Check out the [examples](examples) directory for more detailed workflows. @@ -272,7 +284,7 @@ If you're currently using any of our individual actions ([buf-setup-action][buf-setup], [buf-breaking-action][buf-breaking], [buf-lint-action][buf-lint], [buf-push-action][buf-push]), we recommend migrating to this consolidated action that has additional capabilities. Benefits to migrating include: - Less configuration and setup, with built-in best practices. -- Enhanced integration with Git data when pushing to the Buf Schema Registry (BSR). +- Enhanced integration with Git data when pushing to the BSR. - Status comments on pull requests. - Easy configuration for custom behavior. @@ -295,6 +307,7 @@ Offered under the [Apache 2 license][license]. [buf-cli]: https://github.com/bufbuild/buf [buf-lint]: https://github.com/marketplace/actions/buf-lint [buf-push]: https://github.com/marketplace/actions/buf-push +[buf-releases]: https://github.com/bufbuild/buf/releases [ci]: https://github.com/bufbuild/buf-action/actions/workflows/ci.yaml [license]: https://github.com/bufbuild/bufisk/blob/main/LICENSE [slack]: https://buf.build/links/slack diff --git a/action.yml b/action.yml index 905d024..2ba22a6 100644 --- a/action.yml +++ b/action.yml @@ -1,4 +1,4 @@ -# Copyright 2020-2024 Buf Technologies, Inc. +# Copyright 2024 Buf Technologies, Inc. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -31,15 +31,15 @@ inputs: required: false username: description: |- - Username for logging into the Buf Schema Registry. + Username for logging into the BSR. required: false token: description: |- - API token for logging into the Buf Schema Registry. + API token for logging into the BSR. required: false domain: description: |- - Domain for logging into the Buf Schema Registry. + Domain for logging into the BSR, enterprise only. required: false default: "buf.build" github_actor: @@ -57,9 +57,9 @@ inputs: Setup only the buf environment, optionally logging into the BSR, but without executing other commands. required: false default: "false" - comment: + pr_comment: description: |- - Comment on the pull request with the results of the lint, format, and breaking steps. + Comment on the pull request with the results of each step. required: false default: ${{ github.event_name == 'pull_request' }} @@ -67,16 +67,6 @@ inputs: description: |- Input for the buf command. required: false - config: - description: |- - Path to buf.yaml or data to use for configuration. - required: false - disable_symlinks: - description: |- - Disables following symlinks when reading sources or configuration from the local filesystem. - By default, symlinks are followed by buf, but never followed on the Buf Schema Registry. - required: false - default: "false" paths: description: |- Limit to specific files or directories (separated by newlines). @@ -97,27 +87,27 @@ inputs: required: false exclude_imports: description: |- - Excludes imports. + Exclude files imported by the target modules. required: false default: "false" lint: description: |- Whether to run the linting step. - Runs by default on pull requests if the "buf skip lint" label is not applied. + Runs by default on pull requests. required: false - default: ${{ github.event_name == 'pull_request' && !contains(github.event.pull_request.labels.*.name, 'buf skip lint') }} + default: ${{ github.event_name == 'pull_request' }} format: description: |- Whether to run the formatting step. - Runs by default on pull requests if the "buf skip format" label is not applied. + Runs by default on pull requests. required: false - default: ${{ github.event_name == 'pull_request' && !contains(github.event.pull_request.labels.*.name, 'buf skip format') }} + default: ${{ github.event_name == 'pull_request' }} breaking: description: |- - Whether to run breaking change detection. + Whether to run the breaking change detection step. Runs by default on pull requests if the "buf skip breaking" label is not applied. required: false default: ${{ github.event_name == 'pull_request' && !contains(github.event.pull_request.labels.*.name, 'buf skip breaking') }} @@ -126,71 +116,23 @@ inputs: Input to compare against for breaking change detection. Defaults to the base branch of the pull request or the commit before the push. required: false - default: ${{ github.event.repository.clone_url }}#format=git,commit=${{ github.event.pull_request.base.sha || github.event.before }} - breaking_against_config: - description: |- - Path to buf.yaml or data to use for the against configuration. - required: false - breaking_limit_to_input_files: - description: |- - Only run breaking checks against the files in the input. - When set, the "breaking_against" input contains only the files in the input. - Overrides path. - required: false - default: "false" push: description: |- Whether to run the push step. Runs by default on pushes. required: false default: ${{ github.event_name == 'push' }} - push_create: - description: |- - Create the repository if it does not exist. - required: false - default: "true" - push_create_visibility: + push_disable_create: description: |- - Repository's visibility setting if created. - Must be either "public" or "private". - required: false - push_labels: - description: |- - Associates the labels with the pushed modules (separated by newlines). - Labels are added in addition to the default labels from "--git-metadata". - Example: - with: - push_labels: | - label1 - label2 - required: false - push_git_metadata: - description: |- - Set additional git metadata for the push using "--git-metadata". - Defaults to true. - required: false - default: "true" - push_source_control_url: - description: |- - Set the source control URL for the pushed modules. + Disables repository creation if it does not exist. Defaults to false. required: false + default: "false" archive: description: |- Whether to run the archive step. Runs by default on deletes. required: false default: ${{ github.event_name == 'delete' }} - archive_labels: - description: |- - Labels to archive (separated by newlines). - Example: - with: - archive_labels: | - label1 - label2 - required: false - default: | - ${{ github.event.ref }} outputs: buf_version: diff --git a/dist/index.js b/dist/index.js index 38485d6..1bc8789 100644 --- a/dist/index.js +++ b/dist/index.js @@ -37517,8 +37517,6 @@ var core = __nccwpck_require__(2186); var exec = __nccwpck_require__(1514); // EXTERNAL MODULE: ./node_modules/@actions/github/lib/github.js var lib_github = __nccwpck_require__(5438); -// EXTERNAL MODULE: ./node_modules/semver/index.js -var semver = __nccwpck_require__(1383); ;// CONCATENATED MODULE: ./node_modules/@bufbuild/protobuf/dist/esm/service-type.js // Copyright 2021-2024 Buf Technologies, Inc. // @@ -45377,20 +45375,18 @@ const LabelService = { // See the License for the specific language governing permissions and // limitations under the License. + // getInputs decodes the inputs from the environment variables. function getInputs() { - return { + const inputs = { version: core.getInput("version"), username: core.getInput("username"), token: core.getInput("token") || getEnv("BUF_TOKEN"), domain: core.getInput("domain"), - github_token: core.getInput("github_token"), setup_only: core.getBooleanInput("setup_only"), - comment: core.getBooleanInput("comment"), + pr_comment: core.getBooleanInput("pr_comment"), // Inputs shared between buf steps. input: core.getInput("input"), - config: core.getInput("config"), - disable_symlinks: core.getBooleanInput("disable_symlinks"), paths: core.getMultilineInput("paths"), exclude_paths: core.getMultilineInput("exclude_paths"), exclude_imports: core.getBooleanInput("exclude_imports"), @@ -45399,17 +45395,36 @@ function getInputs() { format: core.getBooleanInput("format"), breaking: core.getBooleanInput("breaking"), breaking_against: core.getInput("breaking_against"), - breaking_against_config: core.getInput("breaking_against_config"), - breaking_limit_to_input_files: core.getBooleanInput("breaking_limit_to_input_files"), push: core.getBooleanInput("push"), - push_create: core.getBooleanInput("push_create"), - push_create_visibility: core.getInput("push_create_visibility"), - push_labels: core.getMultilineInput("push_labels"), - push_git_metadata: core.getBooleanInput("push_git_metadata"), - push_source_control_url: core.getInput("push_source_control_url"), + push_disable_create: core.getBooleanInput("push_disable_create"), archive: core.getBooleanInput("archive"), - archive_labels: core.getMultilineInput("archive_labels"), + archive_labels: [], }; + if (lib_github.context.eventName === "push") { + const event = lib_github.context.payload; + if (inputs.breaking_against === "") { + inputs.breaking_against = `${event.repository.clone_url}#format=git,commit=${event.before}`; + if (inputs.input) { + inputs.breaking_against += `,subdir=${inputs.input}`; + } + } + inputs.archive_labels.push(lib_github.context.ref); + } + if (lib_github.context.eventName === "pull_request") { + const event = lib_github.context.payload; + if (inputs.breaking_against === "") { + inputs.breaking_against = `${event.repository.clone_url}#format=git,commit=${event.pull_request.base.sha}`; + if (inputs.input) { + inputs.breaking_against += `,subdir=${inputs.input}`; + } + } + inputs.archive_labels.push(lib_github.context.ref); + } + if (lib_github.context.eventName === "delete") { + const event = lib_github.context.payload; + inputs.archive_labels.push(event.ref); + } + return inputs; } // getEnv returns the case insensitive value of the environment variable. // Prefers the lowercase version of the variable if it exists. @@ -45439,6 +45454,8 @@ var Outputs; // EXTERNAL MODULE: ./node_modules/@actions/tool-cache/lib/tool-cache.js var tool_cache = __nccwpck_require__(7784); +// EXTERNAL MODULE: ./node_modules/semver/index.js +var semver = __nccwpck_require__(1383); ;// CONCATENATED MODULE: ./src/installer.ts // Copyright 2024 Buf Technologies, Inc. // @@ -45697,11 +45714,10 @@ function parseModuleName(moduleName) { - // main is the entrypoint for the action. async function main() { const inputs = getInputs(); - const github = (0,lib_github.getOctokit)(inputs.github_token); + const github = (0,lib_github.getOctokit)(core.getInput("github_token")); const [bufPath, bufVersion] = await installBuf(github, inputs.version); core.setOutput(Outputs.BufVersion, bufVersion); await login(bufPath, inputs); @@ -45710,11 +45726,11 @@ async function main() { return; } // Run the buf workflow. - const steps = await runWorkflow(bufPath, bufVersion, inputs); + const steps = await runWorkflow(bufPath, inputs); // Create a summary of the steps. const summary = createSummary(inputs, steps); // Comment on the PR with the summary, if requested. - if (inputs.comment) { + if (inputs.pr_comment) { await commentOnPR(lib_github.context, github, summary.stringify()); } // Write the summary to a file defined by GITHUB_STEP_SUMMARY. @@ -45739,13 +45755,10 @@ function createSummary(inputs, steps) { { data: "Status", header: true }, ], ["build", message(steps.build?.status)], + ["lint", message(steps.lint?.status)], + ["format", message(steps.format?.status)], + ["breaking", message(steps.breaking?.status)], ]; - if (inputs.lint) - table.push(["lint", message(steps.lint?.status)]); - if (inputs.format) - table.push(["format", message(steps.format?.status)]); - if (inputs.breaking) - table.push(["breaking", message(steps.breaking?.status)]); if (inputs.push) table.push(["push", message(steps.push?.status)]); if (inputs.archive) @@ -45756,7 +45769,7 @@ function createSummary(inputs, steps) { // First, it builds the input. If the build fails, the workflow stops. // Next, it runs lint, format, and breaking checks. If any of these fail, the workflow stops. // Finally, it pushes or archives the label to the registry. -async function runWorkflow(bufPath, bufVersion, inputs) { +async function runWorkflow(bufPath, inputs) { const steps = {}; steps.build = await build(bufPath, inputs); if (steps.build.status == Status.Failed) { @@ -45774,7 +45787,7 @@ async function runWorkflow(bufPath, bufVersion, inputs) { return steps; } const moduleNames = await parseModuleNames(bufPath, inputs.input); - steps.push = await push(bufPath, bufVersion, inputs, moduleNames); + steps.push = await push(bufPath, inputs, moduleNames); steps.archive = await archive(inputs, moduleNames); return steps; } @@ -45799,12 +45812,6 @@ async function build(bufPath, inputs) { if (inputs.input) { args.push(inputs.input); } - if (inputs.config != "") { - args.push("--config", inputs.config); - } - if (inputs.disable_symlinks) { - args.push("--disable-symlinks"); - } for (const path of inputs.paths) { args.push("--path", path); } @@ -45826,12 +45833,6 @@ async function lint(bufPath, inputs) { if (inputs.input) { args.push(inputs.input); } - if (inputs.config != "") { - args.push("--config", inputs.config); - } - if (inputs.disable_symlinks) { - args.push("--disable-symlinks"); - } for (const path of inputs.paths) { args.push("--path", path); } @@ -45856,12 +45857,6 @@ async function format(bufPath, inputs) { if (inputs.input) { args.push(inputs.input); } - if (inputs.config) { - args.push("--config", inputs.config); - } - if (inputs.disable_symlinks) { - args.push("--disable-symlinks"); - } for (const path of inputs.paths) { args.push("--path", path); } @@ -45886,15 +45881,6 @@ async function breaking(bufPath, inputs) { if (inputs.input) { args.push(inputs.input); } - if (inputs.breaking_against_config) { - args.push("--against-config", inputs.breaking_against_config); - } - if (inputs.config) { - args.push("--config", inputs.config); - } - if (inputs.disable_symlinks) { - args.push("--disable-symlinks"); - } for (const path of inputs.paths) { args.push("--path", path); } @@ -45907,7 +45893,7 @@ async function breaking(bufPath, inputs) { return run(bufPath, args); } // push runs the "buf push" step. -async function push(bufPath, bufVersion, inputs, moduleNames) { +async function push(bufPath, inputs, moduleNames) { if (!inputs.push) { core.debug("Skipping push"); return skip(); @@ -45916,32 +45902,19 @@ async function push(bufPath, bufVersion, inputs, moduleNames) { core.debug("Skipping push, no named modules detected"); return skip(); } - const args = ["push", "--error-format", "github-actions"]; - // Add --exclude-unnamed on buf versions that support the flag. - if (semver.satisfies(bufVersion, ">=1.33.0")) { - args.push("--exclude-unnamed"); + const args = [ + "push", + "--error-format", + "github-actions", + "--exclude-unnamed", + "--git-metadata", + ]; + if (!inputs.push_disable_create) { + args.push("--create"); } if (inputs.input) { args.push(inputs.input); } - if (inputs.push_create) { - args.push("--create"); - if (inputs.push_create_visibility) { - args.push("--create-visibility", inputs.push_create_visibility); - } - } - if (inputs.push_git_metadata) { - args.push("--git-metadata"); - } - if (inputs.push_source_control_url) { - args.push("--source-control-url", inputs.push_source_control_url); - } - if (inputs.disable_symlinks) { - args.push("--disable-symlinks"); - } - for (const label of inputs.push_labels) { - args.push("--label", label); - } return run(bufPath, args); } // archive runs the "buf archive" step. diff --git a/examples/disable-skip/buf-ci.yaml b/examples/disable-skip/buf-ci.yaml index 98b33ae..0a125dd 100644 --- a/examples/disable-skip/buf-ci.yaml +++ b/examples/disable-skip/buf-ci.yaml @@ -19,6 +19,4 @@ jobs: with: username: ${{ secrets.BUF_USERNAME }} token: ${{ secrets.BUF_TOKEN }} - lint: ${{ github.event_name == 'pull_request' }} - format: ${{ github.event_name == 'pull_request' }} breaking: ${{ github.event_name == 'pull_request' }} diff --git a/package-lock.json b/package-lock.json index 881180f..10871a9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,9 +13,10 @@ "@actions/exec": "^1.1.1", "@actions/github": "^6.0.0", "@actions/tool-cache": "^2.0.1", - "@buf/bufbuild_registry.connectrpc_es": "^1.4.0-20240610164129-660609bc46d3.2", + "@buf/bufbuild_registry.connectrpc_es": "^1.4.0-20240626210909-c9e875a41f74.3", "@connectrpc/connect": "^1.4.0", "@connectrpc/connect-web": "^1.4.0", + "@octokit/webhooks-definitions": "^3.67.3", "semver": "^7.6.1" }, "devDependencies": { @@ -33,8 +34,7 @@ }, "node_modules/@actions/core": { "version": "1.10.1", - "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.10.1.tgz", - "integrity": "sha512-3lBR9EDAY+iYIpTnTIXmWcNbX3T2kCkAEQGIQx4NVQ0575nk2k3GRZDTPQG+vVtS2izSLmINlxXf0uLtnrTP+g==", + "license": "MIT", "dependencies": { "@actions/http-client": "^2.0.1", "uuid": "^8.3.2" @@ -42,16 +42,14 @@ }, "node_modules/@actions/exec": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@actions/exec/-/exec-1.1.1.tgz", - "integrity": "sha512-+sCcHHbVdk93a0XT19ECtO/gIXoxvdsgQLzb2fE2/5sIZmWQuluYyjPQtrtTHdU1YzTZ7bAPN4sITq2xi1679w==", + "license": "MIT", "dependencies": { "@actions/io": "^1.0.1" } }, "node_modules/@actions/github": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@actions/github/-/github-6.0.0.tgz", - "integrity": "sha512-alScpSVnYmjNEXboZjarjukQEzgCRmjMv6Xj47fsdnqGS73bjJNDpiiXmp8jr0UZLdUB6d9jW63IcmddUP+l0g==", + "license": "MIT", "dependencies": { "@actions/http-client": "^2.2.0", "@octokit/core": "^5.0.1", @@ -61,8 +59,7 @@ }, "node_modules/@actions/http-client": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-2.2.1.tgz", - "integrity": "sha512-KhC/cZsq7f8I4LfZSJKgCvEwfkE8o1538VoBeoGzokVLLnbFDEAdFD3UhoMklxo2un9NJVBdANOresx7vTHlHw==", + "license": "MIT", "dependencies": { "tunnel": "^0.0.6", "undici": "^5.25.4" @@ -70,13 +67,11 @@ }, "node_modules/@actions/io": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@actions/io/-/io-1.1.3.tgz", - "integrity": "sha512-wi9JjgKLYS7U/z8PPbco+PvTb/nRWjeoFlJ1Qer83k/3C5PHQi28hiVdeE2kHXmIL99mQFawx8qt/JPjZilJ8Q==" + "license": "MIT" }, "node_modules/@actions/tool-cache": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@actions/tool-cache/-/tool-cache-2.0.1.tgz", - "integrity": "sha512-iPU+mNwrbA8jodY8eyo/0S/QqCKDajiR8OxWTnSk/SnYg0sj8Hp4QcUEVC1YFpHWXtrfbQrE13Jz4k4HXJQKcA==", + "license": "MIT", "dependencies": { "@actions/core": "^1.2.6", "@actions/exec": "^1.0.0", @@ -88,54 +83,51 @@ }, "node_modules/@actions/tool-cache/node_modules/semver": { "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/@actions/tool-cache/node_modules/uuid": { "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "license": "MIT", "bin": { "uuid": "bin/uuid" } }, "node_modules/@buf/bufbuild_protovalidate.bufbuild_es": { - "version": "1.7.2-20240401165935-b983156c5e99.1", - "resolved": "https://buf.build/gen/npm/v1/@buf/bufbuild_protovalidate.bufbuild_es/-/bufbuild_protovalidate.bufbuild_es-1.7.2-20240401165935-b983156c5e99.1.tgz", + "version": "1.7.2-20240401165935-b983156c5e99.2", + "resolved": "https://buf.build/gen/npm/v1/@buf/bufbuild_protovalidate.bufbuild_es/-/bufbuild_protovalidate.bufbuild_es-1.7.2-20240401165935-b983156c5e99.2.tgz", "peerDependencies": { "@bufbuild/protobuf": "^1.7.2" } }, "node_modules/@buf/bufbuild_protovalidate.connectrpc_es": { - "version": "1.4.0-20240401165935-b983156c5e99.2", - "resolved": "https://buf.build/gen/npm/v1/@buf/bufbuild_protovalidate.connectrpc_es/-/bufbuild_protovalidate.connectrpc_es-1.4.0-20240401165935-b983156c5e99.2.tgz", + "version": "1.4.0-20240401165935-b983156c5e99.3", + "resolved": "https://buf.build/gen/npm/v1/@buf/bufbuild_protovalidate.connectrpc_es/-/bufbuild_protovalidate.connectrpc_es-1.4.0-20240401165935-b983156c5e99.3.tgz", "dependencies": { - "@buf/bufbuild_protovalidate.bufbuild_es": "1.7.2-20240401165935-b983156c5e99.1" + "@buf/bufbuild_protovalidate.bufbuild_es": "1.7.2-20240401165935-b983156c5e99.2" }, "peerDependencies": { "@connectrpc/connect": "^1.4.0" } }, "node_modules/@buf/bufbuild_registry.bufbuild_es": { - "version": "1.7.2-20240610164129-660609bc46d3.1", - "resolved": "https://buf.build/gen/npm/v1/@buf/bufbuild_registry.bufbuild_es/-/bufbuild_registry.bufbuild_es-1.7.2-20240610164129-660609bc46d3.1.tgz", + "version": "1.7.2-20240626210909-c9e875a41f74.2", + "resolved": "https://buf.build/gen/npm/v1/@buf/bufbuild_registry.bufbuild_es/-/bufbuild_registry.bufbuild_es-1.7.2-20240626210909-c9e875a41f74.2.tgz", "dependencies": { - "@buf/bufbuild_protovalidate.bufbuild_es": "1.7.2-20240401165935-b983156c5e99.1" + "@buf/bufbuild_protovalidate.bufbuild_es": "1.7.2-20240401165935-b983156c5e99.2" }, "peerDependencies": { "@bufbuild/protobuf": "^1.7.2" } }, "node_modules/@buf/bufbuild_registry.connectrpc_es": { - "version": "1.4.0-20240610164129-660609bc46d3.2", - "resolved": "https://buf.build/gen/npm/v1/@buf/bufbuild_registry.connectrpc_es/-/bufbuild_registry.connectrpc_es-1.4.0-20240610164129-660609bc46d3.2.tgz", + "version": "1.4.0-20240626210909-c9e875a41f74.3", + "resolved": "https://buf.build/gen/npm/v1/@buf/bufbuild_registry.connectrpc_es/-/bufbuild_registry.connectrpc_es-1.4.0-20240626210909-c9e875a41f74.3.tgz", "dependencies": { - "@buf/bufbuild_protovalidate.connectrpc_es": "1.4.0-20240401165935-b983156c5e99.2", - "@buf/bufbuild_registry.bufbuild_es": "1.7.2-20240610164129-660609bc46d3.1" + "@buf/bufbuild_protovalidate.connectrpc_es": "1.4.0-20240401165935-b983156c5e99.3", + "@buf/bufbuild_registry.bufbuild_es": "1.7.2-20240626210909-c9e875a41f74.2" }, "peerDependencies": { "@connectrpc/connect": "^1.4.0" @@ -143,9 +135,8 @@ }, "node_modules/@bufbuild/license-header": { "version": "0.0.4", - "resolved": "https://registry.npmjs.org/@bufbuild/license-header/-/license-header-0.0.4.tgz", - "integrity": "sha512-wOOrMjfLdDAO/BAKzCs/bvMPz61X3+qYC9nUbYxJYLVPFAlXus8aw2jNktyHEvLToCjOhn5EcpyaCpMzPHyHIQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "picomatch": "^2.3.1" }, @@ -155,22 +146,19 @@ }, "node_modules/@bufbuild/protobuf": { "version": "1.10.0", - "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-1.10.0.tgz", - "integrity": "sha512-QDdVFLoN93Zjg36NoQPZfsVH9tZew7wKDKyV5qRdj8ntT4wQCOradQjRaTdwMhWUYsgKsvCINKKm87FdEk96Ag==", + "license": "(Apache-2.0 AND BSD-3-Clause)", "peer": true }, "node_modules/@connectrpc/connect": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@connectrpc/connect/-/connect-1.4.0.tgz", - "integrity": "sha512-vZeOkKaAjyV4+RH3+rJZIfDFJAfr+7fyYr6sLDKbYX3uuTVszhFe9/YKf5DNqrDb5cKdKVlYkGn6DTDqMitAnA==", + "license": "Apache-2.0", "peerDependencies": { "@bufbuild/protobuf": "^1.4.2" } }, "node_modules/@connectrpc/connect-web": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@connectrpc/connect-web/-/connect-web-1.4.0.tgz", - "integrity": "sha512-13aO4psFbbm7rdOFGV0De2Za64DY/acMspgloDlcOKzLPPs0yZkhp1OOzAQeiAIr7BM/VOHIA3p8mF0inxCYTA==", + "license": "Apache-2.0", "peerDependencies": { "@bufbuild/protobuf": "^1.4.2", "@connectrpc/connect": "1.4.0" @@ -178,9 +166,8 @@ }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", "dev": true, + "license": "MIT", "dependencies": { "eslint-visitor-keys": "^3.3.0" }, @@ -193,18 +180,16 @@ }, "node_modules/@eslint-community/regexpp": { "version": "4.10.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", - "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", "dev": true, + "license": "MIT", "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, "node_modules/@eslint/eslintrc": { "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dev": true, + "license": "MIT", "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", @@ -225,9 +210,8 @@ }, "node_modules/@eslint/eslintrc/node_modules/globals": { "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, + "license": "MIT", "dependencies": { "type-fest": "^0.20.2" }, @@ -240,26 +224,23 @@ }, "node_modules/@eslint/js": { "version": "9.2.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.2.0.tgz", - "integrity": "sha512-ESiIudvhoYni+MdsI8oD7skpprZ89qKocwRM2KEvhhBJ9nl5MRh7BXU5GTod7Mdygq+AUl+QzId6iWJKR/wABA==", "dev": true, + "license": "MIT", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, "node_modules/@fastify/busboy": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", - "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==", + "license": "MIT", "engines": { "node": ">=14" } }, "node_modules/@humanwhocodes/config-array": { "version": "0.11.14", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", - "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@humanwhocodes/object-schema": "^2.0.2", "debug": "^4.3.1", @@ -271,9 +252,8 @@ }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=12.22" }, @@ -284,15 +264,13 @@ }, "node_modules/@humanwhocodes/object-schema": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", - "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -303,18 +281,16 @@ }, "node_modules/@nodelib/fs.stat": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, + "license": "MIT", "engines": { "node": ">= 8" } }, "node_modules/@nodelib/fs.walk": { "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -325,16 +301,14 @@ }, "node_modules/@octokit/auth-token": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-4.0.0.tgz", - "integrity": "sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==", + "license": "MIT", "engines": { "node": ">= 18" } }, "node_modules/@octokit/core": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-5.2.0.tgz", - "integrity": "sha512-1LFfa/qnMQvEOAdzlQymH0ulepxbxnCYAKJZfMci/5XJyIHWgEYnDmgnKakbTh7CH2tFQ5O60oYDvns4i9RAIg==", + "license": "MIT", "dependencies": { "@octokit/auth-token": "^4.0.0", "@octokit/graphql": "^7.1.0", @@ -350,8 +324,7 @@ }, "node_modules/@octokit/endpoint": { "version": "9.0.5", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-9.0.5.tgz", - "integrity": "sha512-ekqR4/+PCLkEBF6qgj8WqJfvDq65RH85OAgrtnVp1mSxaXF03u2xW/hUdweGS5654IlC0wkNYC18Z50tSYTAFw==", + "license": "MIT", "dependencies": { "@octokit/types": "^13.1.0", "universal-user-agent": "^6.0.0" @@ -362,8 +335,7 @@ }, "node_modules/@octokit/graphql": { "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-7.1.0.tgz", - "integrity": "sha512-r+oZUH7aMFui1ypZnAvZmn0KSqAUgE1/tUXIWaqUCa1758ts/Jio84GZuzsvUkme98kv0WFY8//n0J1Z+vsIsQ==", + "license": "MIT", "dependencies": { "@octokit/request": "^8.3.0", "@octokit/types": "^13.0.0", @@ -375,13 +347,11 @@ }, "node_modules/@octokit/openapi-types": { "version": "22.1.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-22.1.0.tgz", - "integrity": "sha512-pGUdSP+eEPfZiQHNkZI0U01HLipxncisdJQB4G//OAmfeO8sqTQ9KRa0KF03TUPCziNsoXUrTg4B2Q1EX++T0Q==" + "license": "MIT" }, "node_modules/@octokit/plugin-paginate-rest": { "version": "9.2.1", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-9.2.1.tgz", - "integrity": "sha512-wfGhE/TAkXZRLjksFXuDZdmGnJQHvtU/joFQdweXUgzo1XwvBCD4o4+75NtFfjfLK5IwLf9vHTfSiU3sLRYpRw==", + "license": "MIT", "dependencies": { "@octokit/types": "^12.6.0" }, @@ -394,21 +364,18 @@ }, "node_modules/@octokit/plugin-paginate-rest/node_modules/@octokit/openapi-types": { "version": "20.0.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-20.0.0.tgz", - "integrity": "sha512-EtqRBEjp1dL/15V7WiX5LJMIxxkdiGJnabzYx5Apx4FkQIFgAfKumXeYAqqJCj1s+BMX4cPFIFC4OLCR6stlnA==" + "license": "MIT" }, "node_modules/@octokit/plugin-paginate-rest/node_modules/@octokit/types": { "version": "12.6.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-12.6.0.tgz", - "integrity": "sha512-1rhSOfRa6H9w4YwK0yrf5faDaDTb+yLyBUKOCV4xtCDB5VmIPqd/v9yr9o6SAzOAlRxMiRiCic6JVM1/kunVkw==", + "license": "MIT", "dependencies": { "@octokit/openapi-types": "^20.0.0" } }, "node_modules/@octokit/plugin-rest-endpoint-methods": { "version": "10.4.1", - "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-10.4.1.tgz", - "integrity": "sha512-xV1b+ceKV9KytQe3zCVqjg+8GTGfDYwaT1ATU5isiUyVtlVAO3HNdzpS4sr4GBx4hxQ46s7ITtZrAsxG22+rVg==", + "license": "MIT", "dependencies": { "@octokit/types": "^12.6.0" }, @@ -421,21 +388,18 @@ }, "node_modules/@octokit/plugin-rest-endpoint-methods/node_modules/@octokit/openapi-types": { "version": "20.0.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-20.0.0.tgz", - "integrity": "sha512-EtqRBEjp1dL/15V7WiX5LJMIxxkdiGJnabzYx5Apx4FkQIFgAfKumXeYAqqJCj1s+BMX4cPFIFC4OLCR6stlnA==" + "license": "MIT" }, "node_modules/@octokit/plugin-rest-endpoint-methods/node_modules/@octokit/types": { "version": "12.6.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-12.6.0.tgz", - "integrity": "sha512-1rhSOfRa6H9w4YwK0yrf5faDaDTb+yLyBUKOCV4xtCDB5VmIPqd/v9yr9o6SAzOAlRxMiRiCic6JVM1/kunVkw==", + "license": "MIT", "dependencies": { "@octokit/openapi-types": "^20.0.0" } }, "node_modules/@octokit/request": { "version": "8.4.0", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-8.4.0.tgz", - "integrity": "sha512-9Bb014e+m2TgBeEJGEbdplMVWwPmL1FPtggHQRkV+WVsMggPtEkLKPlcVYm/o8xKLkpJ7B+6N8WfQMtDLX2Dpw==", + "license": "MIT", "dependencies": { "@octokit/endpoint": "^9.0.1", "@octokit/request-error": "^5.1.0", @@ -448,8 +412,7 @@ }, "node_modules/@octokit/request-error": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-5.1.0.tgz", - "integrity": "sha512-GETXfE05J0+7H2STzekpKObFe765O5dlAKUTLNGeH+x47z7JjXHfsHKo5z21D/o/IOZTUEI6nyWyR+bZVP/n5Q==", + "license": "MIT", "dependencies": { "@octokit/types": "^13.1.0", "deprecation": "^2.0.0", @@ -461,32 +424,32 @@ }, "node_modules/@octokit/types": { "version": "13.4.1", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.4.1.tgz", - "integrity": "sha512-Y73oOAzRBAUzR/iRAbGULzpNkX8vaxKCqEtg6K74Ff3w9f5apFnWtE/2nade7dMWWW3bS5Kkd6DJS4HF04xreg==", + "license": "MIT", "dependencies": { "@octokit/openapi-types": "^22.1.0" } }, + "node_modules/@octokit/webhooks-definitions": { + "version": "3.67.3", + "license": "MIT" + }, "node_modules/@types/node": { "version": "20.12.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.7.tgz", - "integrity": "sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==", "dev": true, + "license": "MIT", "dependencies": { "undici-types": "~5.26.4" } }, "node_modules/@types/semver": { "version": "7.5.8", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", - "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.9.0.tgz", - "integrity": "sha512-6e+X0X3sFe/G/54aC3jt0txuMTURqLyekmEHViqyA2VnxhLMpvA6nqmcjIy+Cr9tLDHPssA74BP5Mx9HQIxBEA==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", "@typescript-eslint/scope-manager": "7.9.0", @@ -517,9 +480,8 @@ }, "node_modules/@typescript-eslint/parser": { "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.9.0.tgz", - "integrity": "sha512-qHMJfkL5qvgQB2aLvhUSXxbK7OLnDkwPzFalg458pxQgfxKDfT1ZDbHQM/I6mDIf/svlMkj21kzKuQ2ixJlatQ==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/scope-manager": "7.9.0", "@typescript-eslint/types": "7.9.0", @@ -545,9 +507,8 @@ }, "node_modules/@typescript-eslint/scope-manager": { "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.9.0.tgz", - "integrity": "sha512-ZwPK4DeCDxr3GJltRz5iZejPFAAr4Wk3+2WIBaj1L5PYK5RgxExu/Y68FFVclN0y6GGwH8q+KgKRCvaTmFBbgQ==", "dev": true, + "license": "MIT", "dependencies": { "@typescript-eslint/types": "7.9.0", "@typescript-eslint/visitor-keys": "7.9.0" @@ -562,9 +523,8 @@ }, "node_modules/@typescript-eslint/type-utils": { "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.9.0.tgz", - "integrity": "sha512-6Qy8dfut0PFrFRAZsGzuLoM4hre4gjzWJB6sUvdunCYZsYemTkzZNwF1rnGea326PHPT3zn5Lmg32M/xfJfByA==", "dev": true, + "license": "MIT", "dependencies": { "@typescript-eslint/typescript-estree": "7.9.0", "@typescript-eslint/utils": "7.9.0", @@ -589,9 +549,8 @@ }, "node_modules/@typescript-eslint/types": { "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.9.0.tgz", - "integrity": "sha512-oZQD9HEWQanl9UfsbGVcZ2cGaR0YT5476xfWE0oE5kQa2sNK2frxOlkeacLOTh9po4AlUT5rtkGyYM5kew0z5w==", "dev": true, + "license": "MIT", "engines": { "node": "^18.18.0 || >=20.0.0" }, @@ -602,9 +561,8 @@ }, "node_modules/@typescript-eslint/typescript-estree": { "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.9.0.tgz", - "integrity": "sha512-zBCMCkrb2YjpKV3LA0ZJubtKCDxLttxfdGmwZvTqqWevUPN0FZvSI26FalGFFUZU/9YQK/A4xcQF9o/VVaCKAg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/types": "7.9.0", "@typescript-eslint/visitor-keys": "7.9.0", @@ -630,18 +588,16 @@ }, "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { "version": "9.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -654,9 +610,8 @@ }, "node_modules/@typescript-eslint/utils": { "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.9.0.tgz", - "integrity": "sha512-5KVRQCzZajmT4Ep+NEgjXCvjuypVvYHUW7RHlXzNPuak2oWpVoD1jf5xCP0dPAuNIchjC7uQyvbdaSTFaLqSdA==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@typescript-eslint/scope-manager": "7.9.0", @@ -676,9 +631,8 @@ }, "node_modules/@typescript-eslint/visitor-keys": { "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.9.0.tgz", - "integrity": "sha512-iESPx2TNLDNGQLyjKhUvIKprlP49XNEK+MvIf9nIO7ZZaZdbnfWKHnXAgufpxqfA0YryH8XToi4+CjBgVnFTSQ==", "dev": true, + "license": "MIT", "dependencies": { "@typescript-eslint/types": "7.9.0", "eslint-visitor-keys": "^3.4.3" @@ -693,24 +647,21 @@ }, "node_modules/@ungap/structured-clone": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/@vercel/ncc": { "version": "0.38.1", - "resolved": "https://registry.npmjs.org/@vercel/ncc/-/ncc-0.38.1.tgz", - "integrity": "sha512-IBBb+iI2NLu4VQn3Vwldyi2QwaXt5+hTyh58ggAMoCGE6DJmPvwL3KPBWcJl1m9LYPChBLE980Jw+CS4Wokqxw==", "dev": true, + "license": "MIT", "bin": { "ncc": "dist/ncc/cli.js" } }, "node_modules/acorn": { "version": "8.11.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", - "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", "dev": true, + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -720,18 +671,16 @@ }, "node_modules/acorn-jsx": { "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, + "license": "MIT", "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "node_modules/ajv": { "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -745,18 +694,16 @@ }, "node_modules/ansi-regex": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -769,35 +716,30 @@ }, "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 + "dev": true, + "license": "Python-2.0" }, "node_modules/array-union": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/balanced-match": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/before-after-hook": { "version": "2.2.3", - "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz", - "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==" + "license": "Apache-2.0" }, "node_modules/brace-expansion": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -805,9 +747,8 @@ }, "node_modules/braces": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, + "license": "MIT", "dependencies": { "fill-range": "^7.1.1" }, @@ -817,18 +758,16 @@ }, "node_modules/callsites": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -842,9 +781,8 @@ }, "node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -854,21 +792,18 @@ }, "node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/concat-map": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/cross-spawn": { "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -880,9 +815,8 @@ }, "node_modules/debug": { "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, + "license": "MIT", "dependencies": { "ms": "2.1.2" }, @@ -897,20 +831,17 @@ }, "node_modules/deep-is": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/deprecation": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", - "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==" + "license": "ISC" }, "node_modules/dir-glob": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, + "license": "MIT", "dependencies": { "path-type": "^4.0.0" }, @@ -920,9 +851,8 @@ }, "node_modules/doctrine": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, + "license": "Apache-2.0", "dependencies": { "esutils": "^2.0.2" }, @@ -932,9 +862,8 @@ }, "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, + "license": "MIT", "engines": { "node": ">=10" }, @@ -944,9 +873,8 @@ }, "node_modules/eslint": { "version": "8.57.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", - "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -999,9 +927,8 @@ }, "node_modules/eslint-scope": { "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" @@ -1015,9 +942,8 @@ }, "node_modules/eslint-visitor-keys": { "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, + "license": "Apache-2.0", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -1027,18 +953,16 @@ }, "node_modules/eslint/node_modules/@eslint/js": { "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", - "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", "dev": true, + "license": "MIT", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/eslint/node_modules/globals": { "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, + "license": "MIT", "dependencies": { "type-fest": "^0.20.2" }, @@ -1051,9 +975,8 @@ }, "node_modules/espree": { "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", @@ -1068,9 +991,8 @@ }, "node_modules/esquery": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "estraverse": "^5.1.0" }, @@ -1080,9 +1002,8 @@ }, "node_modules/esrecurse": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "estraverse": "^5.2.0" }, @@ -1092,33 +1013,29 @@ }, "node_modules/estraverse": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } }, "node_modules/esutils": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=0.10.0" } }, "node_modules/fast-deep-equal": { "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fast-glob": { "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -1132,9 +1049,8 @@ }, "node_modules/fast-glob/node_modules/glob-parent": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, + "license": "ISC", "dependencies": { "is-glob": "^4.0.1" }, @@ -1144,30 +1060,26 @@ }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fast-levenshtein": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fastq": { "version": "1.17.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", - "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", "dev": true, + "license": "ISC", "dependencies": { "reusify": "^1.0.4" } }, "node_modules/file-entry-cache": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, + "license": "MIT", "dependencies": { "flat-cache": "^3.0.4" }, @@ -1177,9 +1089,8 @@ }, "node_modules/fill-range": { "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, + "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -1189,9 +1100,8 @@ }, "node_modules/find-up": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -1205,9 +1115,8 @@ }, "node_modules/flat-cache": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", "dev": true, + "license": "MIT", "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.3", @@ -1219,21 +1128,18 @@ }, "node_modules/flatted": { "version": "3.3.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", - "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/fs.realpath": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/glob": { "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -1251,9 +1157,8 @@ }, "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, + "license": "ISC", "dependencies": { "is-glob": "^4.0.3" }, @@ -1263,9 +1168,8 @@ }, "node_modules/globals": { "version": "15.2.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-15.2.0.tgz", - "integrity": "sha512-FQ5YwCHZM3nCmtb5FzEWwdUc9K5d3V/w9mzcz8iGD1gC/aOTHc6PouYu0kkKipNJqHAT7m51sqzQjEjIP+cK0A==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" }, @@ -1275,9 +1179,8 @@ }, "node_modules/globby": { "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, + "license": "MIT", "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", @@ -1295,33 +1198,29 @@ }, "node_modules/graphemer": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/ignore": { "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4" } }, "node_modules/import-fresh": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, + "license": "MIT", "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -1335,18 +1234,16 @@ }, "node_modules/imurmurhash": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.19" } }, "node_modules/inflight": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "dev": true, + "license": "ISC", "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -1354,24 +1251,21 @@ }, "node_modules/inherits": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/is-extglob": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/is-glob": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, + "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" }, @@ -1381,33 +1275,29 @@ }, "node_modules/is-number": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.12.0" } }, "node_modules/is-path-inside": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/isexe": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "dev": true, + "license": "ISC" }, "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, + "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -1417,36 +1307,31 @@ }, "node_modules/json-buffer": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json-schema-traverse": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/keyv": { "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dev": true, + "license": "MIT", "dependencies": { "json-buffer": "3.0.1" } }, "node_modules/levn": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, + "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" @@ -1457,9 +1342,8 @@ }, "node_modules/locate-path": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^5.0.0" }, @@ -1472,24 +1356,21 @@ }, "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 + "dev": true, + "license": "MIT" }, "node_modules/merge2": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 8" } }, "node_modules/micromatch": { "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "dev": true, + "license": "MIT", "dependencies": { "braces": "^3.0.2", "picomatch": "^2.3.1" @@ -1500,9 +1381,8 @@ }, "node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -1512,29 +1392,25 @@ }, "node_modules/ms": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/natural-compare": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/once": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", "dependencies": { "wrappy": "1" } }, "node_modules/optionator": { "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "dev": true, + "license": "MIT", "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", @@ -1549,9 +1425,8 @@ }, "node_modules/p-limit": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, + "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" }, @@ -1564,9 +1439,8 @@ }, "node_modules/p-locate": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^3.0.2" }, @@ -1579,9 +1453,8 @@ }, "node_modules/parent-module": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, + "license": "MIT", "dependencies": { "callsites": "^3.0.0" }, @@ -1591,45 +1464,40 @@ }, "node_modules/path-exists": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/path-is-absolute": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/path-key": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/path-type": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/picomatch": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8.6" }, @@ -1639,18 +1507,16 @@ }, "node_modules/prelude-ls": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8.0" } }, "node_modules/prettier": { "version": "3.2.5", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.5.tgz", - "integrity": "sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==", "dev": true, + "license": "MIT", "bin": { "prettier": "bin/prettier.cjs" }, @@ -1663,17 +1529,14 @@ }, "node_modules/punycode": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/queue-microtask": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true, "funding": [ { @@ -1688,22 +1551,21 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/resolve-from": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/reusify": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true, + "license": "MIT", "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" @@ -1711,9 +1573,8 @@ }, "node_modules/rimraf": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, + "license": "ISC", "dependencies": { "glob": "^7.1.3" }, @@ -1726,8 +1587,6 @@ }, "node_modules/run-parallel": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, "funding": [ { @@ -1743,14 +1602,14 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "queue-microtask": "^1.2.2" } }, "node_modules/semver": { "version": "7.6.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.1.tgz", - "integrity": "sha512-f/vbBsu+fOiYt+lmwZV0rVwJScl46HppnOA1ZvIuBWKOTlllpyJ3bfVax76/OrhCH38dyxoDIA8K7uB963IYgA==", + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -1760,9 +1619,8 @@ }, "node_modules/shebang-command": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, + "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" }, @@ -1772,27 +1630,24 @@ }, "node_modules/shebang-regex": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/slash": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/strip-ansi": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -1802,9 +1657,8 @@ }, "node_modules/strip-json-comments": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -1814,9 +1668,8 @@ }, "node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -1826,15 +1679,13 @@ }, "node_modules/text-table": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/to-regex-range": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, + "license": "MIT", "dependencies": { "is-number": "^7.0.0" }, @@ -1844,9 +1695,8 @@ }, "node_modules/ts-api-utils": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", - "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=16" }, @@ -1856,17 +1706,15 @@ }, "node_modules/tunnel": { "version": "0.0.6", - "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", - "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", + "license": "MIT", "engines": { "node": ">=0.6.11 <=0.7.0 || >=0.7.3" } }, "node_modules/type-check": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, + "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1" }, @@ -1876,9 +1724,8 @@ }, "node_modules/type-fest": { "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -1888,9 +1735,8 @@ }, "node_modules/typescript": { "version": "5.4.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", - "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", "dev": true, + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -1901,9 +1747,8 @@ }, "node_modules/typescript-eslint": { "version": "7.9.0", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-7.9.0.tgz", - "integrity": "sha512-7iTn9c10teHHCys5Ud/yaJntXZrjt3h2mrx3feJGBOLgQkF3TB1X89Xs3aVQ/GgdXRAXpk2bPTdpRwHP4YkUow==", "dev": true, + "license": "MIT", "dependencies": { "@typescript-eslint/eslint-plugin": "7.9.0", "@typescript-eslint/parser": "7.9.0", @@ -1927,8 +1772,7 @@ }, "node_modules/undici": { "version": "5.28.4", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.28.4.tgz", - "integrity": "sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==", + "license": "MIT", "dependencies": { "@fastify/busboy": "^2.0.0" }, @@ -1938,37 +1782,32 @@ }, "node_modules/undici-types": { "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/universal-user-agent": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.1.tgz", - "integrity": "sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==" + "license": "ISC" }, "node_modules/uri-js": { "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "punycode": "^2.1.0" } }, "node_modules/uuid": { "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } }, "node_modules/which": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, + "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -1981,23 +1820,20 @@ }, "node_modules/word-wrap": { "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/wrappy": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + "license": "ISC" }, "node_modules/yocto-queue": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, diff --git a/package.json b/package.json index cea0d13..6f3822b 100644 --- a/package.json +++ b/package.json @@ -41,9 +41,10 @@ "@actions/exec": "^1.1.1", "@actions/github": "^6.0.0", "@actions/tool-cache": "^2.0.1", - "@buf/bufbuild_registry.connectrpc_es": "^1.4.0-20240610164129-660609bc46d3.2", + "@buf/bufbuild_registry.connectrpc_es": "^1.4.0-20240626210909-c9e875a41f74.3", "@connectrpc/connect": "^1.4.0", "@connectrpc/connect-web": "^1.4.0", + "@octokit/webhooks-definitions": "^3.67.3", "semver": "^7.6.1" } } diff --git a/src/inputs.ts b/src/inputs.ts index ed26aca..b1ea958 100644 --- a/src/inputs.ts +++ b/src/inputs.ts @@ -13,6 +13,12 @@ // limitations under the License. import * as core from "@actions/core"; +import * as github from "@actions/github"; +import { + PushEvent, + PullRequestEvent, + DeleteEvent, +} from "@octokit/webhooks-definitions/schema"; // Inputs are the inputs to the action, matching the inputs in the action.yml. export interface Inputs { @@ -20,13 +26,10 @@ export interface Inputs { username: string; token: string; domain: string; - github_token: string; setup_only: boolean; - comment: boolean; + pr_comment: boolean; input: string; - config: string; - disable_symlinks: boolean; paths: string[]; exclude_paths: string[]; exclude_imports: boolean; @@ -35,32 +38,23 @@ export interface Inputs { format: boolean; breaking: boolean; breaking_against: string; - breaking_against_config: string; - breaking_limit_to_input_files: boolean; push: boolean; - push_create: boolean; - push_create_visibility: string; - push_labels: string[]; - push_git_metadata: boolean; - push_source_control_url: string; + push_disable_create: boolean; archive: boolean; archive_labels: string[]; } // getInputs decodes the inputs from the environment variables. export function getInputs(): Inputs { - return { + const inputs: Inputs = { version: core.getInput("version"), username: core.getInput("username"), token: core.getInput("token") || getEnv("BUF_TOKEN"), domain: core.getInput("domain"), - github_token: core.getInput("github_token"), setup_only: core.getBooleanInput("setup_only"), - comment: core.getBooleanInput("comment"), + pr_comment: core.getBooleanInput("pr_comment"), // Inputs shared between buf steps. input: core.getInput("input"), - config: core.getInput("config"), - disable_symlinks: core.getBooleanInput("disable_symlinks"), paths: core.getMultilineInput("paths"), exclude_paths: core.getMultilineInput("exclude_paths"), exclude_imports: core.getBooleanInput("exclude_imports"), @@ -69,19 +63,36 @@ export function getInputs(): Inputs { format: core.getBooleanInput("format"), breaking: core.getBooleanInput("breaking"), breaking_against: core.getInput("breaking_against"), - breaking_against_config: core.getInput("breaking_against_config"), - breaking_limit_to_input_files: core.getBooleanInput( - "breaking_limit_to_input_files", - ), push: core.getBooleanInput("push"), - push_create: core.getBooleanInput("push_create"), - push_create_visibility: core.getInput("push_create_visibility"), - push_labels: core.getMultilineInput("push_labels"), - push_git_metadata: core.getBooleanInput("push_git_metadata"), - push_source_control_url: core.getInput("push_source_control_url"), + push_disable_create: core.getBooleanInput("push_disable_create"), archive: core.getBooleanInput("archive"), - archive_labels: core.getMultilineInput("archive_labels"), + archive_labels: [], }; + if (github.context.eventName === "push") { + const event = github.context.payload as PushEvent; + if (inputs.breaking_against === "") { + inputs.breaking_against = `${event.repository.clone_url}#format=git,commit=${event.before}`; + if (inputs.input) { + inputs.breaking_against += `,subdir=${inputs.input}`; + } + } + inputs.archive_labels.push(github.context.ref); + } + if (github.context.eventName === "pull_request") { + const event = github.context.payload as PullRequestEvent; + if (inputs.breaking_against === "") { + inputs.breaking_against = `${event.repository.clone_url}#format=git,commit=${event.pull_request.base.sha}`; + if (inputs.input) { + inputs.breaking_against += `,subdir=${inputs.input}`; + } + } + inputs.archive_labels.push(github.context.ref); + } + if (github.context.eventName === "delete") { + const event = github.context.payload as DeleteEvent; + inputs.archive_labels.push(event.ref); + } + return inputs; } // getEnv returns the case insensitive value of the environment variable. diff --git a/src/main.ts b/src/main.ts index 03eb533..ddd77cd 100644 --- a/src/main.ts +++ b/src/main.ts @@ -15,7 +15,6 @@ import * as core from "@actions/core"; import * as exec from "@actions/exec"; import { context, getOctokit } from "@actions/github"; -import * as semver from "semver"; import { createConnectTransport } from "@connectrpc/connect-web"; import { createPromiseClient, ConnectError, Code } from "@connectrpc/connect"; @@ -31,7 +30,7 @@ import { parseModuleNames, ModuleName } from "./config"; // main is the entrypoint for the action. async function main() { const inputs = getInputs(); - const github = getOctokit(inputs.github_token); + const github = getOctokit(core.getInput("github_token")); const [bufPath, bufVersion] = await installBuf(github, inputs.version); core.setOutput(Outputs.BufVersion, bufVersion); await login(bufPath, inputs); @@ -41,11 +40,11 @@ async function main() { return; } // Run the buf workflow. - const steps = await runWorkflow(bufPath, bufVersion, inputs); + const steps = await runWorkflow(bufPath, inputs); // Create a summary of the steps. const summary = createSummary(inputs, steps); // Comment on the PR with the summary, if requested. - if (inputs.comment) { + if (inputs.pr_comment) { await commentOnPR(context, github, summary.stringify()); } // Write the summary to a file defined by GITHUB_STEP_SUMMARY. @@ -86,11 +85,10 @@ function createSummary(inputs: Inputs, steps: Steps): typeof core.summary { { data: "Status", header: true }, ], ["build", message(steps.build?.status)], + ["lint", message(steps.lint?.status)], + ["format", message(steps.format?.status)], + ["breaking", message(steps.breaking?.status)], ]; - if (inputs.lint) table.push(["lint", message(steps.lint?.status)]); - if (inputs.format) table.push(["format", message(steps.format?.status)]); - if (inputs.breaking) - table.push(["breaking", message(steps.breaking?.status)]); if (inputs.push) table.push(["push", message(steps.push?.status)]); if (inputs.archive) table.push(["archive", message(steps.archive?.status)]); return core.summary.addTable(table); @@ -100,11 +98,7 @@ function createSummary(inputs: Inputs, steps: Steps): typeof core.summary { // First, it builds the input. If the build fails, the workflow stops. // Next, it runs lint, format, and breaking checks. If any of these fail, the workflow stops. // Finally, it pushes or archives the label to the registry. -async function runWorkflow( - bufPath: string, - bufVersion: string, - inputs: Inputs, -): Promise { +async function runWorkflow(bufPath: string, inputs: Inputs): Promise { const steps: Steps = {}; steps.build = await build(bufPath, inputs); if (steps.build.status == Status.Failed) { @@ -122,7 +116,7 @@ async function runWorkflow( return steps; } const moduleNames = await parseModuleNames(bufPath, inputs.input); - steps.push = await push(bufPath, bufVersion, inputs, moduleNames); + steps.push = await push(bufPath, inputs, moduleNames); steps.archive = await archive(inputs, moduleNames); return steps; } @@ -153,12 +147,6 @@ async function build(bufPath: string, inputs: Inputs): Promise { if (inputs.input) { args.push(inputs.input); } - if (inputs.config != "") { - args.push("--config", inputs.config); - } - if (inputs.disable_symlinks) { - args.push("--disable-symlinks"); - } for (const path of inputs.paths) { args.push("--path", path); } @@ -181,12 +169,6 @@ async function lint(bufPath: string, inputs: Inputs): Promise { if (inputs.input) { args.push(inputs.input); } - if (inputs.config != "") { - args.push("--config", inputs.config); - } - if (inputs.disable_symlinks) { - args.push("--disable-symlinks"); - } for (const path of inputs.paths) { args.push("--path", path); } @@ -212,12 +194,6 @@ async function format(bufPath: string, inputs: Inputs): Promise { if (inputs.input) { args.push(inputs.input); } - if (inputs.config) { - args.push("--config", inputs.config); - } - if (inputs.disable_symlinks) { - args.push("--disable-symlinks"); - } for (const path of inputs.paths) { args.push("--path", path); } @@ -243,15 +219,6 @@ async function breaking(bufPath: string, inputs: Inputs): Promise { if (inputs.input) { args.push(inputs.input); } - if (inputs.breaking_against_config) { - args.push("--against-config", inputs.breaking_against_config); - } - if (inputs.config) { - args.push("--config", inputs.config); - } - if (inputs.disable_symlinks) { - args.push("--disable-symlinks"); - } for (const path of inputs.paths) { args.push("--path", path); } @@ -267,7 +234,6 @@ async function breaking(bufPath: string, inputs: Inputs): Promise { // push runs the "buf push" step. async function push( bufPath: string, - bufVersion: string, inputs: Inputs, moduleNames: ModuleName[], ): Promise { @@ -279,32 +245,19 @@ async function push( core.debug("Skipping push, no named modules detected"); return skip(); } - const args = ["push", "--error-format", "github-actions"]; - // Add --exclude-unnamed on buf versions that support the flag. - if (semver.satisfies(bufVersion, ">=1.33.0")) { - args.push("--exclude-unnamed"); + const args = [ + "push", + "--error-format", + "github-actions", + "--exclude-unnamed", + "--git-metadata", + ]; + if (!inputs.push_disable_create) { + args.push("--create"); } if (inputs.input) { args.push(inputs.input); } - if (inputs.push_create) { - args.push("--create"); - if (inputs.push_create_visibility) { - args.push("--create-visibility", inputs.push_create_visibility); - } - } - if (inputs.push_git_metadata) { - args.push("--git-metadata"); - } - if (inputs.push_source_control_url) { - args.push("--source-control-url", inputs.push_source_control_url); - } - if (inputs.disable_symlinks) { - args.push("--disable-symlinks"); - } - for (const label of inputs.push_labels) { - args.push("--label", label); - } return run(bufPath, args); } diff --git a/static/img/skip-breaking-example.png b/static/img/skip-breaking-example.png new file mode 100644 index 0000000..be304f7 Binary files /dev/null and b/static/img/skip-breaking-example.png differ