From bb6ece797b24d5503e2cf74bb091432c1fe21784 Mon Sep 17 00:00:00 2001 From: Chris Arderne Date: Wed, 17 Jun 2026 14:07:34 +0100 Subject: [PATCH 1/9] chore: switch to oxfmt, oxlint - add ci checks --- .eslintignore | 4 - .github/workflows/code-quality.yml | 73 ++ .github/workflows/pr_checks.yml | 6 + .oxfmtrc.json | 25 + .oxlintrc.json | 24 + .prettierignore | 10 - apps/webapp/.eslintrc | 31 - apps/webapp/.prettierignore | 11 - apps/webapp/package.json | 18 +- apps/webapp/prettier.config.js | 4 - package.json | 7 +- pnpm-lock.yaml | 1778 +++++++--------------------- prettier.config.js | 11 - turbo.json | 69 +- 14 files changed, 594 insertions(+), 1477 deletions(-) delete mode 100644 .eslintignore create mode 100644 .github/workflows/code-quality.yml create mode 100644 .oxfmtrc.json create mode 100644 .oxlintrc.json delete mode 100644 .prettierignore delete mode 100644 apps/webapp/.eslintrc delete mode 100644 apps/webapp/.prettierignore delete mode 100644 apps/webapp/prettier.config.js delete mode 100644 prettier.config.js diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index 827344f1f96..00000000000 --- a/.eslintignore +++ /dev/null @@ -1,4 +0,0 @@ -*/**.js -*/**.d.ts -packages/*/dist -packages/*/lib \ No newline at end of file diff --git a/.github/workflows/code-quality.yml b/.github/workflows/code-quality.yml new file mode 100644 index 00000000000..23ad4f79505 --- /dev/null +++ b/.github/workflows/code-quality.yml @@ -0,0 +1,73 @@ +name: "šŸŽØ Format & Lint" + +on: + workflow_call: + +permissions: + contents: read + +jobs: + code-quality: + runs-on: ubuntu-latest + + steps: + - name: ā¬‡ļø Checkout repo + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + fetch-depth: 0 + persist-credentials: false + + - name: āŽ” Setup pnpm + uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v5.0.0 + with: + version: 10.33.2 + + - name: āŽ” Setup node + uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 + with: + node-version: 20.20.2 + cache: "pnpm" + + - name: šŸ“„ Download deps + run: pnpm install --frozen-lockfile + + # Gate only on files this PR adds/modifies (ratchet) — the repo is not + # fully formatted/linted yet, so a whole-repo check would fail every PR. + - name: šŸ” Determine changed files + id: changes + env: + BASE_SHA: ${{ github.event.pull_request.base.sha }} + run: | + FILES=$(git diff --name-only --diff-filter=ACMR "$BASE_SHA"...HEAD -- \ + '*.ts' '*.tsx' '*.js' '*.jsx' '*.mjs' '*.cjs') + echo "Changed code files:" + echo "${FILES:-}" + { + echo "files<> "$GITHUB_OUTPUT" + if [ -z "$FILES" ]; then + echo "has_files=false" >> "$GITHUB_OUTPUT" + else + echo "has_files=true" >> "$GITHUB_OUTPUT" + fi + + # TODO enable format check for ALL code + - name: šŸ’… Check formatting + if: steps.changes.outputs.has_files == 'true' + env: + FILES: ${{ steps.changes.outputs.files }} + # Unquoted $FILES intentionally word-splits the newline-separated list + # into separate path args. Safe given the has_files guard above. + run: pnpm exec oxfmt --check $FILES + + # TODO update this so lint failures fail CI + # Informational only — lint findings are surfaced in the logs but never + # fail the job. Only the formatting check above blocks the PR. + - name: šŸ”Ž Lint (informational, non-blocking) + if: steps.changes.outputs.has_files == 'true' + continue-on-error: true + env: + FILES: ${{ steps.changes.outputs.files }} + run: pnpm exec oxlint $FILES diff --git a/.github/workflows/pr_checks.yml b/.github/workflows/pr_checks.yml index 95805539807..1fb3a47a45c 100644 --- a/.github/workflows/pr_checks.yml +++ b/.github/workflows/pr_checks.yml @@ -102,6 +102,11 @@ jobs: - 'pnpm-workspace.yaml' - 'turbo.json' + code-quality: + needs: changes + if: needs.changes.outputs.code == 'true' + uses: ./.github/workflows/code-quality.yml + typecheck: needs: changes if: needs.changes.outputs.code == 'true' || needs.changes.outputs.typecheck_self == 'true' @@ -155,6 +160,7 @@ jobs: name: All PR Checks needs: - changes + - code-quality - typecheck - webapp - e2e-webapp diff --git a/.oxfmtrc.json b/.oxfmtrc.json new file mode 100644 index 00000000000..90f19a65790 --- /dev/null +++ b/.oxfmtrc.json @@ -0,0 +1,25 @@ +{ + "$schema": "./node_modules/oxfmt/configuration_schema.json", + "semi": true, + "singleQuote": false, + "jsxSingleQuote": false, + "trailingComma": "es5", + "bracketSpacing": true, + "bracketSameLine": false, + "printWidth": 100, + "tabWidth": 2, + "useTabs": false, + "sortPackageJson": false, + "ignorePatterns": [ + "node_modules", + ".env", + ".env.local", + "pnpm-lock.yaml", + "tailwind.css", + ".babelrc.json", + "**/.react-email/", + "**/storybook-static/", + "**/.changeset/", + "**/dist/", + ] +} diff --git a/.oxlintrc.json b/.oxlintrc.json new file mode 100644 index 00000000000..463fa955515 --- /dev/null +++ b/.oxlintrc.json @@ -0,0 +1,24 @@ +{ + "$schema": "./node_modules/oxlint/configuration_schema.json", + "plugins": ["typescript", "import", "react"], + "ignorePatterns": [ + "**/dist/**", + "**/build/**", + "**/*.d.ts", + "**/seed.js", + "**/seedCloud.ts", + "**/populate.js" + ], + "rules": { + "consistent-type-imports": [ + "warn", + { + "prefer": "type-imports", + "disallowTypeAnnotations": true, + "fixStyle": "inline-type-imports" + } + ], + "import/no-duplicates": ["warn", { "prefer-inline": true }], + "react-hooks/rules-of-hooks": "error" + } +} diff --git a/.prettierignore b/.prettierignore deleted file mode 100644 index a34447dd45d..00000000000 --- a/.prettierignore +++ /dev/null @@ -1,10 +0,0 @@ -node_modules -.env -.env.local -pnpm-lock.yaml -tailwind.css -.babelrc.json -**/.react-email/ -**/storybook-static/ -**/.changeset/ -**/dist/ \ No newline at end of file diff --git a/apps/webapp/.eslintrc b/apps/webapp/.eslintrc deleted file mode 100644 index f292eef3cce..00000000000 --- a/apps/webapp/.eslintrc +++ /dev/null @@ -1,31 +0,0 @@ -{ - "plugins": ["react-hooks", "@typescript-eslint/eslint-plugin", "import"], - "parser": "@typescript-eslint/parser", - "overrides": [ - { - "files": ["*.ts", "*.tsx"], - "rules": { - // Autofixes imports from "@trigger.dev/core" to fine grained modules - // "@trigger.dev/no-trigger-core-import": "error", - // Normalize `import type {}` and `import { type }` - "@typescript-eslint/consistent-type-imports": [ - "warn", - { - // the "type" annotation can get tangled and cause syntax errors - // during some autofixes, so easier to just turn it off - "prefer": "type-imports", - "disallowTypeAnnotations": true, - "fixStyle": "inline-type-imports" - } - ], - // no-trigger-core-import splits imports into multiple lines - // this one merges them back into a single line - // if they still import from the same module - "import/no-duplicates": ["warn", { "prefer-inline": true }], - // lots of undeclared vars, enable this rule if you want to clean them up - "turbo/no-undeclared-env-vars": "off" - } - } - ], - "ignorePatterns": ["seed.js", "seedCloud.ts", "populate.js"] -} diff --git a/apps/webapp/.prettierignore b/apps/webapp/.prettierignore deleted file mode 100644 index 835d1a6cdd7..00000000000 --- a/apps/webapp/.prettierignore +++ /dev/null @@ -1,11 +0,0 @@ -node_modules - -/build -/public/build -.env - -/cypress/screenshots -/cypress/videos -/postgres-data - -/app/styles/tailwind.css \ No newline at end of file diff --git a/apps/webapp/package.json b/apps/webapp/package.json index ca72374fcfe..799e966570b 100644 --- a/apps/webapp/package.json +++ b/apps/webapp/package.json @@ -10,8 +10,8 @@ "build:sentry": "esbuild --platform=node --format=cjs --outbase=. ./sentry.server.ts ./app/utils/sentryTraceContext.server.ts --outdir=build --sourcemap", "dev": "cross-env PORT=3030 remix dev -c \"node ./build/server.js\"", "dev:worker": "cross-env NODE_PATH=../../node_modules/.pnpm/node_modules node ./build/server.js", - "format": "prettier --write .", - "lint": "eslint --cache --cache-location ./node_modules/.cache/eslint .", + "format": "oxfmt .", + "lint": "oxlint -c ../../.oxlintrc.json", "start": "cross-env NODE_ENV=production node --max-old-space-size=8192 ./build/server.js", "start:local": "cross-env node --max-old-space-size=8192 ./build/server.js", "typecheck": "cross-env NODE_OPTIONS=\"--max-old-space-size=8192\" tsc --noEmit -p ./tsconfig.check.json", @@ -21,11 +21,6 @@ "test": "vitest --no-file-parallelism", "eval:dev": "evalite watch" }, - "eslintIgnore": [ - "/node_modules", - "/build", - "/public/build" - ], "dependencies": { "@ai-sdk/anthropic": "^3.0.0", "@ai-sdk/openai": "^3.0.0", @@ -248,7 +243,6 @@ "@internal/replication": "workspace:*", "@internal/testcontainers": "workspace:*", "@remix-run/dev": "2.17.4", - "@remix-run/eslint-config": "2.17.4", "@remix-run/testing": "^2.17.4", "@sentry/cli": "2.50.2", "@swc/core": "^1.3.4", @@ -259,7 +253,6 @@ "@types/bcryptjs": "^2.4.2", "@types/compression": "^1.7.2", "@types/cookie": "^0.6.0", - "@types/eslint": "^8.4.6", "@types/express": "^4.17.13", "@types/humanize-duration": "^3.27.1", "@types/json-query": "^2.2.3", @@ -280,19 +273,12 @@ "@types/supertest": "^6.0.2", "@types/tar": "^6.1.4", "@types/ws": "^8.5.3", - "@typescript-eslint/eslint-plugin": "^5.59.6", - "@typescript-eslint/parser": "^5.59.6", "autoevals": "^0.0.130", "autoprefixer": "^10.4.13", "css-loader": "^6.10.0", "datepicker": "link:@types/@react-aria/datepicker", "engine.io": "^6.5.4", "esbuild": "^0.15.10", - "eslint": "^8.24.0", - "eslint-config-prettier": "^8.5.0", - "eslint-plugin-import": "^2.29.1", - "eslint-plugin-react-hooks": "^4.6.2", - "eslint-plugin-turbo": "^2.0.4", "evalite": "1.0.0-beta.16", "npm-run-all": "^4.1.5", "postcss-import": "^16.0.1", diff --git a/apps/webapp/prettier.config.js b/apps/webapp/prettier.config.js deleted file mode 100644 index f652d8bf750..00000000000 --- a/apps/webapp/prettier.config.js +++ /dev/null @@ -1,4 +0,0 @@ -module.exports = { - ...require("../../prettier.config.js"), - plugins: [require("prettier-plugin-tailwindcss")], -}; diff --git a/package.json b/package.json index 9c4b38c0aac..754d217dd8c 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,9 @@ "dev": "turbo run dev", "i:dev": "infisical run -- turbo run dev", "generate": "turbo run generate", - "lint": "turbo run lint", + "format": "oxfmt .", + "lint": "oxlint", + "lint:fix": "oxlint --fix", "docker": "node scripts/docker.mjs -f docker/docker-compose.yml up -d --build --remove-orphans", "docker:stop": "node scripts/docker.mjs -f docker/docker-compose.yml stop", "docker:full": "node scripts/docker.mjs -f docker/docker-compose.yml -f docker/docker-compose.extras.yml up -d --build --remove-orphans", @@ -57,8 +59,9 @@ "@types/node": "20.14.14", "@vitest/coverage-v8": "4.1.7", "autoprefixer": "^10.4.12", - "eslint-plugin-turbo": "^2.0.4", "lefthook": "^1.11.3", + "oxfmt": "^0.54.0", + "oxlint": "^1.69.0", "pkg-pr-new": "0.0.75", "pkg-types": "1.1.3", "prettier": "^3.0.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8918eafb1df..1a155420d23 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -118,12 +118,15 @@ importers: autoprefixer: specifier: ^10.4.12 version: 10.4.13(postcss@8.5.10) - eslint-plugin-turbo: - specifier: ^2.0.4 - version: 2.0.5(eslint@8.31.0) lefthook: specifier: ^1.11.3 version: 1.11.3 + oxfmt: + specifier: ^0.54.0 + version: 0.54.0 + oxlint: + specifier: ^1.69.0 + version: 1.70.0 pkg-pr-new: specifier: 0.0.75 version: 0.0.75 @@ -921,9 +924,6 @@ importers: '@remix-run/dev': specifier: 2.17.4 version: 2.17.4(@remix-run/react@2.17.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4))(@remix-run/serve@2.17.4(typescript@5.5.4))(@types/node@20.14.14)(bufferutil@4.0.9)(jiti@2.6.1)(lightningcss@1.29.2)(terser@5.46.1)(tsx@4.20.6)(typescript@5.5.4)(vite@6.4.2(@types/node@20.14.14)(jiti@2.6.1)(lightningcss@1.29.2)(terser@5.46.1)(tsx@4.20.6)(yaml@2.9.0))(yaml@2.9.0) - '@remix-run/eslint-config': - specifier: 2.17.4 - version: 2.17.4(eslint@8.31.0)(react@18.3.1)(typescript@5.5.4) '@remix-run/testing': specifier: ^2.17.4 version: 2.17.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.5.4) @@ -954,9 +954,6 @@ importers: '@types/cookie': specifier: ^0.6.0 version: 0.6.0 - '@types/eslint': - specifier: ^8.4.6 - version: 8.4.10 '@types/express': specifier: ^4.17.13 version: 4.17.15 @@ -1017,12 +1014,6 @@ importers: '@types/ws': specifier: ^8.5.3 version: 8.5.4 - '@typescript-eslint/eslint-plugin': - specifier: ^5.59.6 - version: 5.59.6(@typescript-eslint/parser@5.59.6(eslint@8.31.0)(typescript@5.5.4))(eslint@8.31.0)(typescript@5.5.4) - '@typescript-eslint/parser': - specifier: ^5.59.6 - version: 5.59.6(eslint@8.31.0)(typescript@5.5.4) autoevals: specifier: ^0.0.130 version: 0.0.130(encoding@0.1.13)(ws@8.12.0(bufferutil@4.0.9)) @@ -1041,21 +1032,6 @@ importers: esbuild: specifier: ^0.15.10 version: 0.15.18 - eslint: - specifier: ^8.24.0 - version: 8.31.0 - eslint-config-prettier: - specifier: ^8.5.0 - version: 8.6.0(eslint@8.31.0) - eslint-plugin-import: - specifier: ^2.29.1 - version: 2.29.1(@typescript-eslint/parser@5.59.6(eslint@8.31.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.5.5)(eslint@8.31.0) - eslint-plugin-react-hooks: - specifier: ^4.6.2 - version: 4.6.2(eslint@8.31.0) - eslint-plugin-turbo: - specifier: ^2.0.4 - version: 2.0.5(eslint@8.31.0) evalite: specifier: 1.0.0-beta.16 version: 1.0.0-beta.16(ai@6.0.116(zod@3.25.76))(better-sqlite3@11.10.0)(bufferutil@4.0.9) @@ -3095,13 +3071,6 @@ packages: resolution: {integrity: sha512-2EENLmhpwplDux5PSsZnSbnSkB3tZ6QTksgO25xwEL7pIDcNOMhF5v/s6RzwjMZzZzw9Ofc30gHv5ChCC8pifQ==} engines: {node: '>=6.9.0'} - '@babel/eslint-parser@7.21.8': - resolution: {integrity: sha512-HLhI+2q+BP3sf78mFUZNCGc10KEmoUqtUT1OCdMZsN+qr4qFeLUod62/zAnF3jNQstwyasDkZnVXwfK2Bml7MQ==} - engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0} - peerDependencies: - '@babel/core': '>=7.11.0' - eslint: ^7.5.0 || ^8.0.0 - '@babel/generator@7.24.7': resolution: {integrity: sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==} engines: {node: '>=6.9.0'} @@ -3256,42 +3225,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-react-display-name@7.18.6': - resolution: {integrity: sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-react-jsx-development@7.18.6': - resolution: {integrity: sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-react-jsx@7.22.15': - resolution: {integrity: sha512-oKckg2eZFa8771O/5vi7XeTvmM6+O9cxZu+kanTU7tD4sin5nO/G8jGJhq8Hvt2Z0kUoEDRayuZLaUlYl8QuGA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-react-pure-annotations@7.18.6': - resolution: {integrity: sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-typescript@7.21.3': resolution: {integrity: sha512-RQxPz6Iqt8T0uw/WsJNReuBpWpBqs/n7mNo18sKLoTbMp+UrEekhH+pKSVC7gWz+DNjo9gryfV8YzCiT45RgMw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/preset-react@7.18.6': - resolution: {integrity: sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - '@babel/preset-typescript@7.21.5': resolution: {integrity: sha512-iqe3sETat5EOrORXiQ6rWfoOg2y68Cs75B9wNxdPW4kixJxh7aXQE1KPdWLDniC24T/6dSnguF33W9j/ZZQcmA==} engines: {node: '>=6.9.0'} @@ -4944,20 +4883,6 @@ packages: cpu: [x64] os: [win32] - '@eslint-community/eslint-utils@4.4.0': - resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - - '@eslint-community/regexpp@4.5.1': - resolution: {integrity: sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - - '@eslint/eslintrc@1.4.1': - resolution: {integrity: sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - '@fastify/accept-negotiator@2.0.1': resolution: {integrity: sha512-/c/TW2bO/v9JeEgoD/g1G5GxGeCF1Hafdf79WPmUlgYiBXummY0oX3VVq4yFkKKVBKDNlaDUYoab7g38RpPqCQ==} @@ -5131,19 +5056,6 @@ packages: peerDependencies: '@hono/node-server': ^1.11.1 - '@humanwhocodes/config-array@0.11.8': - resolution: {integrity: sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==} - engines: {node: '>=10.10.0'} - deprecated: Use @eslint/config-array instead - - '@humanwhocodes/module-importer@1.0.1': - resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} - engines: {node: '>=12.22'} - - '@humanwhocodes/object-schema@1.2.1': - resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} - deprecated: Use @eslint/object-schema instead - '@iconify/types@2.0.0': resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} @@ -5323,9 +5235,6 @@ packages: '@cfworker/json-schema': optional: true - '@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1': - resolution: {integrity: sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==} - '@nodable/entities@2.1.0': resolution: {integrity: sha512-nyT7T3nbMyBI/lvr6L5TyWbFJAI9FTgVRakNoBqCD+PmID8DzFrrNdLLtHMwMszOtqZa8PAOV24ZqDnQrhQINA==} @@ -5890,6 +5799,250 @@ packages: peerDependencies: '@opentelemetry/api': ^1.1.0 + '@oxfmt/binding-android-arm-eabi@0.54.0': + resolution: {integrity: sha512-NAtpl/SiaeU103e7/OmZw0MvUnsUUopW7hEm/ecegJg7YM0skQaA0IXEZoyTV6NUdiNPupdIUreRqUZTShbn/g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [android] + + '@oxfmt/binding-android-arm64@0.54.0': + resolution: {integrity: sha512-B4VZfBUlKK1rmMChsssNZbkZjE8+FzG3avMjGgMDwbGxXRoXkoeXiAZ+78Oa+eyDPHvDCiUb4zH/vmCOUSafLQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + + '@oxfmt/binding-darwin-arm64@0.54.0': + resolution: {integrity: sha512-i02vF75b+ePsQP3tHqSxVYI5S6b8X/xqdPu7/mDHXtpgXLTYXi3jJmfHU0j+dnZZDKaYTx/ioCK7QYJmtiJR2g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + + '@oxfmt/binding-darwin-x64@0.54.0': + resolution: {integrity: sha512-8VMFvGvooXj7mswkbrhdVZ2/sgiDaBzWpkkbtO+qGDLV4EfJd67nQadHkQC0ZNbaWA9ajXfqI6i7PZLIeDzxEQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + + '@oxfmt/binding-freebsd-x64@0.54.0': + resolution: {integrity: sha512-0cRHnp43WN1Jrc5s0BdbdKgR1XirdvHy7TAFi3JEsoEVQVJxTXMbpVd76sxXlgRswNMDhVFSJw+y7Eb8mEavFQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + + '@oxfmt/binding-linux-arm-gnueabihf@0.54.0': + resolution: {integrity: sha512-JyQAk3hK/OEtup7Rw6kZwfdzbKqTVD5jXXb8Xpfay29suwZyfBDMVW/bj4RqEPySYWc6zCp198pOluf8n5uYzg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@oxfmt/binding-linux-arm-musleabihf@0.54.0': + resolution: {integrity: sha512-qnvLatTpM8vtvjOfcckBOzJjk+n6ce/wwpP8OFeUrD5aNLYcKyWAitwj+Rk3PK9jGanbZvKsJnv14JGQ6XqFdw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@oxfmt/binding-linux-arm64-gnu@0.54.0': + resolution: {integrity: sha512-SMkhnCzIYZYDk9vw3W/80eeYKmrMpGF0Giuxt4HruFlCH7jEtnPeb3SdQKMfgYi/dgtaf+hZAb5XWPYnxqCQ3w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@oxfmt/binding-linux-arm64-musl@0.54.0': + resolution: {integrity: sha512-QrwJlBFFKnxOd95TAaszpMbZBLzMoYMpGaQTZF8oibacnF5rv8l12IhILhQRPmksWiBqg0YSe2Mnl7ayeJAHSA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@oxfmt/binding-linux-ppc64-gnu@0.54.0': + resolution: {integrity: sha512-WILatiol/TUHTlhod7R09+7Az/XlhKwmY1MHfLZNmewltPWNN/EwxP2rQSHahibZ/cB8gmckEBjBOByD+5bYsQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@oxfmt/binding-linux-riscv64-gnu@0.54.0': + resolution: {integrity: sha512-f05YMG4BH4G8S4ME6UM6fi1MnJ9094mrnvO5Pa4SJlMfWlUM+1/ZWMEF4NnjM7shZAvbHsHRuVYpUo0PHC4P9Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@oxfmt/binding-linux-riscv64-musl@0.54.0': + resolution: {integrity: sha512-UfL+2hj1ClNqcCRT9s8vBU4axDpjxgVxX96G+9DYAYjoc5b0u15CJtn2jgsi9iM+EbGNc5CW1HVRgwVu76UsSA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + libc: [musl] + + '@oxfmt/binding-linux-s390x-gnu@0.54.0': + resolution: {integrity: sha512-3/XZe931Hka+J6NjnaqJzYpsWWxDTuRdUdwSQHnOuJEgbC+SehIMFJS8hsEjV7LBhVSL2OCnRLvbVW8O97XIyw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@oxfmt/binding-linux-x64-gnu@0.54.0': + resolution: {integrity: sha512-Ik93RlObtu43GbxApafayFjwYE06L6Xr08cSwpBPYbDrLp2ReZx0Jm1DqwRyYRnukUJy+rK2WaEvUQOxdytU9Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@oxfmt/binding-linux-x64-musl@0.54.0': + resolution: {integrity: sha512-yZcakmPlD86CNymknd7KfW+FH+qfbqJH+i0h69CYfV1+KMoVeM9UED+8+TDVoU4haxI0NxY7RPCvRLy3Sqd2Qg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [musl] + + '@oxfmt/binding-openharmony-arm64@0.54.0': + resolution: {integrity: sha512-GiVBZNnEZnKu00f1jTg49nomv187d0GQX+O+ocykoLeiaALuEO+swoTehHn9TehTfi7V8H0i0e/yvUjCqnwk1w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + + '@oxfmt/binding-win32-arm64-msvc@0.54.0': + resolution: {integrity: sha512-J0SSB8Z1Fre2sxRolYcW6Rl1RQmKdQ2hnHyq4YJrfBRiXTObLw4DXnIVraM/UyqGqwOi7yTrQA4VT7DPxlHVKA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@oxfmt/binding-win32-ia32-msvc@0.54.0': + resolution: {integrity: sha512-O61UDVj8zz6yXJjkHPf05VaMLOXmEF8P5kf/N0W7AQMmd6bcQogl+KJc7rMutKTL524oE9iH32JXZClBFmEQIg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ia32] + os: [win32] + + '@oxfmt/binding-win32-x64-msvc@0.54.0': + resolution: {integrity: sha512-1MDpqJPiFqxWtIHas8vkb1VZ7f7eKyTffAwmO8isxQYMaG1OFKsH666BWLeXQLO+IWNfiMssLD55hbR1lIPTqg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + + '@oxlint/binding-android-arm-eabi@1.70.0': + resolution: {integrity: sha512-zFh0P4cswmRvw6nkyb89dr18rRanuaCPAsEXsFDoQY8WdaquI8Pt4NWFjaMJg6L23cy5NeN8J9cBnREbWzZhaw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [android] + + '@oxlint/binding-android-arm64@1.70.0': + resolution: {integrity: sha512-qI8o4HZjeGiBrWv+pJv4lH0Yi2Gl/JSp/EumBUApezJprIKa5PS4nU0lQsQngtky8k+SplQIOjv6hwu0SSxeyg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + + '@oxlint/binding-darwin-arm64@1.70.0': + resolution: {integrity: sha512-8KjgVVHI5F9nVwHCRwwA78Ty7zNKP4Wd9OeN5PSv3iu/F/u1RVXoOCgLhWqust6HmwQG6xc8c+RCyaWENy24+w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + + '@oxlint/binding-darwin-x64@1.70.0': + resolution: {integrity: sha512-WVydssv5PSUBXFJTdNBWlmGkbNmvPGaFt/2SUT/EZRB6bq6bEOHmMlbnupZD5jmlEvi9+mZJHi8TCw15lyfSfQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + + '@oxlint/binding-freebsd-x64@1.70.0': + resolution: {integrity: sha512-hJucmUf8OlinHNb1R7fI4Fw6WsAstOz7i8nmkWQfiHoZXtbufNm+MxiDTIMk1ggh2Ro4vLzgQ+bKvRY54MZoRA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + + '@oxlint/binding-linux-arm-gnueabihf@1.70.0': + resolution: {integrity: sha512-1BnS7wbCYDSXwWzJJ+mc3NURoha6m6m6RT5c6vgAY3oz7C3OVXP+S0awo2mRq97arrJkVvO3qRQfyAHL+76xtQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@oxlint/binding-linux-arm-musleabihf@1.70.0': + resolution: {integrity: sha512-yKy/UdbR55+M2yEcuiV5DCNC/gdQAjr/GioUy50QwBzSrKm8ueWADqyRLS9Xk+qjNeCYGg6A8FvUBds56ttfqg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@oxlint/binding-linux-arm64-gnu@1.70.0': + resolution: {integrity: sha512-0A5XJ4alvmqFUFP/4oYSyaO+qLto/HrKEWTSaegiVl+HOufFngK2BjYw9x4RbwBt/du5QG6l5q1zeWiJYYG5yg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@oxlint/binding-linux-arm64-musl@1.70.0': + resolution: {integrity: sha512-JiylyurlB0CLSedNtx1gzv3FvfWPF1h/2Y3BJszPLNt5XQFlBsH5ke0Jle3iJb3uqu5m2e7A/DwzpuCAHdiU+A==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@oxlint/binding-linux-ppc64-gnu@1.70.0': + resolution: {integrity: sha512-J8VPG7I3/HmgaU4u8pNU2kFx2+0U+vPLS1dXFxXOaR/2TQ0f8AC7DRz0SRGRI1bfphnX2hVYTTtLuhL4nYKL+Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@oxlint/binding-linux-riscv64-gnu@1.70.0': + resolution: {integrity: sha512-N2+4lV2KLN+oXTIIIwmWDhwkrnvqf5oX7Hw0zPjk+RuIVgiBQSOlJWF7uQoFx2siEYX0ZQ5cfSbEAHm+J3t7Wg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@oxlint/binding-linux-riscv64-musl@1.70.0': + resolution: {integrity: sha512-1e2L7cFCvx9QDzq6NPP+0tABKb5z6nWHyddWTNKprEsjO9xNrAtPowuCGpjNXxkTdsMiZ4jc8YQ5SstZd4XK6g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + libc: [musl] + + '@oxlint/binding-linux-s390x-gnu@1.70.0': + resolution: {integrity: sha512-Kwu/l/8GcYibCWA9m9N5pRXMIKVSsL/YbgpLzYkqDhWTiqdRfnNJ/+nqIKRKQiFbHWsdlHEhzMwruJK+qcEruA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@oxlint/binding-linux-x64-gnu@1.70.0': + resolution: {integrity: sha512-tap04CsHYOl0nSAQJfPNIuBxqEPB2HnhQqwaOXLg1jnp2XfRo8Fa814dA4QC4zpvTWXCjAAaCY1W5LOORkEQuQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@oxlint/binding-linux-x64-musl@1.70.0': + resolution: {integrity: sha512-hzJa/WgvtJpbBD9rgfy0qe+MjbxOXNUT0bfR1S6EQQzfTtBFA9xg5q8KSwRrQ2QfSS+TaP4j+4mVPQrfNc6UNg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [musl] + + '@oxlint/binding-openharmony-arm64@1.70.0': + resolution: {integrity: sha512-xbsaNSNzVSnaJACCUYr1HQMyY/Q/Q1LkePmHG3UvZPvGCYGNxrsZp9OmtA6ick8xH47ltRRbRrPCM1YXYcyC+A==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + + '@oxlint/binding-win32-arm64-msvc@1.70.0': + resolution: {integrity: sha512-icAEsUI7JbW1TMRdEXV83mVAInhRVQYuuAlPpxdGwJ95chNdnCzjloRW8GglT0WvzOEZSio6fnYSk2DJ2Hv7LQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@oxlint/binding-win32-ia32-msvc@1.70.0': + resolution: {integrity: sha512-FHMSWbVsPVs/f+Jcl04ws4JJ2wUnauyTzlpxWRG/lSO/8GpX08Fo2gQZqdA6CrRFI+zvkxl+N/KwJGWfUwYVZA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ia32] + os: [win32] + + '@oxlint/binding-win32-x64-msvc@1.70.0': + resolution: {integrity: sha512-ptOlKwCz7n4AKs5VweMqG6DAg677FmKOK+vBkkL9DMNgFATIQ+upqUYBTOEwRQyRAx1ncGlPlXleV2hIcm3z4g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + '@pinojs/redact@0.4.0': resolution: {integrity: sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg==} @@ -5897,10 +6050,6 @@ packages: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} - '@pkgr/utils@2.3.1': - resolution: {integrity: sha512-wfzX8kc1PMyUILA+1Z/EqoE4UCXGy0iRGMhPwdfae1+f0OXlLqCk+By+aMzgJBzR9AzS4CDizioG6Ss1gvAFJw==} - engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} - '@playwright/test@1.37.0': resolution: {integrity: sha512-181WBLk4SRUyH1Q96VZl7BP6HcK0b7lbdeKisn3N/vnjitk+9HbdlFz/L5fey05vxaAhldIDnzo8KUoy8S3mmQ==} engines: {node: '>=16'} @@ -7281,17 +7430,6 @@ packages: wrangler: optional: true - '@remix-run/eslint-config@2.17.4': - resolution: {integrity: sha512-Hhslms8Kl0fXHDS5UJWwyJ/1YQzJhRLjNZF+IfRLmCHI/zCvJP4dfy9yiT5BHnHb/m6MUz3l1L8EpPItg0dD5Q==} - engines: {node: '>=18.0.0'} - peerDependencies: - eslint: ^8.0.0 - react: 18.3.1 - typescript: 5.5.4 - peerDependenciesMeta: - typescript: - optional: true - '@remix-run/express@2.17.4': resolution: {integrity: sha512-4zZs0L7v2pvAq896zHRLNMhoOKIPXM9qnYdHLbz4mpZUMbNAgQacGazArIrUV3M4g0gRMY0dLrt5CqMNrlBeYg==} engines: {node: '>=18.0.0'} @@ -7515,9 +7653,6 @@ packages: cpu: [x64] os: [win32] - '@rushstack/eslint-patch@1.2.0': - resolution: {integrity: sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg==} - '@s2-dev/streamstore@0.22.10': resolution: {integrity: sha512-dtm+oFHVE8szINwOUoNQdx9xpGSJOrcAEvsxspPFvomjYKGnmhIRmU4OX8o6kxcPoiK76S1tPeU0smjZdmOngA==} @@ -8504,10 +8639,6 @@ packages: '@testcontainers/redis@11.14.0': resolution: {integrity: sha512-WX005slz2JMQPw2avbSjf5awVjpmFhOs5xCxeGSYLcV5ia4W1edv/P6MdOw4dZnvDQDuN5LfqNoV/ut3XGb2pA==} - '@testing-library/dom@8.19.1': - resolution: {integrity: sha512-P6iIPyYQ+qH8CvGauAqanhVnjrnRe0IZFSYCeGkSRW9q3u8bdVn2NPI+lasFyVsEQn1J/IFmp5Aax41+dAP9wg==} - engines: {node: '>=12'} - '@tokenizer/token@0.3.0': resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==} @@ -8526,9 +8657,6 @@ packages: '@types/acorn@4.0.6': resolution: {integrity: sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==} - '@types/aria-query@5.0.1': - resolution: {integrity: sha512-XTIieEY+gvJ39ChLcB4If5zHtPxt3Syj5rgZR+e1ctpmK8NjPf0zFqsz4JpLJT0xla9GFDKjy8Cpu331nrmE1Q==} - '@types/aws-lambda@8.10.152': resolution: {integrity: sha512-soT/c2gYBnT5ygwiHPmd9a1bftj462NWVk2tKCc1PYHSIacB2UwbTS2zYG4jzag1mRDuzg/OjtxQjQ2NKRB6Rw==} @@ -8686,18 +8814,12 @@ packages: '@types/eslint-scope@3.7.7': resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} - '@types/eslint@8.4.10': - resolution: {integrity: sha512-Sl/HOqN8NKPmhWo2VBEPm0nvHnu2LL3v9vKo8MEq0EtbJ4eVzGPl41VNPvn5E1i5poMk4/XD8UriLHpJvEP/Nw==} - '@types/eslint@8.56.12': resolution: {integrity: sha512-03ruubjWyOHlmljCVoxSuNDdmfZDzsrrz0P2LeJsOXr+ZwFQ+0yQIwNCwt/GYhV7Z31fgtXJTAEs+FYlEL851g==} '@types/estree-jsx@1.0.0': resolution: {integrity: sha512-3qvGd0z8F2ENTGr/GG1yViqfiKmRfrXVx5sJyHGFu3z7m5g5utCQtGp/g29JnjflhtQJBv1WDQukHiT58xPcYQ==} - '@types/estree@1.0.0': - resolution: {integrity: sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==} - '@types/estree@1.0.8': resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} @@ -8746,12 +8868,6 @@ packages: '@types/json-query@2.2.3': resolution: {integrity: sha512-ygE4p8lyKzTBo9LF2K/u6MHnxPxbHY6wGvwM7TdAKhbP3SvEf+Y9aeVWedDiP8SMIPowTl9R/6awQYjiUTHz2g==} - '@types/json-schema@7.0.11': - resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==} - - '@types/json-schema@7.0.13': - resolution: {integrity: sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ==} - '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} @@ -8975,64 +9091,6 @@ packages: '@types/ws@8.5.4': resolution: {integrity: sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg==} - '@typescript-eslint/eslint-plugin@5.59.6': - resolution: {integrity: sha512-sXtOgJNEuRU5RLwPUb1jxtToZbgvq3M6FPpY4QENxoOggK+UpTxUBpj6tD8+Qh2g46Pi9We87E+eHnUw8YcGsw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - '@typescript-eslint/parser': ^5.0.0 - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@typescript-eslint/parser@5.59.6': - resolution: {integrity: sha512-7pCa6al03Pv1yf/dUg/s1pXz/yGMUBAw5EeWqNTFiSueKvRNonze3hma3lhdsOrQcaOXhbk5gKu2Fludiho9VA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@typescript-eslint/scope-manager@5.59.6': - resolution: {integrity: sha512-gLbY3Le9Dxcb8KdpF0+SJr6EQ+hFGYFl6tVY8VxLPFDfUZC7BHFw+Vq7bM5lE9DwWPfx4vMWWTLGXgpc0mAYyQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - '@typescript-eslint/type-utils@5.59.6': - resolution: {integrity: sha512-A4tms2Mp5yNvLDlySF+kAThV9VTBPCvGf0Rp8nl/eoDX9Okun8byTKoj3fJ52IJitjWOk0fKPNQhXEB++eNozQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: '*' - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@typescript-eslint/types@5.59.6': - resolution: {integrity: sha512-tH5lBXZI7T2MOUgOWFdVNUILsI02shyQvfzG9EJkoONWugCG77NDDa1EeDGw7oJ5IvsTAAGVV8I3Tk2PNu9QfA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - '@typescript-eslint/typescript-estree@5.59.6': - resolution: {integrity: sha512-vW6JP3lMAs/Tq4KjdI/RiHaaJSO7IUsbkz17it/Rl9Q+WkQ77EOuOnlbaU8kKfVIOJxMhnRiBG+olE7f3M16DA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@typescript-eslint/utils@5.59.6': - resolution: {integrity: sha512-vzaaD6EXbTS29cVH0JjXBdzMt6VBlv+hE31XktDRMX1j3462wZCJa7VzO2AxXEXcIl8GQqZPcOPuW/Z1tZVogg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - - '@typescript-eslint/visitor-keys@5.59.6': - resolution: {integrity: sha512-zEfbFLzB9ETcEJ4HZEEsCR9HHeNku5/Qw1jSS5McYJv5BR+ftYXwFFAH5Al+xkGaZEqowMwl7uoJjQb1YSPF8Q==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - '@uiw/codemirror-extensions-basic-setup@4.19.5': resolution: {integrity: sha512-1zt7ZPJ01xKkSW/KDy0FZNga0bngN1fC594wCVG7FBi60ehfcAucpooQ+JSPScKXopxcb+ugPKZvVLzr9/OfzA==} peerDependencies: @@ -9391,10 +9449,6 @@ packages: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} - ansi-styles@5.2.0: - resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} - engines: {node: '>=10'} - ansi-styles@6.2.1: resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} engines: {node: '>=12'} @@ -9438,9 +9492,6 @@ packages: resolution: {integrity: sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==} engines: {node: '>=10'} - aria-query@5.3.0: - resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} - arktype@2.1.20: resolution: {integrity: sha512-IZCEEXaJ8g+Ijd59WtSYwtjnqXiwM8sWQ5EjGamcto7+HVN9eK0C4p0zDlCuAwWhpqr6fIBkxPuYDl4/Mcj/+Q==} @@ -9451,33 +9502,14 @@ packages: array-flatten@1.1.1: resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} - array-includes@3.1.8: - resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} - engines: {node: '>= 0.4'} - array-union@2.1.0: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} - array.prototype.findlastindex@1.2.5: - resolution: {integrity: sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==} - engines: {node: '>= 0.4'} - array.prototype.flat@1.3.1: resolution: {integrity: sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==} engines: {node: '>= 0.4'} - array.prototype.flat@1.3.2: - resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} - engines: {node: '>= 0.4'} - - array.prototype.flatmap@1.3.2: - resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} - engines: {node: '>= 0.4'} - - array.prototype.tosorted@1.1.1: - resolution: {integrity: sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==} - arraybuffer.prototype.slice@1.0.3: resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} engines: {node: '>= 0.4'} @@ -9507,9 +9539,6 @@ packages: resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} engines: {node: '>=12'} - ast-types-flow@0.0.7: - resolution: {integrity: sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==} - ast-v8-to-istanbul@1.0.2: resolution: {integrity: sha512-dKmJxJsGItLmc5CYZKuEjuG6GnBs6PG4gohMhyFOWKaNQoYCuRZJDECaBlHmcG0lv2wc2E0uU8lESmBEumC3DQ==} @@ -9567,16 +9596,9 @@ packages: aws4fetch@1.0.18: resolution: {integrity: sha512-3Cf+YaUl07p24MoQ46rFwulAmiyCwH2+1zw1ZyPAX5OtJ34Hh185DwB8y/qRLb6cYYYtSFJ9pthyLc0MD4e8sQ==} - axe-core@4.6.2: - resolution: {integrity: sha512-b1WlTV8+XKLj9gZy2DZXgQiyDp9xkkoe2a6U6UbYccScq2wgH/YwCeI2/Jq2mgo0HzQxqJOjWZBLeA/mqsk5Mg==} - engines: {node: '>=4'} - axios@1.16.1: resolution: {integrity: sha512-caYkukvroVPO8KrzuJEb50Hm07KwfBZPEC3VeFHTsqWHvKTsy54hjJz9BS/cdaypROE2rH6xvm9mHX4fgWkr3A==} - axobject-query@3.2.1: - resolution: {integrity: sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==} - b4a@1.6.6: resolution: {integrity: sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg==} @@ -10520,9 +10542,6 @@ packages: dagre-d3-es@7.0.14: resolution: {integrity: sha512-P4rFMVq9ESWqmOgK+dlXvOtLwYg0i7u0HBGJER0LZDJT2VHIPAMZ/riPxqJceWMStH5+E61QxFra9kIS3AqdMg==} - damerau-levenshtein@1.0.8: - resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} - dashdash@1.14.1: resolution: {integrity: sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==} engines: {node: '>=0.10'} @@ -10571,14 +10590,6 @@ packages: supports-color: optional: true - debug@3.2.7: - resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - debug@4.3.4: resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} engines: {node: '>=6.0'} @@ -10606,15 +10617,6 @@ packages: supports-color: optional: true - debug@4.4.0: - resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - debug@4.4.3: resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} engines: {node: '>=6.0'} @@ -10653,9 +10655,6 @@ packages: resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} engines: {node: '>=4.0.0'} - deep-is@0.1.4: - resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - deep-object-diff@1.1.9: resolution: {integrity: sha512-Rn+RuwkmkDwCi2/oXOFS9Gsr5lJZu/yTGpK7wAaAIE75CC+LCGEZHpY6VQJa/RoJcrmaA/docWJZvYohlNkWPA==} @@ -10685,10 +10684,6 @@ packages: resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} engines: {node: '>= 0.4'} - define-lazy-prop@2.0.0: - resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} - engines: {node: '>=8'} - define-lazy-prop@3.0.0: resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} engines: {node: '>=12'} @@ -10800,17 +10795,6 @@ packages: resolution: {integrity: sha512-FbVf3Z8fY/kALB9s+P9epCpWhfi/r0N2DgYYcYpsAUlaTxPjdsitsFobnltb+lyCgAIvf9C+4PSWlTnHlJMf1w==} engines: {node: '>= 8.0'} - doctrine@2.1.0: - resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} - engines: {node: '>=0.10.0'} - - doctrine@3.0.0: - resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} - engines: {node: '>=6.0.0'} - - dom-accessibility-api@0.5.15: - resolution: {integrity: sha512-8o+oVqLQZoruQPYy3uAAQtc6YbtSiRq5aPJBhJ82YTJRHvI6ofhYAkC81WmjFTnfUbqg6T3aCglIpU9p/5e7Cw==} - dom-helpers@5.2.1: resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==} @@ -10834,10 +10818,6 @@ packages: resolution: {integrity: sha512-MVUtAugQMOff5RnBy2d9N31iG0lNwg1qAoAOn7pOK5wf94WIaE3My2p3uwTQuvS2AcqchkcR3bHByjaM0mmi7Q==} engines: {node: '>=20'} - dotenv@16.0.3: - resolution: {integrity: sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==} - engines: {node: '>=12'} - dotenv@16.4.4: resolution: {integrity: sha512-XvPXc8XAQThSjAbY6cQ/9PcBXmFoWuw1sQ3b8HqUCR6ziGXjkTi//kB9SWa2UwqlgdAIuRqAa/9hVljzPehbYg==} engines: {node: '>=12'} @@ -11318,181 +11298,19 @@ packages: resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} engines: {node: '>=0.8.0'} - escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} - escape-string-regexp@5.0.0: resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} engines: {node: '>=12'} - eslint-config-prettier@8.6.0: - resolution: {integrity: sha512-bAF0eLpLVqP5oEVUFKpMA+NnRFICwn9X8B5jrR9FcqnYBuPbqWEjTEspPWMj5ye6czoSLDweCzSo3Ko7gGrZaA==} - hasBin: true - peerDependencies: - eslint: '>=7.0.0' - - eslint-import-resolver-node@0.3.7: - resolution: {integrity: sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==} - - eslint-import-resolver-node@0.3.9: - resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} - - eslint-import-resolver-typescript@3.5.5: - resolution: {integrity: sha512-TdJqPHs2lW5J9Zpe17DZNQuDnox4xo2o+0tE7Pggain9Rbc19ik8kFtXdxZ250FVx2kF4vlt2RSf4qlUpG7bhw==} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - eslint: '*' - eslint-plugin-import: '*' - - eslint-module-utils@2.8.1: - resolution: {integrity: sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: '*' - eslint-import-resolver-node: '*' - eslint-import-resolver-typescript: '*' - eslint-import-resolver-webpack: '*' - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - eslint: - optional: true - eslint-import-resolver-node: - optional: true - eslint-import-resolver-typescript: - optional: true - eslint-import-resolver-webpack: - optional: true - - eslint-plugin-es@3.0.1: - resolution: {integrity: sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==} - engines: {node: '>=8.10.0'} - peerDependencies: - eslint: '>=4.19.1' - - eslint-plugin-import@2.29.1: - resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - - eslint-plugin-jest-dom@4.0.3: - resolution: {integrity: sha512-9j+n8uj0+V0tmsoS7bYC7fLhQmIvjRqRYEcbDSi+TKPsTThLLXCyj5swMSSf/hTleeMktACnn+HFqXBr5gbcbA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6', yarn: '>=1'} - peerDependencies: - eslint: ^6.8.0 || ^7.0.0 || ^8.0.0 - - eslint-plugin-jest@26.9.0: - resolution: {integrity: sha512-TWJxWGp1J628gxh2KhaH1H1paEdgE2J61BBF1I59c6xWeL5+D1BzMxGDN/nXAfX+aSkR5u80K+XhskK6Gwq9ng==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - '@typescript-eslint/eslint-plugin': ^5.0.0 - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - jest: '*' - peerDependenciesMeta: - '@typescript-eslint/eslint-plugin': - optional: true - jest: - optional: true - - eslint-plugin-jsx-a11y@6.7.1: - resolution: {integrity: sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==} - engines: {node: '>=4.0'} - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 - - eslint-plugin-node@11.1.0: - resolution: {integrity: sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==} - engines: {node: '>=8.10.0'} - peerDependencies: - eslint: '>=5.16.0' - - eslint-plugin-react-hooks@4.6.2: - resolution: {integrity: sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==} - engines: {node: '>=10'} - peerDependencies: - eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 - - eslint-plugin-react@7.32.2: - resolution: {integrity: sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg==} - engines: {node: '>=4'} - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 - - eslint-plugin-testing-library@5.11.0: - resolution: {integrity: sha512-ELY7Gefo+61OfXKlQeXNIDVVLPcvKTeiQOoMZG9TeuWa7Ln4dUNRv8JdRWBQI9Mbb427XGlVB1aa1QPZxBJM8Q==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'} - peerDependencies: - eslint: ^7.5.0 || ^8.0.0 - - eslint-plugin-turbo@2.0.5: - resolution: {integrity: sha512-nCTXZdaKmdRybBdjnMrDFG+ppLc9toUqB01Hf0pfhkQw8OoC29oJIVPsCSvuL/W58RKD02CNEUrwnVt57t36IQ==} - peerDependencies: - eslint: '>6.6.0' - eslint-scope@5.1.1: resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} engines: {node: '>=8.0.0'} - eslint-scope@7.1.1: - resolution: {integrity: sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - eslint-utils@2.1.0: - resolution: {integrity: sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==} - engines: {node: '>=6'} - - eslint-utils@3.0.0: - resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} - engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} - peerDependencies: - eslint: '>=5' - - eslint-visitor-keys@1.3.0: - resolution: {integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==} - engines: {node: '>=4'} - - eslint-visitor-keys@2.1.0: - resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} - engines: {node: '>=10'} - - eslint-visitor-keys@3.3.0: - resolution: {integrity: sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - eslint-visitor-keys@3.4.2: - resolution: {integrity: sha512-8drBzUEyZ2llkpCA67iYrgEssKDUu68V8ChqqOfFupIaG/LCVPUT+CoGJpT77zJprs4T/W7p07LP7zAIMuweVw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - eslint@8.31.0: - resolution: {integrity: sha512-0tQQEVdmPZ1UtUKXjX7EMm9BlgJ08G90IhWh0PKDCb3ZLsgAOHI8fYSIzYVZej92zsgq+ft0FGsxhJ3xo2tbuA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. - hasBin: true - - espree@9.4.1: - resolution: {integrity: sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - espree@9.6.0: - resolution: {integrity: sha512-1FH/IiruXZ84tpUlm0aCUEwMl2Ho5ilqVh0VvQXw+byAz/4SAciyHLlfmL5WYqsvD38oymdUwBss0LtK8m4s/A==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} hasBin: true - esquery@1.4.0: - resolution: {integrity: sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==} - engines: {node: '>=0.10'} - esrecurse@4.3.0: resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} engines: {node: '>=4.0'} @@ -11533,10 +11351,6 @@ packages: estree-walker@3.0.3: resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} - esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} - etag@1.8.1: resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} engines: {node: '>= 0.6'} @@ -11701,9 +11515,6 @@ packages: fast-json-stringify@6.0.1: resolution: {integrity: sha512-s7SJE83QKBZwg54dIbD5rCtzOBVD43V1ReWXXYqBgwCwHLYAAT0RQc/FmrQglXqWPpz6omtryJQOau5jI4Nrvg==} - fast-levenshtein@2.0.6: - resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - fast-npm-meta@0.2.2: resolution: {integrity: sha512-E+fdxeaOQGo/CMWc9f4uHFfgUPJRAu7N3uB8GBvB3SDPAIWJK4GKyYhkAGFq+GYrcbKNfQIz5VVQyJnDuPPCrg==} @@ -11797,10 +11608,6 @@ packages: resolution: {integrity: sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==} engines: {node: '>=18'} - file-entry-cache@6.0.1: - resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} - engines: {node: ^10.12.0 || >=12.0.0} - file-type@19.6.0: resolution: {integrity: sha512-VZR5I7k5wkD0HgFnMsq5hOsSc710MJMu5Nc5QYsbe38NN5iPV/XTObYLc/cpttRTf6lX538+5uO1ZQRhYibiZQ==} engines: {node: '>=18'} @@ -11839,13 +11646,6 @@ packages: find-yarn-workspace-root2@1.2.16: resolution: {integrity: sha512-hr6hb1w8ePMpPVUK39S4RlwJzi+xPLuVuG8XlwXU3KD5Yn3qgBWVfy3AzNlDhWvE1EORCE65/Qm26rFQt3VLVA==} - flat-cache@3.0.4: - resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} - engines: {node: ^10.12.0 || >=12.0.0} - - flatted@3.4.2: - resolution: {integrity: sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==} - follow-redirects@1.16.0: resolution: {integrity: sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==} engines: {node: '>=4.0'} @@ -12090,10 +11890,6 @@ packages: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} - globals@13.19.0: - resolution: {integrity: sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==} - engines: {node: '>=8'} - globals@15.15.0: resolution: {integrity: sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==} engines: {node: '>=18'} @@ -12102,9 +11898,6 @@ packages: resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} engines: {node: '>= 0.4'} - globalyzer@0.1.0: - resolution: {integrity: sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==} - globby@11.1.0: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} engines: {node: '>=10'} @@ -12535,11 +12328,6 @@ packages: is-deflate@1.0.0: resolution: {integrity: sha512-YDoFpuZWu1VRXlsnlYMzKyVRITXj7Ej/V9gXQ2/pAe7X1J7M/RNOqaIYi6qUn+B7nGyB9pDXrv02dsB58d2ZAQ==} - is-docker@2.2.1: - resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} - engines: {node: '>=8'} - hasBin: true - is-docker@3.0.0: resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -12600,10 +12388,6 @@ packages: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} - is-path-inside@3.0.3: - resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} - engines: {node: '>=8'} - is-plain-obj@1.1.0: resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} engines: {node: '>=0.10.0'} @@ -12683,10 +12467,6 @@ packages: resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} engines: {node: '>=0.10.0'} - is-wsl@2.2.0: - resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} - engines: {node: '>=8'} - is-wsl@3.1.0: resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==} engines: {node: '>=16'} @@ -12785,9 +12565,6 @@ packages: resolution: {integrity: sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==} engines: {node: '>=0.10.0'} - js-sdsl@4.2.0: - resolution: {integrity: sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ==} - js-tokens@10.0.0: resolution: {integrity: sha512-lM/UBzQmfJRo9ABXbPWemivdCW8V2G8FHaHdypQaIy523snUjog0W71ayWXTjiR+ixeMyVHN2XcpnTd/liPg/Q==} @@ -12850,9 +12627,6 @@ packages: json-schema@0.4.0: resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} - json-stable-stringify-without-jsonify@1.0.1: - resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - json-stable-stringify@1.3.0: resolution: {integrity: sha512-qtYiSSFlwot9XHtF9bD9c7rwKjr+RecWT//ZnPvSmEjpV5mmPOCN4j8UjY5hbjNkOwZ/jQv3J6R1/pL7RwgMsg==} engines: {node: '>= 0.4'} @@ -12902,10 +12676,6 @@ packages: resolution: {integrity: sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==} engines: {node: '>=0.6.0'} - jsx-ast-utils@3.3.3: - resolution: {integrity: sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==} - engines: {node: '>=4.0'} - junk@4.0.1: resolution: {integrity: sha512-Qush0uP+G8ZScpGMZvHUiRfI0YBWuB3gVBYlI0v0vvOJt5FLicco+IkP0a50LqTTQhmts/m6tP5SWE+USyIvcQ==} engines: {node: '>=12.20'} @@ -12948,12 +12718,6 @@ packages: resolution: {integrity: sha512-JUshTRAfHI4/MF9dH2WupvjSXyn8JBuUEWazB8ZVJUtXutT0doDlAv1XKbZ1Pb5sMexa8FF4CFBc0iiul7gbUQ==} engines: {node: '>=20.10.0', npm: '>=10.2.3'} - language-subtag-registry@0.3.22: - resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==} - - language-tags@1.0.5: - resolution: {integrity: sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==} - layerr@2.0.1: resolution: {integrity: sha512-z0730CwG/JO24evdORnyDkwG1Q7b7mF2Tp1qRQ0YvrMMARbt1DFG694SOv439Gm7hYKolyZyaB49YIrYIfZBdg==} @@ -13024,10 +12788,6 @@ packages: resolution: {integrity: sha512-HJp37y62j3j8qzAOODWuUJl4ysLwsDvCTBV6odr3jIRHR/a5e+tI14VQGIBcpK9ysqC3pGWyW5Rp9Jv1YDubyw==} hasBin: true - levn@0.4.1: - resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} - engines: {node: '>= 0.8.0'} - light-my-request@6.6.0: resolution: {integrity: sha512-CHYbu8RtboSIoVsHZ6Ye4cj4Aw/yg2oAFimlF7mNvfDV192LR7nDiKtSIfCuLT7KokPSTn/9kfVLm5OGN0A28A==} @@ -13270,10 +13030,6 @@ packages: resolution: {integrity: sha512-QrwPArQCNLAKGO/C+ZIilgIuDnEnKx5QYODdDtbFaxzsbZcc/a7WFq7MhsVYgRlwawLtvOUESTlfJ+hc/USqPg==} engines: {node: '>=12'} - lz-string@1.4.4: - resolution: {integrity: sha512-0ckx7ZHRPqb0oUm8zNr+90mtf9DQB60H1wMCjBtfi62Kl3a7JbHob6gA2bC+xRvZoOL+1hzUK8jeuEIQE8svEQ==} - hasBin: true - magic-string@0.30.21: resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} @@ -13911,12 +13667,6 @@ packages: napi-build-utils@2.0.0: resolution: {integrity: sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==} - natural-compare-lite@1.4.0: - resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} - - natural-compare@1.4.0: - resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - nearley@2.20.1: resolution: {integrity: sha512-+Mc8UaAebFzgV+KpI5n7DasuuQCHA89dmwm7JXw3TV43ukfNQ9DnBH3Mdb2g/I4Fdxc26pwimBWvjIw0UAILSQ==} hasBin: true @@ -14122,25 +13872,6 @@ packages: resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} engines: {node: '>= 0.4'} - object.entries@1.1.6: - resolution: {integrity: sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==} - engines: {node: '>= 0.4'} - - object.fromentries@2.0.8: - resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} - engines: {node: '>= 0.4'} - - object.groupby@1.0.3: - resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} - engines: {node: '>= 0.4'} - - object.hasown@1.1.2: - resolution: {integrity: sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==} - - object.values@1.2.0: - resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==} - engines: {node: '>= 0.4'} - obuf@1.1.2: resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==} @@ -14202,10 +13933,6 @@ packages: resolution: {integrity: sha512-dtbI5oW7987hwC9qjJTyABldTaa19SuyJse1QboWv3b0qCcrrLNVDqBx1XgELAjh9QTVQaP/C5b1nhQebd1H2A==} engines: {node: '>=18'} - open@8.4.0: - resolution: {integrity: sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==} - engines: {node: '>=12'} - openai@4.33.1: resolution: {integrity: sha512-0DH572aSxGTT1JPOXgJQ9mjiuSPg/7scPot8hLc5I1mfQxPxLXTZWJpWerKaIWOuPkR2nrB0SamGDEehH8RuWA==} hasBin: true @@ -14228,10 +13955,6 @@ packages: openid-client@6.3.3: resolution: {integrity: sha512-lTK8AV8SjqCM4qznLX0asVESAwzV39XTVdfMAM185ekuaZCnkWdPzcxMTXNlsm9tsUAMa1Q30MBmKAykdT1LWw==} - optionator@0.9.1: - resolution: {integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==} - engines: {node: '>= 0.8.0'} - ora@5.4.1: resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} engines: {node: '>=10'} @@ -14246,6 +13969,32 @@ packages: outdent@0.8.0: resolution: {integrity: sha512-KiOAIsdpUTcAXuykya5fnVVT+/5uS0Q1mrkRHcF89tpieSmY33O/tmc54CqwA+bfhbtEfZUNLHaPUiB9X3jt1A==} + oxfmt@0.54.0: + resolution: {integrity: sha512-DjnMwn7smSLF+Mc2+pRItnuPftm/dkUFpY/d4+33y9TfKrsHZo8GLhmUg9BrOIUEy94Rlom1Q11N6vuhE+e0oQ==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + svelte: ^5.0.0 + vite-plus: '*' + peerDependenciesMeta: + svelte: + optional: true + vite-plus: + optional: true + + oxlint@1.70.0: + resolution: {integrity: sha512-D6JgHtzkhRwvEC+A0Nw5AEc5bk8x5i1pHzvZIEf/a0C4hOzmAACNGtkDGPyFaxxX3ZVGxCPeig3P3rMM8XU3/g==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + oxlint-tsgolint: '>=0.22.1' + vite-plus: '*' + peerDependenciesMeta: + oxlint-tsgolint: + optional: true + vite-plus: + optional: true + p-cancelable@1.1.0: resolution: {integrity: sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==} engines: {node: '>=6'} @@ -14858,10 +14607,6 @@ packages: resolution: {integrity: sha512-+wZgbxNES/KlJs9q40F/1sfOd/j7f1O9JaHcW5Dsn3aUUOZg3L2bjpVUcKV2jvtElYfoTuQiNeMfQJ4kwUAhCQ==} engines: {node: '>=10'} - prelude-ls@1.2.1: - resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} - engines: {node: '>= 0.8.0'} - prepend-http@2.0.0: resolution: {integrity: sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==} engines: {node: '>=4'} @@ -14933,10 +14678,6 @@ packages: engines: {node: '>=14'} hasBin: true - pretty-format@27.5.1: - resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - pretty-hrtime@1.0.3: resolution: {integrity: sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==} engines: {node: '>= 0.8'} @@ -15198,9 +14939,6 @@ packages: react-is@16.13.1: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} - react-is@17.0.2: - resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} - react-is@18.3.1: resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} @@ -15422,10 +15160,6 @@ packages: resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} engines: {node: '>= 0.4'} - regexpp@3.2.0: - resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} - engines: {node: '>=8'} - registry-auth-token@4.2.2: resolution: {integrity: sha512-PC5ZysNb42zpFME6D/XlIgtNGdTl8bBOCw90xQLVMpzuuubJKYDWFAEuUNc+Cn8Z8724tg2SDhDRrkVEsqfDMg==} engines: {node: '>=6.0.0'} @@ -15580,10 +15314,6 @@ packages: require-main-filename@2.0.0: resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} - requireindex@1.2.0: - resolution: {integrity: sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==} - engines: {node: '>=0.10.5'} - resend@3.2.0: resolution: {integrity: sha512-lDHhexiFYPoLXy7zRlJ8D5eKxoXy6Tr9/elN3+Vv7PkUoYuSSD1fpiIfa/JYXEWyiyN2UczkCTLpkT8dDPJ4Pg==} engines: {node: '>=18'} @@ -15614,10 +15344,6 @@ packages: resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} hasBin: true - resolve@2.0.0-next.4: - resolution: {integrity: sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==} - hasBin: true - responselike@1.0.2: resolution: {integrity: sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==} @@ -15651,11 +15377,6 @@ packages: rfdc@1.4.1: resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} - rimraf@3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - deprecated: Rimraf versions prior to v4 are no longer supported - hasBin: true - rimraf@6.0.1: resolution: {integrity: sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==} engines: {node: 20 || >=22} @@ -16121,9 +15842,6 @@ packages: resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} engines: {node: '>=12'} - string.prototype.matchall@4.0.8: - resolution: {integrity: sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==} - string.prototype.padend@3.1.4: resolution: {integrity: sha512-67otBXoksdjsnXXRUq+KMVTdlVRZ2af422Y0aTyTjVaoQkGr3mxl2Bc5emi7dOQ3OGVVQQskmLEWwFXwommpNw==} engines: {node: '>= 0.4'} @@ -16186,10 +15904,6 @@ packages: resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} engines: {node: '>=0.10.0'} - strip-json-comments@3.1.1: - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} - engines: {node: '>=8'} - strnum@1.0.5: resolution: {integrity: sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==} @@ -16291,10 +16005,6 @@ packages: engines: {node: 20 || >=22} hasBin: true - synckit@0.8.5: - resolution: {integrity: sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==} - engines: {node: ^14.18.0 || >=16.0.0} - systeminformation@5.31.7: resolution: {integrity: sha512-/8NC53e5nP9nmhn42/ncdOkyJnOoue/Vy+tJOyUGd1Yv66G069wK4rrziwhrqDETgk78CudTQupw5z19S5uoZw==} engines: {node: '>=8.0.0'} @@ -16345,10 +16055,6 @@ packages: tailwindcss@4.3.0: resolution: {integrity: sha512-y6nxMGB1nMW9R6k96e5gdIFzcfL/gTJRNaqGes1YvkLnPVXzWgbqFF2yLC0T8G774n24cx3Pe8XrKoniCOAH+Q==} - tapable@2.3.0: - resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==} - engines: {node: '>=6'} - tapable@2.3.3: resolution: {integrity: sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==} engines: {node: '>=6'} @@ -16417,9 +16123,6 @@ packages: text-decoder@1.2.0: resolution: {integrity: sha512-n1yg1mOj9DNpk3NeZOx7T6jchTbyJS3i3cucbNN6FcdPriMZx7NsgrGpWWdWZZGxD7ES1XB+3uoqHMgOKaN+fg==} - text-table@0.2.0: - resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - thenify-all@1.6.0: resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} engines: {node: '>=0.8'} @@ -16445,9 +16148,6 @@ packages: tiny-case@1.0.3: resolution: {integrity: sha512-Eet/eeMhkO6TX8mnUteS9zgPbUMQa4I6Kkp5ORiBD5476/m+PIRiumP5tmh5ioJpH7k51Kehawy2UDfsnxxY8Q==} - tiny-glob@0.2.9: - resolution: {integrity: sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==} - tiny-invariant@1.3.1: resolution: {integrity: sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==} @@ -16489,6 +16189,10 @@ packages: tinygradient@1.1.5: resolution: {integrity: sha512-8nIfc2vgQ4TeLnk2lFj4tRLvvJwEfQuabdsmvDdQPT0xlk9TaNtpGd6nNRxXoK6vQhN6RSzj+Cnp5tTQmpxmbw==} + tinypool@2.1.0: + resolution: {integrity: sha512-Pugqs6M0m7Lv1I7FtxN4aoyToKg1C4tu+/381vH35y8oENM/Ai7f7C4StcoK4/+BSw9ebcS8jRiVrORFKCALLw==} + engines: {node: ^20.0.0 || >=22.0.0} + tinyrainbow@3.1.0: resolution: {integrity: sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==} engines: {node: '>=14.0.0'} @@ -16628,9 +16332,6 @@ packages: tsconfig-paths@3.14.1: resolution: {integrity: sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==} - tsconfig-paths@3.15.0: - resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} - tsconfig-paths@4.2.0: resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==} engines: {node: '>=6'} @@ -16674,12 +16375,6 @@ packages: typescript: optional: true - tsutils@3.21.0: - resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} - engines: {node: '>= 6'} - peerDependencies: - typescript: 5.5.4 - tsx@3.12.2: resolution: {integrity: sha512-ykAEkoBg30RXxeOMVeZwar+JH632dZn9EUJVyJwhfag62k6UO/dIyJEV58YuLF6e5BTdV/qmbQrpkWqjq9cUnQ==} hasBin: true @@ -16752,18 +16447,10 @@ packages: tweetnacl@0.14.5: resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==} - type-check@0.4.0: - resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} - engines: {node: '>= 0.8.0'} - type-fest@0.13.1: resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==} engines: {node: '>=10'} - type-fest@0.20.2: - resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} - engines: {node: '>=10'} - type-fest@0.6.0: resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} engines: {node: '>=8'} @@ -17356,10 +17043,6 @@ packages: engines: {node: '>=8'} hasBin: true - word-wrap@1.2.3: - resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} - engines: {node: '>=0.10.0'} - wrap-ansi@6.2.0: resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} engines: {node: '>=8'} @@ -19671,14 +19354,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/eslint-parser@7.21.8(@babel/core@7.22.17)(eslint@8.31.0)': - dependencies: - '@babel/core': 7.22.17 - '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1 - eslint: 8.31.0 - eslint-visitor-keys: 2.1.0 - semver: 6.3.1 - '@babel/generator@7.24.7': dependencies: '@babel/types': 7.27.3 @@ -19841,31 +19516,6 @@ snapshots: '@babel/helper-plugin-utils': 7.24.0 '@babel/helper-simple-access': 7.22.5 - '@babel/plugin-transform-react-display-name@7.18.6(@babel/core@7.22.17)': - dependencies: - '@babel/core': 7.22.17 - '@babel/helper-plugin-utils': 7.24.0 - - '@babel/plugin-transform-react-jsx-development@7.18.6(@babel/core@7.22.17)': - dependencies: - '@babel/core': 7.22.17 - '@babel/plugin-transform-react-jsx': 7.22.15(@babel/core@7.22.17) - - '@babel/plugin-transform-react-jsx@7.22.15(@babel/core@7.22.17)': - dependencies: - '@babel/core': 7.22.17 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-module-imports': 7.22.15 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.22.17) - '@babel/types': 7.27.3 - - '@babel/plugin-transform-react-pure-annotations@7.18.6(@babel/core@7.22.17)': - dependencies: - '@babel/core': 7.22.17 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-transform-typescript@7.21.3(@babel/core@7.22.17)': dependencies: '@babel/core': 7.22.17 @@ -19874,16 +19524,6 @@ snapshots: '@babel/helper-plugin-utils': 7.24.0 '@babel/plugin-syntax-typescript': 7.21.4(@babel/core@7.22.17) - '@babel/preset-react@7.18.6(@babel/core@7.22.17)': - dependencies: - '@babel/core': 7.22.17 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/helper-validator-option': 7.22.15 - '@babel/plugin-transform-react-display-name': 7.18.6(@babel/core@7.22.17) - '@babel/plugin-transform-react-jsx': 7.22.15(@babel/core@7.22.17) - '@babel/plugin-transform-react-jsx-development': 7.18.6(@babel/core@7.22.17) - '@babel/plugin-transform-react-pure-annotations': 7.18.6(@babel/core@7.22.17) - '@babel/preset-typescript@7.21.5(@babel/core@7.22.17)': dependencies: '@babel/core': 7.22.17 @@ -21041,27 +20681,6 @@ snapshots: '@esbuild/win32-x64@0.28.0': optional: true - '@eslint-community/eslint-utils@4.4.0(eslint@8.31.0)': - dependencies: - eslint: 8.31.0 - eslint-visitor-keys: 3.4.2 - - '@eslint-community/regexpp@4.5.1': {} - - '@eslint/eslintrc@1.4.1': - dependencies: - ajv: 6.12.6 - debug: 4.4.3(supports-color@10.0.0) - espree: 9.6.0 - globals: 13.19.0 - ignore: 5.2.4 - import-fresh: 3.3.0 - js-yaml: 4.1.1 - minimatch: 3.1.5 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - supports-color - '@fastify/accept-negotiator@2.0.1': {} '@fastify/ajv-compiler@4.0.5': @@ -21277,18 +20896,6 @@ snapshots: - bufferutil - utf-8-validate - '@humanwhocodes/config-array@0.11.8': - dependencies: - '@humanwhocodes/object-schema': 1.2.1 - debug: 4.4.3(supports-color@10.0.0) - minimatch: 3.1.5 - transitivePeerDependencies: - - supports-color - - '@humanwhocodes/module-importer@1.0.1': {} - - '@humanwhocodes/object-schema@1.2.1': {} - '@iconify/types@2.0.0': {} '@iconify/utils@3.0.2': @@ -21607,10 +21214,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1': - dependencies: - eslint-scope: 5.1.1 - '@nodable/entities@2.1.0': {} '@nodelib/fs.scandir@2.1.5': @@ -22375,20 +21978,125 @@ snapshots: '@opentelemetry/api': 1.9.1 '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.1) + '@oxfmt/binding-android-arm-eabi@0.54.0': + optional: true + + '@oxfmt/binding-android-arm64@0.54.0': + optional: true + + '@oxfmt/binding-darwin-arm64@0.54.0': + optional: true + + '@oxfmt/binding-darwin-x64@0.54.0': + optional: true + + '@oxfmt/binding-freebsd-x64@0.54.0': + optional: true + + '@oxfmt/binding-linux-arm-gnueabihf@0.54.0': + optional: true + + '@oxfmt/binding-linux-arm-musleabihf@0.54.0': + optional: true + + '@oxfmt/binding-linux-arm64-gnu@0.54.0': + optional: true + + '@oxfmt/binding-linux-arm64-musl@0.54.0': + optional: true + + '@oxfmt/binding-linux-ppc64-gnu@0.54.0': + optional: true + + '@oxfmt/binding-linux-riscv64-gnu@0.54.0': + optional: true + + '@oxfmt/binding-linux-riscv64-musl@0.54.0': + optional: true + + '@oxfmt/binding-linux-s390x-gnu@0.54.0': + optional: true + + '@oxfmt/binding-linux-x64-gnu@0.54.0': + optional: true + + '@oxfmt/binding-linux-x64-musl@0.54.0': + optional: true + + '@oxfmt/binding-openharmony-arm64@0.54.0': + optional: true + + '@oxfmt/binding-win32-arm64-msvc@0.54.0': + optional: true + + '@oxfmt/binding-win32-ia32-msvc@0.54.0': + optional: true + + '@oxfmt/binding-win32-x64-msvc@0.54.0': + optional: true + + '@oxlint/binding-android-arm-eabi@1.70.0': + optional: true + + '@oxlint/binding-android-arm64@1.70.0': + optional: true + + '@oxlint/binding-darwin-arm64@1.70.0': + optional: true + + '@oxlint/binding-darwin-x64@1.70.0': + optional: true + + '@oxlint/binding-freebsd-x64@1.70.0': + optional: true + + '@oxlint/binding-linux-arm-gnueabihf@1.70.0': + optional: true + + '@oxlint/binding-linux-arm-musleabihf@1.70.0': + optional: true + + '@oxlint/binding-linux-arm64-gnu@1.70.0': + optional: true + + '@oxlint/binding-linux-arm64-musl@1.70.0': + optional: true + + '@oxlint/binding-linux-ppc64-gnu@1.70.0': + optional: true + + '@oxlint/binding-linux-riscv64-gnu@1.70.0': + optional: true + + '@oxlint/binding-linux-riscv64-musl@1.70.0': + optional: true + + '@oxlint/binding-linux-s390x-gnu@1.70.0': + optional: true + + '@oxlint/binding-linux-x64-gnu@1.70.0': + optional: true + + '@oxlint/binding-linux-x64-musl@1.70.0': + optional: true + + '@oxlint/binding-openharmony-arm64@1.70.0': + optional: true + + '@oxlint/binding-win32-arm64-msvc@1.70.0': + optional: true + + '@oxlint/binding-win32-ia32-msvc@1.70.0': + optional: true + + '@oxlint/binding-win32-x64-msvc@1.70.0': + optional: true + '@pinojs/redact@0.4.0': {} '@pkgjs/parseargs@0.11.0': optional: true - '@pkgr/utils@2.3.1': - dependencies: - cross-spawn: 7.0.6 - is-glob: 4.0.3 - open: 8.4.0 - picocolors: 1.1.1 - tiny-glob: 0.2.9 - tslib: 2.8.1 - '@playwright/test@1.37.0': dependencies: '@types/node': 20.14.14 @@ -24314,33 +24022,6 @@ snapshots: - utf-8-validate - yaml - '@remix-run/eslint-config@2.17.4(eslint@8.31.0)(react@18.3.1)(typescript@5.5.4)': - dependencies: - '@babel/core': 7.22.17 - '@babel/eslint-parser': 7.21.8(@babel/core@7.22.17)(eslint@8.31.0) - '@babel/preset-react': 7.18.6(@babel/core@7.22.17) - '@rushstack/eslint-patch': 1.2.0 - '@typescript-eslint/eslint-plugin': 5.59.6(@typescript-eslint/parser@5.59.6(eslint@8.31.0)(typescript@5.5.4))(eslint@8.31.0)(typescript@5.5.4) - '@typescript-eslint/parser': 5.59.6(eslint@8.31.0)(typescript@5.5.4) - eslint: 8.31.0 - eslint-import-resolver-node: 0.3.7 - eslint-import-resolver-typescript: 3.5.5(@typescript-eslint/parser@5.59.6(eslint@8.31.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.7)(eslint-plugin-import@2.29.1)(eslint@8.31.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.59.6(eslint@8.31.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.5.5)(eslint@8.31.0) - eslint-plugin-jest: 26.9.0(@typescript-eslint/eslint-plugin@5.59.6(@typescript-eslint/parser@5.59.6(eslint@8.31.0)(typescript@5.5.4))(eslint@8.31.0)(typescript@5.5.4))(eslint@8.31.0)(typescript@5.5.4) - eslint-plugin-jest-dom: 4.0.3(eslint@8.31.0) - eslint-plugin-jsx-a11y: 6.7.1(eslint@8.31.0) - eslint-plugin-node: 11.1.0(eslint@8.31.0) - eslint-plugin-react: 7.32.2(eslint@8.31.0) - eslint-plugin-react-hooks: 4.6.2(eslint@8.31.0) - eslint-plugin-testing-library: 5.11.0(eslint@8.31.0)(typescript@5.5.4) - react: 18.3.1 - optionalDependencies: - typescript: 5.5.4 - transitivePeerDependencies: - - eslint-import-resolver-webpack - - jest - - supports-color - '@remix-run/express@2.17.4(express@4.20.0)(typescript@5.5.4)': dependencies: '@remix-run/node': 2.17.4(typescript@5.5.4) @@ -24523,8 +24204,6 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.60.1': optional: true - '@rushstack/eslint-patch@1.2.0': {} - '@s2-dev/streamstore@0.22.10(supports-color@10.0.0)': dependencies: '@protobuf-ts/runtime': 2.11.1 @@ -25894,17 +25573,6 @@ snapshots: - bare-buffer - supports-color - '@testing-library/dom@8.19.1': - dependencies: - '@babel/code-frame': 7.24.7 - '@babel/runtime': 7.28.4 - '@types/aria-query': 5.0.1 - aria-query: 5.3.0 - chalk: 4.1.2 - dom-accessibility-api: 0.5.15 - lz-string: 1.4.4 - pretty-format: 27.5.1 - '@tokenizer/token@0.3.0': {} '@total-typescript/ts-reset@0.4.2': {} @@ -25922,8 +25590,6 @@ snapshots: dependencies: '@types/estree': 1.0.8 - '@types/aria-query@5.0.1': {} - '@types/aws-lambda@8.10.152': {} '@types/bcryptjs@2.4.2': {} @@ -26117,11 +25783,6 @@ snapshots: '@types/eslint': 8.56.12 '@types/estree': 1.0.9 - '@types/eslint@8.4.10': - dependencies: - '@types/estree': 1.0.0 - '@types/json-schema': 7.0.11 - '@types/eslint@8.56.12': dependencies: '@types/estree': 1.0.9 @@ -26131,8 +25792,6 @@ snapshots: dependencies: '@types/estree': 1.0.8 - '@types/estree@1.0.0': {} - '@types/estree@1.0.8': {} '@types/estree@1.0.9': {} @@ -26184,10 +25843,6 @@ snapshots: '@types/json-query@2.2.3': {} - '@types/json-schema@7.0.11': {} - - '@types/json-schema@7.0.13': {} - '@types/json-schema@7.0.15': {} '@types/json5@0.0.29': {} @@ -26452,90 +26107,6 @@ snapshots: dependencies: '@types/node': 20.14.14 - '@typescript-eslint/eslint-plugin@5.59.6(@typescript-eslint/parser@5.59.6(eslint@8.31.0)(typescript@5.5.4))(eslint@8.31.0)(typescript@5.5.4)': - dependencies: - '@eslint-community/regexpp': 4.5.1 - '@typescript-eslint/parser': 5.59.6(eslint@8.31.0)(typescript@5.5.4) - '@typescript-eslint/scope-manager': 5.59.6 - '@typescript-eslint/type-utils': 5.59.6(eslint@8.31.0)(typescript@5.5.4) - '@typescript-eslint/utils': 5.59.6(eslint@8.31.0)(typescript@5.5.4) - debug: 4.3.4 - eslint: 8.31.0 - grapheme-splitter: 1.0.4 - ignore: 5.2.4 - natural-compare-lite: 1.4.0 - semver: 7.6.3 - tsutils: 3.21.0(typescript@5.5.4) - optionalDependencies: - typescript: 5.5.4 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/parser@5.59.6(eslint@8.31.0)(typescript@5.5.4)': - dependencies: - '@typescript-eslint/scope-manager': 5.59.6 - '@typescript-eslint/types': 5.59.6 - '@typescript-eslint/typescript-estree': 5.59.6(typescript@5.5.4) - debug: 4.4.0 - eslint: 8.31.0 - optionalDependencies: - typescript: 5.5.4 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/scope-manager@5.59.6': - dependencies: - '@typescript-eslint/types': 5.59.6 - '@typescript-eslint/visitor-keys': 5.59.6 - - '@typescript-eslint/type-utils@5.59.6(eslint@8.31.0)(typescript@5.5.4)': - dependencies: - '@typescript-eslint/typescript-estree': 5.59.6(typescript@5.5.4) - '@typescript-eslint/utils': 5.59.6(eslint@8.31.0)(typescript@5.5.4) - debug: 4.4.3(supports-color@10.0.0) - eslint: 8.31.0 - tsutils: 3.21.0(typescript@5.5.4) - optionalDependencies: - typescript: 5.5.4 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/types@5.59.6': {} - - '@typescript-eslint/typescript-estree@5.59.6(typescript@5.5.4)': - dependencies: - '@typescript-eslint/types': 5.59.6 - '@typescript-eslint/visitor-keys': 5.59.6 - debug: 4.4.3(supports-color@10.0.0) - globby: 11.1.0 - is-glob: 4.0.3 - semver: 7.7.3 - tsutils: 3.21.0(typescript@5.5.4) - optionalDependencies: - typescript: 5.5.4 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/utils@5.59.6(eslint@8.31.0)(typescript@5.5.4)': - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.31.0) - '@types/json-schema': 7.0.13 - '@types/semver': 7.5.1 - '@typescript-eslint/scope-manager': 5.59.6 - '@typescript-eslint/types': 5.59.6 - '@typescript-eslint/typescript-estree': 5.59.6(typescript@5.5.4) - eslint: 8.31.0 - eslint-scope: 5.1.1 - semver: 7.7.3 - transitivePeerDependencies: - - supports-color - - typescript - - '@typescript-eslint/visitor-keys@5.59.6': - dependencies: - '@typescript-eslint/types': 5.59.6 - eslint-visitor-keys: 3.4.2 - '@uiw/codemirror-extensions-basic-setup@4.19.5(@codemirror/autocomplete@6.4.0(@codemirror/language@6.3.2)(@codemirror/state@6.2.0)(@codemirror/view@6.7.2)(@lezer/common@1.3.0))(@codemirror/commands@6.1.3)(@codemirror/language@6.3.2)(@codemirror/lint@6.4.2)(@codemirror/search@6.2.3)(@codemirror/state@6.2.0)(@codemirror/view@6.7.2)': dependencies: '@codemirror/autocomplete': 6.4.0(@codemirror/language@6.3.2)(@codemirror/state@6.2.0)(@codemirror/view@6.7.2)(@lezer/common@1.3.0) @@ -26984,8 +26555,6 @@ snapshots: dependencies: color-convert: 2.0.1 - ansi-styles@5.2.0: {} - ansi-styles@6.2.1: {} antlr4ts-cli@0.5.0-alpha.4: {} @@ -27037,10 +26606,6 @@ snapshots: dependencies: tslib: 2.8.1 - aria-query@5.3.0: - dependencies: - dequal: 2.0.3 - arktype@2.1.20: dependencies: '@ark/schema': 0.46.0 @@ -27053,26 +26618,8 @@ snapshots: array-flatten@1.1.1: {} - array-includes@3.1.8: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-object-atoms: 1.1.1 - get-intrinsic: 1.3.0 - is-string: 1.0.7 - array-union@2.1.0: {} - array.prototype.findlastindex@1.2.5: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - es-shim-unscopables: 1.0.2 - array.prototype.flat@1.3.1: dependencies: call-bind: 1.0.8 @@ -27080,28 +26627,6 @@ snapshots: es-abstract: 1.23.3 es-shim-unscopables: 1.0.2 - array.prototype.flat@1.3.2: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-shim-unscopables: 1.0.2 - - array.prototype.flatmap@1.3.2: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-shim-unscopables: 1.0.2 - - array.prototype.tosorted@1.1.1: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-shim-unscopables: 1.0.2 - get-intrinsic: 1.3.0 - arraybuffer.prototype.slice@1.0.3: dependencies: array-buffer-byte-length: 1.0.1 @@ -27129,8 +26654,6 @@ snapshots: assertion-error@2.0.1: {} - ast-types-flow@0.0.7: {} - ast-v8-to-istanbul@1.0.2: dependencies: '@jridgewell/trace-mapping': 0.3.31 @@ -27204,8 +26727,6 @@ snapshots: aws4fetch@1.0.18: {} - axe-core@4.6.2: {} - axios@1.16.1: dependencies: follow-redirects: 1.16.0 @@ -27216,10 +26737,6 @@ snapshots: - debug - supports-color - axobject-query@3.2.1: - dependencies: - dequal: 2.0.3 - b4a@1.6.6: {} bail@2.0.2: {} @@ -28253,8 +27770,6 @@ snapshots: d3: 7.9.0 lodash-es: 4.18.1 - damerau-levenshtein@1.0.8: {} - dashdash@1.14.1: dependencies: assert-plus: 1.0.0 @@ -28297,10 +27812,6 @@ snapshots: dependencies: ms: 2.0.0 - debug@3.2.7: - dependencies: - ms: 2.1.3 - debug@4.3.4: dependencies: ms: 2.1.2 @@ -28317,10 +27828,6 @@ snapshots: optionalDependencies: supports-color: 10.0.0 - debug@4.4.0: - dependencies: - ms: 2.1.3 - debug@4.4.3(supports-color@10.0.0): dependencies: ms: 2.1.3 @@ -28353,8 +27860,6 @@ snapshots: deep-extend@0.6.0: {} - deep-is@0.1.4: {} - deep-object-diff@1.1.9: {} deepmerge-ts@7.1.5: {} @@ -28380,8 +27885,6 @@ snapshots: es-errors: 1.3.0 gopd: 1.2.0 - define-lazy-prop@2.0.0: {} - define-lazy-prop@3.0.0: {} define-properties@1.1.4: @@ -28499,16 +28002,6 @@ snapshots: transitivePeerDependencies: - supports-color - doctrine@2.1.0: - dependencies: - esutils: 2.0.3 - - doctrine@3.0.0: - dependencies: - esutils: 2.0.3 - - dom-accessibility-api@0.5.15: {} - dom-helpers@5.2.1: dependencies: '@babel/runtime': 7.28.4 @@ -28540,8 +28033,6 @@ snapshots: dependencies: type-fest: 5.6.0 - dotenv@16.0.3: {} - dotenv@16.4.4: {} dotenv@16.4.5: {} @@ -28717,7 +28208,7 @@ snapshots: enhanced-resolve@5.18.3: dependencies: graceful-fs: 4.2.11 - tapable: 2.3.0 + tapable: 2.3.3 enquirer@2.3.6: dependencies: @@ -29203,275 +28694,15 @@ snapshots: escape-string-regexp@1.0.5: {} - escape-string-regexp@4.0.0: {} - escape-string-regexp@5.0.0: {} - eslint-config-prettier@8.6.0(eslint@8.31.0): - dependencies: - eslint: 8.31.0 - - eslint-import-resolver-node@0.3.7: - dependencies: - debug: 3.2.7 - is-core-module: 2.14.0 - resolve: 1.22.8 - transitivePeerDependencies: - - supports-color - - eslint-import-resolver-node@0.3.9: - dependencies: - debug: 3.2.7 - is-core-module: 2.14.0 - resolve: 1.22.8 - transitivePeerDependencies: - - supports-color - - eslint-import-resolver-typescript@3.5.5(@typescript-eslint/parser@5.59.6(eslint@8.31.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.7)(eslint-plugin-import@2.29.1)(eslint@8.31.0): - dependencies: - debug: 4.4.3(supports-color@10.0.0) - enhanced-resolve: 5.18.3 - eslint: 8.31.0 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@5.59.6(eslint@8.31.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5)(eslint@8.31.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.59.6(eslint@8.31.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.5.5)(eslint@8.31.0) - get-tsconfig: 4.7.6 - globby: 13.2.2 - is-core-module: 2.14.0 - is-glob: 4.0.3 - synckit: 0.8.5 - transitivePeerDependencies: - - '@typescript-eslint/parser' - - eslint-import-resolver-node - - eslint-import-resolver-webpack - - supports-color - - eslint-module-utils@2.8.1(@typescript-eslint/parser@5.59.6(eslint@8.31.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.5.5)(eslint@8.31.0): - dependencies: - debug: 3.2.7 - optionalDependencies: - '@typescript-eslint/parser': 5.59.6(eslint@8.31.0)(typescript@5.5.4) - eslint: 8.31.0 - eslint-import-resolver-node: 0.3.7 - eslint-import-resolver-typescript: 3.5.5(@typescript-eslint/parser@5.59.6(eslint@8.31.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.7)(eslint-plugin-import@2.29.1)(eslint@8.31.0) - transitivePeerDependencies: - - supports-color - - eslint-module-utils@2.8.1(@typescript-eslint/parser@5.59.6(eslint@8.31.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.5.5)(eslint@8.31.0): - dependencies: - debug: 3.2.7 - optionalDependencies: - '@typescript-eslint/parser': 5.59.6(eslint@8.31.0)(typescript@5.5.4) - eslint: 8.31.0 - eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.5.5(@typescript-eslint/parser@5.59.6(eslint@8.31.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.7)(eslint-plugin-import@2.29.1)(eslint@8.31.0) - transitivePeerDependencies: - - supports-color - - eslint-plugin-es@3.0.1(eslint@8.31.0): - dependencies: - eslint: 8.31.0 - eslint-utils: 2.1.0 - regexpp: 3.2.0 - - eslint-plugin-import@2.29.1(@typescript-eslint/parser@5.59.6(eslint@8.31.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.5.5)(eslint@8.31.0): - dependencies: - array-includes: 3.1.8 - array.prototype.findlastindex: 1.2.5 - array.prototype.flat: 1.3.2 - array.prototype.flatmap: 1.3.2 - debug: 3.2.7 - doctrine: 2.1.0 - eslint: 8.31.0 - eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@5.59.6(eslint@8.31.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.5.5)(eslint@8.31.0) - hasown: 2.0.2 - is-core-module: 2.14.0 - is-glob: 4.0.3 - minimatch: 3.1.5 - object.fromentries: 2.0.8 - object.groupby: 1.0.3 - object.values: 1.2.0 - semver: 6.3.1 - tsconfig-paths: 3.15.0 - optionalDependencies: - '@typescript-eslint/parser': 5.59.6(eslint@8.31.0)(typescript@5.5.4) - transitivePeerDependencies: - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - supports-color - - eslint-plugin-jest-dom@4.0.3(eslint@8.31.0): - dependencies: - '@babel/runtime': 7.28.4 - '@testing-library/dom': 8.19.1 - eslint: 8.31.0 - requireindex: 1.2.0 - - eslint-plugin-jest@26.9.0(@typescript-eslint/eslint-plugin@5.59.6(@typescript-eslint/parser@5.59.6(eslint@8.31.0)(typescript@5.5.4))(eslint@8.31.0)(typescript@5.5.4))(eslint@8.31.0)(typescript@5.5.4): - dependencies: - '@typescript-eslint/utils': 5.59.6(eslint@8.31.0)(typescript@5.5.4) - eslint: 8.31.0 - optionalDependencies: - '@typescript-eslint/eslint-plugin': 5.59.6(@typescript-eslint/parser@5.59.6(eslint@8.31.0)(typescript@5.5.4))(eslint@8.31.0)(typescript@5.5.4) - transitivePeerDependencies: - - supports-color - - typescript - - eslint-plugin-jsx-a11y@6.7.1(eslint@8.31.0): - dependencies: - '@babel/runtime': 7.28.4 - aria-query: 5.3.0 - array-includes: 3.1.8 - array.prototype.flatmap: 1.3.2 - ast-types-flow: 0.0.7 - axe-core: 4.6.2 - axobject-query: 3.2.1 - damerau-levenshtein: 1.0.8 - emoji-regex: 9.2.2 - eslint: 8.31.0 - has: 1.0.3 - jsx-ast-utils: 3.3.3 - language-tags: 1.0.5 - minimatch: 3.1.5 - object.entries: 1.1.6 - object.fromentries: 2.0.8 - semver: 6.3.1 - - eslint-plugin-node@11.1.0(eslint@8.31.0): - dependencies: - eslint: 8.31.0 - eslint-plugin-es: 3.0.1(eslint@8.31.0) - eslint-utils: 2.1.0 - ignore: 5.2.4 - minimatch: 3.1.5 - resolve: 1.22.8 - semver: 6.3.1 - - eslint-plugin-react-hooks@4.6.2(eslint@8.31.0): - dependencies: - eslint: 8.31.0 - - eslint-plugin-react@7.32.2(eslint@8.31.0): - dependencies: - array-includes: 3.1.8 - array.prototype.flatmap: 1.3.2 - array.prototype.tosorted: 1.1.1 - doctrine: 2.1.0 - eslint: 8.31.0 - estraverse: 5.3.0 - jsx-ast-utils: 3.3.3 - minimatch: 3.1.5 - object.entries: 1.1.6 - object.fromentries: 2.0.8 - object.hasown: 1.1.2 - object.values: 1.2.0 - prop-types: 15.8.1 - resolve: 2.0.0-next.4 - semver: 6.3.1 - string.prototype.matchall: 4.0.8 - - eslint-plugin-testing-library@5.11.0(eslint@8.31.0)(typescript@5.5.4): - dependencies: - '@typescript-eslint/utils': 5.59.6(eslint@8.31.0)(typescript@5.5.4) - eslint: 8.31.0 - transitivePeerDependencies: - - supports-color - - typescript - - eslint-plugin-turbo@2.0.5(eslint@8.31.0): - dependencies: - dotenv: 16.0.3 - eslint: 8.31.0 - eslint-scope@5.1.1: dependencies: esrecurse: 4.3.0 estraverse: 4.3.0 - eslint-scope@7.1.1: - dependencies: - esrecurse: 4.3.0 - estraverse: 5.3.0 - - eslint-utils@2.1.0: - dependencies: - eslint-visitor-keys: 1.3.0 - - eslint-utils@3.0.0(eslint@8.31.0): - dependencies: - eslint: 8.31.0 - eslint-visitor-keys: 2.1.0 - - eslint-visitor-keys@1.3.0: {} - - eslint-visitor-keys@2.1.0: {} - - eslint-visitor-keys@3.3.0: {} - - eslint-visitor-keys@3.4.2: {} - - eslint@8.31.0: - dependencies: - '@eslint/eslintrc': 1.4.1 - '@humanwhocodes/config-array': 0.11.8 - '@humanwhocodes/module-importer': 1.0.1 - '@nodelib/fs.walk': 1.2.8 - ajv: 6.12.6 - chalk: 4.1.2 - cross-spawn: 7.0.3 - debug: 4.3.4 - doctrine: 3.0.0 - escape-string-regexp: 4.0.0 - eslint-scope: 7.1.1 - eslint-utils: 3.0.0(eslint@8.31.0) - eslint-visitor-keys: 3.3.0 - espree: 9.4.1 - esquery: 1.4.0 - esutils: 2.0.3 - fast-deep-equal: 3.1.3 - file-entry-cache: 6.0.1 - find-up: 5.0.0 - glob-parent: 6.0.2 - globals: 13.19.0 - grapheme-splitter: 1.0.4 - ignore: 5.2.4 - import-fresh: 3.3.0 - imurmurhash: 0.1.4 - is-glob: 4.0.3 - is-path-inside: 3.0.3 - js-sdsl: 4.2.0 - js-yaml: 4.1.1 - json-stable-stringify-without-jsonify: 1.0.1 - levn: 0.4.1 - lodash.merge: 4.6.2 - minimatch: 3.1.5 - natural-compare: 1.4.0 - optionator: 0.9.1 - regexpp: 3.2.0 - strip-ansi: 6.0.1 - strip-json-comments: 3.1.1 - text-table: 0.2.0 - transitivePeerDependencies: - - supports-color - - espree@9.4.1: - dependencies: - acorn: 8.16.0 - acorn-jsx: 5.3.2(acorn@8.16.0) - eslint-visitor-keys: 3.4.2 - - espree@9.6.0: - dependencies: - acorn: 8.16.0 - acorn-jsx: 5.3.2(acorn@8.16.0) - eslint-visitor-keys: 3.4.2 - esprima@4.0.1: {} - esquery@1.4.0: - dependencies: - estraverse: 5.3.0 - esrecurse@4.3.0: dependencies: estraverse: 5.3.0 @@ -29515,8 +28746,6 @@ snapshots: dependencies: '@types/estree': 1.0.8 - esutils@2.0.3: {} - etag@1.8.1: {} eval@0.1.6: @@ -29788,8 +29017,6 @@ snapshots: json-schema-ref-resolver: 2.0.1 rfdc: 1.4.1 - fast-levenshtein@2.0.6: {} - fast-npm-meta@0.2.2: {} fast-querystring@1.1.2: @@ -29882,10 +29109,6 @@ snapshots: dependencies: is-unicode-supported: 2.1.0 - file-entry-cache@6.0.1: - dependencies: - flat-cache: 3.0.4 - file-type@19.6.0: dependencies: get-stream: 9.0.1 @@ -29950,13 +29173,6 @@ snapshots: micromatch: 4.0.8 pkg-dir: 4.2.0 - flat-cache@3.0.4: - dependencies: - flatted: 3.4.2 - rimraf: 3.0.2 - - flatted@3.4.2: {} - follow-redirects@1.16.0: {} for-each@0.3.3: @@ -30229,18 +29445,12 @@ snapshots: globals@11.12.0: {} - globals@13.19.0: - dependencies: - type-fest: 0.20.2 - globals@15.15.0: {} globalthis@1.0.3: dependencies: define-properties: 1.2.1 - globalyzer@0.1.0: {} - globby@11.1.0: dependencies: array-union: 2.1.0 @@ -30767,8 +29977,6 @@ snapshots: is-deflate@1.0.0: {} - is-docker@2.2.1: {} - is-docker@3.0.0: {} is-electron@2.2.2: {} @@ -30807,8 +30015,6 @@ snapshots: is-number@7.0.0: {} - is-path-inside@3.0.3: {} - is-plain-obj@1.1.0: {} is-plain-obj@3.0.0: {} @@ -30870,10 +30076,6 @@ snapshots: is-windows@1.0.2: {} - is-wsl@2.2.0: - dependencies: - is-docker: 2.2.1 - is-wsl@3.1.0: dependencies: is-inside-container: 1.0.0 @@ -30966,8 +30168,6 @@ snapshots: js-levenshtein@1.1.6: {} - js-sdsl@4.2.0: {} - js-tokens@10.0.0: {} js-tokens@4.0.0: {} @@ -31011,8 +30211,6 @@ snapshots: json-schema@0.4.0: {} - json-stable-stringify-without-jsonify@1.0.1: {} - json-stable-stringify@1.3.0: dependencies: call-bind: 1.0.8 @@ -31073,11 +30271,6 @@ snapshots: json-schema: 0.4.0 verror: 1.10.0 - jsx-ast-utils@3.3.3: - dependencies: - array-includes: 3.1.8 - object.assign: 4.1.5 - junk@4.0.1: {} jwa@1.4.2: @@ -31120,12 +30313,6 @@ snapshots: vscode-languageserver-textdocument: 1.0.12 vscode-uri: 3.1.0 - language-subtag-registry@0.3.22: {} - - language-tags@1.0.5: - dependencies: - language-subtag-registry: 0.3.22 - layerr@2.0.1: {} layout-base@1.0.2: {} @@ -31181,11 +30368,6 @@ snapshots: lefthook-windows-arm64: 1.11.3 lefthook-windows-x64: 1.11.3 - levn@0.4.1: - dependencies: - prelude-ls: 1.2.1 - type-check: 0.4.0 - light-my-request@6.6.0: dependencies: cookie: 1.0.2 @@ -31379,8 +30561,6 @@ snapshots: luxon@3.2.1: {} - lz-string@1.4.4: {} - magic-string@0.30.21: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 @@ -32410,10 +31590,6 @@ snapshots: napi-build-utils@2.0.0: optional: true - natural-compare-lite@1.4.0: {} - - natural-compare@1.4.0: {} - nearley@2.20.1: dependencies: commander: 2.20.3 @@ -32612,36 +31788,6 @@ snapshots: has-symbols: 1.1.0 object-keys: 1.1.1 - object.entries@1.1.6: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.23.3 - - object.fromentries@2.0.8: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-object-atoms: 1.1.1 - - object.groupby@1.0.3: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.23.3 - - object.hasown@1.1.2: - dependencies: - define-properties: 1.2.1 - es-abstract: 1.23.3 - - object.values@1.2.0: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-object-atoms: 1.1.1 - obuf@1.1.2: {} obug@2.1.1: {} @@ -32708,12 +31854,6 @@ snapshots: is-inside-container: 1.0.0 is-wsl: 3.1.0 - open@8.4.0: - dependencies: - define-lazy-prop: 2.0.0 - is-docker: 2.2.1 - is-wsl: 2.2.0 - openai@4.33.1(encoding@0.1.13): dependencies: '@types/node': 20.14.14 @@ -32755,15 +31895,6 @@ snapshots: jose: 6.0.8 oauth4webapi: 3.3.0 - optionator@0.9.1: - dependencies: - deep-is: 0.1.4 - fast-levenshtein: 2.0.6 - levn: 0.4.1 - prelude-ls: 1.2.1 - type-check: 0.4.0 - word-wrap: 1.2.3 - ora@5.4.1: dependencies: bl: 4.1.0 @@ -32784,6 +31915,52 @@ snapshots: outdent@0.8.0: {} + oxfmt@0.54.0: + dependencies: + tinypool: 2.1.0 + optionalDependencies: + '@oxfmt/binding-android-arm-eabi': 0.54.0 + '@oxfmt/binding-android-arm64': 0.54.0 + '@oxfmt/binding-darwin-arm64': 0.54.0 + '@oxfmt/binding-darwin-x64': 0.54.0 + '@oxfmt/binding-freebsd-x64': 0.54.0 + '@oxfmt/binding-linux-arm-gnueabihf': 0.54.0 + '@oxfmt/binding-linux-arm-musleabihf': 0.54.0 + '@oxfmt/binding-linux-arm64-gnu': 0.54.0 + '@oxfmt/binding-linux-arm64-musl': 0.54.0 + '@oxfmt/binding-linux-ppc64-gnu': 0.54.0 + '@oxfmt/binding-linux-riscv64-gnu': 0.54.0 + '@oxfmt/binding-linux-riscv64-musl': 0.54.0 + '@oxfmt/binding-linux-s390x-gnu': 0.54.0 + '@oxfmt/binding-linux-x64-gnu': 0.54.0 + '@oxfmt/binding-linux-x64-musl': 0.54.0 + '@oxfmt/binding-openharmony-arm64': 0.54.0 + '@oxfmt/binding-win32-arm64-msvc': 0.54.0 + '@oxfmt/binding-win32-ia32-msvc': 0.54.0 + '@oxfmt/binding-win32-x64-msvc': 0.54.0 + + oxlint@1.70.0: + optionalDependencies: + '@oxlint/binding-android-arm-eabi': 1.70.0 + '@oxlint/binding-android-arm64': 1.70.0 + '@oxlint/binding-darwin-arm64': 1.70.0 + '@oxlint/binding-darwin-x64': 1.70.0 + '@oxlint/binding-freebsd-x64': 1.70.0 + '@oxlint/binding-linux-arm-gnueabihf': 1.70.0 + '@oxlint/binding-linux-arm-musleabihf': 1.70.0 + '@oxlint/binding-linux-arm64-gnu': 1.70.0 + '@oxlint/binding-linux-arm64-musl': 1.70.0 + '@oxlint/binding-linux-ppc64-gnu': 1.70.0 + '@oxlint/binding-linux-riscv64-gnu': 1.70.0 + '@oxlint/binding-linux-riscv64-musl': 1.70.0 + '@oxlint/binding-linux-s390x-gnu': 1.70.0 + '@oxlint/binding-linux-x64-gnu': 1.70.0 + '@oxlint/binding-linux-x64-musl': 1.70.0 + '@oxlint/binding-openharmony-arm64': 1.70.0 + '@oxlint/binding-win32-arm64-msvc': 1.70.0 + '@oxlint/binding-win32-ia32-msvc': 1.70.0 + '@oxlint/binding-win32-x64-msvc': 1.70.0 + p-cancelable@1.1.0: {} p-event@5.0.1: @@ -33367,8 +32544,6 @@ snapshots: path-exists: 4.0.0 which-pm: 2.0.0 - prelude-ls@1.2.1: {} - prepend-http@2.0.0: {} prettier-plugin-tailwindcss@0.3.0(prettier@2.8.8): @@ -33381,12 +32556,6 @@ snapshots: prettier@3.8.3: {} - pretty-format@27.5.1: - dependencies: - ansi-regex: 5.0.1 - ansi-styles: 5.2.0 - react-is: 17.0.2 - pretty-hrtime@1.0.3: {} pretty-ms@7.0.1: @@ -33731,8 +32900,6 @@ snapshots: react-is@16.13.1: {} - react-is@17.0.2: {} - react-is@18.3.1: {} react-markdown@10.1.0(@types/react@18.2.69)(react@18.3.1): @@ -34036,8 +33203,6 @@ snapshots: es-errors: 1.3.0 set-function-name: 2.0.2 - regexpp@3.2.0: {} - registry-auth-token@4.2.2: dependencies: rc: 1.2.8 @@ -34245,8 +33410,6 @@ snapshots: require-main-filename@2.0.0: {} - requireindex@1.2.0: {} - resend@3.2.0: dependencies: '@react-email/render': 0.0.12 @@ -34272,12 +33435,6 @@ snapshots: path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - resolve@2.0.0-next.4: - dependencies: - is-core-module: 2.14.0 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - responselike@1.0.2: dependencies: lowercase-keys: 1.0.1 @@ -34301,10 +33458,6 @@ snapshots: rfdc@1.4.1: {} - rimraf@3.0.2: - dependencies: - glob: 7.2.3 - rimraf@6.0.1: dependencies: glob: 11.1.0 @@ -34945,17 +34098,6 @@ snapshots: emoji-regex: 9.2.2 strip-ansi: 7.1.0 - string.prototype.matchall@4.0.8: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.23.3 - get-intrinsic: 1.3.0 - has-symbols: 1.1.0 - internal-slot: 1.0.7 - regexp.prototype.flags: 1.5.2 - side-channel: 1.1.0 - string.prototype.padend@3.1.4: dependencies: call-bind: 1.0.7 @@ -35028,8 +34170,6 @@ snapshots: strip-json-comments@2.0.1: {} - strip-json-comments@3.1.1: {} - strnum@1.0.5: {} strnum@2.2.3: {} @@ -35143,11 +34283,6 @@ snapshots: rimraf: 6.0.1 tshy: 3.0.2 - synckit@0.8.5: - dependencies: - '@pkgr/utils': 2.3.1 - tslib: 2.8.1 - systeminformation@5.31.7: {} table@6.9.0: @@ -35232,8 +34367,6 @@ snapshots: tailwindcss@4.3.0: {} - tapable@2.3.0: {} - tapable@2.3.3: {} tar-fs@2.1.3: @@ -35353,8 +34486,6 @@ snapshots: dependencies: b4a: 1.6.6 - text-table@0.2.0: {} - thenify-all@1.6.0: dependencies: thenify: 3.3.1 @@ -35378,11 +34509,6 @@ snapshots: tiny-case@1.0.3: {} - tiny-glob@0.2.9: - dependencies: - globalyzer: 0.1.0 - globrex: 0.1.2 - tiny-invariant@1.3.1: {} tinybench@2.9.0: {} @@ -35422,6 +34548,8 @@ snapshots: '@types/tinycolor2': 1.4.3 tinycolor2: 1.6.0 + tinypool@2.1.0: {} + tinyrainbow@3.1.0: {} tldts-core@7.0.7: {} @@ -35529,13 +34657,6 @@ snapshots: minimist: 1.2.7 strip-bom: 3.0.0 - tsconfig-paths@3.15.0: - dependencies: - '@types/json5': 0.0.29 - json5: 1.0.2 - minimist: 1.2.7 - strip-bom: 3.0.0 - tsconfig-paths@4.2.0: dependencies: json5: 2.2.3 @@ -35622,11 +34743,6 @@ snapshots: - tsx - yaml - tsutils@3.21.0(typescript@5.5.4): - dependencies: - tslib: 1.14.1 - typescript: 5.5.4 - tsx@3.12.2: dependencies: '@esbuild-kit/cjs-loader': 2.4.1 @@ -35707,14 +34823,8 @@ snapshots: tweetnacl@0.14.5: {} - type-check@0.4.0: - dependencies: - prelude-ls: 1.2.1 - type-fest@0.13.1: {} - type-fest@0.20.2: {} - type-fest@0.6.0: {} type-fest@0.8.1: {} @@ -36408,8 +35518,6 @@ snapshots: siginfo: 2.0.0 stackback: 0.0.2 - word-wrap@1.2.3: {} - wrap-ansi@6.2.0: dependencies: ansi-styles: 4.3.0 diff --git a/prettier.config.js b/prettier.config.js deleted file mode 100644 index 68de2fe5c9c..00000000000 --- a/prettier.config.js +++ /dev/null @@ -1,11 +0,0 @@ -module.exports = { - semi: true, - singleQuote: false, - jsxSingleQuote: false, - trailingComma: "es5", - bracketSpacing: true, - bracketSameLine: false, - printWidth: 100, - tabWidth: 2, - useTabs: false, -}; diff --git a/turbo.json b/turbo.json index 8f2c862d030..c820d115376 100644 --- a/turbo.json +++ b/turbo.json @@ -2,32 +2,16 @@ "$schema": "https://turborepo.org/schema.json", "pipeline": { "build": { - "dependsOn": [ - "^build" - ], - "outputs": [ - "dist/**", - "public/build/**", - "build/**", - "app/styles/tailwind.css", - ".cache" - ] + "dependsOn": ["^build"], + "outputs": ["dist/**", "public/build/**", "build/**", "app/styles/tailwind.css", ".cache"] }, "webapp#start": { - "dependsOn": [ - "^build" - ], - "outputs": [ - "public/build/**" - ] + "dependsOn": ["^build"], + "outputs": ["public/build/**"] }, "start": { - "dependsOn": [ - "^build" - ], - "outputs": [ - "public/build/**" - ] + "dependsOn": ["^build"], + "outputs": ["public/build/**"] }, "db:generate": { "cache": false @@ -37,9 +21,7 @@ }, "webapp#db:seed": { "cache": false, - "dependsOn": [ - "webapp#build" - ] + "dependsOn": ["webapp#build"] }, "db:studio": { "cache": false @@ -49,29 +31,20 @@ }, "dev": { "cache": false, - "dependsOn": [ - "^build" - ] + "dependsOn": ["^build"] }, "i:dev": { "cache": false }, "generate": { - "dependsOn": [ - "^generate" - ] - }, - "lint": { - "outputs": [] + "dependsOn": ["^generate"] }, "docker:build": { "outputs": [], "cache": false }, "test": { - "dependsOn": [ - "^build" - ], + "dependsOn": ["^build"], "outputs": [] }, "test:dev": { @@ -79,28 +52,20 @@ "cache": false }, "test:e2e:dev": { - "dependsOn": [ - "^build" - ], + "dependsOn": ["^build"], "outputs": [], "cache": false }, "test:e2e:ci": { - "dependsOn": [ - "^build" - ], + "dependsOn": ["^build"], "outputs": [] }, "typecheck": { - "dependsOn": [ - "^build" - ], + "dependsOn": ["^build"], "outputs": [] }, "check-exports": { - "dependsOn": [ - "^build" - ], + "dependsOn": ["^build"], "outputs": [] }, "clean": { @@ -113,9 +78,7 @@ "cache": false } }, - "globalDependencies": [ - ".env" - ], + "globalDependencies": [".env"], "globalEnv": [ "NODE_ENV", "REMIX_APP_PORT", @@ -139,4 +102,4 @@ "APP_ENV", "APP_LOG_LEVEL" ] -} \ No newline at end of file +} From c785779b7d8e1fee167b065d797773e6af854701 Mon Sep 17 00:00:00 2001 From: Chris Arderne Date: Wed, 17 Jun 2026 14:33:43 +0100 Subject: [PATCH 2/9] ignore rules-of-hooks --- .oxlintrc.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.oxlintrc.json b/.oxlintrc.json index 463fa955515..f028e901d34 100644 --- a/.oxlintrc.json +++ b/.oxlintrc.json @@ -19,6 +19,9 @@ } ], "import/no-duplicates": ["warn", { "prefer-inline": true }], - "react-hooks/rules-of-hooks": "error" + // Disabled for now: oxlint treats any use*()/use() call as a React hook, + // producing false positives in async/test code (testcontainers, cli-v3 e2e). + // Re-enable (ideally scoped to React packages) once those are addressed. + "react-hooks/rules-of-hooks": "off" } } From 92682d3149e66deccd74218a911291c75c4927d2 Mon Sep 17 00:00:00 2001 From: Chris Arderne Date: Wed, 17 Jun 2026 14:33:53 +0100 Subject: [PATCH 3/9] make actionlint happy --- .github/workflows/code-quality.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/code-quality.yml b/.github/workflows/code-quality.yml index 23ad4f79505..4b44dea9541 100644 --- a/.github/workflows/code-quality.yml +++ b/.github/workflows/code-quality.yml @@ -60,7 +60,7 @@ jobs: FILES: ${{ steps.changes.outputs.files }} # Unquoted $FILES intentionally word-splits the newline-separated list # into separate path args. Safe given the has_files guard above. - run: pnpm exec oxfmt --check $FILES + run: "pnpm exec oxfmt --check $FILES" # TODO update this so lint failures fail CI # Informational only — lint findings are surfaced in the logs but never @@ -70,4 +70,4 @@ jobs: continue-on-error: true env: FILES: ${{ steps.changes.outputs.files }} - run: pnpm exec oxlint $FILES + run: "pnpm exec oxlint $FILES" From 31bc39e9eebbca50781edea40f0ab8657dfb89b3 Mon Sep 17 00:00:00 2001 From: Chris Arderne Date: Wed, 17 Jun 2026 14:58:01 +0100 Subject: [PATCH 4/9] enforce checks in ci --- .github/workflows/code-quality.yml | 41 +++--------------------------- 1 file changed, 3 insertions(+), 38 deletions(-) diff --git a/.github/workflows/code-quality.yml b/.github/workflows/code-quality.yml index 4b44dea9541..6fd2f73b4ab 100644 --- a/.github/workflows/code-quality.yml +++ b/.github/workflows/code-quality.yml @@ -31,43 +31,8 @@ jobs: - name: šŸ“„ Download deps run: pnpm install --frozen-lockfile - # Gate only on files this PR adds/modifies (ratchet) — the repo is not - # fully formatted/linted yet, so a whole-repo check would fail every PR. - - name: šŸ” Determine changed files - id: changes - env: - BASE_SHA: ${{ github.event.pull_request.base.sha }} - run: | - FILES=$(git diff --name-only --diff-filter=ACMR "$BASE_SHA"...HEAD -- \ - '*.ts' '*.tsx' '*.js' '*.jsx' '*.mjs' '*.cjs') - echo "Changed code files:" - echo "${FILES:-}" - { - echo "files<> "$GITHUB_OUTPUT" - if [ -z "$FILES" ]; then - echo "has_files=false" >> "$GITHUB_OUTPUT" - else - echo "has_files=true" >> "$GITHUB_OUTPUT" - fi - - # TODO enable format check for ALL code - name: šŸ’… Check formatting - if: steps.changes.outputs.has_files == 'true' - env: - FILES: ${{ steps.changes.outputs.files }} - # Unquoted $FILES intentionally word-splits the newline-separated list - # into separate path args. Safe given the has_files guard above. - run: "pnpm exec oxfmt --check $FILES" + run: pnpm exec oxfmt --check . - # TODO update this so lint failures fail CI - # Informational only — lint findings are surfaced in the logs but never - # fail the job. Only the formatting check above blocks the PR. - - name: šŸ”Ž Lint (informational, non-blocking) - if: steps.changes.outputs.has_files == 'true' - continue-on-error: true - env: - FILES: ${{ steps.changes.outputs.files }} - run: "pnpm exec oxlint $FILES" + - name: šŸ”Ž Lint + run: pnpm exec oxlint . From 1f644870a819cea8674252f4d8754b89dcb747b4 Mon Sep 17 00:00:00 2001 From: Chris Arderne Date: Wed, 17 Jun 2026 15:11:31 +0100 Subject: [PATCH 5/9] remove prettier --- apps/webapp/package.json | 2 - package.json | 1 - pnpm-lock.yaml | 72 --------------------- scripts/upgrade-package.mjs | 123 ------------------------------------ 4 files changed, 198 deletions(-) delete mode 100644 scripts/upgrade-package.mjs diff --git a/apps/webapp/package.json b/apps/webapp/package.json index 799e966570b..caa9b6262bf 100644 --- a/apps/webapp/package.json +++ b/apps/webapp/package.json @@ -283,8 +283,6 @@ "npm-run-all": "^4.1.5", "postcss-import": "^16.0.1", "postcss-loader": "^8.1.1", - "prettier": "^2.8.8", - "prettier-plugin-tailwindcss": "^0.3.0", "prop-types": "^15.8.1", "rimraf": "^6.0.1", "style-loader": "^3.3.4", diff --git a/package.json b/package.json index 754d217dd8c..f535f51bf69 100644 --- a/package.json +++ b/package.json @@ -64,7 +64,6 @@ "oxlint": "^1.69.0", "pkg-pr-new": "0.0.75", "pkg-types": "1.1.3", - "prettier": "^3.0.0", "tsx": "^3.7.1", "turbo": "^1.10.3", "typescript": "5.5.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1a155420d23..ba63ac6cd3b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -133,9 +133,6 @@ importers: pkg-types: specifier: 1.1.3 version: 1.1.3 - prettier: - specifier: ^3.0.0 - version: 3.0.0 tsx: specifier: ^3.7.1 version: 3.12.2 @@ -1044,12 +1041,6 @@ importers: postcss-loader: specifier: ^8.1.1 version: 8.1.1(postcss@8.5.10)(typescript@5.5.4)(webpack@5.102.1(@swc/core@1.3.26)(esbuild@0.15.18)) - prettier: - specifier: ^2.8.8 - version: 2.8.8 - prettier-plugin-tailwindcss: - specifier: ^0.3.0 - version: 0.3.0(prettier@2.8.8) prop-types: specifier: ^15.8.1 version: 15.8.1 @@ -14611,68 +14602,11 @@ packages: resolution: {integrity: sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==} engines: {node: '>=4'} - prettier-plugin-tailwindcss@0.3.0: - resolution: {integrity: sha512-009/Xqdy7UmkcTBpwlq7jsViDqXAYSOMLDrHAdTMlVZOrKfM2o9Ci7EMWTMZ7SkKBFTG04UM9F9iM2+4i6boDA==} - engines: {node: '>=12.17.0'} - peerDependencies: - '@ianvs/prettier-plugin-sort-imports': '*' - '@prettier/plugin-pug': '*' - '@shopify/prettier-plugin-liquid': '*' - '@shufo/prettier-plugin-blade': '*' - '@trivago/prettier-plugin-sort-imports': '*' - prettier: '>=2.2.0' - prettier-plugin-astro: '*' - prettier-plugin-css-order: '*' - prettier-plugin-import-sort: '*' - prettier-plugin-jsdoc: '*' - prettier-plugin-marko: '*' - prettier-plugin-organize-attributes: '*' - prettier-plugin-organize-imports: '*' - prettier-plugin-style-order: '*' - prettier-plugin-svelte: '*' - prettier-plugin-twig-melody: '*' - peerDependenciesMeta: - '@ianvs/prettier-plugin-sort-imports': - optional: true - '@prettier/plugin-pug': - optional: true - '@shopify/prettier-plugin-liquid': - optional: true - '@shufo/prettier-plugin-blade': - optional: true - '@trivago/prettier-plugin-sort-imports': - optional: true - prettier-plugin-astro: - optional: true - prettier-plugin-css-order: - optional: true - prettier-plugin-import-sort: - optional: true - prettier-plugin-jsdoc: - optional: true - prettier-plugin-marko: - optional: true - prettier-plugin-organize-attributes: - optional: true - prettier-plugin-organize-imports: - optional: true - prettier-plugin-style-order: - optional: true - prettier-plugin-svelte: - optional: true - prettier-plugin-twig-melody: - optional: true - prettier@2.8.8: resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} engines: {node: '>=10.13.0'} hasBin: true - prettier@3.0.0: - resolution: {integrity: sha512-zBf5eHpwHOGPC47h0zrPyNn+eAEIdEzfywMoYn2XPi0P44Zp0tSq64rq0xAREh4auw2cJZHo9QUob+NqCQky4g==} - engines: {node: '>=14'} - hasBin: true - prettier@3.8.3: resolution: {integrity: sha512-7igPTM53cGHMW8xWuVTydi2KO233VFiTNyF5hLJqpilHfmn8C8gPf+PS7dUT64YcXFbiMGZxS9pCSxL/Dxm/Jw==} engines: {node: '>=14'} @@ -32546,14 +32480,8 @@ snapshots: prepend-http@2.0.0: {} - prettier-plugin-tailwindcss@0.3.0(prettier@2.8.8): - dependencies: - prettier: 2.8.8 - prettier@2.8.8: {} - prettier@3.0.0: {} - prettier@3.8.3: {} pretty-hrtime@1.0.3: {} diff --git a/scripts/upgrade-package.mjs b/scripts/upgrade-package.mjs deleted file mode 100644 index c1245cf9f7c..00000000000 --- a/scripts/upgrade-package.mjs +++ /dev/null @@ -1,123 +0,0 @@ -import { promises as fs } from "fs"; -import { join } from "path"; -import { exec } from "child_process"; -import prettier from "prettier"; - -import prettierConfig from "../prettier.config.js"; - -async function runShellCommand(command, directory) { - return new Promise((resolve, reject) => { - exec(command, { cwd: directory }, (error, stdout, stderr) => { - if (error) { - console.error(`Error: ${error.message}`); - reject(error); - return; - } - if (stderr) { - console.error(`Stderr: ${stderr}`); - reject(stderr); - return; - } - console.log(`Stdout: ${stdout}`); - resolve(stdout); - }); - }); -} - -async function updatePackage(directory) { - // Updating package.json - const packageJsonPath = join(directory, "package.json"); - const packageJson = JSON.parse(await fs.readFile(packageJsonPath, "utf8")); - - // Updating dependencies - packageJson.devDependencies = packageJson.devDependencies || {}; - packageJson.devDependencies["@trigger.dev/tsup"] = "workspace:*"; - packageJson.devDependencies["tsup"] = "8.0.1"; - packageJson.devDependencies["typescript"] = "^5.3.0"; - - // Updating exports, main, types, and module - packageJson.exports = { - ".": { - import: { - types: "./dist/index.d.mts", - default: "./dist/index.mjs", - }, - require: "./dist/index.js", - types: "./dist/index.d.ts", - }, - "./package.json": "./package.json", - }; - packageJson.main = "./dist/index.js"; - packageJson.types = "./dist/index.d.ts"; - packageJson.module = "./dist/index.mjs"; - packageJson.files = ["dist"]; - - await fs.writeFile( - packageJsonPath, - await prettier.format(JSON.stringify(packageJson, null, 2), { - parser: "json", - ...prettierConfig, - }) - ); - - console.log(`āœ… Updated package.json for ${packageJson.name}`); - - // Updating tsconfig.json - const tsconfigPath = join(directory, "tsconfig.json"); - const tsconfig = JSON.parse(await fs.readFile(tsconfigPath, "utf8")); - - if (tsconfig.extends === "@trigger.dev/tsconfig/integration.json") { - console.log( - `āœ… tsconfig.json for ${packageJson.name} already extends @trigger.dev/tsconfig/integration.json` - ); - } else { - tsconfig.compilerOptions = tsconfig.compilerOptions || {}; - tsconfig.compilerOptions.paths = { - ...tsconfig.compilerOptions.paths, - "@trigger.dev/tsup/*": ["../../config-packages/tsup/src/*"], - "@trigger.dev/tsup": ["../../config-packages/tsup/src/index"], - }; - - await fs.writeFile( - tsconfigPath, - await prettier.format(JSON.stringify(tsconfig, null, 2), { - parser: "json", - ...prettierConfig, - }) - ); - - console.log(`āœ… Updated tsconfig.json for ${packageJson.name}`); - } - - // Updating tsup.config.ts - const tsupConfigPath = join(directory, "tsup.config.ts"); - const tsupConfigContent = `import { defineConfigPackage } from "@trigger.dev/tsup";\n\nexport default defineConfigPackage;`; - await fs.writeFile( - tsupConfigPath, - await prettier.format(tsupConfigContent, { parser: "typescript", ...prettierConfig }) - ); - - console.log(`āœ… Updated tsup.config.ts for ${packageJson.name}`); - - console.log(`āœ… Updated package ${packageJson.name}, now running pnpm install and build`); - - await runShellCommand("pnpm install", process.cwd()); - await runShellCommand(`pnpm run build --filter ${packageJson.name}`, process.cwd()); -} - -async function main() { - const packagePath = process.argv[2]; - - if (!packagePath) { - throw new Error("Missing package path"); - } - - console.log(`Updating package ${packagePath}`); - - await updatePackage(packagePath); -} - -main().catch((error) => { - console.error(error); - process.exit(1); -}); From 8bf1e429e5dc00c195084808a4a228a2f24eb8f3 Mon Sep 17 00:00:00 2001 From: Chris Arderne Date: Wed, 17 Jun 2026 16:48:42 +0100 Subject: [PATCH 6/9] remove lefthook --- package.json | 2 - pnpm-lock.yaml | 100 ------------------------------------------------- 2 files changed, 102 deletions(-) diff --git a/package.json b/package.json index f535f51bf69..6bd4e3a5569 100644 --- a/package.json +++ b/package.json @@ -59,7 +59,6 @@ "@types/node": "20.14.14", "@vitest/coverage-v8": "4.1.7", "autoprefixer": "^10.4.12", - "lefthook": "^1.11.3", "oxfmt": "^0.54.0", "oxlint": "^1.69.0", "pkg-pr-new": "0.0.75", @@ -145,7 +144,6 @@ "better-sqlite3", "cpu-features", "esbuild", - "lefthook", "prisma", "protobufjs", "sharp", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ba63ac6cd3b..b57be04f94b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -118,9 +118,6 @@ importers: autoprefixer: specifier: ^10.4.12 version: 10.4.13(postcss@8.5.10) - lefthook: - specifier: ^1.11.3 - version: 1.11.3 oxfmt: specifier: ^0.54.0 version: 0.54.0 @@ -12725,60 +12722,6 @@ packages: leac@0.6.0: resolution: {integrity: sha512-y+SqErxb8h7nE/fiEX07jsbuhrpO9lL8eca7/Y1nuWV2moNlXhyd59iDGcRf6moVyDMbmTNzL40SUyrFU/yDpg==} - lefthook-darwin-arm64@1.11.3: - resolution: {integrity: sha512-IYzAOf8Qwqk7q+LoRyy7kSk9vzpUZ5wb/vLzEAH/F86Vay9AUaWe1f2pzeLwFg18qEc1QNklT69h9p/uLQMojA==} - cpu: [arm64] - os: [darwin] - - lefthook-darwin-x64@1.11.3: - resolution: {integrity: sha512-z/Wp7UMjE1Vyl+x9sjN3NvN6qKdwgHl+cDf98MKKDg/WyPE5XnzqLm9rLLJgImjyClfH7ptTfZxEyhTG3M3XvQ==} - cpu: [x64] - os: [darwin] - - lefthook-freebsd-arm64@1.11.3: - resolution: {integrity: sha512-QevwQ7lrv5wBCkk7LLTzT5KR3Bk/5nttSxT1UH2o0EsgirS/c2K5xSgQmV6m3CiZYuCe2Pja4BSIwN3zt17SMw==} - cpu: [arm64] - os: [freebsd] - - lefthook-freebsd-x64@1.11.3: - resolution: {integrity: sha512-PYbcyNgdJJ4J2pEO9Ss4oYo5yq4vmQGTKm3RTYbRx4viSWR65hvKCP0C4LnIqspMvmR05SJi2bqe7UBP2t60EA==} - cpu: [x64] - os: [freebsd] - - lefthook-linux-arm64@1.11.3: - resolution: {integrity: sha512-0pBMBAoafOAEg345eOPozsmRjWR0zCr6k+m5ZxwRBZbZx1bQFDqBakQ3TpFCphhcykmgFyaa1KeZJZUOrEsezA==} - cpu: [arm64] - os: [linux] - - lefthook-linux-x64@1.11.3: - resolution: {integrity: sha512-eiezheZ/bisBCMB2Ur0mctug/RDFyu39B5wzoE8y4z0W1yw6jHGrWMJ4Y8+5qKZ7fmdZg+7YPuMHZ2eFxOnhQA==} - cpu: [x64] - os: [linux] - - lefthook-openbsd-arm64@1.11.3: - resolution: {integrity: sha512-DRLTzXdtCj/TizpLcGSqXcnrqvgxeXgn/6nqzclIGqNdKCsNXDzpI0D3sP13Vwwmyoqv2etoTak2IHqZiXZDqg==} - cpu: [arm64] - os: [openbsd] - - lefthook-openbsd-x64@1.11.3: - resolution: {integrity: sha512-l7om+ZjWpYrVZyDuElwnucZhEqa7YfwlRaKBenkBxEh2zMje8O6Zodeuma1KmyDbSFvnvEjARo/Ejiot4gLXEw==} - cpu: [x64] - os: [openbsd] - - lefthook-windows-arm64@1.11.3: - resolution: {integrity: sha512-X0iTrql2gfPAkU2dzRwuHWgW5RcqCPbzJtKQ41X6Y/F7iQacRknmuYUGyC81funSvzGAsvlusMVLUvaFjIKnbA==} - cpu: [arm64] - os: [win32] - - lefthook-windows-x64@1.11.3: - resolution: {integrity: sha512-F+ORMn6YJXoS0EXU5LtN1FgV4QX9rC9LucZEkRmK6sKmS7hcb9IHpyb7siRGytArYzJvXVjPbxPBNSBdN4egZQ==} - cpu: [x64] - os: [win32] - - lefthook@1.11.3: - resolution: {integrity: sha512-HJp37y62j3j8qzAOODWuUJl4ysLwsDvCTBV6odr3jIRHR/a5e+tI14VQGIBcpK9ysqC3pGWyW5Rp9Jv1YDubyw==} - hasBin: true - light-my-request@6.6.0: resolution: {integrity: sha512-CHYbu8RtboSIoVsHZ6Ye4cj4Aw/yg2oAFimlF7mNvfDV192LR7nDiKtSIfCuLT7KokPSTn/9kfVLm5OGN0A28A==} @@ -30259,49 +30202,6 @@ snapshots: leac@0.6.0: {} - lefthook-darwin-arm64@1.11.3: - optional: true - - lefthook-darwin-x64@1.11.3: - optional: true - - lefthook-freebsd-arm64@1.11.3: - optional: true - - lefthook-freebsd-x64@1.11.3: - optional: true - - lefthook-linux-arm64@1.11.3: - optional: true - - lefthook-linux-x64@1.11.3: - optional: true - - lefthook-openbsd-arm64@1.11.3: - optional: true - - lefthook-openbsd-x64@1.11.3: - optional: true - - lefthook-windows-arm64@1.11.3: - optional: true - - lefthook-windows-x64@1.11.3: - optional: true - - lefthook@1.11.3: - optionalDependencies: - lefthook-darwin-arm64: 1.11.3 - lefthook-darwin-x64: 1.11.3 - lefthook-freebsd-arm64: 1.11.3 - lefthook-freebsd-x64: 1.11.3 - lefthook-linux-arm64: 1.11.3 - lefthook-linux-x64: 1.11.3 - lefthook-openbsd-arm64: 1.11.3 - lefthook-openbsd-x64: 1.11.3 - lefthook-windows-arm64: 1.11.3 - lefthook-windows-x64: 1.11.3 - light-my-request@6.6.0: dependencies: cookie: 1.0.2 From bdf1045a154d1ce72b93adbfce85cf85ea32f65e Mon Sep 17 00:00:00 2001 From: Chris Arderne Date: Wed, 17 Jun 2026 18:06:00 +0100 Subject: [PATCH 7/9] ignore generated antlr files --- .oxfmtrc.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.oxfmtrc.json b/.oxfmtrc.json index 90f19a65790..bb43c7c3ac4 100644 --- a/.oxfmtrc.json +++ b/.oxfmtrc.json @@ -21,5 +21,7 @@ "**/storybook-static/", "**/.changeset/", "**/dist/", + "**/*.yaml", + "internal-packages/tsql/src/grammar/" ] } From 0cb9877468a6d14f3c9a03c683f477c655d8871f Mon Sep 17 00:00:00 2001 From: Chris Arderne Date: Thu, 25 Jun 2026 14:43:01 +0100 Subject: [PATCH 8/9] update configs --- .oxfmtrc.json | 5 ++++- .oxlintrc.json | 43 +++++++++++++++++++++++++++++++------------ 2 files changed, 35 insertions(+), 13 deletions(-) diff --git a/.oxfmtrc.json b/.oxfmtrc.json index bb43c7c3ac4..71809f50ef4 100644 --- a/.oxfmtrc.json +++ b/.oxfmtrc.json @@ -21,7 +21,10 @@ "**/storybook-static/", "**/.changeset/", "**/dist/", + "internal-packages/tsql/src/grammar/", + // Maybe turn these on in the future "**/*.yaml", - "internal-packages/tsql/src/grammar/" + "**/*.mdx", + "**/*.md" ] } diff --git a/.oxlintrc.json b/.oxlintrc.json index f028e901d34..99babf86a17 100644 --- a/.oxlintrc.json +++ b/.oxlintrc.json @@ -9,19 +9,38 @@ "**/seedCloud.ts", "**/populate.js" ], + // All rules below are disabled because they currently fire on the existing + // codebase (1748 warnings across these 20 rules as of this commit). Disabled + // to keep the lint baseline green; re-enable and fix incrementally. "rules": { - "consistent-type-imports": [ - "warn", - { - "prefer": "type-imports", - "disallowTypeAnnotations": true, - "fixStyle": "inline-type-imports" - } - ], - "import/no-duplicates": ["warn", { "prefer-inline": true }], - // Disabled for now: oxlint treats any use*()/use() call as a React hook, - // producing false positives in async/test code (testcontainers, cli-v3 e2e). - // Re-enable (ideally scoped to React packages) once those are addressed. + // eslint + "no-unused-vars": "off", + "no-unused-expressions": "off", + "no-control-regex": "off", + "no-empty-pattern": "off", + "no-unused-private-class-members": "off", + "no-useless-catch": "off", + "no-unsafe-optional-chaining": "off", + "no-unreachable": "off", + "require-yield": "off", + "no-async-promise-executor": "off", + "no-unsafe-finally": "off", + "no-useless-escape": "off", + // typescript + "typescript/consistent-type-imports": "off", + "typescript/no-this-alias": "off", + "typescript/no-non-null-asserted-optional-chain": "off", + "typescript/no-unnecessary-parameter-property-assignment": "off", + // import + "import/no-duplicates": "off", + "import/namespace": "off", + // react + "react/jsx-key": "off", + "react/no-children-prop": "off", + // react-hooks + "react-hooks/exhaustive-deps": "off", + // oxlint treats any use*()/use() call as a React hook, producing false + // positives in async/test code (testcontainers, cli-v3 e2e). "react-hooks/rules-of-hooks": "off" } } From 6c5c6eb5cbd3c1d709218c9a08acb3c87dbc6a16 Mon Sep 17 00:00:00 2001 From: Chris Arderne Date: Thu, 25 Jun 2026 14:47:25 +0100 Subject: [PATCH 9/9] lint + format --- .github/labeler.yml | 2 +- .../workflows/dependabot-critical-alerts.yml | 2 +- .../workflows/dependabot-weekly-summary.yml | 8 +- .github/workflows/release-helm.yml | 12 +- .github/workflows/workflow-checks.yml | 12 +- .github/zizmor.yml | 2 +- apps/coordinator/package.json | 2 +- apps/docker-provider/package.json | 2 +- apps/kubernetes-provider/package.json | 2 +- .../k8sPodCountSignalSource.test.ts | 4 +- .../redisBackpressureSignalSource.test.ts | 21 +- apps/supervisor/src/env.ts | 23 +- apps/supervisor/src/index.ts | 5 +- .../services/computeSnapshotService.test.ts | 8 +- .../src/services/otlpTraceService.test.ts | 4 +- .../warmStartVerificationService.test.ts | 5 +- apps/supervisor/src/wideEvents/index.ts | 7 +- .../src/wideEvents/middleware.test.ts | 23 +- .../src/workloadManager/compute.test.ts | 4 +- .../supervisor/src/workloadManager/compute.ts | 4 +- .../src/workloadManager/kubernetes.ts | 12 +- apps/supervisor/src/workloadManager/types.ts | 7 +- apps/supervisor/src/workloadServer/index.ts | 32 +- apps/webapp/app/assets/icons/AIPenIcon.tsx | 8 +- .../app/assets/icons/AiProviderIcons.tsx | 8 +- apps/webapp/app/assets/icons/AttemptIcon.tsx | 18 +- apps/webapp/app/assets/icons/ClockIcon.tsx | 7 +- apps/webapp/app/assets/icons/FunctionIcon.tsx | 10 +- apps/webapp/app/assets/icons/InfoIcon.tsx | 10 +- .../app/assets/icons/IntegrationsIcon.tsx | 6 +- .../app/assets/icons/RightSideMenuIcon.tsx | 10 +- .../app/assets/icons/RunFunctionIcon.tsx | 10 +- .../webapp/app/assets/icons/SlackMonoIcon.tsx | 7 +- apps/webapp/app/assets/icons/StreamsIcon.tsx | 26 +- .../app/assets/icons/TextSquareIcon.tsx | 40 +- apps/webapp/app/clientBeforeFirstRender.ts | 5 +- apps/webapp/app/components/AskAI.tsx | 6 +- .../app/components/BlankStatePanels.tsx | 14 +- apps/webapp/app/components/DevPresence.tsx | 8 +- .../webapp/app/components/LoginPageLayout.tsx | 4 +- apps/webapp/app/components/SetupCommands.tsx | 5 +- apps/webapp/app/components/Shortcuts.tsx | 10 +- .../backOffice/ApiRateLimitSection.server.ts | 4 +- .../admin/backOffice/ApiRateLimitSection.tsx | 13 +- .../BatchRateLimitSection.server.ts | 4 +- .../backOffice/BatchRateLimitSection.tsx | 13 +- .../admin/backOffice/MaxProjectsSection.tsx | 10 +- .../backOffice/RateLimitSection.server.ts | 11 +- .../admin/backOffice/RateLimitSection.tsx | 40 +- .../app/components/code/AIQueryInput.tsx | 8 +- .../app/components/code/QueryResultsChart.tsx | 12 +- .../app/components/code/TSQLResultsTable.tsx | 23 +- .../app/components/code/codeMirrorTheme.ts | 17 +- apps/webapp/app/components/code/tsql/index.ts | 8 +- .../components/code/tsql/tsqlCompletion.ts | 8 +- .../components/code/tsql/tsqlLinter.test.ts | 5 +- .../app/components/code/tsql/tsqlLinter.ts | 7 +- .../dashboard-agent/RunDiagnosisCard.tsx | 9 +- .../errors/ConfigureErrorAlerts.tsx | 7 +- .../integrations/VercelBuildSettings.tsx | 33 +- .../components/integrations/VercelLogo.tsx | 7 +- .../integrations/VercelOnboardingModal.tsx | 314 +- .../app/components/metrics/ModelsFilter.tsx | 7 +- .../components/metrics/OperationsFilter.tsx | 7 +- .../app/components/metrics/PromptsFilter.tsx | 7 +- .../components/metrics/ProvidersFilter.tsx | 7 +- .../metrics/SaveToDashboardDialog.tsx | 15 +- .../components/navigation/DashboardList.tsx | 4 +- .../navigation/EnvironmentSelector.tsx | 11 +- .../navigation/HelpAndFeedbackPopover.tsx | 230 +- .../app/components/navigation/SideMenu.tsx | 4 +- .../components/navigation/SideMenuItem.tsx | 2 +- .../navigation/useReorderableList.ts | 4 +- .../app/components/primitives/Buttons.tsx | 9 +- .../app/components/primitives/Checkbox.tsx | 6 +- .../app/components/primitives/ClientTabs.tsx | 10 +- .../components/primitives/CopyTextLink.tsx | 10 +- .../app/components/primitives/DateTime.tsx | 8 +- .../app/components/primitives/Dialog.tsx | 2 +- .../primitives/InputNumberStepper.tsx | 2 +- .../components/primitives/MiddleTruncate.tsx | 11 +- .../app/components/primitives/SearchInput.tsx | 2 +- .../app/components/primitives/Select.tsx | 21 +- .../app/components/primitives/Sheet.tsx | 6 +- .../app/components/primitives/SheetV3.tsx | 3 +- .../app/components/primitives/ShortcutKey.tsx | 5 +- .../app/components/primitives/Table.tsx | 8 +- .../webapp/app/components/primitives/Tabs.tsx | 4 +- .../app/components/primitives/Toast.tsx | 5 +- .../primitives/TreeView/TreeView.tsx | 16 +- .../components/primitives/TreeView/utils.ts | 19 +- .../components/primitives/UnorderedList.tsx | 5 +- .../components/primitives/charts/Chart.tsx | 146 +- .../components/primitives/charts/ChartBar.tsx | 17 +- .../primitives/charts/ChartContext.tsx | 40 +- .../primitives/charts/ChartLegendCompound.tsx | 20 +- .../primitives/charts/ChartLine.tsx | 18 +- .../primitives/charts/ChartLoading.tsx | 111 +- .../primitives/charts/ChartRoot.tsx | 10 +- .../charts/hooks/useZoomSelection.ts | 11 +- .../primitives/charts/useYAxisWidth.ts | 3 +- .../app/components/query/QueryEditor.tsx | 20 +- .../app/components/runs/v3/BatchStatus.tsx | 6 +- .../components/runs/v3/PromptSpanDetails.tsx | 9 +- .../webapp/app/components/runs/v3/RunIcon.tsx | 137 +- .../app/components/runs/v3/SharedFilters.tsx | 14 +- .../app/components/runs/v3/SpanTitle.tsx | 4 +- .../components/runs/v3/WaitpointDetails.tsx | 6 +- .../components/runs/v3/agent/AgentView.tsx | 12 +- .../components/runs/v3/ai/AIChatMessages.tsx | 4 +- .../runs/v3/ai/AIEmbedSpanDetails.tsx | 1 - .../components/runs/v3/ai/AIModelSummary.tsx | 6 +- .../components/runs/v3/ai/AISpanDetails.tsx | 28 +- .../runs/v3/ai/AIToolCallSpanDetails.tsx | 1 - .../app/components/runs/v3/ai/aiHelpers.ts | 16 +- .../runs/v3/ai/extractAISpanData.ts | 9 +- .../runs/v3/ai/extractAISummarySpanData.ts | 11 +- .../schedules/PurchaseSchedulesModal.tsx | 7 +- .../schedules/ScheduleLimitActions.tsx | 4 +- .../components/sessions/v1/SessionsTable.tsx | 4 +- apps/webapp/app/db.server.ts | 5 +- apps/webapp/app/entry.server.tsx | 3 +- apps/webapp/app/env.server.ts | 17 +- apps/webapp/app/hooks/useDashboardEditor.ts | 16 +- apps/webapp/app/hooks/useElementVisibility.ts | 4 +- apps/webapp/app/hooks/useFuzzyFilter.ts | 2 +- apps/webapp/app/hooks/usePostHog.ts | 9 +- apps/webapp/app/models/member.server.ts | 2 +- .../app/models/orgIntegration.server.ts | 6 +- .../app/models/runtimeEnvironment.server.ts | 2 +- apps/webapp/app/models/taskQueue.server.ts | 14 +- apps/webapp/app/models/user.server.ts | 9 +- .../app/models/vercelIntegration.server.ts | 177 +- .../app/models/vercelSdkRecovery.server.ts | 8 +- .../SelectBestEnvironmentPresenter.server.ts | 2 +- .../v3/AgentDetailPresenter.server.ts | 23 +- .../v3/AgentListPresenter.server.ts | 6 +- .../v3/ApiErrorListPresenter.server.ts | 11 +- .../presenters/v3/ApiKeysPresenter.server.ts | 17 +- .../v3/ApiRetrieveRunPresenter.server.ts | 7 +- .../v3/ApiRunListPresenter.server.ts | 5 +- .../v3/BatchListPresenter.server.ts | 6 +- .../presenters/v3/BatchPresenter.server.ts | 1 - .../v3/CreateBulkActionPresenter.server.ts | 5 +- .../v3/DeploymentListPresenter.server.ts | 11 +- .../v3/DeploymentPresenter.server.ts | 29 +- .../EnvironmentVariablesPresenter.server.ts | 14 +- .../presenters/v3/LimitsPresenter.server.ts | 92 +- .../v3/LogDetailPresenter.server.ts | 5 +- .../presenters/v3/LogsListPresenter.server.ts | 2 +- .../v3/MetricDashboardPresenter.server.ts | 8 +- .../v3/ModelRegistryPresenter.server.ts | 73 +- .../v3/NewAlertChannelPresenter.server.ts | 12 +- .../v3/NextRunListPresenter.server.ts | 2 +- .../v3/PlaygroundPresenter.server.ts | 6 +- .../presenters/v3/PromptPresenter.server.ts | 35 +- .../presenters/v3/QueryPresenter.server.ts | 1 - .../v3/QueueListPresenter.server.ts | 2 +- .../presenters/v3/RegionsPresenter.server.ts | 10 +- .../app/presenters/v3/RunPresenter.server.ts | 3 +- .../v3/RunStreamPresenter.server.ts | 4 +- .../v3/RunTagListPresenter.server.ts | 5 +- .../v3/SessionListPresenter.server.ts | 18 +- .../presenters/v3/SessionPresenter.server.ts | 123 +- .../app/presenters/v3/SpanPresenter.server.ts | 226 +- .../v3/TaskDetailPresenter.server.ts | 14 +- .../presenters/v3/TaskListPresenter.server.ts | 5 +- .../v3/TasksDashboardPresenter.server.ts | 5 +- .../app/presenters/v3/TestPresenter.server.ts | 4 +- .../presenters/v3/TestTaskPresenter.server.ts | 6 +- .../presenters/v3/UsagePresenter.server.ts | 5 +- .../v3/VercelSettingsPresenter.server.ts | 394 +- .../v3/ViewSchedulePresenter.server.ts | 7 +- .../v3/WaitpointListPresenter.server.ts | 2 +- .../v3/WaitpointPresenter.server.ts | 9 +- .../v3/mapRunToLiveFields.server.ts | 4 +- .../route.tsx | 11 +- .../route.tsx | 8 +- .../route.tsx | 19 +- .../route.tsx | 7 +- .../route.tsx | 4 +- .../route.tsx | 15 +- .../route.tsx | 4 +- .../route.tsx | 25 +- .../route.tsx | 5 +- .../route.tsx | 12 +- .../route.tsx | 5 +- .../route.tsx | 87 +- .../route.tsx | 44 +- .../route.tsx | 9 +- .../route.tsx | 2 +- .../route.tsx | 18 +- .../route.tsx | 5 +- .../AITabContent.tsx | 5 +- .../ExamplesContent.tsx | 3 +- .../TRQLGuideContent.tsx | 1 - .../TableSchemaContent.tsx | 1 - .../route.tsx | 11 +- .../route.tsx | 148 +- .../route.tsx | 4 +- .../shouldRevalidateRunsList.ts | 4 +- .../useRunsLiveReload.ts | 7 +- .../route.tsx | 8 +- .../route.tsx | 10 +- .../route.tsx | 6 +- .../route.tsx | 120 +- .../route.tsx | 5 +- .../route.tsx | 2 +- .../AIPayloadTabContent.tsx | 8 +- .../route.tsx | 703 +- .../route.tsx | 1 - .../route.tsx | 24 +- ...ationSlug.settings.integrations.vercel.tsx | 5 +- .../route.tsx | 18 +- .../route.tsx | 26 +- .../route.tsx | 93 +- .../route.tsx | 4 +- .../_app.orgs.$organizationSlug/route.tsx | 7 +- .../route.tsx | 9 +- .../webapp/app/routes/_app.orgs.new/route.tsx | 5 +- .../app/routes/account.tokens/route.tsx | 4 +- .../admin.api.v1.llm-models.$modelId.ts | 14 +- .../app/routes/admin.api.v1.llm-models.ts | 15 +- ...pi.v1.revoked-api-keys.$revokedApiKeyId.ts | 5 +- .../webapp/app/routes/admin.api.v1.workers.ts | 10 +- ...i.v2.orgs.$organizationId.feature-flags.ts | 6 +- .../app/routes/admin.back-office._index.tsx | 13 +- .../routes/admin.back-office.orgs.$orgId.tsx | 84 +- apps/webapp/app/routes/admin.back-office.tsx | 9 +- apps/webapp/app/routes/admin.concurrency.tsx | 13 +- apps/webapp/app/routes/admin.data-stores.tsx | 15 +- .../webapp/app/routes/admin.feature-flags.tsx | 131 +- apps/webapp/app/routes/admin.impersonate.tsx | 6 +- .../app/routes/admin.llm-models.$modelId.tsx | 57 +- .../app/routes/admin.llm-models._index.tsx | 33 +- .../admin.llm-models.missing.$model.tsx | 57 +- .../admin.llm-models.missing._index.tsx | 10 +- .../app/routes/admin.llm-models.new.tsx | 65 +- .../webapp/app/routes/admin.notifications.tsx | 9 +- apps/webapp/app/routes/admin.orgs.tsx | 10 +- apps/webapp/app/routes/admin.tsx | 5 +- .../routes/api.v1.auth.user-actor-token.ts | 3 +- .../app/routes/api.v1.batches.$batchId.ts | 6 +- ...loymentId.generate-registry-credentials.ts | 106 +- .../api.v1.idempotencyKeys.$key.reset.ts | 6 +- ....projects.$projectParam.vercel.projects.ts | 21 +- .../app/routes/api.v1.plain.customer-cards.ts | 39 +- .../api.v1.projects.$projectRef.$env.jwt.ts | 5 +- ...projects.$projectRef.$env.repo.snapshot.ts | 5 +- ...jects.$projectRef.$env.workers.$tagName.ts | 111 +- ...ef.background-workers.$envSlug.$version.ts | 30 +- ...pi.v1.projects.$projectRef.environments.ts | 18 +- .../routes/api.v1.prompts.$slug.override.ts | 5 +- .../webapp/app/routes/api.v1.prompts.$slug.ts | 34 +- .../routes/api.v1.prompts.$slug.versions.ts | 5 +- .../app/routes/api.v1.prompts._index.ts | 5 +- apps/webapp/app/routes/api.v1.query.ts | 5 +- .../app/routes/api.v1.runs.$runId.events.ts | 5 +- .../app/routes/api.v1.runs.$runId.metadata.ts | 12 +- .../api.v1.runs.$runId.spans.$spanId.ts | 15 +- .../app/routes/api.v1.runs.$runId.tags.ts | 17 +- .../app/routes/api.v1.runs.$runId.trace.ts | 15 +- .../routes/api.v1.runs.$runParam.replay.ts | 3 +- .../api.v1.runs.$runParam.reschedule.ts | 5 +- apps/webapp/app/routes/api.v1.runs.ts | 5 +- .../routes/api.v1.schedules.$scheduleId.ts | 4 +- .../routes/api.v1.sessions.$session.close.ts | 17 +- ...i.v1.sessions.$session.end-and-continue.ts | 15 +- .../app/routes/api.v1.sessions.$session.ts | 18 +- ...api.v1.sessions.$sessionId.snapshot-url.ts | 35 +- apps/webapp/app/routes/api.v1.sessions.ts | 10 +- .../routes/api.v1.tasks.$taskId.trigger.ts | 4 +- apps/webapp/app/routes/api.v1.tasks.batch.ts | 7 +- .../app/routes/api.v2.batches.$batchId.ts | 6 +- apps/webapp/app/routes/api.v2.tasks.batch.ts | 7 +- apps/webapp/app/routes/api.v3.batches.ts | 2 +- apps/webapp/app/routes/api.v3.runs.$runId.ts | 5 +- .../app/routes/auth.google.callback.tsx | 1 - apps/webapp/app/routes/auth.google.ts | 1 - .../app/routes/confirm-basic-details.tsx | 5 +- .../app/routes/engine.v1.dev.disconnect.ts | 15 +- .../engine.v1.worker-actions.connect.ts | 5 +- .../engine.v1.worker-actions.heartbeat.ts | 5 +- apps/webapp/app/routes/invites.tsx | 5 +- apps/webapp/app/routes/login._index/route.tsx | 6 +- apps/webapp/app/routes/login.sso/route.tsx | 10 +- apps/webapp/app/routes/magic.tsx | 4 +- apps/webapp/app/routes/otel.v1.metrics.ts | 4 +- .../routes/realtime.v1.batches.$batchId.ts | 6 +- .../app/routes/realtime.v1.runs.$runId.ts | 5 +- apps/webapp/app/routes/realtime.v1.runs.ts | 5 +- ...ealtime.v1.sessions.$session.$io.append.ts | 15 +- .../realtime.v1.sessions.$session.$io.ts | 5 +- .../realtime.v1.streams.$runId.$streamId.ts | 19 +- ...streams.$runId.$target.$streamId.append.ts | 4 +- ...ime.v1.streams.$runId.$target.$streamId.ts | 16 +- .../useMfaSetup.ts | 197 +- apps/webapp/app/routes/resources.feedback.ts | 5 +- .../route.tsx | 10 +- ...jectParam.env.$envParam.dashboard-agent.ts | 34 +- ...vParam.dashboards.$dashboardId.widgets.tsx | 12 +- ...tParam.env.$envParam.dashboards.create.tsx | 3 +- ...projectParam.env.$envParam.logs.$logId.tsx | 5 +- ...ojects.$projectParam.env.$envParam.logs.ts | 11 +- ...tParam.env.$envParam.playground.action.tsx | 16 +- ...ealtime.v1.sessions.$session.$io.append.ts | 21 +- ...round.realtime.v1.sessions.$session.$io.ts | 6 +- ...nvParam.prompts.$promptSlug.generations.ts | 10 +- ...ram.realtime.v1.sessions.$sessionId.$io.ts | 6 +- ...am.realtime.v1.streams.$runId.$streamId.ts | 14 +- .../route.tsx | 25 +- .../route.tsx | 16 +- ...s.$projectParam.env.$envParam.runs.live.ts | 3 +- .../route.tsx | 4 +- ....orgs.$organizationSlug.schedules-addon.ts | 12 +- ...ces.orgs.$organizationSlug.select-plan.tsx | 24 +- .../routes/resources.preferences.sidemenu.tsx | 5 +- .../resources.runs.$runParam.logs.download.ts | 5 +- .../app/routes/resources.runs.$runParam.ts | 12 +- .../resources.sessions.$sessionParam.close.ts | 6 +- .../resources.taskruns.$runParam.replay.ts | 2 +- .../app/routes/storybook.agent-ui/route.tsx | 12 +- .../routes/storybook.animated-panel/route.tsx | 85 +- .../app/routes/storybook.charts/route.tsx | 1 - .../app/routes/storybook.icons/route.tsx | 20 +- .../app/routes/storybook.timeline/route.tsx | 4 +- apps/webapp/app/routes/vercel.callback.ts | 2 +- apps/webapp/app/routes/vercel.configure.tsx | 4 +- apps/webapp/app/routes/vercel.connect.tsx | 12 +- apps/webapp/app/routes/vercel.onboarding.tsx | 39 +- .../concerns/batchGlobalRateLimiter.server.ts | 1 - .../concerns/computeMigration.server.ts | 12 +- .../concerns/idempotencyKeys.server.ts | 24 +- .../app/runEngine/concerns/payloads.server.ts | 8 +- .../app/runEngine/concerns/queues.server.ts | 20 +- .../runEngine/services/batchTrigger.server.ts | 36 +- .../services/streamBatchItems.server.ts | 4 +- .../services/triggerFailedTask.server.ts | 6 +- .../runEngine/services/triggerTask.server.ts | 135 +- apps/webapp/app/runEngine/types.ts | 34 +- .../services/admin/missingLlmModels.server.ts | 17 +- apps/webapp/app/services/apiAuth.server.ts | 12 +- .../app/services/apiRateLimit.server.ts | 16 +- apps/webapp/app/services/attio.server.ts | 25 +- ...authorizationRateLimitMiddleware.server.ts | 4 +- .../betterstack/betterstack.server.ts | 9 +- .../app/services/dashboardAgent.server.ts | 5 +- .../dashboardAgentHeadStart.server.ts | 3 +- .../organizationDataStoresRegistry.server.ts | 1 - .../environmentMetricsRepository.server.ts | 4 +- .../environmentVariableApiAccess.server.ts | 5 +- apps/webapp/app/services/gitHub.server.ts | 8 +- .../app/services/impersonation.server.ts | 31 +- ...oadProjectEnvironmentFromRequest.server.ts | 5 +- apps/webapp/app/services/org.server.ts | 2 +- .../services/personalAccessToken.server.ts | 5 +- .../webapp/app/services/platform.v3.server.ts | 4 +- .../services/platformNotifications.server.ts | 23 +- .../queryConcurrencyLimiter.server.ts | 1 - .../app/services/queryService.server.ts | 11 +- .../app/services/realtime/duration.server.ts | 27 +- .../realtime/electricStreamProtocol.server.ts | 4 +- .../realtime/envChangeRouter.server.ts | 9 +- .../realtime/nativeRealtimeClient.server.ts | 36 +- .../realtimeConcurrencyLimiter.server.ts | 6 +- .../resolveRealtimeStreamClient.server.ts | 2 +- .../runChangeNotifierInstance.server.ts | 3 +- .../app/services/realtime/runReader.server.ts | 6 +- .../realtime/s2realtimeStreams.server.ts | 25 +- .../realtime/sessionRunManager.server.ts | 24 +- .../app/services/realtime/sessions.server.ts | 15 +- .../shadowRealtimeClientInstance.server.ts | 6 +- .../realtime/streamBasinProvisioner.server.ts | 15 +- apps/webapp/app/services/realtime/types.ts | 6 +- .../routeBuilders/apiBuilder.server.ts | 50 +- .../routeBuilders/dashboardBuilder.ts | 6 +- .../services/runsReplicationService.server.ts | 2 +- .../clickhouseRunsRepository.server.ts | 6 +- .../runsRepository/runsRepository.server.ts | 2 +- .../services/secrets/secretStore.server.ts | 2 +- .../sessionStreamWaitpointCache.server.ts | 8 +- .../clickhouseSessionsRepository.server.ts | 8 +- .../sessionsRepository.server.ts | 2 +- apps/webapp/app/services/signals.server.ts | 4 +- .../services/ssoSessionRevalidation.server.ts | 9 +- .../services/taskIdentifierRegistry.server.ts | 9 +- apps/webapp/app/services/telemetry.server.ts | 4 +- .../services/unkey/redisCacheStore.server.ts | 7 +- .../app/services/vercelIntegration.server.ts | 63 +- apps/webapp/app/utils.ts | 11 +- apps/webapp/app/utils/dataExport.ts | 11 +- apps/webapp/app/utils/errorFingerprinting.ts | 4 +- apps/webapp/app/utils/logUtils.ts | 4 +- apps/webapp/app/utils/longPollingFetch.ts | 4 +- apps/webapp/app/utils/plain.server.ts | 9 +- apps/webapp/app/utils/prismaErrors.ts | 6 +- .../app/utils/reloadingRegistry.server.ts | 4 +- apps/webapp/app/utils/searchParams.ts | 5 +- apps/webapp/app/utils/timeGranularity.ts | 16 +- .../app/v3/accountsWebhookWorker.server.ts | 4 +- .../app/v3/dynamicFlushScheduler.server.ts | 2 +- .../environmentVariablesRepository.server.ts | 3 +- .../clickhouseEventRepository.server.ts | 2 +- .../eventRepository/eventRepository.server.ts | 16 +- .../app/v3/eventRepository/index.server.ts | 5 +- .../v3/eventRepository/traceExport.server.ts | 3 +- .../app/v3/legacyRunEngineWorker.server.ts | 5 +- .../webapp/app/v3/marqs/asyncWorker.server.ts | 5 +- .../app/v3/marqs/devQueueConsumer.server.ts | 4 +- .../v3/marqs/fairDequeuingStrategy.server.ts | 49 +- apps/webapp/app/v3/marqs/index.server.ts | 4 +- .../v3/marqs/sharedQueueConsumer.server.ts | 10 +- .../mollifier/applyMetadataMutation.server.ts | 7 +- .../v3/mollifier/mollifierDrainer.server.ts | 4 +- .../mollifierDrainerHandler.server.ts | 20 +- .../mollifierDrainingGauge.server.ts | 10 +- .../app/v3/mollifier/mollifierGate.server.ts | 20 +- .../v3/mollifier/mollifierMollify.server.ts | 3 +- .../mollifier/mollifierStaleSweep.server.ts | 17 +- .../mollifierStaleSweepState.server.ts | 7 +- .../v3/mollifier/mollifierTelemetry.server.ts | 40 +- .../v3/mollifier/mutateWithFallback.server.ts | 22 +- .../app/v3/mollifier/readFallback.server.ts | 19 +- .../mollifier/resolveRunForMutation.server.ts | 6 +- .../mollifier/syntheticRedirectInfo.server.ts | 2 +- .../v3/mollifier/syntheticRunHeader.server.ts | 4 +- .../v3/mollifier/syntheticSpanRun.server.ts | 22 +- .../app/v3/mollifier/syntheticTrace.server.ts | 10 +- .../app/v3/mollifierDrainerWorker.server.ts | 2 +- .../v3/mollifierStaleSweepWorker.server.ts | 2 +- apps/webapp/app/v3/objectStore.server.ts | 6 +- .../webapp/app/v3/objectStoreClient.server.ts | 12 +- apps/webapp/app/v3/otlpExporter.server.ts | 40 +- apps/webapp/app/v3/querySchemas.ts | 3 +- apps/webapp/app/v3/runEngine.server.ts | 3 +- .../webapp/app/v3/runEngineHandlers.server.ts | 2 +- .../app/v3/services/adminWorker.server.ts | 3 +- .../v3/services/alerts/deliverAlert.server.ts | 86 +- .../alerts/deliverErrorGroupAlert.server.ts | 31 +- .../app/v3/services/batchTriggerV3.server.ts | 26 +- .../v3/services/bulk/BulkActionV2.server.ts | 10 +- .../app/v3/services/completeAttempt.server.ts | 2 +- .../computeTemplateCreation.server.ts | 5 +- .../services/createBackgroundWorker.server.ts | 2 +- .../findOrCreateBackgroundWorker.server.ts | 4 +- .../services/createTaskRunAttempt.server.ts | 4 +- .../app/v3/services/promptService.server.ts | 1 - .../taskRunConcurrencyTracker.server.ts | 28 +- .../app/v3/services/triggerTaskV1.server.ts | 17 +- .../worker/workerGroupTokenService.server.ts | 7 +- apps/webapp/app/v3/taskEventStore.server.ts | 5 +- .../v3/utils/enrichCreatableEvents.server.ts | 40 +- apps/webapp/app/v3/utils/zodPubSub.server.ts | 6 +- apps/webapp/app/v3/vercel/index.ts | 2 - .../app/v3/vercel/vercelOAuthState.server.ts | 4 +- .../vercel/vercelProjectIntegrationSchema.ts | 59 +- .../webapp/app/v3/vercel/vercelUrls.server.ts | 5 +- apps/webapp/app/v3/workerRegions.server.ts | 5 +- apps/webapp/evals/aiRunFilter.eval.ts | 8 +- apps/webapp/seed-ai-spans.mts | 152 +- apps/webapp/seed.mts | 4 +- .../EnvironmentVariablesPresenter.test.ts | 88 +- apps/webapp/test/api-auth.e2e.test.ts | 3 +- apps/webapp/test/auth-api.e2e.full.test.ts | 205 +- .../test/auth-dashboard.e2e.full.test.ts | 6 +- .../test/bufferedTriggerPayload.test.ts | 2 +- .../test/chat-snapshot-integration.test.ts | 246 +- apps/webapp/test/clickhouseFactory.test.ts | 19 +- .../code/tsql/tsqlCompletion.test.ts | 1 - .../components/code/tsql/tsqlLinter.test.ts | 5 +- .../test/components/runs/v3/RunTag.test.ts | 28 +- apps/webapp/test/computeMigration.test.ts | 56 +- .../createDeploymentWithNextVersion.test.ts | 31 +- apps/webapp/test/duplicateTaskIds.test.ts | 7 +- .../test/engine/streamBatchItems.test.ts | 18 +- apps/webapp/test/engine/triggerTask.test.ts | 259 +- .../environmentVariablesEnvironments.test.ts | 37 +- .../environmentVariablesRepository.test.ts | 93 +- apps/webapp/test/errorFingerprinting.test.ts | 11 +- .../webapp/test/fairDequeuingStrategy.test.ts | 19 +- .../healthcheck-require-plugins.e2e.test.ts | 13 +- .../webapp/test/helpers/seedTestApiSession.ts | 8 +- .../test/helpers/seedTestEnvironment.ts | 4 +- .../test/helpers/seedTestUserProject.ts | 4 +- .../metadataRouteOperationsLogging.test.ts | 13 +- .../mollifierApplyMetadataMutation.test.ts | 21 +- .../test/mollifierClaimResolution.test.ts | 2 +- .../test/mollifierDecisionLabels.test.ts | 10 +- .../test/mollifierDrainerHandler.test.ts | 14 +- .../test/mollifierDrainerWorker.test.ts | 8 +- apps/webapp/test/mollifierGate.test.ts | 281 +- .../test/mollifierIdempotencyClaim.test.ts | 23 +- apps/webapp/test/mollifierMollify.test.ts | 2 +- .../test/mollifierMutateWithFallback.test.ts | 6 +- .../webapp/test/mollifierReadFallback.test.ts | 44 +- .../test/mollifierReplayPayloadShape.test.ts | 6 +- .../test/mollifierResetIdempotencyKey.test.ts | 2 +- apps/webapp/test/mollifierStaleSweep.test.ts | 140 +- .../test/mollifierSynthesiseFoundRun.test.ts | 4 +- .../mollifierSyntheticApiResponses.test.ts | 4 +- .../mollifierSyntheticRedirectInfo.test.ts | 182 +- .../test/mollifierSyntheticTrace.test.ts | 4 +- .../test/mollifierTripEvaluator.test.ts | 31 +- apps/webapp/test/objectStore.test.ts | 43 +- .../organizationDataStoresRegistry.test.ts | 85 +- .../ApiBatchResultsPresenter.test.ts | 28 +- .../prismaInfrastructureErrorCapture.test.ts | 101 +- .../test/realtime/envChangeRouter.test.ts | 19 +- .../test/realtime/nativeHoldOnEmpty.test.ts | 28 +- .../test/realtime/nativeRunSetCache.test.ts | 5 +- .../test/realtime/replayCursorStore.test.ts | 41 +- .../test/realtime/runChangeNotifier.test.ts | 4 +- .../test/realtime/shadowCompare.test.ts | 19 +- apps/webapp/test/replay-after-crash.test.ts | 23 +- .../test/runsReplicationService.part3.test.ts | 2 +- .../test/runsReplicationService.part6.test.ts | 2 +- apps/webapp/test/runsRepositoryCursor.test.ts | 5 +- .../test/sanitizeRowsOnParseError.test.ts | 13 +- apps/webapp/test/sessionDuration.test.ts | 21 +- .../test/shouldRevalidateRunsList.test.ts | 40 +- apps/webapp/test/slackErrorAlerts.test.ts | 7 +- apps/webapp/test/timelineSpanEvents.test.ts | 6 +- apps/webapp/test/traceExport.test.ts | 11 +- .../utils/testReplicationClickhouseFactory.ts | 5 +- apps/webapp/test/workerRegions.test.ts | 75 +- depot.json | 2 +- .../provisioning/dashboards/batch-queue.json | 63 +- .../provisioning/dashboards/dashboards.yml | 1 - .../dashboards/nodejs-runtime.json | 40 +- .../dashboards/realtime-native.json | 11 +- .../dashboards/runs-replication.json | 42 +- .../provisioning/datasources/datasources.yml | 1 - docker/config/prometheus.yml | 1 - docker/config/toxiproxy.json | 2 +- docs/docs.json | 73 +- docs/style.css | 52 +- hosting/docker/webapp/docker-compose.yml | 2 +- hosting/docker/worker/docker-compose.yml | 8 +- internal-packages/cache/package.json | 2 +- .../cache/src/stores/lruMemory.ts | 12 +- internal-packages/cache/src/stores/redis.ts | 7 +- .../clickhouse/src/client/client.ts | 5 +- .../clickhouse/src/client/noop.ts | 5 +- .../clickhouse/src/client/tsql.ts | 9 +- internal-packages/clickhouse/src/sessions.ts | 10 +- .../clickhouse/src/taskEvents.ts | 15 +- .../clickhouse/src/taskRuns.test.ts | 16 +- internal-packages/clickhouse/src/tsql.test.ts | 83 +- internal-packages/compute/src/client.ts | 6 +- .../dashboard-agent-db/drizzle.config.ts | 4 +- .../drizzle/meta/0000_snapshot.json | 2 +- .../drizzle/meta/0001_snapshot.json | 7 +- .../drizzle/meta/_journal.json | 2 +- .../dashboard-agent-db/migrate-status.mjs | 9 +- .../dashboard-agent-db/src/queries.ts | 20 +- .../src/dashboard-agent.eval.ts | 78 +- .../src/dashboard-agent.test.ts | 4 +- .../dashboard-agent/src/dashboard-agent.ts | 11 +- .../dashboard-agent/src/eval-turn.ts | 34 +- .../dashboard-agent/src/prompts.ts | 3 +- .../dashboard-agent/src/repo-tools.test.ts | 27 +- .../dashboard-agent/src/repo-tools.ts | 32 +- .../dashboard-agent/src/tool-schemas.ts | 83 +- .../dashboard-agent/src/tools.ts | 46 +- internal-packages/database/package.json | 2 +- .../emails/emails/mfa-enabled.tsx | 3 +- internal-packages/emails/src/index.tsx | 4 +- .../emails/src/transports/aws-ses.ts | 24 +- .../emails/src/transports/index.ts | 12 +- .../emails/src/transports/null.ts | 11 +- .../emails/src/transports/resend.ts | 14 +- internal-packages/emails/tsconfig.json | 2 +- .../llm-model-catalog/scripts/generate.mjs | 15 +- .../llm-model-catalog/src/defaultPrices.ts | 6169 +++++++++-------- .../llm-model-catalog/src/model-catalog.json | 713 +- .../llm-model-catalog/src/modelCatalog.ts | 4059 +++++------ .../llm-model-catalog/src/registry.test.ts | 12 +- .../llm-model-catalog/src/registry.ts | 5 +- .../llm-model-catalog/src/sync.test.ts | 9 +- .../llm-model-catalog/src/sync.ts | 4 +- internal-packages/otlp-importer/package.json | 2 +- .../proto/collector/logs/v1/logs_service.ts | 56 +- .../collector/metrics/v1/metrics_service.ts | 74 +- .../proto/collector/trace/v1/trace_service.ts | 57 +- .../opentelemetry/proto/common/v1/common.ts | 62 +- .../opentelemetry/proto/logs/v1/logs.ts | 68 +- .../opentelemetry/proto/metrics/v1/metrics.ts | 289 +- .../proto/resource/v1/resource.ts | 17 +- .../opentelemetry/proto/trace/v1/trace.ts | 94 +- internal-packages/rbac/src/ability.test.ts | 8 +- internal-packages/rbac/src/fallback.ts | 22 +- internal-packages/rbac/src/index.ts | 19 +- internal-packages/redis/package.json | 2 +- internal-packages/redis/src/index.ts | 6 +- internal-packages/replication/package.json | 2 +- internal-packages/run-engine/package.json | 2 +- .../src/batch-queue/completionTracker.ts | 6 +- .../run-engine/src/batch-queue/index.ts | 28 +- .../src/batch-queue/tests/index.test.ts | 97 +- .../run-engine/src/engine/index.ts | 157 +- .../run-engine/src/engine/retrying.ts | 17 +- .../src/engine/systems/delayedRunSystem.ts | 1 - .../engine/systems/executionSnapshotSystem.ts | 4 +- .../engine/systems/pendingVersionSystem.ts | 4 +- .../src/engine/systems/runAttemptSystem.ts | 15 +- .../src/engine/systems/ttlSystem.ts | 226 +- .../src/engine/systems/waitpointSystem.ts | 2 +- .../engine/tests/batchTriggerAndWait.test.ts | 4 +- .../src/engine/tests/cancelling.test.ts | 15 +- .../engine/tests/createCancelledRun.test.ts | 91 +- .../engine/tests/createFailedTaskRun.test.ts | 189 +- .../src/engine/tests/debounce.test.ts | 831 ++- .../src/engine/tests/dequeuing.test.ts | 10 +- .../engine/tests/getSnapshotsSince.test.ts | 5 +- .../tests/helpers/snapshotTestHelpers.ts | 4 +- .../src/engine/tests/lazyWaitpoint.test.ts | 501 +- .../src/engine/tests/trigger.test.ts | 21 +- .../run-engine/src/engine/tests/ttl.test.ts | 25 +- .../run-engine/src/run-queue/index.ts | 27 +- .../src/run-queue/tests/ckCounters.test.ts | 632 +- .../src/run-queue/tests/ckIndex.test.ts | 562 +- .../dequeueMessageFromWorkerQueue.test.ts | 5 +- .../run-queue/tests/enqueueMessage.test.ts | 284 +- .../src/run-queue/tests/keyProducer.test.ts | 8 +- .../src/run-queue/tests/nack.test.ts | 20 +- .../run-store/src/NoopRunStore.ts | 108 +- .../run-store/src/PostgresRunStore.test.ts | 568 +- .../run-store/src/PostgresRunStore.ts | 17 +- internal-packages/run-store/src/types.ts | 109 +- .../schedule-engine/package.json | 2 +- .../schedule-engine/src/engine/index.ts | 2 +- .../test/scheduleRecovery.test.ts | 3 +- .../src/fixtures/deno/test.ts | 13 +- .../src/fixtures/esm-import/test.mjs | 13 +- internal-packages/sso/src/fallback.ts | 5 +- internal-packages/sso/src/index.ts | 18 +- internal-packages/sso/src/loader.test.ts | 16 +- .../testcontainers/src/webapp.ts | 22 +- internal-packages/tracing/package.json | 2 +- .../tsql/src/grammar/TSQLParser.ts | 12 +- internal-packages/tsql/src/index.test.ts | 100 +- internal-packages/tsql/src/query/database.ts | 4 +- internal-packages/tsql/src/query/functions.ts | 176 +- .../tsql/src/query/parse_string.ts | 104 +- internal-packages/tsql/src/query/parser.ts | 8 +- .../tsql/src/query/printer.test.ts | 286 +- internal-packages/tsql/src/query/printer.ts | 9 +- .../tsql/src/query/results.test.ts | 5 +- internal-packages/tsql/src/query/results.ts | 1 - internal-packages/tsql/src/query/schema.ts | 6 +- .../tsql/src/query/security.test.ts | 14 +- internal-packages/tsql/src/query/timings.ts | 148 +- internal-packages/zod-worker/package.json | 2 +- .../src/extensions/core/neonSyncEnvVars.ts | 3 +- .../extensions/core/syncSupabaseEnvVars.ts | 12 +- .../src/extensions/core/vercelSyncEnvVars.ts | 2 +- .../build/src/internal/additionalFiles.ts | 6 +- .../fixtures/monorepo-react-email/.yarnrc.yml | 2 +- packages/cli-v3/e2e/utils.ts | 16 +- packages/cli-v3/src/build/bundleSkills.ts | 12 +- packages/cli-v3/src/build/manifests.ts | 5 +- packages/cli-v3/src/commands/deploy.ts | 8 +- packages/cli-v3/src/commands/init.ts | 5 +- packages/cli-v3/src/commands/skills.ts | 36 +- packages/cli-v3/src/config.ts | 8 +- packages/cli-v3/src/dev/devOutput.ts | 8 +- packages/cli-v3/src/dev/devSupervisor.ts | 21 +- .../src/entryPoints/dev-run-controller.ts | 1 - .../src/entryPoints/managed-index-worker.ts | 4 +- .../cli-v3/src/executions/taskRunProcess.ts | 10 +- packages/cli-v3/src/mcp/config.ts | 6 +- packages/cli-v3/src/mcp/formatters.ts | 8 +- packages/cli-v3/src/mcp/schemas.ts | 28 +- packages/cli-v3/src/mcp/smoke.test.ts | 61 +- packages/cli-v3/src/mcp/tools.test.ts | 5 +- packages/cli-v3/src/mcp/tools.ts | 6 +- packages/cli-v3/src/mcp/tools/agentChat.ts | 35 +- packages/cli-v3/src/mcp/tools/agents.ts | 4 +- packages/cli-v3/src/mcp/tools/deploys.ts | 12 +- packages/cli-v3/src/mcp/tools/devServer.ts | 5 +- packages/cli-v3/src/mcp/tools/profiles.ts | 4 +- packages/cli-v3/src/mcp/tools/prompts.ts | 12 +- packages/cli-v3/src/mcp/tools/query.ts | 4 +- packages/cli-v3/src/mcp/tools/runs.ts | 24 +- packages/cli-v3/src/mcp/tools/tasks.ts | 14 +- packages/cli-v3/src/rules/install.ts | 1 - .../cli-v3/src/utilities/colorMarkup.test.ts | 18 +- packages/cli-v3/src/utilities/colorMarkup.ts | 5 +- .../cli-v3/src/utilities/discoveryCheck.ts | 13 +- .../src/utilities/platformNotifications.ts | 9 +- packages/core/src/schemas/eventFilter.ts | 4 +- packages/core/src/v3/apiClient/core.ts | 4 +- packages/core/src/v3/apiClient/errors.ts | 30 +- packages/core/src/v3/apiClient/index.ts | 43 +- .../core/src/v3/apiClient/runStream.test.ts | 6 +- packages/core/src/v3/apiClient/runStream.ts | 4 +- .../core/src/v3/apiClientManager/index.ts | 8 +- packages/core/src/v3/auth/environment.ts | 6 +- packages/core/src/v3/errors.test.ts | 4 +- packages/core/src/v3/errors.ts | 8 +- packages/core/src/v3/idempotencyKeys.ts | 9 +- packages/core/src/v3/inputStreams/manager.ts | 62 +- .../core/src/v3/inputStreams/noopManager.ts | 4 +- packages/core/src/v3/isomorphic/queueName.ts | 2 +- .../core/src/v3/otel/nodejsRuntimeMetrics.ts | 37 +- packages/core/src/v3/otel/tracingSDK.ts | 43 +- .../src/v3/realtimeStreams/manager.test.ts | 17 +- .../core/src/v3/realtimeStreams/manager.ts | 8 +- .../src/v3/realtimeStreams/streamsWriterV1.ts | 2 +- packages/core/src/v3/realtimeStreams/types.ts | 9 +- .../core/src/v3/resource-catalog/catalog.ts | 6 +- .../core/src/v3/resource-catalog/index.ts | 6 +- .../resource-catalog/noopResourceCatalog.ts | 6 +- .../standardResourceCatalog.ts | 11 +- .../supervisor/queueConsumer.test.ts | 8 +- .../supervisor/queueConsumer.ts | 15 +- .../v3/runEngineWorker/supervisor/session.ts | 5 +- .../core/src/v3/runMetadata/noopManager.ts | 8 +- packages/core/src/v3/schemas/build.ts | 8 +- packages/core/src/v3/serverOnly/httpServer.ts | 10 +- .../core/src/v3/serverOnly/idempotencyKeys.ts | 7 +- packages/core/src/v3/sessionStreams/index.ts | 12 +- .../src/v3/sessionStreams/manager.test.ts | 24 +- .../core/src/v3/sessionStreams/manager.ts | 30 +- .../core/src/v3/sessionStreams/noopManager.ts | 6 +- packages/core/src/v3/sessionStreams/types.ts | 12 +- .../core/src/v3/taskContext/otelProcessors.ts | 8 +- .../core/src/v3/test/mock-task-context.ts | 6 +- .../src/v3/test/test-input-stream-manager.ts | 4 +- .../v3/test/test-session-stream-manager.ts | 23 +- packages/core/src/v3/timeout/api.ts | 4 +- packages/core/src/v3/timeout/types.ts | 4 +- packages/core/src/v3/types/schemas.ts | 26 +- packages/core/src/v3/types/tasks.ts | 88 +- packages/core/src/v3/types/tools.ts | 4 +- packages/core/src/v3/utils/durations.ts | 4 +- packages/core/src/v3/utils/gitBranch.ts | 2 +- .../src/v3/utils/reconnectBackoff.test.ts | 4 +- .../core/src/v3/utils/structuredLogger.ts | 4 +- packages/core/src/v3/waitpoints/index.ts | 8 +- packages/core/src/v3/workers/taskExecutor.ts | 4 +- packages/core/test/errors.test.ts | 10 +- .../test/externalSpanExporterWrapper.test.ts | 5 +- packages/core/test/flattenAttributes.test.ts | 20 +- .../core/test/recordSpanException.test.ts | 5 +- packages/core/test/resourceCatalog.test.ts | 44 +- packages/core/test/skillCatalog.test.ts | 7 +- packages/plugins/src/rbac.ts | 9 +- packages/plugins/src/sso.ts | 9 +- packages/redis-worker/package.json | 2 +- packages/redis-worker/src/fair-queue/index.ts | 14 +- .../redis-worker/src/fair-queue/scheduler.ts | 1 - .../src/fair-queue/schedulers/drr.ts | 11 +- .../src/fair-queue/schedulers/index.ts | 1 - .../src/fair-queue/schedulers/roundRobin.ts | 1 - .../src/fair-queue/schedulers/weighted.ts | 7 +- .../redis-worker/src/fair-queue/telemetry.ts | 1 - .../src/fair-queue/tests/drr.test.ts | 548 +- .../src/fair-queue/tests/fairQueue.test.ts | 2 - .../fair-queue/tests/raceConditions.test.ts | 7 +- .../fair-queue/tests/tenantDispatch.test.ts | 5 +- .../src/fair-queue/tests/visibility.test.ts | 61 +- .../redis-worker/src/fair-queue/visibility.ts | 4 +- .../redis-worker/src/mollifier/buffer.test.ts | 738 +- packages/redis-worker/src/mollifier/buffer.ts | 78 +- .../src/mollifier/drainer.test.ts | 558 +- .../redis-worker/src/mollifier/drainer.ts | 19 +- .../redis-worker/src/mollifier/schemas.ts | 5 +- packages/redis-worker/src/utils.ts | 4 +- packages/redis-worker/src/worker.ts | 47 +- packages/rsc/src/build.ts | 2 +- packages/schema-to-json/tsconfig.json | 2 +- packages/schema-to-json/vitest.config.ts | 6 +- packages/trigger-sdk/src/v3/ai-shared.ts | 29 +- packages/trigger-sdk/src/v3/ai.ts | 1823 +++-- packages/trigger-sdk/src/v3/chat-client.ts | 67 +- packages/trigger-sdk/src/v3/chat-react.ts | 5 +- .../trigger-sdk/src/v3/chat-server.test.ts | 69 +- packages/trigger-sdk/src/v3/chat-server.ts | 17 +- packages/trigger-sdk/src/v3/chat.test.ts | 53 +- packages/trigger-sdk/src/v3/chat.ts | 24 +- .../trigger-sdk/src/v3/idempotencyKeys.ts | 6 +- packages/trigger-sdk/src/v3/prompt.ts | 57 +- .../trigger-sdk/src/v3/promptManagement.ts | 51 +- packages/trigger-sdk/src/v3/retry.ts | 9 +- packages/trigger-sdk/src/v3/runs.ts | 8 +- .../trigger-sdk/src/v3/schedules/index.ts | 6 +- packages/trigger-sdk/src/v3/schemas.ts | 2 +- packages/trigger-sdk/src/v3/sessions.ts | 11 +- packages/trigger-sdk/src/v3/shared.test.ts | 1 - packages/trigger-sdk/src/v3/shared.ts | 36 +- packages/trigger-sdk/src/v3/skill.ts | 5 +- packages/trigger-sdk/src/v3/streams.test.ts | 94 +- packages/trigger-sdk/src/v3/streams.ts | 26 +- .../src/v3/test/mock-chat-agent.ts | 179 +- .../src/v3/test/test-session-handle.ts | 49 +- .../trigger-sdk/src/v3/triggerClient.test.ts | 2 +- .../trigger-sdk/test/chat-snapshot.test.ts | 50 +- .../trigger-sdk/test/chatHandover.test.ts | 22 +- .../test/chatHandoverBackends.test.ts | 18 +- packages/trigger-sdk/test/merge-by-id.test.ts | 22 +- .../trigger-sdk/test/mockChatAgent.test.ts | 48 +- .../trigger-sdk/test/promptCaching.test.ts | 8 +- .../trigger-sdk/test/recovery-boot.test.ts | 52 +- .../test/replay-session-in.test.ts | 14 +- .../test/replay-session-out.test.ts | 42 +- packages/trigger-sdk/test/wire-shape.test.ts | 32 +- packages/trigger-sdk/vitest.config.ts | 1 - rules/manifest.json | 2 +- scripts/bundleSdkDocs.ts | 4 +- scripts/generate-github-release.mjs | 16 +- scripts/recover-stuck-runs.ts | 12 +- scripts/stamp-preview-version.mjs | 4 +- server.json | 2 +- 814 files changed, 18209 insertions(+), 17774 deletions(-) diff --git a/.github/labeler.yml b/.github/labeler.yml index 279bab91a79..6760c37bcd0 100644 --- a/.github/labeler.yml +++ b/.github/labeler.yml @@ -9,4 +9,4 @@ - any: ["**/*.md"] "šŸ“Œ area: ci": - - any: [".github/**/*"] \ No newline at end of file + - any: [".github/**/*"] diff --git a/.github/workflows/dependabot-critical-alerts.yml b/.github/workflows/dependabot-critical-alerts.yml index e69e9c0af7b..9a61387324d 100644 --- a/.github/workflows/dependabot-critical-alerts.yml +++ b/.github/workflows/dependabot-critical-alerts.yml @@ -2,7 +2,7 @@ name: Dependabot Critical Alerts on: schedule: - - cron: "0 8 * * *" # Daily 08:00 UTC + - cron: "0 8 * * *" # Daily 08:00 UTC workflow_dispatch: inputs: severity: diff --git a/.github/workflows/dependabot-weekly-summary.yml b/.github/workflows/dependabot-weekly-summary.yml index 43463b488e4..d7b489d55da 100644 --- a/.github/workflows/dependabot-weekly-summary.yml +++ b/.github/workflows/dependabot-weekly-summary.yml @@ -2,7 +2,7 @@ name: Dependabot Weekly Summary on: schedule: - - cron: "0 8 * * 1" # Mon 08:00 UTC + - cron: "0 8 * * 1" # Mon 08:00 UTC workflow_dispatch: # Single-purpose monitoring workflow; serialise on workflow name only - we never @@ -12,9 +12,9 @@ concurrency: cancel-in-progress: false permissions: - contents: read # gh CLI baseline - pull-requests: read # gh pr list (open dependabot PRs) - actions: read # gh run list / view (parse latest dependabot run logs) + contents: read # gh CLI baseline + pull-requests: read # gh pr list (open dependabot PRs) + actions: read # gh run list / view (parse latest dependabot run logs) jobs: summary: diff --git a/.github/workflows/release-helm.yml b/.github/workflows/release-helm.yml index 6dbfee7d0c8..d21c62de8be 100644 --- a/.github/workflows/release-helm.yml +++ b/.github/workflows/release-helm.yml @@ -3,17 +3,17 @@ name: 🧭 Helm Chart Release on: push: tags: - - 'helm-v*' + - "helm-v*" workflow_call: inputs: chart_version: - description: 'Chart version to release' + description: "Chart version to release" required: true type: string workflow_dispatch: inputs: chart_version: - description: 'Chart version to release' + description: "Chart version to release" required: true type: string @@ -58,7 +58,7 @@ jobs: - name: Validate manifests uses: docker://ghcr.io/yannh/kubeconform:v0.7.0@sha256:85dbef6b4b312b99133decc9c6fc9495e9fc5f92293d4ff3b7e1b30f5611823c with: - entrypoint: '/kubeconform' + entrypoint: "/kubeconform" args: "-summary -output json ./helm-output" release: @@ -134,7 +134,7 @@ jobs: run: | VERSION="${STEPS_VERSION_OUTPUTS_VERSION}" CHART_PACKAGE="/tmp/${{ env.CHART_NAME }}-${VERSION}.tgz" - + # Push to GHCR OCI registry helm push "$CHART_PACKAGE" "oci://${{ env.REGISTRY }}/${{ github.repository_owner }}/charts" env: @@ -153,7 +153,7 @@ jobs: oci://${{ env.REGISTRY }}/${{ github.repository_owner }}/charts/${{ env.CHART_NAME }} \ --version "${{ steps.version.outputs.version }}" ``` - + ### Changes See commit history for detailed changes in this release. files: | diff --git a/.github/workflows/workflow-checks.yml b/.github/workflows/workflow-checks.yml index e99a4d33427..62406671fc5 100644 --- a/.github/workflows/workflow-checks.yml +++ b/.github/workflows/workflow-checks.yml @@ -4,14 +4,14 @@ on: push: branches: [main] paths: - - '.github/workflows/**' - - '.github/actions/**' - - '.github/zizmor.yml' + - ".github/workflows/**" + - ".github/actions/**" + - ".github/zizmor.yml" pull_request: paths: - - '.github/workflows/**' - - '.github/actions/**' - - '.github/zizmor.yml' + - ".github/workflows/**" + - ".github/actions/**" + - ".github/zizmor.yml" permissions: {} diff --git a/.github/zizmor.yml b/.github/zizmor.yml index 2fcbb540127..e7920e8cf17 100644 --- a/.github/zizmor.yml +++ b/.github/zizmor.yml @@ -2,4 +2,4 @@ rules: unpinned-uses: config: policies: - '*': hash-pin + "*": hash-pin diff --git a/apps/coordinator/package.json b/apps/coordinator/package.json index 3b4240bd37d..446606a44c8 100644 --- a/apps/coordinator/package.json +++ b/apps/coordinator/package.json @@ -27,4 +27,4 @@ "esbuild": "^0.19.11", "tsx": "^4.7.0" } -} \ No newline at end of file +} diff --git a/apps/docker-provider/package.json b/apps/docker-provider/package.json index f3e4015ef08..aa812c68d4a 100644 --- a/apps/docker-provider/package.json +++ b/apps/docker-provider/package.json @@ -24,4 +24,4 @@ "esbuild": "^0.19.11", "tsx": "^4.7.0" } -} \ No newline at end of file +} diff --git a/apps/kubernetes-provider/package.json b/apps/kubernetes-provider/package.json index 6cb26e2c70f..b4a4307abbb 100644 --- a/apps/kubernetes-provider/package.json +++ b/apps/kubernetes-provider/package.json @@ -25,4 +25,4 @@ "esbuild": "^0.19.11", "tsx": "^4.7.0" } -} \ No newline at end of file +} diff --git a/apps/supervisor/src/backpressure/k8sPodCountSignalSource.test.ts b/apps/supervisor/src/backpressure/k8sPodCountSignalSource.test.ts index 8857372a042..8c7104cfb14 100644 --- a/apps/supervisor/src/backpressure/k8sPodCountSignalSource.test.ts +++ b/apps/supervisor/src/backpressure/k8sPodCountSignalSource.test.ts @@ -73,9 +73,9 @@ describe("K8sPodCountSignalSource", () => { engageThreshold: 10000, releaseThreshold: 5000, }); - expect((await source.read()).engaged).toBe(true); // engage + expect((await source.read()).engaged).toBe(true); // engage count = 7000; - expect((await source.read()).engaged).toBe(true); // band -> still engaged + expect((await source.read()).engaged).toBe(true); // band -> still engaged count = 4999; expect((await source.read()).engaged).toBe(false); // below release -> off count = 7000; diff --git a/apps/supervisor/src/backpressure/redisBackpressureSignalSource.test.ts b/apps/supervisor/src/backpressure/redisBackpressureSignalSource.test.ts index 77a7457b13c..dc8040a4c5e 100644 --- a/apps/supervisor/src/backpressure/redisBackpressureSignalSource.test.ts +++ b/apps/supervisor/src/backpressure/redisBackpressureSignalSource.test.ts @@ -49,14 +49,17 @@ describe("RedisBackpressureSignalSource", () => { } }); - redisTest("returns null for valid JSON of the wrong shape (fail-open)", async ({ redisOptions }) => { - const redis = new Redis(redisOptions); - try { - await redis.set(KEY, JSON.stringify({ foo: "bar" })); - const source = new RedisBackpressureSignalSource(redis, KEY); - expect(await source.read()).toBeNull(); - } finally { - await redis.quit(); + redisTest( + "returns null for valid JSON of the wrong shape (fail-open)", + async ({ redisOptions }) => { + const redis = new Redis(redisOptions); + try { + await redis.set(KEY, JSON.stringify({ foo: "bar" })); + const source = new RedisBackpressureSignalSource(redis, KEY); + expect(await source.read()).toBeNull(); + } finally { + await redis.quit(); + } } - }); + ); }); diff --git a/apps/supervisor/src/env.ts b/apps/supervisor/src/env.ts index 10e8f9b62b3..2cb1bfb9a74 100644 --- a/apps/supervisor/src/env.ts +++ b/apps/supervisor/src/env.ts @@ -75,9 +75,21 @@ export const Env = z TRIGGER_DEQUEUE_BACKPRESSURE_REDIS_TLS_DISABLED: BoolEnv.default(false), TRIGGER_DEQUEUE_BACKPRESSURE_POD_COUNT_ENABLED: BoolEnv.default(false), TRIGGER_DEQUEUE_BACKPRESSURE_POD_COUNT_DRY_RUN: BoolEnv.default(true), - TRIGGER_DEQUEUE_BACKPRESSURE_POD_COUNT_ENGAGE: z.coerce.number().int().positive().default(10_000), - TRIGGER_DEQUEUE_BACKPRESSURE_POD_COUNT_RELEASE: z.coerce.number().int().positive().default(5_000), - TRIGGER_DEQUEUE_BACKPRESSURE_POD_COUNT_REFRESH_MS: z.coerce.number().int().positive().default(5_000), + TRIGGER_DEQUEUE_BACKPRESSURE_POD_COUNT_ENGAGE: z.coerce + .number() + .int() + .positive() + .default(10_000), + TRIGGER_DEQUEUE_BACKPRESSURE_POD_COUNT_RELEASE: z.coerce + .number() + .int() + .positive() + .default(5_000), + TRIGGER_DEQUEUE_BACKPRESSURE_POD_COUNT_REFRESH_MS: z.coerce + .number() + .int() + .positive() + .default(5_000), // Hard timeout on the apiserver /metrics scrape. A hung request would otherwise // never settle and freeze the monitor's refresh loop (fail-open silently). TRIGGER_DEQUEUE_BACKPRESSURE_POD_COUNT_SCRAPE_TIMEOUT_MS: z.coerce @@ -350,7 +362,10 @@ export const Env = z path: ["TRIGGER_WORKLOAD_API_DOMAIN"], }); } - if (data.TRIGGER_DEQUEUE_BACKPRESSURE_ENABLED && !data.TRIGGER_DEQUEUE_BACKPRESSURE_REDIS_HOST) { + if ( + data.TRIGGER_DEQUEUE_BACKPRESSURE_ENABLED && + !data.TRIGGER_DEQUEUE_BACKPRESSURE_REDIS_HOST + ) { ctx.addIssue({ code: z.ZodIssueCode.custom, message: diff --git a/apps/supervisor/src/index.ts b/apps/supervisor/src/index.ts index d2bc82c13b9..833448ad873 100644 --- a/apps/supervisor/src/index.ts +++ b/apps/supervisor/src/index.ts @@ -274,7 +274,10 @@ class ManagedSupervisor { rampMs: env.TRIGGER_DEQUEUE_BACKPRESSURE_RAMP_MS, dryRun: env.TRIGGER_DEQUEUE_BACKPRESSURE_POD_COUNT_DRY_RUN, logger: this.logger, - metrics: new BackpressureMetrics({ register, prefix: "supervisor_backpressure_pod_count" }), + metrics: new BackpressureMetrics({ + register, + prefix: "supervisor_backpressure_pod_count", + }), }) ); this.logger.log("šŸ›‘ Dequeue backpressure enabled (pod-count source)", { diff --git a/apps/supervisor/src/services/computeSnapshotService.test.ts b/apps/supervisor/src/services/computeSnapshotService.test.ts index b039b63bd4d..44a13a4bdd3 100644 --- a/apps/supervisor/src/services/computeSnapshotService.test.ts +++ b/apps/supervisor/src/services/computeSnapshotService.test.ts @@ -10,7 +10,9 @@ const DELAY_MS = 200; const SETTLE_MS = 600; function createService() { - const snapshot = vi.fn(async (_opts: { runnerId: string; metadata: Record }) => true); + const snapshot = vi.fn( + async (_opts: { runnerId: string; metadata: Record }) => true + ); const computeManager = { snapshotDelayMs: DELAY_MS, @@ -97,9 +99,7 @@ describe("ComputeSnapshotService", () => { expect(service.cancel("run_1", "runner-b")).toBe(false); await vi.waitFor(() => expect(snapshot).toHaveBeenCalledTimes(1), { timeout: 2_000 }); - expect(snapshot).toHaveBeenCalledWith( - expect.objectContaining({ runnerId: "runner-a" }) - ); + expect(snapshot).toHaveBeenCalledWith(expect.objectContaining({ runnerId: "runner-a" })); } finally { service.stop(); } diff --git a/apps/supervisor/src/services/otlpTraceService.test.ts b/apps/supervisor/src/services/otlpTraceService.test.ts index baf3bd90306..95053021ca1 100644 --- a/apps/supervisor/src/services/otlpTraceService.test.ts +++ b/apps/supervisor/src/services/otlpTraceService.test.ts @@ -31,9 +31,7 @@ describe("buildPayload", () => { expect(triggerAttr).toEqual({ key: "$trigger", value: { boolValue: true } }); // Resource attributes - const envAttr = resourceSpan.resource.attributes.find( - (a) => a.key === "ctx.environment.id" - ); + const envAttr = resourceSpan.resource.attributes.find((a) => a.key === "ctx.environment.id"); expect(envAttr).toEqual({ key: "ctx.environment.id", value: { stringValue: "env_123" }, diff --git a/apps/supervisor/src/services/warmStartVerificationService.test.ts b/apps/supervisor/src/services/warmStartVerificationService.test.ts index 994c678b4b8..4a5f58875c2 100644 --- a/apps/supervisor/src/services/warmStartVerificationService.test.ts +++ b/apps/supervisor/src/services/warmStartVerificationService.test.ts @@ -19,10 +19,7 @@ function makeMessage(runFriendlyId = "run_1"): DequeuedMessage { } as unknown as DequeuedMessage; } -function createService(opts: { - latestSnapshotId?: string; - probeError?: boolean; -}) { +function createService(opts: { latestSnapshotId?: string; probeError?: boolean }) { const getLatestSnapshot = vi.fn(async (_runId: string) => opts.probeError ? { success: false as const, error: "connection refused" } diff --git a/apps/supervisor/src/wideEvents/index.ts b/apps/supervisor/src/wideEvents/index.ts index 4eda429a50a..6e61d85896f 100644 --- a/apps/supervisor/src/wideEvents/index.ts +++ b/apps/supervisor/src/wideEvents/index.ts @@ -11,12 +11,7 @@ export { type Env, isValidRequestId, newState, type NewStateOptions } from "./ne export { emit, EmitMessage } from "./emit.js"; export { parseTraceId } from "./traceparent.js"; export { fromContext, wideEventStorage } from "./context.js"; -export { - type PhaseOpt, - recordPhase, - recordPhaseSince, - timePhase, -} from "./record.js"; +export { type PhaseOpt, recordPhase, recordPhaseSince, timePhase } from "./record.js"; export { emitOneShot, runWideEvent, diff --git a/apps/supervisor/src/wideEvents/middleware.test.ts b/apps/supervisor/src/wideEvents/middleware.test.ts index afb59f43d6e..a431df4ada5 100644 --- a/apps/supervisor/src/wideEvents/middleware.test.ts +++ b/apps/supervisor/src/wideEvents/middleware.test.ts @@ -124,7 +124,8 @@ describe("runWideEvent", () => { { service: "supervisor", env: {}, - enabled: true, op: "test", + enabled: true, + op: "test", setup: (state) => { state.meta.run_id = "run_abc"; state.extras.iteration = "dequeue"; @@ -158,16 +159,13 @@ describe("runWideEvent", () => { const lines = await captureStdout(async () => { await Promise.all( ["a", "b", "c"].map((tag) => - runWideEvent( - { service: "supervisor", env: {}, enabled: true, op: "test" }, - async () => { - const s = fromContext(); - if (!s) throw new Error("no state"); - s.meta.tag = tag; - await new Promise((r) => setTimeout(r, 5)); - expect(s.meta.tag).toBe(tag); - } - ) + runWideEvent({ service: "supervisor", env: {}, enabled: true, op: "test" }, async () => { + const s = fromContext(); + if (!s) throw new Error("no state"); + s.meta.tag = tag; + await new Promise((r) => setTimeout(r, 5)); + expect(s.meta.tag).toBe(tag); + }) ) ); }); @@ -182,7 +180,8 @@ describe("emitOneShot", () => { emitOneShot({ service: "supervisor", env: {}, - enabled: true, op: "test", + enabled: true, + op: "test", populate: (s) => { s.meta.run_id = "run_abc"; s.extras.event = "run:start"; diff --git a/apps/supervisor/src/workloadManager/compute.test.ts b/apps/supervisor/src/workloadManager/compute.test.ts index ea5ddabf285..95a9ca2f3b0 100644 --- a/apps/supervisor/src/workloadManager/compute.test.ts +++ b/apps/supervisor/src/workloadManager/compute.test.ts @@ -15,9 +15,7 @@ describe("runnerNameForAttempt", () => { describe("isRetryableCreateError", () => { it("retries statuses where the create definitely did not commit", () => { - expect(isRetryableCreateError(new ComputeClientError(500, "tap busy", "http://gw"))).toBe( - true - ); + expect(isRetryableCreateError(new ComputeClientError(500, "tap busy", "http://gw"))).toBe(true); expect(isRetryableCreateError(new ComputeClientError(503, "no placement", "http://gw"))).toBe( true ); diff --git a/apps/supervisor/src/workloadManager/compute.ts b/apps/supervisor/src/workloadManager/compute.ts index 7a4270513cf..857e129a83f 100644 --- a/apps/supervisor/src/workloadManager/compute.ts +++ b/apps/supervisor/src/workloadManager/compute.ts @@ -250,9 +250,7 @@ export class ComputeWorkloadManager implements WorkloadManager { // name registered, so subsequent attempts use a suffixed name. let suffixAttempts = false; for (; attempt <= this.createMaxAttempts; attempt++) { - const attemptRunnerId = suffixAttempts - ? runnerNameForAttempt(runnerId, attempt) - : runnerId; + const attemptRunnerId = suffixAttempts ? runnerNameForAttempt(runnerId, attempt) : runnerId; [error, data] = await tryCatch( this.compute.instances.create( attemptRunnerId === runnerId diff --git a/apps/supervisor/src/workloadManager/kubernetes.ts b/apps/supervisor/src/workloadManager/kubernetes.ts index 9e79fff76c2..762860104bd 100644 --- a/apps/supervisor/src/workloadManager/kubernetes.ts +++ b/apps/supervisor/src/workloadManager/kubernetes.ts @@ -431,7 +431,8 @@ export class KubernetesWorkloadManager implements WorkloadManager { // Only large machine affinity produces hard requirements (non-large runs must stay off the large pool). // Schedule affinity is soft both ways. const required = [ - ...(largeNodeAffinity?.requiredDuringSchedulingIgnoredDuringExecution?.nodeSelectorTerms ?? []), + ...(largeNodeAffinity?.requiredDuringSchedulingIgnoredDuringExecution?.nodeSelectorTerms ?? + []), ]; const hasNodeAffinity = preferred.length > 0 || required.length > 0; @@ -443,7 +444,9 @@ export class KubernetesWorkloadManager implements WorkloadManager { return { ...(hasNodeAffinity && { nodeAffinity: { - ...(preferred.length > 0 && { preferredDuringSchedulingIgnoredDuringExecution: preferred }), + ...(preferred.length > 0 && { + preferredDuringSchedulingIgnoredDuringExecution: preferred, + }), ...(required.length > 0 && { requiredDuringSchedulingIgnoredDuringExecution: { nodeSelectorTerms: required }, }), @@ -497,7 +500,10 @@ export class KubernetesWorkloadManager implements WorkloadManager { } #getScheduleNodeAffinityRules(isScheduledRun: boolean): k8s.V1NodeAffinity | undefined { - if (!env.KUBERNETES_SCHEDULED_RUN_AFFINITY_ENABLED || !env.KUBERNETES_SCHEDULED_RUN_AFFINITY_POOL_LABEL_VALUE) { + if ( + !env.KUBERNETES_SCHEDULED_RUN_AFFINITY_ENABLED || + !env.KUBERNETES_SCHEDULED_RUN_AFFINITY_POOL_LABEL_VALUE + ) { return undefined; } diff --git a/apps/supervisor/src/workloadManager/types.ts b/apps/supervisor/src/workloadManager/types.ts index 86199afe469..ee759cb8a79 100644 --- a/apps/supervisor/src/workloadManager/types.ts +++ b/apps/supervisor/src/workloadManager/types.ts @@ -1,4 +1,9 @@ -import type { EnvironmentType, MachinePreset, PlacementTag, RunAnnotations } from "@trigger.dev/core/v3"; +import type { + EnvironmentType, + MachinePreset, + PlacementTag, + RunAnnotations, +} from "@trigger.dev/core/v3"; export interface WorkloadManagerOptions { workloadApiProtocol: "http" | "https"; diff --git a/apps/supervisor/src/workloadServer/index.ts b/apps/supervisor/src/workloadServer/index.ts index 5dd1a79cc9a..7397313080a 100644 --- a/apps/supervisor/src/workloadServer/index.ts +++ b/apps/supervisor/src/workloadServer/index.ts @@ -317,9 +317,7 @@ export class WorkloadServer extends EventEmitter { return; } - reply.json( - completeResponse.data satisfies WorkloadRunAttemptCompleteResponseBody - ); + reply.json(completeResponse.data satisfies WorkloadRunAttemptCompleteResponseBody); return; } ), @@ -566,7 +564,9 @@ export class WorkloadServer extends EventEmitter { } reply.json( - dequeueResponse.data.map(legacifyCheckpointType) satisfies WorkloadDequeueFromVersionResponseBody + dequeueResponse.data.map( + legacifyCheckpointType + ) satisfies WorkloadDequeueFromVersionResponseBody ); } ), @@ -613,16 +613,22 @@ export class WorkloadServer extends EventEmitter { httpServer.route("/api/v1/compute/snapshot-complete", "POST", { bodySchema: SnapshotCallbackPayloadSchema, handler: async (ctx) => - this.wideRoute(ctx, "snapshot.callback", "/api/v1/compute/snapshot-complete", "POST", async () => { - const { reply, body } = ctx; - if (!this.snapshotService) { - reply.empty(404); - return; - } + this.wideRoute( + ctx, + "snapshot.callback", + "/api/v1/compute/snapshot-complete", + "POST", + async () => { + const { reply, body } = ctx; + if (!this.snapshotService) { + reply.empty(404); + return; + } - const result = await this.snapshotService.handleCallback(body); - reply.empty(result.status); - }), + const result = await this.snapshotService.handleCallback(body); + reply.empty(result.status); + } + ), }); return httpServer; diff --git a/apps/webapp/app/assets/icons/AIPenIcon.tsx b/apps/webapp/app/assets/icons/AIPenIcon.tsx index 65f6fdb2f38..146edd0e6d2 100644 --- a/apps/webapp/app/assets/icons/AIPenIcon.tsx +++ b/apps/webapp/app/assets/icons/AIPenIcon.tsx @@ -19,13 +19,7 @@ export function AIPenIcon({ className }: { className?: string }) { stroke="currentColor" strokeWidth="2" /> - + ); } diff --git a/apps/webapp/app/assets/icons/AiProviderIcons.tsx b/apps/webapp/app/assets/icons/AiProviderIcons.tsx index 2be3fe38ed7..418cdeff569 100644 --- a/apps/webapp/app/assets/icons/AiProviderIcons.tsx +++ b/apps/webapp/app/assets/icons/AiProviderIcons.tsx @@ -147,7 +147,12 @@ export function CerebrasIcon({ className }: IconProps) { export function MistralIcon({ className }: IconProps) { return ( - + @@ -174,4 +179,3 @@ export function AzureIcon({ className }: IconProps) { ); } - diff --git a/apps/webapp/app/assets/icons/AttemptIcon.tsx b/apps/webapp/app/assets/icons/AttemptIcon.tsx index de2a886b9d5..4b6c7f03698 100644 --- a/apps/webapp/app/assets/icons/AttemptIcon.tsx +++ b/apps/webapp/app/assets/icons/AttemptIcon.tsx @@ -8,22 +8,8 @@ export function AttemptIcon({ className }: { className?: string }) { fill="none" xmlns="http://www.w3.org/2000/svg" > - - + + - + ); } diff --git a/apps/webapp/app/assets/icons/FunctionIcon.tsx b/apps/webapp/app/assets/icons/FunctionIcon.tsx index 2defe9c2f8d..11b630ac2fa 100644 --- a/apps/webapp/app/assets/icons/FunctionIcon.tsx +++ b/apps/webapp/app/assets/icons/FunctionIcon.tsx @@ -8,15 +8,7 @@ export function FunctionIcon({ className }: { className?: string }) { fill="none" xmlns="http://www.w3.org/2000/svg" > - + - + - + setHovered(true)} onMouseLeave={() => setHovered(false)} > - + - + + diff --git a/apps/webapp/app/assets/icons/StreamsIcon.tsx b/apps/webapp/app/assets/icons/StreamsIcon.tsx index 73cc480f4d4..8deb7a19c9e 100644 --- a/apps/webapp/app/assets/icons/StreamsIcon.tsx +++ b/apps/webapp/app/assets/icons/StreamsIcon.tsx @@ -1,10 +1,24 @@ export function StreamsIcon({ className }: { className?: string }) { return ( - - - - - + + + + + ); } - diff --git a/apps/webapp/app/assets/icons/TextSquareIcon.tsx b/apps/webapp/app/assets/icons/TextSquareIcon.tsx index d25faf6d0ba..cffb0aa9d2e 100644 --- a/apps/webapp/app/assets/icons/TextSquareIcon.tsx +++ b/apps/webapp/app/assets/icons/TextSquareIcon.tsx @@ -9,10 +9,42 @@ export function TextSquareIcon({ className }: { className?: string }) { xmlns="http://www.w3.org/2000/svg" > - - - - + + + + ); } diff --git a/apps/webapp/app/clientBeforeFirstRender.ts b/apps/webapp/app/clientBeforeFirstRender.ts index 3275c54423a..5b5b6404221 100644 --- a/apps/webapp/app/clientBeforeFirstRender.ts +++ b/apps/webapp/app/clientBeforeFirstRender.ts @@ -22,10 +22,7 @@ function cleanupLegacyResizablePanelStorage() { const toRemove: string[] = []; for (let i = 0; i < window.localStorage.length; i++) { const key = window.localStorage.key(i); - if ( - key && - (key.startsWith("panel-group-react-aria") || key === "panel-run-parent-v2") - ) { + if (key && (key.startsWith("panel-group-react-aria") || key === "panel-run-parent-v2")) { toRemove.push(key); } } diff --git a/apps/webapp/app/components/AskAI.tsx b/apps/webapp/app/components/AskAI.tsx index 814d4649c8f..bf76654cced 100644 --- a/apps/webapp/app/components/AskAI.tsx +++ b/apps/webapp/app/components/AskAI.tsx @@ -134,11 +134,7 @@ function AskAIProvider({ websiteId, isCollapsed = false }: AskAIProviderProps) { - + Ask AI diff --git a/apps/webapp/app/components/BlankStatePanels.tsx b/apps/webapp/app/components/BlankStatePanels.tsx index c52991d5435..04959680fdb 100644 --- a/apps/webapp/app/components/BlankStatePanels.tsx +++ b/apps/webapp/app/components/BlankStatePanels.tsx @@ -207,17 +207,17 @@ export function SessionsNone() { } > - A session is a stateful execution of an agent, with two-way streaming and durable - compute. A single session can have multiple runs associated with it, so one conversation - can span many task triggers. The input stream carries incoming user messages, and the - output stream carries everything the agent produces, including AI generation parts (text, - reasoning, tool calls, etc.) and any custom data parts your task emits. + A session is a stateful execution of an agent, with two-way streaming and durable compute. A + single session can have multiple runs associated with it, so one conversation can span many + task triggers. The input stream carries incoming user messages, and the output stream + carries everything the agent produces, including AI generation parts (text, reasoning, tool + calls, etc.) and any custom data parts your task emits. The easiest way to create one is to trigger a chat.agent task, which is built on sessions and handles the chat turn loop for you. You can also call{" "} - sessions.start() directly for non-chat patterns like agent - inboxes, approval flows, or server-to-server streaming. + sessions.start() directly for non-chat patterns like agent inboxes, + approval flows, or server-to-server streaming. ); diff --git a/apps/webapp/app/components/DevPresence.tsx b/apps/webapp/app/components/DevPresence.tsx index 7a99dab37a5..addb85e14f7 100644 --- a/apps/webapp/app/components/DevPresence.tsx +++ b/apps/webapp/app/components/DevPresence.tsx @@ -154,8 +154,8 @@ export function DevPresencePanel({ isConnected }: { isConnected: boolean | undef {isConnected === undefined ? "Checking connection..." : isConnected - ? "Your dev server is connected" - : "Your dev server is not connected"} + ? "Your dev server is connected" + : "Your dev server is not connected"}
@@ -169,8 +169,8 @@ export function DevPresencePanel({ isConnected }: { isConnected: boolean | undef {isConnected === undefined ? "Checking connection..." : isConnected - ? "Your local dev server is connected to Trigger.dev" - : "Your local dev server is not connected to Trigger.dev"} + ? "Your local dev server is connected to Trigger.dev" + : "Your local dev server is not connected to Trigger.dev"}
{isConnected ? null : ( diff --git a/apps/webapp/app/components/LoginPageLayout.tsx b/apps/webapp/app/components/LoginPageLayout.tsx index 3e42cd6894f..323faf4ea26 100644 --- a/apps/webapp/app/components/LoginPageLayout.tsx +++ b/apps/webapp/app/components/LoginPageLayout.tsx @@ -63,8 +63,8 @@ export function LoginPageLayout({ children }: { children: React.ReactNode }) {
{children}
- Having login issues? Email us{" "} - or ask us in Discord + Having login issues? Email us or{" "} + ask us in Discord diff --git a/apps/webapp/app/components/SetupCommands.tsx b/apps/webapp/app/components/SetupCommands.tsx index accb2f65a8f..d219b0be721 100644 --- a/apps/webapp/app/components/SetupCommands.tsx +++ b/apps/webapp/app/components/SetupCommands.tsx @@ -209,7 +209,10 @@ export function TriggerLoginStepV3({ title }: TabsProps) { ); } -export function TriggerDeployStep({ title, environment }: TabsProps & { environment: { type: string } }) { +export function TriggerDeployStep({ + title, + environment, +}: TabsProps & { environment: { type: string } }) { const triggerCliTag = useTriggerCliTag(); const { activePackageManager, setActivePackageManager } = usePackageManager(); diff --git a/apps/webapp/app/components/Shortcuts.tsx b/apps/webapp/app/components/Shortcuts.tsx index 4702f37239c..63b5fddf715 100644 --- a/apps/webapp/app/components/Shortcuts.tsx +++ b/apps/webapp/app/components/Shortcuts.tsx @@ -4,13 +4,7 @@ import { useShortcutKeys } from "~/hooks/useShortcutKeys"; import { Button } from "./primitives/Buttons"; import { Header3 } from "./primitives/Headers"; import { Paragraph } from "./primitives/Paragraph"; -import { - Sheet, - SheetContent, - SheetHeader, - SheetTitle, - SheetTrigger -} from "./primitives/SheetV3"; +import { Sheet, SheetContent, SheetHeader, SheetTitle, SheetTrigger } from "./primitives/SheetV3"; import { ShortcutKey } from "./primitives/ShortcutKey"; export function Shortcuts() { @@ -83,7 +77,7 @@ function ShortcutContent() { - + diff --git a/apps/webapp/app/components/admin/backOffice/ApiRateLimitSection.server.ts b/apps/webapp/app/components/admin/backOffice/ApiRateLimitSection.server.ts index 4855c4c2465..7de475bda8e 100644 --- a/apps/webapp/app/components/admin/backOffice/ApiRateLimitSection.server.ts +++ b/apps/webapp/app/components/admin/backOffice/ApiRateLimitSection.server.ts @@ -40,9 +40,7 @@ export const apiRateLimitDomain: RateLimitDomain = { }, }; -export function resolveEffectiveApiRateLimit( - override: unknown -): EffectiveRateLimit { +export function resolveEffectiveApiRateLimit(override: unknown): EffectiveRateLimit { return resolveEffectiveRateLimit(override, apiRateLimitDomain); } diff --git a/apps/webapp/app/components/admin/backOffice/ApiRateLimitSection.tsx b/apps/webapp/app/components/admin/backOffice/ApiRateLimitSection.tsx index b27956f4360..6b13bac8b4f 100644 --- a/apps/webapp/app/components/admin/backOffice/ApiRateLimitSection.tsx +++ b/apps/webapp/app/components/admin/backOffice/ApiRateLimitSection.tsx @@ -1,17 +1,8 @@ -import { - RateLimitSection, - type RateLimitWrapperProps, -} from "./RateLimitSection"; +import { RateLimitSection, type RateLimitWrapperProps } from "./RateLimitSection"; export const API_RATE_LIMIT_INTENT = "set-rate-limit"; export const API_RATE_LIMIT_SAVED_VALUE = "rate-limit"; export function ApiRateLimitSection(props: RateLimitWrapperProps) { - return ( - - ); + return ; } diff --git a/apps/webapp/app/components/admin/backOffice/BatchRateLimitSection.server.ts b/apps/webapp/app/components/admin/backOffice/BatchRateLimitSection.server.ts index 83a368094a9..3891e4fc40c 100644 --- a/apps/webapp/app/components/admin/backOffice/BatchRateLimitSection.server.ts +++ b/apps/webapp/app/components/admin/backOffice/BatchRateLimitSection.server.ts @@ -40,9 +40,7 @@ export const batchRateLimitDomain: RateLimitDomain = { }, }; -export function resolveEffectiveBatchRateLimit( - override: unknown -): EffectiveRateLimit { +export function resolveEffectiveBatchRateLimit(override: unknown): EffectiveRateLimit { return resolveEffectiveRateLimit(override, batchRateLimitDomain); } diff --git a/apps/webapp/app/components/admin/backOffice/BatchRateLimitSection.tsx b/apps/webapp/app/components/admin/backOffice/BatchRateLimitSection.tsx index 0e52124d290..64ee6a05d41 100644 --- a/apps/webapp/app/components/admin/backOffice/BatchRateLimitSection.tsx +++ b/apps/webapp/app/components/admin/backOffice/BatchRateLimitSection.tsx @@ -1,17 +1,8 @@ -import { - RateLimitSection, - type RateLimitWrapperProps, -} from "./RateLimitSection"; +import { RateLimitSection, type RateLimitWrapperProps } from "./RateLimitSection"; export const BATCH_RATE_LIMIT_INTENT = "set-batch-rate-limit"; export const BATCH_RATE_LIMIT_SAVED_VALUE = "batch-rate-limit"; export function BatchRateLimitSection(props: RateLimitWrapperProps) { - return ( - - ); + return ; } diff --git a/apps/webapp/app/components/admin/backOffice/MaxProjectsSection.tsx b/apps/webapp/app/components/admin/backOffice/MaxProjectsSection.tsx index bf8ecf83161..8aa4b5c93c9 100644 --- a/apps/webapp/app/components/admin/backOffice/MaxProjectsSection.tsx +++ b/apps/webapp/app/components/admin/backOffice/MaxProjectsSection.tsx @@ -68,9 +68,7 @@ export function MaxProjectsSection({ Limit - - {maximumProjectCount.toLocaleString()} - + {maximumProjectCount.toLocaleString()} ) : ( @@ -89,11 +87,7 @@ export function MaxProjectsSection({ {fieldError("maximumProjectCount")}
-
{isLoading ? ( diff --git a/apps/webapp/app/components/code/QueryResultsChart.tsx b/apps/webapp/app/components/code/QueryResultsChart.tsx index 2c3f1c9f2bf..97013c192a4 100644 --- a/apps/webapp/app/components/code/QueryResultsChart.tsx +++ b/apps/webapp/app/components/code/QueryResultsChart.tsx @@ -872,10 +872,7 @@ export const QueryResultsChart = memo(function QueryResultsChart({ ); // Create value formatter for tooltips and legend based on column format - const tooltipValueFormatter = useMemo( - () => createValueFormatter(yAxisFormat), - [yAxisFormat] - ); + const tooltipValueFormatter = useMemo(() => createValueFormatter(yAxisFormat), [yAxisFormat]); // Check if the group-by column has a runStatus customRenderType const groupByIsRunStatus = useMemo(() => { @@ -1181,9 +1178,7 @@ function createYAxisFormatter( if (format === "bytes" || format === "decimalBytes") { const divisor = format === "bytes" ? 1024 : 1000; const units = - format === "bytes" - ? ["B", "KiB", "MiB", "GiB", "TiB"] - : ["B", "KB", "MB", "GB", "TB"]; + format === "bytes" ? ["B", "KiB", "MiB", "GiB", "TiB"] : ["B", "KB", "MB", "GB", "TB"]; return (value: number): string => { if (value === 0) return "0 B"; // Use consistent unit for all ticks based on max value @@ -1205,8 +1200,7 @@ function createYAxisFormatter( } if (format === "durationSeconds") { - return (value: number): string => - formatDurationMilliseconds(value * 1000, { style: "short" }); + return (value: number): string => formatDurationMilliseconds(value * 1000, { style: "short" }); } if (format === "durationNs") { diff --git a/apps/webapp/app/components/code/TSQLResultsTable.tsx b/apps/webapp/app/components/code/TSQLResultsTable.tsx index 73ca07180bf..8e10f8e6faa 100644 --- a/apps/webapp/app/components/code/TSQLResultsTable.tsx +++ b/apps/webapp/app/components/code/TSQLResultsTable.tsx @@ -186,10 +186,10 @@ const fuzzyFilter: FilterFn = (row, columnId, value, addMeta) => { cellValue === null ? "NULL" : cellValue === undefined - ? "" - : typeof cellValue === "object" - ? JSON.stringify(cellValue) - : String(cellValue); + ? "" + : typeof cellValue === "object" + ? JSON.stringify(cellValue) + : String(cellValue); // Build searchable strings - formatted value (if we have column metadata) const formattedValue = meta?.outputColumn @@ -569,12 +569,8 @@ function CellValue({ if (typeof value === "string") { const spanId = row?.["span_id"]; const runPath = v3RunPathFromFriendlyId(value); - const href = typeof spanId === "string" && spanId - ? `${runPath}?span=${spanId}` - : runPath; - const tooltip = typeof spanId === "string" && spanId - ? "Jump to span" - : "Jump to run"; + const href = typeof spanId === "string" && spanId ? `${runPath}?span=${spanId}` : runPath; + const tooltip = typeof spanId === "string" && spanId ? "Jump to span" : "Jump to run"; return ( hiddenColumns?.length ? columns.filter((col) => !hiddenColumns.includes(col.name)) : columns, + () => + hiddenColumns?.length ? columns.filter((col) => !hiddenColumns.includes(col.name)) : columns, [columns, hiddenColumns] ); const columnDefs = useMemo[]>( diff --git a/apps/webapp/app/components/code/codeMirrorTheme.ts b/apps/webapp/app/components/code/codeMirrorTheme.ts index 2faed6eaa54..c9dd2f12e86 100644 --- a/apps/webapp/app/components/code/codeMirrorTheme.ts +++ b/apps/webapp/app/components/code/codeMirrorTheme.ts @@ -67,10 +67,9 @@ export function darkTheme(): Extension { }, ".cm-cursor, .cm-dropCursor": { borderLeftColor: cursor }, - "&.cm-focused .cm-selectionBackground, .cm-selectionBackground, .cm-content ::selection": - { - backgroundColor: selection, - }, + "&.cm-focused .cm-selectionBackground, .cm-selectionBackground, .cm-content ::selection": { + backgroundColor: selection, + }, ".cm-panels": { backgroundColor: darkBackground, color: ivory }, ".cm-panels.cm-panels-top": { borderBottom: "2px solid black" }, @@ -167,20 +166,14 @@ export function darkTheme(): Extension { backgroundColor: scrollbarBg, }, }, - { dark: true }, + { dark: true } ); /// The highlighting style for code in the JSON Hero theme. const jsonHeroHighlightStyle = HighlightStyle.define([ { tag: tags.keyword, color: violet }, { - tag: [ - tags.name, - tags.deleted, - tags.character, - tags.propertyName, - tags.macroName, - ], + tag: [tags.name, tags.deleted, tags.character, tags.propertyName, tags.macroName], color: lilac, }, { tag: [tags.function(tags.variableName), tags.labelName], color: malibu }, diff --git a/apps/webapp/app/components/code/tsql/index.ts b/apps/webapp/app/components/code/tsql/index.ts index bda244e30fa..71c543161d8 100644 --- a/apps/webapp/app/components/code/tsql/index.ts +++ b/apps/webapp/app/components/code/tsql/index.ts @@ -2,5 +2,9 @@ // Provides syntax highlighting, autocompletion, and linting for TSQL queries export { createTSQLCompletion } from "./tsqlCompletion"; -export { createTSQLLinter, isValidTSQLQuery, getTSQLError, type TSQLLinterConfig } from "./tsqlLinter"; - +export { + createTSQLLinter, + isValidTSQLQuery, + getTSQLError, + type TSQLLinterConfig, +} from "./tsqlLinter"; diff --git a/apps/webapp/app/components/code/tsql/tsqlCompletion.ts b/apps/webapp/app/components/code/tsql/tsqlCompletion.ts index b53c551a4d3..03d75f179d3 100644 --- a/apps/webapp/app/components/code/tsql/tsqlCompletion.ts +++ b/apps/webapp/app/components/code/tsql/tsqlCompletion.ts @@ -92,8 +92,8 @@ function createFunctionCompletions(): Completion[] { meta.maxArgs === 0 ? "()" : meta.minArgs === meta.maxArgs - ? `(${meta.minArgs} args)` - : `(${meta.minArgs}${meta.maxArgs ? `-${meta.maxArgs}` : "+"} args)`; + ? `(${meta.minArgs} args)` + : `(${meta.minArgs}${meta.maxArgs ? `-${meta.maxArgs}` : "+"} args)`; functions.push({ label: name, @@ -111,8 +111,8 @@ function createFunctionCompletions(): Completion[] { meta.maxArgs === 0 ? "()" : meta.minArgs === meta.maxArgs - ? `(${meta.minArgs} args)` - : `(${meta.minArgs}${meta.maxArgs ? `-${meta.maxArgs}` : "+"} args)`; + ? `(${meta.minArgs} args)` + : `(${meta.minArgs}${meta.maxArgs ? `-${meta.maxArgs}` : "+"} args)`; functions.push({ label: name, diff --git a/apps/webapp/app/components/code/tsql/tsqlLinter.test.ts b/apps/webapp/app/components/code/tsql/tsqlLinter.test.ts index 8acc81d66f0..8ecc21a1658 100644 --- a/apps/webapp/app/components/code/tsql/tsqlLinter.test.ts +++ b/apps/webapp/app/components/code/tsql/tsqlLinter.test.ts @@ -28,9 +28,7 @@ describe("tsqlLinter", () => { true ); expect( - isValidTSQLQuery( - "SELECT * FROM users LEFT JOIN orders ON users.id = orders.user_id" - ) + isValidTSQLQuery("SELECT * FROM users LEFT JOIN orders ON users.id = orders.user_id") ).toBe(true); }); @@ -76,4 +74,3 @@ describe("tsqlLinter", () => { }); }); }); - diff --git a/apps/webapp/app/components/code/tsql/tsqlLinter.ts b/apps/webapp/app/components/code/tsql/tsqlLinter.ts index 72794e3e9ab..42f5288fb29 100644 --- a/apps/webapp/app/components/code/tsql/tsqlLinter.ts +++ b/apps/webapp/app/components/code/tsql/tsqlLinter.ts @@ -31,11 +31,7 @@ function parseErrorPosition(message: string): { line: number; column: number } | /** * Convert line/column to a document position */ -function positionToOffset( - doc: string, - line: number, - column: number -): number { +function positionToOffset(doc: string, line: number, column: number): number { const lines = doc.split("\n"); // line is 1-indexed @@ -210,4 +206,3 @@ export function getTSQLError(query: string): string | null { return "Unknown error"; } } - diff --git a/apps/webapp/app/components/dashboard-agent/RunDiagnosisCard.tsx b/apps/webapp/app/components/dashboard-agent/RunDiagnosisCard.tsx index a0a96ecb5e2..2fef1f3deb7 100644 --- a/apps/webapp/app/components/dashboard-agent/RunDiagnosisCard.tsx +++ b/apps/webapp/app/components/dashboard-agent/RunDiagnosisCard.tsx @@ -96,7 +96,14 @@ function DiagnosisActions({ actions }: { actions: NonNullable {actions.map((action, i) => { if (action.kind === "view_run" && /^run_[a-z0-9]+$/i.test(action.target)) { - return ; + return ( + + ); } if (action.kind === "docs") { const safeUrl = toSafeUrl(action.target); diff --git a/apps/webapp/app/components/errors/ConfigureErrorAlerts.tsx b/apps/webapp/app/components/errors/ConfigureErrorAlerts.tsx index 32ed778f877..8a823ee78c1 100644 --- a/apps/webapp/app/components/errors/ConfigureErrorAlerts.tsx +++ b/apps/webapp/app/components/errors/ConfigureErrorAlerts.tsx @@ -135,12 +135,7 @@ export function ConfigureErrorAlerts({ /> - +
diff --git a/apps/webapp/app/components/integrations/VercelBuildSettings.tsx b/apps/webapp/app/components/integrations/VercelBuildSettings.tsx index d8e9f3fe3f8..8449d342f53 100644 --- a/apps/webapp/app/components/integrations/VercelBuildSettings.tsx +++ b/apps/webapp/app/components/integrations/VercelBuildSettings.tsx @@ -113,9 +113,7 @@ export function BuildSettingsFields({
); if (disabled && disabledReason) { - return ( - - ); + return ; } return row; })} @@ -140,9 +138,7 @@ export function BuildSettingsFields({ disabled={!enabledSlugs.some((s) => pullEnvVarsBeforeBuild.includes(s))} onCheckedChange={(checked) => { onDiscoverEnvVarsChange( - checked - ? enabledSlugs.filter((s) => pullEnvVarsBeforeBuild.includes(s)) - : [] + checked ? enabledSlugs.filter((s) => pullEnvVarsBeforeBuild.includes(s)) : [] ); }} /> @@ -185,9 +181,7 @@ export function BuildSettingsFields({
); if (disabled && disabledReason) { - return ( - - ); + return ; } return row; })} @@ -208,10 +202,12 @@ export function BuildSettingsFields({ When enabled, production deployments wait for Vercel deployment to complete before - promoting the Trigger.dev deployment. This will disable the "Auto-assign Custom - Production Domains" option in your Vercel project settings to perform staged - deployments.{" "} - + promoting the Trigger.dev deployment. This will disable the "Auto-assign Custom Production + Domains" option in your Vercel project settings to perform staged deployments.{" "} + Learn more . @@ -225,9 +221,8 @@ export function BuildSettingsFields({ )} {!currentTriggerVersion && currentTriggerVersionFetchFailed && ( - Couldn't read{" "} - TRIGGER_VERSION from Vercel — - check the Vercel dashboard to confirm the production pin. + Couldn't read TRIGGER_VERSION from + Vercel — check the Vercel dashboard to confirm the production pin. )} @@ -244,9 +239,9 @@ export function BuildSettingsFields({ /> - When enabled, the integration automatically promotes the Vercel deployment after - the Trigger.dev build completes. Turn off to manually promote from your Vercel - dashboard — Trigger.dev will then promote automatically once you do. + When enabled, the integration automatically promotes the Vercel deployment after the + Trigger.dev build completes. Turn off to manually promote from your Vercel dashboard — + Trigger.dev will then promote automatically once you do. )} diff --git a/apps/webapp/app/components/integrations/VercelLogo.tsx b/apps/webapp/app/components/integrations/VercelLogo.tsx index 7ddf039abfd..856b74ebada 100644 --- a/apps/webapp/app/components/integrations/VercelLogo.tsx +++ b/apps/webapp/app/components/integrations/VercelLogo.tsx @@ -1,11 +1,6 @@ export function VercelLogo({ className }: { className?: string }) { return ( - + ); diff --git a/apps/webapp/app/components/integrations/VercelOnboardingModal.tsx b/apps/webapp/app/components/integrations/VercelOnboardingModal.tsx index 21734c5c038..7ae12b20d45 100644 --- a/apps/webapp/app/components/integrations/VercelOnboardingModal.tsx +++ b/apps/webapp/app/components/integrations/VercelOnboardingModal.tsx @@ -4,11 +4,7 @@ import { ChevronDownIcon, ChevronUpIcon, } from "@heroicons/react/20/solid"; -import { - useFetcher, - useNavigation, - useSearchParams, -} from "@remix-run/react"; +import { useFetcher, useNavigation, useSearchParams } from "@remix-run/react"; import { useTypedFetcher } from "remix-typedjson"; import { Dialog, DialogContent, DialogHeader } from "~/components/primitives/Dialog"; import { Button, LinkButton } from "~/components/primitives/Buttons"; @@ -31,9 +27,7 @@ import { import { VercelLogo } from "~/components/integrations/VercelLogo"; import { BuildSettingsFields } from "~/components/integrations/VercelBuildSettings"; import { OctoKitty } from "~/components/GitHubLoginButton"; -import { - ConnectGitHubRepoModal, -} from "~/routes/resources.orgs.$organizationSlug.projects.$projectParam.env.$envParam.github"; +import { ConnectGitHubRepoModal } from "~/routes/resources.orgs.$organizationSlug.projects.$projectParam.env.$envParam.github"; import { type SyncEnvVarsMapping, type EnvSlug, @@ -44,7 +38,12 @@ import { } from "~/v3/vercel/vercelProjectIntegrationSchema"; import { type VercelCustomEnvironment } from "~/models/vercelIntegration.server"; import { type VercelOnboardingData } from "~/presenters/v3/VercelSettingsPresenter.server"; -import { vercelAppInstallPath, v3ProjectSettingsIntegrationsPath, githubAppInstallPath, vercelResourcePath } from "~/utils/pathBuilder"; +import { + vercelAppInstallPath, + v3ProjectSettingsIntegrationsPath, + githubAppInstallPath, + vercelResourcePath, +} from "~/utils/pathBuilder"; import type { loader } from "~/routes/resources.orgs.$organizationSlug.projects.$projectParam.env.$envParam.vercel"; import { useEffect, useState, useCallback, useRef } from "react"; import { usePostHogTracking } from "~/hooks/usePostHog"; @@ -73,9 +72,7 @@ function formatVercelTargets(targets: string[]): string { staging: "Staging", }; - return targets - .map((t) => targetLabels[t.toLowerCase()] || t) - .join(", "); + return targets.map((t) => targetLabels[t.toLowerCase()] || t).join(", "); } type OnboardingState = @@ -153,7 +150,8 @@ export function VercelOnboardingModal({ } // For marketplace origin, skip env-mapping step and go directly to env-var-sync if (!fromMarketplaceContext) { - const customEnvs = (onboardingData?.customEnvironments?.length ?? 0) > 0 && hasStagingEnvironment; + const customEnvs = + (onboardingData?.customEnvironments?.length ?? 0) > 0 && hasStagingEnvironment; if (customEnvs) { return "env-mapping"; } @@ -218,14 +216,18 @@ export function VercelOnboardingModal({ environmentId: string; displayName: string; } | null>(null); - const availableEnvSlugsForOnboarding = getAvailableEnvSlugs(hasStagingEnvironment, hasPreviewEnvironment); - const availableEnvSlugsForOnboardingBuildSettings = getAvailableEnvSlugsForBuildSettings(hasStagingEnvironment, hasPreviewEnvironment); + const availableEnvSlugsForOnboarding = getAvailableEnvSlugs( + hasStagingEnvironment, + hasPreviewEnvironment + ); + const availableEnvSlugsForOnboardingBuildSettings = getAvailableEnvSlugsForBuildSettings( + hasStagingEnvironment, + hasPreviewEnvironment + ); const [pullEnvVarsBeforeBuild, setPullEnvVarsBeforeBuild] = useState( () => availableEnvSlugsForOnboardingBuildSettings ); - const [atomicBuilds, setAtomicBuilds] = useState( - () => ["prod"] - ); + const [atomicBuilds, setAtomicBuilds] = useState(() => ["prod"]); const [discoverEnvVars, setDiscoverEnvVars] = useState( () => availableEnvSlugsForOnboardingBuildSettings ); @@ -309,7 +311,13 @@ export function VercelOnboardingModal({ }, 100); } } - }, [isOpen, fromMarketplaceContext, nextUrl, isOnboardingComplete, isGitHubConnectedForOnboarding]); + }, [ + isOpen, + fromMarketplaceContext, + nextUrl, + isOnboardingComplete, + isGitHubConnectedForOnboarding, + ]); useEffect(() => { if (!isOpen) { @@ -336,7 +344,6 @@ export function VercelOnboardingModal({ } switch (state) { - case "loading-projects": loadingStateRef.current = state; if (onDataReload) { @@ -371,19 +378,33 @@ export function VercelOnboardingModal({ }, [isOpen, state, onboardingData?.authInvalid, vercelStagingEnvironment, onDataReload, onClose]); useEffect(() => { - if (!onboardingData?.authInvalid && state === "loading-projects" && onboardingData?.availableProjects !== undefined) { + if ( + !onboardingData?.authInvalid && + state === "loading-projects" && + onboardingData?.availableProjects !== undefined + ) { setState("project-selection"); } }, [state, onboardingData?.availableProjects, onboardingData?.authInvalid]); useEffect(() => { - if (!onboardingData?.authInvalid && state === "loading-env-vars" && onboardingData?.environmentVariables) { + if ( + !onboardingData?.authInvalid && + state === "loading-env-vars" && + onboardingData?.environmentVariables + ) { setState("env-var-sync"); } }, [state, onboardingData?.environmentVariables, onboardingData?.authInvalid]); useEffect(() => { - if (state === "project-selection" && fetcher.data && "success" in fetcher.data && fetcher.data.success && fetcher.state === "idle") { + if ( + state === "project-selection" && + fetcher.data && + "success" in fetcher.data && + fetcher.data.success && + fetcher.state === "idle" + ) { trackOnboarding("vercel onboarding project selected", { vercel_project_name: selectedVercelProject?.name, }); @@ -394,12 +415,20 @@ export function VercelOnboardingModal({ } else if (fetcher.data && "error" in fetcher.data && typeof fetcher.data.error === "string") { setProjectSelectionError(fetcher.data.error); } - }, [state, fetcher.data, fetcher.state, onDataReload, trackOnboarding, selectedVercelProject?.name]); + }, [ + state, + fetcher.data, + fetcher.state, + onDataReload, + trackOnboarding, + selectedVercelProject?.name, + ]); // For marketplace origin, skip env-mapping step useEffect(() => { if (state === "loading-env-mapping" && onboardingData) { - const hasCustomEnvs = (onboardingData.customEnvironments?.length ?? 0) > 0 && hasStagingEnvironment; + const hasCustomEnvs = + (onboardingData.customEnvironments?.length ?? 0) > 0 && hasStagingEnvironment; if (hasCustomEnvs && !fromMarketplaceContext) { setState("env-mapping"); } else { @@ -410,14 +439,13 @@ export function VercelOnboardingModal({ const secretEnvVars = envVars.filter((v) => v.isSecret); const syncableEnvVars = envVars.filter((v) => !v.isSecret); - const enabledEnvVars = syncableEnvVars.filter( - (v) => shouldSyncEnvVarForAnyEnvironment(syncEnvVarsMapping, v.key) + const enabledEnvVars = syncableEnvVars.filter((v) => + shouldSyncEnvVarForAnyEnvironment(syncEnvVarsMapping, v.key) ); const overlappingEnvVarsCount = enabledEnvVars.filter((v) => existingVars[v.key]).length; - const isSubmitting = - navigation.state === "submitting" || navigation.state === "loading"; + const isSubmitting = navigation.state === "submitting" || navigation.state === "loading"; const actionUrl = vercelResourcePath(organizationSlug, projectSlug, environmentSlug); @@ -529,7 +557,6 @@ export function VercelOnboardingModal({ method: "post", action: actionUrl, }); - }, [vercelStagingEnvironment, envMappingFetcher, actionUrl, trackOnboarding]); const handleBuildSettingsNext = useCallback(() => { @@ -541,7 +568,10 @@ export function VercelOnboardingModal({ const formData = new FormData(); formData.append("action", "complete-onboarding"); - formData.append("vercelStagingEnvironment", vercelStagingEnvironment ? JSON.stringify(vercelStagingEnvironment) : ""); + formData.append( + "vercelStagingEnvironment", + vercelStagingEnvironment ? JSON.stringify(vercelStagingEnvironment) : "" + ); formData.append("pullEnvVarsBeforeBuild", JSON.stringify(pullEnvVarsBeforeBuild)); formData.append("atomicBuilds", JSON.stringify(atomicBuilds)); formData.append("discoverEnvVars", JSON.stringify(discoverEnvVars)); @@ -572,24 +602,52 @@ export function VercelOnboardingModal({ github_app_installed: gitHubAppInstallations.length > 0, }); } - }, [vercelStagingEnvironment, pullEnvVarsBeforeBuild, atomicBuilds, discoverEnvVars, syncEnvVarsMapping, nextUrl, fromMarketplaceContext, isGitHubConnectedForOnboarding, completeOnboardingFetcher, actionUrl, trackOnboarding, capture, organizationSlug, projectSlug, gitHubAppInstallations.length]); - - const handleFinishOnboarding = useCallback((e: React.FormEvent) => { - e.preventDefault(); - const form = e.currentTarget; - const formData = new FormData(form); - completeOnboardingFetcher.submit(formData, { - method: "post", - action: actionUrl, - }); - }, [completeOnboardingFetcher, actionUrl]); + }, [ + vercelStagingEnvironment, + pullEnvVarsBeforeBuild, + atomicBuilds, + discoverEnvVars, + syncEnvVarsMapping, + nextUrl, + fromMarketplaceContext, + isGitHubConnectedForOnboarding, + completeOnboardingFetcher, + actionUrl, + trackOnboarding, + capture, + organizationSlug, + projectSlug, + gitHubAppInstallations.length, + ]); + + const handleFinishOnboarding = useCallback( + (e: React.FormEvent) => { + e.preventDefault(); + const form = e.currentTarget; + const formData = new FormData(form); + completeOnboardingFetcher.submit(formData, { + method: "post", + action: actionUrl, + }); + }, + [completeOnboardingFetcher, actionUrl] + ); useEffect(() => { - if (completeOnboardingFetcher.data && typeof completeOnboardingFetcher.data === "object" && "success" in completeOnboardingFetcher.data && completeOnboardingFetcher.data.success && completeOnboardingFetcher.state === "idle") { + if ( + completeOnboardingFetcher.data && + typeof completeOnboardingFetcher.data === "object" && + "success" in completeOnboardingFetcher.data && + completeOnboardingFetcher.data.success && + completeOnboardingFetcher.state === "idle" + ) { if (state === "github-connection") { return; } - if ("redirectTo" in completeOnboardingFetcher.data && typeof completeOnboardingFetcher.data.redirectTo === "string") { + if ( + "redirectTo" in completeOnboardingFetcher.data && + typeof completeOnboardingFetcher.data.redirectTo === "string" + ) { const validRedirect = safeRedirectUrl(completeOnboardingFetcher.data.redirectTo); if (validRedirect) { window.location.href = validRedirect; @@ -632,7 +690,13 @@ export function VercelOnboardingModal({ }, [state, organizationSlug, projectSlug]); useEffect(() => { - if (envMappingFetcher.data && typeof envMappingFetcher.data === "object" && "success" in envMappingFetcher.data && envMappingFetcher.data.success && envMappingFetcher.state === "idle") { + if ( + envMappingFetcher.data && + typeof envMappingFetcher.data === "object" && + "success" in envMappingFetcher.data && + envMappingFetcher.data.success && + envMappingFetcher.state === "idle" + ) { setState("loading-env-vars"); } }, [envMappingFetcher.data, envMappingFetcher.state]); @@ -644,9 +708,7 @@ export function VercelOnboardingModal({ if (customEnvironments.length === 1) { selectedEnv = customEnvironments[0]; } else { - const stagingEnv = customEnvironments.find( - (env) => env.slug.toLowerCase() === "staging" - ); + const stagingEnv = customEnvironments.find((env) => env.slug.toLowerCase() === "staging"); selectedEnv = stagingEnv ?? customEnvironments[0]; } @@ -673,14 +735,17 @@ export function VercelOnboardingModal({ if (isLoadingState) { return ( - { - if (!open && !fromMarketplaceContext) { - if (state as string !== "completed") { - trackOnboarding("vercel onboarding abandoned"); + { + if (!open && !fromMarketplaceContext) { + if ((state as string) !== "completed") { + trackOnboarding("vercel onboarding abandoned"); + } + onClose(); } - onClose(); - } - }}> + }} + > e.preventDefault()}>
@@ -704,18 +769,23 @@ export function VercelOnboardingModal({ const disabledEnvSlugsForBuildSettings = hasStagingEnvironment && !vercelStagingEnvironment - ? ({ stg: "Map a custom Vercel environment to Staging to enable this" } as Partial>) + ? ({ stg: "Map a custom Vercel environment to Staging to enable this" } as Partial< + Record + >) : undefined; return ( - { - if (!open && !fromMarketplaceContext) { - if (state !== "completed") { - trackOnboarding("vercel onboarding abandoned"); + { + if (!open && !fromMarketplaceContext) { + if (state !== "completed") { + trackOnboarding("vercel onboarding abandoned"); + } + onClose(); } - onClose(); - } - }}> + }} + > e.preventDefault()}>
@@ -729,8 +799,8 @@ export function VercelOnboardingModal({
Select Vercel Project - Choose which Vercel project to connect with this Trigger.dev project. - Your API keys will be automatically synced to Vercel. + Choose which Vercel project to connect with this Trigger.dev project. Your API keys + will be automatically synced to Vercel. {availableProjects.length === 0 ? ( @@ -763,13 +833,14 @@ export function VercelOnboardingModal({ )} - {projectSelectionError && ( - {projectSelectionError} - )} + {projectSelectionError && {projectSelectionError}} - Once connected, your TRIGGER_SECRET_KEY will be - automatically synced to Vercel for each environment. + Once connected, your{" "} + + TRIGGER_SECRET_KEY + {" "} + will be automatically synced to Vercel for each environment. } cancelButton={ - } @@ -811,11 +879,13 @@ export function VercelOnboardingModal({ Map Vercel Environment to Staging Select which custom Vercel environment should map to Trigger.dev's Staging - environment. Production and Preview environments are mapped automatically. - If you skip this step, the{" "} - TRIGGER_SECRET_KEY{" "} - will not be installed for the staging environment in Vercel. You can configure this later in - project settings. + environment. Production and Preview environments are mapped automatically. If you + skip this step, the{" "} + + TRIGGER_SECRET_KEY + {" "} + will not be installed for the staging environment in Vercel. You can configure this + later in project settings. (() => ({ value }), [value]); @@ -193,11 +193,7 @@ const ClientTabsContent = React.forwardRef< )); diff --git a/apps/webapp/app/components/primitives/CopyTextLink.tsx b/apps/webapp/app/components/primitives/CopyTextLink.tsx index 33818fa6077..2c117af9b86 100644 --- a/apps/webapp/app/components/primitives/CopyTextLink.tsx +++ b/apps/webapp/app/components/primitives/CopyTextLink.tsx @@ -16,18 +16,12 @@ export function CopyTextLink({ value, className }: CopyTextLinkProps) { onClick={copy} className={cn( "inline-flex cursor-pointer items-center gap-1 text-xs transition-colors", - copied - ? "text-success" - : "text-text-dimmed hover:text-text-bright", + copied ? "text-success" : "text-text-dimmed hover:text-text-bright", className )} > {copied ? "Copied" : "Copy"} - {copied ? ( - - ) : ( - - )} + {copied ? : } ); } diff --git a/apps/webapp/app/components/primitives/DateTime.tsx b/apps/webapp/app/components/primitives/DateTime.tsx index 4dae92731af..41c51cdd74d 100644 --- a/apps/webapp/app/components/primitives/DateTime.tsx +++ b/apps/webapp/app/components/primitives/DateTime.tsx @@ -275,10 +275,10 @@ const DateTimeAccurateInner = ({ return hideDate ? formatTimeOnly(realDate, displayTimeZone, locales, hour12) : realPrevDate - ? isSameDay(realDate, realPrevDate) - ? formatTimeOnly(realDate, displayTimeZone, locales, hour12) - : formatDateTimeAccurate(realDate, displayTimeZone, locales, hour12) - : formatDateTimeAccurate(realDate, displayTimeZone, locales, hour12); + ? isSameDay(realDate, realPrevDate) + ? formatTimeOnly(realDate, displayTimeZone, locales, hour12) + : formatDateTimeAccurate(realDate, displayTimeZone, locales, hour12) + : formatDateTimeAccurate(realDate, displayTimeZone, locales, hour12); }, [realDate, displayTimeZone, locales, hour12, hideDate, previousDate]); if (!showTooltip) diff --git a/apps/webapp/app/components/primitives/Dialog.tsx b/apps/webapp/app/components/primitives/Dialog.tsx index 48fc59cfa78..bf485bbf1a2 100644 --- a/apps/webapp/app/components/primitives/Dialog.tsx +++ b/apps/webapp/app/components/primitives/Dialog.tsx @@ -122,5 +122,5 @@ export { DialogTitle, DialogDescription, DialogPortal, - DialogOverlay + DialogOverlay, }; diff --git a/apps/webapp/app/components/primitives/InputNumberStepper.tsx b/apps/webapp/app/components/primitives/InputNumberStepper.tsx index f4aafd5cae1..b434bb1d30a 100644 --- a/apps/webapp/app/components/primitives/InputNumberStepper.tsx +++ b/apps/webapp/app/components/primitives/InputNumberStepper.tsx @@ -67,7 +67,7 @@ export function InputNumberStepper({ const isMaxDisabled = max !== undefined && !Number.isNaN(numericValue) && numericValue >= max; function clamp(val: number): number { - if (Number.isNaN(val)) return typeof value === "number" ? value : min ?? 0; + if (Number.isNaN(val)) return typeof value === "number" ? value : (min ?? 0); let next = val; if (min !== undefined) next = Math.max(min, next); if (max !== undefined) next = Math.min(max, next); diff --git a/apps/webapp/app/components/primitives/MiddleTruncate.tsx b/apps/webapp/app/components/primitives/MiddleTruncate.tsx index c116205aed9..45915c2521d 100644 --- a/apps/webapp/app/components/primitives/MiddleTruncate.tsx +++ b/apps/webapp/app/components/primitives/MiddleTruncate.tsx @@ -139,16 +139,9 @@ export function MiddleTruncate({ text, className }: MiddleTruncateProps) { }, [calculateTruncation]); const content = ( - + {/* Hidden span for measuring text width */} -