diff --git a/.eslintrc.cjs b/.eslintrc.cjs index 431449ec2..758fc03fb 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.cjs @@ -12,72 +12,62 @@ // See the License for the specific language governing permissions and // limitations under the License. -const { readdirSync, existsSync } = require("fs"); -const { join } = require("path"); - module.exports = { env: { browser: true, es2021: true, node: true, }, + root: true, ignorePatterns: [ - "packages/connect-web-bench/src/gen/grpcweb/**/*", - "packages/connect/src/protocol-grpc/gen/**/*", - "packages/connect-node-test/connect-node-h1-server.mjs", // https://github.com/eslint/eslint/issues/14156 - "packages/example/www/webclient.js", "packages/*/dist/**", - "node_modules/**", + // Our ESLint setup assumes all `.js` files are ESM, however these particular assets are CommonJS. + // Since for these files we cannot use `.cjs`, instead we override here to avoid having to override in each file + "packages/connect/*.js", + // + "packages/connect-web-bench/src/gen/grpcweb/**/*", ], plugins: ["@typescript-eslint", "n", "import"], // Rules and settings that do not require a non-default parser extends: ["eslint:recommended"], rules: { "no-console": "error", + "import/no-cycle": "error", + "import/no-duplicates": "error", }, - settings: {}, overrides: [ - ...readdirSync("packages", { withFileTypes: true }) - .filter((entry) => entry.isDirectory()) - .map((entry) => join("packages", entry.name)) - .filter((dir) => existsSync(join(dir, "tsconfig.json"))) - .map((dir) => { - return { - files: [join(dir, "src/**/*.ts"), join(dir, "conformance/**/*.ts")], - parser: "@typescript-eslint/parser", - parserOptions: { - project: "./tsconfig.json", - tsconfigRootDir: dir, - }, - settings: { - "import/resolver": { - typescript: { - project: "packages/*/tsconfig.json", - }, - }, - }, - extends: [ - "plugin:@typescript-eslint/recommended", - "plugin:@typescript-eslint/recommended-requiring-type-checking", - "plugin:import/recommended", - "plugin:import/typescript", - ], - rules: { - "@typescript-eslint/strict-boolean-expressions": "error", - "@typescript-eslint/no-unnecessary-condition": "error", - // we use complex typings, where Array is actually more readable than T[] - "@typescript-eslint/array-type": "off", - "@typescript-eslint/switch-exhaustiveness-check": "error", - "@typescript-eslint/prefer-nullish-coalescing": "error", - "@typescript-eslint/no-unnecessary-boolean-literal-compare": - "error", - "@typescript-eslint/no-invalid-void-type": "error", - "@typescript-eslint/no-base-to-string": "error", - "import/no-cycle": "error", - "import/no-duplicates": "error", + { + files: ["**/*.{ts,tsx,cts,mts}"], + parser: "@typescript-eslint/parser", + parserOptions: { + project: true, + }, + settings: { + "import/resolver": { + typescript: { + project: "tsconfig.json", }, - }; - }), + }, + }, + extends: [ + "plugin:@typescript-eslint/recommended", + "plugin:@typescript-eslint/recommended-requiring-type-checking", + "plugin:import/recommended", + "plugin:import/typescript", + ], + rules: { + "@typescript-eslint/strict-boolean-expressions": "error", + "@typescript-eslint/no-unnecessary-condition": "error", + "@typescript-eslint/array-type": "off", // we use complex typings, where Array is actually more readable than T[] + "@typescript-eslint/switch-exhaustiveness-check": "error", + "@typescript-eslint/prefer-nullish-coalescing": "error", + "@typescript-eslint/no-unnecessary-boolean-literal-compare": "error", + "@typescript-eslint/no-invalid-void-type": "error", + "@typescript-eslint/no-base-to-string": "error", + "import/no-cycle": "error", + "import/no-duplicates": "error", + }, + }, // For scripts and configurations, use Node.js rules { files: ["**/*.{js,mjs,cjs}"], @@ -101,14 +91,5 @@ module.exports = { "n/no-unsupported-features/es-syntax": "error", }, }, - { - // Our ESLint setup assumes all `.js` files are ESM, however these particular assets are CommonJS. - // Since for these files we cannot use `.cjs`, instead we override here to avoid having to override in each file - files: ["packages/connect/*.js"], - globals: { - module: "readonly", - require: "readonly", - }, - }, ], }; diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 052275684..594be9495 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -25,13 +25,22 @@ git remote add upstream https://github.com/connectrpc/connect-es.git git fetch upstream ``` -Make sure that the tests and the linters pass (you'll need Node.js in the -version specified in .nvmrc, `make`, `bash` and Docker installed): +Install dependencies (you'll need Node.js in the version specified in `.nvmrc`, +and `npm` in the version specified in `package.json`): +```bash +npm ci ``` -make + +Make sure that the tests, linters, and other checks pass: + +```bash +npm run all ``` +We're using `turborepo` to run tasks. If you haven't used it yet, take a look at +[filtering and package scoping](https://turbo.build/repo/docs/crafting-your-repository/running-tasks). + ## Making Changes Start by creating a new branch for your changes: @@ -53,16 +62,16 @@ git push origin cool_new_feature Then use the GitHub UI to open a pull request. -At this point, you're waiting on us to review your changes. We *try* to respond +At this point, you're waiting on us to review your changes. We _try_ to respond to issues and pull requests within a few business days, and we may suggest some improvements or alternatives. Once your changes are approved, one of the project maintainers will merge them. We're much more likely to approve your changes if you: -* Add tests for new functionality. -* Write a [good commit message][commit-message]. -* Maintain backward compatibility. +- Add tests for new functionality. +- Write a [good commit message][commit-message]. +- Maintain backward compatibility. [fork]: https://github.com/connectrpc/connect-es/fork [open-issue]: https://github.com/connectrpc/connect-es/issues/new diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 36cc00c8c..6163721a4 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -1,40 +1,38 @@ --- name: Bug report about: Let us know about a bug -title: '' +title: "" labels: bug -assignees: '' - +assignees: "" --- **Describe the bug** As clearly as you can, please tell us what the bug is. - **To Reproduce** If you encountered an error message, please copy and paste it verbatim. If the bug is specific to an RPC or payload, please provide a reduced example. - **Environment (please complete the following information):** + - @connectrpc/connect-web version: (for example, `0.1.0`) - @connectrpc/connect-node version: (for example, `0.1.0`) - Frontend framework and version: (for example, `react@18.2.0`) - Node.js version: (for example, `18.0.0`) - Browser and version: (for example, `Google Chrome 103.0.5060.134`) -If your problem is specific to bundling, please also provide the following information: +If your problem is specific to bundling, please also provide the following information: - Bundler and version: (for example, `webpack@5.74.0`) - Bundler plugins and version: (for example `compression-webpack-plugin@10.0.0`) -- Bundler configuration file: +- Bundler configuration file: + ```js ``` - **Additional context** Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md index ef92c7050..ca4cd5e2e 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -1,10 +1,9 @@ --- name: Feature request about: Suggest a new feature or improvement -title: '' +title: "" labels: enhancement -assignees: '' - +assignees: "" --- **Is your feature request related to a problem? Please describe.** diff --git a/.github/RELEASING.md b/.github/RELEASING.md index 2d2c1e75c..7c1775611 100644 --- a/.github/RELEASING.md +++ b/.github/RELEASING.md @@ -3,22 +3,22 @@ ## Prerequisites - See the setup and tools required in CONTRIBUTING.md -- A granular access token for npmjs.com with read and write permissions, scoped - to the `connectrpc` organization. -- Make sure that the repository is in a good state, without PRs close to merge +- A granular access token for npmjs.com with read and write permissions, scoped + to the `connectrpc` organization. +- Make sure that the repository is in a good state, without PRs close to merge that would ideally be part of the release. ## Steps -1. Choose a new version (e.g. 1.2.3), making sure to follow semver. Note that all +1. Choose a new version (e.g. 1.2.3), making sure to follow semver. Note that all packages in this repository use the same version number. 2. Make sure you are on the latest main, and create a new git branch. -3. Set the new version across all packages within the monorepo with the following - command: `make setversion SET_VERSION=1.2.3` +3. Set the new version across all packages within the monorepo with the following + command: `npm run setversion 1.2.3` 4. Commit, push, and open a pull request with the title "Release 1.2.3". The PR title must start with "Release" to trigger the conformance tests in CI. See the conformance tests [README](/packages/connect-conformance/README.md) for more details. 5. Edit the PR description with release notes. See the section below for details. 6. Make sure CI passed on your PR and ask a maintainer for review. -7. After approval, run the following command to publish to npmjs.com: `make release`. +7. After approval, run the following command to publish to npmjs.com: `npm run release`. 8. Merge your PR. 9. Create a new release in the GitHub UI - Choose "v1.2.3" as a tag and as the release title. @@ -27,19 +27,19 @@ ## Release notes -- We generate release notes with the GitHub feature, see +- We generate release notes with the GitHub feature, see https://docs.github.com/en/repositories/releasing-projects-on-github/automatically-generated-release-notes -- Only changes that impact users should be listed. No need to list things like +- Only changes that impact users should be listed. No need to list things like doc changes (unless it’s something major), dependency version bumps, or similar. Remove them from the generated release notes. -- If the release introduces a major new feature or change, add a section at the +- If the release introduces a major new feature or change, add a section at the top that explains it for users. A good example is https://github.com/connectrpc/connect-es/releases/tag/v0.10.0 - It lists a major new feature and a major change with dedicated sections, and + It lists a major new feature and a major change with dedicated sections, and moves the changelist with PR links to a separate "Enhancement" section below. -- If the release includes a very long list of changes, consider breaking the +- If the release includes a very long list of changes, consider breaking the changelist up with the sections "Enhancements", "Bugfixes", "Breaking changes". A good example is https://github.com/connectrpc/connect-es/releases/tag/v0.9.0 -- If the release includes changes specific to a npm package, group and explain +- If the release includes changes specific to a npm package, group and explain the changelist in according separate sections. A good example is https://github.com/connectrpc/connect-es/releases/tag/v0.8.0 Note that we are not using full package names with scope - a more user-friendly name like "Connect for Node.js" or "Connect for Fastify" is preferable. diff --git a/.github/workflows/browserstack.yaml b/.github/workflows/browserstack.yaml index 6cd3be3f4..8ef001f33 100644 --- a/.github/workflows/browserstack.yaml +++ b/.github/workflows/browserstack.yaml @@ -1,31 +1,39 @@ -name: browserstack +name: "Browserstack" + on: push: - branches: [main, v2] - tags: ['v*'] + branches: [main, "v*"] + tags: ["v*"] pull_request: - branches: [main, v2] + branches: [main, "v*"] workflow_dispatch: + permissions: contents: read + +env: + # https://consoledonottrack.com/ + DO_NOT_TRACK: 1 + jobs: browserstack: + name: "Test @connectrpc/connect-web" runs-on: ubuntu-22.04 + timeout-minutes: 10 steps: - - name: checkout - uses: actions/checkout@v4 - - name: cache - uses: actions/cache@v4 + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version-file: .nvmrc + - uses: actions/cache@v4 with: - path: | - ~/.tmp - .tmp - key: ${{ runner.os }}-connect-web-browserstack-${{ hashFiles('Makefile') }} - restore-keys: | - ${{ runner.os }}-connect-web-browserstack- - - name: browserstack + path: .turbo + key: ${{ runner.os }}/browserstack/${{ github.sha }} + restore-keys: ${{ runner.os }}/browserstack + - name: NPM Install + run: npm ci + - name: Browserstack env: BROWSERSTACK_USERNAME: ${{ secrets.BROWSERSTACK_USERNAME }} BROWSERSTACK_ACCESS_KEY: ${{ secrets.BROWSERSTACK_ACCESS_KEY }} - run: make testwebbrowserstack - + run: npx turbo run test-browserstack --output-logs new-only --log-order stream diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index c0d47ad76..1cb788112 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -1,27 +1,97 @@ name: ci + on: push: - branches: [main, v2] - tags: ['v*'] + branches: [main, "v*"] + tags: ["v*"] pull_request: - branches: [main, v2] + branches: [main, "v*"] workflow_dispatch: + permissions: contents: read + +env: + # https://consoledonottrack.com/ + DO_NOT_TRACK: 1 + jobs: - ci: + tasks: runs-on: ubuntu-22.04 + strategy: + fail-fast: false + matrix: + task: + - format + - license-header + - lint + - attw + - bundle-size + - build + include: + - task: format + diff-check: true + - task: license-header + diff-check: true + - task: bundle-size + diff-check: true + name: ${{ matrix.task }} steps: - - name: checkout - uses: actions/checkout@v4 - - name: cache - uses: actions/cache@v4 + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 with: - path: | - ~/.tmp - .tmp - key: ${{ runner.os }}-connect-es-ci-${{ hashFiles('Makefile') }} - restore-keys: | - ${{ runner.os }}-connect-es-ci- - - name: make - run: make ci && make checkdiff + node-version-file: .nvmrc + cache: "npm" + - uses: actions/cache@v4 + with: + path: .turbo + key: ${{ runner.os }}/${{ matrix.task }}/${{ github.sha }} + restore-keys: ${{ runner.os }}/${{ matrix.task }} + - run: npm ci + - run: npx turbo run ${{ matrix.task }} + - name: Check changed files + if: ${{ matrix.diff-check }} + run: node scripts/gh-diffcheck.js + test: + runs-on: ubuntu-22.04 + strategy: + fail-fast: false + matrix: + # Node.js v16 does not provide all necessary fetch types by default, so + # we cannot run tests for @connectrpc/connect-web. + # v16 is tested in a separate job below. + node-version: [22.7.0, 20.17.0, 18.20.4] + name: "test on Node.js ${{ matrix.node-version }}" + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version-file: .nvmrc + cache: "npm" + - uses: actions/cache@v4 + with: + path: .turbo + key: ${{ runner.os }}/test/${{ github.sha }} + restore-keys: ${{ runner.os }}/test + - run: npm ci + - run: npx turbo run test + test16: + runs-on: ubuntu-22.04 + strategy: + fail-fast: false + matrix: + node-version: [16.20.2] + name: "test on Node.js ${{ matrix.node-version }}" + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version-file: .nvmrc + cache: "npm" + - uses: actions/cache@v4 + with: + path: .turbo + key: ${{ runner.os }}/test/${{ github.sha }} + restore-keys: ${{ runner.os }}/test + - run: npm ci + - run: npx turbo run test --filter '!@connectrpc/connect-web' diff --git a/.github/workflows/cloudflare.yaml b/.github/workflows/cloudflare.yaml deleted file mode 100644 index f8a963067..000000000 --- a/.github/workflows/cloudflare.yaml +++ /dev/null @@ -1,36 +0,0 @@ -name: Cloudflare Conformance Tests -on: - schedule: - - cron: "0 0 * * *" - push: - tags: ["v*"] - pull_request: - branches: [main, v2] - workflow_dispatch: -jobs: - test: - if: github.event_name != 'pull_request' || startsWith(github.event.pull_request.title, 'Release ') - runs-on: conformance - steps: - - uses: actions/checkout@v4 - - name: cache - uses: actions/cache@v4 - with: - path: | - ~/.tmp - .tmp - key: ${{ runner.os }}-connect-conformance-ci-${{ hashFiles('Makefile') }} - restore-keys: | - ${{ runner.os }}-connect-conformance-ci- - - name: build - run: make .tmp/build/connect-conformance - - name: test - env: - CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }} - CLOUDFLARE_WORKERS_SERVER_HOST: ${{ vars.CLOUDFLARE_WORKERS_SERVER_HOST}} - CLOUDFLARE_WORKERS_CLIENT_HOST: ${{ vars.CLOUDFLARE_WORKERS_CLIENT_HOST}} - CLOUDFLARE_WORKERS_REFERENCE_SERVER_HOST: ${{ vars.CLOUDFLARE_WORKERS_REFERENCE_SERVER_HOST}} - CLOUDFLARE_WORKERS_REFERENCE_SERVER_KEY: ${{ vars.CLOUDFALRE_WORKERS_REFERENCE_SERVER_KEY }} - CLOUDFLARE_WORKERS_REFERENCE_SERVER_CERT: ${{ vars.CLOUDFALRE_WORKERS_REFERENCE_SERVER_CERT }} - TEMP: .tmp/build - run: make testcloudflareconformance diff --git a/.github/workflows/conformance-cloudflare.yaml b/.github/workflows/conformance-cloudflare.yaml new file mode 100644 index 000000000..08387e502 --- /dev/null +++ b/.github/workflows/conformance-cloudflare.yaml @@ -0,0 +1,50 @@ +name: "Cloudflare Conformance" + +on: + schedule: + - cron: "0 0 * * *" + push: + tags: ["v*"] + pull_request: + branches: [main] + workflow_dispatch: + +permissions: + contents: read + +env: + # https://consoledonottrack.com/ + DO_NOT_TRACK: 1 + +jobs: + test: + name: "Test @connectrpc/connect-cloudflare" + if: github.event_name != 'pull_request' || startsWith(github.event.pull_request.title, 'Release ') + runs-on: conformance + timeout-minutes: 20 + steps: + - uses: actions/checkout@v4 + - uses: actions/cache@v4 + with: + path: .turbo + key: ${{ runner.os }}/cloudflare-conformance/${{ github.sha }} + restore-keys: ${{ runner.os }}/cloudflare-conformance + - run: npm ci + - name: conformance:server + env: + CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }} + CLOUDFLARE_WORKERS_SERVER_HOST: ${{ vars.CLOUDFLARE_WORKERS_SERVER_HOST}} + CLOUDFLARE_WORKERS_CLIENT_HOST: ${{ vars.CLOUDFLARE_WORKERS_CLIENT_HOST}} + CLOUDFLARE_WORKERS_REFERENCE_SERVER_HOST: ${{ vars.CLOUDFLARE_WORKERS_REFERENCE_SERVER_HOST}} + CLOUDFLARE_WORKERS_REFERENCE_SERVER_KEY: ${{ vars.CLOUDFALRE_WORKERS_REFERENCE_SERVER_KEY }} + CLOUDFLARE_WORKERS_REFERENCE_SERVER_CERT: ${{ vars.CLOUDFALRE_WORKERS_REFERENCE_SERVER_CERT }} + run: npx turbo run conformance:server --filter '@connectrpc/connect-cloudflare' --output-logs new-only --log-order stream + - name: conformance:client + env: + CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }} + CLOUDFLARE_WORKERS_SERVER_HOST: ${{ vars.CLOUDFLARE_WORKERS_SERVER_HOST}} + CLOUDFLARE_WORKERS_CLIENT_HOST: ${{ vars.CLOUDFLARE_WORKERS_CLIENT_HOST}} + CLOUDFLARE_WORKERS_REFERENCE_SERVER_HOST: ${{ vars.CLOUDFLARE_WORKERS_REFERENCE_SERVER_HOST}} + CLOUDFLARE_WORKERS_REFERENCE_SERVER_KEY: ${{ vars.CLOUDFALRE_WORKERS_REFERENCE_SERVER_KEY }} + CLOUDFLARE_WORKERS_REFERENCE_SERVER_CERT: ${{ vars.CLOUDFALRE_WORKERS_REFERENCE_SERVER_CERT }} + run: npx turbo run conformance:client --filter '@connectrpc/connect-cloudflare' --output-logs new-only --log-order stream diff --git a/.github/workflows/conformance-express.yaml b/.github/workflows/conformance-express.yaml new file mode 100644 index 000000000..1ffd8f0f8 --- /dev/null +++ b/.github/workflows/conformance-express.yaml @@ -0,0 +1,39 @@ +name: "Express Conformance" + +on: + push: + branches: [main, "v*"] + tags: ["v*"] + pull_request: + branches: [main, "v*"] + workflow_dispatch: + +permissions: + contents: read + +env: + # https://consoledonottrack.com/ + DO_NOT_TRACK: 1 + +jobs: + node: + runs-on: ubuntu-22.04 + strategy: + fail-fast: false + matrix: + node-version: [22.7.0, 20.17.0, 18.20.4, 16.20.2] + name: "Node.js ${{ matrix.node-version }}" + timeout-minutes: 10 + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: ${{ matrix.node-version }} + cache: "npm" + - uses: actions/cache@v4 + with: + path: .turbo + key: ${{ runner.os }}/express-conformance/${{ github.sha }} + restore-keys: ${{ runner.os }}/express-conformance + - run: npm ci + - run: npx turbo run conformance --filter '@connectrpc/connect-express' --output-logs new-only --log-order stream diff --git a/.github/workflows/conformance-fastify.yaml b/.github/workflows/conformance-fastify.yaml new file mode 100644 index 000000000..7c4ae2fae --- /dev/null +++ b/.github/workflows/conformance-fastify.yaml @@ -0,0 +1,39 @@ +name: "Fastify Conformance" + +on: + push: + branches: [main, "v*"] + tags: ["v*"] + pull_request: + branches: [main, "v*"] + workflow_dispatch: + +permissions: + contents: read + +env: + # https://consoledonottrack.com/ + DO_NOT_TRACK: 1 + +jobs: + node: + runs-on: ubuntu-22.04 + strategy: + fail-fast: false + matrix: + node-version: [22.7.0, 20.17.0, 18.20.4, 16.20.2] + name: "Node.js ${{ matrix.node-version }}" + timeout-minutes: 10 + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: ${{ matrix.node-version }} + cache: "npm" + - uses: actions/cache@v4 + with: + path: .turbo + key: ${{ runner.os }}/fastify-conformance/${{ github.sha }} + restore-keys: ${{ runner.os }}/fastify-conformance + - run: npm ci + - run: npx turbo run conformance --filter '@connectrpc/connect-fastify' --output-logs new-only --log-order stream diff --git a/.github/workflows/conformance-node.yaml b/.github/workflows/conformance-node.yaml new file mode 100644 index 000000000..90d32c286 --- /dev/null +++ b/.github/workflows/conformance-node.yaml @@ -0,0 +1,40 @@ +name: "Node.js Conformance" + +on: + push: + branches: [main, "v*"] + tags: ["v*"] + pull_request: + branches: [main, "v*"] + workflow_dispatch: + +permissions: + contents: read + +env: + # https://consoledonottrack.com/ + DO_NOT_TRACK: 1 + +jobs: + node: + runs-on: ubuntu-22.04 + strategy: + fail-fast: false + matrix: + node-version: [22.7.0, 20.17.0, 18.20.4, 16.20.2] + side: [client, server] + name: "Node.js ${{ matrix.node-version }} ${{ matrix.side }}" + timeout-minutes: 10 + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: ${{ matrix.node-version }} + cache: "npm" + - uses: actions/cache@v4 + with: + path: .turbo + key: ${{ runner.os }}/node-conformance/${{ github.sha }} + restore-keys: ${{ runner.os }}/node-conformance + - run: npm ci + - run: npx turbo run conformance:${{matrix.side}} --filter '@connectrpc/connect-node' --output-logs new-only --log-order stream diff --git a/.github/workflows/conformance-web.yaml b/.github/workflows/conformance-web.yaml new file mode 100644 index 000000000..2d1562c45 --- /dev/null +++ b/.github/workflows/conformance-web.yaml @@ -0,0 +1,66 @@ +name: "Web Conformance" + +on: + push: + branches: [main, "v*"] + tags: ["v*"] + pull_request: + branches: [main, "v*"] + workflow_dispatch: + +permissions: + contents: read + +env: + # https://consoledonottrack.com/ + DO_NOT_TRACK: 1 + +jobs: + browser: + strategy: + fail-fast: false + matrix: + browser: [chrome, safari, firefox] + client: [promise, callback] + include: + - os: ubuntu-22.04 + - browser: safari + os: macos-12 + runs-on: ${{ matrix.os }} + name: "${{ matrix.browser }} ${{ matrix.client }}" + timeout-minutes: 10 + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version-file: .nvmrc + cache: "npm" + - uses: actions/cache@v4 + with: + path: .turbo + key: ${{ runner.os }}/web-conformance/${{ github.sha }} + restore-keys: ${{ runner.os }}/web-conformance + - run: npm ci + - run: npx turbo run conformance:${{matrix.browser}}:${{matrix.client}} --filter '@connectrpc/connect-web' --output-logs new-only --log-order stream + node: + runs-on: ubuntu-22.04 + strategy: + matrix: + # Node.js v16 does not provide all necessary fetch types by default + node-version: [22.7.0, 20.17.0, 18.20.4, 18.16.0] + client: [promise, callback] + name: "Node.js ${{ matrix.node-version }} ${{ matrix.client }}" + timeout-minutes: 10 + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: ${{ matrix.node-version }} + cache: "npm" + - uses: actions/cache@v4 + with: + path: .turbo + key: ${{ runner.os }}/web-conformance/${{ github.sha }} + restore-keys: ${{ runner.os }}/web-conformance + - run: npm ci + - run: npx turbo run conformance:node:${{matrix.client}} --filter '@connectrpc/connect-web' --output-logs new-only --log-order stream diff --git a/.github/workflows/node-conformance.yaml b/.github/workflows/node-conformance.yaml deleted file mode 100644 index aa9be5267..000000000 --- a/.github/workflows/node-conformance.yaml +++ /dev/null @@ -1,77 +0,0 @@ -name: Node Conformance -on: - push: - branches: [main, v2] - tags: ['v*'] - pull_request: - branches: [main, v2] - workflow_dispatch: -permissions: - contents: read -jobs: - node: - runs-on: ubuntu-22.04 - strategy: - matrix: - node-version: [18, 20, 21] - steps: - - uses: actions/setup-node@v4 - with: - node-version: ${{ matrix.node-version }} - - name: checkout - uses: actions/checkout@v4 - - name: cache - uses: actions/cache@v4 - with: - path: | - ~/.tmp - .tmp - key: ${{ runner.os }}-connect-node-conformance-${{ hashFiles('Makefile') }} - restore-keys: | - ${{ runner.os }}-connect-node-conformance- - - name: testconnectnodeconformance - run: make testconnectnodeconformance - fastify: - runs-on: ubuntu-22.04 - strategy: - matrix: - node-version: [18, 20, 21] - steps: - - uses: actions/setup-node@v4 - with: - node-version: ${{ matrix.node-version }} - - name: checkout - uses: actions/checkout@v4 - - name: cache - uses: actions/cache@v4 - with: - path: | - ~/.tmp - .tmp - key: ${{ runner.os }}-connect-fastify-conformance-${{ hashFiles('Makefile') }} - restore-keys: | - ${{ runner.os }}-connect-fastify-conformance- - - name: testconnectfastifyconformance - run: make testconnectfastifyconformance - express: - runs-on: ubuntu-22.04 - strategy: - matrix: - node-version: [18, 20, 21] - steps: - - uses: actions/setup-node@v4 - with: - node-version: ${{ matrix.node-version }} - - name: checkout - uses: actions/checkout@v4 - - name: cache - uses: actions/cache@v4 - with: - path: | - ~/.tmp - .tmp - key: ${{ runner.os }}-connect-express-conformance-${{ hashFiles('Makefile') }} - restore-keys: | - ${{ runner.os }}-connect-express-conformance- - - name: testconnectexpressconformance - run: make testconnectexpressconformance diff --git a/.github/workflows/web-conformance.yaml b/.github/workflows/web-conformance.yaml deleted file mode 100644 index 23bfbdaf2..000000000 --- a/.github/workflows/web-conformance.yaml +++ /dev/null @@ -1,78 +0,0 @@ -name: Web Conformance -on: - push: - branches: [main, v2] - tags: ['v*'] - pull_request: - branches: [main, v2] - workflow_dispatch: -permissions: - contents: read -jobs: - chrome: - runs-on: ubuntu-22.04 - steps: - - name: checkout - uses: actions/checkout@v4 - - name: cache - uses: actions/cache@v4 - with: - path: | - ~/.tmp - .tmp - key: ${{ runner.os }}-connect-web-chrome-conformance-${{ hashFiles('Makefile') }} - restore-keys: | - ${{ runner.os }}-connect-web-chrome-conformance- - - name: testwebchromeconformance - run: make testwebchromeconformance - firefox: - runs-on: ubuntu-22.04 - steps: - - name: checkout - uses: actions/checkout@v4 - - name: cache - uses: actions/cache@v4 - with: - path: | - ~/.tmp - .tmp - key: ${{ runner.os }}-connect-web-firefox-conformance-${{ hashFiles('Makefile') }} - restore-keys: | - ${{ runner.os }}-connect-web-firefox-conformance- - - name: testwebfirefoxconformance - run: make testwebfirefoxconformance - safari: - runs-on: macos-12 - steps: - - name: checkout - uses: actions/checkout@v4 - - name: cache - uses: actions/cache@v4 - with: - path: | - ~/.tmp - .tmp - key: ${{ runner.os }}-connect-web-safari-conformance-${{ hashFiles('Makefile') }} - restore-keys: | - ${{ runner.os }}-connect-web-safari-conformance- - - name: testwebsafariconformance - run: make testwebsafariconformance - node: - runs-on: ubuntu-22.04 - steps: - - name: checkout - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version-file: .nvmrc - - name: cache - uses: actions/cache@v4 - with: - path: | - ~/.tmp - .tmp - key: ${{ runner.os }}-connect-web-node-conformance-${{ hashFiles('Makefile') }} - restore-keys: | - ${{ runner.os }}-connect-web-node-conformance- - - name: testwebnodeconformance - run: make testwebnodeconformance diff --git a/.gitignore b/.gitignore index 2892551d5..98f977560 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ -/.tmp +.turbo +.wrangler +node_modules /packages/*/dist /packages/connect-web/conformance/logs/* -node_modules -.wrangler +packages/connect-web/local.log diff --git a/.nvmrc b/.nvmrc index 209e3ef4b..3516580bb 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -20 +20.17.0 diff --git a/.prettierignore b/.prettierignore deleted file mode 100644 index f50e69ea1..000000000 --- a/.prettierignore +++ /dev/null @@ -1,9 +0,0 @@ -node_modules -/packages/connect/src/protocol-grpc/gen/*.ts -/packages/connect-web/browserstack/gen/**/*.ts -/packages/connect-cloudflare/conformance/gen/**/*.ts -/packages/connect-express/src/testdata/gen/**/*.ts -/packages/connect-node/src/testdata/gen/**/*.ts -/packages/*/dist -/packages/*/src/gen -/.tmp diff --git a/MAINTAINERS.md b/MAINTAINERS.md index bd8aa43c8..92fa3480b 100644 --- a/MAINTAINERS.md +++ b/MAINTAINERS.md @@ -1,8 +1,8 @@ -Maintainers -=========== +# Maintainers ## Current -* [Peter Edge](https://github.com/bufdev), [Buf](https://buf.build) -* [Timo Stamm](https://github.com/timostamm), [Buf](https://buf.build) -* [Steve Ayers](https://github.com/smaye81), [Buf](https://buf.build) -* [Sri Krishna Paritala](https://github.com/srikrsna-buf), [Buf](https://buf.build) + +- [Peter Edge](https://github.com/bufdev), [Buf](https://buf.build) +- [Timo Stamm](https://github.com/timostamm), [Buf](https://buf.build) +- [Steve Ayers](https://github.com/smaye81), [Buf](https://buf.build) +- [Sri Krishna Paritala](https://github.com/srikrsna-buf), [Buf](https://buf.build) diff --git a/Makefile b/Makefile deleted file mode 100644 index 7b5d1f77d..000000000 --- a/Makefile +++ /dev/null @@ -1,299 +0,0 @@ -# See https://tech.davis-hansson.com/p/make/ -SHELL := bash -.DELETE_ON_ERROR: -.SHELLFLAGS := -eu -o pipefail -c -.DEFAULT_GOAL := all -MAKEFLAGS += --warn-undefined-variables -MAKEFLAGS += --no-builtin-rules -MAKEFLAGS += --no-print-directory -TMP = .tmp -BIN = .tmp/bin -BUILD = .tmp/build -GEN = .tmp/gen -NODE21_VERSION ?= v21.1.0 -NODE20_VERSION ?= v20.9.0 -NODE18_VERSION ?= v18.16.0 -NODE16_VERSION ?= v16.20.0 -NODE_OS = $(subst Linux,linux,$(subst Darwin,darwin,$(shell uname -s))) -NODE_ARCH = $(subst x86_64,x64,$(subst aarch64,arm64,$(shell uname -m))) - -node_modules: package-lock.json - npm ci - -node_modules/.bin/protoc-gen-es: node_modules - -$(BIN)/node21: Makefile - @mkdir -p $(@D) - curl --retry 5 --retry-all-errors --http1.1 -sSL -o $(TMP)/$(NODE21_VERSION).tar.xz https://nodejs.org/dist/$(NODE21_VERSION)/node-$(NODE21_VERSION)-$(NODE_OS)-$(NODE_ARCH).tar.xz - tar xJf $(TMP)/$(NODE21_VERSION).tar.xz -C $(TMP) node-$(NODE21_VERSION)-$(NODE_OS)-$(NODE_ARCH)/bin/node - @mv $(TMP)/node-$(NODE21_VERSION)-$(NODE_OS)-$(NODE_ARCH)/bin/node $(@) - @rm -r $(TMP)/node-$(NODE21_VERSION)-$(NODE_OS)-$(NODE_ARCH) - @rm -r $(TMP)/$(NODE21_VERSION).tar.xz - @touch $(@) - -$(BIN)/node20: Makefile - @mkdir -p $(@D) - curl --retry 5 --retry-all-errors --http1.1 -sSL -o $(TMP)/$(NODE20_VERSION).tar.xz https://nodejs.org/dist/$(NODE20_VERSION)/node-$(NODE20_VERSION)-$(NODE_OS)-$(NODE_ARCH).tar.xz - tar xJf $(TMP)/$(NODE20_VERSION).tar.xz -C $(TMP) node-$(NODE20_VERSION)-$(NODE_OS)-$(NODE_ARCH)/bin/node - @mv $(TMP)/node-$(NODE20_VERSION)-$(NODE_OS)-$(NODE_ARCH)/bin/node $(@) - @rm -r $(TMP)/node-$(NODE20_VERSION)-$(NODE_OS)-$(NODE_ARCH) - @rm -r $(TMP)/$(NODE20_VERSION).tar.xz - @touch $(@) - -$(BIN)/node18: Makefile - @mkdir -p $(@D) - curl --retry 5 --retry-all-errors --http1.1 -sSL -o $(TMP)/$(NODE18_VERSION).tar.xz https://nodejs.org/dist/$(NODE18_VERSION)/node-$(NODE18_VERSION)-$(NODE_OS)-$(NODE_ARCH).tar.xz - tar xJf $(TMP)/$(NODE18_VERSION).tar.xz -C $(TMP) node-$(NODE18_VERSION)-$(NODE_OS)-$(NODE_ARCH)/bin/node - @mv $(TMP)/node-$(NODE18_VERSION)-$(NODE_OS)-$(NODE_ARCH)/bin/node $(@) - @rm -r $(TMP)/node-$(NODE18_VERSION)-$(NODE_OS)-$(NODE_ARCH) - @rm -r $(TMP)/$(NODE18_VERSION).tar.xz - @touch $(@) - -$(BIN)/node16: Makefile - @mkdir -p $(@D) - curl --retry 5 --retry-all-errors --http1.1 -sSL -o $(TMP)/$(NODE16_VERSION).tar.xz https://nodejs.org/dist/$(NODE16_VERSION)/node-$(NODE16_VERSION)-$(NODE_OS)-$(NODE_ARCH).tar.xz - tar xJf $(TMP)/$(NODE16_VERSION).tar.xz -C $(TMP) node-$(NODE16_VERSION)-$(NODE_OS)-$(NODE_ARCH)/bin/node - @mv $(TMP)/node-$(NODE16_VERSION)-$(NODE_OS)-$(NODE_ARCH)/bin/node $(@) - @rm -r $(TMP)/node-$(NODE16_VERSION)-$(NODE_OS)-$(NODE_ARCH) - @rm -r $(TMP)/$(NODE16_VERSION).tar.xz - @touch $(@) - -$(BUILD)/connect: $(GEN)/connect node_modules packages/connect/package.json packages/connect/scripts/* tsconfig.base.json packages/connect/tsconfig.json $(shell find packages/connect/src -name '*.ts') packages/connect/*.js - npm run -w packages/connect clean - npm run -w packages/connect build - @mkdir -p $(@D) - @touch $(@) - -$(BUILD)/connect-node: $(BUILD)/connect $(BUILD)/connect-conformance packages/connect-node/tsconfig.json $(shell find packages/connect-node/src -name '*.ts') - npm run -w packages/connect-node clean - npm run -w packages/connect-node build - @mkdir -p $(@D) - @touch $(@) - -$(BUILD)/connect-fastify: $(BUILD)/connect $(BUILD)/connect-node packages/connect-fastify/tsconfig.json $(shell find packages/connect-fastify/src -name '*.ts') - npm run -w packages/connect-fastify clean - npm run -w packages/connect-fastify build - @mkdir -p $(@D) - @touch $(@) - -$(BUILD)/connect-express: $(GEN)/connect-express $(BUILD)/connect $(BUILD)/connect-node packages/connect-express/tsconfig.json $(shell find packages/connect-express/src -name '*.ts') - npm run -w packages/connect-express clean - npm run -w packages/connect-express build - @mkdir -p $(@D) - @touch $(@) - -$(BUILD)/connect-next: $(BUILD)/connect $(BUILD)/connect-node packages/connect-next/tsconfig.json $(shell find packages/connect-next/src -name '*.ts') - npm run -w packages/connect-next clean - npm run -w packages/connect-next build - @mkdir -p $(@D) - @touch $(@) - -$(BUILD)/connect-web: $(GEN)/connect-web $(BUILD)/connect $(BUILD)/connect-conformance packages/connect-web/tsconfig.json $(shell find packages/connect-web/src -name '*.ts') - npm run -w packages/connect-web clean - npm run -w packages/connect-web build - @mkdir -p $(@D) - @touch $(@) - -$(BUILD)/connect-conformance: $(GEN)/connect-conformance $(BUILD)/connect packages/connect-conformance/tsconfig.json $(shell find packages/connect-conformance/src -name '*.ts') - npm run -w packages/connect-conformance clean - npm run -w packages/connect-conformance build - @mkdir -p $(@D) - @touch $(@) - -$(BUILD)/example: $(GEN)/example $(BUILD)/connect-web packages/example/tsconfig.json $(shell find packages/example/src -name '*.ts') - npm run -w packages/example lint - @mkdir -p $(@D) - @touch $(@) - -$(BUILD)/connect-migrate: packages/connect-migrate/package.json packages/connect-migrate/tsconfig.json $(shell find packages/connect-migrate/src -name '*.ts') - npm run -w packages/connect-migrate clean - npm run -w packages/connect-migrate build - @mkdir -p $(@D) - @touch $(@) - -$(GEN)/connect: node_modules/.bin/protoc-gen-es packages/connect/buf.gen.yaml $(shell find packages/connect/src -name '*.proto') Makefile - npm run -w packages/connect generate - @mkdir -p $(@D) - @touch $(@) - -$(GEN)/connect-conformance: node_modules/.bin/protoc-gen-es packages/connect-conformance/buf.gen.yaml packages/connect-conformance/package.json Makefile - npm run -w packages/connect-conformance generate - @mkdir -p $(@D) - @touch $(@) - -$(GEN)/connect-cloudflare: node_modules/.bin/protoc-gen-es packages/connect-cloudflare/buf.gen.yaml packages/connect-cloudflare/package.json Makefile - npm run -w packages/connect-cloudflare generate - @mkdir -p $(@D) - @touch $(@) - -$(GEN)/connect-web: node_modules/.bin/protoc-gen-es packages/connect-web/browserstack/buf.gen.yaml Makefile - npm run -w packages/connect-web generate - @mkdir -p $(@D) - @touch $(@) - -$(GEN)/connect-node: node_modules/.bin/protoc-gen-es packages/connect-node/buf.gen.yaml Makefile - npm run -w packages/connect-node generate - @mkdir -p $(@D) - @touch $(@) - -$(GEN)/connect-express: node_modules/.bin/protoc-gen-es packages/connect-express/buf.gen.yaml packages/connect-express/package.json Makefile - npm run -w packages/connect-express generate - @mkdir -p $(@D) - @touch $(@) - -$(GEN)/connect-web-bench: node_modules/.bin/protoc-gen-es packages/connect-web-bench/buf.gen.yaml Makefile - npm run -w packages/connect-web-bench generate - @mkdir -p $(@D) - @touch $(@) - -$(GEN)/example: node_modules/.bin/protoc-gen-es packages/example/buf.gen.yaml $(shell find packages/example -name '*.proto') - npx -w packages/example buf generate - @mkdir -p $(@D) - @touch $(@) - - -.PHONY: help -help: ## Describe useful make targets - @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "%-30s %s\n", $$1, $$2}' - -.PHONY: all -all: build test testconformance format lint bench ## build, test, testconformance, format, lint, and bench (default) - -.PHONY: ci -ci: build test format lint bench ## build, test, format, lint, and bench (default) - -.PHONY: clean -clean: ## Delete build artifacts and installed dependencies - @# -X only removes untracked files, -d recurses into directories, -f actually removes files/dirs - git clean -Xdf - -.PHONY: build -build: $(BUILD)/connect $(BUILD)/connect-web $(BUILD)/connect-node $(BUILD)/connect-fastify $(BUILD)/connect-express $(BUILD)/connect-next $(BUILD)/example $(BUILD)/connect-migrate ## Build - -.PHONY: test -test: testconnectpackage testconnectnodepackage testconnectwebpackage testconnectexpresspackage testconnectmigrate ## Run all tests, except browserstack - -.PHONY: testconnectpackage -testconnectpackage: $(BUILD)/connect - npm run -w packages/connect jasmine - -.PHONY: testconnectnodepackage -testconnectnodepackage: $(BIN)/node16 $(BIN)/node18 $(BIN)/node20 $(BIN)/node21 $(BUILD)/connect-node - cd packages/connect-node && PATH="$(abspath $(BIN)):$(PATH)" node16 --trace-warnings ../../node_modules/.bin/jasmine --config=jasmine.json - cd packages/connect-node && PATH="$(abspath $(BIN)):$(PATH)" node18 --trace-warnings ../../node_modules/.bin/jasmine --config=jasmine.json - cd packages/connect-node && PATH="$(abspath $(BIN)):$(PATH)" node20 --trace-warnings ../../node_modules/.bin/jasmine --config=jasmine.json - cd packages/connect-node && PATH="$(abspath $(BIN)):$(PATH)" node21 --trace-warnings ../../node_modules/.bin/jasmine --config=jasmine.json - -.PHONY: testconnectwebpackage -testconnectwebpackage: $(BIN)/node18 $(BIN)/node20 $(BIN)/node21 $(BUILD)/connect-web - cd packages/connect-web && PATH="$(abspath $(BIN)):$(PATH)" NODE_TLS_REJECT_UNAUTHORIZED=0 node18 ../../node_modules/.bin/jasmine --config=jasmine.json - cd packages/connect-web && PATH="$(abspath $(BIN)):$(PATH)" NODE_TLS_REJECT_UNAUTHORIZED=0 node20 ../../node_modules/.bin/jasmine --config=jasmine.json - cd packages/connect-web && PATH="$(abspath $(BIN)):$(PATH)" NODE_TLS_REJECT_UNAUTHORIZED=0 node21 ../../node_modules/.bin/jasmine --config=jasmine.json - -.PHONY: testconnectexpresspackage -testconnectexpresspackage: $(BUILD)/connect-express - npm run -w packages/connect-express jasmine - -.PHONY: testconformance -testconformance: testconnectnodeconformance testconnectfastifyconformance testconnectexpressconformance testwebconformance - -.PHONY: testconnectnodeconformance -testconnectnodeconformance: $(BUILD)/connect-node - # Vanilla Node Server and Client - npm run -w packages/connect-node conformance - -.PHONY: testconnectexpressconformance -testconnectexpressconformance: $(BUILD)/connect-express - # Express Server - npm run -w packages/connect-express conformance - -.PHONY: testconnectfastifyconformance -testconnectfastifyconformance: $(BUILD)/connect-fastify - # Fastify Server - npm run -w packages/connect-fastify conformance - -.PHONY: testwebconformance -testwebconformance: testwebchromeconformance testwebfirefoxconformance testwebsafariconformance testwebnodeconformance - -.PHONY: testwebchromeconformance -testwebchromeconformance: $(BUILD)/connect-web - npm run -w packages/connect-web conformance:client:chrome:promise - npm run -w packages/connect-web conformance:client:chrome:callback - -.PHONY: testwebfirefoxconformance -testwebfirefoxconformance: $(BUILD)/connect-web - npm run -w packages/connect-web conformance:client:firefox:promise - npm run -w packages/connect-web conformance:client:firefox:callback - -.PHONY: testwebsafariconformance -testwebsafariconformance: $(BUILD)/connect-web - npm run -w packages/connect-web conformance:client:safari:promise - npm run -w packages/connect-web conformance:client:safari:callback - -.PHONY: testwebnodeconformance -testwebnodeconformance: $(BUILD)/connect-web - npm run -w packages/connect-web conformance:client:node:promise - npm run -w packages/connect-web conformance:client:node:callback - -.PHONY: testcloudflareconformance -testcloudflareconformance: $(GEN)/connect-cloudflare $(BUILD)/connect-conformance $(BUILD)/connect-node - npm run -w packages/connect-cloudflare conformance - -.PHONY: testwebbrowserstack -testwebbrowserstack: $(BUILD)/connect-web - npm run -w packages/connect-web karma:browserstack - -.PHONY: testconnectmigrate -testconnectmigrate: $(BUILD)/connect-migrate - npm run -w packages/connect-migrate test - -.PHONY: lint -lint: node_modules $(BUILD)/connect $(BUILD)/connect-express $(BUILD)/connect-fastify $(BUILD)/connect-next $(BUILD)/connect-node $(BUILD)/connect-web $(GEN)/connect-web-bench ## Lint all files - npx eslint --max-warnings 0 . - @# Check type exports on npm packages to verify they're correct - npm run -w packages/connect attw - npm run -w packages/connect-express attw - npm run -w packages/connect-fastify attw - npm run -w packages/connect-next attw - npm run -w packages/connect-node attw - npm run -w packages/connect-web attw - -.PHONY: format -format: node_modules ## Format all files, adding license headers - npx prettier --write '**/*.{json,js,jsx,ts,tsx,css,mjs,cjs}' --log-level error - npx license-header --ignore 'packages/*/src/gen/**/*' - -.PHONY: bench -bench: node_modules $(GEN)/connect-web-bench $(BUILD)/connect-web ## Benchmark code size - npm run -w packages/connect-web-bench bundle-size - -.PHONY: setversion -setversion: ## Set a new version in for the project, i.e. make setversion SET_VERSION=1.2.3 - node scripts/set-workspace-version.js $(SET_VERSION) - npm ci - $(MAKE) all - -# Recommended procedure: -# 1. Set a new version with the target `setversion` -# 2. Commit and push all changes -# 3. Login with `npm login` -# 4. Run this target, publishing to npmjs.com -# 5. Tag the release -.PHONY: release -release: all ## Release npm packages - @[ -z "$(shell git status --short)" ] || (echo "Uncommitted changes found." && exit 1); - npm publish \ - --tag $(shell node scripts/get-workspace-publish-tag.js || kill $$PPID;) \ - --workspace packages/connect \ - --workspace packages/connect-web \ - --workspace packages/connect-node \ - --workspace packages/connect-fastify \ - --workspace packages/connect-express \ - --workspace packages/connect-next \ - --workspace packages/connect-migrate \ - -.PHONY: checkdiff -checkdiff: - @# Used in CI to verify that `make` does not produce a diff - test -z "$$(git status --porcelain | tee /dev/stderr)" - diff --git a/README.md b/README.md index 20a2008e7..7487521ee 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ service ElizaService { And with the magic of code generation, this schema produces servers and clients: ```ts -const answer = await eliza.say({sentence: "I feel happy."}); +const answer = await eliza.say({ sentence: "I feel happy." }); console.log(answer); // {sentence: 'When you feel happy, what do you do?'} ``` @@ -43,7 +43,6 @@ gRPC-web protocols, and Connect's [own protocol](https://connectrpc.com/docs/pro optimized for the web. This gives you unparalleled interoperability across many platforms and languages, with type-safety end-to-end. - ## Get started on the web Follow our [10 minute tutorial](https://connectrpc.com/docs/web/getting-started) where @@ -56,7 +55,6 @@ We support all modern web browsers that implement the widely available [fetch API](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API) and the [Encoding API](https://developer.mozilla.org/en-US/docs/Web/API/Encoding_API). - ## Get started on Node.js Follow our [10 minute tutorial](https://connectrpc.com/docs/node/getting-started) @@ -67,7 +65,6 @@ You can serve your Connect RPCs with vanilla Node.js, or use our [server plugins for **Fastify**, **Next.js**, and **Express**. We support Node.js v16 and later with the builtin `http` and `http2` modules. - ## Other platforms Would you like to use Connect on other platforms like Bun, Deno, Vercel’s Edge Runtime, @@ -76,7 +73,6 @@ with Connect. You can reach us either through the [Buf Slack](https://buf.build/ or by filing a [GitHub issue](https://github.com/connectrpc/connect-es/issues) and we’d be more than happy to chat! - ## Packages - [@connectrpc/connect](https://www.npmjs.com/package/@connectrpc/connect): @@ -96,25 +92,23 @@ be more than happy to chat! The libraries and the generated code are compatible with ES2017 and TypeScript 4.1. - ## Ecosystem -* [examples-es](https://github.com/connectrpc/examples-es): +- [examples-es](https://github.com/connectrpc/examples-es): Examples for using Connect with various TypeScript web frameworks and tooling -* [connect-query-es](https://github.com/connectrpc/connect-query-es): +- [connect-query-es](https://github.com/connectrpc/connect-query-es): TypeScript-first expansion pack for TanStack Query that gives you Protobuf superpowers -* [connect-playwright-es](https://github.com/connectrpc/connect-playwright-es): +- [connect-playwright-es](https://github.com/connectrpc/connect-playwright-es): Playwright tests for your Connect application -* [connect-swift](https://github.com/connectrpc/connect-swift): +- [connect-swift](https://github.com/connectrpc/connect-swift): Idiomatic gRPC & Connect RPCs for Swift -* [connect-go](https://github.com/connectrpc/connect-go): +- [connect-go](https://github.com/connectrpc/connect-go): Go implementation of gRPC, gRPC-Web, and Connect -* [examples-go](https://github.com/connectrpc/examples-go): +- [examples-go](https://github.com/connectrpc/examples-go): Example RPC service powering https://demo.connectrpc.com and built with connect-go -* [conformance](https://github.com/connectrpc/conformance): +- [conformance](https://github.com/connectrpc/conformance): gRPC-Web and Connect interoperability tests -* [Buf Studio](https://buf.build/studio): web UI for ad-hoc RPCs - +- [Buf Studio](https://buf.build/studio): web UI for ad-hoc RPCs ## Status: Stable diff --git a/SECURITY.md b/SECURITY.md index 04dcde521..e15bc1420 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -1,5 +1,4 @@ -Security Policy -=============== +# Security Policy This project follows the [Connect security policy and reporting process](https://connectrpc.com/docs/governance/security). diff --git a/package-lock.json b/package-lock.json index a47c97ffa..f7a8114f6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4,19 +4,20 @@ "requires": true, "packages": { "": { + "name": "connect-es", "workspaces": [ - "./packages/connect", - "./packages/protoc-gen-connect-es", - "./packages/connect-web", - "./packages/connect-node", - "./packages/connect-fastify", - "./packages/connect-next", - "./packages/connect-express", - "./packages/connect-web-bench", - "./packages/example", - "./packages/connect-migrate", - "./packages/connect-conformance", - "./packages/connect-cloudflare" + "packages/connect", + "packages/protoc-gen-connect-es", + "packages/connect-web", + "packages/connect-node", + "packages/connect-fastify", + "packages/connect-next", + "packages/connect-express", + "packages/connect-web-bench", + "packages/example", + "packages/connect-migrate", + "packages/connect-conformance", + "packages/connect-cloudflare" ], "devDependencies": { "@arethetypeswrong/cli": "^0.15.3", @@ -28,6 +29,7 @@ "eslint-plugin-import": "^2.29.1", "eslint-plugin-n": "^17.10.1", "prettier": "^3.3.3", + "turbo": "^2.1.0", "typescript": "5.5.4" }, "engines": { @@ -37,8 +39,7 @@ }, "node_modules/@ampproject/remapping": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", - "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "license": "Apache-2.0", "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" @@ -49,15 +50,12 @@ }, "node_modules/@andrewbranch/untar.js": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@andrewbranch/untar.js/-/untar.js-1.0.3.tgz", - "integrity": "sha512-Jh15/qVmrLGhkKJBdXlK1+9tY4lZruYjsgkDFj08ZmDiWVBLJcqkok7Z0/R0In+i1rScBpJlSvrTS2Lm41Pbnw==", "dev": true }, "node_modules/@arethetypeswrong/cli": { "version": "0.15.3", - "resolved": "https://registry.npmjs.org/@arethetypeswrong/cli/-/cli-0.15.3.tgz", - "integrity": "sha512-sIMA9ZJBWDEg1+xt5RkAEflZuf8+PO8SdKj17x6PtETuUho+qlZJg4DgmKc3q+QwQ9zOB5VLK6jVRbFdNLdUIA==", "dev": true, + "license": "MIT", "dependencies": { "@arethetypeswrong/core": "0.15.1", "chalk": "^4.1.2", @@ -76,9 +74,8 @@ }, "node_modules/@arethetypeswrong/core": { "version": "0.15.1", - "resolved": "https://registry.npmjs.org/@arethetypeswrong/core/-/core-0.15.1.tgz", - "integrity": "sha512-FYp6GBAgsNz81BkfItRz8RLZO03w5+BaeiPma1uCfmxTnxbtuMrI/dbzGiOk8VghO108uFI0oJo0OkewdSHw7g==", "dev": true, + "license": "MIT", "dependencies": { "@andrewbranch/untar.js": "^1.0.3", "fflate": "^0.8.2", @@ -93,9 +90,8 @@ }, "node_modules/@arethetypeswrong/core/node_modules/typescript": { "version": "5.3.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", - "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", "dev": true, + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -106,8 +102,7 @@ }, "node_modules/@babel/code-frame": { "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", - "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "license": "MIT", "dependencies": { "@babel/highlight": "^7.24.7", "picocolors": "^1.0.0" @@ -117,28 +112,26 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.24.9", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.9.tgz", - "integrity": "sha512-e701mcfApCJqMMueQI0Fb68Amflj83+dvAvHawoBpAz+GDjCIyGHzNwnefjsWJ3xiYAqqiQFoWbspGYBdb2/ng==", + "version": "7.24.7", + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.24.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.9.tgz", - "integrity": "sha512-5e3FI4Q3M3Pbr21+5xJwCv6ZT6KmGkI0vw3Tozy5ODAQFTIWe37iT8Cr7Ice2Ntb+M3iSKCEWMB1MBgKrW3whg==", + "version": "7.24.7", + "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.24.9", - "@babel/helper-compilation-targets": "^7.24.8", - "@babel/helper-module-transforms": "^7.24.9", - "@babel/helpers": "^7.24.8", - "@babel/parser": "^7.24.8", + "@babel/generator": "^7.24.7", + "@babel/helper-compilation-targets": "^7.24.7", + "@babel/helper-module-transforms": "^7.24.7", + "@babel/helpers": "^7.24.7", + "@babel/parser": "^7.24.7", "@babel/template": "^7.24.7", - "@babel/traverse": "^7.24.8", - "@babel/types": "^7.24.9", + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -155,8 +148,7 @@ }, "node_modules/@babel/core/node_modules/json5": { "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "license": "MIT", "bin": { "json5": "lib/cli.js" }, @@ -166,18 +158,16 @@ }, "node_modules/@babel/core/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/@babel/generator": { - "version": "7.24.10", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.10.tgz", - "integrity": "sha512-o9HBZL1G2129luEUlG1hB4N/nlYNWHnpwlND9eOMclRqqu1YDy2sSYVCFUZwl8I1Gxh+QSRrP2vD7EpUmFVXxg==", + "version": "7.24.7", + "license": "MIT", "dependencies": { - "@babel/types": "^7.24.9", + "@babel/types": "^7.24.7", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^2.5.1" @@ -188,8 +178,7 @@ }, "node_modules/@babel/helper-annotate-as-pure": { "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz", - "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==", + "license": "MIT", "dependencies": { "@babel/types": "^7.24.7" }, @@ -198,13 +187,12 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.8.tgz", - "integrity": "sha512-oU+UoqCHdp+nWVDkpldqIQL/i/bvAv53tRqLG/s+cOXxe66zOYLU7ar/Xs3LdmBihrUMEUhwu6dMZwbNOYDwvw==", + "version": "7.24.7", + "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.24.8", - "@babel/helper-validator-option": "^7.24.8", - "browserslist": "^4.23.1", + "@babel/compat-data": "^7.24.7", + "@babel/helper-validator-option": "^7.24.7", + "browserslist": "^4.22.2", "lru-cache": "^5.1.1", "semver": "^6.3.1" }, @@ -214,21 +202,19 @@ }, "node_modules/@babel/helper-compilation-targets/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/@babel/helper-create-class-features-plugin": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.8.tgz", - "integrity": "sha512-4f6Oqnmyp2PP3olgUMmOwC3akxSm5aBYraQ6YDdKy7NcAMkDECHWG0DEnV6M2UAkERgIBhYt8S27rURPg7SxWA==", + "version": "7.24.7", + "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.24.7", "@babel/helper-environment-visitor": "^7.24.7", "@babel/helper-function-name": "^7.24.7", - "@babel/helper-member-expression-to-functions": "^7.24.8", + "@babel/helper-member-expression-to-functions": "^7.24.7", "@babel/helper-optimise-call-expression": "^7.24.7", "@babel/helper-replace-supers": "^7.24.7", "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", @@ -244,16 +230,14 @@ }, "node_modules/@babel/helper-create-class-features-plugin/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/@babel/helper-environment-visitor": { "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz", - "integrity": "sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==", + "license": "MIT", "dependencies": { "@babel/types": "^7.24.7" }, @@ -263,8 +247,7 @@ }, "node_modules/@babel/helper-function-name": { "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz", - "integrity": "sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==", + "license": "MIT", "dependencies": { "@babel/template": "^7.24.7", "@babel/types": "^7.24.7" @@ -275,8 +258,7 @@ }, "node_modules/@babel/helper-hoist-variables": { "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.7.tgz", - "integrity": "sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==", + "license": "MIT", "dependencies": { "@babel/types": "^7.24.7" }, @@ -285,12 +267,11 @@ } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.8.tgz", - "integrity": "sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA==", + "version": "7.24.7", + "license": "MIT", "dependencies": { - "@babel/traverse": "^7.24.8", - "@babel/types": "^7.24.8" + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -298,8 +279,7 @@ }, "node_modules/@babel/helper-module-imports": { "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", - "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", + "license": "MIT", "dependencies": { "@babel/traverse": "^7.24.7", "@babel/types": "^7.24.7" @@ -309,9 +289,8 @@ } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.24.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.9.tgz", - "integrity": "sha512-oYbh+rtFKj/HwBQkFlUzvcybzklmVdVV3UU+mN7n2t/q3yGHbuVdNxyFvSBO1tfvjyArpHNcWMAzsSPdyI46hw==", + "version": "7.24.7", + "license": "MIT", "dependencies": { "@babel/helper-environment-visitor": "^7.24.7", "@babel/helper-module-imports": "^7.24.7", @@ -328,8 +307,7 @@ }, "node_modules/@babel/helper-optimise-call-expression": { "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz", - "integrity": "sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==", + "license": "MIT", "dependencies": { "@babel/types": "^7.24.7" }, @@ -338,17 +316,15 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz", - "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==", + "version": "7.24.7", + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-replace-supers": { "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.24.7.tgz", - "integrity": "sha512-qTAxxBM81VEyoAY0TtLrx1oAEJc09ZK67Q9ljQToqCnA+55eNwCORaxlKyu+rNfX86o8OXRUSNUnrtsAZXM9sg==", + "license": "MIT", "dependencies": { "@babel/helper-environment-visitor": "^7.24.7", "@babel/helper-member-expression-to-functions": "^7.24.7", @@ -363,8 +339,7 @@ }, "node_modules/@babel/helper-simple-access": { "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", - "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", + "license": "MIT", "dependencies": { "@babel/traverse": "^7.24.7", "@babel/types": "^7.24.7" @@ -375,8 +350,7 @@ }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.7.tgz", - "integrity": "sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==", + "license": "MIT", "dependencies": { "@babel/traverse": "^7.24.7", "@babel/types": "^7.24.7" @@ -387,8 +361,7 @@ }, "node_modules/@babel/helper-split-export-declaration": { "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz", - "integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==", + "license": "MIT", "dependencies": { "@babel/types": "^7.24.7" }, @@ -397,36 +370,32 @@ } }, "node_modules/@babel/helper-string-parser": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", - "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", + "version": "7.24.7", + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", - "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", - "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==", + "version": "7.24.7", + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.8.tgz", - "integrity": "sha512-gV2265Nkcz7weJJfvDoAEVzC1e2OTDpkGbEsebse8koXUJUXPsCMi7sRo/+SPMuMZ9MtUPnGwITTnQnU5YjyaQ==", + "version": "7.24.7", + "license": "MIT", "dependencies": { "@babel/template": "^7.24.7", - "@babel/types": "^7.24.8" + "@babel/types": "^7.24.7" }, "engines": { "node": ">=6.9.0" @@ -434,8 +403,7 @@ }, "node_modules/@babel/highlight": { "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", - "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", + "license": "MIT", "dependencies": { "@babel/helper-validator-identifier": "^7.24.7", "chalk": "^2.4.2", @@ -448,8 +416,7 @@ }, "node_modules/@babel/highlight/node_modules/ansi-styles": { "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "license": "MIT", "dependencies": { "color-convert": "^1.9.0" }, @@ -459,8 +426,7 @@ }, "node_modules/@babel/highlight/node_modules/chalk": { "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "license": "MIT", "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -472,37 +438,32 @@ }, "node_modules/@babel/highlight/node_modules/color-convert": { "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "license": "MIT", "dependencies": { "color-name": "1.1.3" } }, "node_modules/@babel/highlight/node_modules/color-name": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + "license": "MIT" }, "node_modules/@babel/highlight/node_modules/escape-string-regexp": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "license": "MIT", "engines": { "node": ">=0.8.0" } }, "node_modules/@babel/highlight/node_modules/has-flag": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/@babel/highlight/node_modules/supports-color": { "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "license": "MIT", "dependencies": { "has-flag": "^3.0.0" }, @@ -511,9 +472,8 @@ } }, "node_modules/@babel/parser": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.8.tgz", - "integrity": "sha512-WzfbgXOkGzZiXXCqk43kKwZjzwx4oulxZi3nq2TYL9mOjQv6kYwul9mz6ID36njuL7Xkp6nJEfok848Zj10j/w==", + "version": "7.24.7", + "license": "MIT", "bin": { "parser": "bin/babel-parser.js" }, @@ -523,8 +483,7 @@ }, "node_modules/@babel/plugin-syntax-flow": { "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.24.7.tgz", - "integrity": "sha512-9G8GYT/dxn/D1IIKOUBmGX0mnmj46mGH9NnZyJLwtCpgh5f7D2VbuKodb+2s9m1Yavh1s7ASQN8lf0eqrb1LTw==", + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.24.7" }, @@ -537,8 +496,7 @@ }, "node_modules/@babel/plugin-syntax-jsx": { "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz", - "integrity": "sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==", + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.24.7" }, @@ -551,8 +509,7 @@ }, "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -562,8 +519,7 @@ }, "node_modules/@babel/plugin-syntax-optional-chaining": { "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -573,8 +529,7 @@ }, "node_modules/@babel/plugin-syntax-typescript": { "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.7.tgz", - "integrity": "sha512-c/+fVeJBB0FeKsFvwytYiUD+LBvhHjGSI0g446PRGdSVGZLRNArBUno2PETbAly3tpiNAQR5XaZ+JslxkotsbA==", + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.24.7" }, @@ -587,8 +542,7 @@ }, "node_modules/@babel/plugin-transform-class-properties": { "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.7.tgz", - "integrity": "sha512-vKbfawVYayKcSeSR5YYzzyXvsDFWU2mD8U5TFeXtbCPLFUqe7GyCgvO6XDHzje862ODrOwy6WCPmKeWHbCFJ4w==", + "license": "MIT", "dependencies": { "@babel/helper-create-class-features-plugin": "^7.24.7", "@babel/helper-plugin-utils": "^7.24.7" @@ -602,8 +556,7 @@ }, "node_modules/@babel/plugin-transform-flow-strip-types": { "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.24.7.tgz", - "integrity": "sha512-cjRKJ7FobOH2eakx7Ja+KpJRj8+y+/SiB3ooYm/n2UJfxu0oEaOoxOinitkJcPqv9KxS0kxTGPUaR7L2XcXDXA==", + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-flow": "^7.24.7" @@ -616,12 +569,11 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.8.tgz", - "integrity": "sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA==", + "version": "7.24.7", + "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.24.8", - "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-module-transforms": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/helper-simple-access": "^7.24.7" }, "engines": { @@ -633,8 +585,7 @@ }, "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.7.tgz", - "integrity": "sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ==", + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" @@ -647,11 +598,10 @@ } }, "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.8.tgz", - "integrity": "sha512-5cTOLSMs9eypEy8JUVvIKOu6NgvbJMnpG62VpIHrTmROdQ+L5mDAaI40g25k5vXti55JWNX5jCkq3HZxXBQANw==", + "version": "7.24.7", + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", "@babel/plugin-syntax-optional-chaining": "^7.8.3" }, @@ -664,8 +614,7 @@ }, "node_modules/@babel/plugin-transform-private-methods": { "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.7.tgz", - "integrity": "sha512-COTCOkG2hn4JKGEKBADkA8WNb35TGkkRbI5iT845dB+NyqgO8Hn+ajPbSnIQznneJTa3d30scb6iz/DhH8GsJQ==", + "license": "MIT", "dependencies": { "@babel/helper-create-class-features-plugin": "^7.24.7", "@babel/helper-plugin-utils": "^7.24.7" @@ -678,13 +627,12 @@ } }, "node_modules/@babel/plugin-transform-typescript": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.24.8.tgz", - "integrity": "sha512-CgFgtN61BbdOGCP4fLaAMOPkzWUh6yQZNMr5YSt8uz2cZSSiQONCQFWqsE4NeVfOIhqDOlS9CR3WD91FzMeB2Q==", + "version": "7.24.7", + "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-create-class-features-plugin": "^7.24.8", - "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", "@babel/plugin-syntax-typescript": "^7.24.7" }, "engines": { @@ -696,8 +644,7 @@ }, "node_modules/@babel/preset-flow": { "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.24.7.tgz", - "integrity": "sha512-NL3Lo0NorCU607zU3NwRyJbpaB6E3t0xtd3LfAQKDfkeX4/ggcDXvkmkW42QWT5owUeW/jAe4hn+2qvkV1IbfQ==", + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.24.7", "@babel/helper-validator-option": "^7.24.7", @@ -712,8 +659,7 @@ }, "node_modules/@babel/preset-typescript": { "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.24.7.tgz", - "integrity": "sha512-SyXRe3OdWwIwalxDg5UtJnJQO+YPcTfwiIY2B0Xlddh9o7jpWLvv8X1RthIeDOxQ+O1ML5BLPCONToObyVQVuQ==", + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.24.7", "@babel/helper-validator-option": "^7.24.7", @@ -730,8 +676,7 @@ }, "node_modules/@babel/register": { "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.24.6.tgz", - "integrity": "sha512-WSuFCc2wCqMeXkz/i3yfAAsxwWflEgbVkZzivgAmXl/MxrXeoYFZOOPllbC8R8WTF7u61wSRQtDVZ1879cdu6w==", + "license": "MIT", "dependencies": { "clone-deep": "^4.0.1", "find-cache-dir": "^2.0.0", @@ -748,8 +693,7 @@ }, "node_modules/@babel/template": { "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.7.tgz", - "integrity": "sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==", + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.24.7", "@babel/parser": "^7.24.7", @@ -760,18 +704,17 @@ } }, "node_modules/@babel/traverse": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.8.tgz", - "integrity": "sha512-t0P1xxAPzEDcEPmjprAQq19NWum4K0EQPjMwZQZbHt+GiZqvjCHjj755Weq1YRPVzBI+3zSfvScfpnuIecVFJQ==", + "version": "7.24.7", + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.24.8", + "@babel/generator": "^7.24.7", "@babel/helper-environment-visitor": "^7.24.7", "@babel/helper-function-name": "^7.24.7", "@babel/helper-hoist-variables": "^7.24.7", "@babel/helper-split-export-declaration": "^7.24.7", - "@babel/parser": "^7.24.8", - "@babel/types": "^7.24.8", + "@babel/parser": "^7.24.7", + "@babel/types": "^7.24.7", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -781,18 +724,16 @@ }, "node_modules/@babel/traverse/node_modules/globals": { "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/@babel/types": { - "version": "7.24.9", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.9.tgz", - "integrity": "sha512-xm8XrMKz0IlUdocVbYJe0Z9xEgidU7msskG8BbhnTPK/HZ2z/7FP7ykqPgrUH+C+r414mNfNWam1f2vqOjqjYQ==", + "version": "7.24.7", + "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.24.8", + "@babel/helper-string-parser": "^7.24.7", "@babel/helper-validator-identifier": "^7.24.7", "to-fast-properties": "^2.0.0" }, @@ -801,11 +742,9 @@ } }, "node_modules/@bufbuild/buf": { - "version": "1.38.0", - "resolved": "https://registry.npmjs.org/@bufbuild/buf/-/buf-1.38.0.tgz", - "integrity": "sha512-5I4pTI3kQl36OBBV5+ggxROt6AoukCQB4NG366wSkQN14eguthdLBGvC73LGC6hmVvwjo+nadwodIpGs2nbOvQ==", - "dev": true, + "version": "1.39.0", "hasInstallScript": true, + "license": "Apache-2.0", "bin": { "buf": "bin/buf", "protoc-gen-buf-breaking": "bin/protoc-gen-buf-breaking", @@ -815,38 +754,20 @@ "node": ">=12" }, "optionalDependencies": { - "@bufbuild/buf-darwin-arm64": "1.38.0", - "@bufbuild/buf-darwin-x64": "1.38.0", - "@bufbuild/buf-linux-aarch64": "1.38.0", - "@bufbuild/buf-linux-x64": "1.38.0", - "@bufbuild/buf-win32-arm64": "1.38.0", - "@bufbuild/buf-win32-x64": "1.38.0" + "@bufbuild/buf-darwin-arm64": "1.39.0", + "@bufbuild/buf-darwin-x64": "1.39.0", + "@bufbuild/buf-linux-aarch64": "1.39.0", + "@bufbuild/buf-linux-x64": "1.39.0", + "@bufbuild/buf-win32-arm64": "1.39.0", + "@bufbuild/buf-win32-x64": "1.39.0" } }, "node_modules/@bufbuild/buf-darwin-arm64": { - "version": "1.38.0", - "resolved": "https://registry.npmjs.org/@bufbuild/buf-darwin-arm64/-/buf-darwin-arm64-1.38.0.tgz", - "integrity": "sha512-4qGrNMUNboPyWHtWhdo9XzCGn+1/BeNlw963hhr8tGkmmc36oDGzacyw/oj7m43533TGMiLmVTqPuOAyYao+Sw==", + "version": "1.39.0", "cpu": [ "arm64" ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@bufbuild/buf-darwin-x64": { - "version": "1.38.0", - "resolved": "https://registry.npmjs.org/@bufbuild/buf-darwin-x64/-/buf-darwin-x64-1.38.0.tgz", - "integrity": "sha512-6yADcSHJayTjviy0i/32DOik4nneDvDjsN0vb1UejHL/g1/0YM8dzo4n677uHaxUe4yKr2ivYkBvKpRnMMsgDQ==", - "cpu": [ - "x64" - ], - "dev": true, + "license": "Apache-2.0", "optional": true, "os": [ "darwin" @@ -855,75 +776,10 @@ "node": ">=12" } }, - "node_modules/@bufbuild/buf-linux-aarch64": { - "version": "1.38.0", - "resolved": "https://registry.npmjs.org/@bufbuild/buf-linux-aarch64/-/buf-linux-aarch64-1.38.0.tgz", - "integrity": "sha512-Lo8d6QbZp8o11x4vkRV1Mm3wzrcXdORMYumd7Wd64UPz4l/0R11xu1wgv/gFRuse4djOAwWNNzXp4FEOq4oJwQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@bufbuild/buf-linux-x64": { - "version": "1.38.0", - "resolved": "https://registry.npmjs.org/@bufbuild/buf-linux-x64/-/buf-linux-x64-1.38.0.tgz", - "integrity": "sha512-YHkYkb0e72waDcLthK8C0ns7vMdecg+AcQugwLq6TLjvwJRyEet97tGfK1QUTGzKgN+874MmqOBCuKKfWc40YQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@bufbuild/buf-win32-arm64": { - "version": "1.38.0", - "resolved": "https://registry.npmjs.org/@bufbuild/buf-win32-arm64/-/buf-win32-arm64-1.38.0.tgz", - "integrity": "sha512-Tgj/inG+CAhRRHK/7Ku8DufVN/iG7yJs3y2U/A+pYjzdreu/egj0/2JFq9I6wjJKaPELp4+Br659qar6tABxiQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@bufbuild/buf-win32-x64": { - "version": "1.38.0", - "resolved": "https://registry.npmjs.org/@bufbuild/buf-win32-x64/-/buf-win32-x64-1.38.0.tgz", - "integrity": "sha512-Br32Xgp/tPInxMx/qNMhrsZQuef3CLeDOTqqSiPf6e2PegrWDQCJsF9jGUQTIy1na11nCAkbShnXm0EJK9bA6g==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, "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" }, @@ -983,9 +839,8 @@ }, "node_modules/@cloudflare/kv-asset-handler": { "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@cloudflare/kv-asset-handler/-/kv-asset-handler-0.3.4.tgz", - "integrity": "sha512-YLPHc8yASwjNkmcDMQMY35yiWjoKAKnhUbPRszBRS0YgH+IXtsMp61j+yTcnCE3oO2DgP0U3iejLC8FTtKDC8Q==", "dev": true, + "license": "MIT OR Apache-2.0", "dependencies": { "mime": "^3.0.0" }, @@ -995,9 +850,8 @@ }, "node_modules/@cloudflare/kv-asset-handler/node_modules/mime": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", - "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", "dev": true, + "license": "MIT", "bin": { "mime": "cli.js" }, @@ -1005,30 +859,13 @@ "node": ">=10.0.0" } }, - "node_modules/@cloudflare/workerd-darwin-64": { - "version": "1.20240821.1", - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-64/-/workerd-darwin-64-1.20240821.1.tgz", - "integrity": "sha512-CDBpfZKrSy4YrIdqS84z67r3Tzal2pOhjCsIb63IuCnvVes59/ft1qhczBzk9EffeOE2iTCrA4YBT7Sbn7USew==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=16" - } - }, "node_modules/@cloudflare/workerd-darwin-arm64": { "version": "1.20240821.1", - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-arm64/-/workerd-darwin-arm64-1.20240821.1.tgz", - "integrity": "sha512-Q+9RedvNbPcEt/dKni1oN94OxbvuNAeJkgHmrLFTGF8zu21wzOhVkQeRNxcYxrMa9mfStc457NAg13OVCj2kHQ==", "cpu": [ "arm64" ], "dev": true, + "license": "Apache-2.0", "optional": true, "os": [ "darwin" @@ -1037,74 +874,23 @@ "node": ">=16" } }, - "node_modules/@cloudflare/workerd-linux-64": { - "version": "1.20240821.1", - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-64/-/workerd-linux-64-1.20240821.1.tgz", - "integrity": "sha512-j6z3KsPtawrscoLuP985LbqFrmsJL6q1mvSXOXTqXGODAHIzGBipHARdOjms3UQqovzvqB2lQaQsZtLBwCZxtA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=16" - } - }, - "node_modules/@cloudflare/workerd-linux-arm64": { - "version": "1.20240821.1", - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-arm64/-/workerd-linux-arm64-1.20240821.1.tgz", - "integrity": "sha512-I9bHgZOxJQW0CV5gTdilyxzTG7ILzbTirehQWgfPx9X77E/7eIbR9sboOMgyeC69W4he0SKtpx0sYZuTJu4ERw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=16" - } - }, - "node_modules/@cloudflare/workerd-windows-64": { - "version": "1.20240821.1", - "resolved": "https://registry.npmjs.org/@cloudflare/workerd-windows-64/-/workerd-windows-64-1.20240821.1.tgz", - "integrity": "sha512-keC97QPArs6LWbPejQM7/Y8Jy8QqyaZow4/ZdsGo+QjlOLiZRDpAenfZx3CBUoWwEeFwQTl2FLO+8hV1SWFFYw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=16" - } - }, "node_modules/@cloudflare/workers-shared": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@cloudflare/workers-shared/-/workers-shared-0.3.0.tgz", - "integrity": "sha512-cqtLW1QiBC/ABaZIhAdyGCsnHHY6pAb6hsVUZg82Co2gQtf/faxRYV1FgpCwUYroTdk6A66xUMSTmFqreKCJow==", + "version": "0.4.1", "dev": true, + "license": "MIT OR Apache-2.0", "engines": { "node": ">=16.7.0" } }, "node_modules/@cloudflare/workers-types": { "version": "4.20240821.1", - "resolved": "https://registry.npmjs.org/@cloudflare/workers-types/-/workers-types-4.20240821.1.tgz", - "integrity": "sha512-icAkbnAqgVl6ef9lgLTom8na+kj2RBw2ViPAQ586hbdj0xZcnrjK7P46Eu08OU9D/lNDgN2sKU/sxhe2iK/gIg==", - "dev": true + "dev": true, + "license": "MIT OR Apache-2.0" }, "node_modules/@colors/colors": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.1.90" } @@ -1155,9 +941,8 @@ }, "node_modules/@cspotcode/source-map-support": { "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "0.3.9" }, @@ -1167,9 +952,8 @@ }, "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" @@ -1177,18 +961,16 @@ }, "node_modules/@esbuild-plugins/node-globals-polyfill": { "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@esbuild-plugins/node-globals-polyfill/-/node-globals-polyfill-0.2.3.tgz", - "integrity": "sha512-r3MIryXDeXDOZh7ih1l/yE9ZLORCd5e8vWg02azWRGj5SPTuoh69A2AIyn0Z31V/kHBfZ4HgWJ+OK3GTTwLmnw==", "dev": true, + "license": "ISC", "peerDependencies": { "esbuild": "*" } }, "node_modules/@esbuild-plugins/node-modules-polyfill": { "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@esbuild-plugins/node-modules-polyfill/-/node-modules-polyfill-0.2.2.tgz", - "integrity": "sha512-LXV7QsWJxRuMYvKbiznh+U1ilIop3g2TeKRzUxOG5X3YITc8JyyTa90BmLwqqv0YnX4v32CSlG+vsziZp9dMvA==", "dev": true, + "license": "ISC", "dependencies": { "escape-string-regexp": "^4.0.0", "rollup-plugin-node-polyfills": "^0.2.1" @@ -1197,448 +979,95 @@ "esbuild": "*" } }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.23.0.tgz", - "integrity": "sha512-3sG8Zwa5fMcA9bgqB8AfWPQ+HFke6uD3h1s3RIwUNK8EG7a4buxvuFTs3j1IMs2NXAk9F30C/FF4vxRgQCcmoQ==", - "cpu": [ - "ppc64" - ], - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.23.0.tgz", - "integrity": "sha512-+KuOHTKKyIKgEEqKbGTK8W7mPp+hKinbMBeEnNzjJGyFcWsfrXjSTNluJHCY1RqhxFurdD8uNXQDei7qDlR6+g==", + "node_modules/@esbuild/darwin-arm64": { + "version": "0.19.12", "cpu": [ - "arm" + "arm64" ], + "license": "MIT", "optional": true, "os": [ - "android" + "darwin" ], "engines": { - "node": ">=18" + "node": ">=12" } }, - "node_modules/@esbuild/android-arm64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.23.0.tgz", - "integrity": "sha512-EuHFUYkAVfU4qBdyivULuu03FhJO4IJN9PGuABGrFy4vUuzk91P2d+npxHcFdpUnfYKy0PuV+n6bKIpHOB3prQ==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "android" - ], + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, "engines": { - "node": ">=18" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, - "node_modules/@esbuild/android-x64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.23.0.tgz", - "integrity": "sha512-WRrmKidLoKDl56LsbBMhzTTBxrsVwTKdNbKDalbEZr0tcsBgCLbEtoNthOW6PX942YiYq8HzEnb4yWQMLQuipQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "android" - ], + "node_modules/@eslint-community/regexpp": { + "version": "4.10.1", + "dev": true, + "license": "MIT", "engines": { - "node": ">=18" + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.23.0.tgz", - "integrity": "sha512-YLntie/IdS31H54Ogdn+v50NuoWF5BDkEUFpiOChVa9UnKpftgwzZRrI4J132ETIi+D8n6xh9IviFV3eXdxfow==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "darwin" - ], + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, "engines": { - "node": ">=18" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.23.0.tgz", - "integrity": "sha512-IMQ6eme4AfznElesHUPDZ+teuGwoRmVuuixu7sv92ZkdQcPbsNHzutd+rAfaBKo8YK3IrBEi9SLLKWJdEvJniQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" + "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { + "version": "1.1.11", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.0.tgz", - "integrity": "sha512-0muYWCng5vqaxobq6LB3YNtevDFSAZGlgtLoAc81PjUfiFz36n4KMpwhtAd4he8ToSI3TGyuhyx5xmiWNYZFyw==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "freebsd" - ], + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, "engines": { - "node": ">=18" + "node": "*" } }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.23.0.tgz", - "integrity": "sha512-XKDVu8IsD0/q3foBzsXGt/KjD/yTKBCIwOHE1XwiXmrRwrX6Hbnd5Eqn/WvDekddK21tfszBSrE/WMaZh+1buQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "freebsd" - ], + "node_modules/@eslint/js": { + "version": "8.57.0", + "dev": true, + "license": "MIT", "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.23.0.tgz", - "integrity": "sha512-SEELSTEtOFu5LPykzA395Mc+54RMg1EUgXP+iw2SJ72+ooMwVsgfuwXo5Fn0wXNgWZsTVHwY2cg4Vi/bOD88qw==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.23.0.tgz", - "integrity": "sha512-j1t5iG8jE7BhonbsEg5d9qOYcVZv/Rv6tghaXM/Ug9xahM0nX/H2gfu6X6z11QRTMT6+aywOMA8TDkhPo8aCGw==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.23.0.tgz", - "integrity": "sha512-P7O5Tkh2NbgIm2R6x1zGJJsnacDzTFcRWZyTTMgFdVit6E98LTxO+v8LCCLWRvPrjdzXHx9FEOA8oAZPyApWUA==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.23.0.tgz", - "integrity": "sha512-InQwepswq6urikQiIC/kkx412fqUZudBO4SYKu0N+tGhXRWUqAx+Q+341tFV6QdBifpjYgUndV1hhMq3WeJi7A==", - "cpu": [ - "loong64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.23.0.tgz", - "integrity": "sha512-J9rflLtqdYrxHv2FqXE2i1ELgNjT+JFURt/uDMoPQLcjWQA5wDKgQA4t/dTqGa88ZVECKaD0TctwsUfHbVoi4w==", - "cpu": [ - "mips64el" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.23.0.tgz", - "integrity": "sha512-cShCXtEOVc5GxU0fM+dsFD10qZ5UpcQ8AM22bYj0u/yaAykWnqXJDpd77ublcX6vdDsWLuweeuSNZk4yUxZwtw==", - "cpu": [ - "ppc64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.23.0.tgz", - "integrity": "sha512-HEtaN7Y5UB4tZPeQmgz/UhzoEyYftbMXrBCUjINGjh3uil+rB/QzzpMshz3cNUxqXN7Vr93zzVtpIDL99t9aRw==", - "cpu": [ - "riscv64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.23.0.tgz", - "integrity": "sha512-WDi3+NVAuyjg/Wxi+o5KPqRbZY0QhI9TjrEEm+8dmpY9Xir8+HE/HNx2JoLckhKbFopW0RdO2D72w8trZOV+Wg==", - "cpu": [ - "s390x" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.23.0.tgz", - "integrity": "sha512-a3pMQhUEJkITgAw6e0bWA+F+vFtCciMjW/LPtoj99MhVt+Mfb6bbL9hu2wmTZgNd994qTAEw+U/r6k3qHWWaOQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.23.0.tgz", - "integrity": "sha512-cRK+YDem7lFTs2Q5nEv/HHc4LnrfBCbH5+JHu6wm2eP+d8OZNoSMYgPZJq78vqQ9g+9+nMuIsAO7skzphRXHyw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-arm64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.0.tgz", - "integrity": "sha512-suXjq53gERueVWu0OKxzWqk7NxiUWSUlrxoZK7usiF50C6ipColGR5qie2496iKGYNLhDZkPxBI3erbnYkU0rQ==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.23.0.tgz", - "integrity": "sha512-6p3nHpby0DM/v15IFKMjAaayFhqnXV52aEmv1whZHX56pdkK+MEaLoQWj+H42ssFarP1PcomVhbsR4pkz09qBg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.23.0.tgz", - "integrity": "sha512-BFelBGfrBwk6LVrmFzCq1u1dZbG4zy/Kp93w2+y83Q5UGYF1d8sCzeLI9NXjKyujjBBniQa8R8PzLFAUrSM9OA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.23.0.tgz", - "integrity": "sha512-lY6AC8p4Cnb7xYHuIxQ6iYPe6MfO2CC43XXKo9nBXDb35krYt7KGhQnOkRGar5psxYkircpCqfbNDB4uJbS2jQ==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.23.0.tgz", - "integrity": "sha512-7L1bHlOTcO4ByvI7OXVI5pNN6HSu6pUQq9yodga8izeuB1KcT2UkHaH6118QJwopExPn0rMHIseCTx1CRo/uNA==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.23.0.tgz", - "integrity": "sha512-Arm+WgUFLUATuoxCJcahGuk6Yj9Pzxd6l11Zb/2aAuv5kWWvvfhLFo2fni4uSK5vzlUdCGZ/BdV5tH8klj8p8g==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "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, - "dependencies": { - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.11.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz", - "integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==", - "dev": true, - "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, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/eslintrc/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, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@eslint/eslintrc/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, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "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, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/@fastify/ajv-compiler": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@fastify/ajv-compiler/-/ajv-compiler-3.6.0.tgz", - "integrity": "sha512-LwdXQJjmMD+GwLOkP7TVC68qa+pSSogeWWmznRJ/coyTcfe9qA05AHFSe1eZFwK6q+xVRpChnvFUkf1iYaSZsQ==", + "version": "3.5.0", + "license": "MIT", "peer": true, "dependencies": { "ajv": "^8.11.0", @@ -1647,13 +1076,12 @@ } }, "node_modules/@fastify/ajv-compiler/node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "version": "8.15.0", + "license": "MIT", "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", + "fast-uri": "^2.3.0", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" }, @@ -1662,36 +1090,26 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/@fastify/ajv-compiler/node_modules/ajv/node_modules/fast-uri": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.1.tgz", - "integrity": "sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==", - "peer": true - }, "node_modules/@fastify/ajv-compiler/node_modules/json-schema-traverse": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT", "peer": true }, "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/@fastify/error": { "version": "3.4.1", - "resolved": "https://registry.npmjs.org/@fastify/error/-/error-3.4.1.tgz", - "integrity": "sha512-wWSvph+29GR783IhmvdwWnN4bUxTD01Vm5Xad4i7i1VuAOItLvbPAb69sb0IQ2N57yprvhNIwAP5B6xfKTmjmQ==", + "license": "MIT", "peer": true }, "node_modules/@fastify/fast-json-stringify-compiler": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@fastify/fast-json-stringify-compiler/-/fast-json-stringify-compiler-4.3.0.tgz", - "integrity": "sha512-aZAXGYo6m22Fk1zZzEUKBvut/CIIQe/BapEORnxiD5Qr0kPHqqI69NtEMCme74h+at72sPhbkb4ZrLd1W3KRLA==", + "license": "MIT", "peer": true, "dependencies": { "fast-json-stringify": "^5.7.0" @@ -1699,8 +1117,7 @@ }, "node_modules/@fastify/merge-json-schemas": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@fastify/merge-json-schemas/-/merge-json-schemas-0.1.1.tgz", - "integrity": "sha512-fERDVz7topgNjtXsJTTW1JKLy0rhuLRcquYqNR9rF7OcVpCa2OVW49ZPDIhaRRCaUuvVxI+N416xUoF76HNSXA==", + "license": "MIT", "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3" @@ -1708,10 +1125,8 @@ }, "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==", - "deprecated": "Use @eslint/config-array instead", "dev": true, + "license": "Apache-2.0", "dependencies": { "@humanwhocodes/object-schema": "^2.0.2", "debug": "^4.3.1", @@ -1723,9 +1138,8 @@ }, "node_modules/@humanwhocodes/config-array/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" @@ -1733,9 +1147,8 @@ }, "node_modules/@humanwhocodes/config-array/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" }, @@ -1745,9 +1158,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" }, @@ -1758,16 +1170,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==", - "deprecated": "Use @eslint/object-schema instead", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/@isaacs/cliui": { "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", "dev": true, + "license": "ISC", "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", @@ -1782,9 +1191,8 @@ }, "node_modules/@isaacs/cliui/node_modules/ansi-regex": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -1794,9 +1202,8 @@ }, "node_modules/@isaacs/cliui/node_modules/ansi-styles": { "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -1806,15 +1213,13 @@ }, "node_modules/@isaacs/cliui/node_modules/emoji-regex": { "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@isaacs/cliui/node_modules/string-width": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, + "license": "MIT", "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", @@ -1829,9 +1234,8 @@ }, "node_modules/@isaacs/cliui/node_modules/strip-ansi": { "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" }, @@ -1844,9 +1248,8 @@ }, "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", @@ -1861,8 +1264,7 @@ }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "license": "MIT", "dependencies": { "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", @@ -1874,47 +1276,41 @@ }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "license": "MIT", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/set-array": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "license": "MIT", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==" + "version": "1.4.15", + "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "node_modules/@next/env": { - "version": "13.5.6", - "resolved": "https://registry.npmjs.org/@next/env/-/env-13.5.6.tgz", - "integrity": "sha512-Yac/bV5sBGkkEXmAX5FWPS9Mmo2rthrOPRQQNfycJPkjUAUclomCPH7QFVCDQ4Mp2k2K1SSM6m0zrxYrOwtFQw==", + "version": "14.2.5", + "license": "MIT", "peer": true }, "node_modules/@next/swc-darwin-arm64": { - "version": "13.5.6", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.5.6.tgz", - "integrity": "sha512-5nvXMzKtZfvcu4BhtV0KH1oGv4XEW+B+jOfmBdpFI3C7FrB/MfujRpWYSBBO64+qbW8pkZiSyQv9eiwnn5VIQA==", + "version": "14.2.5", "cpu": [ "arm64" ], + "license": "MIT", "optional": true, "os": [ "darwin" @@ -1924,158 +1320,27 @@ "node": ">= 10" } }, - "node_modules/@next/swc-darwin-x64": { - "version": "13.5.6", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-13.5.6.tgz", - "integrity": "sha512-6cgBfxg98oOCSr4BckWjLLgiVwlL3vlLj8hXg2b+nDgm4bC/qVXXLfpLB9FHdoDu4057hzywbxKvmYGmi7yUzA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ], - "peer": true, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-arm64-gnu": { - "version": "13.5.6", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.5.6.tgz", - "integrity": "sha512-txagBbj1e1w47YQjcKgSU4rRVQ7uF29YpnlHV5xuVUsgCUf2FmyfJ3CPjZUvpIeXCJAoMCFAoGnbtX86BK7+sg==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-arm64-musl": { - "version": "13.5.6", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.5.6.tgz", - "integrity": "sha512-cGd+H8amifT86ZldVJtAKDxUqeFyLWW+v2NlBULnLAdWsiuuN8TuhVBt8ZNpCqcAuoruoSWynvMWixTFcroq+Q==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-x64-gnu": { - "version": "13.5.6", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.5.6.tgz", - "integrity": "sha512-Mc2b4xiIWKXIhBy2NBTwOxGD3nHLmq4keFk+d4/WL5fMsB8XdJRdtUlL87SqVCTSaf1BRuQQf1HvXZcy+rq3Nw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-x64-musl": { - "version": "13.5.6", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.5.6.tgz", - "integrity": "sha512-CFHvP9Qz98NruJiUnCe61O6GveKKHpJLloXbDSWRhqhkJdZD2zU5hG+gtVJR//tyW897izuHpM6Gtf6+sNgJPQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-arm64-msvc": { - "version": "13.5.6", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.5.6.tgz", - "integrity": "sha512-aFv1ejfkbS7PUa1qVPwzDHjQWQtknzAZWGTKYIAaS4NMtBlk3VyA6AYn593pqNanlicewqyl2jUhQAaFV/qXsg==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "win32" - ], - "peer": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-ia32-msvc": { - "version": "13.5.6", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.5.6.tgz", - "integrity": "sha512-XqqpHgEIlBHvzwG8sp/JXMFkLAfGLqkbVsyN+/Ih1mR8INb6YCc2x/Mbwi6hsAgUnqQztz8cvEbHJUbSl7RHDg==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "win32" - ], - "peer": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-x64-msvc": { - "version": "13.5.6", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.5.6.tgz", - "integrity": "sha512-Cqfe1YmOS7k+5mGu92nl5ULkzpKuxJrP3+4AEuPmrpFZ3BHxTY3TnHmU1On3bFmFFs6FbTcdF58CCUProGpIGQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "win32" - ], - "peer": true, - "engines": { - "node": ">= 10" - } - }, - "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==", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" + "node": ">= 8" } }, "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==", + "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==", + "license": "MIT", "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -2086,9 +1351,8 @@ }, "node_modules/@pkgjs/parseargs": { "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", "dev": true, + "license": "MIT", "optional": true, "engines": { "node": ">=14" @@ -2096,8 +1360,6 @@ }, "node_modules/@promptbook/utils": { "version": "0.58.0", - "resolved": "https://registry.npmjs.org/@promptbook/utils/-/utils-0.58.0.tgz", - "integrity": "sha512-TglWndmjikWN+OGg9eNOUaMTM7RHr8uFCtgxfWULT1BUjcohywdijf54vS1U4mZ1tBLdHD4/fIrIHtmHzPUIZQ==", "dev": true, "funding": [ { @@ -2109,15 +1371,15 @@ "url": "https://github.com/webgptorg/promptbook/blob/main/README.md#%EF%B8%8F-contributing" } ], + "license": "CC-BY-4.0", "dependencies": { "spacetrim": "0.11.36" } }, "node_modules/@puppeteer/browsers": { "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-1.9.1.tgz", - "integrity": "sha512-PuvK6xZzGhKPvlx3fpfdM2kYY3P/hB1URtK8wA7XUJ6prn6pp22zvJHu48th0SGcHL9SutbPHrFuQgfXTFobWA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "debug": "4.3.4", "extract-zip": "2.0.1", @@ -2134,25 +1396,10 @@ "node": ">=16.3.0" } }, - "node_modules/@puppeteer/browsers/node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/@puppeteer/browsers/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" }, @@ -2165,38 +1412,10 @@ } } }, - "node_modules/@puppeteer/browsers/node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dev": true, - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@puppeteer/browsers/node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, - "engines": { - "node": ">=12" - } - }, "node_modules/@sindresorhus/is": { "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", - "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -2206,24 +1425,27 @@ }, "node_modules/@socket.io/component-emitter": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz", - "integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/@swc/counter": { + "version": "0.1.3", + "license": "Apache-2.0", + "peer": true }, "node_modules/@swc/helpers": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.2.tgz", - "integrity": "sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==", + "version": "0.5.5", + "license": "Apache-2.0", "peer": true, "dependencies": { + "@swc/counter": "^0.1.3", "tslib": "^2.4.0" } }, "node_modules/@szmarczak/http-timer": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", - "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==", "dev": true, + "license": "MIT", "dependencies": { "defer-to-connect": "^2.0.1" }, @@ -2233,15 +1455,13 @@ }, "node_modules/@tootallnate/quickjs-emscripten": { "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz", - "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/body-parser": { "version": "1.19.5", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", - "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", "dev": true, + "license": "MIT", "dependencies": { "@types/connect": "*", "@types/node": "*" @@ -2249,50 +1469,44 @@ }, "node_modules/@types/brotli": { "version": "1.3.4", - "resolved": "https://registry.npmjs.org/@types/brotli/-/brotli-1.3.4.tgz", - "integrity": "sha512-cKYjgaS2DMdCKF7R0F5cgx1nfBYObN2ihIuPGQ4/dlIY6RpV7OWNwe9L8V4tTVKL2eZqOkNM9FM/rgTvLf4oXw==", + "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/connect": { "version": "3.4.38", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", - "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/cookie": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/cors": { "version": "2.8.17", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz", - "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/debug": { "version": "4.1.12", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", - "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/ms": "*" } }, "node_modules/@types/express": { "version": "4.17.21", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", - "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/body-parser": "*", "@types/express-serve-static-core": "^4.17.33", @@ -2301,10 +1515,9 @@ } }, "node_modules/@types/express-serve-static-core": { - "version": "4.19.5", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.5.tgz", - "integrity": "sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg==", + "version": "4.19.3", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*", "@types/qs": "*", @@ -2314,27 +1527,23 @@ }, "node_modules/@types/http-cache-semantics": { "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", - "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/http-errors": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", - "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/jasmine": { "version": "5.1.4", - "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-5.1.4.tgz", - "integrity": "sha512-px7OMFO/ncXxixDe1zR13V1iycqWae0MxTaw62RpFlksUi5QuNWgQJFkTQjIOvrmutJbI7Fp2Y2N1F6D2R4G6w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/jscodeshift": { "version": "0.11.11", - "resolved": "https://registry.npmjs.org/@types/jscodeshift/-/jscodeshift-0.11.11.tgz", - "integrity": "sha512-d7CAfFGOupj5qCDqMODXxNz2/NwCv/Lha78ZFbnr6qpk3K98iSB8I+ig9ERE2+EeYML352VMRsjPyOpeA+04eQ==", "dev": true, + "license": "MIT", "dependencies": { "ast-types": "^0.14.1", "recast": "^0.20.3" @@ -2342,62 +1551,53 @@ }, "node_modules/@types/json5": { "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/mime": { "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", - "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/ms": { "version": "0.7.34", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz", - "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/node": { - "version": "20.14.11", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.11.tgz", - "integrity": "sha512-kprQpL8MMeszbz6ojB5/tU8PLN4kesnN8Gjzw349rDlNgsSzg90lAVj3llK99Dh7JON+t9AuscPPFW6mPbTnSA==", + "version": "20.14.1", + "license": "MIT", "dependencies": { "undici-types": "~5.26.4" } }, "node_modules/@types/node-forge": { "version": "1.3.11", - "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", - "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/qs": { "version": "6.9.15", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.15.tgz", - "integrity": "sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/range-parser": { "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", - "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", - "dev": true + "dev": true, + "license": "MIT" }, "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/@types/send": { "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", - "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", "dev": true, + "license": "MIT", "dependencies": { "@types/mime": "^1", "@types/node": "*" @@ -2405,9 +1605,8 @@ }, "node_modules/@types/serve-static": { "version": "1.15.7", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", - "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", "dev": true, + "license": "MIT", "dependencies": { "@types/http-errors": "*", "@types/node": "*", @@ -2416,49 +1615,44 @@ }, "node_modules/@types/tar-stream": { "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@types/tar-stream/-/tar-stream-3.1.3.tgz", - "integrity": "sha512-Zbnx4wpkWBMBSu5CytMbrT5ZpMiF55qgM+EpHzR4yIDu7mv52cej8hTkOc6K+LzpkOAbxwn/m7j3iO+/l42YkQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/which": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@types/which/-/which-2.0.2.tgz", - "integrity": "sha512-113D3mDkZDjo+EeUEHCFy0qniNc1ZpecGiAU7WSo7YDoSzolZIQKpYFHrPpjkB2nuyahcKfrmLXeQlh7gqJYdw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/ws": { - "version": "8.5.11", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.11.tgz", - "integrity": "sha512-4+q7P5h3SpJxaBft0Dzpbr6lmMaqh0Jr2tbhJZ/luAwvD7ohSCniYkwz/pLxuT2h0EOa6QADgJj1Ko+TzRfZ+w==", + "version": "8.5.10", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/yauzl": { "version": "2.10.3", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", - "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "@types/node": "*" } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "7.16.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.16.1.tgz", - "integrity": "sha512-SxdPak/5bO0EnGktV05+Hq8oatjAYVY3Zh2bye9pGZy6+jwyR3LG3YKkV4YatlsgqXP28BTeVm9pqwJM96vf2A==", + "version": "7.14.1", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "7.16.1", - "@typescript-eslint/type-utils": "7.16.1", - "@typescript-eslint/utils": "7.16.1", - "@typescript-eslint/visitor-keys": "7.16.1", + "@typescript-eslint/scope-manager": "7.14.1", + "@typescript-eslint/type-utils": "7.14.1", + "@typescript-eslint/utils": "7.14.1", + "@typescript-eslint/visitor-keys": "7.14.1", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", @@ -2482,15 +1676,14 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "7.16.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.16.1.tgz", - "integrity": "sha512-u+1Qx86jfGQ5i4JjK33/FnawZRpsLxRnKzGE6EABZ40KxVT/vWsiZFEBBHjFOljmmV3MBYOHEKi0Jm9hbAOClA==", + "version": "7.14.1", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/scope-manager": "7.16.1", - "@typescript-eslint/types": "7.16.1", - "@typescript-eslint/typescript-estree": "7.16.1", - "@typescript-eslint/visitor-keys": "7.16.1", + "@typescript-eslint/scope-manager": "7.14.1", + "@typescript-eslint/types": "7.14.1", + "@typescript-eslint/typescript-estree": "7.14.1", + "@typescript-eslint/visitor-keys": "7.14.1", "debug": "^4.3.4" }, "engines": { @@ -2510,13 +1703,12 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "7.16.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.16.1.tgz", - "integrity": "sha512-nYpyv6ALte18gbMz323RM+vpFpTjfNdyakbf3nsLvF43uF9KeNC289SUEW3QLZ1xPtyINJ1dIsZOuWuSRIWygw==", + "version": "7.14.1", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "7.16.1", - "@typescript-eslint/visitor-keys": "7.16.1" + "@typescript-eslint/types": "7.14.1", + "@typescript-eslint/visitor-keys": "7.14.1" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -2527,13 +1719,12 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "7.16.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.16.1.tgz", - "integrity": "sha512-rbu/H2MWXN4SkjIIyWcmYBjlp55VT+1G3duFOIukTNFxr9PI35pLc2ydwAfejCEitCv4uztA07q0QWanOHC7dA==", + "version": "7.14.1", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "7.16.1", - "@typescript-eslint/utils": "7.16.1", + "@typescript-eslint/typescript-estree": "7.14.1", + "@typescript-eslint/utils": "7.14.1", "debug": "^4.3.4", "ts-api-utils": "^1.3.0" }, @@ -2554,10 +1745,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "7.16.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.16.1.tgz", - "integrity": "sha512-AQn9XqCzUXd4bAVEsAXM/Izk11Wx2u4H3BAfQVhSfzfDOm/wAON9nP7J5rpkCxts7E5TELmN845xTUCQrD1xIQ==", + "version": "7.14.1", "dev": true, + "license": "MIT", "engines": { "node": "^18.18.0 || >=20.0.0" }, @@ -2567,13 +1757,12 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "7.16.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.16.1.tgz", - "integrity": "sha512-0vFPk8tMjj6apaAZ1HlwM8w7jbghC8jc1aRNJG5vN8Ym5miyhTQGMqU++kuBFDNKe9NcPeZ6x0zfSzV8xC1UlQ==", + "version": "7.14.1", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/types": "7.16.1", - "@typescript-eslint/visitor-keys": "7.16.1", + "@typescript-eslint/types": "7.14.1", + "@typescript-eslint/visitor-keys": "7.14.1", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -2595,15 +1784,14 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "7.16.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.16.1.tgz", - "integrity": "sha512-WrFM8nzCowV0he0RlkotGDujx78xudsxnGMBHI88l5J8wEhED6yBwaSLP99ygfrzAjsQvcYQ94quDwI0d7E1fA==", + "version": "7.14.1", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "7.16.1", - "@typescript-eslint/types": "7.16.1", - "@typescript-eslint/typescript-estree": "7.16.1" + "@typescript-eslint/scope-manager": "7.14.1", + "@typescript-eslint/types": "7.14.1", + "@typescript-eslint/typescript-estree": "7.14.1" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -2617,12 +1805,11 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "7.16.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.16.1.tgz", - "integrity": "sha512-Qlzzx4sE4u3FsHTPQAAQFJFNOuqtuY0LFrZHwQ8IHK705XxBiWOFkfKRWu6niB7hwfgnwIpO4jTC75ozW1PHWg==", + "version": "7.14.1", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "7.16.1", + "@typescript-eslint/types": "7.14.1", "eslint-visitor-keys": "^3.4.3" }, "engines": { @@ -2646,15 +1833,13 @@ }, "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/@wdio/config": { "version": "8.39.0", - "resolved": "https://registry.npmjs.org/@wdio/config/-/config-8.39.0.tgz", - "integrity": "sha512-yNuGPMPibY91s936gnJCHWlStvIyDrwLwGfLC/NCdTin4F7HL4Gp5iJnHWkJFty1/DfFi8jjoIUBNLM8HEez+A==", "dev": true, + "license": "MIT", "dependencies": { "@wdio/logger": "8.38.0", "@wdio/types": "8.39.0", @@ -2669,10 +1854,9 @@ } }, "node_modules/@wdio/config/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "version": "10.4.2", "dev": true, + "license": "ISC", "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", @@ -2684,15 +1868,17 @@ "bin": { "glob": "dist/esm/bin.mjs" }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/@wdio/logger": { "version": "8.38.0", - "resolved": "https://registry.npmjs.org/@wdio/logger/-/logger-8.38.0.tgz", - "integrity": "sha512-kcHL86RmNbcQP+Gq/vQUGlArfU6IIcbbnNp32rRIraitomZow+iEoc519rdQmSVusDozMS5DZthkgDdxK+vz6Q==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^5.1.2", "loglevel": "^1.6.0", @@ -2705,9 +1891,8 @@ }, "node_modules/@wdio/logger/node_modules/ansi-regex": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -2717,9 +1902,8 @@ }, "node_modules/@wdio/logger/node_modules/chalk": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", "dev": true, + "license": "MIT", "engines": { "node": "^12.17.0 || ^14.13 || >=16.0.0" }, @@ -2729,9 +1913,8 @@ }, "node_modules/@wdio/logger/node_modules/strip-ansi": { "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" }, @@ -2744,15 +1927,13 @@ }, "node_modules/@wdio/protocols": { "version": "8.38.0", - "resolved": "https://registry.npmjs.org/@wdio/protocols/-/protocols-8.38.0.tgz", - "integrity": "sha512-7BPi7aXwUtnXZPeWJRmnCNFjyDvGrXlBmN9D4Pi58nILkyjVRQKEY9/qv/pcdyB0cvmIvw++Kl/1Lg+RxG++UA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@wdio/repl": { "version": "8.24.12", - "resolved": "https://registry.npmjs.org/@wdio/repl/-/repl-8.24.12.tgz", - "integrity": "sha512-321F3sWafnlw93uRTSjEBVuvWCxTkWNDs7ektQS15drrroL3TMeFOynu4rDrIz0jXD9Vas0HCD2Tq/P0uxFLdw==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "^20.1.0" }, @@ -2762,9 +1943,8 @@ }, "node_modules/@wdio/types": { "version": "8.39.0", - "resolved": "https://registry.npmjs.org/@wdio/types/-/types-8.39.0.tgz", - "integrity": "sha512-86lcYROTapOJuFd9ouomFDfzDnv3Kn+jE0RmqfvN9frZAeLVJ5IKjX9M6HjplsyTZhjGO1uCaehmzx+HJus33Q==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "^20.1.0" }, @@ -2774,9 +1954,8 @@ }, "node_modules/@wdio/utils": { "version": "8.39.0", - "resolved": "https://registry.npmjs.org/@wdio/utils/-/utils-8.39.0.tgz", - "integrity": "sha512-jY+n6jlGeK+9Tx8T659PKLwMQTGpLW5H78CSEWgZLbjbVSr2LfGR8Lx0CRktNXxAtqEVZPj16Pi74OtAhvhE6Q==", "dev": true, + "license": "MIT", "dependencies": { "@puppeteer/browsers": "^1.6.0", "@wdio/logger": "8.38.0", @@ -2797,10 +1976,9 @@ } }, "node_modules/@zip.js/zip.js": { - "version": "2.7.46", - "resolved": "https://registry.npmjs.org/@zip.js/zip.js/-/zip.js-2.7.46.tgz", - "integrity": "sha512-TIFUzqSAeL+i2vBtDnmjXakZvYVUhPNxbFO3vrtQH94yXzgjefK7v3UzJdJRP1mFO8EoPVp/R+SDYG2fr22edg==", + "version": "2.7.45", "dev": true, + "license": "BSD-3-Clause", "engines": { "bun": ">=0.7.0", "deno": ">=1.0.0", @@ -2809,8 +1987,7 @@ }, "node_modules/abort-controller": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "license": "MIT", "dependencies": { "event-target-shim": "^5.0.0" }, @@ -2820,15 +1997,13 @@ }, "node_modules/abstract-logging": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/abstract-logging/-/abstract-logging-2.0.1.tgz", - "integrity": "sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA==", + "license": "MIT", "peer": true }, "node_modules/accepts": { "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "dev": true, + "license": "MIT", "dependencies": { "mime-types": "~2.1.34", "negotiator": "0.6.3" @@ -2838,10 +2013,9 @@ } }, "node_modules/acorn": { - "version": "8.12.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", - "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", + "version": "8.11.3", "dev": true, + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -2851,18 +2025,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/acorn-walk": { "version": "8.3.3", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.3.tgz", - "integrity": "sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==", "dev": true, + "license": "MIT", "dependencies": { "acorn": "^8.11.0" }, @@ -2872,9 +2044,8 @@ }, "node_modules/agent-base": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "dev": true, + "license": "MIT", "dependencies": { "debug": "4" }, @@ -2884,9 +2055,8 @@ }, "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", @@ -2900,8 +2070,7 @@ }, "node_modules/ajv-formats": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "license": "MIT", "peer": true, "dependencies": { "ajv": "^8.0.0" @@ -2916,13 +2085,12 @@ } }, "node_modules/ajv-formats/node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "version": "8.15.0", + "license": "MIT", "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", + "fast-uri": "^2.3.0", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" }, @@ -2931,23 +2099,15 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/ajv-formats/node_modules/fast-uri": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.1.tgz", - "integrity": "sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==", - "peer": true - }, "node_modules/ajv-formats/node_modules/json-schema-traverse": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT", "peer": true }, "node_modules/ansi-escapes": { "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.1.tgz", - "integrity": "sha512-4nJ3yixlEthEJ9Rk4vPcdBRkZvQZlYyu8j4/Mqz5sgIkddmEnH2Yj2ZrnP9S3tQOvSNRUIgVNF/1yPpRAGNRig==", "dev": true, + "license": "MIT", "engines": { "node": ">=14.16" }, @@ -2957,17 +2117,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" }, @@ -2980,15 +2139,13 @@ }, "node_modules/ansicolors": { "version": "0.3.2", - "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.3.2.tgz", - "integrity": "sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/anymatch": { "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, + "license": "ISC", "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -2999,9 +2156,8 @@ }, "node_modules/archiver": { "version": "7.0.1", - "resolved": "https://registry.npmjs.org/archiver/-/archiver-7.0.1.tgz", - "integrity": "sha512-ZcbTaIqJOfCc03QwD468Unz/5Ir8ATtvAHsK+FdXbDIbGfihqh9mrvdcYunQzqn4HrvWWaFyaxJhGZagaJJpPQ==", "dev": true, + "license": "MIT", "dependencies": { "archiver-utils": "^5.0.2", "async": "^3.2.4", @@ -3017,9 +2173,8 @@ }, "node_modules/archiver-utils": { "version": "5.0.2", - "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-5.0.2.tgz", - "integrity": "sha512-wuLJMmIBQYCsGZgYLTy5FIB2pF6Lfb6cXMSF8Qywwk3t20zWnAi7zLcQFdKQmIB8wyZpY5ER38x08GbwtR2cLA==", "dev": true, + "license": "MIT", "dependencies": { "glob": "^10.0.0", "graceful-fs": "^4.2.0", @@ -3034,45 +2189,43 @@ } }, "node_modules/archiver-utils/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "version": "10.4.1", "dev": true, + "license": "ISC", "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", "minimatch": "^9.0.4", "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", "path-scurry": "^1.11.1" }, "bin": { "glob": "dist/esm/bin.mjs" }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "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/aria-query": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", - "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", "dev": true, + "license": "Apache-2.0", "dependencies": { "dequal": "^2.0.3" } }, "node_modules/array-buffer-byte-length": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", - "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.5", "is-array-buffer": "^3.0.4" @@ -3086,15 +2239,13 @@ }, "node_modules/array-flatten": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/array-includes": { "version": "3.1.8", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", - "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -3112,18 +2263,16 @@ }, "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/array.prototype.findlastindex": { "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", - "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -3141,9 +2290,8 @@ }, "node_modules/array.prototype.flat": { "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", - "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -3159,9 +2307,8 @@ }, "node_modules/array.prototype.flatmap": { "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", - "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -3177,9 +2324,8 @@ }, "node_modules/arraybuffer.prototype.slice": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", - "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", "dev": true, + "license": "MIT", "dependencies": { "array-buffer-byte-length": "^1.0.1", "call-bind": "^1.0.5", @@ -3199,18 +2345,16 @@ }, "node_modules/as-table": { "version": "1.0.55", - "resolved": "https://registry.npmjs.org/as-table/-/as-table-1.0.55.tgz", - "integrity": "sha512-xvsWESUJn0JN421Xb9MQw6AsMHRCUknCe0Wjlxvjud80mU4E6hQf1A6NzQKcYNmYw62MfzEtXc+badstZP3JpQ==", "dev": true, + "license": "MIT", "dependencies": { "printable-characters": "^1.0.42" } }, "node_modules/ast-types": { "version": "0.14.2", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.14.2.tgz", - "integrity": "sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA==", "dev": true, + "license": "MIT", "dependencies": { "tslib": "^2.0.1" }, @@ -3220,14 +2364,12 @@ }, "node_modules/async": { "version": "3.2.5", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", - "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/atomic-sleep": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", - "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==", + "license": "MIT", "peer": true, "engines": { "node": ">=8.0.0" @@ -3235,9 +2377,8 @@ }, "node_modules/available-typed-arrays": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", "dev": true, + "license": "MIT", "dependencies": { "possible-typed-array-names": "^1.0.0" }, @@ -3250,8 +2391,7 @@ }, "node_modules/avvio": { "version": "8.3.2", - "resolved": "https://registry.npmjs.org/avvio/-/avvio-8.3.2.tgz", - "integrity": "sha512-st8e519GWHa/azv8S87mcJvZs4WsgTBjOw/Ih1CP6u+8SZvcOeAYNG6JbsIrAUUJJ7JfmrnOkR8ipDS+u9SIRQ==", + "license": "MIT", "peer": true, "dependencies": { "@fastify/error": "^3.3.0", @@ -3260,25 +2400,21 @@ }, "node_modules/b4a": { "version": "1.6.6", - "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.6.tgz", - "integrity": "sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg==" + "license": "Apache-2.0" }, "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==" + "license": "MIT" }, "node_modules/bare-events": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.4.2.tgz", - "integrity": "sha512-qMKFd2qG/36aA4GwvKq8MxnPgCQAmBWmSyLWsJcbn8v03wvIPQ/hG1Ms8bPzndZxMDoHpxez5VOS+gC9Yi24/Q==", + "version": "2.3.1", + "license": "Apache-2.0", "optional": true }, "node_modules/bare-fs": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-2.3.1.tgz", - "integrity": "sha512-W/Hfxc/6VehXlsgFtbB5B4xFcsCl+pAh30cYhoFyXErf6oGrwjh8SwiPAdHgpmWonKuYpZgGywN0SXt7dgsADA==", "dev": true, + "license": "Apache-2.0", "optional": true, "dependencies": { "bare-events": "^2.0.0", @@ -3288,16 +2424,14 @@ }, "node_modules/bare-os": { "version": "2.4.0", - "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-2.4.0.tgz", - "integrity": "sha512-v8DTT08AS/G0F9xrhyLtepoo9EJBJ85FRSMbu1pQUlAf6A8T0tEEQGMVObWeqpjhSPXsE0VGlluFBJu2fdoTNg==", "dev": true, + "license": "Apache-2.0", "optional": true }, "node_modules/bare-path": { "version": "2.1.3", - "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-2.1.3.tgz", - "integrity": "sha512-lh/eITfU8hrj9Ru5quUp0Io1kJWIk1bTjzo7JH1P5dWmQ2EL4hFUlfI8FonAhSlgIfhn63p84CDY/x+PisgcXA==", "dev": true, + "license": "Apache-2.0", "optional": true, "dependencies": { "bare-os": "^2.1.0" @@ -3305,9 +2439,8 @@ }, "node_modules/bare-stream": { "version": "2.1.3", - "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.1.3.tgz", - "integrity": "sha512-tiDAH9H/kP+tvNO5sczyn9ZAA7utrSMobyDchsnyyXBuUe2FSQWbxhtuHB8jwpHYYevVo2UJpcmvvjrbHboUUQ==", "dev": true, + "license": "Apache-2.0", "optional": true, "dependencies": { "streamx": "^2.18.0" @@ -3315,8 +2448,6 @@ }, "node_modules/base64-js": { "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", "funding": [ { "type": "github", @@ -3330,31 +2461,29 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/base64id": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", - "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", "dev": true, + "license": "MIT", "engines": { "node": "^4.5.0 || >= 5.9" } }, "node_modules/basic-ftp": { "version": "5.0.5", - "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.5.tgz", - "integrity": "sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==", "dev": true, + "license": "MIT", "engines": { "node": ">=10.0.0" } }, "node_modules/binary-extensions": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -3364,15 +2493,13 @@ }, "node_modules/blake3-wasm": { "version": "2.1.5", - "resolved": "https://registry.npmjs.org/blake3-wasm/-/blake3-wasm-2.1.5.tgz", - "integrity": "sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/body-parser": { "version": "1.20.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", - "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", "dev": true, + "license": "MIT", "dependencies": { "bytes": "3.1.2", "content-type": "~1.0.5", @@ -3394,32 +2521,28 @@ }, "node_modules/body-parser/node_modules/debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, + "license": "MIT", "dependencies": { "ms": "2.0.0" } }, "node_modules/body-parser/node_modules/ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true + "dev": true, + "license": "MIT" }, "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/braces": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "license": "MIT", "dependencies": { "fill-range": "^7.1.1" }, @@ -3429,16 +2552,13 @@ }, "node_modules/brotli": { "version": "1.3.3", - "resolved": "https://registry.npmjs.org/brotli/-/brotli-1.3.3.tgz", - "integrity": "sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg==", + "license": "MIT", "dependencies": { "base64-js": "^1.1.2" } }, "node_modules/browserslist": { - "version": "4.23.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.2.tgz", - "integrity": "sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA==", + "version": "4.23.1", "funding": [ { "type": "opencollective", @@ -3453,11 +2573,12 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001640", - "electron-to-chromium": "^1.4.820", + "caniuse-lite": "^1.0.30001629", + "electron-to-chromium": "^1.4.796", "node-releases": "^2.0.14", - "update-browserslist-db": "^1.1.0" + "update-browserslist-db": "^1.0.16" }, "bin": { "browserslist": "cli.js" @@ -3468,18 +2589,16 @@ }, "node_modules/browserstack": { "version": "1.5.3", - "resolved": "https://registry.npmjs.org/browserstack/-/browserstack-1.5.3.tgz", - "integrity": "sha512-AO+mECXsW4QcqC9bxwM29O7qWa7bJT94uBFzeb5brylIQwawuEziwq20dPYbins95GlWzOawgyDNdjYAo32EKg==", "dev": true, + "license": "MIT", "dependencies": { "https-proxy-agent": "^2.2.1" } }, "node_modules/browserstack-local": { "version": "1.5.5", - "resolved": "https://registry.npmjs.org/browserstack-local/-/browserstack-local-1.5.5.tgz", - "integrity": "sha512-jKne7yosrMcptj3hqxp36TP9k0ZW2sCqhyurX24rUL4G3eT7OLgv+CSQN8iq5dtkv5IK+g+v8fWvsiC/S9KxMg==", "dev": true, + "license": "MIT", "dependencies": { "agent-base": "^6.0.2", "https-proxy-agent": "^5.0.1", @@ -3490,9 +2609,8 @@ }, "node_modules/browserstack-local/node_modules/https-proxy-agent": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", "dev": true, + "license": "MIT", "dependencies": { "agent-base": "6", "debug": "4" @@ -3503,8 +2621,6 @@ }, "node_modules/buffer": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", "funding": [ { "type": "github", @@ -3519,6 +2635,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" @@ -3526,22 +2643,18 @@ }, "node_modules/buffer-crc32": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-1.0.0.tgz", - "integrity": "sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8.0.0" } }, "node_modules/buffer-from": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + "license": "MIT" }, "node_modules/busboy": { "version": "1.6.0", - "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", - "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", "peer": true, "dependencies": { "streamsearch": "^1.1.0" @@ -3552,27 +2665,24 @@ }, "node_modules/bytes": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/cacheable-lookup": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz", - "integrity": "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==", "dev": true, + "license": "MIT", "engines": { "node": ">=14.16" } }, "node_modules/cacheable-request": { "version": "10.2.14", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.14.tgz", - "integrity": "sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/http-cache-semantics": "^4.0.2", "get-stream": "^6.0.1", @@ -3588,9 +2698,8 @@ }, "node_modules/cacheable-request/node_modules/get-stream": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -3600,9 +2709,8 @@ }, "node_modules/call-bind": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", "dev": true, + "license": "MIT", "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", @@ -3619,17 +2727,14 @@ }, "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/caniuse-lite": { - "version": "1.0.30001642", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001642.tgz", - "integrity": "sha512-3XQ0DoRgLijXJErLSl+bLnJ+Et4KqV1PY6JJBGAFlsNsz31zeAIncyeZfLCabHK/jtSh+671RM9YMldxjUPZtA==", + "version": "1.0.30001639", "funding": [ { "type": "opencollective", @@ -3643,13 +2748,13 @@ "type": "github", "url": "https://github.com/sponsors/ai" } - ] + ], + "license": "CC-BY-4.0" }, "node_modules/capnp-ts": { "version": "0.7.0", - "resolved": "https://registry.npmjs.org/capnp-ts/-/capnp-ts-0.7.0.tgz", - "integrity": "sha512-XKxXAC3HVPv7r674zP0VC3RTXz+/JKhfyw94ljvF80yynK6VkTnqE3jMuN8b3dUVmmc43TjyxjW4KTsmB3c86g==", "dev": true, + "license": "MIT", "dependencies": { "debug": "^4.3.1", "tslib": "^2.2.0" @@ -3657,9 +2762,8 @@ }, "node_modules/cardinal": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/cardinal/-/cardinal-2.1.1.tgz", - "integrity": "sha512-JSr5eOgoEymtYHBjNWyjrMqet9Am2miJhlfKNdqLp6zoeAh0KN5dRAcxlecj5mAJrmQomgiOBj35xHLrFjqBpw==", "dev": true, + "license": "MIT", "dependencies": { "ansicolors": "~0.3.2", "redeyed": "~2.1.0" @@ -3670,8 +2774,8 @@ }, "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" @@ -3685,18 +2789,16 @@ }, "node_modules/char-regex": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" } }, "node_modules/chokidar": { "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "dev": true, + "license": "MIT", "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -3718,9 +2820,8 @@ }, "node_modules/chokidar/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" }, @@ -3730,9 +2831,8 @@ }, "node_modules/chromium-bidi": { "version": "0.4.16", - "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.4.16.tgz", - "integrity": "sha512-7ZbXdWERxRxSwo3txsBjjmc/NLxqb1Bk30mRb0BMS4YIaiV6zvKZqL/UAH+DdqcDYayDWk2n/y8klkBDODrPvA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "mitt": "3.0.0" }, @@ -3742,9 +2842,8 @@ }, "node_modules/cli-table3": { "version": "0.6.5", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz", - "integrity": "sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==", "dev": true, + "license": "MIT", "dependencies": { "string-width": "^4.2.0" }, @@ -3757,25 +2856,25 @@ }, "node_modules/client-only": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", - "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==", + "license": "MIT", "peer": true }, "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "version": "8.0.1", "dev": true, + "license": "ISC", "dependencies": { "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", + "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" } }, "node_modules/clone-deep": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "license": "MIT", "dependencies": { "is-plain-object": "^2.0.4", "kind-of": "^6.0.2", @@ -3787,8 +2886,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" }, @@ -3798,28 +2897,25 @@ }, "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, + "license": "MIT" }, "node_modules/commander": { "version": "10.0.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", - "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", "dev": true, + "license": "MIT", "engines": { "node": ">=14" } }, "node_modules/commondir": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==" + "license": "MIT" }, "node_modules/compress-commons": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-6.0.2.tgz", - "integrity": "sha512-6FqVXeETqWPoGcfzrXb37E50NP0LXT8kAMu5ooZayhWWdgEY4lBEEcbQNXtkuKQsGduxiIcI4gOTsxTmuq/bSg==", "dev": true, + "license": "MIT", "dependencies": { "crc-32": "^1.2.0", "crc32-stream": "^6.0.0", @@ -3833,14 +2929,12 @@ }, "node_modules/concat-map": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + "license": "MIT" }, "node_modules/connect": { "version": "3.7.0", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", - "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", "dev": true, + "license": "MIT", "dependencies": { "debug": "2.6.9", "finalhandler": "1.1.2", @@ -3853,18 +2947,16 @@ }, "node_modules/connect/node_modules/debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, + "license": "MIT", "dependencies": { "ms": "2.0.0" } }, "node_modules/connect/node_modules/finalhandler": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", "dev": true, + "license": "MIT", "dependencies": { "debug": "2.6.9", "encodeurl": "~1.0.2", @@ -3880,15 +2972,13 @@ }, "node_modules/connect/node_modules/ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/connect/node_modules/on-finished": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", "dev": true, + "license": "MIT", "dependencies": { "ee-first": "1.1.1" }, @@ -3898,27 +2988,16 @@ }, "node_modules/connect/node_modules/statuses": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, - "node_modules/consola": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/consola/-/consola-3.2.3.tgz", - "integrity": "sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==", - "dev": true, - "engines": { - "node": "^14.18.0 || >=16.10.0" - } - }, "node_modules/content-disposition": { "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "5.2.1" }, @@ -3928,43 +3007,37 @@ }, "node_modules/content-type": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/convert-source-map": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" + "license": "MIT" }, "node_modules/cookie": { "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/cookie-signature": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/core-util-is": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/cors": { "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", "dev": true, + "license": "MIT", "dependencies": { "object-assign": "^4", "vary": "^1" @@ -3975,9 +3048,8 @@ }, "node_modules/crc-32": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", - "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", "dev": true, + "license": "Apache-2.0", "bin": { "crc32": "bin/crc32.njs" }, @@ -3987,9 +3059,8 @@ }, "node_modules/crc32-stream": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-6.0.0.tgz", - "integrity": "sha512-piICUB6ei4IlTv1+653yq5+KoqfBYmj9bw6LqXoOneTMDXk5nM1qt12mFW1caG3LlJXEKW1Bp0WggEmIfQB34g==", "dev": true, + "license": "MIT", "dependencies": { "crc-32": "^1.2.0", "readable-stream": "^4.0.0" @@ -4000,18 +3071,16 @@ }, "node_modules/cross-fetch": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz", - "integrity": "sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==", "dev": true, + "license": "MIT", "dependencies": { "node-fetch": "^2.6.12" } }, "node_modules/cross-fetch/node_modules/node-fetch": { "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", "dev": true, + "license": "MIT", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -4029,9 +3098,8 @@ }, "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", @@ -4043,36 +3111,29 @@ }, "node_modules/css-shorthand-properties": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/css-shorthand-properties/-/css-shorthand-properties-1.1.1.tgz", - "integrity": "sha512-Md+Juc7M3uOdbAFwOYlTrccIZ7oCFuzrhKYQjdeUEW/sE1hv17Jp/Bws+ReOPpGVBTYCBoYo+G17V5Qo8QQ75A==", "dev": true }, "node_modules/css-value": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/css-value/-/css-value-0.0.1.tgz", - "integrity": "sha512-FUV3xaJ63buRLgHrLQVlVgQnQdR4yqdLGaDu7g8CQcWjInDfM9plBTPI9FRfpahju1UBSaMckeb2/46ApS/V1Q==", "dev": true }, "node_modules/custom-event": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", - "integrity": "sha512-GAj5FOq0Hd+RsCGVJxZuKaIDXDf3h6GQoNEjFgbLLI/trgtavwUbSnZ5pVfg27DVCaWjIohryS0JFwIJyT2cMg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/data-uri-to-buffer": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", - "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", "dev": true, + "license": "MIT", "engines": { "node": ">= 12" } }, "node_modules/data-view-buffer": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", - "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.6", "es-errors": "^1.3.0", @@ -4087,9 +3148,8 @@ }, "node_modules/data-view-byte-length": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", - "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "es-errors": "^1.3.0", @@ -4104,9 +3164,8 @@ }, "node_modules/data-view-byte-offset": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", - "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.6", "es-errors": "^1.3.0", @@ -4121,9 +3180,8 @@ }, "node_modules/date-fns": { "version": "3.6.0", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-3.6.0.tgz", - "integrity": "sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==", "dev": true, + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/kossnocorp" @@ -4131,17 +3189,15 @@ }, "node_modules/date-format": { "version": "4.0.14", - "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.14.tgz", - "integrity": "sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==", "dev": true, + "license": "MIT", "engines": { "node": ">=4.0" } }, "node_modules/debug": { "version": "4.3.5", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", - "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "license": "MIT", "dependencies": { "ms": "2.1.2" }, @@ -4156,9 +3212,8 @@ }, "node_modules/decamelize": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-6.0.0.tgz", - "integrity": "sha512-Fv96DCsdOgB6mdGl67MT5JaTNKRzrzill5OH5s8bjYJXVlcXyPYGyPsUkWyGV5p1TXI5esYIYMMeDJL0hEIwaA==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -4168,9 +3223,8 @@ }, "node_modules/decompress-response": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", "dev": true, + "license": "MIT", "dependencies": { "mimic-response": "^3.1.0" }, @@ -4183,9 +3237,8 @@ }, "node_modules/decompress-response/node_modules/mimic-response": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -4195,33 +3248,29 @@ }, "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/deepmerge-ts": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/deepmerge-ts/-/deepmerge-ts-5.1.0.tgz", - "integrity": "sha512-eS8dRJOckyo9maw9Tu5O5RUi/4inFLrnoLkBe3cPfDMx3WZioXtmOew4TXQaxq7Rhl4xjDtR7c6x8nNTxOvbFw==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=16.0.0" } }, "node_modules/defer-to-connect": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", - "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" } }, "node_modules/define-data-property": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dev": true, + "license": "MIT", "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", @@ -4236,9 +3285,8 @@ }, "node_modules/define-properties": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "dev": true, + "license": "MIT", "dependencies": { "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", @@ -4253,15 +3301,13 @@ }, "node_modules/defu": { "version": "6.1.4", - "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz", - "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/degenerator": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz", - "integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==", "dev": true, + "license": "MIT", "dependencies": { "ast-types": "^0.13.4", "escodegen": "^2.1.0", @@ -4273,9 +3319,8 @@ }, "node_modules/degenerator/node_modules/ast-types": { "version": "0.13.4", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", - "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", "dev": true, + "license": "MIT", "dependencies": { "tslib": "^2.0.1" }, @@ -4285,27 +3330,24 @@ }, "node_modules/depd": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/dequal": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/destroy": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8", "npm": "1.2.8000 || >= 1.4.16" @@ -4313,21 +3355,18 @@ }, "node_modules/devtools-protocol": { "version": "0.0.1302984", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1302984.tgz", - "integrity": "sha512-Rgh2Sk5fUSCtEx4QGH9iwTyECdFPySG2nlz5J8guGh2Wlha6uzSOCq/DCEC8faHlLaMPZJMuZ4ovgcX4LvOkKA==", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/di": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", - "integrity": "sha512-uJaamHkagcZtHPqCIHZxnFrXlunQXgBOsZSUOWwFw31QJCAbyTBoHMW75YOTur5ZNx8pIeAKgf6GWIgaqqiLhA==", - "dev": true + "dev": true, + "license": "MIT" }, "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" }, @@ -4337,9 +3376,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" }, @@ -4349,9 +3387,8 @@ }, "node_modules/dom-serialize": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", - "integrity": "sha512-Yra4DbvoW7/Z6LBN560ZwXMjoNOSAN2wRsKFGc4iBeso+mpIA6qj1vfdf9HpMaKAqG6wXTy+1SYEzmNpKXOSsQ==", "dev": true, + "license": "MIT", "dependencies": { "custom-event": "~1.0.0", "ent": "~2.2.0", @@ -4361,21 +3398,18 @@ }, "node_modules/duplexer": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/eastasianwidth": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/edge-paths": { "version": "3.0.5", - "resolved": "https://registry.npmjs.org/edge-paths/-/edge-paths-3.0.5.tgz", - "integrity": "sha512-sB7vSrDnFa4ezWQk9nZ/n0FdpdUuC6R1EOrlU3DL+bovcNFK28rqu2emmAUjujYEJTWIgQGqgVVWUZXMnc8iWg==", "dev": true, + "license": "MIT", "dependencies": { "@types/which": "^2.0.1", "which": "^2.0.2" @@ -4389,10 +3423,9 @@ }, "node_modules/edgedriver": { "version": "5.6.0", - "resolved": "https://registry.npmjs.org/edgedriver/-/edgedriver-5.6.0.tgz", - "integrity": "sha512-IeJXEczG+DNYBIa9gFgVYTqrawlxmc9SUqUsWU2E98jOsO/amA7wzabKOS8Bwgr/3xWoyXCJ6yGFrbFKrilyyQ==", "dev": true, "hasInstallScript": true, + "license": "MIT", "dependencies": { "@wdio/logger": "^8.28.0", "@zip.js/zip.js": "^2.7.44", @@ -4407,18 +3440,16 @@ }, "node_modules/edgedriver/node_modules/isexe": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", - "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", "dev": true, + "license": "ISC", "engines": { "node": ">=16" } }, "node_modules/edgedriver/node_modules/which": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", - "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", "dev": true, + "license": "ISC", "dependencies": { "isexe": "^3.1.1" }, @@ -4431,50 +3462,43 @@ }, "node_modules/ee-first": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.4.829", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.829.tgz", - "integrity": "sha512-5qp1N2POAfW0u1qGAxXEtz6P7bO1m6gpZr5hdf5ve6lxpLM7MpiM4jIPz7xcrNlClQMafbyUDDWjlIQZ1Mw0Rw==" + "version": "1.4.816", + "license": "ISC" }, "node_modules/emoji-regex": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/emojilib": { "version": "2.4.0", - "resolved": "https://registry.npmjs.org/emojilib/-/emojilib-2.4.0.tgz", - "integrity": "sha512-5U0rVMU5Y2n2+ykNLQqMoqklN9ICBT/KsvC1Gz6vqHbz2AXXGkG+Pm5rMWk/8Vjrr/mY9985Hi8DYzn1F09Nyw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/encodeurl": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/end-of-stream": { "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", "dev": true, + "license": "MIT", "dependencies": { "once": "^1.4.0" } }, "node_modules/engine.io": { - "version": "6.5.5", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.5.tgz", - "integrity": "sha512-C5Pn8Wk+1vKBoHghJODM63yk8MvrO9EWZUfkAt5HAqIgPE4/8FF0PEGHXtEd40l223+cE5ABWuPzm38PHFXfMA==", + "version": "6.5.4", "dev": true, + "license": "MIT", "dependencies": { "@types/cookie": "^0.4.1", "@types/cors": "^2.8.12", @@ -4485,35 +3509,32 @@ "cors": "~2.8.5", "debug": "~4.3.1", "engine.io-parser": "~5.2.1", - "ws": "~8.17.1" + "ws": "~8.11.0" }, "engines": { "node": ">=10.2.0" } }, "node_modules/engine.io-parser": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz", - "integrity": "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==", + "version": "5.2.2", "dev": true, + "license": "MIT", "engines": { "node": ">=10.0.0" } }, "node_modules/engine.io/node_modules/cookie": { "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/enhanced-resolve": { "version": "5.17.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.0.tgz", - "integrity": "sha512-dwDPwZL0dmye8Txp2gzFmA6sxALaSvdRDjPH0viLcKrtlOL3tw62nWWweVD1SdILDTJrbrL6tdWVN58Wo6U3eA==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" @@ -4523,28 +3544,14 @@ } }, "node_modules/ent": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.1.tgz", - "integrity": "sha512-QHuXVeZx9d+tIQAz/XztU0ZwZf2Agg9CcXcgE1rurqvdBeDBrpSwjl8/6XUqMg7tw2Y7uAdKb2sRv+bSEFqQ5A==", + "version": "2.2.0", "dev": true, - "dependencies": { - "punycode": "^1.4.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/ent/node_modules/punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", - "dev": true + "license": "MIT" }, "node_modules/es-abstract": { "version": "1.23.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", - "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", "dev": true, + "license": "MIT", "dependencies": { "array-buffer-byte-length": "^1.0.1", "arraybuffer.prototype.slice": "^1.0.3", @@ -4602,9 +3609,8 @@ }, "node_modules/es-define-property": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", "dev": true, + "license": "MIT", "dependencies": { "get-intrinsic": "^1.2.4" }, @@ -4614,18 +3620,16 @@ }, "node_modules/es-errors": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" } }, "node_modules/es-object-atoms": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", - "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", "dev": true, + "license": "MIT", "dependencies": { "es-errors": "^1.3.0" }, @@ -4635,9 +3639,8 @@ }, "node_modules/es-set-tostringtag": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", - "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", "dev": true, + "license": "MIT", "dependencies": { "get-intrinsic": "^1.2.4", "has-tostringtag": "^1.0.2", @@ -4649,18 +3652,16 @@ }, "node_modules/es-shim-unscopables": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", - "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", "dev": true, + "license": "MIT", "dependencies": { "hasown": "^2.0.0" } }, "node_modules/es-to-primitive": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, + "license": "MIT", "dependencies": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", @@ -4675,76 +3676,69 @@ }, "node_modules/es6-promise": { "version": "4.2.8", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", - "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/es6-promisify": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", - "integrity": "sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==", "dev": true, + "license": "MIT", "dependencies": { "es6-promise": "^4.0.3" } }, "node_modules/esbuild": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.23.0.tgz", - "integrity": "sha512-1lvV17H2bMYda/WaFb2jLPeHU3zml2k4/yagNMG8Q/YtfMjCwEUZa2eXXMgZTVSL5q1n4H7sQ0X6CdJDqqeCFA==", + "version": "0.19.12", "hasInstallScript": true, + "license": "MIT", "bin": { "esbuild": "bin/esbuild" }, "engines": { - "node": ">=18" + "node": ">=12" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.23.0", - "@esbuild/android-arm": "0.23.0", - "@esbuild/android-arm64": "0.23.0", - "@esbuild/android-x64": "0.23.0", - "@esbuild/darwin-arm64": "0.23.0", - "@esbuild/darwin-x64": "0.23.0", - "@esbuild/freebsd-arm64": "0.23.0", - "@esbuild/freebsd-x64": "0.23.0", - "@esbuild/linux-arm": "0.23.0", - "@esbuild/linux-arm64": "0.23.0", - "@esbuild/linux-ia32": "0.23.0", - "@esbuild/linux-loong64": "0.23.0", - "@esbuild/linux-mips64el": "0.23.0", - "@esbuild/linux-ppc64": "0.23.0", - "@esbuild/linux-riscv64": "0.23.0", - "@esbuild/linux-s390x": "0.23.0", - "@esbuild/linux-x64": "0.23.0", - "@esbuild/netbsd-x64": "0.23.0", - "@esbuild/openbsd-arm64": "0.23.0", - "@esbuild/openbsd-x64": "0.23.0", - "@esbuild/sunos-x64": "0.23.0", - "@esbuild/win32-arm64": "0.23.0", - "@esbuild/win32-ia32": "0.23.0", - "@esbuild/win32-x64": "0.23.0" - } - }, - "node_modules/escalade": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", - "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "dev": true - }, - "node_modules/escape-string-regexp": { + "@esbuild/aix-ppc64": "0.19.12", + "@esbuild/android-arm": "0.19.12", + "@esbuild/android-arm64": "0.19.12", + "@esbuild/android-x64": "0.19.12", + "@esbuild/darwin-arm64": "0.19.12", + "@esbuild/darwin-x64": "0.19.12", + "@esbuild/freebsd-arm64": "0.19.12", + "@esbuild/freebsd-x64": "0.19.12", + "@esbuild/linux-arm": "0.19.12", + "@esbuild/linux-arm64": "0.19.12", + "@esbuild/linux-ia32": "0.19.12", + "@esbuild/linux-loong64": "0.19.12", + "@esbuild/linux-mips64el": "0.19.12", + "@esbuild/linux-ppc64": "0.19.12", + "@esbuild/linux-riscv64": "0.19.12", + "@esbuild/linux-s390x": "0.19.12", + "@esbuild/linux-x64": "0.19.12", + "@esbuild/netbsd-x64": "0.19.12", + "@esbuild/openbsd-x64": "0.19.12", + "@esbuild/sunos-x64": "0.19.12", + "@esbuild/win32-arm64": "0.19.12", + "@esbuild/win32-ia32": "0.19.12", + "@esbuild/win32-x64": "0.19.12" + } + }, + "node_modules/escalade": { + "version": "3.1.2", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "dev": true, + "license": "MIT" + }, + "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" }, @@ -4754,9 +3748,8 @@ }, "node_modules/escodegen": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", - "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "esprima": "^4.0.1", "estraverse": "^5.2.0", @@ -4775,9 +3768,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", @@ -4830,9 +3822,8 @@ }, "node_modules/eslint-compat-utils": { "version": "0.5.1", - "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.5.1.tgz", - "integrity": "sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==", "dev": true, + "license": "MIT", "dependencies": { "semver": "^7.5.4" }, @@ -4845,9 +3836,8 @@ }, "node_modules/eslint-import-resolver-node": { "version": "0.3.9", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", - "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", "dev": true, + "license": "MIT", "dependencies": { "debug": "^3.2.7", "is-core-module": "^2.13.0", @@ -4856,18 +3846,16 @@ }, "node_modules/eslint-import-resolver-node/node_modules/debug": { "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, + "license": "MIT", "dependencies": { "ms": "^2.1.1" } }, "node_modules/eslint-import-resolver-typescript": { "version": "3.6.1", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.1.tgz", - "integrity": "sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==", "dev": true, + "license": "ISC", "dependencies": { "debug": "^4.3.4", "enhanced-resolve": "^5.12.0", @@ -4890,9 +3878,8 @@ }, "node_modules/eslint-module-utils": { "version": "2.8.1", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz", - "integrity": "sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==", "dev": true, + "license": "MIT", "dependencies": { "debug": "^3.2.7" }, @@ -4907,39 +3894,35 @@ }, "node_modules/eslint-module-utils/node_modules/debug": { "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, + "license": "MIT", "dependencies": { "ms": "^2.1.1" } }, "node_modules/eslint-plugin-es-x": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.8.0.tgz", - "integrity": "sha512-7Ds8+wAAoV3T+LAKeu39Y5BzXCrGKrcISfgKEqTS4BDN8SFEDQd0S43jiQ8vIa3wUKD07qitZdfzlenSi8/0qQ==", + "version": "7.6.0", "dev": true, - "funding": [ - "https://github.com/sponsors/ota-meshi", - "https://opencollective.com/eslint" - ], + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.1.2", - "@eslint-community/regexpp": "^4.11.0", - "eslint-compat-utils": "^0.5.1" + "@eslint-community/regexpp": "^4.6.0", + "eslint-compat-utils": "^0.5.0" }, "engines": { "node": "^14.18.0 || >=16.0.0" }, + "funding": { + "url": "https://github.com/sponsors/ota-meshi" + }, "peerDependencies": { "eslint": ">=8" } }, "node_modules/eslint-plugin-import": { "version": "2.29.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", - "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", "dev": true, + "license": "MIT", "dependencies": { "array-includes": "^3.1.7", "array.prototype.findlastindex": "^1.2.3", @@ -4968,9 +3951,8 @@ }, "node_modules/eslint-plugin-import/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" @@ -4978,18 +3960,16 @@ }, "node_modules/eslint-plugin-import/node_modules/debug": { "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, + "license": "MIT", "dependencies": { "ms": "^2.1.1" } }, "node_modules/eslint-plugin-import/node_modules/doctrine": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, + "license": "Apache-2.0", "dependencies": { "esutils": "^2.0.2" }, @@ -4999,9 +3979,8 @@ }, "node_modules/eslint-plugin-import/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" }, @@ -5011,18 +3990,16 @@ }, "node_modules/eslint-plugin-import/node_modules/semver": { "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/eslint-plugin-n": { - "version": "17.10.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-17.10.2.tgz", - "integrity": "sha512-e+s4eAf5NtJaxPhTNu3qMO0Iz40WANS93w9LQgYcvuljgvDmWi/a3rh+OrNyMHeng6aOWGJO0rCg5lH4zi8yTw==", + "version": "17.10.1", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "enhanced-resolve": "^5.17.0", @@ -5044,10 +4021,9 @@ } }, "node_modules/eslint-plugin-n/node_modules/globals": { - "version": "15.8.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-15.8.0.tgz", - "integrity": "sha512-VZAJ4cewHTExBWDHR6yptdIBlx9YSSZuwojj9Nt5mBRXQzrKakDsVKQ1J63sklLvzAJm0X5+RpO4i3Y2hcOnFw==", + "version": "15.9.0", "dev": true, + "license": "MIT", "engines": { "node": ">=18" }, @@ -5057,9 +4033,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" @@ -5073,9 +4048,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" }, @@ -5085,9 +4059,8 @@ }, "node_modules/eslint/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" @@ -5095,9 +4068,8 @@ }, "node_modules/eslint/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" }, @@ -5107,9 +4079,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", @@ -5124,8 +4095,7 @@ }, "node_modules/esprima": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "license": "BSD-2-Clause", "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" @@ -5135,10 +4105,9 @@ } }, "node_modules/esquery": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", - "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "version": "1.5.0", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "estraverse": "^5.1.0" }, @@ -5148,9 +4117,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" }, @@ -5160,42 +4128,37 @@ }, "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/estree-walker": { "version": "0.6.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", - "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", - "dev": true + "dev": true, + "license": "MIT" }, "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/etag": { "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/event-stream": { "version": "3.3.4", - "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", - "integrity": "sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==", "dev": true, + "license": "MIT", "dependencies": { "duplexer": "~0.1.1", "from": "~0", @@ -5208,31 +4171,27 @@ }, "node_modules/event-target-shim": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/eventemitter3": { "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/events": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "license": "MIT", "engines": { "node": ">=0.8.x" } }, "node_modules/exit-hook": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-2.2.1.tgz", - "integrity": "sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" }, @@ -5242,9 +4201,8 @@ }, "node_modules/express": { "version": "4.19.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", - "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", "dev": true, + "license": "MIT", "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", @@ -5284,30 +4242,26 @@ }, "node_modules/express/node_modules/debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, + "license": "MIT", "dependencies": { "ms": "2.0.0" } }, "node_modules/express/node_modules/ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/extend": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/extract-zip": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", - "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "debug": "^4.1.1", "get-stream": "^5.1.0", @@ -5325,30 +4279,25 @@ }, "node_modules/fast-content-type-parse": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fast-content-type-parse/-/fast-content-type-parse-1.1.0.tgz", - "integrity": "sha512-fBHHqSTFLVnR61C+gltJuE5GkVQMV0S2nqUO8TJ+5Z3qAKG8vAx4FKai1s5jq/inV1+sREynIWSuQ6HgoSXpDQ==", + "license": "MIT", "peer": true }, "node_modules/fast-decode-uri-component": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fast-decode-uri-component/-/fast-decode-uri-component-1.0.1.tgz", - "integrity": "sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==", + "license": "MIT", "peer": true }, "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==" + "license": "MIT" }, "node_modules/fast-fifo": { "version": "1.3.2", - "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", - "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==" + "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==", + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -5362,8 +4311,7 @@ }, "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==", + "license": "ISC", "dependencies": { "is-glob": "^4.0.1" }, @@ -5373,14 +4321,12 @@ }, "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-json-stringify": { - "version": "5.16.1", - "resolved": "https://registry.npmjs.org/fast-json-stringify/-/fast-json-stringify-5.16.1.tgz", - "integrity": "sha512-KAdnLvy1yu/XrRtP+LJnxbBGrhN+xXu+gt3EUvZhYGKCr3lFHq/7UFJHHFgmJKoqlh6B40bZLEv7w46B0mqn1g==", + "version": "5.16.0", + "license": "MIT", "peer": true, "dependencies": { "@fastify/merge-json-schemas": "^0.1.0", @@ -5393,13 +4339,12 @@ } }, "node_modules/fast-json-stringify/node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "version": "8.15.0", + "license": "MIT", "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", + "fast-uri": "^2.3.0", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" }, @@ -5410,8 +4355,7 @@ }, "node_modules/fast-json-stringify/node_modules/ajv-formats": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", - "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", + "license": "MIT", "peer": true, "dependencies": { "ajv": "^8.0.0" @@ -5425,28 +4369,19 @@ } } }, - "node_modules/fast-json-stringify/node_modules/ajv/node_modules/fast-uri": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.1.tgz", - "integrity": "sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==", - "peer": true - }, "node_modules/fast-json-stringify/node_modules/json-schema-traverse": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT", "peer": true }, "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/fast-querystring": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/fast-querystring/-/fast-querystring-1.1.2.tgz", - "integrity": "sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg==", + "license": "MIT", "peer": true, "dependencies": { "fast-decode-uri-component": "^1.0.1" @@ -5454,23 +4389,19 @@ }, "node_modules/fast-redact": { "version": "3.5.0", - "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.5.0.tgz", - "integrity": "sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==", + "license": "MIT", "peer": true, "engines": { "node": ">=6" } }, "node_modules/fast-uri": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-2.4.0.tgz", - "integrity": "sha512-ypuAmmMKInk5q7XcepxlnUWDLWv4GFtaJqAzWKqn62IpQ3pejtr5dTVbt3vwqVaMKmkNR55sTT+CqUKIaT21BA==", + "version": "2.3.0", + "license": "MIT", "peer": true }, "node_modules/fastify": { - "version": "4.28.1", - "resolved": "https://registry.npmjs.org/fastify/-/fastify-4.28.1.tgz", - "integrity": "sha512-kFWUtpNr4i7t5vY2EJPCN2KgMVpuqfU4NjnJNCgiNB900oiDeYqaNDRcAfeBbOF5hGixixxcKnOU4KN9z6QncQ==", + "version": "4.27.0", "funding": [ { "type": "github", @@ -5481,6 +4412,7 @@ "url": "https://opencollective.com/fastify" } ], + "license": "MIT", "peer": true, "dependencies": { "@fastify/ajv-compiler": "^3.5.0", @@ -5503,25 +4435,21 @@ }, "node_modules/fastq": { "version": "1.17.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", - "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "license": "ISC", "dependencies": { "reusify": "^1.0.4" } }, "node_modules/fd-slicer": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", "dev": true, + "license": "MIT", "dependencies": { "pend": "~1.2.0" } }, "node_modules/fetch-blob": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", - "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", "dev": true, "funding": [ { @@ -5533,6 +4461,7 @@ "url": "https://paypal.me/jimmywarting" } ], + "license": "MIT", "dependencies": { "node-domexception": "^1.0.0", "web-streams-polyfill": "^3.0.3" @@ -5543,14 +4472,12 @@ }, "node_modules/fflate": { "version": "0.8.2", - "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.2.tgz", - "integrity": "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==" + "license": "MIT" }, "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" }, @@ -5560,8 +4487,7 @@ }, "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==", + "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -5571,9 +4497,8 @@ }, "node_modules/finalhandler": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", "dev": true, + "license": "MIT", "dependencies": { "debug": "2.6.9", "encodeurl": "~1.0.2", @@ -5589,23 +4514,20 @@ }, "node_modules/finalhandler/node_modules/debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, + "license": "MIT", "dependencies": { "ms": "2.0.0" } }, "node_modules/finalhandler/node_modules/ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/find-cache-dir": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "license": "MIT", "dependencies": { "commondir": "^1.0.1", "make-dir": "^2.0.0", @@ -5617,8 +4539,7 @@ }, "node_modules/find-my-way": { "version": "8.2.0", - "resolved": "https://registry.npmjs.org/find-my-way/-/find-my-way-8.2.0.tgz", - "integrity": "sha512-HdWXgFYc6b1BJcOBDBwjqWuHJj1WYiqrxSh25qtU4DabpMFdj/gSunNBQb83t+8Zt67D7CXEzJWTkxaShMTMOA==", + "license": "MIT", "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3", @@ -5631,9 +4552,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" @@ -5647,9 +4567,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", @@ -5661,22 +4580,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/flow-parser": { - "version": "0.240.0", - "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.240.0.tgz", - "integrity": "sha512-p9xnhi64bGDZF+QhZ9D3Iqh8ILS0K+6KHnted0kyo0WHXcPvCrTvVfLFLdTU4OhmN3e4E9w1ikXiZjwro60nkw==", + "version": "0.237.2", + "license": "MIT", "engines": { "node": ">=0.4.0" } }, "node_modules/follow-redirects": { "version": "1.15.6", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", - "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", "dev": true, "funding": [ { @@ -5684,6 +4599,7 @@ "url": "https://github.com/sponsors/RubenVerborgh" } ], + "license": "MIT", "engines": { "node": ">=4.0" }, @@ -5695,18 +4611,16 @@ }, "node_modules/for-each": { "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", "dev": true, + "license": "MIT", "dependencies": { "is-callable": "^1.1.3" } }, "node_modules/foreground-child": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.2.1.tgz", - "integrity": "sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==", + "version": "3.1.1", "dev": true, + "license": "ISC", "dependencies": { "cross-spawn": "^7.0.0", "signal-exit": "^4.0.1" @@ -5720,18 +4634,16 @@ }, "node_modules/form-data-encoder": { "version": "2.1.4", - "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz", - "integrity": "sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 14.17" } }, "node_modules/formdata-polyfill": { "version": "4.0.10", - "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", - "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", "dev": true, + "license": "MIT", "dependencies": { "fetch-blob": "^3.1.2" }, @@ -5741,32 +4653,28 @@ }, "node_modules/forwarded": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/fresh": { "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/from": { "version": "0.1.7", - "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", - "integrity": "sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fs-extra": { "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^4.0.0", @@ -5778,14 +4686,11 @@ }, "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==" + "license": "ISC" }, "node_modules/fsevents": { "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "hasInstallScript": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -5796,18 +4701,16 @@ }, "node_modules/function-bind": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/function.prototype.name": { "version": "1.1.6", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", - "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -5823,19 +4726,17 @@ }, "node_modules/functions-have-names": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/geckodriver": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/geckodriver/-/geckodriver-4.4.2.tgz", - "integrity": "sha512-/JFJ7DJPJUvDhLjzQk+DwjlkAmiShddfRHhZ/xVL9FWbza5Bi3UMGmmerEKqD69JbRs7R81ZW31co686mdYZyA==", + "version": "4.4.1", "dev": true, "hasInstallScript": true, + "license": "MPL-2.0", "dependencies": { "@wdio/logger": "^8.28.0", "@zip.js/zip.js": "^2.7.44", @@ -5855,9 +4756,8 @@ }, "node_modules/geckodriver/node_modules/agent-base": { "version": "7.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", - "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", "dev": true, + "license": "MIT", "dependencies": { "debug": "^4.3.4" }, @@ -5867,9 +4767,8 @@ }, "node_modules/geckodriver/node_modules/https-proxy-agent": { "version": "7.0.5", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", - "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", "dev": true, + "license": "MIT", "dependencies": { "agent-base": "^7.0.2", "debug": "4" @@ -5880,18 +4779,16 @@ }, "node_modules/geckodriver/node_modules/isexe": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", - "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", "dev": true, + "license": "ISC", "engines": { "node": ">=16" } }, "node_modules/geckodriver/node_modules/tar-fs": { "version": "3.0.6", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.6.tgz", - "integrity": "sha512-iokBDQQkUyeXhgPYaZxmczGPhnhXZ0CmrqI+MOb/WFGS9DW5wnfrLgtjUJBvz50vQ3qfRwJ62QVoCFu8mPVu5w==", "dev": true, + "license": "MIT", "dependencies": { "pump": "^3.0.0", "tar-stream": "^3.1.5" @@ -5903,9 +4800,8 @@ }, "node_modules/geckodriver/node_modules/which": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", - "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", "dev": true, + "license": "ISC", "dependencies": { "isexe": "^3.1.1" }, @@ -5918,26 +4814,23 @@ }, "node_modules/gensync": { "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/get-caller-file": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, + "license": "ISC", "engines": { "node": "6.* || 8.* || >= 10.*" } }, "node_modules/get-intrinsic": { "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", "dev": true, + "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2", @@ -5954,9 +4847,8 @@ }, "node_modules/get-port": { "version": "7.1.0", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-7.1.0.tgz", - "integrity": "sha512-QB9NKEeDg3xxVwCCwJQ9+xycaz6pBB6iQ76wiWMl1927n0Kir6alPiP+yuiICLLU4jpMe08dXfpebuQppFA2zw==", "dev": true, + "license": "MIT", "engines": { "node": ">=16" }, @@ -5966,9 +4858,8 @@ }, "node_modules/get-source": { "version": "2.0.12", - "resolved": "https://registry.npmjs.org/get-source/-/get-source-2.0.12.tgz", - "integrity": "sha512-X5+4+iD+HoSeEED+uwrQ07BOQr0kEDFMVqqpBuI+RaZBpBpHCuXxo70bjar6f0b0u/DQJsJ7ssurpP0V60Az+w==", "dev": true, + "license": "Unlicense", "dependencies": { "data-uri-to-buffer": "^2.0.0", "source-map": "^0.6.1" @@ -5976,15 +4867,13 @@ }, "node_modules/get-source/node_modules/data-uri-to-buffer": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-2.0.2.tgz", - "integrity": "sha512-ND9qDTLc6diwj+Xe5cdAgVTbLVdXbtxTJRXRhli8Mowuaan+0EJOtdqJ0QCHNSSPyoXGx9HX2/VMnKeC34AChA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/get-stream": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dev": true, + "license": "MIT", "dependencies": { "pump": "^3.0.0" }, @@ -5997,9 +4886,8 @@ }, "node_modules/get-symbol-description": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", - "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.5", "es-errors": "^1.3.0", @@ -6014,8 +4902,7 @@ }, "node_modules/get-tsconfig": { "version": "4.7.5", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.5.tgz", - "integrity": "sha512-ZCuZCnlqNzjb4QprAzXKdpp/gh6KTxSJuw3IBsPnV/7fV4NxC9ckB+vPTt8w7fJA0TaSD7c55BR47JD6MEDyDw==", + "license": "MIT", "dependencies": { "resolve-pkg-maps": "^1.0.0" }, @@ -6025,9 +4912,8 @@ }, "node_modules/get-uri": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.3.tgz", - "integrity": "sha512-BzUrJBS9EcUb4cFol8r4W3v1cPsSyajLSthNkz5BxbpDcHN5tIrM10E2eNvfnvBn3DaT3DUgx0OpsBKkaOpanw==", "dev": true, + "license": "MIT", "dependencies": { "basic-ftp": "^5.0.2", "data-uri-to-buffer": "^6.0.2", @@ -6040,18 +4926,16 @@ }, "node_modules/get-uri/node_modules/data-uri-to-buffer": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz", - "integrity": "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 14" } }, "node_modules/get-uri/node_modules/fs-extra": { "version": "11.2.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", - "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -6063,9 +4947,8 @@ }, "node_modules/get-uri/node_modules/jsonfile": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, + "license": "MIT", "dependencies": { "universalify": "^2.0.0" }, @@ -6075,18 +4958,15 @@ }, "node_modules/get-uri/node_modules/universalify": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 10.0.0" } }, "node_modules/glob": { "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -6104,9 +4984,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" }, @@ -6116,13 +4995,12 @@ }, "node_modules/glob-to-regexp": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" + "dev": true, + "license": "BSD-2-Clause" }, "node_modules/glob/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==", + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -6130,8 +5008,7 @@ }, "node_modules/glob/node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -6141,9 +5018,8 @@ }, "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" }, @@ -6156,9 +5032,8 @@ }, "node_modules/globalthis": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", - "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", "dev": true, + "license": "MIT", "dependencies": { "define-properties": "^1.2.1", "gopd": "^1.0.1" @@ -6172,9 +5047,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", @@ -6192,14 +5066,12 @@ }, "node_modules/google-protobuf": { "version": "3.21.4", - "resolved": "https://registry.npmjs.org/google-protobuf/-/google-protobuf-3.21.4.tgz", - "integrity": "sha512-MnG7N936zcKTco4Jd2PX2U96Kf9PxygAPKBug+74LHzmHXmceN16MmRcdgZv+DGef/S9YvQAfRsNCn4cjf9yyQ==" + "license": "(BSD-3-Clause AND Apache-2.0)" }, "node_modules/gopd": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", "dev": true, + "license": "MIT", "dependencies": { "get-intrinsic": "^1.1.3" }, @@ -6209,9 +5081,8 @@ }, "node_modules/got": { "version": "12.6.1", - "resolved": "https://registry.npmjs.org/got/-/got-12.6.1.tgz", - "integrity": "sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==", "dev": true, + "license": "MIT", "dependencies": { "@sindresorhus/is": "^5.2.0", "@szmarczak/http-timer": "^5.0.1", @@ -6234,9 +5105,8 @@ }, "node_modules/got/node_modules/@sindresorhus/is": { "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-5.6.0.tgz", - "integrity": "sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==", "dev": true, + "license": "MIT", "engines": { "node": ">=14.16" }, @@ -6246,9 +5116,8 @@ }, "node_modules/got/node_modules/get-stream": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -6258,48 +5127,42 @@ }, "node_modules/graceful-fs": { "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + "license": "ISC" }, "node_modules/grapheme-splitter": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", - "dev": true + "dev": true, + "license": "MIT" }, "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/grpc-web": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/grpc-web/-/grpc-web-1.5.0.tgz", - "integrity": "sha512-y1tS3BBIoiVSzKTDF3Hm7E8hV2n7YY7pO0Uo7depfWJqKzWE+SKr0jvHNIJsJJYILQlpYShpi/DRJJMbosgDMQ==" + "license": "Apache-2.0" }, "node_modules/has-bigints": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "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/has-property-descriptors": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dev": true, + "license": "MIT", "dependencies": { "es-define-property": "^1.0.0" }, @@ -6309,9 +5172,8 @@ }, "node_modules/has-proto": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -6321,9 +5183,8 @@ }, "node_modules/has-symbols": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -6333,9 +5194,8 @@ }, "node_modules/has-tostringtag": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dev": true, + "license": "MIT", "dependencies": { "has-symbols": "^1.0.3" }, @@ -6348,9 +5208,8 @@ }, "node_modules/hasown": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dev": true, + "license": "MIT", "dependencies": { "function-bind": "^1.1.2" }, @@ -6360,15 +5219,13 @@ }, "node_modules/http-cache-semantics": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", - "dev": true + "dev": true, + "license": "BSD-2-Clause" }, "node_modules/http-errors": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "dev": true, + "license": "MIT", "dependencies": { "depd": "2.0.0", "inherits": "2.0.4", @@ -6382,9 +5239,8 @@ }, "node_modules/http-proxy": { "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", "dev": true, + "license": "MIT", "dependencies": { "eventemitter3": "^4.0.0", "follow-redirects": "^1.0.0", @@ -6396,9 +5252,8 @@ }, "node_modules/http-proxy-agent": { "version": "7.0.2", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", - "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", "dev": true, + "license": "MIT", "dependencies": { "agent-base": "^7.1.0", "debug": "^4.3.4" @@ -6409,9 +5264,8 @@ }, "node_modules/http-proxy-agent/node_modules/agent-base": { "version": "7.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", - "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", "dev": true, + "license": "MIT", "dependencies": { "debug": "^4.3.4" }, @@ -6421,9 +5275,8 @@ }, "node_modules/http2-wrapper": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz", - "integrity": "sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==", "dev": true, + "license": "MIT", "dependencies": { "quick-lru": "^5.1.1", "resolve-alpn": "^1.2.0" @@ -6434,9 +5287,8 @@ }, "node_modules/https-proxy-agent": { "version": "2.2.4", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz", - "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==", "dev": true, + "license": "MIT", "dependencies": { "agent-base": "^4.3.0", "debug": "^3.1.0" @@ -6447,9 +5299,8 @@ }, "node_modules/https-proxy-agent/node_modules/agent-base": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", - "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", "dev": true, + "license": "MIT", "dependencies": { "es6-promisify": "^5.0.0" }, @@ -6459,18 +5310,16 @@ }, "node_modules/https-proxy-agent/node_modules/debug": { "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, + "license": "MIT", "dependencies": { "ms": "^2.1.1" } }, "node_modules/iconv-lite": { "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, + "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3" }, @@ -6480,8 +5329,6 @@ }, "node_modules/ieee754": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", "funding": [ { "type": "github", @@ -6495,28 +5342,26 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "BSD-3-Clause" }, "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/immediate": { "version": "3.0.6", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", - "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", - "dev": true + "dev": true, + "license": "MIT" }, "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" @@ -6530,9 +5375,8 @@ }, "node_modules/import-meta-resolve": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz", - "integrity": "sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==", "dev": true, + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -6540,17 +5384,14 @@ }, "node_modules/imurmurhash": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "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==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "license": "ISC", "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -6558,14 +5399,12 @@ }, "node_modules/inherits": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "license": "ISC" }, "node_modules/internal-slot": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", - "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", "dev": true, + "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "hasown": "^2.0.0", @@ -6577,9 +5416,8 @@ }, "node_modules/ip-address": { "version": "9.0.5", - "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", - "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", "dev": true, + "license": "MIT", "dependencies": { "jsbn": "1.1.0", "sprintf-js": "^1.1.3" @@ -6590,17 +5428,15 @@ }, "node_modules/ipaddr.js": { "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "license": "MIT", "engines": { "node": ">= 0.10" } }, "node_modules/is-array-buffer": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", - "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.2.1" @@ -6614,9 +5450,8 @@ }, "node_modules/is-bigint": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", "dev": true, + "license": "MIT", "dependencies": { "has-bigints": "^1.0.1" }, @@ -6626,9 +5461,8 @@ }, "node_modules/is-binary-path": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, + "license": "MIT", "dependencies": { "binary-extensions": "^2.0.0" }, @@ -6638,9 +5472,8 @@ }, "node_modules/is-boolean-object": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -6654,9 +5487,8 @@ }, "node_modules/is-callable": { "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -6665,15 +5497,11 @@ } }, "node_modules/is-core-module": { - "version": "2.15.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.0.tgz", - "integrity": "sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==", + "version": "2.13.1", "dev": true, + "license": "MIT", "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" + "hasown": "^2.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -6681,9 +5509,8 @@ }, "node_modules/is-data-view": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", - "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", "dev": true, + "license": "MIT", "dependencies": { "is-typed-array": "^1.1.13" }, @@ -6696,9 +5523,8 @@ }, "node_modules/is-date-object": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", "dev": true, + "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -6711,25 +5537,22 @@ }, "node_modules/is-extglob": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "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==", + "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" }, @@ -6739,9 +5562,8 @@ }, "node_modules/is-negative-zero": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", - "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -6751,17 +5573,15 @@ }, "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==", + "license": "MIT", "engines": { "node": ">=0.12.0" } }, "node_modules/is-number-object": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", "dev": true, + "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -6774,18 +5594,16 @@ }, "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/is-plain-obj": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", - "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -6795,8 +5613,7 @@ }, "node_modules/is-plain-object": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "license": "MIT", "dependencies": { "isobject": "^3.0.1" }, @@ -6806,9 +5623,8 @@ }, "node_modules/is-regex": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -6822,15 +5638,13 @@ }, "node_modules/is-running": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-running/-/is-running-2.1.0.tgz", - "integrity": "sha512-mjJd3PujZMl7j+D395WTIO5tU5RIDBfVSRtRR4VOJou3H66E38UjbjvDGh3slJzPuolsb+yQFqwHNNdyp5jg3w==", - "dev": true + "dev": true, + "license": "BSD" }, "node_modules/is-shared-array-buffer": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", - "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7" }, @@ -6843,9 +5657,8 @@ }, "node_modules/is-stream": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -6855,9 +5668,8 @@ }, "node_modules/is-string": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", "dev": true, + "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -6870,9 +5682,8 @@ }, "node_modules/is-symbol": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dev": true, + "license": "MIT", "dependencies": { "has-symbols": "^1.0.2" }, @@ -6885,9 +5696,8 @@ }, "node_modules/is-typed-array": { "version": "1.1.13", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", - "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", "dev": true, + "license": "MIT", "dependencies": { "which-typed-array": "^1.1.14" }, @@ -6900,9 +5710,8 @@ }, "node_modules/is-weakref": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2" }, @@ -6912,15 +5721,13 @@ }, "node_modules/isarray": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/isbinaryfile": { "version": "4.0.10", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz", - "integrity": "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 8.0.0" }, @@ -6930,26 +5737,26 @@ }, "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/isobject": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "version": "3.2.3", "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/cliui": "^8.0.2" }, + "engines": { + "node": ">=14" + }, "funding": { "url": "https://github.com/sponsors/isaacs" }, @@ -6959,9 +5766,8 @@ }, "node_modules/jasmine": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-5.2.0.tgz", - "integrity": "sha512-il+noV96N1BGU9/FMmc8QtAMxC8lPnXUiAvgb0o9MDZATRdxglTQe9wo6UdL049ropQL6MopDYwDlludKR6wJQ==", "dev": true, + "license": "MIT", "dependencies": { "glob": "^10.2.2", "jasmine-core": "~5.2.0" @@ -6972,40 +5778,38 @@ }, "node_modules/jasmine-core": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-5.2.0.tgz", - "integrity": "sha512-tSAtdrvWybZkQmmaIoDgnvHG8ORUNw5kEVlO5CvrXj02Jjr9TZrmjFq7FUiOUzJiOP2wLGYT6PgrQgQF4R1xiw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/jasmine/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "version": "10.4.1", "dev": true, + "license": "ISC", "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", "minimatch": "^9.0.4", "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", "path-scurry": "^1.11.1" }, "bin": { "glob": "dist/esm/bin.mjs" }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/js-tokens": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + "license": "MIT" }, "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" }, @@ -7015,14 +5819,12 @@ }, "node_modules/jsbn": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", - "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/jscodeshift": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.16.1.tgz", - "integrity": "sha512-oMQXySazy63awNBzMpXbbVv73u3irdxTeX2L5ueRyFRxi32qb9uzdZdOY5fTBYADBG19l5M/wnGknZSV1dzCdA==", + "version": "17.0.0", + "license": "MIT", "dependencies": { "@babel/core": "^7.24.7", "@babel/parser": "^7.24.7", @@ -7034,12 +5836,11 @@ "@babel/preset-flow": "^7.24.7", "@babel/preset-typescript": "^7.24.7", "@babel/register": "^7.24.6", - "chalk": "^4.1.2", "flow-parser": "0.*", "graceful-fs": "^4.2.4", "micromatch": "^4.0.7", "neo-async": "^2.5.0", - "node-dir": "^0.1.17", + "picocolors": "^1.0.1", "recast": "^0.23.9", "temp": "^0.9.4", "write-file-atomic": "^5.0.1" @@ -7047,6 +5848,9 @@ "bin": { "jscodeshift": "bin/jscodeshift.js" }, + "engines": { + "node": ">=16" + }, "peerDependencies": { "@babel/preset-env": "^7.1.6" }, @@ -7058,8 +5862,7 @@ }, "node_modules/jscodeshift/node_modules/ast-types": { "version": "0.16.1", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.16.1.tgz", - "integrity": "sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==", + "license": "MIT", "dependencies": { "tslib": "^2.0.1" }, @@ -7069,8 +5872,7 @@ }, "node_modules/jscodeshift/node_modules/recast": { "version": "0.23.9", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.23.9.tgz", - "integrity": "sha512-Hx/BGIbwj+Des3+xy5uAtAbdCyqK9y9wbBcDFDYanLS9JnMqf7OeF87HQwUimE87OEc72mr6tkKUKMBBL+hF9Q==", + "license": "MIT", "dependencies": { "ast-types": "^0.16.1", "esprima": "~4.0.0", @@ -7084,8 +5886,7 @@ }, "node_modules/jsesc": { "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "license": "MIT", "bin": { "jsesc": "bin/jsesc" }, @@ -7095,14 +5896,12 @@ }, "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-ref-resolver": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-schema-ref-resolver/-/json-schema-ref-resolver-1.0.1.tgz", - "integrity": "sha512-EJAj1pgHc1hxF6vo2Z3s69fMjO1INq6eGHXZ8Z6wCQeldCuwxGK9Sxf4/cScGn3FZubCVUehfWtcDM/PLteCQw==", + "license": "MIT", "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3" @@ -7110,21 +5909,18 @@ }, "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/json5": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dev": true, + "license": "MIT", "dependencies": { "minimist": "^1.2.0" }, @@ -7134,18 +5930,16 @@ }, "node_modules/jsonfile": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", "dev": true, + "license": "MIT", "optionalDependencies": { "graceful-fs": "^4.1.6" } }, "node_modules/jszip": { "version": "3.10.1", - "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", - "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", "dev": true, + "license": "(MIT OR GPL-3.0-or-later)", "dependencies": { "lie": "~3.3.0", "pako": "~1.0.2", @@ -7155,15 +5949,13 @@ }, "node_modules/jszip/node_modules/isarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/jszip/node_modules/readable-stream": { "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, + "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -7176,24 +5968,21 @@ }, "node_modules/jszip/node_modules/safe-buffer": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/jszip/node_modules/string_decoder": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "~5.1.0" } }, "node_modules/karma": { "version": "6.4.4", - "resolved": "https://registry.npmjs.org/karma/-/karma-6.4.4.tgz", - "integrity": "sha512-LrtUxbdvt1gOpo3gxG+VAJlJAEMhbWlM4YrFQgql98FwF7+K8K12LYO4hnDdUkNjeztYrOXEMqgTajSWgmtI/w==", "dev": true, + "license": "MIT", "dependencies": { "@colors/colors": "1.5.0", "body-parser": "^1.19.0", @@ -7229,9 +6018,8 @@ }, "node_modules/karma-browserstack-launcher": { "version": "1.6.0", - "resolved": "https://registry.npmjs.org/karma-browserstack-launcher/-/karma-browserstack-launcher-1.6.0.tgz", - "integrity": "sha512-Y/UWPdHZkHIVH2To4GWHCTzmrsB6H7PBWy6pw+TWz5sr4HW2mcE+Uj6qWgoVNxvQU1Pfn5LQQzI6EQ65p8QbiQ==", "dev": true, + "license": "MIT", "dependencies": { "browserstack": "~1.5.1", "browserstack-local": "^1.3.7", @@ -7243,18 +6031,16 @@ }, "node_modules/karma-chrome-launcher": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-3.2.0.tgz", - "integrity": "sha512-rE9RkUPI7I9mAxByQWkGJFXfFD6lE4gC5nPuZdobf/QdTEJI6EU4yIay/cfU/xV4ZxlM5JiTv7zWYgA64NpS5Q==", "dev": true, + "license": "MIT", "dependencies": { "which": "^1.2.1" } }, "node_modules/karma-chrome-launcher/node_modules/which": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, + "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -7264,9 +6050,8 @@ }, "node_modules/karma-esbuild": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/karma-esbuild/-/karma-esbuild-2.3.0.tgz", - "integrity": "sha512-iW3DjSGohEEkufSDmXRPZP7CNP0ye+Xt8fBCcenLqPL2u8+VHZYwlzwYyfs60vjhdf1i04xekhzI7gu8as1CLg==", "dev": true, + "license": "MIT", "dependencies": { "chokidar": "^3.5.1", "source-map": "0.6.1" @@ -7277,9 +6062,8 @@ }, "node_modules/karma-jasmine": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-5.1.0.tgz", - "integrity": "sha512-i/zQLFrfEpRyQoJF9fsCdTMOF5c2dK7C7OmsuKg2D0YSsuZSfQDiLuaiktbuio6F2wiCsZSnSnieIQ0ant/uzQ==", "dev": true, + "license": "MIT", "dependencies": { "jasmine-core": "^4.1.0" }, @@ -7292,25 +6076,32 @@ }, "node_modules/karma-jasmine/node_modules/jasmine-core": { "version": "4.6.1", - "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-4.6.1.tgz", - "integrity": "sha512-VYz/BjjmC3klLJlLwA4Kw8ytk0zDSmbbDLNs794VnWmkcCB7I9aAL/D48VNQtmITyPvea2C3jdUMfc3kAoy0PQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/karma/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" } }, + "node_modules/karma/node_modules/cliui": { + "version": "7.0.4", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, "node_modules/karma/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" }, @@ -7318,28 +6109,50 @@ "node": "*" } }, + "node_modules/karma/node_modules/yargs": { + "version": "16.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/karma/node_modules/yargs-parser": { + "version": "20.2.9", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, "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/kind-of": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/ky": { "version": "0.33.3", - "resolved": "https://registry.npmjs.org/ky/-/ky-0.33.3.tgz", - "integrity": "sha512-CasD9OCEQSFIam2U8efFK81Yeg8vNMTBUqtMOHlrcWQHqUX3HeCl9Dr31u4toV7emlH8Mymk5+9p0lL6mKb/Xw==", "dev": true, + "license": "MIT", "engines": { "node": ">=14.16" }, @@ -7349,9 +6162,8 @@ }, "node_modules/lazystream": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", - "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", "dev": true, + "license": "MIT", "dependencies": { "readable-stream": "^2.0.5" }, @@ -7361,15 +6173,13 @@ }, "node_modules/lazystream/node_modules/isarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lazystream/node_modules/readable-stream": { "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, + "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -7382,24 +6192,21 @@ }, "node_modules/lazystream/node_modules/safe-buffer": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lazystream/node_modules/string_decoder": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "~5.1.0" } }, "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" @@ -7410,17 +6217,15 @@ }, "node_modules/lie": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", - "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", "dev": true, + "license": "MIT", "dependencies": { "immediate": "~3.0.5" } }, "node_modules/light-my-request": { "version": "5.13.0", - "resolved": "https://registry.npmjs.org/light-my-request/-/light-my-request-5.13.0.tgz", - "integrity": "sha512-9IjUN9ZyCS9pTG+KqTDEQo68Sui2lHsYBrfMyVUTTZ3XhH8PMZq7xO94Kr+eP9dhi/kcKsx4N41p2IXEBil1pQ==", + "license": "BSD-3-Clause", "peer": true, "dependencies": { "cookie": "^0.6.0", @@ -7430,8 +6235,6 @@ }, "node_modules/locate-app": { "version": "2.4.21", - "resolved": "https://registry.npmjs.org/locate-app/-/locate-app-2.4.21.tgz", - "integrity": "sha512-ySSBwlUnVKoLgw39q8YaNtvklhaTMoVqBf2+CuY3hkOFuWubHAJ6NJuTjv+jfTV1FuOgKsigRdsYUIeVgKHvNA==", "dev": true, "funding": [ { @@ -7443,6 +6246,7 @@ "url": "https://github.com/hejny/locate-app/blob/main/README.md#%EF%B8%8F-contributing" } ], + "license": "SEE LICENSE IN LICENSE", "dependencies": { "@promptbook/utils": "0.58.0", "type-fest": "2.13.0", @@ -7451,9 +6255,8 @@ }, "node_modules/locate-app/node_modules/type-fest": { "version": "2.13.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.13.0.tgz", - "integrity": "sha512-lPfAm42MxE4/456+QyIaaVBAwgpJb6xZ8PRu09utnhPdWwcyj9vgy6Sq0Z5yNbJ21EdxB5dRU/Qg8bsyAMtlcw==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=12.20" }, @@ -7463,9 +6266,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" }, @@ -7478,33 +6280,28 @@ }, "node_modules/lodash": { "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.clonedeep": { "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==", - "dev": true + "dev": true, + "license": "MIT" }, "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/lodash.zip": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.zip/-/lodash.zip-4.2.0.tgz", - "integrity": "sha512-C7IOaBBK/0gMORRBd8OETNx3kmOkgIWIPvyDpZSCTwUrpYmgZwJkjZeOD8ww4xbOUOs4/attY+pciKvadNfFbg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/log4js": { "version": "6.9.1", - "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.9.1.tgz", - "integrity": "sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g==", "dev": true, + "license": "Apache-2.0", "dependencies": { "date-format": "^4.0.14", "debug": "^4.3.4", @@ -7518,9 +6315,8 @@ }, "node_modules/loglevel": { "version": "1.9.1", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.9.1.tgz", - "integrity": "sha512-hP3I3kCrDIMuRwAwHltphhDM1r8i55H33GgqjXbrisuJhF4kRhW1dNuxsRklp4bXl8DSdLaNLuiL4A/LWRfxvg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6.0" }, @@ -7531,14 +6327,12 @@ }, "node_modules/loglevel-plugin-prefix": { "version": "0.8.4", - "resolved": "https://registry.npmjs.org/loglevel-plugin-prefix/-/loglevel-plugin-prefix-0.8.4.tgz", - "integrity": "sha512-WpG9CcFAOjz/FtNht+QJeGpvVl/cdR6P0z6OcXSkr8wFJOsV2GRj2j10JLfjuA4aYkcKCNIEqRGCyTife9R8/g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/loose-envify": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "license": "MIT", "peer": true, "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" @@ -7549,9 +6343,8 @@ }, "node_modules/lowercase-keys": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", - "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -7561,25 +6354,22 @@ }, "node_modules/lru-cache": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "license": "ISC", "dependencies": { "yallist": "^3.0.2" } }, "node_modules/magic-string": { "version": "0.25.9", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", - "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", "dev": true, + "license": "MIT", "dependencies": { "sourcemap-codec": "^1.4.8" } }, "node_modules/make-dir": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "license": "MIT", "dependencies": { "pify": "^4.0.1", "semver": "^5.6.0" @@ -7590,23 +6380,19 @@ }, "node_modules/make-dir/node_modules/semver": { "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "license": "ISC", "bin": { "semver": "bin/semver" } }, "node_modules/map-stream": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", - "integrity": "sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==", "dev": true }, "node_modules/marked": { "version": "9.1.6", - "resolved": "https://registry.npmjs.org/marked/-/marked-9.1.6.tgz", - "integrity": "sha512-jcByLnIFkd5gSXZmjNvS1TlmRhCXZjIzHYlaGkPlLIekG55JDR2Z4va9tZwCiP+/RDERiNhMOFu01xd6O5ct1Q==", "dev": true, + "license": "MIT", "bin": { "marked": "bin/marked.js" }, @@ -7616,9 +6402,8 @@ }, "node_modules/marked-terminal": { "version": "6.2.0", - "resolved": "https://registry.npmjs.org/marked-terminal/-/marked-terminal-6.2.0.tgz", - "integrity": "sha512-ubWhwcBFHnXsjYNsu+Wndpg0zhY4CahSpPlA70PlO0rR9r2sZpkyU+rkCsOWH+KMEkx847UpALON+HWgxowFtw==", "dev": true, + "license": "MIT", "dependencies": { "ansi-escapes": "^6.2.0", "cardinal": "^2.1.1", @@ -7636,9 +6421,8 @@ }, "node_modules/marked-terminal/node_modules/chalk": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", "dev": true, + "license": "MIT", "engines": { "node": "^12.17.0 || ^14.13 || >=16.0.0" }, @@ -7648,40 +6432,35 @@ }, "node_modules/media-typer": { "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/merge-descriptors": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", - "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==", + "license": "MIT", "engines": { "node": ">= 8" } }, "node_modules/methods": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/micromatch": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", - "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", + "version": "4.0.8", + "license": "MIT", "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" @@ -7692,9 +6471,8 @@ }, "node_modules/mime": { "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", "dev": true, + "license": "MIT", "bin": { "mime": "cli.js" }, @@ -7704,18 +6482,16 @@ }, "node_modules/mime-db": { "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/mime-types": { "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dev": true, + "license": "MIT", "dependencies": { "mime-db": "1.52.0" }, @@ -7725,9 +6501,8 @@ }, "node_modules/mimic-response": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz", - "integrity": "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -7737,9 +6512,8 @@ }, "node_modules/miniflare": { "version": "3.20240821.0", - "resolved": "https://registry.npmjs.org/miniflare/-/miniflare-3.20240821.0.tgz", - "integrity": "sha512-4BhLGpssQxM/O6TZmJ10GkT3wBJK6emFkZ3V87/HyvQmVt8zMxEBvyw5uv6kdtp+7F54Nw6IKFJjPUL8rFVQrQ==", "dev": true, + "license": "MIT", "dependencies": { "@cspotcode/source-map-support": "0.8.1", "acorn": "^8.8.0", @@ -7761,11 +6535,30 @@ "node": ">=16.13" } }, + "node_modules/miniflare/node_modules/ws": { + "version": "8.18.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, "node_modules/minimatch": { "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -7778,31 +6571,27 @@ }, "node_modules/minimist": { "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/minipass": { "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "dev": true, + "license": "ISC", "engines": { "node": ">=16 || 14 >=14.17" } }, "node_modules/mitt": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.0.tgz", - "integrity": "sha512-7dX2/10ITVyqh4aOSVI9gdape+t9l2/8QxHrFmUXu4EEUpdlxl6RudZUPZoc+zuY2hk1j7XxVroIVIan/pD/SQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/mkdirp": { "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "license": "MIT", "dependencies": { "minimist": "^1.2.6" }, @@ -7812,34 +6601,30 @@ }, "node_modules/mkdirp-classic": { "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", - "dev": true + "dev": true, + "license": "MIT" }, "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==" + "license": "MIT" }, "node_modules/mustache": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz", - "integrity": "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==", "dev": true, + "license": "MIT", "bin": { "mustache": "bin/mustache" } }, "node_modules/nanoid": { "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", "funding": [ { "type": "github", "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -7849,66 +6634,62 @@ }, "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/negotiator": { "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/neo-async": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + "license": "MIT" }, "node_modules/netmask": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", - "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4.0" } }, "node_modules/next": { - "version": "13.5.6", - "resolved": "https://registry.npmjs.org/next/-/next-13.5.6.tgz", - "integrity": "sha512-Y2wTcTbO4WwEsVb4A8VSnOsG1I9ok+h74q0ZdxkwM3EODqrs4pasq7O0iUxbcS9VtWMicG7f3+HAj0r1+NtKSw==", + "version": "14.2.5", + "license": "MIT", "peer": true, "dependencies": { - "@next/env": "13.5.6", - "@swc/helpers": "0.5.2", + "@next/env": "14.2.5", + "@swc/helpers": "0.5.5", "busboy": "1.6.0", - "caniuse-lite": "^1.0.30001406", + "caniuse-lite": "^1.0.30001579", + "graceful-fs": "^4.2.11", "postcss": "8.4.31", - "styled-jsx": "5.1.1", - "watchpack": "2.4.0" + "styled-jsx": "5.1.1" }, "bin": { "next": "dist/bin/next" }, "engines": { - "node": ">=16.14.0" + "node": ">=18.17.0" }, "optionalDependencies": { - "@next/swc-darwin-arm64": "13.5.6", - "@next/swc-darwin-x64": "13.5.6", - "@next/swc-linux-arm64-gnu": "13.5.6", - "@next/swc-linux-arm64-musl": "13.5.6", - "@next/swc-linux-x64-gnu": "13.5.6", - "@next/swc-linux-x64-musl": "13.5.6", - "@next/swc-win32-arm64-msvc": "13.5.6", - "@next/swc-win32-ia32-msvc": "13.5.6", - "@next/swc-win32-x64-msvc": "13.5.6" + "@next/swc-darwin-arm64": "14.2.5", + "@next/swc-darwin-x64": "14.2.5", + "@next/swc-linux-arm64-gnu": "14.2.5", + "@next/swc-linux-arm64-musl": "14.2.5", + "@next/swc-linux-x64-gnu": "14.2.5", + "@next/swc-linux-x64-musl": "14.2.5", + "@next/swc-win32-arm64-msvc": "14.2.5", + "@next/swc-win32-ia32-msvc": "14.2.5", + "@next/swc-win32-x64-msvc": "14.2.5" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", + "@playwright/test": "^1.41.2", "react": "^18.2.0", "react-dom": "^18.2.0", "sass": "^1.3.0" @@ -7917,46 +6698,16 @@ "@opentelemetry/api": { "optional": true }, + "@playwright/test": { + "optional": true + }, "sass": { "optional": true } } }, - "node_modules/node-dir": { - "version": "0.1.17", - "resolved": "https://registry.npmjs.org/node-dir/-/node-dir-0.1.17.tgz", - "integrity": "sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg==", - "dependencies": { - "minimatch": "^3.0.2" - }, - "engines": { - "node": ">= 0.10.5" - } - }, - "node_modules/node-dir/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==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/node-dir/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/node-domexception": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", - "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", "dev": true, "funding": [ { @@ -7968,15 +6719,15 @@ "url": "https://paypal.me/jimmywarting" } ], + "license": "MIT", "engines": { "node": ">=10.5.0" } }, "node_modules/node-emoji": { "version": "2.1.3", - "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-2.1.3.tgz", - "integrity": "sha512-E2WEOVsgs7O16zsURJ/eH8BqhF029wGpEOnv7Urwdo2wmQanOACwJQh0devF9D9RhoZru0+9JXIS0dBXIAz+lA==", "dev": true, + "license": "MIT", "dependencies": { "@sindresorhus/is": "^4.6.0", "char-regex": "^1.0.2", @@ -7989,9 +6740,8 @@ }, "node_modules/node-fetch": { "version": "3.3.2", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", - "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", "dev": true, + "license": "MIT", "dependencies": { "data-uri-to-buffer": "^4.0.0", "fetch-blob": "^3.1.4", @@ -8005,40 +6755,30 @@ "url": "https://opencollective.com/node-fetch" } }, - "node_modules/node-fetch-native": { - "version": "1.6.4", - "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.4.tgz", - "integrity": "sha512-IhOigYzAKHd244OC0JIMIUrjzctirCmPkaIfhDeGcEETWof5zKYUW7e7MYvChGWh/4CJeXEgsRyGzuF334rOOQ==", - "dev": true - }, "node_modules/node-forge": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", "dev": true, + "license": "(BSD-3-Clause OR GPL-2.0)", "engines": { "node": ">= 6.13.0" } }, "node_modules/node-releases": { - "version": "2.0.17", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.17.tgz", - "integrity": "sha512-Ww6ZlOiEQfPfXM45v17oabk77Z7mg5bOt7AjDyzy7RjK9OrLrLC8dyZQoAPEOtFX9SaNf1Tdvr5gRJWdTJj7GA==" + "version": "2.0.14", + "license": "MIT" }, "node_modules/normalize-path": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/normalize-url": { "version": "8.0.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.1.tgz", - "integrity": "sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==", "dev": true, + "license": "MIT", "engines": { "node": ">=14.16" }, @@ -8048,39 +6788,32 @@ }, "node_modules/object-assign": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/object-inspect": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", - "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "version": "1.13.1", "dev": true, - "engines": { - "node": ">= 0.4" - }, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/object-keys": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" } }, "node_modules/object.assign": { "version": "4.1.5", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", - "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.5", "define-properties": "^1.2.1", @@ -8096,9 +6829,8 @@ }, "node_modules/object.fromentries": { "version": "2.0.8", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", - "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -8114,9 +6846,8 @@ }, "node_modules/object.groupby": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", - "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -8128,9 +6859,8 @@ }, "node_modules/object.values": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", - "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -8143,10 +6873,14 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/ohash": { + "version": "1.1.3", + "dev": true, + "license": "MIT" + }, "node_modules/on-exit-leak-free": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz", - "integrity": "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==", + "license": "MIT", "peer": true, "engines": { "node": ">=14.0.0" @@ -8154,9 +6888,8 @@ }, "node_modules/on-finished": { "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "dev": true, + "license": "MIT", "dependencies": { "ee-first": "1.1.1" }, @@ -8166,17 +6899,15 @@ }, "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", @@ -8191,18 +6922,16 @@ }, "node_modules/p-cancelable": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", - "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==", "dev": true, + "license": "MIT", "engines": { "node": ">=12.20" } }, "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" }, @@ -8215,9 +6944,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" }, @@ -8230,26 +6958,24 @@ }, "node_modules/p-try": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/pac-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.0.2.tgz", - "integrity": "sha512-BFi3vZnO9X5Qt6NRz7ZOaPja3ic0PhlsmCRYLOpN11+mWBCR6XJDqW5RF3j8jm4WGGQZtBA+bTfxYzeKW73eHg==", + "version": "7.0.1", "dev": true, + "license": "MIT", "dependencies": { "@tootallnate/quickjs-emscripten": "^0.23.0", "agent-base": "^7.0.2", "debug": "^4.3.4", "get-uri": "^6.0.1", "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.5", - "pac-resolver": "^7.0.1", - "socks-proxy-agent": "^8.0.4" + "https-proxy-agent": "^7.0.2", + "pac-resolver": "^7.0.0", + "socks-proxy-agent": "^8.0.2" }, "engines": { "node": ">= 14" @@ -8257,9 +6983,8 @@ }, "node_modules/pac-proxy-agent/node_modules/agent-base": { "version": "7.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", - "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", "dev": true, + "license": "MIT", "dependencies": { "debug": "^4.3.4" }, @@ -8268,10 +6993,9 @@ } }, "node_modules/pac-proxy-agent/node_modules/https-proxy-agent": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", - "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", + "version": "7.0.4", "dev": true, + "license": "MIT", "dependencies": { "agent-base": "^7.0.2", "debug": "4" @@ -8282,9 +7006,8 @@ }, "node_modules/pac-resolver": { "version": "7.0.1", - "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.1.tgz", - "integrity": "sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==", "dev": true, + "license": "MIT", "dependencies": { "degenerator": "^5.0.0", "netmask": "^2.0.2" @@ -8295,21 +7018,18 @@ }, "node_modules/package-json-from-dist": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz", - "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==", - "dev": true + "dev": true, + "license": "BlueOak-1.0.0" }, "node_modules/pako": { "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "dev": true + "dev": true, + "license": "(MIT AND Zlib)" }, "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" }, @@ -8319,50 +7039,44 @@ }, "node_modules/parseurl": { "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } }, "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==", + "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-parse": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/path-scurry": { "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" @@ -8375,56 +7089,54 @@ } }, "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true + "version": "10.2.2", + "dev": true, + "license": "ISC", + "engines": { + "node": "14 || >=16.14" + } }, "node_modules/path-to-regexp": { "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", - "dev": true + "dev": true, + "license": "MIT" }, "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/pathe": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", - "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/pause-stream": { "version": "0.0.11", - "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", - "integrity": "sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==", "dev": true, + "license": [ + "MIT", + "Apache2" + ], "dependencies": { "through": "~2.3" } }, "node_modules/pend": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/picocolors": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", - "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==" + "license": "ISC" }, "node_modules/picomatch": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "license": "MIT", "engines": { "node": ">=8.6" }, @@ -8434,16 +7146,14 @@ }, "node_modules/pify": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/pino": { - "version": "9.3.1", - "resolved": "https://registry.npmjs.org/pino/-/pino-9.3.1.tgz", - "integrity": "sha512-afSfrq/hUiW/MFmQcLEwV9Zh8Ry6MrMTOyBU53o/fc0gEl+1OZ/Fks/xQCM2nOC0C/OfDtQMnT2d8c3kpcfSzA==", + "version": "9.1.0", + "license": "MIT", "peer": true, "dependencies": { "atomic-sleep": "^1.0.0", @@ -8464,8 +7174,7 @@ }, "node_modules/pino-abstract-transport": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-1.2.0.tgz", - "integrity": "sha512-Guhh8EZfPCfH+PMXAb6rKOjGQEoy0xlAIn+irODG5kgfYV+BQ0rGYYWTIel3P5mmyXqkYkPmdIkywsn6QKUR1Q==", + "license": "MIT", "peer": true, "dependencies": { "readable-stream": "^4.0.0", @@ -8474,22 +7183,19 @@ }, "node_modules/pino-std-serializers": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-7.0.0.tgz", - "integrity": "sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==", + "license": "MIT", "peer": true }, "node_modules/pirates": { "version": "4.0.6", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", - "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "license": "MIT", "engines": { "node": ">= 6" } }, "node_modules/pkg-dir": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "license": "MIT", "dependencies": { "find-up": "^3.0.0" }, @@ -8499,8 +7205,7 @@ }, "node_modules/pkg-dir/node_modules/find-up": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "license": "MIT", "dependencies": { "locate-path": "^3.0.0" }, @@ -8510,8 +7215,7 @@ }, "node_modules/pkg-dir/node_modules/locate-path": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "license": "MIT", "dependencies": { "p-locate": "^3.0.0", "path-exists": "^3.0.0" @@ -8522,8 +7226,7 @@ }, "node_modules/pkg-dir/node_modules/p-limit": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "license": "MIT", "dependencies": { "p-try": "^2.0.0" }, @@ -8536,8 +7239,7 @@ }, "node_modules/pkg-dir/node_modules/p-locate": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "license": "MIT", "dependencies": { "p-limit": "^2.0.0" }, @@ -8547,25 +7249,21 @@ }, "node_modules/pkg-dir/node_modules/path-exists": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/possible-typed-array-names": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", - "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" } }, "node_modules/postcss": { "version": "8.4.31", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", - "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", "funding": [ { "type": "opencollective", @@ -8580,6 +7278,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "peer": true, "dependencies": { "nanoid": "^3.3.6", @@ -8592,18 +7291,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.3.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", - "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", "dev": true, + "license": "MIT", "bin": { "prettier": "bin/prettier.cjs" }, @@ -8616,43 +7313,37 @@ }, "node_modules/printable-characters": { "version": "1.0.42", - "resolved": "https://registry.npmjs.org/printable-characters/-/printable-characters-1.0.42.tgz", - "integrity": "sha512-dKp+C4iXWK4vVYZmYSd0KBH5F/h1HoZRsbJ82AVKRO3PEo8L4lBS/vLwhVtpwwuYcoIsVY+1JYKR268yn480uQ==", - "dev": true + "dev": true, + "license": "Unlicense" }, "node_modules/process": { "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "license": "MIT", "engines": { "node": ">= 0.6.0" } }, "node_modules/process-nextick-args": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/process-warning": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-3.0.0.tgz", - "integrity": "sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==", + "license": "MIT", "peer": true }, "node_modules/progress": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.4.0" } }, "node_modules/proxy-addr": { "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "license": "MIT", "dependencies": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" @@ -8663,9 +7354,8 @@ }, "node_modules/proxy-agent": { "version": "6.3.1", - "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.3.1.tgz", - "integrity": "sha512-Rb5RVBy1iyqOtNl15Cw/llpeLH8bsb37gM1FUfKQ+Wck6xHlbAhWGUFiTRHtkjqGTA5pSHz6+0hrPW/oECihPQ==", "dev": true, + "license": "MIT", "dependencies": { "agent-base": "^7.0.2", "debug": "^4.3.4", @@ -8682,9 +7372,8 @@ }, "node_modules/proxy-agent/node_modules/agent-base": { "version": "7.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", - "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", "dev": true, + "license": "MIT", "dependencies": { "debug": "^4.3.4" }, @@ -8694,9 +7383,8 @@ }, "node_modules/proxy-agent/node_modules/https-proxy-agent": { "version": "7.0.5", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", - "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", "dev": true, + "license": "MIT", "dependencies": { "agent-base": "^7.0.2", "debug": "4" @@ -8707,24 +7395,21 @@ }, "node_modules/proxy-agent/node_modules/lru-cache": { "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", "dev": true, + "license": "ISC", "engines": { "node": ">=12" } }, "node_modules/proxy-from-env": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/ps-tree": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.2.0.tgz", - "integrity": "sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==", "dev": true, + "license": "MIT", "dependencies": { "event-stream": "=3.3.4" }, @@ -8737,9 +7422,8 @@ }, "node_modules/pump": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "dev": true, + "license": "MIT", "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -8747,18 +7431,16 @@ }, "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/puppeteer-core": { "version": "20.9.0", - "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-20.9.0.tgz", - "integrity": "sha512-H9fYZQzMTRrkboEfPmf7m3CLDN6JvbxXA3qTtS+dFt27tR+CsFHzPsT6pzp6lYL6bJbAPaR0HaPO6uSi+F94Pg==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@puppeteer/browsers": "1.4.6", "chromium-bidi": "0.4.16", @@ -8781,9 +7463,8 @@ }, "node_modules/puppeteer-core/node_modules/@puppeteer/browsers": { "version": "1.4.6", - "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-1.4.6.tgz", - "integrity": "sha512-x4BEjr2SjOPowNeiguzjozQbsc6h437ovD/wu+JpaenxVLm3jkgzHY2xOslMTp50HoTvQreMjiexiGQw1sqZlQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "debug": "4.3.4", "extract-zip": "2.0.1", @@ -8810,9 +7491,8 @@ }, "node_modules/puppeteer-core/node_modules/agent-base": { "version": "7.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", - "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", "dev": true, + "license": "MIT", "dependencies": { "debug": "^4.3.4" }, @@ -8820,25 +7500,10 @@ "node": ">= 14" } }, - "node_modules/puppeteer-core/node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/puppeteer-core/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" }, @@ -8853,15 +7518,13 @@ }, "node_modules/puppeteer-core/node_modules/devtools-protocol": { "version": "0.0.1147663", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1147663.tgz", - "integrity": "sha512-hyWmRrexdhbZ1tcJUGpO95ivbRhWXz++F4Ko+n21AY5PNln2ovoJw+8ZMNDTtip+CNFQfrtLVh/w4009dXO/eQ==", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/puppeteer-core/node_modules/https-proxy-agent": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", - "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", + "version": "7.0.4", "dev": true, + "license": "MIT", "dependencies": { "agent-base": "^7.0.2", "debug": "4" @@ -8872,18 +7535,16 @@ }, "node_modules/puppeteer-core/node_modules/lru-cache": { "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", "dev": true, + "license": "ISC", "engines": { "node": ">=12" } }, "node_modules/puppeteer-core/node_modules/proxy-agent": { "version": "6.3.0", - "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.3.0.tgz", - "integrity": "sha512-0LdR757eTj/JfuU7TL2YCuAZnxWXu3tkJbg4Oq3geW/qFNT/32T0sp2HnZ9O0lMR4q3vwAt0+xCA8SR0WAD0og==", "dev": true, + "license": "MIT", "dependencies": { "agent-base": "^7.0.2", "debug": "^4.3.4", @@ -8900,9 +7561,8 @@ }, "node_modules/puppeteer-core/node_modules/ws": { "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", - "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10.0.0" }, @@ -8921,9 +7581,8 @@ }, "node_modules/puppeteer-core/node_modules/yargs": { "version": "17.7.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", - "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==", "dev": true, + "license": "MIT", "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -8937,21 +7596,10 @@ "node": ">=12" } }, - "node_modules/puppeteer-core/node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, - "engines": { - "node": ">=12" - } - }, "node_modules/q": { "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", - "deprecated": "You or someone you depend on is using Q, the JavaScript Promise library that gave JavaScript developers strong feelings about promises. They can almost certainly migrate to the native JavaScript promise now. Thank you literally everyone for joining me in this bet against the odds. Be excellent to each other.\n\n(For a CapTP with native promises, see @endo/eventual-send and @endo/captp)", "dev": true, + "license": "MIT", "engines": { "node": ">=0.6.0", "teleport": ">=0.2.0" @@ -8959,18 +7607,16 @@ }, "node_modules/qjobs": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", - "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.9" } }, "node_modules/qs": { "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "side-channel": "^1.0.4" }, @@ -8983,14 +7629,11 @@ }, "node_modules/query-selector-shadow-dom": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/query-selector-shadow-dom/-/query-selector-shadow-dom-1.0.1.tgz", - "integrity": "sha512-lT5yCqEBgfoMYpf3F2xQRK7zEr1rhIIZuceDK6+xRkJQ4NMbHTwXqk4NkwDwQMNqXgG9r9fyHnzwNVs6zV5KRw==", - "dev": true + "dev": true, + "license": "MIT" }, "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==", "funding": [ { "type": "github", @@ -9004,24 +7647,22 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/queue-tick": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", - "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==" + "license": "MIT" }, "node_modules/quick-format-unescaped": { "version": "4.0.4", - "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", - "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==", + "license": "MIT", "peer": true }, "node_modules/quick-lru": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -9031,18 +7672,16 @@ }, "node_modules/range-parser": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/raw-body": { "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", "dev": true, + "license": "MIT", "dependencies": { "bytes": "3.1.2", "http-errors": "2.0.0", @@ -9055,8 +7694,7 @@ }, "node_modules/react": { "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", - "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "license": "MIT", "peer": true, "dependencies": { "loose-envify": "^1.1.0" @@ -9067,8 +7705,7 @@ }, "node_modules/react-dom": { "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", - "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "license": "MIT", "peer": true, "dependencies": { "loose-envify": "^1.1.0", @@ -9080,8 +7717,7 @@ }, "node_modules/readable-stream": { "version": "4.5.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz", - "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==", + "license": "MIT", "dependencies": { "abort-controller": "^3.0.0", "buffer": "^6.0.3", @@ -9095,18 +7731,16 @@ }, "node_modules/readdir-glob": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.3.tgz", - "integrity": "sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "minimatch": "^5.1.0" } }, "node_modules/readdir-glob/node_modules/minimatch": { "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -9116,9 +7750,8 @@ }, "node_modules/readdirp": { "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, + "license": "MIT", "dependencies": { "picomatch": "^2.2.1" }, @@ -9128,8 +7761,7 @@ }, "node_modules/real-require": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz", - "integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==", + "license": "MIT", "peer": true, "engines": { "node": ">= 12.13.0" @@ -9137,9 +7769,8 @@ }, "node_modules/recast": { "version": "0.20.5", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.20.5.tgz", - "integrity": "sha512-E5qICoPoNL4yU0H0NoBDntNB0Q5oMSNh9usFctYniLBluTthi3RsQVBXIJNbApOlvSwW/RGxIuokPcAc59J5fQ==", "dev": true, + "license": "MIT", "dependencies": { "ast-types": "0.14.2", "esprima": "~4.0.0", @@ -9152,18 +7783,16 @@ }, "node_modules/redeyed": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/redeyed/-/redeyed-2.1.1.tgz", - "integrity": "sha512-FNpGGo1DycYAdnrKFxCMmKYgo/mILAqtRYbkdQD8Ep/Hk2PQ5+aEAEx+IU713RTDmuBaH0c8P5ZozurNu5ObRQ==", "dev": true, + "license": "MIT", "dependencies": { "esprima": "~4.0.0" } }, "node_modules/regexp.prototype.flags": { "version": "1.5.2", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", - "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.6", "define-properties": "^1.2.1", @@ -9179,17 +7808,15 @@ }, "node_modules/require-directory": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/require-from-string": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "license": "MIT", "peer": true, "engines": { "node": ">=0.10.0" @@ -9197,15 +7824,13 @@ }, "node_modules/requires-port": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/resolve": { "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dev": true, + "license": "MIT", "dependencies": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", @@ -9220,41 +7845,36 @@ }, "node_modules/resolve-alpn": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", - "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", - "dev": true + "dev": true, + "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/resolve-pkg-maps": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", - "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "license": "MIT", "funding": { "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" } }, "node_modules/resolve.exports": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", - "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" } }, "node_modules/responselike": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz", - "integrity": "sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==", "dev": true, + "license": "MIT", "dependencies": { "lowercase-keys": "^3.0.0" }, @@ -9267,23 +7887,20 @@ }, "node_modules/resq": { "version": "1.11.0", - "resolved": "https://registry.npmjs.org/resq/-/resq-1.11.0.tgz", - "integrity": "sha512-G10EBz+zAAy3zUd/CDoBbXRL6ia9kOo3xRHrMDsHljI0GDkhYlyjwoCx5+3eCC4swi1uCoZQhskuJkj7Gp57Bw==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^2.0.1" } }, "node_modules/resq/node_modules/fast-deep-equal": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha512-bCK/2Z4zLidyB4ReuIsvALH6w31YfAQDmXMqMx6FyfHqvBxtjC0eRumeSu4Bs3XtXwpyIywtSTrVT99BxY1f9w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/ret": { "version": "0.4.3", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.4.3.tgz", - "integrity": "sha512-0f4Memo5QP7WQyUEAYUO3esD/XjOc3Zjjg5CPsAq1p8sIu0XPeMbHJemKA0BO7tV0X7+A0FoEpbmHXWxPyD3wQ==", + "license": "MIT", "peer": true, "engines": { "node": ">=10" @@ -9291,30 +7908,25 @@ }, "node_modules/reusify": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "license": "MIT", "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" } }, "node_modules/rfdc": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", - "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==" + "version": "1.3.1", + "license": "MIT" }, "node_modules/rgb2hex": { "version": "0.2.5", - "resolved": "https://registry.npmjs.org/rgb2hex/-/rgb2hex-0.2.5.tgz", - "integrity": "sha512-22MOP1Rh7sAo1BZpDG6R5RFYzR2lYEgwq7HEmyW2qcsOqR2lQKmn+O//xV3YG/0rrhMC6KVX2hU+ZXuaw9a5bw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/rimraf": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", "dev": true, + "license": "ISC", "dependencies": { "glob": "^7.1.3" }, @@ -9327,10 +7939,8 @@ }, "node_modules/rollup-plugin-inject": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rollup-plugin-inject/-/rollup-plugin-inject-3.0.2.tgz", - "integrity": "sha512-ptg9PQwzs3orn4jkgXJ74bfs5vYz1NCZlSQMBUA0wKcGp5i5pA1AO3fOUEte8enhGUC+iapTCzEWw2jEFFUO/w==", - "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-inject.", "dev": true, + "license": "MIT", "dependencies": { "estree-walker": "^0.6.1", "magic-string": "^0.25.3", @@ -9339,26 +7949,22 @@ }, "node_modules/rollup-plugin-node-polyfills": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/rollup-plugin-node-polyfills/-/rollup-plugin-node-polyfills-0.2.1.tgz", - "integrity": "sha512-4kCrKPTJ6sK4/gLL/U5QzVT8cxJcofO0OU74tnB19F40cmuAKSzH5/siithxlofFEjwvw1YAhPmbvGNA6jEroA==", "dev": true, + "license": "MIT", "dependencies": { "rollup-plugin-inject": "^3.0.0" } }, "node_modules/rollup-pluginutils": { "version": "2.8.2", - "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", - "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", "dev": true, + "license": "MIT", "dependencies": { "estree-walker": "^0.6.1" } }, "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==", "funding": [ { "type": "github", @@ -9373,21 +7979,20 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "queue-microtask": "^1.2.2" } }, "node_modules/safaridriver": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/safaridriver/-/safaridriver-0.1.2.tgz", - "integrity": "sha512-4R309+gWflJktzPXBQCobbWEHlzC4aK3a+Ov3tz2Ib2aBxiwd11phkdIBH1l0EO22x24CJMUQkpKFumRriCSRg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/safe-array-concat": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", - "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "get-intrinsic": "^1.2.4", @@ -9403,8 +8008,6 @@ }, "node_modules/safe-buffer": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "funding": [ { "type": "github", @@ -9418,13 +8021,13 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/safe-regex-test": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", - "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.6", "es-errors": "^1.3.0", @@ -9439,8 +8042,7 @@ }, "node_modules/safe-regex2": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/safe-regex2/-/safe-regex2-3.1.0.tgz", - "integrity": "sha512-RAAZAGbap2kBfbVhvmnTFv73NWLMvDGOITFYTZBAaY8eR+Ir4ef7Up/e7amo+y1+AH+3PtLkrt9mvcTsG9LXug==", + "license": "MIT", "peer": true, "dependencies": { "ret": "~0.4.0" @@ -9448,8 +8050,7 @@ }, "node_modules/safe-stable-stringify": { "version": "2.4.3", - "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz", - "integrity": "sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==", + "license": "MIT", "peer": true, "engines": { "node": ">=10" @@ -9457,14 +8058,12 @@ }, "node_modules/safer-buffer": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/scheduler": { "version": "0.23.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", - "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "license": "MIT", "peer": true, "dependencies": { "loose-envify": "^1.1.0" @@ -9472,15 +8071,13 @@ }, "node_modules/secure-json-parse": { "version": "2.7.0", - "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.7.0.tgz", - "integrity": "sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==", + "license": "BSD-3-Clause", "peer": true }, "node_modules/selfsigned": { "version": "2.4.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", - "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", "dev": true, + "license": "MIT", "dependencies": { "@types/node-forge": "^1.3.0", "node-forge": "^1" @@ -9491,8 +8088,7 @@ }, "node_modules/semver": { "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -9502,9 +8098,8 @@ }, "node_modules/send": { "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", "dev": true, + "license": "MIT", "dependencies": { "debug": "2.6.9", "depd": "2.0.0", @@ -9526,24 +8121,21 @@ }, "node_modules/send/node_modules/debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, + "license": "MIT", "dependencies": { "ms": "2.0.0" } }, "node_modules/send/node_modules/debug/node_modules/ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/send/node_modules/mime": { "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "dev": true, + "license": "MIT", "bin": { "mime": "cli.js" }, @@ -9553,15 +8145,13 @@ }, "node_modules/send/node_modules/ms": { "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/serialize-error": { "version": "11.0.3", - "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-11.0.3.tgz", - "integrity": "sha512-2G2y++21dhj2R7iHAdd0FIzjGwuKZld+7Pl/bTU6YIkrC2ZMbVUjm+luj6A6V34Rv9XfKJDKpTWu9W4Gse1D9g==", "dev": true, + "license": "MIT", "dependencies": { "type-fest": "^2.12.2" }, @@ -9574,9 +8164,8 @@ }, "node_modules/serialize-error/node_modules/type-fest": { "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=12.20" }, @@ -9586,9 +8175,8 @@ }, "node_modules/serve-static": { "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", "dev": true, + "license": "MIT", "dependencies": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", @@ -9601,15 +8189,13 @@ }, "node_modules/set-cookie-parser": { "version": "2.6.0", - "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.6.0.tgz", - "integrity": "sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==", + "license": "MIT", "peer": true }, "node_modules/set-function-length": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "dev": true, + "license": "MIT", "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", @@ -9624,9 +8210,8 @@ }, "node_modules/set-function-name": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", - "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", "dev": true, + "license": "MIT", "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", @@ -9639,20 +8224,17 @@ }, "node_modules/setimmediate": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/setprototypeof": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/shallow-clone": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "license": "MIT", "dependencies": { "kind-of": "^6.0.2" }, @@ -9662,9 +8244,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" }, @@ -9674,18 +8255,16 @@ }, "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/side-channel": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", - "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "es-errors": "^1.3.0", @@ -9701,8 +8280,7 @@ }, "node_modules/signal-exit": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "license": "ISC", "engines": { "node": ">=14" }, @@ -9712,9 +8290,8 @@ }, "node_modules/skin-tone": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/skin-tone/-/skin-tone-2.0.0.tgz", - "integrity": "sha512-kUMbT1oBJCpgrnKoSr0o6wPtvRWT9W9UKvGLwfJYO2WuahZRHOpEyL1ckyMGgMWh0UdpmaoFqKKD29WTomNEGA==", "dev": true, + "license": "MIT", "dependencies": { "unicode-emoji-modifier-base": "^1.0.0" }, @@ -9724,18 +8301,16 @@ }, "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/smart-buffer": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 6.0.0", "npm": ">= 3.0.0" @@ -9743,9 +8318,8 @@ }, "node_modules/socket.io": { "version": "4.7.5", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.7.5.tgz", - "integrity": "sha512-DmeAkF6cwM9jSfmp6Dr/5/mfMwb5Z5qRrSXLpo3Fq5SqyU8CMF15jIN4ZhfSwu35ksM1qmHZDQ/DK5XTccSTvA==", "dev": true, + "license": "MIT", "dependencies": { "accepts": "~1.3.4", "base64id": "~2.0.0", @@ -9760,20 +8334,18 @@ } }, "node_modules/socket.io-adapter": { - "version": "2.5.5", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.5.tgz", - "integrity": "sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg==", + "version": "2.5.4", "dev": true, + "license": "MIT", "dependencies": { "debug": "~4.3.4", - "ws": "~8.17.1" + "ws": "~8.11.0" } }, "node_modules/socket.io-parser": { "version": "4.2.4", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", - "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==", "dev": true, + "license": "MIT", "dependencies": { "@socket.io/component-emitter": "~3.1.0", "debug": "~4.3.1" @@ -9784,9 +8356,8 @@ }, "node_modules/socks": { "version": "2.8.3", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", - "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==", "dev": true, + "license": "MIT", "dependencies": { "ip-address": "^9.0.5", "smart-buffer": "^4.2.0" @@ -9797,14 +8368,13 @@ } }, "node_modules/socks-proxy-agent": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.4.tgz", - "integrity": "sha512-GNAq/eg8Udq2x0eNiFkr9gRg5bA7PXEWagQdeRX4cPSG+X/8V38v637gim9bjFptMk1QWsCTr0ttrJEiXbNnRw==", + "version": "8.0.3", "dev": true, + "license": "MIT", "dependencies": { "agent-base": "^7.1.1", "debug": "^4.3.4", - "socks": "^2.8.3" + "socks": "^2.7.1" }, "engines": { "node": ">= 14" @@ -9812,9 +8382,8 @@ }, "node_modules/socks-proxy-agent/node_modules/agent-base": { "version": "7.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", - "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", "dev": true, + "license": "MIT", "dependencies": { "debug": "^4.3.4" }, @@ -9824,8 +8393,7 @@ }, "node_modules/sonic-boom": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-4.0.1.tgz", - "integrity": "sha512-hTSD/6JMLyT4r9zeof6UtuBDpjJ9sO08/nmS5djaA9eozT9oOlNdpXSnzcgj4FTqpk3nkLrs61l4gip9r1HCrQ==", + "license": "MIT", "peer": true, "dependencies": { "atomic-sleep": "^1.0.0" @@ -9833,16 +8401,14 @@ }, "node_modules/source-map": { "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, "node_modules/source-map-js": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", - "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "license": "BSD-3-Clause", "peer": true, "engines": { "node": ">=0.10.0" @@ -9850,8 +8416,7 @@ }, "node_modules/source-map-support": { "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -9859,15 +8424,11 @@ }, "node_modules/sourcemap-codec": { "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", - "deprecated": "Please use @jridgewell/sourcemap-codec instead", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/spacetrim": { "version": "0.11.36", - "resolved": "https://registry.npmjs.org/spacetrim/-/spacetrim-0.11.36.tgz", - "integrity": "sha512-jqv5aAfMLkBnFK+38QUtEGgU7x1KrfpDnCdjX4+W1IEVgA8Kf3tk8K9je8j2nkCSXdIngjda53fuXERr4/61kw==", "dev": true, "funding": [ { @@ -9878,13 +8439,13 @@ "type": "github", "url": "https://github.com/hejny/spacetrim/blob/main/README.md#%EF%B8%8F-contributing" } - ] + ], + "license": "SEE LICENSE IN LICENSE" }, "node_modules/split": { "version": "0.3.3", - "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", - "integrity": "sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==", "dev": true, + "license": "MIT", "dependencies": { "through": "2" }, @@ -9894,23 +8455,20 @@ }, "node_modules/split2": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", - "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "license": "ISC", "engines": { "node": ">= 10.x" } }, "node_modules/sprintf-js": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", - "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/stacktracey": { "version": "2.1.8", - "resolved": "https://registry.npmjs.org/stacktracey/-/stacktracey-2.1.8.tgz", - "integrity": "sha512-Kpij9riA+UNg7TnphqjH7/CzctQ/owJGNbFkfEeve4Z4uxT5+JapVLFXcsurIfN34gnTWZNJ/f7NMG0E8JDzTw==", "dev": true, + "license": "Unlicense", "dependencies": { "as-table": "^1.0.36", "get-source": "^2.0.12" @@ -9918,18 +8476,16 @@ }, "node_modules/statuses": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/stoppable": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/stoppable/-/stoppable-1.1.0.tgz", - "integrity": "sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==", "dev": true, + "license": "MIT", "engines": { "node": ">=4", "npm": ">=6" @@ -9937,18 +8493,16 @@ }, "node_modules/stream-combiner": { "version": "0.0.4", - "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", - "integrity": "sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==", "dev": true, + "license": "MIT", "dependencies": { "duplexer": "~0.1.1" } }, "node_modules/streamroller": { "version": "3.1.5", - "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.1.5.tgz", - "integrity": "sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw==", "dev": true, + "license": "MIT", "dependencies": { "date-format": "^4.0.14", "debug": "^4.3.4", @@ -9960,8 +8514,6 @@ }, "node_modules/streamsearch": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", - "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", "peer": true, "engines": { "node": ">=10.0.0" @@ -9969,8 +8521,7 @@ }, "node_modules/streamx": { "version": "2.18.0", - "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.18.0.tgz", - "integrity": "sha512-LLUC1TWdjVdn1weXGcSxyTR3T4+acB6tVGXT95y0nGbca4t4o/ng1wKAGTljm9VicuCVLvRlqFYXYy5GwgM7sQ==", + "license": "MIT", "dependencies": { "fast-fifo": "^1.3.2", "queue-tick": "^1.0.1", @@ -9982,17 +8533,15 @@ }, "node_modules/string_decoder": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", "dependencies": { "safe-buffer": "~5.2.0" } }, "node_modules/string-width": { "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -10005,9 +8554,8 @@ "node_modules/string-width-cjs": { "name": "string-width", "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -10019,9 +8567,8 @@ }, "node_modules/string.prototype.trim": { "version": "1.2.9", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", - "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -10037,9 +8584,8 @@ }, "node_modules/string.prototype.trimend": { "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", - "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -10051,9 +8597,8 @@ }, "node_modules/string.prototype.trimstart": { "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", - "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -10068,9 +8613,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" }, @@ -10081,9 +8625,8 @@ "node_modules/strip-ansi-cjs": { "name": "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" }, @@ -10093,18 +8636,16 @@ }, "node_modules/strip-bom": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/strip-json-comments": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -10114,8 +8655,7 @@ }, "node_modules/styled-jsx": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.1.tgz", - "integrity": "sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==", + "license": "MIT", "peer": true, "dependencies": { "client-only": "0.0.1" @@ -10137,8 +8677,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" }, @@ -10148,9 +8688,8 @@ }, "node_modules/supports-hyperlinks": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-3.0.0.tgz", - "integrity": "sha512-QBDPHyPQDRTy9ku4URNGY5Lah8PAaXs6tAAwp55sL5WCsSW7GIfdf6W5ixfziW+t7wh3GVvHyHHyQ1ESsoRvaA==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0", "supports-color": "^7.0.0" @@ -10161,9 +8700,8 @@ }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -10173,18 +8711,16 @@ }, "node_modules/tapable": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/tar-fs": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.4.tgz", - "integrity": "sha512-5AFQU8b9qLfZCX9zp2duONhPmZv0hGYiBPJsyUdqMjzq/mqVpy/rEUSeHk1+YitmxugaptgBh5oDGU3VsAJq4w==", "dev": true, + "license": "MIT", "dependencies": { "mkdirp-classic": "^0.5.2", "pump": "^3.0.0", @@ -10193,8 +8729,7 @@ }, "node_modules/tar-stream": { "version": "3.1.7", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz", - "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==", + "license": "MIT", "dependencies": { "b4a": "^1.6.4", "fast-fifo": "^1.2.0", @@ -10203,8 +8738,7 @@ }, "node_modules/temp": { "version": "0.9.4", - "resolved": "https://registry.npmjs.org/temp/-/temp-0.9.4.tgz", - "integrity": "sha512-yYrrsWnrXMcdsnu/7YMYAofM1ktpL5By7vZhf15CrXijWWrEYZks5AXBudalfSWJLlnen/QUJUB5aoB0kqZUGA==", + "license": "MIT", "dependencies": { "mkdirp": "^0.5.1", "rimraf": "~2.6.2" @@ -10215,9 +8749,8 @@ }, "node_modules/temp-fs": { "version": "0.9.9", - "resolved": "https://registry.npmjs.org/temp-fs/-/temp-fs-0.9.9.tgz", - "integrity": "sha512-WfecDCR1xC9b0nsrzSaxPf3ZuWeWLUWblW4vlDQAa1biQaKHiImHnJfeQocQe/hXKMcolRzgkcVX/7kK4zoWbw==", "dev": true, + "license": "MIT", "dependencies": { "rimraf": "~2.5.2" }, @@ -10227,10 +8760,8 @@ }, "node_modules/temp-fs/node_modules/rimraf": { "version": "2.5.4", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.5.4.tgz", - "integrity": "sha512-Lw7SHMjssciQb/rRz7JyPIy9+bbUshEucPoLRvWqy09vC5zQixl8Uet+Zl+SROBB/JMWHJRdCk1qdxNWHNMvlQ==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", "dev": true, + "license": "ISC", "dependencies": { "glob": "^7.0.5" }, @@ -10240,9 +8771,7 @@ }, "node_modules/temp/node_modules/rimraf": { "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", + "license": "ISC", "dependencies": { "glob": "^7.1.3" }, @@ -10251,23 +8780,20 @@ } }, "node_modules/text-decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.1.1.tgz", - "integrity": "sha512-8zll7REEv4GDD3x4/0pW+ppIxSNs7H1J10IKFZsuOMscumCdM2a+toDGLPA3T+1+fLBql4zbt5z83GEQGGV5VA==", + "version": "1.1.0", + "license": "Apache-2.0", "dependencies": { "b4a": "^1.6.4" } }, "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/thread-stream": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-3.1.0.tgz", - "integrity": "sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==", + "version": "3.0.2", + "license": "MIT", "peer": true, "dependencies": { "real-require": "^0.2.0" @@ -10275,36 +8801,31 @@ }, "node_modules/through": { "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/tiny-invariant": { "version": "1.3.3", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", - "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==" + "license": "MIT" }, "node_modules/tmp": { "version": "0.2.3", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", - "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", "dev": true, + "license": "MIT", "engines": { "node": ">=14.14" } }, "node_modules/to-fast-properties": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "license": "MIT", "engines": { "node": ">=4" } }, "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==", + "license": "MIT", "dependencies": { "is-number": "^7.0.0" }, @@ -10314,8 +8835,7 @@ }, "node_modules/toad-cache": { "version": "3.7.0", - "resolved": "https://registry.npmjs.org/toad-cache/-/toad-cache-3.7.0.tgz", - "integrity": "sha512-/m8M+2BJUpoJdgAHoG+baCwBT+tf2VraSfkBgl0Y00qIWt41DJ8R5B8nsEw0I58YwF5IZH6z24/2TobDKnqSWw==", + "license": "MIT", "peer": true, "engines": { "node": ">=12" @@ -10323,24 +8843,21 @@ }, "node_modules/toidentifier": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.6" } }, "node_modules/tr46": { "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "dev": true + "dev": true, + "license": "MIT" }, "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" }, @@ -10350,15 +8867,13 @@ }, "node_modules/ts-expose-internals-conditionally": { "version": "1.0.0-empty.0", - "resolved": "https://registry.npmjs.org/ts-expose-internals-conditionally/-/ts-expose-internals-conditionally-1.0.0-empty.0.tgz", - "integrity": "sha512-F8m9NOF6ZhdOClDVdlM8gj3fDCav4ZIFSs/EI3ksQbAAXVSCN/Jh5OCJDDZWBuBy9psFc6jULGDlPwjMYMhJDw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/tsconfig-paths": { "version": "3.15.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", - "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", "dev": true, + "license": "MIT", "dependencies": { "@types/json5": "^0.0.29", "json5": "^1.0.2", @@ -10367,14 +8882,12 @@ } }, "node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + "version": "2.6.2", + "license": "0BSD" }, "node_modules/tsx": { "version": "4.19.0", - "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.19.0.tgz", - "integrity": "sha512-bV30kM7bsLZKZIOCHeMNVMJ32/LuJzLVajkQI/qf92J2Qr08ueLQvW00PUZGiuLPP760UINwupgUj8qrSCPUKg==", + "license": "MIT", "dependencies": { "esbuild": "~0.23.0", "get-tsconfig": "^4.7.5" @@ -10389,11 +8902,89 @@ "fsevents": "~2.3.3" } }, + "node_modules/tsx/node_modules/@esbuild/darwin-arm64": { + "version": "0.23.1", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/esbuild": { + "version": "0.23.1", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.23.1", + "@esbuild/android-arm": "0.23.1", + "@esbuild/android-arm64": "0.23.1", + "@esbuild/android-x64": "0.23.1", + "@esbuild/darwin-arm64": "0.23.1", + "@esbuild/darwin-x64": "0.23.1", + "@esbuild/freebsd-arm64": "0.23.1", + "@esbuild/freebsd-x64": "0.23.1", + "@esbuild/linux-arm": "0.23.1", + "@esbuild/linux-arm64": "0.23.1", + "@esbuild/linux-ia32": "0.23.1", + "@esbuild/linux-loong64": "0.23.1", + "@esbuild/linux-mips64el": "0.23.1", + "@esbuild/linux-ppc64": "0.23.1", + "@esbuild/linux-riscv64": "0.23.1", + "@esbuild/linux-s390x": "0.23.1", + "@esbuild/linux-x64": "0.23.1", + "@esbuild/netbsd-x64": "0.23.1", + "@esbuild/openbsd-arm64": "0.23.1", + "@esbuild/openbsd-x64": "0.23.1", + "@esbuild/sunos-x64": "0.23.1", + "@esbuild/win32-arm64": "0.23.1", + "@esbuild/win32-ia32": "0.23.1", + "@esbuild/win32-x64": "0.23.1" + } + }, + "node_modules/turbo": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "bin": { + "turbo": "bin/turbo" + }, + "optionalDependencies": { + "turbo-darwin-64": "2.1.0", + "turbo-darwin-arm64": "2.1.0", + "turbo-linux-64": "2.1.0", + "turbo-linux-arm64": "2.1.0", + "turbo-windows-64": "2.1.0", + "turbo-windows-arm64": "2.1.0" + } + }, + "node_modules/turbo-darwin-arm64": { + "version": "2.1.0", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, "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" }, @@ -10403,9 +8994,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" }, @@ -10415,9 +9005,8 @@ }, "node_modules/type-is": { "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", "dev": true, + "license": "MIT", "dependencies": { "media-typer": "0.3.0", "mime-types": "~2.1.24" @@ -10428,9 +9017,8 @@ }, "node_modules/typed-array-buffer": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", - "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "es-errors": "^1.3.0", @@ -10442,9 +9030,8 @@ }, "node_modules/typed-array-byte-length": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", - "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", @@ -10461,9 +9048,8 @@ }, "node_modules/typed-array-byte-offset": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", - "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", "dev": true, + "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.7", @@ -10481,9 +9067,8 @@ }, "node_modules/typed-array-length": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", - "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", @@ -10501,8 +9086,7 @@ }, "node_modules/typescript": { "version": "5.5.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", - "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -10513,8 +9097,6 @@ }, "node_modules/ua-parser-js": { "version": "0.7.38", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.38.tgz", - "integrity": "sha512-fYmIy7fKTSFAhG3fuPlubeGaMoAd6r0rSnfEsO5nEY55i26KSLt9EH7PLQiiqPUhNqYIJvSkTy1oArIcXAbPbA==", "dev": true, "funding": [ { @@ -10530,21 +9112,20 @@ "url": "https://github.com/sponsors/faisalman" } ], + "license": "MIT", "engines": { "node": "*" } }, "node_modules/ufo": { "version": "1.5.4", - "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.5.4.tgz", - "integrity": "sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/unbox-primitive": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "has-bigints": "^1.0.2", @@ -10557,9 +9138,8 @@ }, "node_modules/unbzip2-stream": { "version": "1.4.3", - "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", - "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", "dev": true, + "license": "MIT", "dependencies": { "buffer": "^5.2.1", "through": "^2.3.8" @@ -10567,8 +9147,6 @@ }, "node_modules/unbzip2-stream/node_modules/buffer": { "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "dev": true, "funding": [ { @@ -10584,6 +9162,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" @@ -10591,8 +9170,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" }, @@ -10602,67 +9180,46 @@ }, "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==" + "license": "MIT" }, "node_modules/unenv": { "name": "unenv-nightly", - "version": "1.10.0-1717606461.a117952", - "resolved": "https://registry.npmjs.org/unenv-nightly/-/unenv-nightly-1.10.0-1717606461.a117952.tgz", - "integrity": "sha512-u3TfBX02WzbHTpaEfWEKwDijDSFAHcgXkayUZ+MVDrjhLFvgAJzFGTSTmwlEhwWi2exyRQey23ah9wELMM6etg==", + "version": "2.0.0-1724863496.70db6f1", "dev": true, + "license": "MIT", "dependencies": { - "consola": "^3.2.3", "defu": "^6.1.4", - "mime": "^3.0.0", - "node-fetch-native": "^1.6.4", + "ohash": "^1.1.3", "pathe": "^1.1.2", - "ufo": "^1.5.3" - } - }, - "node_modules/unenv/node_modules/mime": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", - "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", - "dev": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=10.0.0" + "ufo": "^1.5.4" } }, "node_modules/unicode-emoji-modifier-base": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unicode-emoji-modifier-base/-/unicode-emoji-modifier-base-1.0.0.tgz", - "integrity": "sha512-yLSH4py7oFH3oG/9K+XWrz1pSi3dfUrWEnInbxMfArOfc1+33BlGPQtLsOYwvdMy11AwUBetYuaRxSPqgkq+8g==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/universalify": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4.0.0" } }, "node_modules/unpipe": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/update-browserslist-db": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", - "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", + "version": "1.0.16", "funding": [ { "type": "opencollective", @@ -10677,6 +9234,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { "escalade": "^3.1.2", "picocolors": "^1.0.1" @@ -10690,17 +9248,14 @@ }, "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/userhome": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/userhome/-/userhome-1.0.0.tgz", - "integrity": "sha512-ayFKY3H+Pwfy4W98yPdtH1VqH4psDeyW8lYYFzfecR9d6hqLpqhecktvYR3SEEXt7vG0S1JEpciI3g94pMErig==", "dev": true, "engines": { "node": ">= 0.8.0" @@ -10708,51 +9263,45 @@ }, "node_modules/util-deprecate": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/utils-merge": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4.0" } }, "node_modules/validate-npm-package-name": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz", - "integrity": "sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==", "dev": true, + "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/vary": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/void-elements": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", - "integrity": "sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/wait-port": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/wait-port/-/wait-port-1.1.0.tgz", - "integrity": "sha512-3e04qkoN3LxTMLakdqeWth8nih8usyg+sf1Bgdf9wwUkp05iuK1eSY/QpLvscT/+F/gA89+LpUmmgBtesbqI2Q==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.1.2", "commander": "^9.3.0", @@ -10767,40 +9316,24 @@ }, "node_modules/wait-port/node_modules/commander": { "version": "9.5.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", - "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || >=14" } }, - "node_modules/watchpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", - "peer": true, - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, "node_modules/web-streams-polyfill": { "version": "3.3.3", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", - "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 8" } }, "node_modules/webdriver": { "version": "8.39.0", - "resolved": "https://registry.npmjs.org/webdriver/-/webdriver-8.39.0.tgz", - "integrity": "sha512-Kc3+SfiH4ufyrIht683VT2vnJocx0pfH8rYdyPvEh1b2OYewtFTHK36k9rBDHZiBmk6jcSXs4M2xeFgOuon9Lg==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "^20.1.0", "@types/ws": "^8.5.3", @@ -10820,9 +9353,8 @@ }, "node_modules/webdriverio": { "version": "8.39.1", - "resolved": "https://registry.npmjs.org/webdriverio/-/webdriverio-8.39.1.tgz", - "integrity": "sha512-dPwLgLNtP+l4vnybz+YFxxH8nBKOP7j6VVzKtfDyTLDQg9rz3U8OA4xMMQCBucnrVXy3KcKxGqlnMa+c4IfWCQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "^20.1.0", "@wdio/config": "8.39.0", @@ -10864,15 +9396,13 @@ }, "node_modules/webidl-conversions": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "dev": true + "dev": true, + "license": "BSD-2-Clause" }, "node_modules/whatwg-url": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "dev": true, + "license": "MIT", "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" @@ -10880,9 +9410,8 @@ }, "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" }, @@ -10895,9 +9424,8 @@ }, "node_modules/which-boxed-primitive": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", "dev": true, + "license": "MIT", "dependencies": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", @@ -10911,9 +9439,8 @@ }, "node_modules/which-typed-array": { "version": "1.1.15", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", - "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", "dev": true, + "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.7", @@ -10930,19 +9457,17 @@ }, "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/workerd": { "version": "1.20240821.1", - "resolved": "https://registry.npmjs.org/workerd/-/workerd-1.20240821.1.tgz", - "integrity": "sha512-y4phjCnEG96u8ZkgkkHB+gSw0i6uMNo23rBmixylWpjxDklB+LWD8dztasvsu7xGaZbLoTxQESdEw956F7VJDA==", "dev": true, "hasInstallScript": true, + "license": "Apache-2.0", "bin": { "workerd": "bin/workerd" }, @@ -10958,13 +9483,12 @@ } }, "node_modules/wrangler": { - "version": "3.72.2", - "resolved": "https://registry.npmjs.org/wrangler/-/wrangler-3.72.2.tgz", - "integrity": "sha512-7nxkJ4md+KtESNJ/0DwTM7bHZP+uNRpJT5gMDT9WllP9UVzYdtXCTF+p4CHtxIReUpe6pOi7tb05hK9/Q6WaiA==", + "version": "3.73.0", "dev": true, + "license": "MIT OR Apache-2.0", "dependencies": { "@cloudflare/kv-asset-handler": "0.3.4", - "@cloudflare/workers-shared": "0.3.0", + "@cloudflare/workers-shared": "0.4.1", "@esbuild-plugins/node-globals-polyfill": "^0.2.3", "@esbuild-plugins/node-modules-polyfill": "^0.2.2", "blake3-wasm": "^2.1.5", @@ -10978,7 +9502,7 @@ "resolve.exports": "^2.0.2", "selfsigned": "^2.0.1", "source-map": "^0.6.1", - "unenv": "npm:unenv-nightly@1.10.0-1717606461.a117952", + "unenv": "npm:unenv-nightly@2.0.0-1724863496.70db6f1", "workerd": "1.20240821.1", "xxhash-wasm": "^1.0.1" }, @@ -11001,634 +9525,277 @@ } } }, - "node_modules/wrangler/node_modules/@esbuild/android-arm": { + "node_modules/wrangler/node_modules/@esbuild/darwin-arm64": { "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", - "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", "cpu": [ - "arm" + "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ - "android" + "darwin" ], "engines": { "node": ">=12" } }, - "node_modules/wrangler/node_modules/@esbuild/android-arm64": { + "node_modules/wrangler/node_modules/esbuild": { "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz", - "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", - "cpu": [ - "arm64" - ], "dev": true, - "optional": true, - "os": [ - "android" - ], + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, "engines": { "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.17.19", + "@esbuild/android-arm64": "0.17.19", + "@esbuild/android-x64": "0.17.19", + "@esbuild/darwin-arm64": "0.17.19", + "@esbuild/darwin-x64": "0.17.19", + "@esbuild/freebsd-arm64": "0.17.19", + "@esbuild/freebsd-x64": "0.17.19", + "@esbuild/linux-arm": "0.17.19", + "@esbuild/linux-arm64": "0.17.19", + "@esbuild/linux-ia32": "0.17.19", + "@esbuild/linux-loong64": "0.17.19", + "@esbuild/linux-mips64el": "0.17.19", + "@esbuild/linux-ppc64": "0.17.19", + "@esbuild/linux-riscv64": "0.17.19", + "@esbuild/linux-s390x": "0.17.19", + "@esbuild/linux-x64": "0.17.19", + "@esbuild/netbsd-x64": "0.17.19", + "@esbuild/openbsd-x64": "0.17.19", + "@esbuild/sunos-x64": "0.17.19", + "@esbuild/win32-arm64": "0.17.19", + "@esbuild/win32-ia32": "0.17.19", + "@esbuild/win32-x64": "0.17.19" } }, - "node_modules/wrangler/node_modules/@esbuild/android-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz", - "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", - "cpu": [ - "x64" - ], + "node_modules/wrangler/node_modules/path-to-regexp": { + "version": "6.2.2", "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } + "license": "MIT" }, - "node_modules/wrangler/node_modules/@esbuild/darwin-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz", - "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==", - "cpu": [ - "arm64" - ], + "node_modules/wrap-ansi": { + "version": "7.0.0", "dev": true, - "optional": true, - "os": [ - "darwin" - ], + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, "engines": { - "node": ">=12" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/wrangler/node_modules/@esbuild/darwin-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz", - "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", - "cpu": [ - "x64" - ], + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", "dev": true, - "optional": true, - "os": [ - "darwin" - ], + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, "engines": { - "node": ">=12" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/wrangler/node_modules/@esbuild/freebsd-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz", - "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], + "node_modules/wrappy": { + "version": "1.0.2", + "license": "ISC" + }, + "node_modules/write-file-atomic": { + "version": "5.0.1", + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^4.0.1" + }, "engines": { - "node": ">=12" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/wrangler/node_modules/@esbuild/freebsd-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz", - "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", - "cpu": [ - "x64" - ], + "node_modules/ws": { + "version": "8.11.0", "dev": true, - "optional": true, - "os": [ - "freebsd" - ], + "license": "MIT", "engines": { - "node": ">=12" - } - }, - "node_modules/wrangler/node_modules/@esbuild/linux-arm": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz", - "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/wrangler/node_modules/@esbuild/linux-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz", - "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, - "node_modules/wrangler/node_modules/@esbuild/linux-ia32": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz", - "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", - "cpu": [ - "ia32" - ], + "node_modules/xxhash-wasm": { + "version": "1.0.2", "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } + "license": "MIT" }, - "node_modules/wrangler/node_modules/@esbuild/linux-loong64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz", - "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", - "cpu": [ - "loong64" - ], + "node_modules/y18n": { + "version": "5.0.8", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "license": "ISC", "engines": { - "node": ">=12" + "node": ">=10" } }, - "node_modules/wrangler/node_modules/@esbuild/linux-mips64el": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz", - "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } + "node_modules/yallist": { + "version": "3.1.1", + "license": "ISC" }, - "node_modules/wrangler/node_modules/@esbuild/linux-ppc64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz", - "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], + "node_modules/yaml": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.1.tgz", + "integrity": "sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q==", + "bin": { + "yaml": "bin.mjs" + }, "engines": { - "node": ">=12" + "node": ">= 14" } }, - "node_modules/wrangler/node_modules/@esbuild/linux-riscv64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz", - "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", - "cpu": [ - "riscv64" - ], + "node_modules/yargs": { + "version": "17.7.2", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, "engines": { "node": ">=12" } }, - "node_modules/wrangler/node_modules/@esbuild/linux-s390x": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz", - "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", - "cpu": [ - "s390x" - ], + "node_modules/yargs-parser": { + "version": "21.1.1", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "license": "ISC", "engines": { "node": ">=12" } }, - "node_modules/wrangler/node_modules/@esbuild/linux-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz", - "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==", - "cpu": [ - "x64" - ], + "node_modules/yauzl": { + "version": "2.10.0", "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" + "license": "MIT", + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" } }, - "node_modules/wrangler/node_modules/@esbuild/netbsd-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz", - "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", - "cpu": [ - "x64" - ], + "node_modules/yauzl/node_modules/buffer-crc32": { + "version": "0.2.13", "dev": true, - "optional": true, - "os": [ - "netbsd" - ], + "license": "MIT", "engines": { - "node": ">=12" + "node": "*" } }, - "node_modules/wrangler/node_modules/@esbuild/openbsd-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz", - "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", - "cpu": [ - "x64" - ], + "node_modules/yocto-queue": { + "version": "0.1.0", "dev": true, - "optional": true, - "os": [ - "openbsd" - ], + "license": "MIT", "engines": { - "node": ">=12" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/wrangler/node_modules/@esbuild/sunos-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz", - "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", - "cpu": [ - "x64" - ], + "node_modules/youch": { + "version": "3.3.3", "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" + "license": "MIT", + "dependencies": { + "cookie": "^0.5.0", + "mustache": "^4.2.0", + "stacktracey": "^2.1.8" } }, - "node_modules/wrangler/node_modules/@esbuild/win32-arm64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz", - "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", - "cpu": [ - "arm64" - ], + "node_modules/youch/node_modules/cookie": { + "version": "0.5.0", "dev": true, - "optional": true, - "os": [ - "win32" - ], + "license": "MIT", "engines": { - "node": ">=12" + "node": ">= 0.6" } }, - "node_modules/wrangler/node_modules/@esbuild/win32-ia32": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz", - "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", - "cpu": [ - "ia32" - ], + "node_modules/zip-stream": { + "version": "6.0.1", "dev": true, - "optional": true, - "os": [ - "win32" - ], + "license": "MIT", + "dependencies": { + "archiver-utils": "^5.0.0", + "compress-commons": "^6.0.2", + "readable-stream": "^4.0.0" + }, "engines": { - "node": ">=12" + "node": ">= 14" } }, - "node_modules/wrangler/node_modules/@esbuild/win32-x64": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", - "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", - "cpu": [ - "x64" - ], + "node_modules/zod": { + "version": "3.23.8", "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" } }, - "node_modules/wrangler/node_modules/esbuild": { - "version": "0.17.19", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz", - "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==", - "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" + "packages/connect": { + "name": "@connectrpc/connect", + "version": "2.0.0-alpha.1", + "license": "Apache-2.0", + "devDependencies": { + "@bufbuild/buf": "^1.39.0", + "@bufbuild/protoc-gen-es": "^2.0.0", + "@types/jasmine": "^5.0.0", + "jasmine": "^5.2.0", + "undici": "^5.28.4" }, - "optionalDependencies": { - "@esbuild/android-arm": "0.17.19", - "@esbuild/android-arm64": "0.17.19", - "@esbuild/android-x64": "0.17.19", - "@esbuild/darwin-arm64": "0.17.19", - "@esbuild/darwin-x64": "0.17.19", - "@esbuild/freebsd-arm64": "0.17.19", - "@esbuild/freebsd-x64": "0.17.19", - "@esbuild/linux-arm": "0.17.19", - "@esbuild/linux-arm64": "0.17.19", - "@esbuild/linux-ia32": "0.17.19", - "@esbuild/linux-loong64": "0.17.19", - "@esbuild/linux-mips64el": "0.17.19", - "@esbuild/linux-ppc64": "0.17.19", - "@esbuild/linux-riscv64": "0.17.19", - "@esbuild/linux-s390x": "0.17.19", - "@esbuild/linux-x64": "0.17.19", - "@esbuild/netbsd-x64": "0.17.19", - "@esbuild/openbsd-x64": "0.17.19", - "@esbuild/sunos-x64": "0.17.19", - "@esbuild/win32-arm64": "0.17.19", - "@esbuild/win32-ia32": "0.17.19", - "@esbuild/win32-x64": "0.17.19" + "peerDependencies": { + "@bufbuild/protobuf": "^2.0.0" } }, - "node_modules/wrangler/node_modules/path-to-regexp": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.2.tgz", - "integrity": "sha512-GQX3SSMokngb36+whdpRXE+3f9V8UzyAorlYvOGx87ufGHehNTn5lCxrKtLyZ4Yl/wEKnNnr98ZzOwwDZV5ogw==", - "dev": true - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, + "packages/connect-cloudflare": { + "name": "@connectrpc/connect-cloudflare", "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" + "@bufbuild/protobuf": "^2.0.0", + "@connectrpc/connect": "2.0.0-alpha.1", + "@connectrpc/connect-node": "2.0.0-alpha.1" }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "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==" - }, - "node_modules/write-file-atomic": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", - "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/ws": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", - "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", - "dev": true, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xxhash-wasm": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/xxhash-wasm/-/xxhash-wasm-1.0.2.tgz", - "integrity": "sha512-ibF0Or+FivM9lNrg+HGJfVX8WJqgo+kCLDc4vx6xMeTce7Aj+DLttKbxxRR/gNLSAelRc1omAPlJ77N/Jem07A==", - "dev": true - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" - }, - "node_modules/yaml": { - "version": "2.4.5", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.5.tgz", - "integrity": "sha512-aBx2bnqDzVOyNKfsysjA2ms5ZlnjSAW2eG3/L5G/CSujfjLJTJsEw1bGw8kCf04KodQWk1pxlGnZ56CRxiawmg==", - "bin": { - "yaml": "bin.mjs" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", - "dev": true, - "dependencies": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" - } - }, - "node_modules/yauzl/node_modules/buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "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, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/youch": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/youch/-/youch-3.3.3.tgz", - "integrity": "sha512-qSFXUk3UZBLfggAW3dJKg0BMblG5biqSF8M34E06o5CSsZtH92u9Hqmj2RzGiHDi64fhe83+4tENFP2DB6t6ZA==", - "dev": true, - "dependencies": { - "cookie": "^0.5.0", - "mustache": "^4.2.0", - "stacktracey": "^2.1.8" - } - }, - "node_modules/youch/node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/zip-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-6.0.1.tgz", - "integrity": "sha512-zK7YHHz4ZXpW89AHXUPbQVGKI7uvkd3hzusTdotCg1UxyaVtg0zFJSTfW/Dq5f7OBBVnq6cZIaC8Ti4hb6dtCA==", - "dev": true, - "dependencies": { - "archiver-utils": "^5.0.0", - "compress-commons": "^6.0.2", - "readable-stream": "^4.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/zod": { - "version": "3.23.8", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.23.8.tgz", - "integrity": "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/colinhacks" - } - }, - "packages/connect": { - "name": "@connectrpc/connect", - "version": "2.0.0-alpha.1", - "license": "Apache-2.0", - "devDependencies": { - "@bufbuild/buf": "^1.36.0", - "@bufbuild/protoc-gen-es": "^2.0.0", - "@types/jasmine": "^5.0.0", - "jasmine": "^5.2.0", - "undici": "^5.28.4" - }, - "peerDependencies": { - "@bufbuild/protobuf": "^2.0.0" - } - }, - "packages/connect-cloudflare": { - "name": "@connectrpc/connect-cloudflare", - "dependencies": { - "@bufbuild/protobuf": "^2.0.0", - "@connectrpc/connect": "2.0.0-alpha.1", - "@connectrpc/connect-node": "2.0.0-alpha.1" - }, - "devDependencies": { - "@bufbuild/protoc-gen-es": "^2.0.0", - "@cloudflare/workers-types": "^4.20240725.0", - "@connectrpc/connect-conformance": "^2.0.0-alpha.1", - "tsx": "^4.16.5", - "wrangler": "^3.68.0" + "devDependencies": { + "@cloudflare/workers-types": "^4.20240821.1", + "@connectrpc/connect-conformance": "^2.0.0-alpha.1", + "tsx": "^4.19.0", + "wrangler": "^3.73.0" } }, "packages/connect-conformance": { @@ -11645,7 +9812,7 @@ "connectconformance": "bin/connectconformance.cjs" }, "devDependencies": { - "@bufbuild/buf": "^1.36.0", + "@bufbuild/buf": "^1.39.0", "@bufbuild/protoc-gen-es": "^2.0.0", "@types/debug": "^4.1.12", "@types/node-forge": "^1.3.9", @@ -11657,10 +9824,12 @@ "version": "2.0.0-alpha.1", "license": "Apache-2.0", "devDependencies": { + "@connectrpc/connect": "2.0.0-alpha.1", "@connectrpc/connect-conformance": "^2.0.0-alpha.1", + "@connectrpc/connect-node": "2.0.0-alpha.1", "@types/express": "^4.17.18", "express": "^4.19.2", - "tsx": "^4.16.5" + "tsx": "^4.19.0" }, "engines": { "node": ">=16.0.0" @@ -11676,7 +9845,9 @@ "version": "2.0.0-alpha.1", "license": "Apache-2.0", "devDependencies": { - "@connectrpc/connect-conformance": "^2.0.0-alpha.1" + "@connectrpc/connect": "2.0.0-alpha.1", + "@connectrpc/connect-conformance": "^2.0.0-alpha.1", + "@connectrpc/connect-node": "2.0.0-alpha.1" }, "engines": { "node": ">=16.0.0" @@ -11694,9 +9865,9 @@ "license": "Apache-2.0", "dependencies": { "fast-glob": "3.3.2", - "jscodeshift": "0.16.1", + "jscodeshift": "17.0.0", "semver": "^7.6.3", - "yaml": "^2.4.5" + "yaml": "^2.5.1" }, "bin": { "connect-migrate": "bin/connect-migrate" @@ -11713,6 +9884,10 @@ "name": "@connectrpc/connect-next", "version": "2.0.0-alpha.1", "license": "Apache-2.0", + "devDependencies": { + "@connectrpc/connect": "2.0.0-alpha.1", + "@connectrpc/connect-node": "2.0.0-alpha.1" + }, "engines": { "node": ">=16.0.0" }, @@ -11748,7 +9923,7 @@ "version": "2.0.0-alpha.1", "license": "Apache-2.0", "devDependencies": { - "@bufbuild/buf": "^1.36.0", + "@bufbuild/buf": "^1.39.0", "@bufbuild/protoc-gen-es": "^2.0.0", "@connectrpc/connect-conformance": "^2.0.0-alpha.1", "jasmine": "^5.2.0", @@ -11767,6 +9942,7 @@ "packages/connect-web-bench": { "name": "@connectrpc/connect-web-bench", "dependencies": { + "@bufbuild/buf": "^1.39.0", "@bufbuild/protobuf": "^2.0.0", "@bufbuild/protoc-gen-es": "^2.0.0", "@connectrpc/connect-web": "2.0.0-alpha.1", @@ -11777,812 +9953,27 @@ "grpc-web": "^1.5.0" } }, - "packages/connect-web-bench/node_modules/@esbuild/aix-ppc64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz", - "integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==", - "cpu": [ - "ppc64" - ], - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=12" - } - }, - "packages/connect-web-bench/node_modules/@esbuild/android-arm": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz", - "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "packages/connect-web-bench/node_modules/@esbuild/android-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz", - "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "packages/connect-web-bench/node_modules/@esbuild/android-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz", - "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "packages/connect-web-bench/node_modules/@esbuild/darwin-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz", - "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "darwin" - ], + "packages/example": { + "name": "@connectrpc/example", + "dependencies": { + "@bufbuild/protobuf": "^2.0.0", + "@connectrpc/connect-node": "^2.0.0-alpha.1", + "@connectrpc/connect-web": "^2.0.0-alpha.1", + "tsx": "^4.16.5" + }, + "devDependencies": { + "@bufbuild/buf": "^1.39.0", + "@bufbuild/protoc-gen-es": "^2.0.0", + "@types/express": "^4.17.18", + "esbuild": "^0.19.8", + "typescript": "^5.5.4" + }, "engines": { - "node": ">=12" + "node": ">=16" } }, - "packages/connect-web-bench/node_modules/@esbuild/darwin-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz", - "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "packages/connect-web-bench/node_modules/@esbuild/freebsd-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz", - "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "packages/connect-web-bench/node_modules/@esbuild/freebsd-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz", - "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "packages/connect-web-bench/node_modules/@esbuild/linux-arm": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz", - "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "packages/connect-web-bench/node_modules/@esbuild/linux-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz", - "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "packages/connect-web-bench/node_modules/@esbuild/linux-ia32": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz", - "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "packages/connect-web-bench/node_modules/@esbuild/linux-loong64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz", - "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==", - "cpu": [ - "loong64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "packages/connect-web-bench/node_modules/@esbuild/linux-mips64el": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz", - "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==", - "cpu": [ - "mips64el" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "packages/connect-web-bench/node_modules/@esbuild/linux-ppc64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz", - "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==", - "cpu": [ - "ppc64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "packages/connect-web-bench/node_modules/@esbuild/linux-riscv64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz", - "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==", - "cpu": [ - "riscv64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "packages/connect-web-bench/node_modules/@esbuild/linux-s390x": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz", - "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==", - "cpu": [ - "s390x" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "packages/connect-web-bench/node_modules/@esbuild/linux-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz", - "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "packages/connect-web-bench/node_modules/@esbuild/netbsd-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz", - "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "packages/connect-web-bench/node_modules/@esbuild/openbsd-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz", - "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "packages/connect-web-bench/node_modules/@esbuild/sunos-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz", - "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "packages/connect-web-bench/node_modules/@esbuild/win32-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz", - "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "packages/connect-web-bench/node_modules/@esbuild/win32-ia32": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz", - "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "packages/connect-web-bench/node_modules/@esbuild/win32-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz", - "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "packages/connect-web-bench/node_modules/esbuild": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz", - "integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==", - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.19.12", - "@esbuild/android-arm": "0.19.12", - "@esbuild/android-arm64": "0.19.12", - "@esbuild/android-x64": "0.19.12", - "@esbuild/darwin-arm64": "0.19.12", - "@esbuild/darwin-x64": "0.19.12", - "@esbuild/freebsd-arm64": "0.19.12", - "@esbuild/freebsd-x64": "0.19.12", - "@esbuild/linux-arm": "0.19.12", - "@esbuild/linux-arm64": "0.19.12", - "@esbuild/linux-ia32": "0.19.12", - "@esbuild/linux-loong64": "0.19.12", - "@esbuild/linux-mips64el": "0.19.12", - "@esbuild/linux-ppc64": "0.19.12", - "@esbuild/linux-riscv64": "0.19.12", - "@esbuild/linux-s390x": "0.19.12", - "@esbuild/linux-x64": "0.19.12", - "@esbuild/netbsd-x64": "0.19.12", - "@esbuild/openbsd-x64": "0.19.12", - "@esbuild/sunos-x64": "0.19.12", - "@esbuild/win32-arm64": "0.19.12", - "@esbuild/win32-ia32": "0.19.12", - "@esbuild/win32-x64": "0.19.12" - } - }, - "packages/example": { - "name": "@connectrpc/example", - "dependencies": { - "@bufbuild/protobuf": "^2.0.0", - "@connectrpc/connect-node": "^2.0.0-alpha.1", - "@connectrpc/connect-web": "^2.0.0-alpha.1", - "tsx": "^4.16.5" - }, - "devDependencies": { - "@bufbuild/buf": "^1.36.0", - "@bufbuild/protoc-gen-es": "^2.0.0", - "@types/express": "^4.17.18", - "esbuild": "^0.19.8", - "typescript": "^5.5.4" - }, - "engines": { - "node": ">=16" - } - }, - "packages/example/node_modules/@esbuild/aix-ppc64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz", - "integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=12" - } - }, - "packages/example/node_modules/@esbuild/android-arm": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz", - "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "packages/example/node_modules/@esbuild/android-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz", - "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "packages/example/node_modules/@esbuild/android-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz", - "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "packages/example/node_modules/@esbuild/darwin-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz", - "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "packages/example/node_modules/@esbuild/darwin-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz", - "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "packages/example/node_modules/@esbuild/freebsd-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz", - "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "packages/example/node_modules/@esbuild/freebsd-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz", - "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "packages/example/node_modules/@esbuild/linux-arm": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz", - "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "packages/example/node_modules/@esbuild/linux-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz", - "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "packages/example/node_modules/@esbuild/linux-ia32": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz", - "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "packages/example/node_modules/@esbuild/linux-loong64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz", - "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "packages/example/node_modules/@esbuild/linux-mips64el": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz", - "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "packages/example/node_modules/@esbuild/linux-ppc64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz", - "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "packages/example/node_modules/@esbuild/linux-riscv64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz", - "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "packages/example/node_modules/@esbuild/linux-s390x": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz", - "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "packages/example/node_modules/@esbuild/linux-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz", - "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "packages/example/node_modules/@esbuild/netbsd-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz", - "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "packages/example/node_modules/@esbuild/openbsd-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz", - "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "packages/example/node_modules/@esbuild/sunos-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz", - "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "packages/example/node_modules/@esbuild/win32-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz", - "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "packages/example/node_modules/@esbuild/win32-ia32": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz", - "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "packages/example/node_modules/@esbuild/win32-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz", - "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "packages/example/node_modules/esbuild": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz", - "integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==", - "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.19.12", - "@esbuild/android-arm": "0.19.12", - "@esbuild/android-arm64": "0.19.12", - "@esbuild/android-x64": "0.19.12", - "@esbuild/darwin-arm64": "0.19.12", - "@esbuild/darwin-x64": "0.19.12", - "@esbuild/freebsd-arm64": "0.19.12", - "@esbuild/freebsd-x64": "0.19.12", - "@esbuild/linux-arm": "0.19.12", - "@esbuild/linux-arm64": "0.19.12", - "@esbuild/linux-ia32": "0.19.12", - "@esbuild/linux-loong64": "0.19.12", - "@esbuild/linux-mips64el": "0.19.12", - "@esbuild/linux-ppc64": "0.19.12", - "@esbuild/linux-riscv64": "0.19.12", - "@esbuild/linux-s390x": "0.19.12", - "@esbuild/linux-x64": "0.19.12", - "@esbuild/netbsd-x64": "0.19.12", - "@esbuild/openbsd-x64": "0.19.12", - "@esbuild/sunos-x64": "0.19.12", - "@esbuild/win32-arm64": "0.19.12", - "@esbuild/win32-ia32": "0.19.12", - "@esbuild/win32-x64": "0.19.12" - } + "packages/protoc-gen-connect-es": { + "extraneous": true } } } diff --git a/package.json b/package.json index 96153e107..d99881895 100644 --- a/package.json +++ b/package.json @@ -1,25 +1,38 @@ { + "name": "connect-es", "private": true, "workspaces": [ - "./packages/connect", - "./packages/protoc-gen-connect-es", - "./packages/connect-web", - "./packages/connect-node", - "./packages/connect-fastify", - "./packages/connect-next", - "./packages/connect-express", - "./packages/connect-web-bench", - "./packages/example", - "./packages/connect-migrate", - "./packages/connect-conformance", - "./packages/connect-cloudflare" + "packages/connect", + "packages/protoc-gen-connect-es", + "packages/connect-web", + "packages/connect-node", + "packages/connect-fastify", + "packages/connect-next", + "packages/connect-express", + "packages/connect-web-bench", + "packages/example", + "packages/connect-migrate", + "packages/connect-conformance", + "packages/connect-cloudflare" ], + "scripts": { + "all": "turbo run --ui tui build format test conformance bundle-size lint attw license-header", + "clean": "git clean -Xdf", + "setversion": "node scripts/set-workspace-version.js", + "postsetversion": "npm run all", + "release": "node scripts/release.js", + "prerelease": "npm run all", + "format": "prettier --write --ignore-unknown '.' '!packages' '!.turbo' '!node_modules'", + "license-header": "license-header --ignore 'packages/**'", + "lint": "eslint --max-warnings 0 . --ignore-pattern 'packages/**'" + }, "type": "module", "engineStrict": true, "engines": { "node": ">=16", "npm": ">=8" }, + "packageManager": "npm@10.1.0", "licenseHeader": { "licenseType": "apache", "yearRange": "2021-2024", @@ -28,13 +41,14 @@ "devDependencies": { "@arethetypeswrong/cli": "^0.15.3", "@bufbuild/license-header": "^0.0.4", + "@typescript-eslint/eslint-plugin": "^7.14.0", "@typescript-eslint/parser": "^7.14.0", "eslint": "^8.56.0", - "@typescript-eslint/eslint-plugin": "^7.14.0", "eslint-import-resolver-typescript": "^3.6.1", - "eslint-plugin-n": "^17.10.1", "eslint-plugin-import": "^2.29.1", + "eslint-plugin-n": "^17.10.1", "prettier": "^3.3.3", + "turbo": "^2.1.0", "typescript": "5.5.4" } } diff --git a/packages/connect-cloudflare/README.md b/packages/connect-cloudflare/README.md index 3a9c18476..b18aca8ec 100644 --- a/packages/connect-cloudflare/README.md +++ b/packages/connect-cloudflare/README.md @@ -4,32 +4,31 @@ This package provides conformance test coverage for Connect-ES on Cloudflare for It uses the [conformance runner](https://github.com/connectrpc/conformance/releases) to run the tests. -Cloudflare worker tests are run once every 24 hours and on a release PR. This is because the tests are run on a live +Cloudflare worker tests are run once every 24 hours and on a release PR. This is because the tests are run on a live Cloudflare worker, and deploying a new version of the worker is a slow process. ## Running conformance tests -Run `make testcloudflareconformance` to run all Cloudflare conformance tests for both server and client. The above command -is also available as an npm script: `npm run conformance`. +Cloudflare conformance tests can be run with the tasks `conformance:client` and `conformance:server` for the package +`@connectrpc/connect-cloudflare`. You can run both with the following command: -The individual tests for server and client can also be run via npm: - -`npm run conformance:server` -`npm run conformance:client` +```bash +npx turbo run --filter @connectrpc/connect-cloudflare conformance:client conformance:server +``` ### Client tests on Cloudflare -Client tests on Cloudflare require a live server with valid TLS. To run the tests, we set up a -[self hosted GitHub action runner](https://docs.github.com/en/actions/hosting-your-own-runners/managing-self-hosted-runners/about-self-hosted-runners) +Client tests on Cloudflare require a live server with valid TLS. To run the tests, we set up a +[self hosted GitHub action runner](https://docs.github.com/en/actions/hosting-your-own-runners/managing-self-hosted-runners/about-self-hosted-runners) that runs the conformance runner and exposes the reference server on port 443 over the public internet. #### Steps to setup the action runner -* Provision a VM with a static public IP address. -* Reserve a domain (can be a subdomain) and point it to the public IP address from the previous step. -* Use [certbot](https://certbot.eff.org/) to setup automatic certificate renewal for the domain. -* Using iptables, redirect traffic from port 443 to a non-privileged port say 8181. -* Create a dedicated user to run the action runner. -* Make sure the user has the necessary permissions to run the conformance runner, read the cert and key that certbot maintains. -* Follow the steps [here](https://docs.github.com/en/actions/hosting-your-own-runners/managing-self-hosted-runners/adding-self-hosted-runners) to add a self-hosted runner to the repository. -* Configure the runner app to [run as a service](https://docs.github.com/en/actions/hosting-your-own-runners/managing-self-hosted-runners/configuring-the-self-hosted-runner-application-as-a-service) with the created user. +- Provision a VM with a static public IP address. +- Reserve a domain (can be a subdomain) and point it to the public IP address from the previous step. +- Use [certbot](https://certbot.eff.org/) to setup automatic certificate renewal for the domain. +- Using iptables, redirect traffic from port 443 to a non-privileged port say 8181. +- Create a dedicated user to run the action runner. +- Make sure the user has the necessary permissions to run the conformance runner, read the cert and key that certbot maintains. +- Follow the steps [here](https://docs.github.com/en/actions/hosting-your-own-runners/managing-self-hosted-runners/adding-self-hosted-runners) to add a self-hosted runner to the repository. +- Configure the runner app to [run as a service](https://docs.github.com/en/actions/hosting-your-own-runners/managing-self-hosted-runners/configuring-the-self-hosted-runner-application-as-a-service) with the created user. diff --git a/packages/connect-cloudflare/conformance/client.ts b/packages/connect-cloudflare/conformance/client.ts index 7017c6a7a..f30581a4b 100755 --- a/packages/connect-cloudflare/conformance/client.ts +++ b/packages/connect-cloudflare/conformance/client.ts @@ -1,5 +1,3 @@ -#!/usr/bin/env -S npx tsx - // Copyright 2021-2024 The Connect Authors // // Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/packages/connect-cloudflare/conformance/gen/connectrpc/conformance/v1/client_compat_pb.ts b/packages/connect-cloudflare/conformance/gen/connectrpc/conformance/v1/client_compat_pb.ts index 05834a748..a308b61c7 100644 --- a/packages/connect-cloudflare/conformance/gen/connectrpc/conformance/v1/client_compat_pb.ts +++ b/packages/connect-cloudflare/conformance/gen/connectrpc/conformance/v1/client_compat_pb.ts @@ -18,19 +18,45 @@ import type { GenFile, GenMessage } from "@bufbuild/protobuf/codegenv1"; import { fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv1"; -import type { Codec, Compression, HTTPVersion, Protocol, StreamType, TLSCreds } from "./config_pb.js"; +import type { + Codec, + Compression, + HTTPVersion, + Protocol, + StreamType, + TLSCreds, +} from "./config_pb.js"; import { file_connectrpc_conformance_v1_config } from "./config_pb.js"; -import type { ConformancePayload, Error, Header, RawHTTPRequest } from "./service_pb.js"; +import type { + ConformancePayload, + Error, + Header, + RawHTTPRequest, +} from "./service_pb.js"; import { file_connectrpc_conformance_v1_service } from "./service_pb.js"; import type { Any, Empty } from "@bufbuild/protobuf/wkt"; -import { file_google_protobuf_any, file_google_protobuf_empty, file_google_protobuf_struct } from "@bufbuild/protobuf/wkt"; +import { + file_google_protobuf_any, + file_google_protobuf_empty, + file_google_protobuf_struct, +} from "@bufbuild/protobuf/wkt"; import type { JsonObject, Message } from "@bufbuild/protobuf"; /** * Describes the file connectrpc/conformance/v1/client_compat.proto. */ -export const file_connectrpc_conformance_v1_client_compat: GenFile = /*@__PURE__*/ - fileDesc("Ci1jb25uZWN0cnBjL2NvbmZvcm1hbmNlL3YxL2NsaWVudF9jb21wYXQucHJvdG8SGWNvbm5lY3RycGMuY29uZm9ybWFuY2UudjEi/QcKE0NsaWVudENvbXBhdFJlcXVlc3QSEQoJdGVzdF9uYW1lGAEgASgJEjwKDGh0dHBfdmVyc2lvbhgCIAEoDjImLmNvbm5lY3RycGMuY29uZm9ybWFuY2UudjEuSFRUUFZlcnNpb24SNQoIcHJvdG9jb2wYAyABKA4yIy5jb25uZWN0cnBjLmNvbmZvcm1hbmNlLnYxLlByb3RvY29sEi8KBWNvZGVjGAQgASgOMiAuY29ubmVjdHJwYy5jb25mb3JtYW5jZS52MS5Db2RlYxI7Cgtjb21wcmVzc2lvbhgFIAEoDjImLmNvbm5lY3RycGMuY29uZm9ybWFuY2UudjEuQ29tcHJlc3Npb24SDAoEaG9zdBgGIAEoCRIMCgRwb3J0GAcgASgNEhcKD3NlcnZlcl90bHNfY2VydBgIIAEoDBI9ChBjbGllbnRfdGxzX2NyZWRzGAkgASgLMiMuY29ubmVjdHJwYy5jb25mb3JtYW5jZS52MS5UTFNDcmVkcxIdChVtZXNzYWdlX3JlY2VpdmVfbGltaXQYCiABKA0SFAoHc2VydmljZRgLIAEoCUgAiAEBEhMKBm1ldGhvZBgMIAEoCUgBiAEBEjoKC3N0cmVhbV90eXBlGA0gASgOMiUuY29ubmVjdHJwYy5jb25mb3JtYW5jZS52MS5TdHJlYW1UeXBlEhsKE3VzZV9nZXRfaHR0cF9tZXRob2QYDiABKAgSOgoPcmVxdWVzdF9oZWFkZXJzGA8gAygLMiEuY29ubmVjdHJwYy5jb25mb3JtYW5jZS52MS5IZWFkZXISLgoQcmVxdWVzdF9tZXNzYWdlcxgQIAMoCzIULmdvb2dsZS5wcm90b2J1Zi5BbnkSFwoKdGltZW91dF9tcxgRIAEoDUgCiAEBEhgKEHJlcXVlc3RfZGVsYXlfbXMYEiABKA0SRQoGY2FuY2VsGBMgASgLMjUuY29ubmVjdHJwYy5jb25mb3JtYW5jZS52MS5DbGllbnRDb21wYXRSZXF1ZXN0LkNhbmNlbBI+CgtyYXdfcmVxdWVzdBgUIAEoCzIpLmNvbm5lY3RycGMuY29uZm9ybWFuY2UudjEuUmF3SFRUUFJlcXVlc3QajAEKBkNhbmNlbBIzChFiZWZvcmVfY2xvc2Vfc2VuZBgBIAEoCzIWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eUgAEh0KE2FmdGVyX2Nsb3NlX3NlbmRfbXMYAiABKA1IABIdChNhZnRlcl9udW1fcmVzcG9uc2VzGAMgASgNSABCDwoNY2FuY2VsX3RpbWluZ0IKCghfc2VydmljZUIJCgdfbWV0aG9kQg0KC190aW1lb3V0X21zIrcBChRDbGllbnRDb21wYXRSZXNwb25zZRIRCgl0ZXN0X25hbWUYASABKAkSQwoIcmVzcG9uc2UYAiABKAsyLy5jb25uZWN0cnBjLmNvbmZvcm1hbmNlLnYxLkNsaWVudFJlc3BvbnNlUmVzdWx0SAASPQoFZXJyb3IYAyABKAsyLC5jb25uZWN0cnBjLmNvbmZvcm1hbmNlLnYxLkNsaWVudEVycm9yUmVzdWx0SABCCAoGcmVzdWx0IuYCChRDbGllbnRSZXNwb25zZVJlc3VsdBI7ChByZXNwb25zZV9oZWFkZXJzGAEgAygLMiEuY29ubmVjdHJwYy5jb25mb3JtYW5jZS52MS5IZWFkZXISPwoIcGF5bG9hZHMYAiADKAsyLS5jb25uZWN0cnBjLmNvbmZvcm1hbmNlLnYxLkNvbmZvcm1hbmNlUGF5bG9hZBIvCgVlcnJvchgDIAEoCzIgLmNvbm5lY3RycGMuY29uZm9ybWFuY2UudjEuRXJyb3ISPAoRcmVzcG9uc2VfdHJhaWxlcnMYBCADKAsyIS5jb25uZWN0cnBjLmNvbmZvcm1hbmNlLnYxLkhlYWRlchIbChNudW1fdW5zZW50X3JlcXVlc3RzGAUgASgFEh0KEGh0dHBfc3RhdHVzX2NvZGUYBiABKAVIAIgBARIQCghmZWVkYmFjaxgHIAMoCUITChFfaHR0cF9zdGF0dXNfY29kZSIkChFDbGllbnRFcnJvclJlc3VsdBIPCgdtZXNzYWdlGAEgASgJIuABCgtXaXJlRGV0YWlscxIaChJhY3R1YWxfc3RhdHVzX2NvZGUYASABKAUSMgoRY29ubmVjdF9lcnJvcl9yYXcYAiABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0Ej8KFGFjdHVhbF9odHRwX3RyYWlsZXJzGAMgAygLMiEuY29ubmVjdHJwYy5jb25mb3JtYW5jZS52MS5IZWFkZXISJAoXYWN0dWFsX2dycGN3ZWJfdHJhaWxlcnMYBCABKAlIAIgBAUIaChhfYWN0dWFsX2dycGN3ZWJfdHJhaWxlcnNiBnByb3RvMw", [file_connectrpc_conformance_v1_config, file_connectrpc_conformance_v1_service, file_google_protobuf_any, file_google_protobuf_empty, file_google_protobuf_struct]); +export const file_connectrpc_conformance_v1_client_compat: GenFile = + /*@__PURE__*/ + fileDesc( + "Ci1jb25uZWN0cnBjL2NvbmZvcm1hbmNlL3YxL2NsaWVudF9jb21wYXQucHJvdG8SGWNvbm5lY3RycGMuY29uZm9ybWFuY2UudjEi/QcKE0NsaWVudENvbXBhdFJlcXVlc3QSEQoJdGVzdF9uYW1lGAEgASgJEjwKDGh0dHBfdmVyc2lvbhgCIAEoDjImLmNvbm5lY3RycGMuY29uZm9ybWFuY2UudjEuSFRUUFZlcnNpb24SNQoIcHJvdG9jb2wYAyABKA4yIy5jb25uZWN0cnBjLmNvbmZvcm1hbmNlLnYxLlByb3RvY29sEi8KBWNvZGVjGAQgASgOMiAuY29ubmVjdHJwYy5jb25mb3JtYW5jZS52MS5Db2RlYxI7Cgtjb21wcmVzc2lvbhgFIAEoDjImLmNvbm5lY3RycGMuY29uZm9ybWFuY2UudjEuQ29tcHJlc3Npb24SDAoEaG9zdBgGIAEoCRIMCgRwb3J0GAcgASgNEhcKD3NlcnZlcl90bHNfY2VydBgIIAEoDBI9ChBjbGllbnRfdGxzX2NyZWRzGAkgASgLMiMuY29ubmVjdHJwYy5jb25mb3JtYW5jZS52MS5UTFNDcmVkcxIdChVtZXNzYWdlX3JlY2VpdmVfbGltaXQYCiABKA0SFAoHc2VydmljZRgLIAEoCUgAiAEBEhMKBm1ldGhvZBgMIAEoCUgBiAEBEjoKC3N0cmVhbV90eXBlGA0gASgOMiUuY29ubmVjdHJwYy5jb25mb3JtYW5jZS52MS5TdHJlYW1UeXBlEhsKE3VzZV9nZXRfaHR0cF9tZXRob2QYDiABKAgSOgoPcmVxdWVzdF9oZWFkZXJzGA8gAygLMiEuY29ubmVjdHJwYy5jb25mb3JtYW5jZS52MS5IZWFkZXISLgoQcmVxdWVzdF9tZXNzYWdlcxgQIAMoCzIULmdvb2dsZS5wcm90b2J1Zi5BbnkSFwoKdGltZW91dF9tcxgRIAEoDUgCiAEBEhgKEHJlcXVlc3RfZGVsYXlfbXMYEiABKA0SRQoGY2FuY2VsGBMgASgLMjUuY29ubmVjdHJwYy5jb25mb3JtYW5jZS52MS5DbGllbnRDb21wYXRSZXF1ZXN0LkNhbmNlbBI+CgtyYXdfcmVxdWVzdBgUIAEoCzIpLmNvbm5lY3RycGMuY29uZm9ybWFuY2UudjEuUmF3SFRUUFJlcXVlc3QajAEKBkNhbmNlbBIzChFiZWZvcmVfY2xvc2Vfc2VuZBgBIAEoCzIWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eUgAEh0KE2FmdGVyX2Nsb3NlX3NlbmRfbXMYAiABKA1IABIdChNhZnRlcl9udW1fcmVzcG9uc2VzGAMgASgNSABCDwoNY2FuY2VsX3RpbWluZ0IKCghfc2VydmljZUIJCgdfbWV0aG9kQg0KC190aW1lb3V0X21zIrcBChRDbGllbnRDb21wYXRSZXNwb25zZRIRCgl0ZXN0X25hbWUYASABKAkSQwoIcmVzcG9uc2UYAiABKAsyLy5jb25uZWN0cnBjLmNvbmZvcm1hbmNlLnYxLkNsaWVudFJlc3BvbnNlUmVzdWx0SAASPQoFZXJyb3IYAyABKAsyLC5jb25uZWN0cnBjLmNvbmZvcm1hbmNlLnYxLkNsaWVudEVycm9yUmVzdWx0SABCCAoGcmVzdWx0IuYCChRDbGllbnRSZXNwb25zZVJlc3VsdBI7ChByZXNwb25zZV9oZWFkZXJzGAEgAygLMiEuY29ubmVjdHJwYy5jb25mb3JtYW5jZS52MS5IZWFkZXISPwoIcGF5bG9hZHMYAiADKAsyLS5jb25uZWN0cnBjLmNvbmZvcm1hbmNlLnYxLkNvbmZvcm1hbmNlUGF5bG9hZBIvCgVlcnJvchgDIAEoCzIgLmNvbm5lY3RycGMuY29uZm9ybWFuY2UudjEuRXJyb3ISPAoRcmVzcG9uc2VfdHJhaWxlcnMYBCADKAsyIS5jb25uZWN0cnBjLmNvbmZvcm1hbmNlLnYxLkhlYWRlchIbChNudW1fdW5zZW50X3JlcXVlc3RzGAUgASgFEh0KEGh0dHBfc3RhdHVzX2NvZGUYBiABKAVIAIgBARIQCghmZWVkYmFjaxgHIAMoCUITChFfaHR0cF9zdGF0dXNfY29kZSIkChFDbGllbnRFcnJvclJlc3VsdBIPCgdtZXNzYWdlGAEgASgJIuABCgtXaXJlRGV0YWlscxIaChJhY3R1YWxfc3RhdHVzX2NvZGUYASABKAUSMgoRY29ubmVjdF9lcnJvcl9yYXcYAiABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0Ej8KFGFjdHVhbF9odHRwX3RyYWlsZXJzGAMgAygLMiEuY29ubmVjdHJwYy5jb25mb3JtYW5jZS52MS5IZWFkZXISJAoXYWN0dWFsX2dycGN3ZWJfdHJhaWxlcnMYBCABKAlIAIgBAUIaChhfYWN0dWFsX2dycGN3ZWJfdHJhaWxlcnNiBnByb3RvMw", + [ + file_connectrpc_conformance_v1_config, + file_connectrpc_conformance_v1_service, + file_google_protobuf_any, + file_google_protobuf_empty, + file_google_protobuf_struct, + ], + ); /** * Describes one call the client should make. The client reads @@ -40,265 +66,273 @@ export const file_connectrpc_conformance_v1_client_compat: GenFile = /*@__PURE__ * * @generated from message connectrpc.conformance.v1.ClientCompatRequest */ -export type ClientCompatRequest = Message<"connectrpc.conformance.v1.ClientCompatRequest"> & { - /** - * The name of the test that this request is performing. - * When writing test cases, this is a required field. - * - * @generated from field: string test_name = 1; - */ - testName: string; +export type ClientCompatRequest = + Message<"connectrpc.conformance.v1.ClientCompatRequest"> & { + /** + * The name of the test that this request is performing. + * When writing test cases, this is a required field. + * + * @generated from field: string test_name = 1; + */ + testName: string; - /** - * Test suite YAML definitions should NOT set values for these next - * nine fields (fields 2 - 10). They are automatically populated by the test - * runner. If a test is specific to one of these values, it should instead be - * indicated in the test suite itself (where it defines the required - * features and relevant values for these fields). - * - * The HTTP version to use for the test (i.e. HTTP/1.1, HTTP/2, HTTP/3). - * - * @generated from field: connectrpc.conformance.v1.HTTPVersion http_version = 2; - */ - httpVersion: HTTPVersion; + /** + * Test suite YAML definitions should NOT set values for these next + * nine fields (fields 2 - 10). They are automatically populated by the test + * runner. If a test is specific to one of these values, it should instead be + * indicated in the test suite itself (where it defines the required + * features and relevant values for these fields). + * + * The HTTP version to use for the test (i.e. HTTP/1.1, HTTP/2, HTTP/3). + * + * @generated from field: connectrpc.conformance.v1.HTTPVersion http_version = 2; + */ + httpVersion: HTTPVersion; - /** - * The protocol to use for the test (i.e. Connect, gRPC, gRPC-web). - * - * @generated from field: connectrpc.conformance.v1.Protocol protocol = 3; - */ - protocol: Protocol; + /** + * The protocol to use for the test (i.e. Connect, gRPC, gRPC-web). + * + * @generated from field: connectrpc.conformance.v1.Protocol protocol = 3; + */ + protocol: Protocol; - /** - * The codec to use for the test (i.e. JSON, proto/binary). - * - * @generated from field: connectrpc.conformance.v1.Codec codec = 4; - */ - codec: Codec; + /** + * The codec to use for the test (i.e. JSON, proto/binary). + * + * @generated from field: connectrpc.conformance.v1.Codec codec = 4; + */ + codec: Codec; - /** - * The compression to use for the test (i.e. brotli, gzip, identity). - * - * @generated from field: connectrpc.conformance.v1.Compression compression = 5; - */ - compression: Compression; + /** + * The compression to use for the test (i.e. brotli, gzip, identity). + * + * @generated from field: connectrpc.conformance.v1.Compression compression = 5; + */ + compression: Compression; - /** - * The server host that this request will be sent to. - * - * @generated from field: string host = 6; - */ - host: string; + /** + * The server host that this request will be sent to. + * + * @generated from field: string host = 6; + */ + host: string; - /** - * The server port that this request will be sent to. - * - * @generated from field: uint32 port = 7; - */ - port: number; + /** + * The server port that this request will be sent to. + * + * @generated from field: uint32 port = 7; + */ + port: number; - /** - * If non-empty, the server is using TLS. The bytes are the - * server's PEM-encoded certificate, which the client should - * verify and trust. - * - * @generated from field: bytes server_tls_cert = 8; - */ - serverTlsCert: Uint8Array; + /** + * If non-empty, the server is using TLS. The bytes are the + * server's PEM-encoded certificate, which the client should + * verify and trust. + * + * @generated from field: bytes server_tls_cert = 8; + */ + serverTlsCert: Uint8Array; - /** - * If present, the client certificate credentials to use to - * authenticate with the server. This will only be present - * when server_tls_cert is non-empty. - * - * @generated from field: connectrpc.conformance.v1.TLSCreds client_tls_creds = 9; - */ - clientTlsCreds?: TLSCreds; + /** + * If present, the client certificate credentials to use to + * authenticate with the server. This will only be present + * when server_tls_cert is non-empty. + * + * @generated from field: connectrpc.conformance.v1.TLSCreds client_tls_creds = 9; + */ + clientTlsCreds?: TLSCreds; - /** - * If non-zero, indicates the maximum size in bytes for a message. - * If the server sends anything larger, the client should reject it. - * - * @generated from field: uint32 message_receive_limit = 10; - */ - messageReceiveLimit: number; + /** + * If non-zero, indicates the maximum size in bytes for a message. + * If the server sends anything larger, the client should reject it. + * + * @generated from field: uint32 message_receive_limit = 10; + */ + messageReceiveLimit: number; - /** - * The fully-qualified name of the service this test will interact with. - * If specified, method must also be specified. - * If not specified, defaults to "connectrpc.conformance.v1.ConformanceService". - * - * @generated from field: optional string service = 11; - */ - service?: string; + /** + * The fully-qualified name of the service this test will interact with. + * If specified, method must also be specified. + * If not specified, defaults to "connectrpc.conformance.v1.ConformanceService". + * + * @generated from field: optional string service = 11; + */ + service?: string; - /** - * The method on `service` that will be called. - * If specified, service must also be specified. - * If not specified, the test runner will auto-populate this field based on the stream_type. - * - * @generated from field: optional string method = 12; - */ - method?: string; + /** + * The method on `service` that will be called. + * If specified, service must also be specified. + * If not specified, the test runner will auto-populate this field based on the stream_type. + * + * @generated from field: optional string method = 12; + */ + method?: string; - /** - * The stream type of `method` (i.e. unary, client stream, server stream, full-duplex bidi - * stream, or half-duplex bidi stream). - * When writing test cases, this is a required field. - * - * @generated from field: connectrpc.conformance.v1.StreamType stream_type = 13; - */ - streamType: StreamType; + /** + * The stream type of `method` (i.e. unary, client stream, server stream, full-duplex bidi + * stream, or half-duplex bidi stream). + * When writing test cases, this is a required field. + * + * @generated from field: connectrpc.conformance.v1.StreamType stream_type = 13; + */ + streamType: StreamType; - /** - * If protocol indicates Connect and stream type indicates - * Unary, this instructs the client to use a GET HTTP method - * when making the request. - * - * @generated from field: bool use_get_http_method = 14; - */ - useGetHttpMethod: boolean; + /** + * If protocol indicates Connect and stream type indicates + * Unary, this instructs the client to use a GET HTTP method + * when making the request. + * + * @generated from field: bool use_get_http_method = 14; + */ + useGetHttpMethod: boolean; - /** - * Any request headers that should be sent as part of the request. - * These include only custom header metadata. Headers that are - * part of the relevant protocol (such as "content-type", etc) should - * not be stated here. - * - * @generated from field: repeated connectrpc.conformance.v1.Header request_headers = 15; - */ - requestHeaders: Header[]; + /** + * Any request headers that should be sent as part of the request. + * These include only custom header metadata. Headers that are + * part of the relevant protocol (such as "content-type", etc) should + * not be stated here. + * + * @generated from field: repeated connectrpc.conformance.v1.Header request_headers = 15; + */ + requestHeaders: Header[]; - /** - * The actual request messages that will sent to the server. - * The type URL for all entries should be equal to the request type of the - * method. - * There must be exactly one for unary and server stream methods but - * can be zero or more for client and bidi stream methods. - * For client and bidi stream methods, all entries will have the - * same type URL. - * - * @generated from field: repeated google.protobuf.Any request_messages = 16; - */ - requestMessages: Any[]; + /** + * The actual request messages that will sent to the server. + * The type URL for all entries should be equal to the request type of the + * method. + * There must be exactly one for unary and server stream methods but + * can be zero or more for client and bidi stream methods. + * For client and bidi stream methods, all entries will have the + * same type URL. + * + * @generated from field: repeated google.protobuf.Any request_messages = 16; + */ + requestMessages: Any[]; - /** - * The timeout, in milliseconds, for the request. This is equivalent to a - * deadline for the request. If unset, there will be no timeout. - * - * @generated from field: optional uint32 timeout_ms = 17; - */ - timeoutMs?: number; + /** + * The timeout, in milliseconds, for the request. This is equivalent to a + * deadline for the request. If unset, there will be no timeout. + * + * @generated from field: optional uint32 timeout_ms = 17; + */ + timeoutMs?: number; - /** - * Wait this many milliseconds before sending a request message. - * For client or bidi stream methods, this delay should be - * applied before each request sent. - * - * @generated from field: uint32 request_delay_ms = 18; - */ - requestDelayMs: number; + /** + * Wait this many milliseconds before sending a request message. + * For client or bidi stream methods, this delay should be + * applied before each request sent. + * + * @generated from field: uint32 request_delay_ms = 18; + */ + requestDelayMs: number; - /** - * If present, the client should cancel the RPC instead of - * allowing to complete normally. - * - * @generated from field: connectrpc.conformance.v1.ClientCompatRequest.Cancel cancel = 19; - */ - cancel?: ClientCompatRequest_Cancel; + /** + * If present, the client should cancel the RPC instead of + * allowing to complete normally. + * + * @generated from field: connectrpc.conformance.v1.ClientCompatRequest.Cancel cancel = 19; + */ + cancel?: ClientCompatRequest_Cancel; - /** - * The following field is only used by the reference client. If - * you are implementing a client under test, you may ignore it - * or respond with an error if the client receives a request where - * it is set. - * - * When this field is present, it defines the actual HTTP request - * that will be sent. The above group of fields must still be - * provided and valid so that the reference client knows how it - * should try to interpret the server's response. - * - * @generated from field: connectrpc.conformance.v1.RawHTTPRequest raw_request = 20; - */ - rawRequest?: RawHTTPRequest; -}; + /** + * The following field is only used by the reference client. If + * you are implementing a client under test, you may ignore it + * or respond with an error if the client receives a request where + * it is set. + * + * When this field is present, it defines the actual HTTP request + * that will be sent. The above group of fields must still be + * provided and valid so that the reference client knows how it + * should try to interpret the server's response. + * + * @generated from field: connectrpc.conformance.v1.RawHTTPRequest raw_request = 20; + */ + rawRequest?: RawHTTPRequest; + }; /** * Describes the message connectrpc.conformance.v1.ClientCompatRequest. * Use `create(ClientCompatRequestSchema)` to create a new message. */ -export const ClientCompatRequestSchema: GenMessage = /*@__PURE__*/ +export const ClientCompatRequestSchema: GenMessage = + /*@__PURE__*/ messageDesc(file_connectrpc_conformance_v1_client_compat, 0); /** * @generated from message connectrpc.conformance.v1.ClientCompatRequest.Cancel */ -export type ClientCompatRequest_Cancel = Message<"connectrpc.conformance.v1.ClientCompatRequest.Cancel"> & { - /** - * These fields determine the timing of cancellation. - * If none are present, the client should cancel immediately - * after all request messages are sent and the send side is - * closed (as if the after_close_send_ms field were present - * and zero). - * - * @generated from oneof connectrpc.conformance.v1.ClientCompatRequest.Cancel.cancel_timing - */ - cancelTiming: { - /** - * When present, the client should cancel *instead of* - * closing the send side of the stream, after all requests - * have been sent. - * - * This applies only to client and bidi stream RPCs. - * - * @generated from field: google.protobuf.Empty before_close_send = 1; - */ - value: Empty; - case: "beforeCloseSend"; - } | { +export type ClientCompatRequest_Cancel = + Message<"connectrpc.conformance.v1.ClientCompatRequest.Cancel"> & { /** - * When present, the client should delay for this many - * milliseconds after closing the send side of the stream - * and then cancel. - * - * This applies to all types of RPCs. + * These fields determine the timing of cancellation. + * If none are present, the client should cancel immediately + * after all request messages are sent and the send side is + * closed (as if the after_close_send_ms field were present + * and zero). * - * For unary and server stream RPCs, where the API usually - * does not allow explicitly closing the send side, the - * cancellation should be done immediately after invoking - * the RPC (which should implicitly send the one-and-only - * request and then close the send-side). - * - * For APIs where unary RPCs block until the response - * is received, there is no point after the request is - * sent but before a response is received to cancel. So - * the client must arrange for the RPC to be canceled - * asynchronously before invoking the blocking unary call. - * - * @generated from field: uint32 after_close_send_ms = 2; + * @generated from oneof connectrpc.conformance.v1.ClientCompatRequest.Cancel.cancel_timing */ - value: number; - case: "afterCloseSendMs"; - } | { - /** - * When present, the client should cancel right after - * reading this number of response messages from the stream. - * When present, this will be greater than zero. - * - * This applies only to server and bidi stream RPCs. - * - * @generated from field: uint32 after_num_responses = 3; - */ - value: number; - case: "afterNumResponses"; - } | { case: undefined; value?: undefined }; -}; + cancelTiming: + | { + /** + * When present, the client should cancel *instead of* + * closing the send side of the stream, after all requests + * have been sent. + * + * This applies only to client and bidi stream RPCs. + * + * @generated from field: google.protobuf.Empty before_close_send = 1; + */ + value: Empty; + case: "beforeCloseSend"; + } + | { + /** + * When present, the client should delay for this many + * milliseconds after closing the send side of the stream + * and then cancel. + * + * This applies to all types of RPCs. + * + * For unary and server stream RPCs, where the API usually + * does not allow explicitly closing the send side, the + * cancellation should be done immediately after invoking + * the RPC (which should implicitly send the one-and-only + * request and then close the send-side). + * + * For APIs where unary RPCs block until the response + * is received, there is no point after the request is + * sent but before a response is received to cancel. So + * the client must arrange for the RPC to be canceled + * asynchronously before invoking the blocking unary call. + * + * @generated from field: uint32 after_close_send_ms = 2; + */ + value: number; + case: "afterCloseSendMs"; + } + | { + /** + * When present, the client should cancel right after + * reading this number of response messages from the stream. + * When present, this will be greater than zero. + * + * This applies only to server and bidi stream RPCs. + * + * @generated from field: uint32 after_num_responses = 3; + */ + value: number; + case: "afterNumResponses"; + } + | { case: undefined; value?: undefined }; + }; /** * Describes the message connectrpc.conformance.v1.ClientCompatRequest.Cancel. * Use `create(ClientCompatRequest_CancelSchema)` to create a new message. */ -export const ClientCompatRequest_CancelSchema: GenMessage = /*@__PURE__*/ +export const ClientCompatRequest_CancelSchema: GenMessage = + /*@__PURE__*/ messageDesc(file_connectrpc_conformance_v1_client_compat, 0, 0); /** @@ -306,47 +340,52 @@ export const ClientCompatRequest_CancelSchema: GenMessage & { - /** - * The test name that this response applies to. - * - * @generated from field: string test_name = 1; - */ - testName: string; - - /** - * These fields determine the outcome of the request. - * - * With regards to errors, any unexpected errors that prevent the client from - * issuing the RPC and following the instructions implied by the request can - * be reported as an error. These would be errors creating an RPC client from - * the request parameters or unsupported/illegal values in the request - * (e.g. a unary request that defines zero or multiple request messages). - * - * However, once the RPC is issued, any resulting error should instead be encoded in response. - * - * @generated from oneof connectrpc.conformance.v1.ClientCompatResponse.result - */ - result: { +export type ClientCompatResponse = + Message<"connectrpc.conformance.v1.ClientCompatResponse"> & { /** - * @generated from field: connectrpc.conformance.v1.ClientResponseResult response = 2; + * The test name that this response applies to. + * + * @generated from field: string test_name = 1; */ - value: ClientResponseResult; - case: "response"; - } | { + testName: string; + /** - * @generated from field: connectrpc.conformance.v1.ClientErrorResult error = 3; + * These fields determine the outcome of the request. + * + * With regards to errors, any unexpected errors that prevent the client from + * issuing the RPC and following the instructions implied by the request can + * be reported as an error. These would be errors creating an RPC client from + * the request parameters or unsupported/illegal values in the request + * (e.g. a unary request that defines zero or multiple request messages). + * + * However, once the RPC is issued, any resulting error should instead be encoded in response. + * + * @generated from oneof connectrpc.conformance.v1.ClientCompatResponse.result */ - value: ClientErrorResult; - case: "error"; - } | { case: undefined; value?: undefined }; -}; + result: + | { + /** + * @generated from field: connectrpc.conformance.v1.ClientResponseResult response = 2; + */ + value: ClientResponseResult; + case: "response"; + } + | { + /** + * @generated from field: connectrpc.conformance.v1.ClientErrorResult error = 3; + */ + value: ClientErrorResult; + case: "error"; + } + | { case: undefined; value?: undefined }; + }; /** * Describes the message connectrpc.conformance.v1.ClientCompatResponse. * Use `create(ClientCompatResponseSchema)` to create a new message. */ -export const ClientCompatResponseSchema: GenMessage = /*@__PURE__*/ +export const ClientCompatResponseSchema: GenMessage = + /*@__PURE__*/ messageDesc(file_connectrpc_conformance_v1_client_compat, 1); /** @@ -355,76 +394,78 @@ export const ClientCompatResponseSchema: GenMessage = /*@_ * * @generated from message connectrpc.conformance.v1.ClientResponseResult */ -export type ClientResponseResult = Message<"connectrpc.conformance.v1.ClientResponseResult"> & { - /** - * All response headers read from the response. - * - * @generated from field: repeated connectrpc.conformance.v1.Header response_headers = 1; - */ - responseHeaders: Header[]; +export type ClientResponseResult = + Message<"connectrpc.conformance.v1.ClientResponseResult"> & { + /** + * All response headers read from the response. + * + * @generated from field: repeated connectrpc.conformance.v1.Header response_headers = 1; + */ + responseHeaders: Header[]; - /** - * Servers should echo back payloads that they received as part of the request. - * This field should contain all the payloads the server echoed back. Note that - * There will be zero-to-one for unary and client stream methods and - * zero-to-many for server and bidi stream methods. - * - * @generated from field: repeated connectrpc.conformance.v1.ConformancePayload payloads = 2; - */ - payloads: ConformancePayload[]; + /** + * Servers should echo back payloads that they received as part of the request. + * This field should contain all the payloads the server echoed back. Note that + * There will be zero-to-one for unary and client stream methods and + * zero-to-many for server and bidi stream methods. + * + * @generated from field: repeated connectrpc.conformance.v1.ConformancePayload payloads = 2; + */ + payloads: ConformancePayload[]; - /** - * The error received from the actual RPC invocation. Note this is not representative - * of a runtime error and should always be the proto equivalent of a Connect - * or gRPC error. - * - * @generated from field: connectrpc.conformance.v1.Error error = 3; - */ - error?: Error; + /** + * The error received from the actual RPC invocation. Note this is not representative + * of a runtime error and should always be the proto equivalent of a Connect + * or gRPC error. + * + * @generated from field: connectrpc.conformance.v1.Error error = 3; + */ + error?: Error; - /** - * All response headers read from the response. - * - * @generated from field: repeated connectrpc.conformance.v1.Header response_trailers = 4; - */ - responseTrailers: Header[]; + /** + * All response headers read from the response. + * + * @generated from field: repeated connectrpc.conformance.v1.Header response_trailers = 4; + */ + responseTrailers: Header[]; - /** - * The number of messages that were present in the request but that could not be - * sent because an error occurred before finishing the upload. - * - * @generated from field: int32 num_unsent_requests = 5; - */ - numUnsentRequests: number; + /** + * The number of messages that were present in the request but that could not be + * sent because an error occurred before finishing the upload. + * + * @generated from field: int32 num_unsent_requests = 5; + */ + numUnsentRequests: number; - /** - * The following field is only set by the reference client. It communicates - * the underlying HTTP status code of the server's response. - * If you are implementing a client-under-test, you should ignore this field - * and leave it unset. - * - * @generated from field: optional int32 http_status_code = 6; - */ - httpStatusCode?: number; + /** + * The following field is only set by the reference client. It communicates + * the underlying HTTP status code of the server's response. + * If you are implementing a client-under-test, you should ignore this field + * and leave it unset. + * + * @generated from field: optional int32 http_status_code = 6; + */ + httpStatusCode?: number; - /** - * This field is used only by the reference client, and it can be used - * to provide additional feedback about problems observed in the server - * response or in client processing of the response. If non-empty, the test - * case is considered failed even if the result above matches all expectations. - * If you are implementing a client-under-test, you should ignore this field - * and leave it unset. - * - * @generated from field: repeated string feedback = 7; - */ - feedback: string[]; -}; + /** + * This field is used only by the reference client, and it can be used + * to provide additional feedback about problems observed in the server + * response or in client processing of the response. If non-empty, the test + * case is considered failed even if the result above matches all expectations. + * If you are implementing a client-under-test, you should ignore this field + * and leave it unset. + * + * @generated from field: repeated string feedback = 7; + */ + feedback: string[]; + }; /** * Describes the message connectrpc.conformance.v1.ClientResponseResult. * Use `create(ClientResponseResultSchema)` to create a new message. */ -export const ClientResponseResultSchema: GenMessage = /*@__PURE__*/ +export const ClientResponseResultSchema: GenMessage = + /*@__PURE__*/ messageDesc(file_connectrpc_conformance_v1_client_compat, 2); /** @@ -434,22 +475,24 @@ export const ClientResponseResultSchema: GenMessage = /*@_ * * @generated from message connectrpc.conformance.v1.ClientErrorResult */ -export type ClientErrorResult = Message<"connectrpc.conformance.v1.ClientErrorResult"> & { - /** - * A message describing the error that occurred. This string will be shown to - * users running conformance tests so it should include any relevant details - * that may help troubleshoot or remedy the error. - * - * @generated from field: string message = 1; - */ - message: string; -}; +export type ClientErrorResult = + Message<"connectrpc.conformance.v1.ClientErrorResult"> & { + /** + * A message describing the error that occurred. This string will be shown to + * users running conformance tests so it should include any relevant details + * that may help troubleshoot or remedy the error. + * + * @generated from field: string message = 1; + */ + message: string; + }; /** * Describes the message connectrpc.conformance.v1.ClientErrorResult. * Use `create(ClientErrorResultSchema)` to create a new message. */ -export const ClientErrorResultSchema: GenMessage = /*@__PURE__*/ +export const ClientErrorResultSchema: GenMessage = + /*@__PURE__*/ messageDesc(file_connectrpc_conformance_v1_client_compat, 3); /** @@ -502,6 +545,6 @@ export type WireDetails = Message<"connectrpc.conformance.v1.WireDetails"> & { * Describes the message connectrpc.conformance.v1.WireDetails. * Use `create(WireDetailsSchema)` to create a new message. */ -export const WireDetailsSchema: GenMessage = /*@__PURE__*/ +export const WireDetailsSchema: GenMessage = + /*@__PURE__*/ messageDesc(file_connectrpc_conformance_v1_client_compat, 4); - diff --git a/packages/connect-cloudflare/conformance/gen/connectrpc/conformance/v1/config_pb.ts b/packages/connect-cloudflare/conformance/gen/connectrpc/conformance/v1/config_pb.ts index 265bb4d7d..eaee74b6c 100644 --- a/packages/connect-cloudflare/conformance/gen/connectrpc/conformance/v1/config_pb.ts +++ b/packages/connect-cloudflare/conformance/gen/connectrpc/conformance/v1/config_pb.ts @@ -16,15 +16,22 @@ // @generated from file connectrpc/conformance/v1/config.proto (package connectrpc.conformance.v1, syntax proto3) /* eslint-disable */ -import type { GenEnum, GenFile, GenMessage } from "@bufbuild/protobuf/codegenv1"; +import type { + GenEnum, + GenFile, + GenMessage, +} from "@bufbuild/protobuf/codegenv1"; import { enumDesc, fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv1"; import type { Message } from "@bufbuild/protobuf"; /** * Describes the file connectrpc/conformance/v1/config.proto. */ -export const file_connectrpc_conformance_v1_config: GenFile = /*@__PURE__*/ - fileDesc("CiZjb25uZWN0cnBjL2NvbmZvcm1hbmNlL3YxL2NvbmZpZy5wcm90bxIZY29ubmVjdHJwYy5jb25mb3JtYW5jZS52MSK7AQoGQ29uZmlnEjUKCGZlYXR1cmVzGAEgASgLMiMuY29ubmVjdHJwYy5jb25mb3JtYW5jZS52MS5GZWF0dXJlcxI8Cg1pbmNsdWRlX2Nhc2VzGAIgAygLMiUuY29ubmVjdHJwYy5jb25mb3JtYW5jZS52MS5Db25maWdDYXNlEjwKDWV4Y2x1ZGVfY2FzZXMYAyADKAsyJS5jb25uZWN0cnBjLmNvbmZvcm1hbmNlLnYxLkNvbmZpZ0Nhc2Ui5QUKCEZlYXR1cmVzEjgKCHZlcnNpb25zGAEgAygOMiYuY29ubmVjdHJwYy5jb25mb3JtYW5jZS52MS5IVFRQVmVyc2lvbhI2Cglwcm90b2NvbHMYAiADKA4yIy5jb25uZWN0cnBjLmNvbmZvcm1hbmNlLnYxLlByb3RvY29sEjAKBmNvZGVjcxgDIAMoDjIgLmNvbm5lY3RycGMuY29uZm9ybWFuY2UudjEuQ29kZWMSPAoMY29tcHJlc3Npb25zGAQgAygOMiYuY29ubmVjdHJwYy5jb25mb3JtYW5jZS52MS5Db21wcmVzc2lvbhI7CgxzdHJlYW1fdHlwZXMYBSADKA4yJS5jb25uZWN0cnBjLmNvbmZvcm1hbmNlLnYxLlN0cmVhbVR5cGUSGQoMc3VwcG9ydHNfaDJjGAYgASgISACIAQESGQoMc3VwcG9ydHNfdGxzGAcgASgISAGIAQESJgoZc3VwcG9ydHNfdGxzX2NsaWVudF9jZXJ0cxgIIAEoCEgCiAEBEh4KEXN1cHBvcnRzX3RyYWlsZXJzGAkgASgISAOIAQESMQokc3VwcG9ydHNfaGFsZl9kdXBsZXhfYmlkaV9vdmVyX2h0dHAxGAogASgISASIAQESIQoUc3VwcG9ydHNfY29ubmVjdF9nZXQYCyABKAhIBYgBARIrCh5zdXBwb3J0c19tZXNzYWdlX3JlY2VpdmVfbGltaXQYDCABKAhIBogBAUIPCg1fc3VwcG9ydHNfaDJjQg8KDV9zdXBwb3J0c190bHNCHAoaX3N1cHBvcnRzX3Rsc19jbGllbnRfY2VydHNCFAoSX3N1cHBvcnRzX3RyYWlsZXJzQicKJV9zdXBwb3J0c19oYWxmX2R1cGxleF9iaWRpX292ZXJfaHR0cDFCFwoVX3N1cHBvcnRzX2Nvbm5lY3RfZ2V0QiEKH19zdXBwb3J0c19tZXNzYWdlX3JlY2VpdmVfbGltaXQiygMKCkNvbmZpZ0Nhc2USNwoHdmVyc2lvbhgBIAEoDjImLmNvbm5lY3RycGMuY29uZm9ybWFuY2UudjEuSFRUUFZlcnNpb24SNQoIcHJvdG9jb2wYAiABKA4yIy5jb25uZWN0cnBjLmNvbmZvcm1hbmNlLnYxLlByb3RvY29sEi8KBWNvZGVjGAMgASgOMiAuY29ubmVjdHJwYy5jb25mb3JtYW5jZS52MS5Db2RlYxI7Cgtjb21wcmVzc2lvbhgEIAEoDjImLmNvbm5lY3RycGMuY29uZm9ybWFuY2UudjEuQ29tcHJlc3Npb24SOgoLc3RyZWFtX3R5cGUYBSABKA4yJS5jb25uZWN0cnBjLmNvbmZvcm1hbmNlLnYxLlN0cmVhbVR5cGUSFAoHdXNlX3RscxgGIAEoCEgAiAEBEiEKFHVzZV90bHNfY2xpZW50X2NlcnRzGAcgASgISAGIAQESJgoZdXNlX21lc3NhZ2VfcmVjZWl2ZV9saW1pdBgIIAEoCEgCiAEBQgoKCF91c2VfdGxzQhcKFV91c2VfdGxzX2NsaWVudF9jZXJ0c0IcChpfdXNlX21lc3NhZ2VfcmVjZWl2ZV9saW1pdCIlCghUTFNDcmVkcxIMCgRjZXJ0GAEgASgMEgsKA2tleRgCIAEoDCpnCgtIVFRQVmVyc2lvbhIcChhIVFRQX1ZFUlNJT05fVU5TUEVDSUZJRUQQABISCg5IVFRQX1ZFUlNJT05fMRABEhIKDkhUVFBfVkVSU0lPTl8yEAISEgoOSFRUUF9WRVJTSU9OXzMQAypkCghQcm90b2NvbBIYChRQUk9UT0NPTF9VTlNQRUNJRklFRBAAEhQKEFBST1RPQ09MX0NPTk5FQ1QQARIRCg1QUk9UT0NPTF9HUlBDEAISFQoRUFJPVE9DT0xfR1JQQ19XRUIQAypTCgVDb2RlYxIVChFDT0RFQ19VTlNQRUNJRklFRBAAEg8KC0NPREVDX1BST1RPEAESDgoKQ09ERUNfSlNPThACEhIKCkNPREVDX1RFWFQQAxoCCAEqtQEKC0NvbXByZXNzaW9uEhsKF0NPTVBSRVNTSU9OX1VOU1BFQ0lGSUVEEAASGAoUQ09NUFJFU1NJT05fSURFTlRJVFkQARIUChBDT01QUkVTU0lPTl9HWklQEAISEgoOQ09NUFJFU1NJT05fQlIQAxIUChBDT01QUkVTU0lPTl9aU1REEAQSFwoTQ09NUFJFU1NJT05fREVGTEFURRAFEhYKEkNPTVBSRVNTSU9OX1NOQVBQWRAGKtABCgpTdHJlYW1UeXBlEhsKF1NUUkVBTV9UWVBFX1VOU1BFQ0lGSUVEEAASFQoRU1RSRUFNX1RZUEVfVU5BUlkQARIdChlTVFJFQU1fVFlQRV9DTElFTlRfU1RSRUFNEAISHQoZU1RSRUFNX1RZUEVfU0VSVkVSX1NUUkVBTRADEicKI1NUUkVBTV9UWVBFX0hBTEZfRFVQTEVYX0JJRElfU1RSRUFNEAQSJwojU1RSRUFNX1RZUEVfRlVMTF9EVVBMRVhfQklESV9TVFJFQU0QBSqUAwoEQ29kZRIUChBDT0RFX1VOU1BFQ0lGSUVEEAASEQoNQ09ERV9DQU5DRUxFRBABEhAKDENPREVfVU5LTk9XThACEhkKFUNPREVfSU5WQUxJRF9BUkdVTUVOVBADEhoKFkNPREVfREVBRExJTkVfRVhDRUVERUQQBBISCg5DT0RFX05PVF9GT1VORBAFEhcKE0NPREVfQUxSRUFEWV9FWElTVFMQBhIaChZDT0RFX1BFUk1JU1NJT05fREVOSUVEEAcSGwoXQ09ERV9SRVNPVVJDRV9FWEhBVVNURUQQCBIcChhDT0RFX0ZBSUxFRF9QUkVDT05ESVRJT04QCRIQCgxDT0RFX0FCT1JURUQQChIVChFDT0RFX09VVF9PRl9SQU5HRRALEhYKEkNPREVfVU5JTVBMRU1FTlRFRBAMEhEKDUNPREVfSU5URVJOQUwQDRIUChBDT0RFX1VOQVZBSUxBQkxFEA4SEgoOQ09ERV9EQVRBX0xPU1MQDxIYChRDT0RFX1VOQVVUSEVOVElDQVRFRBAQYgZwcm90bzM"); +export const file_connectrpc_conformance_v1_config: GenFile = + /*@__PURE__*/ + fileDesc( + "CiZjb25uZWN0cnBjL2NvbmZvcm1hbmNlL3YxL2NvbmZpZy5wcm90bxIZY29ubmVjdHJwYy5jb25mb3JtYW5jZS52MSK7AQoGQ29uZmlnEjUKCGZlYXR1cmVzGAEgASgLMiMuY29ubmVjdHJwYy5jb25mb3JtYW5jZS52MS5GZWF0dXJlcxI8Cg1pbmNsdWRlX2Nhc2VzGAIgAygLMiUuY29ubmVjdHJwYy5jb25mb3JtYW5jZS52MS5Db25maWdDYXNlEjwKDWV4Y2x1ZGVfY2FzZXMYAyADKAsyJS5jb25uZWN0cnBjLmNvbmZvcm1hbmNlLnYxLkNvbmZpZ0Nhc2Ui5QUKCEZlYXR1cmVzEjgKCHZlcnNpb25zGAEgAygOMiYuY29ubmVjdHJwYy5jb25mb3JtYW5jZS52MS5IVFRQVmVyc2lvbhI2Cglwcm90b2NvbHMYAiADKA4yIy5jb25uZWN0cnBjLmNvbmZvcm1hbmNlLnYxLlByb3RvY29sEjAKBmNvZGVjcxgDIAMoDjIgLmNvbm5lY3RycGMuY29uZm9ybWFuY2UudjEuQ29kZWMSPAoMY29tcHJlc3Npb25zGAQgAygOMiYuY29ubmVjdHJwYy5jb25mb3JtYW5jZS52MS5Db21wcmVzc2lvbhI7CgxzdHJlYW1fdHlwZXMYBSADKA4yJS5jb25uZWN0cnBjLmNvbmZvcm1hbmNlLnYxLlN0cmVhbVR5cGUSGQoMc3VwcG9ydHNfaDJjGAYgASgISACIAQESGQoMc3VwcG9ydHNfdGxzGAcgASgISAGIAQESJgoZc3VwcG9ydHNfdGxzX2NsaWVudF9jZXJ0cxgIIAEoCEgCiAEBEh4KEXN1cHBvcnRzX3RyYWlsZXJzGAkgASgISAOIAQESMQokc3VwcG9ydHNfaGFsZl9kdXBsZXhfYmlkaV9vdmVyX2h0dHAxGAogASgISASIAQESIQoUc3VwcG9ydHNfY29ubmVjdF9nZXQYCyABKAhIBYgBARIrCh5zdXBwb3J0c19tZXNzYWdlX3JlY2VpdmVfbGltaXQYDCABKAhIBogBAUIPCg1fc3VwcG9ydHNfaDJjQg8KDV9zdXBwb3J0c190bHNCHAoaX3N1cHBvcnRzX3Rsc19jbGllbnRfY2VydHNCFAoSX3N1cHBvcnRzX3RyYWlsZXJzQicKJV9zdXBwb3J0c19oYWxmX2R1cGxleF9iaWRpX292ZXJfaHR0cDFCFwoVX3N1cHBvcnRzX2Nvbm5lY3RfZ2V0QiEKH19zdXBwb3J0c19tZXNzYWdlX3JlY2VpdmVfbGltaXQiygMKCkNvbmZpZ0Nhc2USNwoHdmVyc2lvbhgBIAEoDjImLmNvbm5lY3RycGMuY29uZm9ybWFuY2UudjEuSFRUUFZlcnNpb24SNQoIcHJvdG9jb2wYAiABKA4yIy5jb25uZWN0cnBjLmNvbmZvcm1hbmNlLnYxLlByb3RvY29sEi8KBWNvZGVjGAMgASgOMiAuY29ubmVjdHJwYy5jb25mb3JtYW5jZS52MS5Db2RlYxI7Cgtjb21wcmVzc2lvbhgEIAEoDjImLmNvbm5lY3RycGMuY29uZm9ybWFuY2UudjEuQ29tcHJlc3Npb24SOgoLc3RyZWFtX3R5cGUYBSABKA4yJS5jb25uZWN0cnBjLmNvbmZvcm1hbmNlLnYxLlN0cmVhbVR5cGUSFAoHdXNlX3RscxgGIAEoCEgAiAEBEiEKFHVzZV90bHNfY2xpZW50X2NlcnRzGAcgASgISAGIAQESJgoZdXNlX21lc3NhZ2VfcmVjZWl2ZV9saW1pdBgIIAEoCEgCiAEBQgoKCF91c2VfdGxzQhcKFV91c2VfdGxzX2NsaWVudF9jZXJ0c0IcChpfdXNlX21lc3NhZ2VfcmVjZWl2ZV9saW1pdCIlCghUTFNDcmVkcxIMCgRjZXJ0GAEgASgMEgsKA2tleRgCIAEoDCpnCgtIVFRQVmVyc2lvbhIcChhIVFRQX1ZFUlNJT05fVU5TUEVDSUZJRUQQABISCg5IVFRQX1ZFUlNJT05fMRABEhIKDkhUVFBfVkVSU0lPTl8yEAISEgoOSFRUUF9WRVJTSU9OXzMQAypkCghQcm90b2NvbBIYChRQUk9UT0NPTF9VTlNQRUNJRklFRBAAEhQKEFBST1RPQ09MX0NPTk5FQ1QQARIRCg1QUk9UT0NPTF9HUlBDEAISFQoRUFJPVE9DT0xfR1JQQ19XRUIQAypTCgVDb2RlYxIVChFDT0RFQ19VTlNQRUNJRklFRBAAEg8KC0NPREVDX1BST1RPEAESDgoKQ09ERUNfSlNPThACEhIKCkNPREVDX1RFWFQQAxoCCAEqtQEKC0NvbXByZXNzaW9uEhsKF0NPTVBSRVNTSU9OX1VOU1BFQ0lGSUVEEAASGAoUQ09NUFJFU1NJT05fSURFTlRJVFkQARIUChBDT01QUkVTU0lPTl9HWklQEAISEgoOQ09NUFJFU1NJT05fQlIQAxIUChBDT01QUkVTU0lPTl9aU1REEAQSFwoTQ09NUFJFU1NJT05fREVGTEFURRAFEhYKEkNPTVBSRVNTSU9OX1NOQVBQWRAGKtABCgpTdHJlYW1UeXBlEhsKF1NUUkVBTV9UWVBFX1VOU1BFQ0lGSUVEEAASFQoRU1RSRUFNX1RZUEVfVU5BUlkQARIdChlTVFJFQU1fVFlQRV9DTElFTlRfU1RSRUFNEAISHQoZU1RSRUFNX1RZUEVfU0VSVkVSX1NUUkVBTRADEicKI1NUUkVBTV9UWVBFX0hBTEZfRFVQTEVYX0JJRElfU1RSRUFNEAQSJwojU1RSRUFNX1RZUEVfRlVMTF9EVVBMRVhfQklESV9TVFJFQU0QBSqUAwoEQ29kZRIUChBDT0RFX1VOU1BFQ0lGSUVEEAASEQoNQ09ERV9DQU5DRUxFRBABEhAKDENPREVfVU5LTk9XThACEhkKFUNPREVfSU5WQUxJRF9BUkdVTUVOVBADEhoKFkNPREVfREVBRExJTkVfRVhDRUVERUQQBBISCg5DT0RFX05PVF9GT1VORBAFEhcKE0NPREVfQUxSRUFEWV9FWElTVFMQBhIaChZDT0RFX1BFUk1JU1NJT05fREVOSUVEEAcSGwoXQ09ERV9SRVNPVVJDRV9FWEhBVVNURUQQCBIcChhDT0RFX0ZBSUxFRF9QUkVDT05ESVRJT04QCRIQCgxDT0RFX0FCT1JURUQQChIVChFDT0RFX09VVF9PRl9SQU5HRRALEhYKEkNPREVfVU5JTVBMRU1FTlRFRBAMEhEKDUNPREVfSU5URVJOQUwQDRIUChBDT0RFX1VOQVZBSUxBQkxFEA4SEgoOQ09ERV9EQVRBX0xPU1MQDxIYChRDT0RFX1VOQVVUSEVOVElDQVRFRBAQYgZwcm90bzM", + ); /** * Config defines the configuration for running conformance tests. @@ -64,7 +71,8 @@ export type Config = Message<"connectrpc.conformance.v1.Config"> & { * Describes the message connectrpc.conformance.v1.Config. * Use `create(ConfigSchema)` to create a new message. */ -export const ConfigSchema: GenMessage = /*@__PURE__*/ +export const ConfigSchema: GenMessage = + /*@__PURE__*/ messageDesc(file_connectrpc_conformance_v1_config, 0); /** @@ -184,7 +192,8 @@ export type Features = Message<"connectrpc.conformance.v1.Features"> & { * Describes the message connectrpc.conformance.v1.Features. * Use `create(FeaturesSchema)` to create a new message. */ -export const FeaturesSchema: GenMessage = /*@__PURE__*/ +export const FeaturesSchema: GenMessage = + /*@__PURE__*/ messageDesc(file_connectrpc_conformance_v1_config, 1); /** @@ -264,7 +273,8 @@ export type ConfigCase = Message<"connectrpc.conformance.v1.ConfigCase"> & { * Describes the message connectrpc.conformance.v1.ConfigCase. * Use `create(ConfigCaseSchema)` to create a new message. */ -export const ConfigCaseSchema: GenMessage = /*@__PURE__*/ +export const ConfigCaseSchema: GenMessage = + /*@__PURE__*/ messageDesc(file_connectrpc_conformance_v1_config, 2); /** @@ -290,7 +300,8 @@ export type TLSCreds = Message<"connectrpc.conformance.v1.TLSCreds"> & { * Describes the message connectrpc.conformance.v1.TLSCreds. * Use `create(TLSCredsSchema)` to create a new message. */ -export const TLSCredsSchema: GenMessage = /*@__PURE__*/ +export const TLSCredsSchema: GenMessage = + /*@__PURE__*/ messageDesc(file_connectrpc_conformance_v1_config, 3); /** @@ -321,7 +332,8 @@ export enum HTTPVersion { /** * Describes the enum connectrpc.conformance.v1.HTTPVersion. */ -export const HTTPVersionSchema: GenEnum = /*@__PURE__*/ +export const HTTPVersionSchema: GenEnum = + /*@__PURE__*/ enumDesc(file_connectrpc_conformance_v1_config, 0); /** @@ -356,7 +368,8 @@ export enum Protocol { /** * Describes the enum connectrpc.conformance.v1.Protocol. */ -export const ProtocolSchema: GenEnum = /*@__PURE__*/ +export const ProtocolSchema: GenEnum = + /*@__PURE__*/ enumDesc(file_connectrpc_conformance_v1_config, 1); /** @@ -390,7 +403,8 @@ export enum Codec { /** * Describes the enum connectrpc.conformance.v1.Codec. */ -export const CodecSchema: GenEnum = /*@__PURE__*/ +export const CodecSchema: GenEnum = + /*@__PURE__*/ enumDesc(file_connectrpc_conformance_v1_config, 2); /** @@ -436,7 +450,8 @@ export enum Compression { /** * Describes the enum connectrpc.conformance.v1.Compression. */ -export const CompressionSchema: GenEnum = /*@__PURE__*/ +export const CompressionSchema: GenEnum = + /*@__PURE__*/ enumDesc(file_connectrpc_conformance_v1_config, 3); /** @@ -477,7 +492,8 @@ export enum StreamType { /** * Describes the enum connectrpc.conformance.v1.StreamType. */ -export const StreamTypeSchema: GenEnum = /*@__PURE__*/ +export const StreamTypeSchema: GenEnum = + /*@__PURE__*/ enumDesc(file_connectrpc_conformance_v1_config, 4); /** @@ -573,6 +589,6 @@ export enum Code { /** * Describes the enum connectrpc.conformance.v1.Code. */ -export const CodeSchema: GenEnum = /*@__PURE__*/ +export const CodeSchema: GenEnum = + /*@__PURE__*/ enumDesc(file_connectrpc_conformance_v1_config, 5); - diff --git a/packages/connect-cloudflare/conformance/gen/connectrpc/conformance/v1/service_pb.ts b/packages/connect-cloudflare/conformance/gen/connectrpc/conformance/v1/service_pb.ts index 2ef9d759d..2eefde0cd 100644 --- a/packages/connect-cloudflare/conformance/gen/connectrpc/conformance/v1/service_pb.ts +++ b/packages/connect-cloudflare/conformance/gen/connectrpc/conformance/v1/service_pb.ts @@ -16,8 +16,16 @@ // @generated from file connectrpc/conformance/v1/service.proto (package connectrpc.conformance.v1, syntax proto3) /* eslint-disable */ -import type { GenFile, GenMessage, GenService } from "@bufbuild/protobuf/codegenv1"; -import { fileDesc, messageDesc, serviceDesc } from "@bufbuild/protobuf/codegenv1"; +import type { + GenFile, + GenMessage, + GenService, +} from "@bufbuild/protobuf/codegenv1"; +import { + fileDesc, + messageDesc, + serviceDesc, +} from "@bufbuild/protobuf/codegenv1"; import type { Code, Compression } from "./config_pb.js"; import { file_connectrpc_conformance_v1_config } from "./config_pb.js"; import type { Any } from "@bufbuild/protobuf/wkt"; @@ -27,8 +35,12 @@ import type { Message } from "@bufbuild/protobuf"; /** * Describes the file connectrpc/conformance/v1/service.proto. */ -export const file_connectrpc_conformance_v1_service: GenFile = /*@__PURE__*/ - fileDesc("Cidjb25uZWN0cnBjL2NvbmZvcm1hbmNlL3YxL3NlcnZpY2UucHJvdG8SGWNvbm5lY3RycGMuY29uZm9ybWFuY2UudjEiyQIKF1VuYXJ5UmVzcG9uc2VEZWZpbml0aW9uEjsKEHJlc3BvbnNlX2hlYWRlcnMYASADKAsyIS5jb25uZWN0cnBjLmNvbmZvcm1hbmNlLnYxLkhlYWRlchIXCg1yZXNwb25zZV9kYXRhGAIgASgMSAASMQoFZXJyb3IYAyABKAsyIC5jb25uZWN0cnBjLmNvbmZvcm1hbmNlLnYxLkVycm9ySAASPAoRcmVzcG9uc2VfdHJhaWxlcnMYBCADKAsyIS5jb25uZWN0cnBjLmNvbmZvcm1hbmNlLnYxLkhlYWRlchIZChFyZXNwb25zZV9kZWxheV9tcxgGIAEoDRJACgxyYXdfcmVzcG9uc2UYBSABKAsyKi5jb25uZWN0cnBjLmNvbmZvcm1hbmNlLnYxLlJhd0hUVFBSZXNwb25zZUIKCghyZXNwb25zZSK6AgoYU3RyZWFtUmVzcG9uc2VEZWZpbml0aW9uEjsKEHJlc3BvbnNlX2hlYWRlcnMYASADKAsyIS5jb25uZWN0cnBjLmNvbmZvcm1hbmNlLnYxLkhlYWRlchIVCg1yZXNwb25zZV9kYXRhGAIgAygMEhkKEXJlc3BvbnNlX2RlbGF5X21zGAMgASgNEi8KBWVycm9yGAQgASgLMiAuY29ubmVjdHJwYy5jb25mb3JtYW5jZS52MS5FcnJvchI8ChFyZXNwb25zZV90cmFpbGVycxgFIAMoCzIhLmNvbm5lY3RycGMuY29uZm9ybWFuY2UudjEuSGVhZGVyEkAKDHJhd19yZXNwb25zZRgGIAEoCzIqLmNvbm5lY3RycGMuY29uZm9ybWFuY2UudjEuUmF3SFRUUFJlc3BvbnNlInUKDFVuYXJ5UmVxdWVzdBJPChNyZXNwb25zZV9kZWZpbml0aW9uGAEgASgLMjIuY29ubmVjdHJwYy5jb25mb3JtYW5jZS52MS5VbmFyeVJlc3BvbnNlRGVmaW5pdGlvbhIUCgxyZXF1ZXN0X2RhdGEYAiABKAwiTwoNVW5hcnlSZXNwb25zZRI+CgdwYXlsb2FkGAEgASgLMi0uY29ubmVjdHJwYy5jb25mb3JtYW5jZS52MS5Db25mb3JtYW5jZVBheWxvYWQifwoWSWRlbXBvdGVudFVuYXJ5UmVxdWVzdBJPChNyZXNwb25zZV9kZWZpbml0aW9uGAEgASgLMjIuY29ubmVjdHJwYy5jb25mb3JtYW5jZS52MS5VbmFyeVJlc3BvbnNlRGVmaW5pdGlvbhIUCgxyZXF1ZXN0X2RhdGEYAiABKAwiWQoXSWRlbXBvdGVudFVuYXJ5UmVzcG9uc2USPgoHcGF5bG9hZBgBIAEoCzItLmNvbm5lY3RycGMuY29uZm9ybWFuY2UudjEuQ29uZm9ybWFuY2VQYXlsb2FkIn0KE1NlcnZlclN0cmVhbVJlcXVlc3QSUAoTcmVzcG9uc2VfZGVmaW5pdGlvbhgBIAEoCzIzLmNvbm5lY3RycGMuY29uZm9ybWFuY2UudjEuU3RyZWFtUmVzcG9uc2VEZWZpbml0aW9uEhQKDHJlcXVlc3RfZGF0YRgCIAEoDCJWChRTZXJ2ZXJTdHJlYW1SZXNwb25zZRI+CgdwYXlsb2FkGAEgASgLMi0uY29ubmVjdHJwYy5jb25mb3JtYW5jZS52MS5Db25mb3JtYW5jZVBheWxvYWQifAoTQ2xpZW50U3RyZWFtUmVxdWVzdBJPChNyZXNwb25zZV9kZWZpbml0aW9uGAEgASgLMjIuY29ubmVjdHJwYy5jb25mb3JtYW5jZS52MS5VbmFyeVJlc3BvbnNlRGVmaW5pdGlvbhIUCgxyZXF1ZXN0X2RhdGEYAiABKAwiVgoUQ2xpZW50U3RyZWFtUmVzcG9uc2USPgoHcGF5bG9hZBgBIAEoCzItLmNvbm5lY3RycGMuY29uZm9ybWFuY2UudjEuQ29uZm9ybWFuY2VQYXlsb2FkIpABChFCaWRpU3RyZWFtUmVxdWVzdBJQChNyZXNwb25zZV9kZWZpbml0aW9uGAEgASgLMjMuY29ubmVjdHJwYy5jb25mb3JtYW5jZS52MS5TdHJlYW1SZXNwb25zZURlZmluaXRpb24SEwoLZnVsbF9kdXBsZXgYAiABKAgSFAoMcmVxdWVzdF9kYXRhGAMgASgMIlQKEkJpZGlTdHJlYW1SZXNwb25zZRI+CgdwYXlsb2FkGAEgASgLMi0uY29ubmVjdHJwYy5jb25mb3JtYW5jZS52MS5Db25mb3JtYW5jZVBheWxvYWQiFgoUVW5pbXBsZW1lbnRlZFJlcXVlc3QiFwoVVW5pbXBsZW1lbnRlZFJlc3BvbnNlIrIDChJDb25mb3JtYW5jZVBheWxvYWQSDAoEZGF0YRgBIAEoDBJPCgxyZXF1ZXN0X2luZm8YAiABKAsyOS5jb25uZWN0cnBjLmNvbmZvcm1hbmNlLnYxLkNvbmZvcm1hbmNlUGF5bG9hZC5SZXF1ZXN0SW5mbxrxAQoLUmVxdWVzdEluZm8SOgoPcmVxdWVzdF9oZWFkZXJzGAEgAygLMiEuY29ubmVjdHJwYy5jb25mb3JtYW5jZS52MS5IZWFkZXISFwoKdGltZW91dF9tcxgCIAEoA0gAiAEBEiYKCHJlcXVlc3RzGAMgAygLMhQuZ29vZ2xlLnByb3RvYnVmLkFueRJWChBjb25uZWN0X2dldF9pbmZvGAQgASgLMjwuY29ubmVjdHJwYy5jb25mb3JtYW5jZS52MS5Db25mb3JtYW5jZVBheWxvYWQuQ29ubmVjdEdldEluZm9CDQoLX3RpbWVvdXRfbXMaSQoOQ29ubmVjdEdldEluZm8SNwoMcXVlcnlfcGFyYW1zGAEgAygLMiEuY29ubmVjdHJwYy5jb25mb3JtYW5jZS52MS5IZWFkZXIifwoFRXJyb3ISLQoEY29kZRgBIAEoDjIfLmNvbm5lY3RycGMuY29uZm9ybWFuY2UudjEuQ29kZRIUCgdtZXNzYWdlGAIgASgJSACIAQESJQoHZGV0YWlscxgDIAMoCzIULmdvb2dsZS5wcm90b2J1Zi5BbnlCCgoIX21lc3NhZ2UiJQoGSGVhZGVyEgwKBG5hbWUYASABKAkSDQoFdmFsdWUYAiADKAki7gMKDlJhd0hUVFBSZXF1ZXN0EgwKBHZlcmIYASABKAkSCwoDdXJpGAIgASgJEjIKB2hlYWRlcnMYAyADKAsyIS5jb25uZWN0cnBjLmNvbmZvcm1hbmNlLnYxLkhlYWRlchI7ChByYXdfcXVlcnlfcGFyYW1zGAQgAygLMiEuY29ubmVjdHJwYy5jb25mb3JtYW5jZS52MS5IZWFkZXISWQoUZW5jb2RlZF9xdWVyeV9wYXJhbXMYBSADKAsyOy5jb25uZWN0cnBjLmNvbmZvcm1hbmNlLnYxLlJhd0hUVFBSZXF1ZXN0LkVuY29kZWRRdWVyeVBhcmFtEjsKBXVuYXJ5GAYgASgLMiouY29ubmVjdHJwYy5jb25mb3JtYW5jZS52MS5NZXNzYWdlQ29udGVudHNIABI7CgZzdHJlYW0YByABKAsyKS5jb25uZWN0cnBjLmNvbmZvcm1hbmNlLnYxLlN0cmVhbUNvbnRlbnRzSAAacwoRRW5jb2RlZFF1ZXJ5UGFyYW0SDAoEbmFtZRgBIAEoCRI5CgV2YWx1ZRgCIAEoCzIqLmNvbm5lY3RycGMuY29uZm9ybWFuY2UudjEuTWVzc2FnZUNvbnRlbnRzEhUKDWJhc2U2NF9lbmNvZGUYAyABKAhCBgoEYm9keSKoAQoPTWVzc2FnZUNvbnRlbnRzEhAKBmJpbmFyeRgBIAEoDEgAEg4KBHRleHQYAiABKAlIABIuCg5iaW5hcnlfbWVzc2FnZRgDIAEoCzIULmdvb2dsZS5wcm90b2J1Zi5BbnlIABI7Cgtjb21wcmVzc2lvbhgEIAEoDjImLmNvbm5lY3RycGMuY29uZm9ybWFuY2UudjEuQ29tcHJlc3Npb25CBgoEZGF0YSLPAQoOU3RyZWFtQ29udGVudHMSQwoFaXRlbXMYASADKAsyNC5jb25uZWN0cnBjLmNvbmZvcm1hbmNlLnYxLlN0cmVhbUNvbnRlbnRzLlN0cmVhbUl0ZW0aeAoKU3RyZWFtSXRlbRINCgVmbGFncxgBIAEoDRITCgZsZW5ndGgYAiABKA1IAIgBARI7CgdwYXlsb2FkGAMgASgLMiouY29ubmVjdHJwYy5jb25mb3JtYW5jZS52MS5NZXNzYWdlQ29udGVudHNCCQoHX2xlbmd0aCKRAgoPUmF3SFRUUFJlc3BvbnNlEhMKC3N0YXR1c19jb2RlGAEgASgNEjIKB2hlYWRlcnMYAiADKAsyIS5jb25uZWN0cnBjLmNvbmZvcm1hbmNlLnYxLkhlYWRlchI7CgV1bmFyeRgDIAEoCzIqLmNvbm5lY3RycGMuY29uZm9ybWFuY2UudjEuTWVzc2FnZUNvbnRlbnRzSAASOwoGc3RyZWFtGAQgASgLMikuY29ubmVjdHJwYy5jb25mb3JtYW5jZS52MS5TdHJlYW1Db250ZW50c0gAEjMKCHRyYWlsZXJzGAUgAygLMiEuY29ubmVjdHJwYy5jb25mb3JtYW5jZS52MS5IZWFkZXJCBgoEYm9keTK4BQoSQ29uZm9ybWFuY2VTZXJ2aWNlEloKBVVuYXJ5EicuY29ubmVjdHJwYy5jb25mb3JtYW5jZS52MS5VbmFyeVJlcXVlc3QaKC5jb25uZWN0cnBjLmNvbmZvcm1hbmNlLnYxLlVuYXJ5UmVzcG9uc2UScQoMU2VydmVyU3RyZWFtEi4uY29ubmVjdHJwYy5jb25mb3JtYW5jZS52MS5TZXJ2ZXJTdHJlYW1SZXF1ZXN0Gi8uY29ubmVjdHJwYy5jb25mb3JtYW5jZS52MS5TZXJ2ZXJTdHJlYW1SZXNwb25zZTABEnEKDENsaWVudFN0cmVhbRIuLmNvbm5lY3RycGMuY29uZm9ybWFuY2UudjEuQ2xpZW50U3RyZWFtUmVxdWVzdBovLmNvbm5lY3RycGMuY29uZm9ybWFuY2UudjEuQ2xpZW50U3RyZWFtUmVzcG9uc2UoARJtCgpCaWRpU3RyZWFtEiwuY29ubmVjdHJwYy5jb25mb3JtYW5jZS52MS5CaWRpU3RyZWFtUmVxdWVzdBotLmNvbm5lY3RycGMuY29uZm9ybWFuY2UudjEuQmlkaVN0cmVhbVJlc3BvbnNlKAEwARJyCg1VbmltcGxlbWVudGVkEi8uY29ubmVjdHJwYy5jb25mb3JtYW5jZS52MS5VbmltcGxlbWVudGVkUmVxdWVzdBowLmNvbm5lY3RycGMuY29uZm9ybWFuY2UudjEuVW5pbXBsZW1lbnRlZFJlc3BvbnNlEn0KD0lkZW1wb3RlbnRVbmFyeRIxLmNvbm5lY3RycGMuY29uZm9ybWFuY2UudjEuSWRlbXBvdGVudFVuYXJ5UmVxdWVzdBoyLmNvbm5lY3RycGMuY29uZm9ybWFuY2UudjEuSWRlbXBvdGVudFVuYXJ5UmVzcG9uc2UiA5ACAWIGcHJvdG8z", [file_connectrpc_conformance_v1_config, file_google_protobuf_any]); +export const file_connectrpc_conformance_v1_service: GenFile = + /*@__PURE__*/ + fileDesc( + "Cidjb25uZWN0cnBjL2NvbmZvcm1hbmNlL3YxL3NlcnZpY2UucHJvdG8SGWNvbm5lY3RycGMuY29uZm9ybWFuY2UudjEiyQIKF1VuYXJ5UmVzcG9uc2VEZWZpbml0aW9uEjsKEHJlc3BvbnNlX2hlYWRlcnMYASADKAsyIS5jb25uZWN0cnBjLmNvbmZvcm1hbmNlLnYxLkhlYWRlchIXCg1yZXNwb25zZV9kYXRhGAIgASgMSAASMQoFZXJyb3IYAyABKAsyIC5jb25uZWN0cnBjLmNvbmZvcm1hbmNlLnYxLkVycm9ySAASPAoRcmVzcG9uc2VfdHJhaWxlcnMYBCADKAsyIS5jb25uZWN0cnBjLmNvbmZvcm1hbmNlLnYxLkhlYWRlchIZChFyZXNwb25zZV9kZWxheV9tcxgGIAEoDRJACgxyYXdfcmVzcG9uc2UYBSABKAsyKi5jb25uZWN0cnBjLmNvbmZvcm1hbmNlLnYxLlJhd0hUVFBSZXNwb25zZUIKCghyZXNwb25zZSK6AgoYU3RyZWFtUmVzcG9uc2VEZWZpbml0aW9uEjsKEHJlc3BvbnNlX2hlYWRlcnMYASADKAsyIS5jb25uZWN0cnBjLmNvbmZvcm1hbmNlLnYxLkhlYWRlchIVCg1yZXNwb25zZV9kYXRhGAIgAygMEhkKEXJlc3BvbnNlX2RlbGF5X21zGAMgASgNEi8KBWVycm9yGAQgASgLMiAuY29ubmVjdHJwYy5jb25mb3JtYW5jZS52MS5FcnJvchI8ChFyZXNwb25zZV90cmFpbGVycxgFIAMoCzIhLmNvbm5lY3RycGMuY29uZm9ybWFuY2UudjEuSGVhZGVyEkAKDHJhd19yZXNwb25zZRgGIAEoCzIqLmNvbm5lY3RycGMuY29uZm9ybWFuY2UudjEuUmF3SFRUUFJlc3BvbnNlInUKDFVuYXJ5UmVxdWVzdBJPChNyZXNwb25zZV9kZWZpbml0aW9uGAEgASgLMjIuY29ubmVjdHJwYy5jb25mb3JtYW5jZS52MS5VbmFyeVJlc3BvbnNlRGVmaW5pdGlvbhIUCgxyZXF1ZXN0X2RhdGEYAiABKAwiTwoNVW5hcnlSZXNwb25zZRI+CgdwYXlsb2FkGAEgASgLMi0uY29ubmVjdHJwYy5jb25mb3JtYW5jZS52MS5Db25mb3JtYW5jZVBheWxvYWQifwoWSWRlbXBvdGVudFVuYXJ5UmVxdWVzdBJPChNyZXNwb25zZV9kZWZpbml0aW9uGAEgASgLMjIuY29ubmVjdHJwYy5jb25mb3JtYW5jZS52MS5VbmFyeVJlc3BvbnNlRGVmaW5pdGlvbhIUCgxyZXF1ZXN0X2RhdGEYAiABKAwiWQoXSWRlbXBvdGVudFVuYXJ5UmVzcG9uc2USPgoHcGF5bG9hZBgBIAEoCzItLmNvbm5lY3RycGMuY29uZm9ybWFuY2UudjEuQ29uZm9ybWFuY2VQYXlsb2FkIn0KE1NlcnZlclN0cmVhbVJlcXVlc3QSUAoTcmVzcG9uc2VfZGVmaW5pdGlvbhgBIAEoCzIzLmNvbm5lY3RycGMuY29uZm9ybWFuY2UudjEuU3RyZWFtUmVzcG9uc2VEZWZpbml0aW9uEhQKDHJlcXVlc3RfZGF0YRgCIAEoDCJWChRTZXJ2ZXJTdHJlYW1SZXNwb25zZRI+CgdwYXlsb2FkGAEgASgLMi0uY29ubmVjdHJwYy5jb25mb3JtYW5jZS52MS5Db25mb3JtYW5jZVBheWxvYWQifAoTQ2xpZW50U3RyZWFtUmVxdWVzdBJPChNyZXNwb25zZV9kZWZpbml0aW9uGAEgASgLMjIuY29ubmVjdHJwYy5jb25mb3JtYW5jZS52MS5VbmFyeVJlc3BvbnNlRGVmaW5pdGlvbhIUCgxyZXF1ZXN0X2RhdGEYAiABKAwiVgoUQ2xpZW50U3RyZWFtUmVzcG9uc2USPgoHcGF5bG9hZBgBIAEoCzItLmNvbm5lY3RycGMuY29uZm9ybWFuY2UudjEuQ29uZm9ybWFuY2VQYXlsb2FkIpABChFCaWRpU3RyZWFtUmVxdWVzdBJQChNyZXNwb25zZV9kZWZpbml0aW9uGAEgASgLMjMuY29ubmVjdHJwYy5jb25mb3JtYW5jZS52MS5TdHJlYW1SZXNwb25zZURlZmluaXRpb24SEwoLZnVsbF9kdXBsZXgYAiABKAgSFAoMcmVxdWVzdF9kYXRhGAMgASgMIlQKEkJpZGlTdHJlYW1SZXNwb25zZRI+CgdwYXlsb2FkGAEgASgLMi0uY29ubmVjdHJwYy5jb25mb3JtYW5jZS52MS5Db25mb3JtYW5jZVBheWxvYWQiFgoUVW5pbXBsZW1lbnRlZFJlcXVlc3QiFwoVVW5pbXBsZW1lbnRlZFJlc3BvbnNlIrIDChJDb25mb3JtYW5jZVBheWxvYWQSDAoEZGF0YRgBIAEoDBJPCgxyZXF1ZXN0X2luZm8YAiABKAsyOS5jb25uZWN0cnBjLmNvbmZvcm1hbmNlLnYxLkNvbmZvcm1hbmNlUGF5bG9hZC5SZXF1ZXN0SW5mbxrxAQoLUmVxdWVzdEluZm8SOgoPcmVxdWVzdF9oZWFkZXJzGAEgAygLMiEuY29ubmVjdHJwYy5jb25mb3JtYW5jZS52MS5IZWFkZXISFwoKdGltZW91dF9tcxgCIAEoA0gAiAEBEiYKCHJlcXVlc3RzGAMgAygLMhQuZ29vZ2xlLnByb3RvYnVmLkFueRJWChBjb25uZWN0X2dldF9pbmZvGAQgASgLMjwuY29ubmVjdHJwYy5jb25mb3JtYW5jZS52MS5Db25mb3JtYW5jZVBheWxvYWQuQ29ubmVjdEdldEluZm9CDQoLX3RpbWVvdXRfbXMaSQoOQ29ubmVjdEdldEluZm8SNwoMcXVlcnlfcGFyYW1zGAEgAygLMiEuY29ubmVjdHJwYy5jb25mb3JtYW5jZS52MS5IZWFkZXIifwoFRXJyb3ISLQoEY29kZRgBIAEoDjIfLmNvbm5lY3RycGMuY29uZm9ybWFuY2UudjEuQ29kZRIUCgdtZXNzYWdlGAIgASgJSACIAQESJQoHZGV0YWlscxgDIAMoCzIULmdvb2dsZS5wcm90b2J1Zi5BbnlCCgoIX21lc3NhZ2UiJQoGSGVhZGVyEgwKBG5hbWUYASABKAkSDQoFdmFsdWUYAiADKAki7gMKDlJhd0hUVFBSZXF1ZXN0EgwKBHZlcmIYASABKAkSCwoDdXJpGAIgASgJEjIKB2hlYWRlcnMYAyADKAsyIS5jb25uZWN0cnBjLmNvbmZvcm1hbmNlLnYxLkhlYWRlchI7ChByYXdfcXVlcnlfcGFyYW1zGAQgAygLMiEuY29ubmVjdHJwYy5jb25mb3JtYW5jZS52MS5IZWFkZXISWQoUZW5jb2RlZF9xdWVyeV9wYXJhbXMYBSADKAsyOy5jb25uZWN0cnBjLmNvbmZvcm1hbmNlLnYxLlJhd0hUVFBSZXF1ZXN0LkVuY29kZWRRdWVyeVBhcmFtEjsKBXVuYXJ5GAYgASgLMiouY29ubmVjdHJwYy5jb25mb3JtYW5jZS52MS5NZXNzYWdlQ29udGVudHNIABI7CgZzdHJlYW0YByABKAsyKS5jb25uZWN0cnBjLmNvbmZvcm1hbmNlLnYxLlN0cmVhbUNvbnRlbnRzSAAacwoRRW5jb2RlZFF1ZXJ5UGFyYW0SDAoEbmFtZRgBIAEoCRI5CgV2YWx1ZRgCIAEoCzIqLmNvbm5lY3RycGMuY29uZm9ybWFuY2UudjEuTWVzc2FnZUNvbnRlbnRzEhUKDWJhc2U2NF9lbmNvZGUYAyABKAhCBgoEYm9keSKoAQoPTWVzc2FnZUNvbnRlbnRzEhAKBmJpbmFyeRgBIAEoDEgAEg4KBHRleHQYAiABKAlIABIuCg5iaW5hcnlfbWVzc2FnZRgDIAEoCzIULmdvb2dsZS5wcm90b2J1Zi5BbnlIABI7Cgtjb21wcmVzc2lvbhgEIAEoDjImLmNvbm5lY3RycGMuY29uZm9ybWFuY2UudjEuQ29tcHJlc3Npb25CBgoEZGF0YSLPAQoOU3RyZWFtQ29udGVudHMSQwoFaXRlbXMYASADKAsyNC5jb25uZWN0cnBjLmNvbmZvcm1hbmNlLnYxLlN0cmVhbUNvbnRlbnRzLlN0cmVhbUl0ZW0aeAoKU3RyZWFtSXRlbRINCgVmbGFncxgBIAEoDRITCgZsZW5ndGgYAiABKA1IAIgBARI7CgdwYXlsb2FkGAMgASgLMiouY29ubmVjdHJwYy5jb25mb3JtYW5jZS52MS5NZXNzYWdlQ29udGVudHNCCQoHX2xlbmd0aCKRAgoPUmF3SFRUUFJlc3BvbnNlEhMKC3N0YXR1c19jb2RlGAEgASgNEjIKB2hlYWRlcnMYAiADKAsyIS5jb25uZWN0cnBjLmNvbmZvcm1hbmNlLnYxLkhlYWRlchI7CgV1bmFyeRgDIAEoCzIqLmNvbm5lY3RycGMuY29uZm9ybWFuY2UudjEuTWVzc2FnZUNvbnRlbnRzSAASOwoGc3RyZWFtGAQgASgLMikuY29ubmVjdHJwYy5jb25mb3JtYW5jZS52MS5TdHJlYW1Db250ZW50c0gAEjMKCHRyYWlsZXJzGAUgAygLMiEuY29ubmVjdHJwYy5jb25mb3JtYW5jZS52MS5IZWFkZXJCBgoEYm9keTK4BQoSQ29uZm9ybWFuY2VTZXJ2aWNlEloKBVVuYXJ5EicuY29ubmVjdHJwYy5jb25mb3JtYW5jZS52MS5VbmFyeVJlcXVlc3QaKC5jb25uZWN0cnBjLmNvbmZvcm1hbmNlLnYxLlVuYXJ5UmVzcG9uc2UScQoMU2VydmVyU3RyZWFtEi4uY29ubmVjdHJwYy5jb25mb3JtYW5jZS52MS5TZXJ2ZXJTdHJlYW1SZXF1ZXN0Gi8uY29ubmVjdHJwYy5jb25mb3JtYW5jZS52MS5TZXJ2ZXJTdHJlYW1SZXNwb25zZTABEnEKDENsaWVudFN0cmVhbRIuLmNvbm5lY3RycGMuY29uZm9ybWFuY2UudjEuQ2xpZW50U3RyZWFtUmVxdWVzdBovLmNvbm5lY3RycGMuY29uZm9ybWFuY2UudjEuQ2xpZW50U3RyZWFtUmVzcG9uc2UoARJtCgpCaWRpU3RyZWFtEiwuY29ubmVjdHJwYy5jb25mb3JtYW5jZS52MS5CaWRpU3RyZWFtUmVxdWVzdBotLmNvbm5lY3RycGMuY29uZm9ybWFuY2UudjEuQmlkaVN0cmVhbVJlc3BvbnNlKAEwARJyCg1VbmltcGxlbWVudGVkEi8uY29ubmVjdHJwYy5jb25mb3JtYW5jZS52MS5VbmltcGxlbWVudGVkUmVxdWVzdBowLmNvbm5lY3RycGMuY29uZm9ybWFuY2UudjEuVW5pbXBsZW1lbnRlZFJlc3BvbnNlEn0KD0lkZW1wb3RlbnRVbmFyeRIxLmNvbm5lY3RycGMuY29uZm9ybWFuY2UudjEuSWRlbXBvdGVudFVuYXJ5UmVxdWVzdBoyLmNvbm5lY3RycGMuY29uZm9ybWFuY2UudjEuSWRlbXBvdGVudFVuYXJ5UmVzcG9uc2UiA5ACAWIGcHJvdG8z", + [file_connectrpc_conformance_v1_config, file_google_protobuf_any], + ); /** * A definition of a response to be sent from a single-response endpoint. @@ -36,68 +48,73 @@ export const file_connectrpc_conformance_v1_service: GenFile = /*@__PURE__*/ * * @generated from message connectrpc.conformance.v1.UnaryResponseDefinition */ -export type UnaryResponseDefinition = Message<"connectrpc.conformance.v1.UnaryResponseDefinition"> & { - /** - * Response headers to send - * - * @generated from field: repeated connectrpc.conformance.v1.Header response_headers = 1; - */ - responseHeaders: Header[]; - - /** - * @generated from oneof connectrpc.conformance.v1.UnaryResponseDefinition.response - */ - response: { +export type UnaryResponseDefinition = + Message<"connectrpc.conformance.v1.UnaryResponseDefinition"> & { /** - * Response data to send + * Response headers to send * - * @generated from field: bytes response_data = 2; + * @generated from field: repeated connectrpc.conformance.v1.Header response_headers = 1; */ - value: Uint8Array; - case: "responseData"; - } | { + responseHeaders: Header[]; + /** - * Error to raise instead of response message - * Servers should build a RequestInfo and append it to the details of the - * requested error. - * - * @generated from field: connectrpc.conformance.v1.Error error = 3; + * @generated from oneof connectrpc.conformance.v1.UnaryResponseDefinition.response */ - value: Error; - case: "error"; - } | { case: undefined; value?: undefined }; + response: + | { + /** + * Response data to send + * + * @generated from field: bytes response_data = 2; + */ + value: Uint8Array; + case: "responseData"; + } + | { + /** + * Error to raise instead of response message + * Servers should build a RequestInfo and append it to the details of the + * requested error. + * + * @generated from field: connectrpc.conformance.v1.Error error = 3; + */ + value: Error; + case: "error"; + } + | { case: undefined; value?: undefined }; - /** - * Response trailers to send - together with the error if present - * - * @generated from field: repeated connectrpc.conformance.v1.Header response_trailers = 4; - */ - responseTrailers: Header[]; + /** + * Response trailers to send - together with the error if present + * + * @generated from field: repeated connectrpc.conformance.v1.Header response_trailers = 4; + */ + responseTrailers: Header[]; - /** - * Wait this many milliseconds before sending a response message - * - * @generated from field: uint32 response_delay_ms = 6; - */ - responseDelayMs: number; + /** + * Wait this many milliseconds before sending a response message + * + * @generated from field: uint32 response_delay_ms = 6; + */ + responseDelayMs: number; - /** - * This field is only used by the reference server. If you are implementing a - * server under test, you can ignore this field or respond with an error if the - * server receives a request where it is set. - * - * For test definitions, this field should be used instead of the above fields. - * - * @generated from field: connectrpc.conformance.v1.RawHTTPResponse raw_response = 5; - */ - rawResponse?: RawHTTPResponse; -}; + /** + * This field is only used by the reference server. If you are implementing a + * server under test, you can ignore this field or respond with an error if the + * server receives a request where it is set. + * + * For test definitions, this field should be used instead of the above fields. + * + * @generated from field: connectrpc.conformance.v1.RawHTTPResponse raw_response = 5; + */ + rawResponse?: RawHTTPResponse; + }; /** * Describes the message connectrpc.conformance.v1.UnaryResponseDefinition. * Use `create(UnaryResponseDefinitionSchema)` to create a new message. */ -export const UnaryResponseDefinitionSchema: GenMessage = /*@__PURE__*/ +export const UnaryResponseDefinitionSchema: GenMessage = + /*@__PURE__*/ messageDesc(file_connectrpc_conformance_v1_service, 0); /** @@ -106,63 +123,65 @@ export const UnaryResponseDefinitionSchema: GenMessage * * @generated from message connectrpc.conformance.v1.StreamResponseDefinition */ -export type StreamResponseDefinition = Message<"connectrpc.conformance.v1.StreamResponseDefinition"> & { - /** - * Response headers to send - * - * @generated from field: repeated connectrpc.conformance.v1.Header response_headers = 1; - */ - responseHeaders: Header[]; +export type StreamResponseDefinition = + Message<"connectrpc.conformance.v1.StreamResponseDefinition"> & { + /** + * Response headers to send + * + * @generated from field: repeated connectrpc.conformance.v1.Header response_headers = 1; + */ + responseHeaders: Header[]; - /** - * Response data to send - * - * @generated from field: repeated bytes response_data = 2; - */ - responseData: Uint8Array[]; + /** + * Response data to send + * + * @generated from field: repeated bytes response_data = 2; + */ + responseData: Uint8Array[]; - /** - * Wait this many milliseconds before sending each response message - * - * @generated from field: uint32 response_delay_ms = 3; - */ - responseDelayMs: number; + /** + * Wait this many milliseconds before sending each response message + * + * @generated from field: uint32 response_delay_ms = 3; + */ + responseDelayMs: number; - /** - * Optional error to raise, but only after sending any response messages. - * In the event an immediate error is thrown before any responses are sent, - * (i.e. the equivalent of a trailers-only response), then servers should - * build a RequestInfo message with available information and append that to - * the error details. - * - * @generated from field: connectrpc.conformance.v1.Error error = 4; - */ - error?: Error; + /** + * Optional error to raise, but only after sending any response messages. + * In the event an immediate error is thrown before any responses are sent, + * (i.e. the equivalent of a trailers-only response), then servers should + * build a RequestInfo message with available information and append that to + * the error details. + * + * @generated from field: connectrpc.conformance.v1.Error error = 4; + */ + error?: Error; - /** - * Response trailers to send - together with the error if present - * - * @generated from field: repeated connectrpc.conformance.v1.Header response_trailers = 5; - */ - responseTrailers: Header[]; + /** + * Response trailers to send - together with the error if present + * + * @generated from field: repeated connectrpc.conformance.v1.Header response_trailers = 5; + */ + responseTrailers: Header[]; - /** - * This field is only used by the reference server. If you are implementing a - * server under test, you can ignore this field or respond with an error if the - * server receives a request where it is set. - * - * For test definitions, this field should be used instead of the above fields. - * - * @generated from field: connectrpc.conformance.v1.RawHTTPResponse raw_response = 6; - */ - rawResponse?: RawHTTPResponse; -}; + /** + * This field is only used by the reference server. If you are implementing a + * server under test, you can ignore this field or respond with an error if the + * server receives a request where it is set. + * + * For test definitions, this field should be used instead of the above fields. + * + * @generated from field: connectrpc.conformance.v1.RawHTTPResponse raw_response = 6; + */ + rawResponse?: RawHTTPResponse; + }; /** * Describes the message connectrpc.conformance.v1.StreamResponseDefinition. * Use `create(StreamResponseDefinitionSchema)` to create a new message. */ -export const StreamResponseDefinitionSchema: GenMessage = /*@__PURE__*/ +export const StreamResponseDefinitionSchema: GenMessage = + /*@__PURE__*/ messageDesc(file_connectrpc_conformance_v1_service, 1); /** @@ -188,354 +207,381 @@ export type UnaryRequest = Message<"connectrpc.conformance.v1.UnaryRequest"> & { * Describes the message connectrpc.conformance.v1.UnaryRequest. * Use `create(UnaryRequestSchema)` to create a new message. */ -export const UnaryRequestSchema: GenMessage = /*@__PURE__*/ +export const UnaryRequestSchema: GenMessage = + /*@__PURE__*/ messageDesc(file_connectrpc_conformance_v1_service, 2); /** * @generated from message connectrpc.conformance.v1.UnaryResponse */ -export type UnaryResponse = Message<"connectrpc.conformance.v1.UnaryResponse"> & { - /** - * The conformance payload to respond with. - * - * @generated from field: connectrpc.conformance.v1.ConformancePayload payload = 1; - */ - payload?: ConformancePayload; -}; +export type UnaryResponse = + Message<"connectrpc.conformance.v1.UnaryResponse"> & { + /** + * The conformance payload to respond with. + * + * @generated from field: connectrpc.conformance.v1.ConformancePayload payload = 1; + */ + payload?: ConformancePayload; + }; /** * Describes the message connectrpc.conformance.v1.UnaryResponse. * Use `create(UnaryResponseSchema)` to create a new message. */ -export const UnaryResponseSchema: GenMessage = /*@__PURE__*/ +export const UnaryResponseSchema: GenMessage = + /*@__PURE__*/ messageDesc(file_connectrpc_conformance_v1_service, 3); /** * @generated from message connectrpc.conformance.v1.IdempotentUnaryRequest */ -export type IdempotentUnaryRequest = Message<"connectrpc.conformance.v1.IdempotentUnaryRequest"> & { - /** - * The response definition which should be returned in the conformance payload - * - * @generated from field: connectrpc.conformance.v1.UnaryResponseDefinition response_definition = 1; - */ - responseDefinition?: UnaryResponseDefinition; +export type IdempotentUnaryRequest = + Message<"connectrpc.conformance.v1.IdempotentUnaryRequest"> & { + /** + * The response definition which should be returned in the conformance payload + * + * @generated from field: connectrpc.conformance.v1.UnaryResponseDefinition response_definition = 1; + */ + responseDefinition?: UnaryResponseDefinition; - /** - * Additional data. Only used to pad the request size to test large request messages. - * - * @generated from field: bytes request_data = 2; - */ - requestData: Uint8Array; -}; + /** + * Additional data. Only used to pad the request size to test large request messages. + * + * @generated from field: bytes request_data = 2; + */ + requestData: Uint8Array; + }; /** * Describes the message connectrpc.conformance.v1.IdempotentUnaryRequest. * Use `create(IdempotentUnaryRequestSchema)` to create a new message. */ -export const IdempotentUnaryRequestSchema: GenMessage = /*@__PURE__*/ +export const IdempotentUnaryRequestSchema: GenMessage = + /*@__PURE__*/ messageDesc(file_connectrpc_conformance_v1_service, 4); /** * @generated from message connectrpc.conformance.v1.IdempotentUnaryResponse */ -export type IdempotentUnaryResponse = Message<"connectrpc.conformance.v1.IdempotentUnaryResponse"> & { - /** - * The conformance payload to respond with. - * - * @generated from field: connectrpc.conformance.v1.ConformancePayload payload = 1; - */ - payload?: ConformancePayload; -}; +export type IdempotentUnaryResponse = + Message<"connectrpc.conformance.v1.IdempotentUnaryResponse"> & { + /** + * The conformance payload to respond with. + * + * @generated from field: connectrpc.conformance.v1.ConformancePayload payload = 1; + */ + payload?: ConformancePayload; + }; /** * Describes the message connectrpc.conformance.v1.IdempotentUnaryResponse. * Use `create(IdempotentUnaryResponseSchema)` to create a new message. */ -export const IdempotentUnaryResponseSchema: GenMessage = /*@__PURE__*/ +export const IdempotentUnaryResponseSchema: GenMessage = + /*@__PURE__*/ messageDesc(file_connectrpc_conformance_v1_service, 5); /** * @generated from message connectrpc.conformance.v1.ServerStreamRequest */ -export type ServerStreamRequest = Message<"connectrpc.conformance.v1.ServerStreamRequest"> & { - /** - * The response definition which should be returned in the conformance payload. - * - * @generated from field: connectrpc.conformance.v1.StreamResponseDefinition response_definition = 1; - */ - responseDefinition?: StreamResponseDefinition; +export type ServerStreamRequest = + Message<"connectrpc.conformance.v1.ServerStreamRequest"> & { + /** + * The response definition which should be returned in the conformance payload. + * + * @generated from field: connectrpc.conformance.v1.StreamResponseDefinition response_definition = 1; + */ + responseDefinition?: StreamResponseDefinition; - /** - * Additional data. Only used to pad the request size to test large request messages. - * - * @generated from field: bytes request_data = 2; - */ - requestData: Uint8Array; -}; + /** + * Additional data. Only used to pad the request size to test large request messages. + * + * @generated from field: bytes request_data = 2; + */ + requestData: Uint8Array; + }; /** * Describes the message connectrpc.conformance.v1.ServerStreamRequest. * Use `create(ServerStreamRequestSchema)` to create a new message. */ -export const ServerStreamRequestSchema: GenMessage = /*@__PURE__*/ +export const ServerStreamRequestSchema: GenMessage = + /*@__PURE__*/ messageDesc(file_connectrpc_conformance_v1_service, 6); /** * @generated from message connectrpc.conformance.v1.ServerStreamResponse */ -export type ServerStreamResponse = Message<"connectrpc.conformance.v1.ServerStreamResponse"> & { - /** - * The conformance payload to respond with - * - * @generated from field: connectrpc.conformance.v1.ConformancePayload payload = 1; - */ - payload?: ConformancePayload; -}; +export type ServerStreamResponse = + Message<"connectrpc.conformance.v1.ServerStreamResponse"> & { + /** + * The conformance payload to respond with + * + * @generated from field: connectrpc.conformance.v1.ConformancePayload payload = 1; + */ + payload?: ConformancePayload; + }; /** * Describes the message connectrpc.conformance.v1.ServerStreamResponse. * Use `create(ServerStreamResponseSchema)` to create a new message. */ -export const ServerStreamResponseSchema: GenMessage = /*@__PURE__*/ +export const ServerStreamResponseSchema: GenMessage = + /*@__PURE__*/ messageDesc(file_connectrpc_conformance_v1_service, 7); /** * @generated from message connectrpc.conformance.v1.ClientStreamRequest */ -export type ClientStreamRequest = Message<"connectrpc.conformance.v1.ClientStreamRequest"> & { - /** - * Tells the server how to reply once all client messages are - * complete. Required in the first message in the stream, but - * should be ignored in subsequent messages. - * - * @generated from field: connectrpc.conformance.v1.UnaryResponseDefinition response_definition = 1; - */ - responseDefinition?: UnaryResponseDefinition; +export type ClientStreamRequest = + Message<"connectrpc.conformance.v1.ClientStreamRequest"> & { + /** + * Tells the server how to reply once all client messages are + * complete. Required in the first message in the stream, but + * should be ignored in subsequent messages. + * + * @generated from field: connectrpc.conformance.v1.UnaryResponseDefinition response_definition = 1; + */ + responseDefinition?: UnaryResponseDefinition; - /** - * Additional data for subsequent messages in the stream. Also - * used to pad the request size to test large request messages. - * - * @generated from field: bytes request_data = 2; - */ - requestData: Uint8Array; -}; + /** + * Additional data for subsequent messages in the stream. Also + * used to pad the request size to test large request messages. + * + * @generated from field: bytes request_data = 2; + */ + requestData: Uint8Array; + }; /** * Describes the message connectrpc.conformance.v1.ClientStreamRequest. * Use `create(ClientStreamRequestSchema)` to create a new message. */ -export const ClientStreamRequestSchema: GenMessage = /*@__PURE__*/ +export const ClientStreamRequestSchema: GenMessage = + /*@__PURE__*/ messageDesc(file_connectrpc_conformance_v1_service, 8); /** * @generated from message connectrpc.conformance.v1.ClientStreamResponse */ -export type ClientStreamResponse = Message<"connectrpc.conformance.v1.ClientStreamResponse"> & { - /** - * The conformance payload to respond with - * - * @generated from field: connectrpc.conformance.v1.ConformancePayload payload = 1; - */ - payload?: ConformancePayload; -}; +export type ClientStreamResponse = + Message<"connectrpc.conformance.v1.ClientStreamResponse"> & { + /** + * The conformance payload to respond with + * + * @generated from field: connectrpc.conformance.v1.ConformancePayload payload = 1; + */ + payload?: ConformancePayload; + }; /** * Describes the message connectrpc.conformance.v1.ClientStreamResponse. * Use `create(ClientStreamResponseSchema)` to create a new message. */ -export const ClientStreamResponseSchema: GenMessage = /*@__PURE__*/ +export const ClientStreamResponseSchema: GenMessage = + /*@__PURE__*/ messageDesc(file_connectrpc_conformance_v1_service, 9); /** * @generated from message connectrpc.conformance.v1.BidiStreamRequest */ -export type BidiStreamRequest = Message<"connectrpc.conformance.v1.BidiStreamRequest"> & { - /** - * Tells the server how to reply; required in the first message - * in the stream. Should be ignored in subsequent messages. - * - * @generated from field: connectrpc.conformance.v1.StreamResponseDefinition response_definition = 1; - */ - responseDefinition?: StreamResponseDefinition; +export type BidiStreamRequest = + Message<"connectrpc.conformance.v1.BidiStreamRequest"> & { + /** + * Tells the server how to reply; required in the first message + * in the stream. Should be ignored in subsequent messages. + * + * @generated from field: connectrpc.conformance.v1.StreamResponseDefinition response_definition = 1; + */ + responseDefinition?: StreamResponseDefinition; - /** - * Tells the server whether it should wait for each request - * before sending a response. - * - * If true, it indicates the server should effectively interleave the - * stream so messages are sent in request->response pairs. - * - * If false, then the response stream will be sent once all request messages - * are finished sending with the only delays between messages - * being the optional fixed milliseconds defined in the response - * definition. - * - * This field is only relevant in the first message in the stream - * and should be ignored in subsequent messages. - * - * @generated from field: bool full_duplex = 2; - */ - fullDuplex: boolean; + /** + * Tells the server whether it should wait for each request + * before sending a response. + * + * If true, it indicates the server should effectively interleave the + * stream so messages are sent in request->response pairs. + * + * If false, then the response stream will be sent once all request messages + * are finished sending with the only delays between messages + * being the optional fixed milliseconds defined in the response + * definition. + * + * This field is only relevant in the first message in the stream + * and should be ignored in subsequent messages. + * + * @generated from field: bool full_duplex = 2; + */ + fullDuplex: boolean; - /** - * Additional data for subsequent messages in the stream. Also - * used to pad the request size to test large request messages. - * - * @generated from field: bytes request_data = 3; - */ - requestData: Uint8Array; -}; + /** + * Additional data for subsequent messages in the stream. Also + * used to pad the request size to test large request messages. + * + * @generated from field: bytes request_data = 3; + */ + requestData: Uint8Array; + }; /** * Describes the message connectrpc.conformance.v1.BidiStreamRequest. * Use `create(BidiStreamRequestSchema)` to create a new message. */ -export const BidiStreamRequestSchema: GenMessage = /*@__PURE__*/ +export const BidiStreamRequestSchema: GenMessage = + /*@__PURE__*/ messageDesc(file_connectrpc_conformance_v1_service, 10); /** * @generated from message connectrpc.conformance.v1.BidiStreamResponse */ -export type BidiStreamResponse = Message<"connectrpc.conformance.v1.BidiStreamResponse"> & { - /** - * The conformance payload to respond with - * - * @generated from field: connectrpc.conformance.v1.ConformancePayload payload = 1; - */ - payload?: ConformancePayload; -}; +export type BidiStreamResponse = + Message<"connectrpc.conformance.v1.BidiStreamResponse"> & { + /** + * The conformance payload to respond with + * + * @generated from field: connectrpc.conformance.v1.ConformancePayload payload = 1; + */ + payload?: ConformancePayload; + }; /** * Describes the message connectrpc.conformance.v1.BidiStreamResponse. * Use `create(BidiStreamResponseSchema)` to create a new message. */ -export const BidiStreamResponseSchema: GenMessage = /*@__PURE__*/ +export const BidiStreamResponseSchema: GenMessage = + /*@__PURE__*/ messageDesc(file_connectrpc_conformance_v1_service, 11); /** * @generated from message connectrpc.conformance.v1.UnimplementedRequest */ -export type UnimplementedRequest = Message<"connectrpc.conformance.v1.UnimplementedRequest"> & { -}; +export type UnimplementedRequest = + Message<"connectrpc.conformance.v1.UnimplementedRequest"> & {}; /** * Describes the message connectrpc.conformance.v1.UnimplementedRequest. * Use `create(UnimplementedRequestSchema)` to create a new message. */ -export const UnimplementedRequestSchema: GenMessage = /*@__PURE__*/ +export const UnimplementedRequestSchema: GenMessage = + /*@__PURE__*/ messageDesc(file_connectrpc_conformance_v1_service, 12); /** * @generated from message connectrpc.conformance.v1.UnimplementedResponse */ -export type UnimplementedResponse = Message<"connectrpc.conformance.v1.UnimplementedResponse"> & { -}; +export type UnimplementedResponse = + Message<"connectrpc.conformance.v1.UnimplementedResponse"> & {}; /** * Describes the message connectrpc.conformance.v1.UnimplementedResponse. * Use `create(UnimplementedResponseSchema)` to create a new message. */ -export const UnimplementedResponseSchema: GenMessage = /*@__PURE__*/ +export const UnimplementedResponseSchema: GenMessage = + /*@__PURE__*/ messageDesc(file_connectrpc_conformance_v1_service, 13); /** * @generated from message connectrpc.conformance.v1.ConformancePayload */ -export type ConformancePayload = Message<"connectrpc.conformance.v1.ConformancePayload"> & { - /** - * Any response data specified in the response definition to the server should be - * echoed back here. - * - * @generated from field: bytes data = 1; - */ - data: Uint8Array; +export type ConformancePayload = + Message<"connectrpc.conformance.v1.ConformancePayload"> & { + /** + * Any response data specified in the response definition to the server should be + * echoed back here. + * + * @generated from field: bytes data = 1; + */ + data: Uint8Array; - /** - * Echoes back information about the request stream observed so far. - * - * @generated from field: connectrpc.conformance.v1.ConformancePayload.RequestInfo request_info = 2; - */ - requestInfo?: ConformancePayload_RequestInfo; -}; + /** + * Echoes back information about the request stream observed so far. + * + * @generated from field: connectrpc.conformance.v1.ConformancePayload.RequestInfo request_info = 2; + */ + requestInfo?: ConformancePayload_RequestInfo; + }; /** * Describes the message connectrpc.conformance.v1.ConformancePayload. * Use `create(ConformancePayloadSchema)` to create a new message. */ -export const ConformancePayloadSchema: GenMessage = /*@__PURE__*/ +export const ConformancePayloadSchema: GenMessage = + /*@__PURE__*/ messageDesc(file_connectrpc_conformance_v1_service, 14); /** * @generated from message connectrpc.conformance.v1.ConformancePayload.RequestInfo */ -export type ConformancePayload_RequestInfo = Message<"connectrpc.conformance.v1.ConformancePayload.RequestInfo"> & { - /** - * The server echos back the request headers it observed here. - * - * @generated from field: repeated connectrpc.conformance.v1.Header request_headers = 1; - */ - requestHeaders: Header[]; +export type ConformancePayload_RequestInfo = + Message<"connectrpc.conformance.v1.ConformancePayload.RequestInfo"> & { + /** + * The server echos back the request headers it observed here. + * + * @generated from field: repeated connectrpc.conformance.v1.Header request_headers = 1; + */ + requestHeaders: Header[]; - /** - * The timeout observed that was included in the request. Other timeouts use a - * type of uint32, but we want to be lenient here to allow whatever value the RPC - * server observes, even if it's outside the range of uint32. - * - * @generated from field: optional int64 timeout_ms = 2; - */ - timeoutMs?: bigint; + /** + * The timeout observed that was included in the request. Other timeouts use a + * type of uint32, but we want to be lenient here to allow whatever value the RPC + * server observes, even if it's outside the range of uint32. + * + * @generated from field: optional int64 timeout_ms = 2; + */ + timeoutMs?: bigint; - /** - * The server should echo back all requests received. - * For unary and server-streaming requests, this should always contain a single request - * For client-streaming and half-duplex bidi-streaming, this should contain - * all client requests in the order received and be present in each response. - * For full-duplex bidirectional-streaming, this should contain all requests in the order - * they were received since the last sent response. - * - * @generated from field: repeated google.protobuf.Any requests = 3; - */ - requests: Any[]; + /** + * The server should echo back all requests received. + * For unary and server-streaming requests, this should always contain a single request + * For client-streaming and half-duplex bidi-streaming, this should contain + * all client requests in the order received and be present in each response. + * For full-duplex bidirectional-streaming, this should contain all requests in the order + * they were received since the last sent response. + * + * @generated from field: repeated google.protobuf.Any requests = 3; + */ + requests: Any[]; - /** - * If present, the request used the Connect protocol and a GET method. This - * captures other relevant information about the request. If a server implementation - * is unable to populate this (due to the server framework not exposing all of these - * details to application code), it may be an empty message. This implies that the - * server framework, at a minimum, at least expose to application code whether the - * request used GET vs. POST. - * - * @generated from field: connectrpc.conformance.v1.ConformancePayload.ConnectGetInfo connect_get_info = 4; - */ - connectGetInfo?: ConformancePayload_ConnectGetInfo; -}; + /** + * If present, the request used the Connect protocol and a GET method. This + * captures other relevant information about the request. If a server implementation + * is unable to populate this (due to the server framework not exposing all of these + * details to application code), it may be an empty message. This implies that the + * server framework, at a minimum, at least expose to application code whether the + * request used GET vs. POST. + * + * @generated from field: connectrpc.conformance.v1.ConformancePayload.ConnectGetInfo connect_get_info = 4; + */ + connectGetInfo?: ConformancePayload_ConnectGetInfo; + }; /** * Describes the message connectrpc.conformance.v1.ConformancePayload.RequestInfo. * Use `create(ConformancePayload_RequestInfoSchema)` to create a new message. */ -export const ConformancePayload_RequestInfoSchema: GenMessage = /*@__PURE__*/ +export const ConformancePayload_RequestInfoSchema: GenMessage = + /*@__PURE__*/ messageDesc(file_connectrpc_conformance_v1_service, 14, 0); /** * @generated from message connectrpc.conformance.v1.ConformancePayload.ConnectGetInfo */ -export type ConformancePayload_ConnectGetInfo = Message<"connectrpc.conformance.v1.ConformancePayload.ConnectGetInfo"> & { - /** - * The query params observed in the request URL. - * - * @generated from field: repeated connectrpc.conformance.v1.Header query_params = 1; - */ - queryParams: Header[]; -}; +export type ConformancePayload_ConnectGetInfo = + Message<"connectrpc.conformance.v1.ConformancePayload.ConnectGetInfo"> & { + /** + * The query params observed in the request URL. + * + * @generated from field: repeated connectrpc.conformance.v1.Header query_params = 1; + */ + queryParams: Header[]; + }; /** * Describes the message connectrpc.conformance.v1.ConformancePayload.ConnectGetInfo. * Use `create(ConformancePayload_ConnectGetInfoSchema)` to create a new message. */ -export const ConformancePayload_ConnectGetInfoSchema: GenMessage = /*@__PURE__*/ +export const ConformancePayload_ConnectGetInfoSchema: GenMessage = + /*@__PURE__*/ messageDesc(file_connectrpc_conformance_v1_service, 14, 1); /** @@ -575,7 +621,8 @@ export type Error = Message<"connectrpc.conformance.v1.Error"> & { * Describes the message connectrpc.conformance.v1.Error. * Use `create(ErrorSchema)` to create a new message. */ -export const ErrorSchema: GenMessage = /*@__PURE__*/ +export const ErrorSchema: GenMessage = + /*@__PURE__*/ messageDesc(file_connectrpc_conformance_v1_service, 15); /** @@ -605,7 +652,8 @@ export type Header = Message<"connectrpc.conformance.v1.Header"> & { * Describes the message connectrpc.conformance.v1.Header. * Use `create(HeaderSchema)` to create a new message. */ -export const HeaderSchema: GenMessage
= /*@__PURE__*/ +export const HeaderSchema: GenMessage
= + /*@__PURE__*/ messageDesc(file_connectrpc_conformance_v1_service, 16); /** @@ -615,106 +663,113 @@ export const HeaderSchema: GenMessage
= /*@__PURE__*/ * * @generated from message connectrpc.conformance.v1.RawHTTPRequest */ -export type RawHTTPRequest = Message<"connectrpc.conformance.v1.RawHTTPRequest"> & { - /** - * The HTTP verb (i.e. GET , POST). - * - * @generated from field: string verb = 1; - */ - verb: string; - - /** - * The URI to send the request to. - * - * @generated from field: string uri = 2; - */ - uri: string; - - /** - * Any headers to set on the request. - * - * @generated from field: repeated connectrpc.conformance.v1.Header headers = 3; - */ - headers: Header[]; +export type RawHTTPRequest = + Message<"connectrpc.conformance.v1.RawHTTPRequest"> & { + /** + * The HTTP verb (i.e. GET , POST). + * + * @generated from field: string verb = 1; + */ + verb: string; - /** - * These query params will be encoded and added to the uri before - * the request is sent. - * - * @generated from field: repeated connectrpc.conformance.v1.Header raw_query_params = 4; - */ - rawQueryParams: Header[]; + /** + * The URI to send the request to. + * + * @generated from field: string uri = 2; + */ + uri: string; - /** - * This provides an easier way to define a complex binary query param - * than having to write literal base64-encoded bytes in raw_query_params. - * - * @generated from field: repeated connectrpc.conformance.v1.RawHTTPRequest.EncodedQueryParam encoded_query_params = 5; - */ - encodedQueryParams: RawHTTPRequest_EncodedQueryParam[]; + /** + * Any headers to set on the request. + * + * @generated from field: repeated connectrpc.conformance.v1.Header headers = 3; + */ + headers: Header[]; - /** - * @generated from oneof connectrpc.conformance.v1.RawHTTPRequest.body - */ - body: { /** - * The body is a single message. + * These query params will be encoded and added to the uri before + * the request is sent. * - * @generated from field: connectrpc.conformance.v1.MessageContents unary = 6; + * @generated from field: repeated connectrpc.conformance.v1.Header raw_query_params = 4; */ - value: MessageContents; - case: "unary"; - } | { + rawQueryParams: Header[]; + /** - * The body is a stream, encoded using a five-byte - * prefix before each item in the stream. + * This provides an easier way to define a complex binary query param + * than having to write literal base64-encoded bytes in raw_query_params. * - * @generated from field: connectrpc.conformance.v1.StreamContents stream = 7; + * @generated from field: repeated connectrpc.conformance.v1.RawHTTPRequest.EncodedQueryParam encoded_query_params = 5; */ - value: StreamContents; - case: "stream"; - } | { case: undefined; value?: undefined }; -}; + encodedQueryParams: RawHTTPRequest_EncodedQueryParam[]; + + /** + * @generated from oneof connectrpc.conformance.v1.RawHTTPRequest.body + */ + body: + | { + /** + * The body is a single message. + * + * @generated from field: connectrpc.conformance.v1.MessageContents unary = 6; + */ + value: MessageContents; + case: "unary"; + } + | { + /** + * The body is a stream, encoded using a five-byte + * prefix before each item in the stream. + * + * @generated from field: connectrpc.conformance.v1.StreamContents stream = 7; + */ + value: StreamContents; + case: "stream"; + } + | { case: undefined; value?: undefined }; + }; /** * Describes the message connectrpc.conformance.v1.RawHTTPRequest. * Use `create(RawHTTPRequestSchema)` to create a new message. */ -export const RawHTTPRequestSchema: GenMessage = /*@__PURE__*/ +export const RawHTTPRequestSchema: GenMessage = + /*@__PURE__*/ messageDesc(file_connectrpc_conformance_v1_service, 17); /** * @generated from message connectrpc.conformance.v1.RawHTTPRequest.EncodedQueryParam */ -export type RawHTTPRequest_EncodedQueryParam = Message<"connectrpc.conformance.v1.RawHTTPRequest.EncodedQueryParam"> & { - /** - * Query param name. - * - * @generated from field: string name = 1; - */ - name: string; +export type RawHTTPRequest_EncodedQueryParam = + Message<"connectrpc.conformance.v1.RawHTTPRequest.EncodedQueryParam"> & { + /** + * Query param name. + * + * @generated from field: string name = 1; + */ + name: string; - /** - * Query param value. - * - * @generated from field: connectrpc.conformance.v1.MessageContents value = 2; - */ - value?: MessageContents; + /** + * Query param value. + * + * @generated from field: connectrpc.conformance.v1.MessageContents value = 2; + */ + value?: MessageContents; - /** - * If true, the message contents will be base64-encoded and the - * resulting string used as the query parameter value. - * - * @generated from field: bool base64_encode = 3; - */ - base64Encode: boolean; -}; + /** + * If true, the message contents will be base64-encoded and the + * resulting string used as the query parameter value. + * + * @generated from field: bool base64_encode = 3; + */ + base64Encode: boolean; + }; /** * Describes the message connectrpc.conformance.v1.RawHTTPRequest.EncodedQueryParam. * Use `create(RawHTTPRequest_EncodedQueryParamSchema)` to create a new message. */ -export const RawHTTPRequest_EncodedQueryParamSchema: GenMessage = /*@__PURE__*/ +export const RawHTTPRequest_EncodedQueryParamSchema: GenMessage = + /*@__PURE__*/ messageDesc(file_connectrpc_conformance_v1_service, 17, 0); /** @@ -722,54 +777,60 @@ export const RawHTTPRequest_EncodedQueryParamSchema: GenMessage & { - /** - * The message data can be defined in one of three ways. - * - * @generated from oneof connectrpc.conformance.v1.MessageContents.data - */ - data: { - /** - * Arbitrary bytes. - * - * @generated from field: bytes binary = 1; - */ - value: Uint8Array; - case: "binary"; - } | { +export type MessageContents = + Message<"connectrpc.conformance.v1.MessageContents"> & { /** - * Arbitrary text. + * The message data can be defined in one of three ways. * - * @generated from field: string text = 2; + * @generated from oneof connectrpc.conformance.v1.MessageContents.data */ - value: string; - case: "text"; - } | { + data: + | { + /** + * Arbitrary bytes. + * + * @generated from field: bytes binary = 1; + */ + value: Uint8Array; + case: "binary"; + } + | { + /** + * Arbitrary text. + * + * @generated from field: string text = 2; + */ + value: string; + case: "text"; + } + | { + /** + * An actual message. The message inside the Any will be + * serialized to the protobuf binary formats, and the + * resulting bytes will be the contents. + * + * @generated from field: google.protobuf.Any binary_message = 3; + */ + value: Any; + case: "binaryMessage"; + } + | { case: undefined; value?: undefined }; + /** - * An actual message. The message inside the Any will be - * serialized to the protobuf binary formats, and the - * resulting bytes will be the contents. + * If specified and not identity, the above data will be + * compressed using the given algorithm. * - * @generated from field: google.protobuf.Any binary_message = 3; + * @generated from field: connectrpc.conformance.v1.Compression compression = 4; */ - value: Any; - case: "binaryMessage"; - } | { case: undefined; value?: undefined }; - - /** - * If specified and not identity, the above data will be - * compressed using the given algorithm. - * - * @generated from field: connectrpc.conformance.v1.Compression compression = 4; - */ - compression: Compression; -}; + compression: Compression; + }; /** * Describes the message connectrpc.conformance.v1.MessageContents. * Use `create(MessageContentsSchema)` to create a new message. */ -export const MessageContentsSchema: GenMessage = /*@__PURE__*/ +export const MessageContentsSchema: GenMessage = + /*@__PURE__*/ messageDesc(file_connectrpc_conformance_v1_service, 18); /** @@ -777,51 +838,55 @@ export const MessageContentsSchema: GenMessage = /*@__PURE__*/ * * @generated from message connectrpc.conformance.v1.StreamContents */ -export type StreamContents = Message<"connectrpc.conformance.v1.StreamContents"> & { - /** - * The messages in the stream. - * - * @generated from field: repeated connectrpc.conformance.v1.StreamContents.StreamItem items = 1; - */ - items: StreamContents_StreamItem[]; -}; +export type StreamContents = + Message<"connectrpc.conformance.v1.StreamContents"> & { + /** + * The messages in the stream. + * + * @generated from field: repeated connectrpc.conformance.v1.StreamContents.StreamItem items = 1; + */ + items: StreamContents_StreamItem[]; + }; /** * Describes the message connectrpc.conformance.v1.StreamContents. * Use `create(StreamContentsSchema)` to create a new message. */ -export const StreamContentsSchema: GenMessage = /*@__PURE__*/ +export const StreamContentsSchema: GenMessage = + /*@__PURE__*/ messageDesc(file_connectrpc_conformance_v1_service, 19); /** * @generated from message connectrpc.conformance.v1.StreamContents.StreamItem */ -export type StreamContents_StreamItem = Message<"connectrpc.conformance.v1.StreamContents.StreamItem"> & { - /** - * must be in the range 0 to 255. - * - * @generated from field: uint32 flags = 1; - */ - flags: number; +export type StreamContents_StreamItem = + Message<"connectrpc.conformance.v1.StreamContents.StreamItem"> & { + /** + * must be in the range 0 to 255. + * + * @generated from field: uint32 flags = 1; + */ + flags: number; - /** - * if absent use actual length of payload - * - * @generated from field: optional uint32 length = 2; - */ - length?: number; + /** + * if absent use actual length of payload + * + * @generated from field: optional uint32 length = 2; + */ + length?: number; - /** - * @generated from field: connectrpc.conformance.v1.MessageContents payload = 3; - */ - payload?: MessageContents; -}; + /** + * @generated from field: connectrpc.conformance.v1.MessageContents payload = 3; + */ + payload?: MessageContents; + }; /** * Describes the message connectrpc.conformance.v1.StreamContents.StreamItem. * Use `create(StreamContents_StreamItemSchema)` to create a new message. */ -export const StreamContents_StreamItemSchema: GenMessage = /*@__PURE__*/ +export const StreamContents_StreamItemSchema: GenMessage = + /*@__PURE__*/ messageDesc(file_connectrpc_conformance_v1_service, 19, 0); /** @@ -831,56 +896,61 @@ export const StreamContents_StreamItemSchema: GenMessage & { - /** - * If status code is not specified, it will default to a 200 response code. - * - * @generated from field: uint32 status_code = 1; - */ - statusCode: number; - - /** - * Headers to be set on the response. - * - * @generated from field: repeated connectrpc.conformance.v1.Header headers = 2; - */ - headers: Header[]; - - /** - * @generated from oneof connectrpc.conformance.v1.RawHTTPResponse.body - */ - body: { +export type RawHTTPResponse = + Message<"connectrpc.conformance.v1.RawHTTPResponse"> & { /** - * The body is a single message. + * If status code is not specified, it will default to a 200 response code. * - * @generated from field: connectrpc.conformance.v1.MessageContents unary = 3; + * @generated from field: uint32 status_code = 1; */ - value: MessageContents; - case: "unary"; - } | { + statusCode: number; + /** - * The body is a stream, encoded using a five-byte - * prefix before each item in the stream. + * Headers to be set on the response. * - * @generated from field: connectrpc.conformance.v1.StreamContents stream = 4; + * @generated from field: repeated connectrpc.conformance.v1.Header headers = 2; */ - value: StreamContents; - case: "stream"; - } | { case: undefined; value?: undefined }; + headers: Header[]; - /** - * Trailers to be set on the response. - * - * @generated from field: repeated connectrpc.conformance.v1.Header trailers = 5; - */ - trailers: Header[]; -}; + /** + * @generated from oneof connectrpc.conformance.v1.RawHTTPResponse.body + */ + body: + | { + /** + * The body is a single message. + * + * @generated from field: connectrpc.conformance.v1.MessageContents unary = 3; + */ + value: MessageContents; + case: "unary"; + } + | { + /** + * The body is a stream, encoded using a five-byte + * prefix before each item in the stream. + * + * @generated from field: connectrpc.conformance.v1.StreamContents stream = 4; + */ + value: StreamContents; + case: "stream"; + } + | { case: undefined; value?: undefined }; + + /** + * Trailers to be set on the response. + * + * @generated from field: repeated connectrpc.conformance.v1.Header trailers = 5; + */ + trailers: Header[]; + }; /** * Describes the message connectrpc.conformance.v1.RawHTTPResponse. * Use `create(RawHTTPResponseSchema)` to create a new message. */ -export const RawHTTPResponseSchema: GenMessage = /*@__PURE__*/ +export const RawHTTPResponseSchema: GenMessage = + /*@__PURE__*/ messageDesc(file_connectrpc_conformance_v1_service, 20); /** @@ -915,7 +985,7 @@ export const ConformanceService: GenService<{ methodKind: "unary"; input: typeof UnaryRequestSchema; output: typeof UnaryResponseSchema; - }, + }; /** * A server-streaming operation. The request indicates the response headers, * response messages, trailers, and an optional error to send back. The @@ -944,7 +1014,7 @@ export const ConformanceService: GenService<{ methodKind: "server_streaming"; input: typeof ServerStreamRequestSchema; output: typeof ServerStreamResponseSchema; - }, + }; /** * A client-streaming operation. The first request indicates the response * headers and trailers and also indicates either a response message or an @@ -971,7 +1041,7 @@ export const ConformanceService: GenService<{ methodKind: "client_streaming"; input: typeof ClientStreamRequestSchema; output: typeof ClientStreamResponseSchema; - }, + }; /** * A bidirectional-streaming operation. The first request indicates the response * headers, response messages, trailers, and an optional error to send back. @@ -1028,7 +1098,7 @@ export const ConformanceService: GenService<{ methodKind: "bidi_streaming"; input: typeof BidiStreamRequestSchema; output: typeof BidiStreamResponseSchema; - }, + }; /** * A unary endpoint that the server should not implement and should instead * return an unimplemented error when invoked. @@ -1039,7 +1109,7 @@ export const ConformanceService: GenService<{ methodKind: "unary"; input: typeof UnimplementedRequestSchema; output: typeof UnimplementedResponseSchema; - }, + }; /** * A unary endpoint denoted as having no side effects (i.e. idempotent). * Implementations should use an HTTP GET when invoking this endpoint and @@ -1051,7 +1121,5 @@ export const ConformanceService: GenService<{ methodKind: "unary"; input: typeof IdempotentUnaryRequestSchema; output: typeof IdempotentUnaryResponseSchema; - }, -}> = /*@__PURE__*/ - serviceDesc(file_connectrpc_conformance_v1_service, 0); - + }; +}> = /*@__PURE__*/ serviceDesc(file_connectrpc_conformance_v1_service, 0); diff --git a/packages/connect-cloudflare/conformance/gen/invoke/v1/invoke_pb.ts b/packages/connect-cloudflare/conformance/gen/invoke/v1/invoke_pb.ts index c6e08994a..969f00c1f 100644 --- a/packages/connect-cloudflare/conformance/gen/invoke/v1/invoke_pb.ts +++ b/packages/connect-cloudflare/conformance/gen/invoke/v1/invoke_pb.ts @@ -16,17 +16,32 @@ // @generated from file invoke/v1/invoke.proto (package invoke.v1, syntax proto3) /* eslint-disable */ -import type { GenFile, GenMessage, GenService } from "@bufbuild/protobuf/codegenv1"; -import { fileDesc, messageDesc, serviceDesc } from "@bufbuild/protobuf/codegenv1"; -import type { ClientCompatRequest, ClientCompatResponse } from "../../connectrpc/conformance/v1/client_compat_pb.js"; +import type { + GenFile, + GenMessage, + GenService, +} from "@bufbuild/protobuf/codegenv1"; +import { + fileDesc, + messageDesc, + serviceDesc, +} from "@bufbuild/protobuf/codegenv1"; +import type { + ClientCompatRequest, + ClientCompatResponse, +} from "../../connectrpc/conformance/v1/client_compat_pb.js"; import { file_connectrpc_conformance_v1_client_compat } from "../../connectrpc/conformance/v1/client_compat_pb.js"; import type { Message } from "@bufbuild/protobuf"; /** * Describes the file invoke/v1/invoke.proto. */ -export const file_invoke_v1_invoke: GenFile = /*@__PURE__*/ - fileDesc("ChZpbnZva2UvdjEvaW52b2tlLnByb3RvEglpbnZva2UudjEiUAoNSW52b2tlUmVxdWVzdBI/CgdyZXF1ZXN0GAEgASgLMi4uY29ubmVjdHJwYy5jb25mb3JtYW5jZS52MS5DbGllbnRDb21wYXRSZXF1ZXN0IlMKDkludm9rZVJlc3BvbnNlEkEKCHJlc3BvbnNlGAEgASgLMi8uY29ubmVjdHJwYy5jb25mb3JtYW5jZS52MS5DbGllbnRDb21wYXRSZXNwb25zZTJOCg1JbnZva2VTZXJ2aWNlEj0KBkludm9rZRIYLmludm9rZS52MS5JbnZva2VSZXF1ZXN0GhkuaW52b2tlLnYxLkludm9rZVJlc3BvbnNlYgZwcm90bzM", [file_connectrpc_conformance_v1_client_compat]); +export const file_invoke_v1_invoke: GenFile = + /*@__PURE__*/ + fileDesc( + "ChZpbnZva2UvdjEvaW52b2tlLnByb3RvEglpbnZva2UudjEiUAoNSW52b2tlUmVxdWVzdBI/CgdyZXF1ZXN0GAEgASgLMi4uY29ubmVjdHJwYy5jb25mb3JtYW5jZS52MS5DbGllbnRDb21wYXRSZXF1ZXN0IlMKDkludm9rZVJlc3BvbnNlEkEKCHJlc3BvbnNlGAEgASgLMi8uY29ubmVjdHJwYy5jb25mb3JtYW5jZS52MS5DbGllbnRDb21wYXRSZXNwb25zZTJOCg1JbnZva2VTZXJ2aWNlEj0KBkludm9rZRIYLmludm9rZS52MS5JbnZva2VSZXF1ZXN0GhkuaW52b2tlLnYxLkludm9rZVJlc3BvbnNlYgZwcm90bzM", + [file_connectrpc_conformance_v1_client_compat], + ); /** * @generated from message invoke.v1.InvokeRequest @@ -42,7 +57,8 @@ export type InvokeRequest = Message<"invoke.v1.InvokeRequest"> & { * Describes the message invoke.v1.InvokeRequest. * Use `create(InvokeRequestSchema)` to create a new message. */ -export const InvokeRequestSchema: GenMessage = /*@__PURE__*/ +export const InvokeRequestSchema: GenMessage = + /*@__PURE__*/ messageDesc(file_invoke_v1_invoke, 0); /** @@ -59,7 +75,8 @@ export type InvokeResponse = Message<"invoke.v1.InvokeResponse"> & { * Describes the message invoke.v1.InvokeResponse. * Use `create(InvokeResponseSchema)` to create a new message. */ -export const InvokeResponseSchema: GenMessage = /*@__PURE__*/ +export const InvokeResponseSchema: GenMessage = + /*@__PURE__*/ messageDesc(file_invoke_v1_invoke, 1); /** @@ -73,7 +90,5 @@ export const InvokeService: GenService<{ methodKind: "unary"; input: typeof InvokeRequestSchema; output: typeof InvokeResponseSchema; - }, -}> = /*@__PURE__*/ - serviceDesc(file_invoke_v1_invoke, 0); - + }; +}> = /*@__PURE__*/ serviceDesc(file_invoke_v1_invoke, 0); diff --git a/packages/connect-cloudflare/conformance/server.ts b/packages/connect-cloudflare/conformance/server.ts index 3f02b72bd..b72ca947c 100755 --- a/packages/connect-cloudflare/conformance/server.ts +++ b/packages/connect-cloudflare/conformance/server.ts @@ -1,5 +1,3 @@ -#!/usr/bin/env -S npx tsx - // Copyright 2021-2024 The Connect Authors // // Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/packages/connect-cloudflare/package.json b/packages/connect-cloudflare/package.json index 18784097e..fda6e24df 100644 --- a/packages/connect-cloudflare/package.json +++ b/packages/connect-cloudflare/package.json @@ -3,10 +3,11 @@ "private": true, "type": "module", "scripts": { - "generate": "buf generate", - "conformance": "tsc --noEmit && npm run conformance:server && npm run conformance:client", - "conformance:server": "npx wrangler deploy -c ./conformance/wrangler-server.toml && connectconformance --mode server --conf ./conformance/conformance-cloudflare-server.yaml -v ./conformance/server.ts", - "conformance:client": "npx wrangler deploy -c ./conformance/wrangler-client.toml && connectconformance --mode client --conf ./conformance/conformance-cloudflare-client.yaml -v --known-failing @./conformance/known-failing-client.txt --bind 0.0.0.0 --port 8181 --cert $CLOUDFLARE_WORKERS_REFERENCE_SERVER_CERT --key $CLOUDFLARE_WORKERS_REFERENCE_SERVER_KEY -- ./conformance/client.ts" + "conformance:server": "npx wrangler deploy -c ./conformance/wrangler-server.toml && connectconformance --mode server --conf ./conformance/conformance-cloudflare-server.yaml -v tsx ./conformance/server.ts", + "conformance:client": "npx wrangler deploy -c ./conformance/wrangler-client.toml && connectconformance --mode client --conf ./conformance/conformance-cloudflare-client.yaml -v --known-failing @./conformance/known-failing-client.txt --bind 0.0.0.0 --port 8181 --cert $CLOUDFLARE_WORKERS_REFERENCE_SERVER_CERT --key $CLOUDFLARE_WORKERS_REFERENCE_SERVER_KEY -- tsx ./conformance/client.ts", + "format": "prettier --write --ignore-unknown '.'", + "license-header": "license-header", + "lint": "eslint --max-warnings 0 ." }, "dependencies": { "@bufbuild/protobuf": "^2.0.0", @@ -14,10 +15,9 @@ "@connectrpc/connect-node": "2.0.0-alpha.1" }, "devDependencies": { - "@cloudflare/workers-types": "^4.20240725.0", - "wrangler": "^3.68.0", - "tsx": "^4.16.5", - "@connectrpc/connect-conformance": "^2.0.0-alpha.1", - "@bufbuild/protoc-gen-es": "^2.0.0" + "@cloudflare/workers-types": "^4.20240821.1", + "wrangler": "^3.73.0", + "tsx": "^4.19.0", + "@connectrpc/connect-conformance": "^2.0.0-alpha.1" } } diff --git a/packages/connect-cloudflare/turbo.json b/packages/connect-cloudflare/turbo.json new file mode 100644 index 000000000..d18ba31c8 --- /dev/null +++ b/packages/connect-cloudflare/turbo.json @@ -0,0 +1,16 @@ +{ + "$schema": "https://turbo.build/schema.json", + "extends": ["//"], + "tasks": { + "conformance:client": { + "cache": false, + "dependsOn": ["^build"], + "env": ["CLOUDFLARE_*"] + }, + "conformance:server": { + "cache": false, + "dependsOn": ["^build"], + "env": ["CLOUDFLARE_*"] + } + } +} diff --git a/packages/connect-conformance/README.md b/packages/connect-conformance/README.md index ab4f861f5..5d6948633 100644 --- a/packages/connect-conformance/README.md +++ b/packages/connect-conformance/README.md @@ -6,11 +6,11 @@ this repository. For documentation on the conformance tests, see the repository [here](https://github.com/connectrpc/conformance?tab=readme-ov-file#documentation). Note that this package does not run any conformance tests itself, but instead exports functionality to be used by other -packages, such as `connect-node`, `connect-web`, etc. +packages, such as `@connectprc/connect-node`, `@connectprc/connect-web`, etc. ## Updating the conformance version To update the version of the conformance runner and protos, change the version in the following places: -* The `generate` command of this package's `package.json` file. -* The `version` constant inside `node/conformance.ts`. +- The `generate` command of this package's `package.json` file. +- The `version` constant inside `node/conformance.ts`. diff --git a/packages/connect-conformance/package.json b/packages/connect-conformance/package.json index 973088965..fc0ea88cd 100644 --- a/packages/connect-conformance/package.json +++ b/packages/connect-conformance/package.json @@ -14,12 +14,17 @@ "connectconformance": "bin/connectconformance.cjs" }, "scripts": { - "generate": "buf generate buf.build/connectrpc/conformance:v1.0.2", - "clean": "rm -rf ./dist/*", + "generate": "buf generate buf.build/connectrpc/conformance:v1.0.3", + "postgenerate": "license-header src/gen", + "prebuild": "rm -rf ./dist/*", "build": "npm run build:cjs && npm run build:esm", "postbuild": "connectconformance --version", "build:cjs": "tsc --project tsconfig.json --module commonjs --verbatimModuleSyntax false --moduleResolution node10 --outDir ./dist/cjs --declaration --declarationDir ./dist/cjs && echo >./dist/cjs/src/package.json '{\"type\":\"commonjs\"}'", - "build:esm": "tsc --project tsconfig.json --outDir ./dist/esm --declaration --declarationDir ./dist/esm" + "build:esm": "tsc --project tsconfig.json --outDir ./dist/esm --declaration --declarationDir ./dist/esm", + "format": "prettier --write --ignore-unknown '.' '!dist' '!src/gen'", + "license-header": "license-header", + "lint": "eslint --max-warnings 0 .", + "attw": "attw --pack" }, "dependencies": { "@bufbuild/protobuf": "^2.0.0", @@ -29,8 +34,8 @@ "undici": "^5.28.4" }, "devDependencies": { - "@bufbuild/buf": "^1.36.0", "@bufbuild/protoc-gen-es": "^2.0.0", + "@bufbuild/buf": "^1.39.0", "@types/node-forge": "^1.3.9", "@types/tar-stream": "^3.1.3", "@types/debug": "^4.1.12" diff --git a/packages/connect-conformance/src/callback-client.ts b/packages/connect-conformance/src/callback-client.ts index 7dd989182..6a1620e44 100644 --- a/packages/connect-conformance/src/callback-client.ts +++ b/packages/connect-conformance/src/callback-client.ts @@ -12,12 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -import { createCallbackClient, ConnectError } from "@connectrpc/connect"; -import type { - CallOptions, - CallbackClient, - Transport, -} from "@connectrpc/connect"; +import { createCallbackClient, ConnectError, Code } from "@connectrpc/connect"; +import type { CallbackClient, Transport } from "@connectrpc/connect"; import { ClientResponseResultSchema } from "./gen/connectrpc/conformance/v1/client_compat_pb.js"; import type { ClientCompatRequest, @@ -29,25 +25,23 @@ import { UnimplementedRequestSchema, IdempotentUnaryRequestSchema, ConformanceService, -} from "./gen/connectrpc/conformance/v1/service_pb.js"; -import type { - Header as ConformanceHeader, - ConformancePayload, - UnaryResponse, - IdempotentUnaryResponse, + ConformancePayloadSchema, } from "./gen/connectrpc/conformance/v1/service_pb.js"; import { convertToProtoError, convertToProtoHeaders, - appendProtoHeaders, wait, getCancelTiming, + getRequestHeaders, + getSingleRequestMessage, + setClientErrorResult, } from "./protocol.js"; import { create } from "@bufbuild/protobuf"; -import { anyUnpack } from "@bufbuild/protobuf/wkt"; type ConformanceClient = CallbackClient; +const emptyPayload = create(ConformancePayloadSchema); + export function invokeWithCallbackClient( transport: Transport, req: ClientCompatRequest, @@ -70,199 +64,138 @@ export function invokeWithCallbackClient( async function unary( client: ConformanceClient, - req: ClientCompatRequest, + compatRequest: ClientCompatRequest, idempotent: boolean = false, ) { - if (req.requestMessages.length !== 1) { - throw new Error("Unary method requires exactly one request message"); - } - const msg = req.requestMessages[0]; - const uReq = anyUnpack( - msg, - idempotent ? IdempotentUnaryRequestSchema : UnaryRequestSchema, - ); - if (!uReq) { - throw new Error("Could not unpack request message to unary request"); - } - const reqHeader = new Headers(); - appendProtoHeaders(reqHeader, req.requestHeaders); - let error: ConnectError | undefined = undefined; - let resHeaders: ConformanceHeader[] = []; - let resTrailers: ConformanceHeader[] = []; - const payloads: ConformancePayload[] = []; - - let call: ( - req: NonNullable, - callback: ( - error: ConnectError | undefined, - response: UnaryResponse | IdempotentUnaryResponse, - ) => void, - options?: CallOptions | undefined, - ) => () => void = client.unary; - if (idempotent) { - call = client.idempotentUnary; - } - - await wait(req.requestDelayMs); + await wait(compatRequest.requestDelayMs); + const result = create(ClientResponseResultSchema); return new Promise((resolve) => { - call( - uReq, - (err, uRes) => { + const call = idempotent ? client.idempotentUnary : client.unary; + let clientCancelled = false; + const clientCancelFn = call( + getSingleRequestMessage( + compatRequest, + idempotent ? IdempotentUnaryRequestSchema : UnaryRequestSchema, + ), + (err, response) => { + // Callback clients swallow client triggered cancellations and never + // call the callback. This will trigger the global error handler and + // fail the process. + if (clientCancelled) { + throw new Error("Aborted requests should not trigger the callback"); + } if (err !== undefined) { - error = ConnectError.from(err); - // We can't distinguish between headers and trailers here, so we just - // add the metadata to both. - // - // But if the headers are already set, we don't need to overwrite them. - resHeaders = - resHeaders.length === 0 - ? convertToProtoHeaders(error.metadata) - : resHeaders; - resTrailers = convertToProtoHeaders(error.metadata); + setClientErrorResult(result, err); } else { - payloads.push(uRes.payload!); + result.payloads.push(response.payload ?? emptyPayload); } - resolve( - create(ClientResponseResultSchema, { - payloads: payloads, - responseHeaders: resHeaders, - responseTrailers: resTrailers, - error: convertToProtoError(error), - }), - ); + resolve(result); }, { - headers: reqHeader, + headers: getRequestHeaders(compatRequest), onHeader(headers) { - resHeaders = convertToProtoHeaders(headers); + result.responseHeaders = convertToProtoHeaders(headers); }, onTrailer(trailers) { - resTrailers = convertToProtoHeaders(trailers); + result.responseTrailers = convertToProtoHeaders(trailers); }, }, ); + const { afterCloseSendMs } = getCancelTiming(compatRequest); + if (afterCloseSendMs >= 0) { + setTimeout(() => { + clientCancelled = true; + clientCancelFn(); + // Callback clients swallow client triggered cancellations and never + // call the callback. We report a fake error to the test runner to let + // it know that the call was cancelled. + result.error = convertToProtoError( + new ConnectError("client cancelled", Code.Canceled), + ); + resolve(result); + }, afterCloseSendMs); + } }); } async function serverStream( client: ConformanceClient, - req: ClientCompatRequest, + compatRequest: ClientCompatRequest, ) { - if (req.requestMessages.length !== 1) { - throw new Error("ServerStream method requires exactly one request message"); - } - const msg = req.requestMessages[0]; - const uReq = anyUnpack(msg, ServerStreamRequestSchema); - if (!uReq) { - throw new Error( - "Could not unpack request message to server stream request", - ); - } - const reqHeader = new Headers(); - appendProtoHeaders(reqHeader, req.requestHeaders); - let error: ConnectError | undefined = undefined; - let resHeaders: ConformanceHeader[] = []; - let resTrailers: ConformanceHeader[] = []; - const payloads: ConformancePayload[] = []; - const cancelTiming = getCancelTiming(req); - let count = 0; - - await wait(req.requestDelayMs); + const cancelTiming = getCancelTiming(compatRequest); + await wait(compatRequest.requestDelayMs); + const result = create(ClientResponseResultSchema); return new Promise((resolve) => { - const cancelFn = client.serverStream( - uReq, - (uResp) => { - if (cancelTiming.afterNumResponses === 0) { - cancelFn(); - } - payloads.push(uResp.payload!); - count++; - if (count === cancelTiming.afterNumResponses) { - cancelFn(); + let clientCancelled = false; + const clientCancelFn = client.serverStream( + getSingleRequestMessage(compatRequest, ServerStreamRequestSchema), + (response) => { + result.payloads.push(response.payload ?? emptyPayload); + if (result.payloads.length === cancelTiming.afterNumResponses) { + clientCancelled = true; + clientCancelFn(); } }, (err) => { + // Callback clients call the closeCallback without an error for client + // triggered cancellation. We report a fake error to the test runner to let + // it know that the call was cancelled. + if (clientCancelled) { + if (err !== undefined) { + throw new Error( + "Aborted requests should not trigger the closeCallback with an error", + ); + } + result.error = convertToProtoError( + new ConnectError("client cancelled", Code.Canceled), + ); + } if (err !== undefined) { - error = ConnectError.from(err); - // We can't distinguish between headers and trailers here, so we just - // add the metadata to both. - // - // But if the headers are already set, we don't need to overwrite them. - resHeaders = - resHeaders.length === 0 - ? convertToProtoHeaders(error.metadata) - : resHeaders; - resTrailers = convertToProtoHeaders(error.metadata); + setClientErrorResult(result, err); } - resolve( - create(ClientResponseResultSchema, { - responseHeaders: resHeaders, - responseTrailers: resTrailers, - payloads: payloads, - error: convertToProtoError(error), - }), - ); + resolve(result); }, { - headers: reqHeader, + headers: getRequestHeaders(compatRequest), onHeader(headers) { - resHeaders = convertToProtoHeaders(headers); + result.responseHeaders = convertToProtoHeaders(headers); }, onTrailer(trailers) { - resTrailers = convertToProtoHeaders(trailers); + result.responseTrailers = convertToProtoHeaders(trailers); }, }, ); + if (cancelTiming.afterCloseSendMs >= 0) { + setTimeout(() => { + clientCancelled = true; + clientCancelFn(); + }, cancelTiming.afterCloseSendMs); + } }); } async function unimplemented( client: ConformanceClient, - req: ClientCompatRequest, + compatRequest: ClientCompatRequest, ) { - const msg = req.requestMessages[0]; - const unReq = anyUnpack(msg, UnimplementedRequestSchema); - if (!unReq) { - throw new Error("Could not unpack request message to unary request"); - } - const reqHeader = new Headers(); - appendProtoHeaders(reqHeader, req.requestHeaders); - let error: ConnectError | undefined = undefined; - let resHeaders: ConformanceHeader[] = []; - let resTrailers: ConformanceHeader[] = []; - + const result = create(ClientResponseResultSchema); return new Promise((resolve) => { client.unimplemented( - unReq, + getSingleRequestMessage(compatRequest, UnimplementedRequestSchema), // eslint-disable-next-line @typescript-eslint/no-unused-vars (err, _) => { if (err !== undefined) { - error = ConnectError.from(err); - // We can't distinguish between headers and trailers here, so we just - // add the metadata to both. - // - // But if the headers are already set, we don't need to overwrite them. - resHeaders = - resHeaders.length === 0 - ? convertToProtoHeaders(error.metadata) - : resHeaders; - resTrailers = convertToProtoHeaders(error.metadata); + setClientErrorResult(result, err); } - resolve( - create(ClientResponseResultSchema, { - responseHeaders: resHeaders, - responseTrailers: resTrailers, - error: convertToProtoError(error), - }), - ); + resolve(result); }, { - headers: reqHeader, + headers: getRequestHeaders(compatRequest), onHeader(headers) { - resHeaders = convertToProtoHeaders(headers); + result.responseHeaders = convertToProtoHeaders(headers); }, onTrailer(trailers) { - resTrailers = convertToProtoHeaders(trailers); + result.responseTrailers = convertToProtoHeaders(trailers); }, }, ); diff --git a/packages/connect-conformance/src/conformance.ts b/packages/connect-conformance/src/conformance.ts index 4df4ce74a..6854c7300 100644 --- a/packages/connect-conformance/src/conformance.ts +++ b/packages/connect-conformance/src/conformance.ts @@ -29,20 +29,18 @@ import { execFileSync } from "node:child_process"; import { fetch } from "undici"; import { scripts } from "../package.json"; -// Extract conformance runner version from the `generate` script -const [, version] = /conformance:(v\d+\.\d+\.\d+)/.exec(scripts.generate) ?? [ - "?", -]; - -const downloadUrl = `https://github.com/connectrpc/conformance/releases/download/${version}`; - export async function run() { - const { archive, bin } = getArtifactNameForEnv(); - const tempDir = getTempDir(); + // Extract conformance runner version from the `generate` script + const [, version] = /conformance:(v\d+\.\d+\.\d+)/.exec(scripts.generate) ?? [ + "?", + ]; + const { archive, bin } = getArtifactNameForEnv(version); + const tempDir = getTempDir(version); const binPath = joinPath(tempDir, bin); if (!existsSync(binPath)) { + const downloadUrl = `https://github.com/connectrpc/conformance/releases/download/${version}/${archive}`; const archivePath = joinPath(tempDir, archive); - await download(`${downloadUrl}/${archive}`, archivePath); + await download(downloadUrl, archivePath); await extractBin(archivePath, binPath); } execFileSync(binPath, process.argv.slice(2), { @@ -101,15 +99,21 @@ async function extractBin(archivePath: string, binPath: string) { ); } -function getTempDir() { - const tempDir = joinPath(process.env["TEMP"] ?? os.tmpdir(), "conformance"); +function getTempDir(version: string) { + const tempDir = joinPath( + process.env["TEMP"] ?? os.tmpdir(), + `conformance-${version}`, + ); if (!existsSync(tempDir)) { mkdirSync(tempDir, { recursive: true }); } return tempDir; } -function getArtifactNameForEnv(): { archive: string; bin: string } { +function getArtifactNameForEnv(version: string): { + archive: string; + bin: string; +} { let build = ""; let ext = ".tar.gz"; let bin = "connectconformance"; diff --git a/packages/connect-conformance/src/gen/connectrpc/conformance/v1/client_compat_pb.ts b/packages/connect-conformance/src/gen/connectrpc/conformance/v1/client_compat_pb.ts index 4eb9377dd..05834a748 100644 --- a/packages/connect-conformance/src/gen/connectrpc/conformance/v1/client_compat_pb.ts +++ b/packages/connect-conformance/src/gen/connectrpc/conformance/v1/client_compat_pb.ts @@ -1,4 +1,4 @@ -// Copyright 2023-2024 The Connect Authors +// Copyright 2021-2024 The Connect Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -142,7 +142,8 @@ export type ClientCompatRequest = Message<"connectrpc.conformance.v1.ClientCompa method?: string; /** - * The stream type of `method` (i.e. Unary, Client-Streaming, Server-Streaming, Full Duplex Bidi, or Half Duplex Bidi). + * The stream type of `method` (i.e. unary, client stream, server stream, full-duplex bidi + * stream, or half-duplex bidi stream). * When writing test cases, this is a required field. * * @generated from field: connectrpc.conformance.v1.StreamType stream_type = 13; @@ -172,9 +173,9 @@ export type ClientCompatRequest = Message<"connectrpc.conformance.v1.ClientCompa * The actual request messages that will sent to the server. * The type URL for all entries should be equal to the request type of the * method. - * There must be exactly one for unary and server-stream methods but - * can be zero or more for client- and bidi-stream methods. - * For client- and bidi-stream methods, all entries will have the + * There must be exactly one for unary and server stream methods but + * can be zero or more for client and bidi stream methods. + * For client and bidi stream methods, all entries will have the * same type URL. * * @generated from field: repeated google.protobuf.Any request_messages = 16; @@ -191,7 +192,7 @@ export type ClientCompatRequest = Message<"connectrpc.conformance.v1.ClientCompa /** * Wait this many milliseconds before sending a request message. - * For client- or bidi-streaming requests, this delay should be + * For client or bidi stream methods, this delay should be * applied before each request sent. * * @generated from field: uint32 request_delay_ms = 18; @@ -246,8 +247,9 @@ export type ClientCompatRequest_Cancel = Message<"connectrpc.conformance.v1.Clie /** * When present, the client should cancel *instead of* * closing the send side of the stream, after all requests - * have been sent. This applies only to client and bidi - * stream RPCs. + * have been sent. + * + * This applies only to client and bidi stream RPCs. * * @generated from field: google.protobuf.Empty before_close_send = 1; */ @@ -259,6 +261,20 @@ export type ClientCompatRequest_Cancel = Message<"connectrpc.conformance.v1.Clie * milliseconds after closing the send side of the stream * and then cancel. * + * This applies to all types of RPCs. + * + * For unary and server stream RPCs, where the API usually + * does not allow explicitly closing the send side, the + * cancellation should be done immediately after invoking + * the RPC (which should implicitly send the one-and-only + * request and then close the send-side). + * + * For APIs where unary RPCs block until the response + * is received, there is no point after the request is + * sent but before a response is received to cancel. So + * the client must arrange for the RPC to be canceled + * asynchronously before invoking the blocking unary call. + * * @generated from field: uint32 after_close_send_ms = 2; */ value: number; @@ -267,6 +283,8 @@ export type ClientCompatRequest_Cancel = Message<"connectrpc.conformance.v1.Clie /** * When present, the client should cancel right after * reading this number of response messages from the stream. + * When present, this will be greater than zero. + * * This applies only to server and bidi stream RPCs. * * @generated from field: uint32 after_num_responses = 3; @@ -348,8 +366,8 @@ export type ClientResponseResult = Message<"connectrpc.conformance.v1.ClientResp /** * Servers should echo back payloads that they received as part of the request. * This field should contain all the payloads the server echoed back. Note that - * There will be zero-to-one for unary and client-stream methods and - * zero-to-many for server- and bidi-stream methods. + * There will be zero-to-one for unary and client stream methods and + * zero-to-many for server and bidi stream methods. * * @generated from field: repeated connectrpc.conformance.v1.ConformancePayload payloads = 2; */ diff --git a/packages/connect-conformance/src/gen/connectrpc/conformance/v1/config_pb.ts b/packages/connect-conformance/src/gen/connectrpc/conformance/v1/config_pb.ts index 619795ea2..265bb4d7d 100644 --- a/packages/connect-conformance/src/gen/connectrpc/conformance/v1/config_pb.ts +++ b/packages/connect-conformance/src/gen/connectrpc/conformance/v1/config_pb.ts @@ -1,4 +1,4 @@ -// Copyright 2023-2024 The Connect Authors +// Copyright 2021-2024 The Connect Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -24,7 +24,7 @@ import type { Message } from "@bufbuild/protobuf"; * Describes the file connectrpc/conformance/v1/config.proto. */ export const file_connectrpc_conformance_v1_config: GenFile = /*@__PURE__*/ - fileDesc("CiZjb25uZWN0cnBjL2NvbmZvcm1hbmNlL3YxL2NvbmZpZy5wcm90bxIZY29ubmVjdHJwYy5jb25mb3JtYW5jZS52MSK7AQoGQ29uZmlnEjUKCGZlYXR1cmVzGAEgASgLMiMuY29ubmVjdHJwYy5jb25mb3JtYW5jZS52MS5GZWF0dXJlcxI8Cg1pbmNsdWRlX2Nhc2VzGAIgAygLMiUuY29ubmVjdHJwYy5jb25mb3JtYW5jZS52MS5Db25maWdDYXNlEjwKDWV4Y2x1ZGVfY2FzZXMYAyADKAsyJS5jb25uZWN0cnBjLmNvbmZvcm1hbmNlLnYxLkNvbmZpZ0Nhc2Ui5QUKCEZlYXR1cmVzEjgKCHZlcnNpb25zGAEgAygOMiYuY29ubmVjdHJwYy5jb25mb3JtYW5jZS52MS5IVFRQVmVyc2lvbhI2Cglwcm90b2NvbHMYAiADKA4yIy5jb25uZWN0cnBjLmNvbmZvcm1hbmNlLnYxLlByb3RvY29sEjAKBmNvZGVjcxgDIAMoDjIgLmNvbm5lY3RycGMuY29uZm9ybWFuY2UudjEuQ29kZWMSPAoMY29tcHJlc3Npb25zGAQgAygOMiYuY29ubmVjdHJwYy5jb25mb3JtYW5jZS52MS5Db21wcmVzc2lvbhI7CgxzdHJlYW1fdHlwZXMYBSADKA4yJS5jb25uZWN0cnBjLmNvbmZvcm1hbmNlLnYxLlN0cmVhbVR5cGUSGQoMc3VwcG9ydHNfaDJjGAYgASgISACIAQESGQoMc3VwcG9ydHNfdGxzGAcgASgISAGIAQESJgoZc3VwcG9ydHNfdGxzX2NsaWVudF9jZXJ0cxgIIAEoCEgCiAEBEh4KEXN1cHBvcnRzX3RyYWlsZXJzGAkgASgISAOIAQESMQokc3VwcG9ydHNfaGFsZl9kdXBsZXhfYmlkaV9vdmVyX2h0dHAxGAogASgISASIAQESIQoUc3VwcG9ydHNfY29ubmVjdF9nZXQYCyABKAhIBYgBARIrCh5zdXBwb3J0c19tZXNzYWdlX3JlY2VpdmVfbGltaXQYDCABKAhIBogBAUIPCg1fc3VwcG9ydHNfaDJjQg8KDV9zdXBwb3J0c190bHNCHAoaX3N1cHBvcnRzX3Rsc19jbGllbnRfY2VydHNCFAoSX3N1cHBvcnRzX3RyYWlsZXJzQicKJV9zdXBwb3J0c19oYWxmX2R1cGxleF9iaWRpX292ZXJfaHR0cDFCFwoVX3N1cHBvcnRzX2Nvbm5lY3RfZ2V0QiEKH19zdXBwb3J0c19tZXNzYWdlX3JlY2VpdmVfbGltaXQiygMKCkNvbmZpZ0Nhc2USNwoHdmVyc2lvbhgBIAEoDjImLmNvbm5lY3RycGMuY29uZm9ybWFuY2UudjEuSFRUUFZlcnNpb24SNQoIcHJvdG9jb2wYAiABKA4yIy5jb25uZWN0cnBjLmNvbmZvcm1hbmNlLnYxLlByb3RvY29sEi8KBWNvZGVjGAMgASgOMiAuY29ubmVjdHJwYy5jb25mb3JtYW5jZS52MS5Db2RlYxI7Cgtjb21wcmVzc2lvbhgEIAEoDjImLmNvbm5lY3RycGMuY29uZm9ybWFuY2UudjEuQ29tcHJlc3Npb24SOgoLc3RyZWFtX3R5cGUYBSABKA4yJS5jb25uZWN0cnBjLmNvbmZvcm1hbmNlLnYxLlN0cmVhbVR5cGUSFAoHdXNlX3RscxgGIAEoCEgAiAEBEiEKFHVzZV90bHNfY2xpZW50X2NlcnRzGAcgASgISAGIAQESJgoZdXNlX21lc3NhZ2VfcmVjZWl2ZV9saW1pdBgIIAEoCEgCiAEBQgoKCF91c2VfdGxzQhcKFV91c2VfdGxzX2NsaWVudF9jZXJ0c0IcChpfdXNlX21lc3NhZ2VfcmVjZWl2ZV9saW1pdCIlCghUTFNDcmVkcxIMCgRjZXJ0GAEgASgMEgsKA2tleRgCIAEoDCpnCgtIVFRQVmVyc2lvbhIcChhIVFRQX1ZFUlNJT05fVU5TUEVDSUZJRUQQABISCg5IVFRQX1ZFUlNJT05fMRABEhIKDkhUVFBfVkVSU0lPTl8yEAISEgoOSFRUUF9WRVJTSU9OXzMQAypkCghQcm90b2NvbBIYChRQUk9UT0NPTF9VTlNQRUNJRklFRBAAEhQKEFBST1RPQ09MX0NPTk5FQ1QQARIRCg1QUk9UT0NPTF9HUlBDEAISFQoRUFJPVE9DT0xfR1JQQ19XRUIQAypPCgVDb2RlYxIVChFDT0RFQ19VTlNQRUNJRklFRBAAEg8KC0NPREVDX1BST1RPEAESDgoKQ09ERUNfSlNPThACEg4KCkNPREVDX1RFWFQQAyq1AQoLQ29tcHJlc3Npb24SGwoXQ09NUFJFU1NJT05fVU5TUEVDSUZJRUQQABIYChRDT01QUkVTU0lPTl9JREVOVElUWRABEhQKEENPTVBSRVNTSU9OX0daSVAQAhISCg5DT01QUkVTU0lPTl9CUhADEhQKEENPTVBSRVNTSU9OX1pTVEQQBBIXChNDT01QUkVTU0lPTl9ERUZMQVRFEAUSFgoSQ09NUFJFU1NJT05fU05BUFBZEAYq0AEKClN0cmVhbVR5cGUSGwoXU1RSRUFNX1RZUEVfVU5TUEVDSUZJRUQQABIVChFTVFJFQU1fVFlQRV9VTkFSWRABEh0KGVNUUkVBTV9UWVBFX0NMSUVOVF9TVFJFQU0QAhIdChlTVFJFQU1fVFlQRV9TRVJWRVJfU1RSRUFNEAMSJwojU1RSRUFNX1RZUEVfSEFMRl9EVVBMRVhfQklESV9TVFJFQU0QBBInCiNTVFJFQU1fVFlQRV9GVUxMX0RVUExFWF9CSURJX1NUUkVBTRAFKpQDCgRDb2RlEhQKEENPREVfVU5TUEVDSUZJRUQQABIRCg1DT0RFX0NBTkNFTEVEEAESEAoMQ09ERV9VTktOT1dOEAISGQoVQ09ERV9JTlZBTElEX0FSR1VNRU5UEAMSGgoWQ09ERV9ERUFETElORV9FWENFRURFRBAEEhIKDkNPREVfTk9UX0ZPVU5EEAUSFwoTQ09ERV9BTFJFQURZX0VYSVNUUxAGEhoKFkNPREVfUEVSTUlTU0lPTl9ERU5JRUQQBxIbChdDT0RFX1JFU09VUkNFX0VYSEFVU1RFRBAIEhwKGENPREVfRkFJTEVEX1BSRUNPTkRJVElPThAJEhAKDENPREVfQUJPUlRFRBAKEhUKEUNPREVfT1VUX09GX1JBTkdFEAsSFgoSQ09ERV9VTklNUExFTUVOVEVEEAwSEQoNQ09ERV9JTlRFUk5BTBANEhQKEENPREVfVU5BVkFJTEFCTEUQDhISCg5DT0RFX0RBVEFfTE9TUxAPEhgKFENPREVfVU5BVVRIRU5USUNBVEVEEBBiBnByb3RvMw"); + fileDesc("CiZjb25uZWN0cnBjL2NvbmZvcm1hbmNlL3YxL2NvbmZpZy5wcm90bxIZY29ubmVjdHJwYy5jb25mb3JtYW5jZS52MSK7AQoGQ29uZmlnEjUKCGZlYXR1cmVzGAEgASgLMiMuY29ubmVjdHJwYy5jb25mb3JtYW5jZS52MS5GZWF0dXJlcxI8Cg1pbmNsdWRlX2Nhc2VzGAIgAygLMiUuY29ubmVjdHJwYy5jb25mb3JtYW5jZS52MS5Db25maWdDYXNlEjwKDWV4Y2x1ZGVfY2FzZXMYAyADKAsyJS5jb25uZWN0cnBjLmNvbmZvcm1hbmNlLnYxLkNvbmZpZ0Nhc2Ui5QUKCEZlYXR1cmVzEjgKCHZlcnNpb25zGAEgAygOMiYuY29ubmVjdHJwYy5jb25mb3JtYW5jZS52MS5IVFRQVmVyc2lvbhI2Cglwcm90b2NvbHMYAiADKA4yIy5jb25uZWN0cnBjLmNvbmZvcm1hbmNlLnYxLlByb3RvY29sEjAKBmNvZGVjcxgDIAMoDjIgLmNvbm5lY3RycGMuY29uZm9ybWFuY2UudjEuQ29kZWMSPAoMY29tcHJlc3Npb25zGAQgAygOMiYuY29ubmVjdHJwYy5jb25mb3JtYW5jZS52MS5Db21wcmVzc2lvbhI7CgxzdHJlYW1fdHlwZXMYBSADKA4yJS5jb25uZWN0cnBjLmNvbmZvcm1hbmNlLnYxLlN0cmVhbVR5cGUSGQoMc3VwcG9ydHNfaDJjGAYgASgISACIAQESGQoMc3VwcG9ydHNfdGxzGAcgASgISAGIAQESJgoZc3VwcG9ydHNfdGxzX2NsaWVudF9jZXJ0cxgIIAEoCEgCiAEBEh4KEXN1cHBvcnRzX3RyYWlsZXJzGAkgASgISAOIAQESMQokc3VwcG9ydHNfaGFsZl9kdXBsZXhfYmlkaV9vdmVyX2h0dHAxGAogASgISASIAQESIQoUc3VwcG9ydHNfY29ubmVjdF9nZXQYCyABKAhIBYgBARIrCh5zdXBwb3J0c19tZXNzYWdlX3JlY2VpdmVfbGltaXQYDCABKAhIBogBAUIPCg1fc3VwcG9ydHNfaDJjQg8KDV9zdXBwb3J0c190bHNCHAoaX3N1cHBvcnRzX3Rsc19jbGllbnRfY2VydHNCFAoSX3N1cHBvcnRzX3RyYWlsZXJzQicKJV9zdXBwb3J0c19oYWxmX2R1cGxleF9iaWRpX292ZXJfaHR0cDFCFwoVX3N1cHBvcnRzX2Nvbm5lY3RfZ2V0QiEKH19zdXBwb3J0c19tZXNzYWdlX3JlY2VpdmVfbGltaXQiygMKCkNvbmZpZ0Nhc2USNwoHdmVyc2lvbhgBIAEoDjImLmNvbm5lY3RycGMuY29uZm9ybWFuY2UudjEuSFRUUFZlcnNpb24SNQoIcHJvdG9jb2wYAiABKA4yIy5jb25uZWN0cnBjLmNvbmZvcm1hbmNlLnYxLlByb3RvY29sEi8KBWNvZGVjGAMgASgOMiAuY29ubmVjdHJwYy5jb25mb3JtYW5jZS52MS5Db2RlYxI7Cgtjb21wcmVzc2lvbhgEIAEoDjImLmNvbm5lY3RycGMuY29uZm9ybWFuY2UudjEuQ29tcHJlc3Npb24SOgoLc3RyZWFtX3R5cGUYBSABKA4yJS5jb25uZWN0cnBjLmNvbmZvcm1hbmNlLnYxLlN0cmVhbVR5cGUSFAoHdXNlX3RscxgGIAEoCEgAiAEBEiEKFHVzZV90bHNfY2xpZW50X2NlcnRzGAcgASgISAGIAQESJgoZdXNlX21lc3NhZ2VfcmVjZWl2ZV9saW1pdBgIIAEoCEgCiAEBQgoKCF91c2VfdGxzQhcKFV91c2VfdGxzX2NsaWVudF9jZXJ0c0IcChpfdXNlX21lc3NhZ2VfcmVjZWl2ZV9saW1pdCIlCghUTFNDcmVkcxIMCgRjZXJ0GAEgASgMEgsKA2tleRgCIAEoDCpnCgtIVFRQVmVyc2lvbhIcChhIVFRQX1ZFUlNJT05fVU5TUEVDSUZJRUQQABISCg5IVFRQX1ZFUlNJT05fMRABEhIKDkhUVFBfVkVSU0lPTl8yEAISEgoOSFRUUF9WRVJTSU9OXzMQAypkCghQcm90b2NvbBIYChRQUk9UT0NPTF9VTlNQRUNJRklFRBAAEhQKEFBST1RPQ09MX0NPTk5FQ1QQARIRCg1QUk9UT0NPTF9HUlBDEAISFQoRUFJPVE9DT0xfR1JQQ19XRUIQAypTCgVDb2RlYxIVChFDT0RFQ19VTlNQRUNJRklFRBAAEg8KC0NPREVDX1BST1RPEAESDgoKQ09ERUNfSlNPThACEhIKCkNPREVDX1RFWFQQAxoCCAEqtQEKC0NvbXByZXNzaW9uEhsKF0NPTVBSRVNTSU9OX1VOU1BFQ0lGSUVEEAASGAoUQ09NUFJFU1NJT05fSURFTlRJVFkQARIUChBDT01QUkVTU0lPTl9HWklQEAISEgoOQ09NUFJFU1NJT05fQlIQAxIUChBDT01QUkVTU0lPTl9aU1REEAQSFwoTQ09NUFJFU1NJT05fREVGTEFURRAFEhYKEkNPTVBSRVNTSU9OX1NOQVBQWRAGKtABCgpTdHJlYW1UeXBlEhsKF1NUUkVBTV9UWVBFX1VOU1BFQ0lGSUVEEAASFQoRU1RSRUFNX1RZUEVfVU5BUlkQARIdChlTVFJFQU1fVFlQRV9DTElFTlRfU1RSRUFNEAISHQoZU1RSRUFNX1RZUEVfU0VSVkVSX1NUUkVBTRADEicKI1NUUkVBTV9UWVBFX0hBTEZfRFVQTEVYX0JJRElfU1RSRUFNEAQSJwojU1RSRUFNX1RZUEVfRlVMTF9EVVBMRVhfQklESV9TVFJFQU0QBSqUAwoEQ29kZRIUChBDT0RFX1VOU1BFQ0lGSUVEEAASEQoNQ09ERV9DQU5DRUxFRBABEhAKDENPREVfVU5LTk9XThACEhkKFUNPREVfSU5WQUxJRF9BUkdVTUVOVBADEhoKFkNPREVfREVBRExJTkVfRVhDRUVERUQQBBISCg5DT0RFX05PVF9GT1VORBAFEhcKE0NPREVfQUxSRUFEWV9FWElTVFMQBhIaChZDT0RFX1BFUk1JU1NJT05fREVOSUVEEAcSGwoXQ09ERV9SRVNPVVJDRV9FWEhBVVNURUQQCBIcChhDT0RFX0ZBSUxFRF9QUkVDT05ESVRJT04QCRIQCgxDT0RFX0FCT1JURUQQChIVChFDT0RFX09VVF9PRl9SQU5HRRALEhYKEkNPREVfVU5JTVBMRU1FTlRFRBAMEhEKDUNPREVfSU5URVJOQUwQDRIUChBDT0RFX1VOQVZBSUxBQkxFEA4SEgoOQ09ERV9EQVRBX0xPU1MQDxIYChRDT0RFX1VOQVVUSEVOVElDQVRFRBAQYgZwcm90bzM"); /** * Config defines the configuration for running conformance tests. @@ -379,7 +379,10 @@ export enum Codec { JSON = 2, /** - * @generated from enum value: CODEC_TEXT = 3; + * not used; will be ignored + * + * @generated from enum value: CODEC_TEXT = 3 [deprecated = true]; + * @deprecated */ TEXT = 3, } diff --git a/packages/connect-conformance/src/gen/connectrpc/conformance/v1/server_compat_pb.ts b/packages/connect-conformance/src/gen/connectrpc/conformance/v1/server_compat_pb.ts index f1b9219aa..c2d5a1b4b 100644 --- a/packages/connect-conformance/src/gen/connectrpc/conformance/v1/server_compat_pb.ts +++ b/packages/connect-conformance/src/gen/connectrpc/conformance/v1/server_compat_pb.ts @@ -1,4 +1,4 @@ -// Copyright 2023-2024 The Connect Authors +// Copyright 2021-2024 The Connect Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/packages/connect-conformance/src/gen/connectrpc/conformance/v1/service_pb.ts b/packages/connect-conformance/src/gen/connectrpc/conformance/v1/service_pb.ts index 39fea9359..2ef9d759d 100644 --- a/packages/connect-conformance/src/gen/connectrpc/conformance/v1/service_pb.ts +++ b/packages/connect-conformance/src/gen/connectrpc/conformance/v1/service_pb.ts @@ -1,4 +1,4 @@ -// Copyright 2023-2024 The Connect Authors +// Copyright 2021-2024 The Connect Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/packages/connect-conformance/src/gen/connectrpc/conformance/v1/suite_pb.ts b/packages/connect-conformance/src/gen/connectrpc/conformance/v1/suite_pb.ts index 4da6355de..ce66c3bb1 100644 --- a/packages/connect-conformance/src/gen/connectrpc/conformance/v1/suite_pb.ts +++ b/packages/connect-conformance/src/gen/connectrpc/conformance/v1/suite_pb.ts @@ -1,4 +1,4 @@ -// Copyright 2023-2024 The Connect Authors +// Copyright 2021-2024 The Connect Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/packages/connect-conformance/src/promise-client.ts b/packages/connect-conformance/src/promise-client.ts index 547f911e0..ed8c33783 100644 --- a/packages/connect-conformance/src/promise-client.ts +++ b/packages/connect-conformance/src/promise-client.ts @@ -12,12 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -import { createPromiseClient, ConnectError } from "@connectrpc/connect"; -import type { - CallOptions, - PromiseClient, - Transport, -} from "@connectrpc/connect"; +import { createPromiseClient } from "@connectrpc/connect"; +import type { PromiseClient, Transport } from "@connectrpc/connect"; import { ClientResponseResultSchema } from "./gen/connectrpc/conformance/v1/client_compat_pb.js"; import type { ClientCompatRequest } from "./gen/connectrpc/conformance/v1/client_compat_pb.js"; import { @@ -26,205 +22,141 @@ import { IdempotentUnaryRequestSchema, ServerStreamRequestSchema, ClientStreamRequestSchema, + ConformancePayloadSchema, BidiStreamRequestSchema, UnimplementedRequestSchema, } from "./gen/connectrpc/conformance/v1/service_pb.js"; -import type { - Header as ConformanceHeader, - ConformancePayload, - BidiStreamRequest, - UnaryResponse, - IdempotentUnaryResponse, -} from "./gen/connectrpc/conformance/v1/service_pb.js"; +import type { BidiStreamRequest } from "./gen/connectrpc/conformance/v1/service_pb.js"; import { - convertToProtoError, convertToProtoHeaders, - appendProtoHeaders, - wait, getCancelTiming, + getRequestHeaders, + getRequestMessages, + getSingleRequestMessage, + setClientErrorResult, + wait, } from "./protocol.js"; import { createWritableIterable } from "@connectrpc/connect/protocol"; import { StreamType } from "./gen/connectrpc/conformance/v1/config_pb.js"; import { create } from "@bufbuild/protobuf"; -import { anyUnpack } from "@bufbuild/protobuf/wkt"; type ConformanceClient = PromiseClient; +const emptyPayload = create(ConformancePayloadSchema); + export function invokeWithPromiseClient( transport: Transport, - req: ClientCompatRequest, + compatRequest: ClientCompatRequest, ) { const client = createPromiseClient(ConformanceService, transport); - - switch (req.method) { + switch (compatRequest.method) { case ConformanceService.method.unary.name: - return unary(client, req); + return unary(client, compatRequest); case ConformanceService.method.idempotentUnary.name: - return unary(client, req, true); + return unary(client, compatRequest, true); case ConformanceService.method.serverStream.name: - return serverStream(client, req); + return serverStream(client, compatRequest); case ConformanceService.method.clientStream.name: - return clientStream(client, req); + return clientStream(client, compatRequest); case ConformanceService.method.bidiStream.name: - return bidiStream(client, req); + return bidiStream(client, compatRequest); case ConformanceService.method.unimplemented.name: - return unimplemented(client, req); + return unimplemented(client, compatRequest); default: - throw new Error(`Unknown method: ${req.method}`); + throw new Error(`Unknown method: ${compatRequest.method}`); } } async function unary( client: ConformanceClient, - req: ClientCompatRequest, + compatRequest: ClientCompatRequest, idempotent: boolean = false, ) { - if (req.requestMessages.length !== 1) { - throw new Error("Unary method requires exactly one request message"); - } - const msg = req.requestMessages[0]; - const uReq = anyUnpack( - msg, - idempotent ? IdempotentUnaryRequestSchema : UnaryRequestSchema, - ); - if (!uReq) { - throw new Error("Could not unpack request message to unary request"); - } - const reqHeader = new Headers(); - appendProtoHeaders(reqHeader, req.requestHeaders); - let error: ConnectError | undefined = undefined; - let resHeaders: ConformanceHeader[] = []; - let resTrailers: ConformanceHeader[] = []; - const payloads: ConformancePayload[] = []; + await wait(compatRequest.requestDelayMs); + const result = create(ClientResponseResultSchema); try { - let call: ( - req: NonNullable, - options: CallOptions, - ) => Promise = client.unary; - if (idempotent) { - call = client.idempotentUnary; + const controller = new AbortController(); + const { afterCloseSendMs } = getCancelTiming(compatRequest); + if (afterCloseSendMs >= 0) { + void wait(afterCloseSendMs).then(() => controller.abort()); } - await wait(req.requestDelayMs); - const uRes = await call(uReq, { - headers: reqHeader, + const request = getSingleRequestMessage( + compatRequest, + idempotent ? IdempotentUnaryRequestSchema : UnaryRequestSchema, + ); + const call = idempotent ? client.idempotentUnary : client.unary; + const response = await call(request, { + headers: getRequestHeaders(compatRequest), + signal: controller.signal, onHeader(headers) { - resHeaders = convertToProtoHeaders(headers); + result.responseHeaders = convertToProtoHeaders(headers); }, onTrailer(trailers) { - resTrailers = convertToProtoHeaders(trailers); + result.responseTrailers = convertToProtoHeaders(trailers); }, }); - payloads.push(uRes.payload!); + result.payloads.push(response.payload ?? emptyPayload); } catch (e) { - error = ConnectError.from(e); - // We can't distinguish between headers and trailers here, so we just - // add the metadata to both. - // - // But if the headers are already set, we don't need to overwrite them. - resHeaders = - resHeaders.length === 0 - ? convertToProtoHeaders(error.metadata) - : resHeaders; - resTrailers = convertToProtoHeaders(error.metadata); + setClientErrorResult(result, e); } - return create(ClientResponseResultSchema, { - payloads: payloads, - responseHeaders: resHeaders, - responseTrailers: resTrailers, - error: convertToProtoError(error), - }); + return result; } async function serverStream( client: ConformanceClient, - req: ClientCompatRequest, + compatRequest: ClientCompatRequest, ) { - if (req.requestMessages.length !== 1) { - throw new Error("ServerStream method requires exactly one request message"); - } - const msg = req.requestMessages[0]; - - const uReq = anyUnpack(msg, ServerStreamRequestSchema); - if (!uReq) { - throw new Error( - "Could not unpack request message to server stream request", - ); - } - const reqHeader = new Headers(); - appendProtoHeaders(reqHeader, req.requestHeaders); - let error: ConnectError | undefined = undefined; - let resHeaders: ConformanceHeader[] = []; - let resTrailers: ConformanceHeader[] = []; - const payloads: ConformancePayload[] = []; - const cancelTiming = getCancelTiming(req); + const cancelTiming = getCancelTiming(compatRequest); const controller = new AbortController(); + await wait(compatRequest.requestDelayMs); + const result = create(ClientResponseResultSchema); + const request = getSingleRequestMessage( + compatRequest, + ServerStreamRequestSchema, + ); try { - await wait(req.requestDelayMs); - const res = client.serverStream(uReq, { - headers: reqHeader, + const res = client.serverStream(request, { + headers: getRequestHeaders(compatRequest), signal: controller.signal, onHeader(headers) { - resHeaders = convertToProtoHeaders(headers); + result.responseHeaders = convertToProtoHeaders(headers); }, onTrailer(trailers) { - resTrailers = convertToProtoHeaders(trailers); + result.responseTrailers = convertToProtoHeaders(trailers); }, }); - if (cancelTiming.afterNumResponses == 0) { + if (cancelTiming.afterCloseSendMs >= 0) { + await wait(cancelTiming.afterCloseSendMs); controller.abort(); } - let count = 0; for await (const msg of res) { - payloads.push(msg.payload!); - count++; - if (count === cancelTiming.afterNumResponses) { + result.payloads.push(msg.payload ?? emptyPayload); + if (result.payloads.length === cancelTiming.afterNumResponses) { controller.abort(); } } } catch (e) { - error = ConnectError.from(e); - // We can't distinguish between headers and trailers here, so we just - // add the metadata to both. - // - // But if the headers are already set, we don't need to overwrite them. - resHeaders = - resHeaders.length === 0 - ? convertToProtoHeaders(error.metadata) - : resHeaders; - resTrailers = convertToProtoHeaders(error.metadata); + setClientErrorResult(result, e); } - return create(ClientResponseResultSchema, { - responseHeaders: resHeaders, - responseTrailers: resTrailers, - payloads: payloads, - error: convertToProtoError(error), - }); + return result; } async function clientStream( client: ConformanceClient, - req: ClientCompatRequest, + compatRequest: ClientCompatRequest, ) { - const reqHeaders = new Headers(); - appendProtoHeaders(reqHeaders, req.requestHeaders); - let error: ConnectError | undefined = undefined; - let resHeaders: ConformanceHeader[] = []; - let resTrailers: ConformanceHeader[] = []; - const payloads: ConformancePayload[] = []; - const cancelTiming = getCancelTiming(req); + const cancelTiming = getCancelTiming(compatRequest); const controller = new AbortController(); + const result = create(ClientResponseResultSchema); try { - const csRes = await client.clientStream( + const response = await client.clientStream( (async function* () { - for (const msg of req.requestMessages) { - const csReq = anyUnpack(msg, ClientStreamRequestSchema); - if (!csReq) { - throw new Error( - "Could not unpack request message to client stream request", - ); - } - await wait(req.requestDelayMs); - yield csReq; + for (const msg of getRequestMessages( + compatRequest, + ClientStreamRequestSchema, + )) { + await wait(compatRequest.requestDelayMs); + yield msg; } if (cancelTiming.beforeCloseSend !== undefined) { controller.abort(); @@ -236,87 +168,66 @@ async function clientStream( })(), { signal: controller.signal, - headers: reqHeaders, + headers: getRequestHeaders(compatRequest), onHeader(headers) { - resHeaders = convertToProtoHeaders(headers); + result.responseHeaders = convertToProtoHeaders(headers); }, onTrailer(trailers) { - resTrailers = convertToProtoHeaders(trailers); + result.responseTrailers = convertToProtoHeaders(trailers); }, }, ); - payloads.push(csRes.payload!); + result.payloads.push(response.payload ?? emptyPayload); } catch (e) { - error = ConnectError.from(e); - // We can't distinguish between headers and trailers here, so we just - // add the metadata to both. - // - // But if the headers are already set, we don't need to overwrite them. - resHeaders = - resHeaders.length === 0 - ? convertToProtoHeaders(error.metadata) - : resHeaders; - resTrailers = convertToProtoHeaders(error.metadata); + setClientErrorResult(result, e); } - return create(ClientResponseResultSchema, { - responseHeaders: resHeaders, - responseTrailers: resTrailers, - payloads: payloads, - error: convertToProtoError(error), - }); + return result; } -async function bidiStream(client: ConformanceClient, req: ClientCompatRequest) { - const reqHeaders = new Headers(); - appendProtoHeaders(reqHeaders, req.requestHeaders); - let error: ConnectError | undefined = undefined; - let resHeaders: ConformanceHeader[] = []; - let resTrailers: ConformanceHeader[] = []; - const payloads: ConformancePayload[] = []; - const cancelTiming = getCancelTiming(req); +async function bidiStream( + client: ConformanceClient, + compatRequest: ClientCompatRequest, +) { + const cancelTiming = getCancelTiming(compatRequest); const controller = new AbortController(); - let recvCount = 0; + const result = create(ClientResponseResultSchema); try { - const reqIt = createWritableIterable(); - const sRes = client.bidiStream(reqIt, { + const request = createWritableIterable(); + const responses = client.bidiStream(request, { signal: controller.signal, - headers: reqHeaders, + headers: getRequestHeaders(compatRequest), onHeader(headers) { - resHeaders = convertToProtoHeaders(headers); + result.responseHeaders = convertToProtoHeaders(headers); }, onTrailer(trailers) { - resTrailers = convertToProtoHeaders(trailers); + result.responseTrailers = convertToProtoHeaders(trailers); }, }); - const resIt = sRes[Symbol.asyncIterator](); - for (const msg of req.requestMessages) { - const bdReq = anyUnpack(msg, BidiStreamRequestSchema); - if (!bdReq) { - throw new Error( - "Could not unpack request message to client stream request", - ); - } - await wait(req.requestDelayMs); - await reqIt.write(bdReq); - if (req.streamType === StreamType.FULL_DUPLEX_BIDI_STREAM) { + const responseIterator = responses[Symbol.asyncIterator](); + for (const msg of getRequestMessages( + compatRequest, + BidiStreamRequestSchema, + )) { + await wait(compatRequest.requestDelayMs); + await request.write(msg); + if (compatRequest.streamType === StreamType.FULL_DUPLEX_BIDI_STREAM) { if (cancelTiming.afterNumResponses === 0) { controller.abort(); } - const next = await resIt.next(); + const next = await responseIterator.next(); if (next.done === true) { continue; } - recvCount++; - if (cancelTiming.afterNumResponses === recvCount) { + result.payloads.push(next.value.payload ?? emptyPayload); + if (result.payloads.length === cancelTiming.afterNumResponses) { controller.abort(); } - payloads.push(next.value.payload!); } } if (cancelTiming.beforeCloseSend !== undefined) { controller.abort(); } - reqIt.close(); + request.close(); if (cancelTiming.afterCloseSendMs >= 0) { setTimeout(() => { controller.abort(); @@ -327,75 +238,42 @@ async function bidiStream(client: ConformanceClient, req: ClientCompatRequest) { } // Drain the response iterator for (;;) { - const next = await resIt.next(); + const next = await responseIterator.next(); if (next.done === true) { break; } - recvCount++; - if (cancelTiming.afterNumResponses === recvCount) { + result.payloads.push(next.value.payload ?? emptyPayload); + if (result.payloads.length === cancelTiming.afterNumResponses) { controller.abort(); } - payloads.push(next.value.payload!); } } catch (e) { - error = ConnectError.from(e); - // We can't distinguish between headers and trailers here, so we just - // add the metadata to both. - // - // But if the headers are already set, we don't need to overwrite them. - resHeaders = - resHeaders.length === 0 - ? convertToProtoHeaders(error.metadata) - : resHeaders; - resTrailers = convertToProtoHeaders(error.metadata); + setClientErrorResult(result, e); } - return create(ClientResponseResultSchema, { - responseHeaders: resHeaders, - responseTrailers: resTrailers, - payloads: payloads, - error: convertToProtoError(error), - }); + return result; } async function unimplemented( client: ConformanceClient, - req: ClientCompatRequest, + compatRequest: ClientCompatRequest, ) { - const msg = req.requestMessages[0]; - const unReq = anyUnpack(msg, UnimplementedRequestSchema); - if (!unReq) { - throw new Error("Could not unpack request message to unary request"); - } - const reqHeader = new Headers(); - appendProtoHeaders(reqHeader, req.requestHeaders); - let error: ConnectError | undefined = undefined; - let resHeaders: ConformanceHeader[] = []; - let resTrailers: ConformanceHeader[] = []; + const request = getSingleRequestMessage( + compatRequest, + UnimplementedRequestSchema, + ); + const result = create(ClientResponseResultSchema); try { - await client.unimplemented(unReq, { - headers: reqHeader, + await client.unimplemented(request, { + headers: getRequestHeaders(compatRequest), onHeader(headers) { - resHeaders = convertToProtoHeaders(headers); + result.responseHeaders = convertToProtoHeaders(headers); }, onTrailer(trailers) { - resTrailers = convertToProtoHeaders(trailers); + result.responseTrailers = convertToProtoHeaders(trailers); }, }); } catch (e) { - error = ConnectError.from(e); - // We can't distinguish between headers and trailers here, so we just - // add the metadata to both. - // - // But if the headers are already set, we don't need to overwrite them. - resHeaders = - resHeaders.length === 0 - ? convertToProtoHeaders(error.metadata) - : resHeaders; - resTrailers = convertToProtoHeaders(error.metadata); + setClientErrorResult(result, e); } - return create(ClientResponseResultSchema, { - responseHeaders: resHeaders, - responseTrailers: resTrailers, - error: convertToProtoError(error), - }); + return result; } diff --git a/packages/connect-conformance/src/protocol.ts b/packages/connect-conformance/src/protocol.ts index 9b6d6c9a8..f35710f39 100644 --- a/packages/connect-conformance/src/protocol.ts +++ b/packages/connect-conformance/src/protocol.ts @@ -14,6 +14,7 @@ import { ConnectError, Code } from "@connectrpc/connect"; import { create, createRegistry } from "@bufbuild/protobuf"; +import type { DescMessage, MessageShape } from "@bufbuild/protobuf"; import { ErrorSchema as ConformanceErrorDesc, HeaderSchema as ConformanceHeaderDesc, @@ -24,33 +25,109 @@ import type { Header as ConformanceHeader, } from "./gen/connectrpc/conformance/v1/service_pb.js"; import { Code as ConformanceCode } from "./gen/connectrpc/conformance/v1/config_pb.js"; -import type { ClientCompatRequest } from "./gen/connectrpc/conformance/v1/client_compat_pb.js"; import { AnySchema, anyPack, anyUnpack } from "@bufbuild/protobuf/wkt"; import type { Any } from "@bufbuild/protobuf/wkt"; const detailsRegitry = createRegistry(ConformancePayload_RequestInfoSchema); +import type { + ClientCompatRequest, + ClientResponseResult, +} from "./gen/connectrpc/conformance/v1/client_compat_pb.js"; -export function getCancelTiming(req: ClientCompatRequest) { +export function getCancelTiming(compatRequest: ClientCompatRequest) { const def = { beforeCloseSend: undefined, afterCloseSendMs: -1, afterNumResponses: -1, }; - switch (req.cancel?.cancelTiming.case) { + switch (compatRequest.cancel?.cancelTiming.case) { case "beforeCloseSend": return { ...def, beforeCloseSend: {} }; case "afterCloseSendMs": return { ...def, - afterCloseSendMs: req.cancel.cancelTiming.value, + afterCloseSendMs: compatRequest.cancel.cancelTiming.value, }; case "afterNumResponses": - return { ...def, afterNumResponses: req.cancel.cancelTiming.value }; + return { + ...def, + afterNumResponses: compatRequest.cancel.cancelTiming.value, + }; case undefined: return def; } } +/** + * Get the headers for a conformance client request. + */ +export function getRequestHeaders( + compatRequest: ClientCompatRequest, +): HeadersInit { + const headers = new Headers(); + appendProtoHeaders(headers, compatRequest.requestHeaders); + return headers; +} + +/** + * Get a single request message for a conformance client call. + */ +export function getSingleRequestMessage( + compatRequest: ClientCompatRequest, + desc: T, +): MessageShape { + if (compatRequest.requestMessages.length !== 1) { + throw new Error( + `Expected exactly one request_message in ClientCompatRequest, found ${compatRequest.requestMessages.length}`, + ); + } + const any = compatRequest.requestMessages[0]; + const target = anyUnpack(any, desc); + if (!target) { + throw new Error( + `Could not unpack request_message from ClientCompatRequest into ${desc.typeName}`, + ); + } + return target; +} + +/** + * Get a request messages for a conformance client call. + */ +export function* getRequestMessages( + compatRequest: ClientCompatRequest, + desc: T, +): Iterable> { + for (const any of compatRequest.requestMessages) { + const target = anyUnpack(any, desc); + if (!target) { + throw new Error( + `Could not unpack request_message from ClientCompatRequest into ${desc.typeName}`, + ); + } + yield target; + } +} + +/** + * Record an error from a failed conformance client call in the result message. + */ +export function setClientErrorResult( + result: ClientResponseResult, + error: unknown, +): void { + const connectError = ConnectError.from(error); + result.error = convertToProtoError(connectError); + // We can't distinguish between headers and trailers here, so we just + // add the metadata to both. + // + // But if the headers are already set, we don't need to overwrite them. + if (result.responseHeaders.length === 0) { + result.responseHeaders = convertToProtoHeaders(connectError.metadata); + } + result.responseTrailers = convertToProtoHeaders(connectError.metadata); +} + export function connectErrorFromProto(err: ConformanceError) { // The ConnectError constructor accepts messages for details. // The conformance error details are the raw google.protobuf.Any messages. diff --git a/packages/connect-conformance/turbo.json b/packages/connect-conformance/turbo.json new file mode 100644 index 000000000..fd0ee0db3 --- /dev/null +++ b/packages/connect-conformance/turbo.json @@ -0,0 +1,9 @@ +{ + "$schema": "https://turbo.build/schema.json", + "extends": ["//"], + "tasks": { + "lint": { + "dependsOn": ["format", "^build", "generate", "build"] + } + } +} diff --git a/packages/connect-express/README.md b/packages/connect-express/README.md index 33b3a839b..c6ec96bac 100644 --- a/packages/connect-express/README.md +++ b/packages/connect-express/README.md @@ -15,7 +15,7 @@ Adds your Connect RPCs to an Express server. // connect.ts import { ConnectRouter } from "@connectrpc/connect"; -export default function(router: ConnectRouter) { +export default function (router: ConnectRouter) { // implement rpc Say(SayRequest) returns (SayResponse) router.rpc(ElizaService, ElizaService.methods.say, async (req) => ({ sentence: `you said: ${req.sentence}`, @@ -64,7 +64,7 @@ const transport = createGrpcWebTransport({ const client = createPromiseClient(ElizaService, transport); const { sentence } = await client.say({ sentence: "I feel happy." }); -console.log(sentence) // you said: I feel happy. +console.log(sentence); // you said: I feel happy. ``` A client for the web browser actually looks identical to this example - it would @@ -74,7 +74,6 @@ instead. Note that support for gRPC is limited, since many gRPC clients require HTTP/2, and Express does not support the Node.js `http2` module. - ## Getting started To get started with Connect, head over to the [docs](https://connectrpc.com/docs/node/getting-started) diff --git a/packages/connect-express/conformance/server.ts b/packages/connect-express/conformance/server.ts index 702e4a077..c681e5880 100755 --- a/packages/connect-express/conformance/server.ts +++ b/packages/connect-express/conformance/server.ts @@ -1,5 +1,3 @@ -#!/usr/bin/env -S npx tsx - // Copyright 2021-2024 The Connect Authors // // Licensed under the Apache License, Version 2.0 (the "License"); @@ -36,9 +34,10 @@ import { IdempotentUnaryRequestSchema, ServerCompatRequestSchema, ServerCompatResponseSchema, + writeSizeDelimitedBuffer, } from "@connectrpc/connect-conformance"; import express from "express"; -import { expressConnectMiddleware } from "@connectrpc/connect-express"; +import { expressConnectMiddleware } from "../src/index.js"; main(); @@ -110,8 +109,12 @@ function main() { } process.on("SIGTERM", () => { - server.close(); + // Gracefully shutting down a http2 server is complicated. + // We trust the conformance test runner to only send the signal if it's done, + // so we simply shut down hard. + process.exit(); }); + server.listen(undefined, "127.0.0.1", () => { const addrInfo = server.address() as net.AddressInfo; const res = create(ServerCompatResponseSchema, { @@ -122,10 +125,8 @@ function main() { host: addrInfo.address, port: addrInfo.port, }); - const data = toBinary(ServerCompatResponseSchema, res); - const size = Buffer.alloc(4); - size.writeUInt32BE(data.byteLength); - process.stdout.write(size); - process.stdout.write(data); + process.stdout.write( + writeSizeDelimitedBuffer(toBinary(ServerCompatResponseSchema, res)), + ); }); } diff --git a/packages/connect-express/package.json b/packages/connect-express/package.json index 40ce0c341..c5ff5d6e1 100644 --- a/packages/connect-express/package.json +++ b/packages/connect-express/package.json @@ -8,14 +8,16 @@ "directory": "packages/connect-express" }, "scripts": { - "clean": "rm -rf ./dist/*", - "generate": "buf generate", + "prebuild": "rm -rf ./dist/*", "build": "npm run build:cjs && npm run build:esm", "build:cjs": "tsc --project tsconfig.build.json --module commonjs --verbatimModuleSyntax false --moduleResolution node10 --outDir ./dist/cjs --declaration --declarationDir ./dist/cjs && echo >./dist/cjs/package.json '{\"type\":\"commonjs\"}'", "build:esm": "tsc --project tsconfig.build.json --outDir ./dist/esm --declaration --declarationDir ./dist/esm", - "attw": "attw --pack", - "jasmine": "jasmine --config=jasmine.json", - "conformance": "tsc --noEmit && connectconformance --mode server --conf ./conformance/conformance-express.yaml -v ./conformance/server.ts" + "test": "jasmine --config=jasmine.json", + "conformance": "tsc --noEmit && connectconformance --mode server --conf ./conformance/conformance-express.yaml -v -- tsx ./conformance/server.ts", + "format": "prettier --write --ignore-unknown '.' '!dist'", + "license-header": "license-header", + "lint": "eslint --max-warnings 0 .", + "attw": "attw --pack" }, "type": "module", "sideEffects": false, @@ -31,9 +33,11 @@ }, "devDependencies": { "@connectrpc/connect-conformance": "^2.0.0-alpha.1", + "@connectrpc/connect": "2.0.0-alpha.1", + "@connectrpc/connect-node": "2.0.0-alpha.1", "@types/express": "^4.17.18", "express": "^4.19.2", - "tsx": "^4.16.5" + "tsx": "^4.19.0" }, "peerDependencies": { "@bufbuild/protobuf": "^2.0.0", diff --git a/packages/connect-express/src/express-connect-middleware.ts b/packages/connect-express/src/express-connect-middleware.ts index f01c5dbe3..df05dfb18 100644 --- a/packages/connect-express/src/express-connect-middleware.ts +++ b/packages/connect-express/src/express-connect-middleware.ts @@ -87,6 +87,7 @@ export function expressConnectMiddleware( } const uReq = universalRequestFromNodeRequest( req, + res, getPreparsedBody(req), options.contextValues?.(req), ); diff --git a/packages/connect-express/src/testdata/gen/connectrpc/eliza/v1/eliza_pb.ts b/packages/connect-express/src/testdata/gen/connectrpc/eliza/v1/eliza_pb.ts index e60d6fe58..5e10f3bed 100644 --- a/packages/connect-express/src/testdata/gen/connectrpc/eliza/v1/eliza_pb.ts +++ b/packages/connect-express/src/testdata/gen/connectrpc/eliza/v1/eliza_pb.ts @@ -16,15 +16,26 @@ // @generated from file connectrpc/eliza/v1/eliza.proto (package connectrpc.eliza.v1, syntax proto3) /* eslint-disable */ -import type { GenFile, GenMessage, GenService } from "@bufbuild/protobuf/codegenv1"; -import { fileDesc, messageDesc, serviceDesc } from "@bufbuild/protobuf/codegenv1"; +import type { + GenFile, + GenMessage, + GenService, +} from "@bufbuild/protobuf/codegenv1"; +import { + fileDesc, + messageDesc, + serviceDesc, +} from "@bufbuild/protobuf/codegenv1"; import type { Message } from "@bufbuild/protobuf"; /** * Describes the file connectrpc/eliza/v1/eliza.proto. */ -export const file_connectrpc_eliza_v1_eliza: GenFile = /*@__PURE__*/ - fileDesc("Ch9jb25uZWN0cnBjL2VsaXphL3YxL2VsaXphLnByb3RvEhNjb25uZWN0cnBjLmVsaXphLnYxIh4KClNheVJlcXVlc3QSEAoIc2VudGVuY2UYASABKAkiHwoLU2F5UmVzcG9uc2USEAoIc2VudGVuY2UYASABKAkiIwoPQ29udmVyc2VSZXF1ZXN0EhAKCHNlbnRlbmNlGAEgASgJIiQKEENvbnZlcnNlUmVzcG9uc2USEAoIc2VudGVuY2UYASABKAkiIAoQSW50cm9kdWNlUmVxdWVzdBIMCgRuYW1lGAEgASgJIiUKEUludHJvZHVjZVJlc3BvbnNlEhAKCHNlbnRlbmNlGAEgASgJMpwCCgxFbGl6YVNlcnZpY2USTQoDU2F5Eh8uY29ubmVjdHJwYy5lbGl6YS52MS5TYXlSZXF1ZXN0GiAuY29ubmVjdHJwYy5lbGl6YS52MS5TYXlSZXNwb25zZSIDkAIBEl0KCENvbnZlcnNlEiQuY29ubmVjdHJwYy5lbGl6YS52MS5Db252ZXJzZVJlcXVlc3QaJS5jb25uZWN0cnBjLmVsaXphLnYxLkNvbnZlcnNlUmVzcG9uc2UiACgBMAESXgoJSW50cm9kdWNlEiUuY29ubmVjdHJwYy5lbGl6YS52MS5JbnRyb2R1Y2VSZXF1ZXN0GiYuY29ubmVjdHJwYy5lbGl6YS52MS5JbnRyb2R1Y2VSZXNwb25zZSIAMAFiBnByb3RvMw"); +export const file_connectrpc_eliza_v1_eliza: GenFile = + /*@__PURE__*/ + fileDesc( + "Ch9jb25uZWN0cnBjL2VsaXphL3YxL2VsaXphLnByb3RvEhNjb25uZWN0cnBjLmVsaXphLnYxIh4KClNheVJlcXVlc3QSEAoIc2VudGVuY2UYASABKAkiHwoLU2F5UmVzcG9uc2USEAoIc2VudGVuY2UYASABKAkiIwoPQ29udmVyc2VSZXF1ZXN0EhAKCHNlbnRlbmNlGAEgASgJIiQKEENvbnZlcnNlUmVzcG9uc2USEAoIc2VudGVuY2UYASABKAkiIAoQSW50cm9kdWNlUmVxdWVzdBIMCgRuYW1lGAEgASgJIiUKEUludHJvZHVjZVJlc3BvbnNlEhAKCHNlbnRlbmNlGAEgASgJMpwCCgxFbGl6YVNlcnZpY2USTQoDU2F5Eh8uY29ubmVjdHJwYy5lbGl6YS52MS5TYXlSZXF1ZXN0GiAuY29ubmVjdHJwYy5lbGl6YS52MS5TYXlSZXNwb25zZSIDkAIBEl0KCENvbnZlcnNlEiQuY29ubmVjdHJwYy5lbGl6YS52MS5Db252ZXJzZVJlcXVlc3QaJS5jb25uZWN0cnBjLmVsaXphLnYxLkNvbnZlcnNlUmVzcG9uc2UiACgBMAESXgoJSW50cm9kdWNlEiUuY29ubmVjdHJwYy5lbGl6YS52MS5JbnRyb2R1Y2VSZXF1ZXN0GiYuY29ubmVjdHJwYy5lbGl6YS52MS5JbnRyb2R1Y2VSZXNwb25zZSIAMAFiBnByb3RvMw", + ); /** * SayRequest is a single-sentence request. @@ -42,7 +53,8 @@ export type SayRequest = Message<"connectrpc.eliza.v1.SayRequest"> & { * Describes the message connectrpc.eliza.v1.SayRequest. * Use `create(SayRequestSchema)` to create a new message. */ -export const SayRequestSchema: GenMessage = /*@__PURE__*/ +export const SayRequestSchema: GenMessage = + /*@__PURE__*/ messageDesc(file_connectrpc_eliza_v1_eliza, 0); /** @@ -61,7 +73,8 @@ export type SayResponse = Message<"connectrpc.eliza.v1.SayResponse"> & { * Describes the message connectrpc.eliza.v1.SayResponse. * Use `create(SayResponseSchema)` to create a new message. */ -export const SayResponseSchema: GenMessage = /*@__PURE__*/ +export const SayResponseSchema: GenMessage = + /*@__PURE__*/ messageDesc(file_connectrpc_eliza_v1_eliza, 1); /** @@ -81,7 +94,8 @@ export type ConverseRequest = Message<"connectrpc.eliza.v1.ConverseRequest"> & { * Describes the message connectrpc.eliza.v1.ConverseRequest. * Use `create(ConverseRequestSchema)` to create a new message. */ -export const ConverseRequestSchema: GenMessage = /*@__PURE__*/ +export const ConverseRequestSchema: GenMessage = + /*@__PURE__*/ messageDesc(file_connectrpc_eliza_v1_eliza, 2); /** @@ -90,18 +104,20 @@ export const ConverseRequestSchema: GenMessage = /*@__PURE__*/ * * @generated from message connectrpc.eliza.v1.ConverseResponse */ -export type ConverseResponse = Message<"connectrpc.eliza.v1.ConverseResponse"> & { - /** - * @generated from field: string sentence = 1; - */ - sentence: string; -}; +export type ConverseResponse = + Message<"connectrpc.eliza.v1.ConverseResponse"> & { + /** + * @generated from field: string sentence = 1; + */ + sentence: string; + }; /** * Describes the message connectrpc.eliza.v1.ConverseResponse. * Use `create(ConverseResponseSchema)` to create a new message. */ -export const ConverseResponseSchema: GenMessage = /*@__PURE__*/ +export const ConverseResponseSchema: GenMessage = + /*@__PURE__*/ messageDesc(file_connectrpc_eliza_v1_eliza, 3); /** @@ -109,18 +125,20 @@ export const ConverseResponseSchema: GenMessage = /*@__PURE__* * * @generated from message connectrpc.eliza.v1.IntroduceRequest */ -export type IntroduceRequest = Message<"connectrpc.eliza.v1.IntroduceRequest"> & { - /** - * @generated from field: string name = 1; - */ - name: string; -}; +export type IntroduceRequest = + Message<"connectrpc.eliza.v1.IntroduceRequest"> & { + /** + * @generated from field: string name = 1; + */ + name: string; + }; /** * Describes the message connectrpc.eliza.v1.IntroduceRequest. * Use `create(IntroduceRequestSchema)` to create a new message. */ -export const IntroduceRequestSchema: GenMessage = /*@__PURE__*/ +export const IntroduceRequestSchema: GenMessage = + /*@__PURE__*/ messageDesc(file_connectrpc_eliza_v1_eliza, 4); /** @@ -128,18 +146,20 @@ export const IntroduceRequestSchema: GenMessage = /*@__PURE__* * * @generated from message connectrpc.eliza.v1.IntroduceResponse */ -export type IntroduceResponse = Message<"connectrpc.eliza.v1.IntroduceResponse"> & { - /** - * @generated from field: string sentence = 1; - */ - sentence: string; -}; +export type IntroduceResponse = + Message<"connectrpc.eliza.v1.IntroduceResponse"> & { + /** + * @generated from field: string sentence = 1; + */ + sentence: string; + }; /** * Describes the message connectrpc.eliza.v1.IntroduceResponse. * Use `create(IntroduceResponseSchema)` to create a new message. */ -export const IntroduceResponseSchema: GenMessage = /*@__PURE__*/ +export const IntroduceResponseSchema: GenMessage = + /*@__PURE__*/ messageDesc(file_connectrpc_eliza_v1_eliza, 5); /** @@ -162,7 +182,7 @@ export const ElizaService: GenService<{ methodKind: "unary"; input: typeof SayRequestSchema; output: typeof SayResponseSchema; - }, + }; /** * Converse is a bidirectional RPC. The caller may exchange multiple * back-and-forth messages with Eliza over a long-lived connection. Eliza @@ -174,7 +194,7 @@ export const ElizaService: GenService<{ methodKind: "bidi_streaming"; input: typeof ConverseRequestSchema; output: typeof ConverseResponseSchema; - }, + }; /** * Introduce is a server streaming RPC. Given the caller's name, Eliza * returns a stream of sentences to introduce itself. @@ -185,7 +205,5 @@ export const ElizaService: GenService<{ methodKind: "server_streaming"; input: typeof IntroduceRequestSchema; output: typeof IntroduceResponseSchema; - }, -}> = /*@__PURE__*/ - serviceDesc(file_connectrpc_eliza_v1_eliza, 0); - + }; +}> = /*@__PURE__*/ serviceDesc(file_connectrpc_eliza_v1_eliza, 0); diff --git a/packages/connect-fastify/README.md b/packages/connect-fastify/README.md index 627b41508..bbde6bab5 100644 --- a/packages/connect-fastify/README.md +++ b/packages/connect-fastify/README.md @@ -15,7 +15,7 @@ Plug your Connect RPCs into a fastify server. // connect.ts import { ConnectRouter } from "@connectrpc/connect"; -export default function(router: ConnectRouter) { +export default function (router: ConnectRouter) { // implement rpc Say(SayRequest) returns (SayResponse) router.rpc(ElizaService, ElizaService.methods.say, async (req) => ({ sentence: `you said: ${req.sentence}`, @@ -78,14 +78,13 @@ const transport = createGrpcTransport({ const client = createPromiseClient(ElizaService, transport); const { sentence } = await client.say({ sentence: "I feel happy." }); -console.log(sentence) // you said: I feel happy. +console.log(sentence); // you said: I feel happy. ``` A client for the web browser actually looks identical to this example - it would simply use `createConnectTransport` from [@connectrpc/connect-web](https://www.npmjs.com/package/@connectrpc/connect-web) instead. - ## Getting started To get started with Connect, head over to the [docs](https://connectrpc.com/docs/node/getting-started) diff --git a/packages/connect-fastify/conformance/server.ts b/packages/connect-fastify/conformance/server.ts index d42d8de08..50cee37ba 100755 --- a/packages/connect-fastify/conformance/server.ts +++ b/packages/connect-fastify/conformance/server.ts @@ -1,5 +1,3 @@ -#!/usr/bin/env -S npx tsx - // Copyright 2021-2024 The Connect Authors // // Licensed under the Apache License, Version 2.0 (the "License"); @@ -35,6 +33,7 @@ import { BidiStreamRequestSchema, IdempotentUnaryRequestSchema, ServerCompatResponseSchema, + writeSizeDelimitedBuffer, } from "@connectrpc/connect-conformance"; import { fastify } from "fastify"; import type { @@ -44,7 +43,7 @@ import type { FastifyHttp2SecureOptions, FastifyInstance, } from "fastify"; -import { fastifyConnectPlugin } from "@connectrpc/connect-fastify"; +import { fastifyConnectPlugin } from "../src/index.js"; main(); @@ -142,8 +141,12 @@ function main() { } process.on("SIGTERM", () => { - void server.close(); + // Gracefully shutting down a http2 server is complicated. + // We trust the conformance test runner to only send the signal if it's done, + // so we simply shut down hard. + process.exit(); }); + server.listen({ host: "127.0.0.1", port: 0 }, () => { const addrInfo = server.addresses()[0]; const res = create(ServerCompatResponseSchema, { @@ -154,10 +157,8 @@ function main() { host: addrInfo.address, port: addrInfo.port, }); - const data = toBinary(ServerCompatResponseSchema, res); - const size = Buffer.alloc(4); - size.writeUInt32BE(data.byteLength); - process.stdout.write(size); - process.stdout.write(data); + process.stdout.write( + writeSizeDelimitedBuffer(toBinary(ServerCompatResponseSchema, res)), + ); }); } diff --git a/packages/connect-fastify/package.json b/packages/connect-fastify/package.json index fd0ea07b1..f945d6ed6 100644 --- a/packages/connect-fastify/package.json +++ b/packages/connect-fastify/package.json @@ -8,12 +8,15 @@ "directory": "packages/connect-fastify" }, "scripts": { - "clean": "rm -rf ./dist/*", + "prebuild": "rm -rf ./dist/*", "build": "npm run build:cjs && npm run build:esm", "build:cjs": "tsc --project tsconfig.build.json --module commonjs --verbatimModuleSyntax false --moduleResolution node10 --outDir ./dist/cjs --declaration --declarationDir ./dist/cjs && echo >./dist/cjs/package.json '{\"type\":\"commonjs\"}'", "build:esm": "tsc --project tsconfig.build.json --outDir ./dist/esm --declaration --declarationDir ./dist/esm", - "attw": "attw --pack", - "conformance": "tsc --noEmit && connectconformance --mode server --conf ./conformance/conformance-fastify.yaml -v ./conformance/server.ts" + "conformance": "tsc --noEmit && connectconformance --mode server --conf ./conformance/conformance-fastify.yaml -v -- tsx ./conformance/server.ts", + "format": "prettier --write --ignore-unknown '.' '!dist'", + "license-header": "license-header", + "lint": "eslint --max-warnings 0 .", + "attw": "attw --pack" }, "type": "module", "sideEffects": false, @@ -28,7 +31,9 @@ "node": ">=16.0.0" }, "devDependencies": { - "@connectrpc/connect-conformance": "^2.0.0-alpha.1" + "@connectrpc/connect-conformance": "^2.0.0-alpha.1", + "@connectrpc/connect": "2.0.0-alpha.1", + "@connectrpc/connect-node": "2.0.0-alpha.1" }, "peerDependencies": { "@bufbuild/protobuf": "^2.0.0", diff --git a/packages/connect-fastify/src/fastify-connect-plugin.ts b/packages/connect-fastify/src/fastify-connect-plugin.ts index c75b2763d..a2c45acfc 100644 --- a/packages/connect-fastify/src/fastify-connect-plugin.ts +++ b/packages/connect-fastify/src/fastify-connect-plugin.ts @@ -115,6 +115,7 @@ export function fastifyConnectPlugin( const uRes = await uHandler( universalRequestFromNodeRequest( req.raw, + reply.raw, req.body as JsonValue | undefined, opts.contextValues?.(req), ), diff --git a/packages/connect-migrate/README.md b/packages/connect-migrate/README.md index 15d8fa6de..4d4345a49 100644 --- a/packages/connect-migrate/README.md +++ b/packages/connect-migrate/README.md @@ -2,7 +2,6 @@ This tool updates your Connect project to use the new `@connectrpc` packages. - ## Usage To migrate, run the following command in your project root directory: @@ -13,7 +12,6 @@ npx @connectrpc/connect-migrate Add the `--help` flag to the command to learn more about the available flags. - ## What it does This package is made up of a few migration steps @@ -24,29 +22,27 @@ This package is made up of a few migration steps ## What files are changed -We ignore all files within `node_modules` but will update any other files that +We ignore all files within `node_modules` but will update any other files that end with the following extensions: `.ts`, `.tsx`, `.js`, `.jsx`, `.cjs`, `.mjs`. - ## Prerequisites -- Commit any unstaged changes to your project, so that you can revert in case the +- Commit any unstaged changes to your project, so that you can revert in case the migration fails. - After migration, run your generate scripts to re-generate code with the latest plugin versions. - ## Alternative running methods -This tool leverages `jscodeshift` in order to find all references to packages and -update them. As a result, we've assumed a parser to parse your JavaScript/TypeScript -files. If you see errors due to parsing, you may be using a custom babel config -or another custom parser. You can work around this while leveraging our +This tool leverages `jscodeshift` in order to find all references to packages and +update them. As a result, we've assumed a parser to parse your JavaScript/TypeScript +files. If you see errors due to parsing, you may be using a custom babel config +or another custom parser. You can work around this while leveraging our transforms by calling `jscodeshift` directly. ```shell npx jscodeshift -t ./node_modules/@connectrpc/connect-migrate/dist/cjs/migrations/v0.13.1-transform.js . ``` -And add any additional params you feel are necessary. You can find more +And add any additional params you feel are necessary. You can find more information about `jscodeshift` [here](https://github.com/facebook/jscodeshift/blob/main/README.md#usage-cli). diff --git a/packages/connect-migrate/package.json b/packages/connect-migrate/package.json index 8ccecd008..ee99ca0e1 100644 --- a/packages/connect-migrate/package.json +++ b/packages/connect-migrate/package.json @@ -1,7 +1,7 @@ { "name": "@connectrpc/connect-migrate", "version": "2.0.0-alpha.1", - "description": "This tool updates your Connect project to use the latest @connectrpc packages.", + "description": "This tool updates your Connect project to use the new @connectrpc packages.", "license": "Apache-2.0", "repository": { "type": "git", @@ -12,19 +12,21 @@ "connect-migrate": "bin/connect-migrate" }, "scripts": { - "clean": "rm -rf ./dist/cjs/*", + "prebuild": "rm -rf ./dist/*", "build": "tsc --project tsconfig.json --outDir ./dist/cjs", "test": "jasmine --config=jasmine.json", - "build+test": "npm run build && npm run test" + "format": "prettier --write --ignore-unknown '.' '!dist'", + "license-header": "license-header", + "lint": "eslint --max-warnings 0 ." }, "engines": { "node": ">=16.0.0" }, "dependencies": { "fast-glob": "3.3.2", - "jscodeshift": "0.16.1", + "jscodeshift": "17.0.0", "semver": "^7.6.3", - "yaml": "^2.4.5" + "yaml": "^2.5.1" }, "devDependencies": { "@types/jscodeshift": "0.11.11", diff --git a/packages/connect-migrate/turbo.json b/packages/connect-migrate/turbo.json new file mode 100644 index 000000000..fd0ee0db3 --- /dev/null +++ b/packages/connect-migrate/turbo.json @@ -0,0 +1,9 @@ +{ + "$schema": "https://turbo.build/schema.json", + "extends": ["//"], + "tasks": { + "lint": { + "dependsOn": ["format", "^build", "generate", "build"] + } + } +} diff --git a/packages/connect-next/README.md b/packages/connect-next/README.md index 90264b321..c337941cd 100644 --- a/packages/connect-next/README.md +++ b/packages/connect-next/README.md @@ -7,10 +7,9 @@ TypeScript. `@connectrpc/connect-next` provides a plugin for [Next.js](https://nextjs.org/), the React Framework for the Web. - ### nextJsApiRouter() -Provide your Connect RPCs via Next.js API routes. To enable Connect in Next.js, +Provide your Connect RPCs via Next.js API routes. To enable Connect in Next.js, add two files to your project: ```diff @@ -21,8 +20,8 @@ add two files to your project:         └── [[...connect]].ts ``` -> **Note:** Next.js 13 introduced the new App Router. Your Connect API routes -> need to be placed in `pages/`, but you can use the `app/` directory for the +> **Note:** Next.js 13 introduced the new App Router. Your Connect API routes +> need to be placed in `pages/`, but you can use the `app/` directory for the > App Router at the same time. The new file `connect.ts` is where you register your RPCs: @@ -31,7 +30,7 @@ The new file `connect.ts` is where you register your RPCs: // connect.ts import { ConnectRouter } from "@connectrpc/connect"; -export default function(router: ConnectRouter) { +export default function (router: ConnectRouter) { // implement rpc Say(SayRequest) returns (SayResponse) router.rpc(ElizaService, ElizaService.methods.say, async (req) => ({ sentence: `you said: ${req.sentence}`, @@ -46,8 +45,8 @@ export default function(router: ConnectRouter) { import { nextJsApiRouter } from "@connectrpc/connect-next"; import routes from "../../connect"; -const {handler, config} = nextJsApiRouter({ routes }); -export {handler as default, config}; +const { handler, config } = nextJsApiRouter({ routes }); +export { handler as default, config }; ``` With that server running, you can make requests with any Connect or gRPC-Web client. @@ -77,7 +76,7 @@ const transport = createGrpcWebTransport({ const client = createPromiseClient(ElizaService, transport); const { sentence } = await client.say({ sentence: "I feel happy." }); -console.log(sentence) // you said: I feel happy. +console.log(sentence); // you said: I feel happy. ``` A client for the web browser actually looks identical to this example - it would @@ -87,14 +86,12 @@ instead. Note that support for gRPC is limited, since many gRPC clients require HTTP/2, and Express does not support the Node.js `http2` module. - ### Deploying to Vercel Currently, `@connectrpc/connect-next` does not support the Vercel Edge runtime. It requires the Node.js server runtime, which is used by default when deploying to Vercel. - ## Getting started To get started with Connect, head over to the [docs](https://connectrpc.com/docs/node/getting-started) diff --git a/packages/connect-next/package.json b/packages/connect-next/package.json index c261d5eaf..71f899b15 100644 --- a/packages/connect-next/package.json +++ b/packages/connect-next/package.json @@ -8,10 +8,13 @@ "directory": "packages/connect-next" }, "scripts": { - "clean": "rm -rf ./dist/*", + "prebuild": "rm -rf ./dist/*", "build": "npm run build:cjs && npm run build:esm", "build:cjs": "tsc --project tsconfig.json --module commonjs --verbatimModuleSyntax false --moduleResolution node10 --outDir ./dist/cjs --declaration --declarationDir ./dist/cjs && echo >./dist/cjs/package.json '{\"type\":\"commonjs\"}'", "build:esm": "tsc --project tsconfig.json --outDir ./dist/esm --declaration --declarationDir ./dist/esm", + "format": "prettier --write --ignore-unknown '.' '!dist'", + "license-header": "license-header", + "lint": "eslint --max-warnings 0 .", "attw": "attw --pack" }, "type": "module", @@ -31,5 +34,9 @@ "next": "^13.2.4 || ^14.2.5", "@connectrpc/connect": "2.0.0-alpha.1", "@connectrpc/connect-node": "2.0.0-alpha.1" + }, + "devDependencies": { + "@connectrpc/connect": "2.0.0-alpha.1", + "@connectrpc/connect-node": "2.0.0-alpha.1" } } diff --git a/packages/connect-next/src/connect-nextjs-adapter.ts b/packages/connect-next/src/connect-nextjs-adapter.ts index d5618225a..2fe6d1463 100644 --- a/packages/connect-next/src/connect-nextjs-adapter.ts +++ b/packages/connect-next/src/connect-nextjs-adapter.ts @@ -95,6 +95,7 @@ export function nextJsApiRouter(options: NextJsApiRouterOptions): ApiRoute { const uRes = await uHandler( universalRequestFromNodeRequest( req, + res, req.body as JsonValue | undefined, options.contextValues?.(req), ), diff --git a/packages/connect-node/README.md b/packages/connect-node/README.md index 004b30e40..ff94f35db 100644 --- a/packages/connect-node/README.md +++ b/packages/connect-node/README.md @@ -66,7 +66,6 @@ const { sentence } = await client.say({ sentence: "I feel happy." }); console.log(sentence) // you said: I feel happy. ``` - ### connectNodeAdapter() Run your Connect RPCs on the Node.js `http`, `https`, or `http2` modules. @@ -75,7 +74,7 @@ Run your Connect RPCs on the Node.js `http`, `https`, or `http2` modules. // connect.ts import { ConnectRouter } from "@connectrpc/connect"; -export default function(router: ConnectRouter) { +export default function (router: ConnectRouter) { // implement rpc Say(SayRequest) returns (SayResponse) router.rpc(ElizaService, ElizaService.methods.say, async (req) => ({ sentence: `you said: ${req.sentence}`, @@ -94,7 +93,6 @@ http2.createServer( ).listen(8080); ``` - With that server running, you can make requests with any gRPC, gRPC-Web, or Connect client. `buf curl` with the gRPC protocol: @@ -130,14 +128,13 @@ const transport = createGrpcTransport({ const client = createPromiseClient(ElizaService, transport); const { sentence } = await client.say({ sentence: "I feel happy." }); -console.log(sentence) // you said: I feel happy. +console.log(sentence); // you said: I feel happy. ``` A client for the web browser actually looks identical to this example - it would simply use `createConnectTransport` from [@connectrpc/connect-web](https://www.npmjs.com/package/@connectrpc/connect-web) instead. - ## Getting started To get started with Connect, head over to the [docs](https://connectrpc.com/docs/node/getting-started) diff --git a/packages/connect-node/conformance/README.md b/packages/connect-node/conformance/README.md index b5e3d266b..9b854e49b 100644 --- a/packages/connect-node/conformance/README.md +++ b/packages/connect-node/conformance/README.md @@ -1,15 +1,12 @@ # Connect-Node Conformance Tests -This directory provides conformance test coverage for @connectrpc/connect-node for both clients and servers. +This directory provides conformance test coverage for @connectrpc/connect-node for both clients and servers. It uses the [conformance runner](https://github.com/connectrpc/conformance/releases) to run the tests. ## Running conformance tests -Run `make testnodeconformance` to run all Node conformance tests for both server and client. -The above command is also available as an npm script: `npm run conformance`. - -The individual tests for server and client can also be run via npm: - -`npm run conformance:server` -`npm run conformance:client` +```bash +cd packages/connect-node +npx turbo run conformance:server conformance:client +``` diff --git a/packages/connect-node/conformance/client.ts b/packages/connect-node/conformance/client.ts index 04b92112c..586407c4e 100755 --- a/packages/connect-node/conformance/client.ts +++ b/packages/connect-node/conformance/client.ts @@ -1,5 +1,3 @@ -#!/usr/bin/env -S npx tsx - // Copyright 2021-2024 The Connect Authors // // Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/packages/connect-node/conformance/server.ts b/packages/connect-node/conformance/server.ts index c4ccaba45..d999cdeff 100755 --- a/packages/connect-node/conformance/server.ts +++ b/packages/connect-node/conformance/server.ts @@ -1,5 +1,3 @@ -#!/usr/bin/env -S npx tsx - // Copyright 2021-2024 The Connect Authors // // Licensed under the Apache License, Version 2.0 (the "License"); @@ -19,7 +17,7 @@ import { compressionBrotli, compressionGzip, connectNodeAdapter, -} from "@connectrpc/connect-node"; +} from "../src/index.js"; import * as http from "node:http"; import * as http2 from "node:http2"; import * as https from "node:https"; @@ -113,9 +111,13 @@ function main() { } process.on("SIGTERM", () => { - server.close(); + // Gracefully shutting down a http2 server is complicated. + // We trust the conformance test runner to only send the signal if it's done, + // so we simply shut down hard. + process.exit(); }); - server.listen(undefined, "127.0.0.1", () => { + + server.listen(0, "127.0.0.1", () => { const addrInfo = server.address() as net.AddressInfo; const res = create(ServerCompatResponseSchema, { pemCert: diff --git a/packages/connect-node/conformance/transport.ts b/packages/connect-node/conformance/transport.ts index 1d8bc60e9..e789b5112 100644 --- a/packages/connect-node/conformance/transport.ts +++ b/packages/connect-node/conformance/transport.ts @@ -31,7 +31,7 @@ import { compressionGzip, compressionBrotli, createGrpcWebTransport, -} from "@connectrpc/connect-node"; +} from "../src/index.js"; import type { Compression } from "@connectrpc/connect/protocol"; import * as http2 from "node:http2"; diff --git a/packages/connect-node/package.json b/packages/connect-node/package.json index 13f4100dc..0b0c1aa05 100644 --- a/packages/connect-node/package.json +++ b/packages/connect-node/package.json @@ -8,16 +8,17 @@ "directory": "packages/connect-node" }, "scripts": { - "clean": "rm -rf ./dist/*", - "generate": "buf generate", + "prebuild": "rm -rf ./dist/*", "build": "npm run build:cjs && npm run build:esm", "build:cjs": "tsc --project tsconfig.build.json --module commonjs --moduleResolution node10 --verbatimModuleSyntax false --outDir ./dist/cjs --declaration --declarationDir ./dist/cjs && echo >./dist/cjs/package.json '{\"type\":\"commonjs\"}'", "build:esm": "tsc --project tsconfig.build.json --outDir ./dist/esm --declaration --declarationDir ./dist/esm", - "attw": "attw --pack", - "jasmine": "jasmine --config=jasmine.json", - "conformance": "npm run conformance:server && npm run conformance:client", - "conformance:server": "tsc --noEmit && connectconformance --mode server --conf ./conformance/conformance-node.yaml -v ./conformance/server.ts", - "conformance:client": "tsc --noEmit && connectconformance --mode client --conf ./conformance/conformance-node.yaml -v ./conformance/client.ts" + "test": "jasmine --config=jasmine.json", + "conformance:server": "tsc --noEmit && connectconformance --mode server --conf ./conformance/conformance-node.yaml -v -- tsx ./conformance/server.ts", + "conformance:client": "tsc --noEmit && connectconformance --mode client --conf ./conformance/conformance-node.yaml -v -- tsx ./conformance/client.ts", + "format": "prettier --write --ignore-unknown '.' '!dist'", + "license-header": "license-header", + "lint": "eslint --max-warnings 0 .", + "attw": "attw --pack" }, "type": "module", "main": "./dist/cjs/index.js", diff --git a/packages/connect-node/src/compression.spec.ts b/packages/connect-node/src/compression.spec.ts index 4aeaf65fd..618d7653b 100644 --- a/packages/connect-node/src/compression.spec.ts +++ b/packages/connect-node/src/compression.spec.ts @@ -69,20 +69,6 @@ describe("compression", () => { ); } }); - it("should raise internal error on excessive readMaxBytes", async () => { - try { - await compression.decompress( - new Uint8Array([0xde, 0xad, 0xbe, 0xef]), - Number.MAX_SAFE_INTEGER, - ); - fail("excepted an error"); - } catch (e) { - expect(e).toBeInstanceOf(ConnectError); - expect(ConnectError.from(e).message).toBe( - "[internal] decompression failed", - ); - } - }); }); } }); diff --git a/packages/connect-node/src/compression.ts b/packages/connect-node/src/compression.ts index 242b26565..d30ddc64f 100644 --- a/packages/connect-node/src/compression.ts +++ b/packages/connect-node/src/compression.ts @@ -76,35 +76,30 @@ function wrapZLibErrors( readMaxBytes: number, ): Promise { return promise.catch((e) => { - const { code } = getNodeErrorProps(e); + const props = getNodeErrorProps(e); + let code = Code.Internal; + let message = "decompression failed"; // eslint-disable-next-line @typescript-eslint/switch-exhaustiveness-check - switch (code) { + switch (props.code) { case "ERR_BUFFER_TOO_LARGE": - e = new ConnectError( - `message is larger than configured readMaxBytes ${readMaxBytes} after decompression`, - Code.ResourceExhausted, - ); + code = Code.ResourceExhausted; + message = `message is larger than configured readMaxBytes ${readMaxBytes} after decompression`; break; case "Z_DATA_ERROR": case "ERR_PADDING_2": - e = new ConnectError( - "decompression failed", - Code.InvalidArgument, - undefined, - undefined, - e, - ); + code = Code.InvalidArgument; break; default: - e = new ConnectError( - "decompression failed", - Code.Internal, - undefined, - undefined, - e, - ); + if ( + props.code !== undefined && + props.code.startsWith("ERR__ERROR_FORMAT_") + ) { + code = Code.InvalidArgument; + } break; } - return Promise.reject(e); + return Promise.reject( + new ConnectError(message, code, undefined, undefined, e), + ); }); } diff --git a/packages/connect-node/src/connect-node-adapter.ts b/packages/connect-node/src/connect-node-adapter.ts index 68a389bff..ec2394b17 100644 --- a/packages/connect-node/src/connect-node-adapter.ts +++ b/packages/connect-node/src/connect-node-adapter.ts @@ -96,6 +96,7 @@ export function connectNodeAdapter( } const uReq = universalRequestFromNodeRequest( req, + res, undefined, options.contextValues?.(req), ); diff --git a/packages/connect-node/src/http2-session-manager.ts b/packages/connect-node/src/http2-session-manager.ts index 258e42ca1..4341097f2 100644 --- a/packages/connect-node/src/http2-session-manager.ts +++ b/packages/connect-node/src/http2-session-manager.ts @@ -156,13 +156,13 @@ export class Http2SessionManager { private verifying: Promise | undefined; public constructor( - authority: URL | string, + url: URL | string, pingOptions?: Http2SessionOptions, http2SessionOptions?: | http2.ClientSessionOptions | http2.SecureClientSessionOptions, ) { - this.authority = new URL(authority).origin; + this.authority = new URL(url).origin; this.http2SessionOptions = http2SessionOptions; this.options = { pingIntervalMs: pingOptions?.pingIntervalMs ?? Number.POSITIVE_INFINITY, diff --git a/packages/connect-node/src/node-universal-client.ts b/packages/connect-node/src/node-universal-client.ts index 9df5260f6..46c754254 100644 --- a/packages/connect-node/src/node-universal-client.ts +++ b/packages/connect-node/src/node-universal-client.ts @@ -62,11 +62,11 @@ export type NodeHttpClientOptions = httpVersion: "2"; /** - * A function that must return a session manager for the given authority. + * A function that must return a session manager for the given URL. * The session manager may be taken from a pool. * By default, a new Http2SessionManager is created for every request. */ - sessionProvider?: (authority: string) => NodeHttp2ClientSessionManager; + sessionProvider?: (url: string) => NodeHttp2ClientSessionManager; }; /** @@ -80,8 +80,7 @@ export function createNodeHttpClient(options: NodeHttpClientOptions) { return createNodeHttp1Client(options.nodeOptions); } const sessionProvider = - options.sessionProvider ?? - ((authority: string) => new Http2SessionManager(authority)); + options.sessionProvider ?? ((url: string) => new Http2SessionManager(url)); return createNodeHttp2Client(sessionProvider); } @@ -131,13 +130,12 @@ function createNodeHttp1Client( sentinel.catch((e) => { reject(e); }); - h1Request( sentinel, req.url, { ...httpOptions, - headers: webHeaderToNodeHeaders(req.header), + headers: webHeaderToNodeHeaders(req.header, httpOptions?.headers), method: req.method, }, (request) => { @@ -169,7 +167,7 @@ function createNodeHttp1Client( * an UniversalClientResponse. */ function createNodeHttp2Client( - sessionProvider: (authority: string) => NodeHttp2ClientSessionManager, + sessionProvider: (url: string) => NodeHttp2ClientSessionManager, ): UniversalClientFn { return function request( req: UniversalClientRequest, @@ -281,7 +279,7 @@ function h2Request( options: Omit, onStream: (stream: http2.ClientHttp2Stream) => void, ): void { - const requestUrl = new URL(url, sm.authority); + const requestUrl = new URL(url); if (requestUrl.origin !== sm.authority) { const message = `cannot make a request to ${requestUrl.origin}: the http2 session is connected to ${sm.authority}`; sentinel.reject(new ConnectError(message, Code.Internal)); diff --git a/packages/connect-node/src/node-universal-handler.spec.ts b/packages/connect-node/src/node-universal-handler.spec.ts index 47f35de7d..510fa8d3a 100644 --- a/packages/connect-node/src/node-universal-handler.spec.ts +++ b/packages/connect-node/src/node-universal-handler.spec.ts @@ -27,14 +27,15 @@ import type { UniversalServerRequest } from "@connectrpc/connect/protocol"; // Polyfill the Headers API for Node versions < 18 import "./node-headers-polyfill.js"; -describe("universalRequestFromNodeRequest()", function () { +describe("universalRequestFromNodeResponse()", function () { describe("with HTTP/2 stream closed with an RST code", function () { let serverRequest: UniversalServerRequest | undefined; const server = useNodeServer(() => { serverRequest = undefined; - return http2.createServer(function (request) { + return http2.createServer(function (request, response) { serverRequest = universalRequestFromNodeRequest( request, + response, undefined, undefined, ); @@ -176,9 +177,10 @@ describe("universalRequestFromNodeRequest()", function () { connectionsCheckingInterval: 1, requestTimeout: 0, }, - function (request) { + function (request, response) { serverRequest = universalRequestFromNodeRequest( request, + response, undefined, undefined, ); @@ -269,6 +271,7 @@ describe("universalRequestFromNodeRequest()", function () { function (request, response) { serverRequest = universalRequestFromNodeRequest( request, + response, undefined, undefined, ); @@ -322,4 +325,49 @@ describe("universalRequestFromNodeRequest()", function () { } }); }); + describe("with HTTP/1.1", function () { + let serverRequest: UniversalServerRequest | undefined; + let serverNodeResponse: + | http.ServerResponse + | undefined; + const server = useNodeServer(() => + http.createServer(function (request, response) { + serverRequest = universalRequestFromNodeRequest( + request, + response, + undefined, + undefined, + ); + response.on("error", fail); + serverNodeResponse = response; + void readAllBytes( + serverRequest.body as AsyncIterable, + Number.MAX_SAFE_INTEGER, + ).then(() => { + response.writeHead(200); + response.flushHeaders(); + }); + }), + ); + it("signal should not be aborted on start", async function () { + await new Promise((resolve) => { + const request = http.request(server.getUrl(), { + method: "POST", + // close TCP connection after we're done so that the server shuts down cleanly + agent: new http.Agent({ keepAlive: false }), + }); + request.on("error", fail); + request.flushHeaders(); + request.end(); + request.on("response", (response) => { + expect(serverRequest).toBeDefined(); + expect(serverRequest?.signal.aborted).toBeFalse(); + serverNodeResponse?.end(); + void readAllBytes(response, Number.MAX_SAFE_INTEGER).then(() => + resolve(), + ); + }); + }); + }); + }); }); diff --git a/packages/connect-node/src/node-universal-handler.ts b/packages/connect-node/src/node-universal-handler.ts index 2eb7230d4..997f8779f 100644 --- a/packages/connect-node/src/node-universal-handler.ts +++ b/packages/connect-node/src/node-universal-handler.ts @@ -66,16 +66,44 @@ export type NodeServerResponse = ( }; /** - * Converts a UniversalServerRequest to a Node.js server request. + * Converts a Node.js server request to a UniversalServerRequest. * This function helps to implement adapters to server frameworks running * on Node.js. Please be careful using this function in your own code, as we * may have to make changes to it in the future. */ export function universalRequestFromNodeRequest( nodeRequest: NodeServerRequest, + nodeResponse: NodeServerResponse, parsedJsonBody: JsonValue | undefined, contextValues: ContextValues | undefined, +): UniversalServerRequest; +/** + * @deprecated + */ +export function universalRequestFromNodeRequest( + nodeRequest: NodeServerRequest, + parsedJsonBody: JsonValue | undefined, + contextValues: ContextValues | undefined, +): UniversalServerRequest; +export function universalRequestFromNodeRequest( + nodeRequest: NodeServerRequest, + ...rest: + | [ + nodeResponse: NodeServerResponse, + parsedJsonBody: JsonValue | undefined, + contextValues: ContextValues | undefined, + ] + | [ + parsedJsonBody: JsonValue | undefined, + contextValues: ContextValues | undefined, + ] ): UniversalServerRequest { + const nodeResponse: NodeServerResponse | undefined = + rest.length === 3 ? rest[0] : undefined; + const parsedJsonBody: JsonValue | undefined = + rest.length === 3 ? rest[1] : rest[0]; + const contextValues: ContextValues | undefined = + rest.length === 3 ? rest[2] : rest[1]; const encrypted = "encrypted" in nodeRequest.socket && nodeRequest.socket.encrypted; const protocol = encrypted ? "https" : "http"; @@ -107,18 +135,28 @@ export function universalRequestFromNodeRequest( }); } else { // HTTP/1.1 does not have error codes, but Node.js has ECONNRESET + const nodeResponsOrRequest = nodeResponse ?? nodeRequest; const onH1Error = (e: Error) => { nodeRequest.off("error", onH1Error); - nodeRequest.off("close", onH1Close); + nodeResponsOrRequest.off("close", onH1Close); abortController.abort(connectErrorFromNodeReason(e)); }; const onH1Close = () => { nodeRequest.off("error", onH1Error); - nodeRequest.off("close", onH1Close); - abortController.abort(); + nodeResponsOrRequest.off("close", onH1Close); + // When subscribed to the response, this can get called before "error" + abortController.abort( + nodeRequest.errored + ? connectErrorFromNodeReason(nodeRequest.errored) + : undefined, + ); }; nodeRequest.once("error", onH1Error); - nodeRequest.once("close", onH1Close); + // Node emits close on the request as soon as all data is read. + // We instead subscribe to the response (if available) + // + // Ref: https://github.com/nodejs/node/issues/40775 + nodeResponsOrRequest.once("close", onH1Close); } return { httpVersion: nodeRequest.httpVersion, @@ -207,7 +245,16 @@ export async function universalResponseToNodeResponse( async function* asyncIterableFromNodeServerRequest( request: NodeServerRequest, ): AsyncIterable { - for await (const chunk of request) { + const it = request.iterator({ + // Node.js v16 closes request and response when this option isn't disabled. + // When one of our handlers receives invalid data (such as an unexpected + // compression flag in a streaming request), we're unable to write the error + // response. + // Later major versions have a more sensible behavior - we can revert this + // workaround once we stop supporting v16. + destroyOnReturn: false, + }); + for await (const chunk of it) { yield chunk; } } diff --git a/packages/connect-node/src/node-universal-header.spec.ts b/packages/connect-node/src/node-universal-header.spec.ts index 97829ee4f..b7c5a61ac 100644 --- a/packages/connect-node/src/node-universal-header.spec.ts +++ b/packages/connect-node/src/node-universal-header.spec.ts @@ -12,6 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. +import * as http from "http"; import { nodeHeaderToWebHeader, webHeaderToNodeHeaders, @@ -124,4 +125,24 @@ describe("webHeaderToNodeHeaders()", function () { }); }); } + it("should accept default node headers", function () { + const nodeDefaults: http.OutgoingHttpHeaders = { + a: "a", + b: ["b1", "b2"], + c: 123, + }; + const webHeaders: HeadersInit = [ + ["b", "web"], + ["c", "456"], + ["d", "d1"], + ["d", "d2"], + ]; + const h = webHeaderToNodeHeaders(webHeaders, nodeDefaults); + expect(h).toEqual({ + a: "a", + b: ["b1", "b2", "web"], + c: ["123", "456"], + d: ["d1", "d2"], + }); + }); }); diff --git a/packages/connect-node/src/node-universal-header.ts b/packages/connect-node/src/node-universal-header.ts index a1deda65e..1f4ddf320 100644 --- a/packages/connect-node/src/node-universal-header.ts +++ b/packages/connect-node/src/node-universal-header.ts @@ -53,45 +53,66 @@ export function nodeHeaderToWebHeader( /** * Convert a fetch API Headers object to a Node.js headers object. + * + * Optionally accepts default Node.js headers. If provided, fetch API headers + * are appended to the defaults. The original defaults headers are not modified. */ export function webHeaderToNodeHeaders( headersInit: HeadersInit, + defaultNodeHeaders?: http.OutgoingHttpHeaders, ): http.OutgoingHttpHeaders; export function webHeaderToNodeHeaders( headersInit: HeadersInit | undefined, ): http.OutgoingHttpHeaders | undefined; export function webHeaderToNodeHeaders( headersInit: HeadersInit | undefined, + defaultNodeHeaders?: http.OutgoingHttpHeaders, ): http.OutgoingHttpHeaders | undefined { - if (headersInit === undefined) { + if (headersInit === undefined && defaultNodeHeaders === undefined) { return undefined; } const o = Object.create(null) as http.OutgoingHttpHeaders; - const append = (key: string, value: string): void => { - key = key.toLowerCase(); - const existing = o[key]; - if (typeof existing == "string") { - o[key] = [existing, value]; - } else if (Array.isArray(existing)) { - existing.push(value); - } else { - o[key] = value; - } - }; - if (Array.isArray(headersInit)) { - for (const [key, value] of headersInit) { - append(key, value); - } - } else if ("forEach" in headersInit) { - if (typeof headersInit.forEach == "function") { - headersInit.forEach((value, key) => { - append(key, value); - }); + if (defaultNodeHeaders !== undefined) { + for (const [key, value] of Object.entries(defaultNodeHeaders)) { + if (Array.isArray(value)) { + o[key] = value.concat(); + } else if (value !== undefined) { + o[key] = value; + } } - } else { - for (const [key, value] of Object.entries(headersInit)) { - append(key, value); + } + if (headersInit !== undefined) { + if (Array.isArray(headersInit)) { + for (const [key, value] of headersInit) { + appendWebHeader(o, key, value); + } + } else if ("forEach" in headersInit) { + if (typeof headersInit.forEach == "function") { + headersInit.forEach((value, key) => { + appendWebHeader(o, key, value); + }); + } + } else { + for (const [key, value] of Object.entries(headersInit)) { + appendWebHeader(o, key, value); + } } } return o; } + +function appendWebHeader( + o: http.OutgoingHttpHeaders, + key: string, + value: string, +) { + key = key.toLowerCase(); + const existing = o[key]; + if (Array.isArray(existing)) { + existing.push(value); + } else if (existing === undefined) { + o[key] = value; + } else { + o[key] = [existing.toString(), value]; + } +} diff --git a/packages/connect-node/src/testdata/gen/connectrpc/eliza/v1/eliza_pb.ts b/packages/connect-node/src/testdata/gen/connectrpc/eliza/v1/eliza_pb.ts index ca2d92d5c..cee91b4af 100644 --- a/packages/connect-node/src/testdata/gen/connectrpc/eliza/v1/eliza_pb.ts +++ b/packages/connect-node/src/testdata/gen/connectrpc/eliza/v1/eliza_pb.ts @@ -16,15 +16,26 @@ // @generated from file connectrpc/eliza/v1/eliza.proto (package connectrpc.eliza.v1, syntax proto3) /* eslint-disable */ -import type { GenFile, GenMessage, GenService } from "@bufbuild/protobuf/codegenv1"; -import { fileDesc, messageDesc, serviceDesc } from "@bufbuild/protobuf/codegenv1"; +import type { + GenFile, + GenMessage, + GenService, +} from "@bufbuild/protobuf/codegenv1"; +import { + fileDesc, + messageDesc, + serviceDesc, +} from "@bufbuild/protobuf/codegenv1"; import type { Message } from "@bufbuild/protobuf"; /** * Describes the file connectrpc/eliza/v1/eliza.proto. */ -export const file_connectrpc_eliza_v1_eliza: GenFile = /*@__PURE__*/ - fileDesc("Ch9jb25uZWN0cnBjL2VsaXphL3YxL2VsaXphLnByb3RvEhNjb25uZWN0cnBjLmVsaXphLnYxIh4KClNheVJlcXVlc3QSEAoIc2VudGVuY2UYASABKAkiHwoLU2F5UmVzcG9uc2USEAoIc2VudGVuY2UYASABKAkiIwoPQ29udmVyc2VSZXF1ZXN0EhAKCHNlbnRlbmNlGAEgASgJIiQKEENvbnZlcnNlUmVzcG9uc2USEAoIc2VudGVuY2UYASABKAkiIAoQSW50cm9kdWNlUmVxdWVzdBIMCgRuYW1lGAEgASgJIiUKEUludHJvZHVjZVJlc3BvbnNlEhAKCHNlbnRlbmNlGAEgASgJMpwCCgxFbGl6YVNlcnZpY2USTQoDU2F5Eh8uY29ubmVjdHJwYy5lbGl6YS52MS5TYXlSZXF1ZXN0GiAuY29ubmVjdHJwYy5lbGl6YS52MS5TYXlSZXNwb25zZSIDkAIBEl0KCENvbnZlcnNlEiQuY29ubmVjdHJwYy5lbGl6YS52MS5Db252ZXJzZVJlcXVlc3QaJS5jb25uZWN0cnBjLmVsaXphLnYxLkNvbnZlcnNlUmVzcG9uc2UiACgBMAESXgoJSW50cm9kdWNlEiUuY29ubmVjdHJwYy5lbGl6YS52MS5JbnRyb2R1Y2VSZXF1ZXN0GiYuY29ubmVjdHJwYy5lbGl6YS52MS5JbnRyb2R1Y2VSZXNwb25zZSIAMAFiBnByb3RvMw"); +export const file_connectrpc_eliza_v1_eliza: GenFile = + /*@__PURE__*/ + fileDesc( + "Ch9jb25uZWN0cnBjL2VsaXphL3YxL2VsaXphLnByb3RvEhNjb25uZWN0cnBjLmVsaXphLnYxIh4KClNheVJlcXVlc3QSEAoIc2VudGVuY2UYASABKAkiHwoLU2F5UmVzcG9uc2USEAoIc2VudGVuY2UYASABKAkiIwoPQ29udmVyc2VSZXF1ZXN0EhAKCHNlbnRlbmNlGAEgASgJIiQKEENvbnZlcnNlUmVzcG9uc2USEAoIc2VudGVuY2UYASABKAkiIAoQSW50cm9kdWNlUmVxdWVzdBIMCgRuYW1lGAEgASgJIiUKEUludHJvZHVjZVJlc3BvbnNlEhAKCHNlbnRlbmNlGAEgASgJMpwCCgxFbGl6YVNlcnZpY2USTQoDU2F5Eh8uY29ubmVjdHJwYy5lbGl6YS52MS5TYXlSZXF1ZXN0GiAuY29ubmVjdHJwYy5lbGl6YS52MS5TYXlSZXNwb25zZSIDkAIBEl0KCENvbnZlcnNlEiQuY29ubmVjdHJwYy5lbGl6YS52MS5Db252ZXJzZVJlcXVlc3QaJS5jb25uZWN0cnBjLmVsaXphLnYxLkNvbnZlcnNlUmVzcG9uc2UiACgBMAESXgoJSW50cm9kdWNlEiUuY29ubmVjdHJwYy5lbGl6YS52MS5JbnRyb2R1Y2VSZXF1ZXN0GiYuY29ubmVjdHJwYy5lbGl6YS52MS5JbnRyb2R1Y2VSZXNwb25zZSIAMAFiBnByb3RvMw", + ); /** * SayRequest is a single-sentence request. @@ -42,7 +53,8 @@ export type SayRequest = Message<"connectrpc.eliza.v1.SayRequest"> & { * Describes the message connectrpc.eliza.v1.SayRequest. * Use `create(SayRequestSchema)` to create a new message. */ -export const SayRequestSchema: GenMessage = /*@__PURE__*/ +export const SayRequestSchema: GenMessage = + /*@__PURE__*/ messageDesc(file_connectrpc_eliza_v1_eliza, 0); /** @@ -61,7 +73,8 @@ export type SayResponse = Message<"connectrpc.eliza.v1.SayResponse"> & { * Describes the message connectrpc.eliza.v1.SayResponse. * Use `create(SayResponseSchema)` to create a new message. */ -export const SayResponseSchema: GenMessage = /*@__PURE__*/ +export const SayResponseSchema: GenMessage = + /*@__PURE__*/ messageDesc(file_connectrpc_eliza_v1_eliza, 1); /** @@ -81,7 +94,8 @@ export type ConverseRequest = Message<"connectrpc.eliza.v1.ConverseRequest"> & { * Describes the message connectrpc.eliza.v1.ConverseRequest. * Use `create(ConverseRequestSchema)` to create a new message. */ -export const ConverseRequestSchema: GenMessage = /*@__PURE__*/ +export const ConverseRequestSchema: GenMessage = + /*@__PURE__*/ messageDesc(file_connectrpc_eliza_v1_eliza, 2); /** @@ -90,18 +104,20 @@ export const ConverseRequestSchema: GenMessage = /*@__PURE__*/ * * @generated from message connectrpc.eliza.v1.ConverseResponse */ -export type ConverseResponse = Message<"connectrpc.eliza.v1.ConverseResponse"> & { - /** - * @generated from field: string sentence = 1; - */ - sentence: string; -}; +export type ConverseResponse = + Message<"connectrpc.eliza.v1.ConverseResponse"> & { + /** + * @generated from field: string sentence = 1; + */ + sentence: string; + }; /** * Describes the message connectrpc.eliza.v1.ConverseResponse. * Use `create(ConverseResponseSchema)` to create a new message. */ -export const ConverseResponseSchema: GenMessage = /*@__PURE__*/ +export const ConverseResponseSchema: GenMessage = + /*@__PURE__*/ messageDesc(file_connectrpc_eliza_v1_eliza, 3); /** @@ -109,18 +125,20 @@ export const ConverseResponseSchema: GenMessage = /*@__PURE__* * * @generated from message connectrpc.eliza.v1.IntroduceRequest */ -export type IntroduceRequest = Message<"connectrpc.eliza.v1.IntroduceRequest"> & { - /** - * @generated from field: string name = 1; - */ - name: string; -}; +export type IntroduceRequest = + Message<"connectrpc.eliza.v1.IntroduceRequest"> & { + /** + * @generated from field: string name = 1; + */ + name: string; + }; /** * Describes the message connectrpc.eliza.v1.IntroduceRequest. * Use `create(IntroduceRequestSchema)` to create a new message. */ -export const IntroduceRequestSchema: GenMessage = /*@__PURE__*/ +export const IntroduceRequestSchema: GenMessage = + /*@__PURE__*/ messageDesc(file_connectrpc_eliza_v1_eliza, 4); /** @@ -128,18 +146,20 @@ export const IntroduceRequestSchema: GenMessage = /*@__PURE__* * * @generated from message connectrpc.eliza.v1.IntroduceResponse */ -export type IntroduceResponse = Message<"connectrpc.eliza.v1.IntroduceResponse"> & { - /** - * @generated from field: string sentence = 1; - */ - sentence: string; -}; +export type IntroduceResponse = + Message<"connectrpc.eliza.v1.IntroduceResponse"> & { + /** + * @generated from field: string sentence = 1; + */ + sentence: string; + }; /** * Describes the message connectrpc.eliza.v1.IntroduceResponse. * Use `create(IntroduceResponseSchema)` to create a new message. */ -export const IntroduceResponseSchema: GenMessage = /*@__PURE__*/ +export const IntroduceResponseSchema: GenMessage = + /*@__PURE__*/ messageDesc(file_connectrpc_eliza_v1_eliza, 5); /** @@ -162,7 +182,7 @@ export const ElizaService: GenService<{ methodKind: "unary"; input: typeof SayRequestSchema; output: typeof SayResponseSchema; - }, + }; /** * Converse is a bidirectional RPC. The caller may exchange multiple * back-and-forth messages with Eliza over a long-lived connection. Eliza @@ -174,7 +194,7 @@ export const ElizaService: GenService<{ methodKind: "bidi_streaming"; input: typeof ConverseRequestSchema; output: typeof ConverseResponseSchema; - }, + }; /** * Introduce is a server streaming RPC. Given the caller's name, Eliza * returns a stream of sentences to introduce itself. @@ -185,7 +205,5 @@ export const ElizaService: GenService<{ methodKind: "server_streaming"; input: typeof IntroduceRequestSchema; output: typeof IntroduceResponseSchema; - }, -}> = /*@__PURE__*/ - serviceDesc(file_connectrpc_eliza_v1_eliza, 0); - + }; +}> = /*@__PURE__*/ serviceDesc(file_connectrpc_eliza_v1_eliza, 0); diff --git a/packages/connect-node/src/transport.spec.ts b/packages/connect-node/src/transport.spec.ts new file mode 100644 index 000000000..d6026c2c5 --- /dev/null +++ b/packages/connect-node/src/transport.spec.ts @@ -0,0 +1,107 @@ +// Copyright 2021-2024 The Connect Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +/* eslint-disable @typescript-eslint/no-invalid-void-type */ +import { create } from "@bufbuild/protobuf"; +import { useNodeServer } from "./use-node-server-helper.spec.js"; +import * as http2 from "node:http2"; +import { connectNodeAdapter } from "./connect-node-adapter.js"; +import { createPromiseClient } from "@connectrpc/connect"; +import type { Transport } from "@connectrpc/connect"; +import { createTransport as createGrpcTransport } from "@connectrpc/connect/protocol-grpc"; +import { createTransport as createGrpcWebTransport } from "@connectrpc/connect/protocol-grpc-web"; +import { validateNodeTransportOptions } from "./node-transport-options.js"; +import { + ElizaService, + IntroduceResponseSchema, +} from "./testdata/gen/connectrpc/eliza/v1/eliza_pb.js"; + +describe("Calls should fail with code internal on RST_STREAM no_error before trailers are received", function () { + let firstMessage: ReturnType>; + let rstStream: ReturnType>; + beforeEach(function () { + firstMessage = createCompleter(); + rstStream = createCompleter(); + }); + const adaptor = connectNodeAdapter({ + routes({ rpc }) { + rpc(ElizaService.method.introduce, async function* () { + yield { sentence: "foo" }; + // Notify to send rst stream after a message. + firstMessage.resolve(); + // Wait for rst stream to be sent before returning. + // If we return early it will create a race. + await rstStream.promise; + }); + }, + }); + const server = useNodeServer(() => + http2.createServer((request, response) => { + adaptor(request, response); + firstMessage.promise + .then(() => { + response.stream.close(0, () => rstStream.resolve()); + }) + .catch(fail); + }), + ); + async function testRstStream(transport: Transport) { + const client = createPromiseClient(ElizaService, transport); + const it = client.introduce({ name: "1" })[Symbol.asyncIterator](); + const first = await it.next(); + expect(first.done).toBeFalse(); + expect(first.value).toEqual( + create(IntroduceResponseSchema, { sentence: "foo" }), + ); + await expectAsync(it.next()).toBeRejected(); + } + it("for gRPC Transport", async function () { + await testRstStream( + createGrpcTransport({ + ...validateNodeTransportOptions({ + httpVersion: "2", + baseUrl: server.getUrl(), + }), + baseUrl: server.getUrl(), + httpClient: server.getClient(), + }), + ); + }); + it("for gRPC Transport", async function () { + await testRstStream( + createGrpcWebTransport({ + ...validateNodeTransportOptions({ + httpVersion: "2", + baseUrl: server.getUrl(), + }), + baseUrl: server.getUrl(), + httpClient: server.getClient(), + }), + ); + }); +}); + +function createCompleter() { + let resolve: (_: T | PromiseLike) => void; + let reject: (reason?: unknown) => void; + const promise = new Promise((res, rej) => { + resolve = res; + reject = rej; + }); + return { + promise, + resolve: resolve!, + reject: reject!, + }; +} diff --git a/packages/connect-node/src/use-node-server-helper.spec.ts b/packages/connect-node/src/use-node-server-helper.spec.ts index 3330a2ad8..8e9e2c3f3 100644 --- a/packages/connect-node/src/use-node-server-helper.spec.ts +++ b/packages/connect-node/src/use-node-server-helper.spec.ts @@ -99,7 +99,7 @@ export function useNodeServer( client = createNodeHttpClient({ httpVersion: "2", sessionProvider: (authority) => { - if (authority !== this.getUrl()) { + if (new URL(this.getUrl()).origin != new URL(authority).origin) { throw new Error( "client from useNodeServer() can only be used for requests against the server URL", ); diff --git a/packages/connect-node/turbo.json b/packages/connect-node/turbo.json new file mode 100644 index 000000000..b57bb0aa8 --- /dev/null +++ b/packages/connect-node/turbo.json @@ -0,0 +1,11 @@ +{ + "$schema": "https://turbo.build/schema.json", + "extends": ["//"], + "tasks": { + "conformance": { + "dependsOn": ["conformance:client", "conformance:server"] + }, + "conformance:client": { "cache": false, "dependsOn": ["^build"] }, + "conformance:server": { "cache": false, "dependsOn": ["^build"] } + } +} diff --git a/packages/connect-web-bench/README.md b/packages/connect-web-bench/README.md index 0dff21b54..3bef7eff0 100644 --- a/packages/connect-web-bench/README.md +++ b/packages/connect-web-bench/README.md @@ -15,10 +15,10 @@ usually do. We repeat this for an increasing number of RPCs. | code generator | RPCs | bundle size | minified | compressed | | -------------- | ---: | ----------: | --------: | ---------: | -| Connect-ES | 1 | 276,454 b | 176,396 b | 35,777 b | -| Connect-ES | 4 | 280,720 b | 179,498 b | 36,547 b | -| Connect-ES | 8 | 285,590 b | 183,929 b | 37,515 b | -| Connect-ES | 16 | 294,732 b | 191,553 b | 38,996 b | +| Connect-ES | 1 | 276,517 b | 176,399 b | 35,796 b | +| Connect-ES | 4 | 280,783 b | 179,501 b | 36,539 b | +| Connect-ES | 8 | 285,653 b | 183,932 b | 37,443 b | +| Connect-ES | 16 | 294,795 b | 191,556 b | 38,966 b | | gRPC-Web | 1 | 876,563 b | 548,495 b | 52,300 b | | gRPC-Web | 4 | 928,964 b | 580,477 b | 54,673 b | | gRPC-Web | 8 | 1,004,833 b | 628,223 b | 57,118 b | diff --git a/packages/connect-web-bench/chart.svg b/packages/connect-web-bench/chart.svg index 6ef90d7cd..86aa8e06f 100644 --- a/packages/connect-web-bench/chart.svg +++ b/packages/connect-web-bench/chart.svg @@ -42,13 +42,13 @@ 0 KiB - + Connect-ES -Connect-ES 34.94 KiB for 1 RPCs -Connect-ES 35.69 KiB for 4 RPCs -Connect-ES 36.64 KiB for 8 RPCs -Connect-ES 38.08 KiB for 16 RPCs +Connect-ES 34.96 KiB for 1 RPCs +Connect-ES 35.68 KiB for 4 RPCs +Connect-ES 36.57 KiB for 8 RPCs +Connect-ES 38.05 KiB for 16 RPCs diff --git a/packages/connect-web-bench/package.json b/packages/connect-web-bench/package.json index 122e1bdc9..f09aba4ff 100644 --- a/packages/connect-web-bench/package.json +++ b/packages/connect-web-bench/package.json @@ -3,11 +3,14 @@ "private": true, "scripts": { "bundle-size": "tsx src/report.ts", - "pregenerate": "rm -rf src/gen/*", - "generate": "buf generate buf.build/bufbuild/registry:f2077dee5ad44f7d9b660b32bf0958ee", - "postgenerate": "license-header ." + "generate": "buf generate", + "postgenerate": "license-header src/gen", + "format": "prettier --write --ignore-unknown '.' '!src/gen'", + "license-header": "license-header", + "lint": "eslint --max-warnings 0 ." }, "dependencies": { + "@bufbuild/buf": "^1.39.0", "@bufbuild/protobuf": "^2.0.0", "@bufbuild/protoc-gen-es": "^2.0.0", "@connectrpc/connect-web": "2.0.0-alpha.1", diff --git a/packages/connect-web-bench/turbo.json b/packages/connect-web-bench/turbo.json new file mode 100644 index 000000000..d271cff70 --- /dev/null +++ b/packages/connect-web-bench/turbo.json @@ -0,0 +1,9 @@ +{ + "$schema": "https://turbo.build/schema.json", + "extends": ["//"], + "tasks": { + "bundle-size": { + "dependsOn": ["^build", "generate"] + } + } +} diff --git a/packages/connect-web/README.md b/packages/connect-web/README.md index 41b1f0cad..418c3ce0e 100644 --- a/packages/connect-web/README.md +++ b/packages/connect-web/README.md @@ -7,7 +7,6 @@ TypeScript. `@connectrpc/connect-web` provides the following adapters for web browsers, and any other platform that has the fetch API on board: - ### createConnectTransport() Lets your clients running in the web browser talk to a server with the Connect protocol: @@ -29,7 +28,7 @@ console.log(sentence) // you said: I feel happy. ### createGrpcWebTransport() -Lets your clients running in the web browser talk to a server with the gRPC-web protocol: +Lets your clients running in the web browser talk to a server with the gRPC-web protocol: ```diff import { createPromiseClient } from "@connectrpc/connect"; @@ -46,7 +45,6 @@ const { sentence } = await client.say({ sentence: "I feel happy." }); console.log(sentence) // you said: I feel happy. ``` - ## Getting started To get started with Connect, head over to the [docs](https://connectrpc.com/docs/node/getting-started) diff --git a/packages/connect-web/browserstack/README.md b/packages/connect-web/browserstack/README.md index 9fa187959..9fa49d6c9 100644 --- a/packages/connect-web/browserstack/README.md +++ b/packages/connect-web/browserstack/README.md @@ -1,11 +1,11 @@ # Connect-Web Browserstack Tests -This directory provides cross-browser test coverage for @connectrpc/connect-web with Browserstack +This directory provides cross-browser test coverage for @connectrpc/connect-web with Browserstack by running a few select tests on old browsers. Thanks to Browserstack for the sponsorship! To run these tests locally, you need to sign up on [Browserstack](https://www.browserstack.com/) and provide your username and access key: ```bash -BROWSERSTACK_USERNAME= BROWSERSTACK_ACCESS_KEY= make testwebbrowserstack +BROWSERSTACK_USERNAME= BROWSERSTACK_ACCESS_KEY= npx turbo run test-browserstack ``` diff --git a/packages/connect-web/browserstack/bigint.spec.ts b/packages/connect-web/browserstack/bigint.spec.ts index 39b06e616..2a5abbd16 100644 --- a/packages/connect-web/browserstack/bigint.spec.ts +++ b/packages/connect-web/browserstack/bigint.spec.ts @@ -23,7 +23,7 @@ describe("bigint", () => { Int64ValueSchema, toBinary( Int64ValueSchema, - //@ts-ignore TODO: fix the typescript error. + //@ts-expect-error TODO: fix the typescript error. create(Int64ValueSchema, { value: "3409819015" }), ), ).value, diff --git a/packages/connect-web/conformance/README.md b/packages/connect-web/conformance/README.md index 311a72da4..4997b59f9 100644 --- a/packages/connect-web/conformance/README.md +++ b/packages/connect-web/conformance/README.md @@ -8,25 +8,24 @@ It uses the [conformance runner](https://github.com/connectrpc/conformance/relea Tests run in the following environments: -* Chrome -* Firefox -* Safari (only if running in OSX. Safari requires users to enable the "Allow Remote Automation" option in Safari's Develop menu) -* Node.js +- Chrome +- Firefox +- Safari (only if running in OSX. Safari requires users to enable the "Allow Remote Automation" option in Safari's Develop menu) +- Node.js For every environment, two client flavors are available: -* Promise (using `createPromiseClient`) -* Callback (using `createCallbackClient`) -For every combination, an npm script is available: +- Promise (using `createPromiseClient`) +- Callback (using `createCallbackClient`) -`npm run conformance:client::` +For every combination, a task is available: -Before you run npm scripts, make sure to build dependencies with `make .tmp/build/connect-web`. +`npx turbo run conformance::` ## Using a local browser To launch a browser window with access to the browser's network inspector, append the `--openBrowser` flag to the npm script: ``` -npm run conformance:client:chrome:promise -- --openBrowser +npx turbo run conformance:chrome:promise -- --openBrowser ``` diff --git a/packages/connect-web/conformance/client.ts b/packages/connect-web/conformance/client.ts index 7090602d9..cfa52168a 100755 --- a/packages/connect-web/conformance/client.ts +++ b/packages/connect-web/conformance/client.ts @@ -1,5 +1,3 @@ -#!/usr/bin/env -S npx tsx - // Copyright 2021-2024 The Connect Authors // // Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/packages/connect-web/conformance/known-failing-callback-client.txt b/packages/connect-web/conformance/known-failing-callback-client.txt deleted file mode 100644 index 032ad2d5d..000000000 --- a/packages/connect-web/conformance/known-failing-callback-client.txt +++ /dev/null @@ -1,4 +0,0 @@ -# The callback client does not pass a cancelled error to the end-of-stream callback for cancellations. This is intentional behavior as it is the user's -# responsibility to handle this on the client side. -**/server-stream/cancel-after-zero-responses -**/server-stream/cancel-after-responses diff --git a/packages/connect-web/conformance/transport.ts b/packages/connect-web/conformance/transport.ts index 17410605e..4b9b9dd40 100644 --- a/packages/connect-web/conformance/transport.ts +++ b/packages/connect-web/conformance/transport.ts @@ -16,7 +16,7 @@ import { createRegistry } from "@bufbuild/protobuf"; import { createConnectTransport, createGrpcWebTransport, -} from "@connectrpc/connect-web"; +} from "../src/index.js"; import { BidiStreamRequestSchema, ClientStreamRequestSchema, diff --git a/packages/connect-web/package.json b/packages/connect-web/package.json index b039baf9e..aa74cd099 100644 --- a/packages/connect-web/package.json +++ b/packages/connect-web/package.json @@ -8,22 +8,27 @@ "directory": "packages/connect-web" }, "scripts": { - "clean": "rm -rf ./dist/*", + "prebuild": "rm -rf ./dist/*", "build": "npm run build:cjs && npm run build:esm", "build:cjs": "tsc --project tsconfig.build.json --module commonjs --verbatimModuleSyntax false --moduleResolution node10 --outDir ./dist/cjs --declaration --declarationDir ./dist/cjs && echo >./dist/cjs/package.json '{\"type\":\"commonjs\"}'", "build:esm": "tsc --project tsconfig.build.json --outDir ./dist/esm --declaration --declarationDir ./dist/esm", - "attw": "attw --pack", - "conformance:client:chrome:promise": "connectconformance --mode client --conf ./conformance/conformance-web.yaml -v -- ./conformance/client.ts --browser chrome", - "conformance:client:chrome:callback": "connectconformance --mode client --conf ./conformance/conformance-web.yaml -v --known-failing @./conformance/known-failing-callback-client.txt -- ./conformance/client.ts --browser chrome --useCallbackClient", - "conformance:client:firefox:promise": "connectconformance --mode client --conf ./conformance/conformance-web.yaml -v -- ./conformance/client.ts --browser firefox", - "conformance:client:firefox:callback": "connectconformance --mode client --conf ./conformance/conformance-web.yaml -v --known-failing @./conformance/known-failing-callback-client.txt -- ./conformance/client.ts --browser firefox --useCallbackClient", - "conformance:client:safari:promise": "connectconformance --mode client --conf ./conformance/conformance-web.yaml -v -- ./conformance/client.ts --browser safari", - "conformance:client:safari:callback": "connectconformance --mode client --conf ./conformance/conformance-web.yaml -v --known-failing @./conformance/known-failing-callback-client.txt -- ./conformance/client.ts --browser safari --useCallbackClient", - "conformance:client:node:promise": "connectconformance --mode client --conf ./conformance/conformance-web-node.yaml -v -- ./conformance/client.ts --browser node", - "conformance:client:node:callback": "connectconformance --mode client --conf ./conformance/conformance-web-node.yaml -v --known-failing @./conformance/known-failing-callback-client.txt -- ./conformance/client.ts --browser node --useCallbackClient", - "jasmine": "jasmine --config=jasmine.json", + "conformance:safari": "npm run conformance:safari:promise && npm run conformance:client:safari:callback", + "conformance:safari:promise": "connectconformance --mode client --conf conformance/conformance-web.yaml -- tsx conformance/client.ts --browser safari", + "conformance:safari:callback": "connectconformance --mode client --conf conformance/conformance-web.yaml -- tsx conformance/client.ts --browser safari --useCallbackClient", + "conformance:chrome:promise": "connectconformance --mode client --conf conformance/conformance-web.yaml -- tsx conformance/client.ts --browser chrome", + "conformance:chrome:callback": "connectconformance --mode client --conf conformance/conformance-web.yaml -- tsx conformance/client.ts --browser chrome --useCallbackClient", + "conformance:firefox:promise": "connectconformance --mode client --conf conformance/conformance-web.yaml -- tsx conformance/client.ts --browser firefox", + "conformance:firefox:callback": "connectconformance --mode client --conf conformance/conformance-web.yaml -- tsx conformance/client.ts --browser firefox --useCallbackClient", + "conformance:node:promise": "connectconformance --mode client --conf conformance/conformance-web-node.yaml -- tsx conformance/client.ts --browser node", + "conformance:node:callback": "connectconformance --mode client --conf conformance/conformance-web-node.yaml -- tsx conformance/client.ts --browser node --useCallbackClient", + "test": "jasmine --config=jasmine.json", "generate": "buf generate --template browserstack/buf.gen.yaml", - "karma:browserstack": "karma start browserstack/karma.browserstack.conf.cjs" + "postgenerate": "license-header browserstack/gen", + "test-browserstack": "karma start browserstack/karma.browserstack.conf.cjs", + "format": "prettier --write --ignore-unknown '.' '!dist' '!browserstack/gen'", + "license-header": "license-header", + "lint": "eslint --max-warnings 0 .", + "attw": "attw --pack" }, "type": "module", "sideEffects": false, @@ -36,7 +41,7 @@ }, "devDependencies": { "webdriverio": "^8.39.1", - "@bufbuild/buf": "^1.36.0", + "@bufbuild/buf": "^1.39.0", "@bufbuild/protoc-gen-es": "^2.0.0", "@connectrpc/connect-conformance": "^2.0.0-alpha.1", "jasmine": "^5.2.0", diff --git a/packages/connect-web/src/connect-transport.ts b/packages/connect-web/src/connect-transport.ts index ee69bbada..da1913d4e 100644 --- a/packages/connect-web/src/connect-transport.ts +++ b/packages/connect-web/src/connect-transport.ts @@ -261,6 +261,7 @@ export function createConnectTransport( body: ReadableStream, trailerTarget: Headers, header: Headers, + signal: AbortSignal, ) { const reader = createEnvelopeReadableStream(body).getReader(); let endStreamReceived = false; @@ -293,6 +294,16 @@ export function createConnectTransport( } yield parse(data); } + // Node wil not throw an AbortError on `read` if the + // signal is aborted before `getReader` is called. + // As a work around we check at the end and throw. + // + // Ref: https://github.com/nodejs/undici/issues/1940 + if ("throwIfAborted" in signal) { + // We assume that implementations without `throwIfAborted` (old + // browsers) do honor aborted signals on `read`. + signal.throwIfAborted(); + } if (!endStreamReceived) { throw "missing EndStreamResponse"; } @@ -364,7 +375,12 @@ export function createConnectTransport( ...req, header: fRes.headers, trailer, - message: parseResponseBody(fRes.body, trailer, fRes.headers), + message: parseResponseBody( + fRes.body, + trailer, + fRes.headers, + req.signal, + ), }; return res; }, diff --git a/packages/connect-web/src/grpc-web-transport.ts b/packages/connect-web/src/grpc-web-transport.ts index 5514a70a0..572c38a23 100644 --- a/packages/connect-web/src/grpc-web-transport.ts +++ b/packages/connect-web/src/grpc-web-transport.ts @@ -266,6 +266,7 @@ export function createGrpcWebTransport( trailerTarget: Headers, header: Headers, headerError: ConnectError | undefined, + signal: AbortSignal, ) { const reader = createEnvelopeReadableStream(body).getReader(); if (foundStatus) { @@ -305,6 +306,16 @@ export function createGrpcWebTransport( yield parse(data); continue; } + // Node wil not throw an AbortError on `read` if the + // signal is aborted before `getReader` is called. + // As a work around we check at the end and throw. + // + // Ref: https://github.com/nodejs/undici/issues/1940 + if ("throwIfAborted" in signal) { + // We assume that implementations without `throwIfAborted` (old + // browsers) do honor aborted signals on `read`. + signal.throwIfAborted(); + } if (!trailerReceived) { if (headerError) { throw headerError; @@ -379,6 +390,7 @@ export function createGrpcWebTransport( trailer, fRes.headers, headerError, + req.signal, ), }; return res; diff --git a/packages/connect-web/tsconfig.json b/packages/connect-web/tsconfig.json index 1725882fe..6fc737680 100644 --- a/packages/connect-web/tsconfig.json +++ b/packages/connect-web/tsconfig.json @@ -1,4 +1,4 @@ { - "include": ["src/**/*.ts", "conformance/**/*.ts"], + "include": ["src/**/*.ts", "conformance/**/*.ts", "browserstack/**/*.ts"], "extends": "../../tsconfig.base.json" } diff --git a/packages/connect-web/turbo.json b/packages/connect-web/turbo.json new file mode 100644 index 000000000..c9bd0c466 --- /dev/null +++ b/packages/connect-web/turbo.json @@ -0,0 +1,53 @@ +{ + "$schema": "https://turbo.build/schema.json", + "extends": ["//"], + "tasks": { + "generate": { + "outputs": ["browserstack/gen/**"] + }, + "test-browserstack": { + "cache": false, + "env": ["BROWSERSTACK_USERNAME", "BROWSERSTACK_ACCESS_KEY"], + "dependsOn": ["generate", "^build"] + }, + "conformance": { + "dependsOn": ["conformance:node:promise", "conformance:node:callback"] + }, + "conformance:safari": { + "cache": false, + "dependsOn": ["^build"] + }, + "conformance:safari:promise": { + "cache": false, + "dependsOn": ["^build"] + }, + "conformance:safari:callback": { + "cache": false, + "dependsOn": ["^build"] + }, + "conformance:chrome:promise": { + "cache": false, + "dependsOn": ["^build"] + }, + "conformance:chrome:callback": { + "cache": false, + "dependsOn": ["^build"] + }, + "conformance:firefox:promise": { + "cache": false, + "dependsOn": ["^build"] + }, + "conformance:firefox:callback": { + "cache": false, + "dependsOn": ["^build"] + }, + "conformance:node:promise": { + "cache": false, + "dependsOn": ["^build"] + }, + "conformance:node:callback": { + "cache": false, + "dependsOn": ["^build"] + } + } +} diff --git a/packages/connect/README.md b/packages/connect/README.md index f60c32a77..e0e305435 100644 --- a/packages/connect/README.md +++ b/packages/connect/README.md @@ -4,7 +4,6 @@ Connect is a family of libraries for building type-safe APIs with different lang [@connectrpc/connect](https://www.npmjs.com/package/@connectrpc/connect) brings them to TypeScript, the web browser, and to Node.js. - With Connect, you define your schema first: ``` @@ -16,7 +15,7 @@ service ElizaService { And with the magic of code generation, this schema produces servers and clients: ```ts -const answer = await eliza.say({sentence: "I feel happy."}); +const answer = await eliza.say({ sentence: "I feel happy." }); console.log(answer); // {sentence: 'When you feel happy, what do you do?'} ``` @@ -40,7 +39,6 @@ gRPC and gRPC-web, and Connect's [own protocol](https://connectrpc.com/docs/prot optimized for the web. This gives you unparalleled interoperability with full-stack type-safety. - ## Get started on the web Follow our [10 minute tutorial](https://connectrpc.com/docs/web/getting-started) where @@ -53,7 +51,6 @@ We support all modern web browsers that implement the widely available [fetch API](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API) and the [Encoding API](https://developer.mozilla.org/en-US/docs/Web/API/Encoding_API). - ## Get started on Node.js Follow our [10 minute tutorial](https://connectrpc.com/docs/node/getting-started) diff --git a/packages/connect/package.json b/packages/connect/package.json index 5f03a1829..919c94fc2 100644 --- a/packages/connect/package.json +++ b/packages/connect/package.json @@ -9,12 +9,16 @@ "directory": "packages/connect" }, "scripts": { - "clean": "rm -rf ./dist/*", "generate": "buf generate", + "postgenerate": "license-header src/protocol-grpc/gen", + "prebuild": "rm -rf ./dist/*", "build": "npm run build:cjs && npm run build:esm && node scripts/update-user-agent.mjs", "build:cjs": "tsc --project tsconfig.json --module commonjs --verbatimModuleSyntax false --moduleResolution node10 --outDir ./dist/cjs --declaration --declarationDir ./dist/cjs && echo >./dist/cjs/package.json '{\"type\":\"commonjs\"}'", "build:esm": "tsc --project tsconfig.json --outDir ./dist/esm --declaration --declarationDir ./dist/esm", - "jasmine": "jasmine --config=jasmine.json", + "test": "jasmine --config=jasmine.json", + "format": "prettier --write --ignore-unknown '.' '!dist' '!src/protocol-grpc/gen'", + "license-header": "license-header", + "lint": "eslint --max-warnings 0 .", "attw": "attw --pack" }, "type": "module", @@ -62,7 +66,7 @@ "@bufbuild/protobuf": "^2.0.0" }, "devDependencies": { - "@bufbuild/buf": "^1.36.0", + "@bufbuild/buf": "^1.39.0", "@bufbuild/protoc-gen-es": "^2.0.0", "@types/jasmine": "^5.0.0", "jasmine": "^5.2.0", diff --git a/packages/connect/src/protocol-connect/error-json.ts b/packages/connect/src/protocol-connect/error-json.ts index 50a80f504..bef9741a3 100644 --- a/packages/connect/src/protocol-connect/error-json.ts +++ b/packages/connect/src/protocol-connect/error-json.ts @@ -62,8 +62,7 @@ export function errorFromJson( typeof detail != "object" || Array.isArray(detail) || typeof detail.type != "string" || - typeof detail.value != "string" || - ("debug" in detail && typeof detail.debug != "object") + typeof detail.value != "string" ) { throw fallback; } diff --git a/packages/connect/src/protocol-connect/validate-response.ts b/packages/connect/src/protocol-connect/validate-response.ts index 7472fd07b..595e545be 100644 --- a/packages/connect/src/protocol-connect/validate-response.ts +++ b/packages/connect/src/protocol-connect/validate-response.ts @@ -16,7 +16,11 @@ import { Code } from "../code.js"; import { codeFromHttpStatus } from "./http-status.js"; import { ConnectError } from "../connect-error.js"; import { parseContentType } from "./content-type.js"; -import { headerStreamEncoding, headerUnaryEncoding } from "./headers.js"; +import { + headerContentType, + headerStreamEncoding, + headerUnaryEncoding, +} from "./headers.js"; import type { Compression } from "../protocol/compression.js"; import type { MethodKind } from "../types.js"; @@ -38,7 +42,7 @@ export function validateResponse( ): | { isUnaryError: false; unaryError?: undefined } | { isUnaryError: true; unaryError: ConnectError } { - const mimeType = headers.get("Content-Type"); + const mimeType = headers.get(headerContentType); const parsedType = parseContentType(mimeType); if (status !== 200) { const errorFromStatus = new ConnectError( diff --git a/packages/connect/src/protocol-grpc/transport.ts b/packages/connect/src/protocol-grpc/transport.ts index 5d8e511a9..5f0cdf1ba 100644 --- a/packages/connect/src/protocol-grpc/transport.ts +++ b/packages/connect/src/protocol-grpc/transport.ts @@ -144,6 +144,10 @@ export function createTransport(opt: CommonTransportOptions): Transport { ); validateTrailer(uRes.trailer, uRes.header); if (message === undefined) { + // Trailers only response + if (headerError) { + throw headerError; + } throw new ConnectError( "protocol error: missing output message for unary method", uRes.trailer.has(headerGrpcStatus) diff --git a/packages/connect/src/protocol-grpc/validate-response.spec.ts b/packages/connect/src/protocol-grpc/validate-response.spec.ts index d46ca0497..8bde24133 100644 --- a/packages/connect/src/protocol-grpc/validate-response.spec.ts +++ b/packages/connect/src/protocol-grpc/validate-response.spec.ts @@ -38,17 +38,28 @@ describe("gRPC validateResponse()", function () { } it("should honor grpc-status field", function () { - const e = v(200, { "grpc-status": "8" }); + const e = v(200, { + "grpc-status": "8", + "content-type": "application/grpc+proto", + }); expect(e?.message).toBe("[resource_exhausted]"); }); it("should honor grpc-message field", function () { - const e = v(200, { "grpc-status": "8", "grpc-message": "out of space" }); + const e = v(200, { + "grpc-status": "8", + "grpc-message": "out of space", + "content-type": "application/grpc+proto", + }); expect(e?.message).toBe("[resource_exhausted] out of space"); }); it("should include headers as error metadata with grpc-status", function () { - const e = v(200, { "grpc-status": "8", Foo: "Bar" }); + const e = v(200, { + "grpc-status": "8", + Foo: "Bar", + "content-type": "application/grpc+proto", + }); expect(e?.metadata.get("Foo")).toBe("Bar"); }); @@ -80,7 +91,10 @@ describe("gRPC validateResponse()", function () { it("should return foundStatus for grpc-status OK", function () { const { foundStatus } = validateResponse( 200, - new Headers({ "grpc-status": "0" }), + new Headers({ + "grpc-status": "0", + "content-type": "application/grpc+proto", + }), ); expect(foundStatus).toBeTrue(); }); diff --git a/packages/connect/src/protocol-grpc/validate-response.ts b/packages/connect/src/protocol-grpc/validate-response.ts index 2245f43c1..cc574dd89 100644 --- a/packages/connect/src/protocol-grpc/validate-response.ts +++ b/packages/connect/src/protocol-grpc/validate-response.ts @@ -16,8 +16,13 @@ import { codeFromHttpStatus } from "./http-status.js"; import { ConnectError } from "../connect-error.js"; import { findTrailerError } from "./trailer-status.js"; import { Code } from "../code.js"; -import { headerEncoding, headerGrpcStatus } from "./headers.js"; +import { + headerContentType, + headerEncoding, + headerGrpcStatus, +} from "./headers.js"; import type { Compression } from "../protocol/compression.js"; +import { parseContentType } from "./content-type.js"; /** * Validates response status and header for the gRPC protocol. @@ -41,6 +46,14 @@ export function validateResponse( headers, ); } + const mimeType = headers.get(headerContentType); + const parsedType = parseContentType(mimeType); + if (parsedType == undefined) { + throw new ConnectError( + `unsupported content type ${mimeType}`, + Code.Unknown, + ); + } return { foundStatus: headers.has(headerGrpcStatus), headerError: findTrailerError(headers), diff --git a/packages/connect/src/protocol-grpc/validate-trailer.ts b/packages/connect/src/protocol-grpc/validate-trailer.ts index 59fc78af2..d045ac3a8 100644 --- a/packages/connect/src/protocol-grpc/validate-trailer.ts +++ b/packages/connect/src/protocol-grpc/validate-trailer.ts @@ -12,11 +12,20 @@ // See the License for the specific language governing permissions and // limitations under the License. +import { Code } from "../code.js"; +import { ConnectError } from "../connect-error.js"; +import { headerGrpcStatus } from "./headers.js"; import { findTrailerError } from "./trailer-status.js"; /** * Validates a trailer for the gRPC and the gRPC-web protocol. - * Throws a ConnectError if the trailer contains an error status. + * + * If the trailer contains an error status, a ConnectError is + * thrown. It will include trailer and header in the error's + * "metadata" property. + * + * Throws a ConnectError with code "internal" if neither the trailer + * nor the header contain the Grpc-Status field. * * @private Internal code, does not follow semantic versioning. */ @@ -28,4 +37,7 @@ export function validateTrailer(trailer: Headers, header: Headers): void { }); throw err; } + if (!header.has(headerGrpcStatus) && !trailer.has(headerGrpcStatus)) { + throw new ConnectError("protocol error: missing status", Code.Internal); + } } diff --git a/packages/connect/turbo.json b/packages/connect/turbo.json new file mode 100644 index 000000000..1f59c7cad --- /dev/null +++ b/packages/connect/turbo.json @@ -0,0 +1,9 @@ +{ + "$schema": "https://turbo.build/schema.json", + "extends": ["//"], + "tasks": { + "generate": { + "outputs": ["src/protocol-grpc/gen/**"] + } + } +} diff --git a/packages/example/README.md b/packages/example/README.md index d066939d8..b839187ed 100644 --- a/packages/example/README.md +++ b/packages/example/README.md @@ -44,12 +44,11 @@ Once we have that out of the way, let's start the Connect server: npm start ``` -That's it! You should now be able to open a web browser to https://localhost:8443 and see the +That's it! You should now be able to open a web browser to https://localhost:8443 and see the example running locally. ![Screenshot](README.png) - ## Using Node.js as a client The file `src/client.ts` implements a CLI client that you can run in Node.js. @@ -87,7 +86,6 @@ npx buf curl --protocol grpc --schema . -d '{"name": "John"}' \ https://localhost:8443/connectrpc.eliza.v1.ElizaService/Introduce ``` - ## Generate code If you make changes to `eliza.proto`, make sure to re-generate the code. For example, you could rename a field, or diff --git a/packages/example/index.html b/packages/example/index.html index 9cd481ccd..58ac61af5 100644 --- a/packages/example/index.html +++ b/packages/example/index.html @@ -1,4 +1,4 @@ - + @@ -6,10 +6,10 @@ Connect-Web example -
-

Eliza

-
-
- +
+

Eliza

+
+
+ diff --git a/packages/example/package.json b/packages/example/package.json index a0bdd292a..8d49a9c27 100644 --- a/packages/example/package.json +++ b/packages/example/package.json @@ -3,10 +3,13 @@ "private": true, "type": "module", "scripts": { - "lint": "tsc --noEmit", + "build": "tsc --noEmit", "start": "tsx src/server.ts", "client": "tsx src/client.ts", - "generate": "buf generate" + "generate": "buf generate", + "format": "prettier --write --ignore-unknown '.' '!src/gen'", + "license-header": "license-header", + "lint": "eslint --max-warnings 0 ." }, "engines": { "node": ">=16" @@ -18,7 +21,7 @@ "tsx": "^4.16.5" }, "devDependencies": { - "@bufbuild/buf": "^1.36.0", + "@bufbuild/buf": "^1.39.0", "@bufbuild/protoc-gen-es": "^2.0.0", "@types/express": "^4.17.18", "esbuild": "^0.19.8", diff --git a/packages/example/src/client.ts b/packages/example/src/client.ts index 66dffa009..a7e9b4ff7 100644 --- a/packages/example/src/client.ts +++ b/packages/example/src/client.ts @@ -15,7 +15,7 @@ import { createPromiseClient } from "@connectrpc/connect"; import { createConnectTransport } from "@connectrpc/connect-node"; import { ElizaService } from "./gen/eliza_pb.js"; -import { stdin, stdout, env } from "process"; +import { stdin, stdout, env } from "node:process"; import * as readline from "node:readline/promises"; const rl = readline.createInterface(stdin, stdout); diff --git a/packages/example/www/index.html b/packages/example/www/index.html index e358323a4..0b6ca3409 100644 --- a/packages/example/www/index.html +++ b/packages/example/www/index.html @@ -1,16 +1,16 @@ - + Connect-Web example - + -
-

Eliza

-
-
- +
+

Eliza

+
+
+ diff --git a/packages/protoc-gen-connect-es/turbo.json b/packages/protoc-gen-connect-es/turbo.json new file mode 100644 index 000000000..fd0ee0db3 --- /dev/null +++ b/packages/protoc-gen-connect-es/turbo.json @@ -0,0 +1,9 @@ +{ + "$schema": "https://turbo.build/schema.json", + "extends": ["//"], + "tasks": { + "lint": { + "dependsOn": ["format", "^build", "generate", "build"] + } + } +} diff --git a/scripts/gh-diffcheck.js b/scripts/gh-diffcheck.js new file mode 100644 index 000000000..03123c418 --- /dev/null +++ b/scripts/gh-diffcheck.js @@ -0,0 +1,36 @@ +// Copyright 2021-2024 The Connect Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import { execSync } from "node:child_process"; + +if (gitUncommitted()) { + process.stdout.write( + "::error::Uncommitted changes found. Please make sure this branch is up to date, and run the command locally (for example `npx turbo format`). " + + "Verify the changes are what you want and commit them.\n", + ); + execSync("git --no-pager diff", { + stdio: "inherit", + }); + process.exit(1); +} + +/** + * @returns {boolean} + */ +function gitUncommitted() { + const out = execSync("git status --porcelain", { + encoding: "utf-8", + }); + return out.trim().length > 0; +} diff --git a/scripts/release.js b/scripts/release.js new file mode 100644 index 000000000..44ddbbb84 --- /dev/null +++ b/scripts/release.js @@ -0,0 +1,118 @@ +// Copyright 2021-2024 The Connect Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import { readdirSync, readFileSync } from "fs"; +import { join } from "path"; +import { existsSync } from "node:fs"; +import { execSync } from "node:child_process"; + +/* + * Publish connect-es + * + * Recommended procedure: + * 1. Set a new version with `npm run setversion 1.2.3` + * 2. Commit and push all changes to a PR, wait for approval. + * 3. Login with `npm login` + * 4. Publish to npmjs.com with `npm run release` + * 5. Merge PR and create a release on GitHub + */ + +const tag = determinePublishTag(findWorkspaceVersion("packages")); +const uncommitted = gitUncommitted(); +if (uncommitted.length > 0) { + throw new Error("Uncommitted changes found: \n" + uncommitted); +} +npmPublish(); + +/** + * + */ +function npmPublish() { + const command = + `npm publish --tag ${tag}` + + " --workspace packages/connect" + + " --workspace packages/connect-web" + + " --workspace packages/connect-node" + + " --workspace packages/connect-fastify" + + " --workspace packages/connect-express" + + " --workspace packages/connect-next" + + " --workspace packages/connect-migrate" + + " --workspace packages/protoc-gen-connect-es"; + execSync(command, { + stdio: "inherit", + }); +} + +/** + * @returns {string} + */ +function gitUncommitted() { + const out = execSync("git status --short", { + encoding: "utf-8", + }); + if (out.trim().length === 0) { + return ""; + } + return out; +} + +/** + * @param {string} version + * @returns {string} + */ +function determinePublishTag(version) { + if (/^\d+\.\d+\.\d+$/.test(version)) { + return "latest"; + } else if (/^\d+\.\d+\.\d+-alpha.*$/.test(version)) { + return "alpha"; + } else if (/^\d+\.\d+\.\d+-beta.*$/.test(version)) { + return "beta"; + } else if (/^\d+\.\d+\.\d+-rc.*$/.test(version)) { + return "rc"; + } else { + throw new Error(`Unable to determine publish tag from version ${version}`); + } +} + +/** + * @param {string} packagesDir + * @returns {string} + */ +function findWorkspaceVersion(packagesDir) { + let version = undefined; + for (const entry of readdirSync(packagesDir, { withFileTypes: true })) { + if (!entry.isDirectory()) { + continue; + } + const path = join(packagesDir, entry.name, "package.json"); + if (existsSync(path)) { + const pkg = JSON.parse(readFileSync(path, "utf-8")); + if (pkg.private === true) { + continue; + } + if (!pkg.version) { + throw new Error(`${path} is missing "version"`); + } + if (version === undefined) { + version = pkg.version; + } else if (version !== pkg.version) { + throw new Error(`${path} has unexpected version ${pkg.version}`); + } + } + } + if (version === undefined) { + throw new Error(`unable to find workspace version`); + } + return version; +} diff --git a/turbo.json b/turbo.json new file mode 100644 index 000000000..1e315ea13 --- /dev/null +++ b/turbo.json @@ -0,0 +1,41 @@ +{ + "$schema": "https://turbo.build/schema.json", + "tasks": { + "build": { + "dependsOn": ["^build", "generate"], + "outputs": ["dist/**"] + }, + "generate": { + "dependsOn": ["^build"], + "outputs": ["src/gen/**"] + }, + "test": { + "dependsOn": ["build"], + "cache": false + }, + "conformance": { + "cache": false, + "dependsOn": ["^build"] + }, + "format": {}, + "license-header": { + "dependsOn": ["generate"] + }, + "lint": { + "dependsOn": ["format", "^build", "generate"] + }, + "attw": { + "dependsOn": ["build"] + }, + "//#format": { + "inputs": ["$TURBO_DEFAULT$", "!packages/**", "package-lock.json"] + }, + "//#license-header": { + "inputs": ["$TURBO_DEFAULT$", "!packages/**"] + }, + "//#lint": { + "dependsOn": ["format"], + "inputs": ["$TURBO_DEFAULT$", "!packages/**", "package-lock.json"] + } + } +}