From 3712ff800c38a05d0c2014f4a2a3de11796daff3 Mon Sep 17 00:00:00 2001 From: Gonzalo Riestra Date: Thu, 1 Oct 2026 16:56:47 +0200 Subject: [PATCH 01/10] Remove ESLint and activate independent Oxlint rules --- .../remove-cli-eslint-config-dependencies.md | 5 + .github/workflows/tests-main.yml | 3 - .github/workflows/tests-pr.yml | 2 - .gitignore | 6 - .vscode/extensions.json | 2 +- .vscode/settings.json | 5 +- AGENTS.md | 2 +- bin/audit-oxlint-coverage.js | 100 + configurations/oxlint-baseline.json | 3521 ++++++++++ configurations/oxlint-rule-mapping.json | 1493 ++++ docs/README.md | 2 +- docs/cli/get-started.md | 4 +- docs/cli/oxlint-rule-coverage.md | 91 +- docs/cli/{eslint-rules.md => oxlint-rules.md} | 8 +- eslint.codegen.config.js | 3 - eslint.config.js | 295 - nx.json | 2 - oxlint.json | 1105 ++- package.json | 37 +- packages/app/package.json | 5 - packages/app/project.json | 4 +- .../app-dev/generated/dev-session-create.ts | 2 +- .../app-dev/generated/dev-session-update.ts | 2 +- .../active-app-release-from-api-key.ts | 2 +- .../generated/active-app-release.ts | 2 +- .../generated/app-version-by-id.ts | 2 +- .../generated/app-version-by-tag.ts | 2 +- .../generated/create-app-version.ts | 2 +- .../app-management/generated/create-app.ts | 2 +- .../generated/release-version.ts | 2 +- .../cli/commands/app/app-logs/sources.test.ts | 9 +- packages/app/src/cli/commands/app/logs.ts | 1 + .../app/security/check.integration.test.ts | 1 - packages/app/src/cli/hooks/public_metadata.ts | 2 +- .../app/src/cli/models/app/app.test-data.ts | 4 +- .../app/src/cli/models/app/identifiers.ts | 1 - packages/app/src/cli/models/app/loader.ts | 11 +- .../src/cli/models/app/validation/common.ts | 2 +- .../extensions/extension-instance.test.ts | 4 +- .../models/extensions/extension-instance.ts | 2 +- .../cli/models/extensions/specification.ts | 2 +- .../app_config_privacy_compliance_webhooks.ts | 2 +- .../specifications/function.test.ts | 4 +- ...sent_payments_app_extension_schema.test.ts | 10 +- ...card_payments_app_extension_schema.test.ts | 2 +- ...card_payments_app_extension_schema.test.ts | 2 +- .../transform/app_config_webhook.ts | 8 +- .../specifications/type-generation.ts | 2 +- .../specifications/ui_extension.test.ts | 6 +- .../extensions/specifications/ui_extension.ts | 4 +- .../validation/app_config_webhook.ts | 2 +- .../cli/models/project/config-selection.ts | 2 +- .../app/src/cli/models/project/project.ts | 6 +- .../app/src/cli/prompts/generate/extension.ts | 3 +- .../admin-link/extension-config-builder.ts | 2 +- .../services/app-logs/dev/poll-app-logs.ts | 2 +- .../ui/components/hooks/usePollAppLogs.ts | 4 +- .../hooks/useSelfAdjustingInterval.test.tsx | 2 +- .../app/src/cli/services/app-logs/utils.ts | 4 +- .../app-security-engine/checks/embedded.ts | 2 +- .../app-security-engine/embed-checks.mjs | 2 +- .../app-security-engine/rules/config-rules.ts | 2 +- .../app-security-engine/rules/liquid-rules.ts | 2 +- .../app-security-engine/scanners/discover.ts | 20 +- .../scanners/path-rules.ts | 2 +- .../scanners/repository-marker.ts | 2 +- .../tests/secret-safety.test.ts | 2 +- .../app/config-pipeline-snapshot.test.ts | 14 +- .../app/src/cli/services/app/config/link.ts | 2 +- .../app/patch-app-configuration-file.ts | 2 +- .../app/write-app-configuration-file.test.ts | 4 +- .../app/src/cli/services/build/bundle-size.ts | 2 +- .../build/steps/bundle-ui-step.test.ts | 2 +- .../steps/include-assets/generate-manifest.ts | 2 +- .../execute-bulk-operation.test.ts | 2 +- .../deploy-identifier-matching.test.ts | 3 +- packages/app/src/cli/services/deploy.test.ts | 2 +- .../src/cli/services/deploy/upload.test.ts | 4 +- .../app/src/cli/services/deploy/upload.ts | 2 +- packages/app/src/cli/services/dev.test.ts | 4 +- .../dev/app-events/app-event-watcher.ts | 4 +- .../dev/app-events/file-watcher.test.ts | 10 +- .../services/dev/app-events/file-watcher.ts | 2 +- packages/app/src/cli/services/dev/cap.ts | 2 +- .../src/cli/services/dev/extension.test.ts | 6 +- .../app/src/cli/services/dev/extension.ts | 2 +- .../services/dev/extension/localization.ts | 14 +- .../dev/extension/server/middlewares.test.ts | 2 +- .../services/dev/extension/websocket.test.ts | 2 +- .../dev/extension/websocket/handlers.test.ts | 2 +- .../dev/processes/app-logs-polling.ts | 4 +- .../dev-session/dev-session-logger.test.ts | 8 +- .../dev/ui/components/DevSessionUI.tsx | 8 +- .../dev/ui/components/TabPanel.test.tsx | 32 +- .../app/src/cli/services/extensions/bundle.ts | 6 +- .../app/src/cli/services/function/runner.ts | 2 +- .../src/cli/services/generate/extension.ts | 2 +- .../fetch-extension-specifications.test.ts | 2 +- .../declarative-definitions.test.ts | 64 +- .../shop-import/declarative-definitions.ts | 2 +- .../app/src/cli/services/init/template/npm.ts | 1 - .../src/cli/utilities/app/config/getTomls.ts | 2 +- .../utilities/app/http-reverse-proxy.test.ts | 4 +- .../app-management-client.test.ts | 6 +- .../app-management-client.ts | 2 +- .../extensions/theme/host-theme-manager.ts | 2 +- .../app/src/cli/utilities/file-formatter.ts | 4 +- packages/app/src/cli/utilities/json-schema.ts | 3 +- packages/app/src/cli/utilities/mkcert.test.ts | 6 +- packages/app/src/cli/utilities/mkcert.ts | 2 +- packages/cli-kit/package.json | 41 - packages/cli-kit/project.json | 4 +- .../node/analytics/error-grouping.test.ts | 4 +- .../private/node/analytics/error-grouping.ts | 2 +- packages/cli-kit/src/private/node/api.ts | 4 +- .../cli-kit/src/private/node/api/graphql.ts | 2 +- .../src/private/node/content-tokens.ts | 2 +- .../cli-kit/src/private/node/context/agent.ts | 2 +- .../cli-kit/src/private/node/json-error.ts | 2 +- .../cli-kit/src/private/node/output.test.tsx | 1 - packages/cli-kit/src/private/node/session.ts | 2 +- .../node/ui/components/ConcurrentOutput.tsx | 2 +- .../node/ui/components/SelectInput.tsx | 2 +- .../node/ui/components/TextAnimation.tsx | 2 +- packages/cli-kit/src/public/common/array.ts | 2 +- packages/cli-kit/src/public/common/url.ts | 2 +- packages/cli-kit/src/public/node/analytics.ts | 4 +- .../cli-kit/src/public/node/api/admin.test.ts | 9 +- .../cli-kit/src/public/node/api/graphql.ts | 2 +- packages/cli-kit/src/public/node/archiver.ts | 2 +- .../src/public/node/base-command.test.ts | 6 +- .../cli-kit/src/public/node/base-command.ts | 2 +- .../cli-kit/src/public/node/cli-launcher.ts | 2 +- .../cli-kit/src/public/node/context/local.ts | 2 +- .../src/public/node/custom-oclif-loader.ts | 2 +- .../src/public/node/doctor/framework.ts | 10 +- .../src/public/node/error-handler.test.ts | 4 +- .../cli-kit/src/public/node/error-handler.ts | 4 +- .../src/public/node/error/index.test.ts | 4 +- .../cli-kit/src/public/node/error/index.ts | 2 +- packages/cli-kit/src/public/node/fs.ts | 12 +- .../src/public/node/graphiql/server.ts | 4 +- packages/cli-kit/src/public/node/graphql.ts | 2 +- .../cli-kit/src/public/node/hooks/postrun.ts | 4 +- packages/cli-kit/src/public/node/http.ts | 2 +- packages/cli-kit/src/public/node/is-global.ts | 6 +- .../cli-kit/src/public/node/local-storage.ts | 8 +- .../cli-kit/src/public/node/metadata.test.ts | 6 +- packages/cli-kit/src/public/node/metadata.ts | 2 +- packages/cli-kit/src/public/node/monorail.ts | 2 +- .../public/node/node-package-manager.test.ts | 3 +- .../src/public/node/node-package-manager.ts | 2 +- .../src/public/node/notifications-system.ts | 2 +- packages/cli-kit/src/public/node/os.ts | 6 +- .../cli-kit/src/public/node/output.test.ts | 1 - packages/cli-kit/src/public/node/path.ts | 4 +- .../src/public/node/session-prompt.test.ts | 2 +- .../public/node/store-auth-session.test.ts | 2 +- packages/cli-kit/src/public/node/system.ts | 8 +- .../cli-kit/src/public/node/testing/output.ts | 1 - .../cli-kit/src/public/node/themes/api.ts | 2 +- packages/cli-kit/src/public/node/tree-kill.ts | 4 +- packages/cli-kit/src/public/node/ui.test.ts | 6 +- packages/cli-kit/src/public/node/ui.tsx | 2 +- .../cli-kit/src/public/node/upgrade.test.ts | 3 +- packages/cli-kit/src/public/node/upgrade.ts | 2 +- packages/cli-kit/src/public/node/version.ts | 4 +- packages/cli/bin/bundle.js | 2 +- packages/cli/bin/dev.js | 2 +- packages/cli/bin/run.js | 2 +- packages/cli/project.json | 4 +- packages/cli/src/cli/commands/help.test.ts | 2 +- packages/cli/src/cli/commands/help.ts | 4 +- packages/cli/src/cli/help.test.ts | 18 +- packages/cli/src/uncaught-error-handler.ts | 2 +- packages/create-app/package.json | 5 - packages/create-app/project.json | 4 +- packages/e2e/helpers/browser-login.ts | 2 +- packages/e2e/package.json | 18 - packages/e2e/playwright.config.ts | 1 - packages/e2e/project.json | 4 +- packages/e2e/scripts/cleanup-apps.ts | 4 +- packages/e2e/scripts/cleanup-stores.ts | 6 +- packages/e2e/scripts/prime-browser-auth.ts | 6 +- packages/e2e/setup/auth-diagnostics.ts | 2 +- packages/e2e/setup/cli.ts | 2 +- packages/e2e/setup/global-auth.ts | 4 +- packages/e2e/setup/store.ts | 2 +- packages/e2e/setup/teardown.ts | 8 +- packages/eslint-plugin-cli/config.js | 330 +- packages/eslint-plugin-cli/oxlint-compat.js | 101 - .../eslint-plugin-cli/oxlint-compat.test.js | 179 - .../oxlint-typescript-services.js | 51 - packages/eslint-plugin-cli/package.json | 24 +- packages/eslint-plugin-cli/project.json | 4 +- .../rules/command-json-output.test.js | 5 +- packages/eslint-plugin-cli/vite.config.ts | 24 +- packages/organizations/package.json | 5 - packages/organizations/project.json | 4 +- packages/plugin-cloudflare/package.json | 5 - packages/plugin-cloudflare/project.json | 4 +- .../src/install-cloudflared.ts | 2 +- packages/plugin-cloudflare/src/tunnel.ts | 4 +- packages/plugin-did-you-mean/package.json | 5 - packages/plugin-did-you-mean/project.json | 4 +- packages/store/package.json | 5 - packages/store/project.json | 4 +- .../cli/commands/store/auth-output.test.ts | 1 - .../src/cli/commands/store/create/dev.test.ts | 12 +- .../src/cli/commands/store/delete.test.ts | 12 +- .../store/auth/existing-scopes.test.ts | 10 +- .../cli/services/store/auth/recovery.test.ts | 10 +- .../cli/services/store/auth/result.test.ts | 9 +- .../services/store/auth/token-client.test.ts | 4 +- .../services/store/create/preview/index.ts | 2 +- .../src/cli/services/store/delete/dev.test.ts | 6 +- .../src/cli/services/store/info/index.ts | 8 +- .../store-lookup/destinations.test.ts | 30 +- .../utilities/store-lookup/destinations.ts | 2 +- .../store-lookup/organization-shop.test.ts | 10 +- .../utilities/store-lookup/organization.ts | 2 +- packages/theme/package.json | 5 - packages/theme/project.json | 4 +- packages/theme/src/cli/services/dev.test.ts | 2 +- packages/theme/src/cli/services/dev.ts | 2 +- packages/theme/src/cli/services/init.test.ts | 1 - packages/theme/src/cli/services/publish.ts | 3 +- packages/theme/src/cli/services/push.ts | 2 +- packages/theme/src/cli/utilities/notifier.ts | 4 +- .../theme/src/cli/utilities/theme-command.ts | 2 +- .../theme-environment/crawler-signature.ts | 2 +- .../theme-environment/host-validation.test.ts | 2 +- .../utilities/theme-environment/proxy.test.ts | 6 +- .../storefront-password-prompt.test.ts | 2 +- .../theme-environment.test.ts | 1 - .../theme-environment/theme-polling.ts | 1 - .../theme-ext-server.test.ts | 1 - .../theme/src/cli/utilities/theme-fs.test.ts | 2 +- .../ui-extensions-server-kit/package.json | 15 - .../ui-extensions-server-kit/project.json | 4 +- .../ExtensionServerClient.ts | 8 +- .../src/context/constants.ts | 3 +- .../src/testing/extensions.ts | 2 +- .../src/utilities/replaceUpdated.test.ts | 2 +- .../src/utilities/set.test.ts | 2 +- .../ui-extensions-test-utils/package.json | 15 - .../ui-extensions-test-utils/project.json | 4 +- pnpm-lock.yaml | 6238 +++-------------- pnpm-workspace.yaml | 1 - 249 files changed, 7295 insertions(+), 7362 deletions(-) create mode 100644 .changeset/remove-cli-eslint-config-dependencies.md create mode 100644 bin/audit-oxlint-coverage.js create mode 100644 configurations/oxlint-baseline.json create mode 100644 configurations/oxlint-rule-mapping.json rename docs/cli/{eslint-rules.md => oxlint-rules.md} (80%) delete mode 100644 eslint.codegen.config.js delete mode 100644 eslint.config.js delete mode 100644 packages/eslint-plugin-cli/oxlint-compat.js delete mode 100644 packages/eslint-plugin-cli/oxlint-compat.test.js delete mode 100644 packages/eslint-plugin-cli/oxlint-typescript-services.js diff --git a/.changeset/remove-cli-eslint-config-dependencies.md b/.changeset/remove-cli-eslint-config-dependencies.md new file mode 100644 index 00000000000..56d493df27b --- /dev/null +++ b/.changeset/remove-cli-eslint-config-dependencies.md @@ -0,0 +1,5 @@ +--- +'@shopify/eslint-plugin-cli': major +--- + +Limit the bundled config to CLI custom rules and remove its shared ESLint dependency tree. diff --git a/.github/workflows/tests-main.yml b/.github/workflows/tests-main.yml index 6677ce00044..f173ff39d48 100644 --- a/.github/workflows/tests-main.yml +++ b/.github/workflows/tests-main.yml @@ -51,9 +51,6 @@ jobs: - name: Oxlint run: pnpm lint:oxlint if: ${{ matrix.os == 'ubuntu-latest' && matrix.node == '26.1.0' }} - - name: ESLint compatibility - run: pnpm lint:eslint --output-style=stream - if: ${{ matrix.os == 'ubuntu-latest' && matrix.node == '26.1.0' }} - name: Type-check run: pnpm nx run-many --all --target=type-check --output-style=stream if: ${{ matrix.os == 'ubuntu-latest' && matrix.node == '26.1.0' }} diff --git a/.github/workflows/tests-pr.yml b/.github/workflows/tests-pr.yml index 19523a560e5..42c8620a53d 100644 --- a/.github/workflows/tests-pr.yml +++ b/.github/workflows/tests-pr.yml @@ -55,8 +55,6 @@ jobs: run: pnpm prettier - name: Oxlint run: pnpm lint:oxlint - - name: ESLint compatibility - run: pnpm lint:eslint --output-style=stream bundle: name: 'Bundle' diff --git a/.gitignore b/.gitignore index 84de6f089f3..6864f51633c 100644 --- a/.gitignore +++ b/.gitignore @@ -55,9 +55,6 @@ web_modules/ # Optional npm cache directory .npm -# Optional eslint cache -.eslintcache - # Optional stylelint cache .stylelintcache @@ -175,9 +172,6 @@ testing.mjs # NX .nx -# ESLint reports -eslint-report.json - # Generated docs docs/api docs-shopify.dev/commands/interfaces/ diff --git a/.vscode/extensions.json b/.vscode/extensions.json index f25b0bbb6fe..96f231a92b1 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -1,3 +1,3 @@ { - "recommendations": ["esbenp.prettier-vscode","dbaeumer.vscode-eslint","nrwl.angular-console","vitest.explorer"] + "recommendations": ["esbenp.prettier-vscode", "oxc.oxc-vscode", "nrwl.angular-console", "vitest.explorer"] } diff --git a/.vscode/settings.json b/.vscode/settings.json index 2136b94aac9..11922f565b5 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -21,7 +21,7 @@ "**/node_modules": true }, "editor.formatOnSave": false, - "eslint.validate": ["javascript", "javascriptreact", "typescript", "typescriptreact"], + "oxc.enable": true, "[javascript]": { "editor.formatOnSave": true, "editor.defaultFormatter": "esbenp.prettier-vscode" @@ -31,9 +31,8 @@ "editor.defaultFormatter": "esbenp.prettier-vscode" }, "editor.codeActionsOnSave": { - "source.fixAll.eslint": "explicit" + "source.fixAll.oxc": "explicit" }, - "eslint.workingDirectories": [{ "pattern": "packages/*" }], "vitest.enable": true, "testing.automaticallyOpenPeekView": "never", "javascript.preferences.importModuleSpecifierEnding": "js", diff --git a/AGENTS.md b/AGENTS.md index f4e26864c5b..ae6eaaae1e8 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -66,7 +66,7 @@ Read the guides that apply to your task. - [Conventions](docs/cli/conventions.md): follow shared patterns for modules, state, resource cleanup, and file IO. - [Cross-OS compatibility](docs/cli/cross-os-compatibility.md): avoid OS-specific failures when working with paths, processes, and dependencies. - [Debugging](docs/cli/debugging.md): investigate failures with the debugger and check diagnostics for credential leaks. -- [ESLint rules](docs/cli/eslint-rules.md): understand local lint rules for command flags and environment variables. +- [Oxlint rules](docs/cli/oxlint-rules.md): understand local lint rules for command flags and environment variables. - [FAQ](docs/cli/faq.md): understand the choice of TOML for configuration files. - [Get started](docs/cli/get-started.md): set up the repository and run the CLI against a local project. - [Naming conventions](docs/cli/naming-conventions.md): use reserved command names, flags, and short forms consistently. diff --git a/bin/audit-oxlint-coverage.js b/bin/audit-oxlint-coverage.js new file mode 100644 index 00000000000..f710cbc111e --- /dev/null +++ b/bin/audit-oxlint-coverage.js @@ -0,0 +1,100 @@ +import {existsSync, readFileSync, writeFileSync} from 'node:fs' +import {matchesGlob, resolve} from 'node:path' +import {execFileSync} from 'node:child_process' + +const root = execFileSync('git', ['rev-parse', '--show-toplevel'], {encoding: 'utf8'}).trim() +const read = (file) => JSON.parse(readFileSync(resolve(root, file), 'utf8')) +// Frozen effective configurations were captured from the original revision +// before removing ESLint. Auditing the migration must not reinstall its engine. +const baseline = read('configurations/oxlint-baseline.json') +const mapping = read('configurations/oxlint-rule-mapping.json') +const config = read('oxlint.json') +const scripts = read('package.json').scripts +const formattingInputs = [...scripts.prettier.matchAll(/"([^"]+)"/g)].map((match) => match[1]) +const match = (file, patterns) => patterns?.some((pattern) => matchesGlob(file, pattern)) +const severity = (value) => { + const level = Array.isArray(value) ? value[0] : value + return {off: 0, allow: 0, warn: 1, error: 2, deny: 2}[level] ?? level +} + +const stable = (value) => JSON.stringify(value, (_, item) => + item && typeof item === 'object' && !Array.isArray(item) + ? Object.fromEntries(Object.entries(item).sort(([first], [second]) => first.localeCompare(second))) : item) + +const missing = new Map() +const options = new Set() +const severities = new Set() +const unsupported = new Set() +const supported = new Set() +const partial = new Set() +const missingFormatting = [] +let filesCompared = 0 +const retiredFiles = [] +for (const group of baseline.configurations) { + const before = {...baseline.rules, ...group.rules} + for (const name of group.removed) delete before[name] + for (const file of group.files) { + if (!existsSync(resolve(root, file))) { + retiredFiles.push(file) + continue + } + const after = {...config.rules} + for (const override of config.overrides) { + if (match(file, override.files) && !match(file, override.excludeFiles)) Object.assign(after, override.rules) + } + // Preserve file-wide exemptions while comparing effective file scopes. + const header = readFileSync(resolve(root, file), 'utf8').match(/^(?:\s*(?:\/\/[^\n]*(?:\n|$)|\/\*[\s\S]*?\*\/))*/)?.[0] ?? '' + for (const directive of header.matchAll(/eslint-disable(?!-)([^\n*]*)/g)) { + for (const name of directive[1].split(' -- ')[0].split(',').map((name) => name.trim())) delete after[name] + } + if (!match(file, formattingInputs)) missingFormatting.push(file) + for (const [name, value] of Object.entries(before)) { + const replacement = mapping[name] + if (!replacement) throw new Error(`Undocumented original rule: ${name}`) + if (replacement.status === 'unsupported') { + unsupported.add(name) + continue + } + if (severity(after[replacement.replacement] ?? 'off') === 0) { + const examples = missing.get(name) ?? [] + if (examples.length < 4) examples.push(file) + missing.set(name, examples) + continue + } + supported.add(name) + if (replacement.status === 'partial') partial.add(name) + if (severity(value) !== severity(after[replacement.replacement])) severities.add(name) + const parameters = (configuration) => Array.isArray(configuration) ? configuration.slice(1) : [] + if (stable(parameters(value)) !== stable(parameters(after[replacement.replacement]))) options.add(name) + } + filesCompared++ + } +} + +const summary = { + baselineCommit: baseline.baselineCommit, + filesCompared, + retiredFiles: retiredFiles.length, + baselineLintRules: Object.keys(mapping).length, + rulesWithReplacements: supported.size, + partialReplacements: partial.size, + unsupportedRules: unsupported.size, + rulesWithScopeGaps: missing.size, + optionDifferences: options.size, + severityDifferences: severities.size, + missingFormattingFiles: missingFormatting.length, +} +const findings = { + scopeGaps: Object.fromEntries(missing), + optionDifferences: [...options].sort(), + severityDifferences: [...severities].sort(), + unsupportedRules: [...unsupported].sort(), + partialReplacements: [...partial].sort(), + missingFormatting, +} +const output = process.argv[2] ?? '/tmp/cli-oxlint-coverage-audit.json' +writeFileSync(output, JSON.stringify({summary, findings}, null, 2) + '\n') +console.log(JSON.stringify(summary, null, 2)) +// Partial and unsupported replacements are deliberate and recorded in the +// mapping. Missing file scopes or formatting must be fixed or documented there. +if (missing.size || missingFormatting.length || severities.size) process.exitCode = 1 diff --git a/configurations/oxlint-baseline.json b/configurations/oxlint-baseline.json new file mode 100644 index 00000000000..5c707edfe90 --- /dev/null +++ b/configurations/oxlint-baseline.json @@ -0,0 +1,3521 @@ +{ + "baselineCommit": "656de9379cb7b4e2af6fe0bc6c8d81b1a50163f7", + "rules": { + "block-scoped-var": [2], + "dot-notation": [ + 2, + { + "allowKeywords": true, + "allowPattern": "" + } + ], + "eqeqeq": [ + 2, + "always", + { + "null": "ignore" + } + ], + "guard-for-in": [2], + "no-alert": [2], + "no-case-declarations": [2], + "no-caller": [2], + "no-div-regex": [2], + "no-empty-pattern": [ + 2, + { + "allowObjectPatternsAsParameters": false + } + ], + "no-eval": [ + 2, + { + "allowIndirect": false + } + ], + "no-extend-native": [ + 2, + { + "exceptions": [] + } + ], + "no-extra-bind": [2], + "no-extra-label": [2], + "no-fallthrough": [ + 2, + { + "allowEmptyCase": false, + "reportUnusedFallthroughComment": false + } + ], + "no-global-assign": [ + 2, + { + "exceptions": [] + } + ], + "no-implicit-coercion": [ + 2, + { + "allow": [], + "boolean": true, + "disallowTemplateShorthand": false, + "number": true, + "string": true + } + ], + "no-implicit-globals": [ + 2, + { + "lexicalBindings": false + } + ], + "no-implied-eval": [2], + "no-iterator": [2], + "no-labels": [ + 2, + { + "allowLoop": false, + "allowSwitch": false + } + ], + "no-lone-blocks": [2], + "no-loop-func": [2], + "no-new-func": [2], + "no-new-wrappers": [2], + "no-new": [2], + "no-octal-escape": [2], + "no-octal": [2], + "no-param-reassign": [2], + "no-proto": [2], + "no-return-assign": [2, "except-parens"], + "no-return-await": [2], + "no-self-assign": [ + 2, + { + "props": true + } + ], + "no-self-compare": [2], + "no-sequences": [ + 2, + { + "allowInParentheses": true + } + ], + "no-throw-literal": [2], + "no-unmodified-loop-condition": [2], + "no-unused-labels": [2], + "no-useless-call": [2], + "no-useless-catch": [2], + "no-useless-concat": [2], + "no-useless-escape": [ + 2, + { + "allowRegexCharacters": [] + } + ], + "no-useless-return": [2], + "no-void": [ + 2, + { + "allowAsStatement": false + } + ], + "no-warning-comments": [ + 2, + { + "location": "start", + "terms": ["todo", "fixme", "xxx"] + } + ], + "no-with": [2], + "radix": [2, "always"], + "yoda": [ + 2, + "never", + { + "exceptRange": false, + "onlyEquality": false + } + ], + "no-constructor-return": [2], + "grouped-accessor-pairs": [ + 2, + "anyOrder", + { + "enforceForTSTypes": false + } + ], + "max-params": [2, 10], + "for-direction": [2], + "no-async-promise-executor": [2], + "no-await-in-loop": [2], + "no-compare-neg-zero": [2], + "no-cond-assign": [2, "except-parens"], + "no-console": [2, {}], + "no-constant-condition": [ + 2, + { + "checkLoops": false + } + ], + "no-control-regex": [2], + "no-duplicate-case": [2], + "no-empty-character-class": [2], + "no-empty": [ + 2, + { + "allowEmptyCatch": false + } + ], + "no-ex-assign": [2], + "no-extra-boolean-cast": [2, {}], + "no-func-assign": [2], + "no-inner-declarations": [ + 2, + "functions", + { + "blockScopedFunctions": "allow" + } + ], + "no-invalid-regexp": [2, {}], + "no-irregular-whitespace": [ + 2, + { + "skipComments": false, + "skipJSXText": false, + "skipRegExps": false, + "skipStrings": true, + "skipTemplates": false + } + ], + "no-misleading-character-class": [ + 2, + { + "allowEscape": false + } + ], + "no-obj-calls": [2], + "no-prototype-builtins": [2], + "no-regex-spaces": [2], + "no-sparse-arrays": [2], + "no-template-curly-in-string": [2], + "no-unsafe-finally": [2], + "no-unsafe-negation": [ + 2, + { + "enforceForOrderingRelations": false + } + ], + "require-atomic-updates": [ + 2, + { + "allowProperties": false + } + ], + "use-isnan": [ + 2, + { + "enforceForIndexOf": false, + "enforceForSwitchCase": true + } + ], + "no-setter-return": [2], + "no-dupe-else-if": [2], + "@shopify/images-no-direct-imports": [2], + "@shopify/no-context-menu": [2], + "@shopify/no-debugger": [2], + "@shopify/no-useless-computed-properties": [2], + "@shopify/prefer-module-scope-constants": [2], + "@shopify/prefer-twine": [2], + "@shopify/typescript-prefer-pascal-case-enums": [2], + "@shopify/typescript-prefer-singular-enums": [2], + "@shopify/typescript-prefer-build-client-schema": [2], + "consistent-this": [2, "self"], + "func-name-matching": [2], + "func-style": [ + 2, + "declaration", + { + "allowArrowFunctions": true, + "allowTypeAnnotation": false, + "overrides": {} + } + ], + "id-length": [ + 2, + { + "exceptionPatterns": [], + "exceptions": ["x", "y", "i", "j", "t", "q", "_", "$"], + "min": 2, + "properties": "always" + } + ], + "line-comment-position": [ + 2, + { + "position": "above" + } + ], + "new-cap": [ + 2, + { + "capIsNew": false, + "capIsNewExceptions": [ + "Array", + "Boolean", + "Date", + "Error", + "Function", + "Number", + "Object", + "RegExp", + "String", + "Symbol", + "BigInt" + ], + "newIsCap": true, + "newIsCapExceptions": [], + "properties": true + } + ], + "no-lonely-if": [2], + "no-multi-assign": [ + 2, + { + "ignoreNonDeclaration": false + } + ], + "no-negated-condition": [2], + "no-nested-ternary": [2], + "no-new-object": [2], + "no-restricted-syntax": [ + 2, + { + "selector": "Literal[value=/(cannot|will not|do not)/i]", + "message": "Be human - prefer don't to do not, won't to will not etc." + }, + { + "selector": "TemplateElement[value.raw=/(cannot|will not|do not)/i]", + "message": "Be human - prefer don't to do not, won't to will not etc." + } + ], + "no-unneeded-ternary": [ + 2, + { + "defaultAssignment": true + } + ], + "one-var": [2, "never"], + "operator-assignment": [2, "always"], + "prefer-object-spread": [2], + "unicode-bom": [2, "never"], + "prefer-exponentiation-operator": [2], + "no-delete-var": [2], + "no-label-var": [2], + "no-restricted-globals": [ + 2, + { + "name": "fetch", + "message": "Please use our alternative fetch implementation in @shopify/cli-kit/node/http instead of Node.js built-in fetch. Built-in fetch does not support HTTP proxies." + } + ], + "no-shadow-restricted-names": [ + 2, + { + "reportGlobalThis": false + } + ], + "no-undef-init": [2], + "lines-between-class-members": [ + 2, + "always", + { + "exceptAfterSingleLine": true + } + ], + "padding-line-between-statements": [ + 2, + { + "blankLine": "always", + "prev": "directive", + "next": "*" + }, + { + "blankLine": "any", + "prev": "directive", + "next": "directive" + } + ], + "spaced-comment": [ + 2, + "always", + { + "markers": ["="] + } + ], + "eslint-comments/disable-enable-pair": [ + 2, + { + "allowWholeFile": true + } + ], + "eslint-comments/no-aggregating-enable": [2], + "eslint-comments/no-duplicate-disable": [2], + "eslint-comments/no-unlimited-disable": [2], + "eslint-comments/no-unused-disable": [2], + "eslint-comments/no-unused-enable": [2], + "constructor-super": [2], + "no-class-assign": [2], + "no-useless-rename": [ + 2, + { + "ignoreDestructuring": false, + "ignoreImport": false, + "ignoreExport": false + } + ], + "no-var": [2], + "object-shorthand": [ + 2, + "always", + { + "avoidQuotes": true + } + ], + "prefer-const": [ + 2, + { + "destructuring": "any", + "ignoreReadBeforeAssign": false + } + ], + "prefer-numeric-literals": [2], + "prefer-rest-params": [2], + "prefer-spread": [2], + "prefer-template": [2], + "require-yield": [2], + "symbol-description": [2], + "promise/catch-or-return": [ + 2, + { + "allowFinally": true + } + ], + "promise/no-return-wrap": [2], + "promise/param-names": [2], + "promise/no-nesting": [2], + "promise/valid-params": [2], + "promise/no-return-in-finally": [2], + "import-x/default": [2], + "import-x/namespace": [2], + "import-x/no-named-default": [2], + "import-x/no-absolute-path": [2], + "import-x/no-webpack-loader-syntax": [2], + "import-x/no-self-import": [2], + "import-x/no-useless-path-segments": [2], + "import-x/no-unused-modules": [2], + "import-x/no-named-as-default": [2], + "import-x/no-named-as-default-member": [2], + "import-x/no-deprecated": [2], + "import-x/no-mutable-exports": [2], + "import-x/first": [2], + "import-x/no-duplicates": [2], + "import-x/extensions": [ + 2, + "ignorePackages", + { + "ts": "never", + "tsx": "never", + "js": "always" + } + ], + "import-x/order": [ + 2, + { + "groups": ["index", "sibling", "parent", "internal", "external", "builtin", "object", "type"], + "distinctGroup": true, + "sortTypesGroup": false, + "named": false, + "warnOnUnassignedImports": false + } + ], + "import-x/newline-after-import": [2], + "import-x/no-anonymous-default-export": [2], + "@typescript-eslint/no-array-constructor": [2], + "@typescript-eslint/no-explicit-any": [ + 2, + { + "fixToUnknown": true + } + ], + "@typescript-eslint/no-inferrable-types": [ + 2, + { + "ignoreParameters": false, + "ignoreProperties": false + } + ], + "@typescript-eslint/member-ordering": [ + 2, + { + "default": [ + "public-static-field", + "protected-static-field", + "private-static-field", + "public-static-method", + "protected-static-method", + "private-static-method", + "public-instance-field", + "protected-instance-field", + "private-instance-field", + "constructor", + "public-instance-method", + "protected-instance-method", + "private-instance-method" + ] + } + ], + "@typescript-eslint/no-unused-vars": [ + 2, + { + "args": "all", + "argsIgnorePattern": "^_", + "caughtErrors": "none", + "caughtErrorsIgnorePattern": "^_", + "destructuredArrayIgnorePattern": "^_", + "varsIgnorePattern": "^_", + "ignoreRestSiblings": true + } + ], + "@typescript-eslint/adjacent-overload-signatures": [2], + "@typescript-eslint/array-type": [ + 2, + { + "default": "array", + "readonly": "generic" + } + ], + "@typescript-eslint/no-wrapper-object-types": [2], + "@typescript-eslint/naming-convention": [ + 2, + { + "selector": "default", + "format": ["camelCase", "PascalCase", "UPPER_CASE"], + "leadingUnderscore": "allow", + "trailingUnderscore": "allow" + }, + { + "selector": "default", + "filter": { + "match": true, + "regex": "^(__|UNSAFE_).+$" + }, + "format": null + }, + { + "selector": "typeLike", + "format": ["PascalCase"] + }, + { + "selector": "typeParameter", + "format": ["PascalCase"], + "prefix": ["T"] + }, + { + "selector": "interface", + "format": ["PascalCase"], + "custom": { + "regex": "^I[A-Z]", + "match": false + } + }, + { + "selector": ["objectLiteralProperty", "typeProperty"], + "format": null + } + ], + "@typescript-eslint/no-extraneous-class": [ + 2, + { + "allowConstructorOnly": false, + "allowEmpty": false, + "allowStaticOnly": false + } + ], + "@typescript-eslint/no-misused-new": [2], + "@typescript-eslint/no-this-alias": [ + 2, + { + "allowDestructuring": true, + "allowedNames": [] + } + ], + "@typescript-eslint/ban-ts-comment": [2], + "@typescript-eslint/consistent-type-assertions": [ + 2, + { + "assertionStyle": "as", + "objectLiteralTypeAssertions": "allow" + } + ], + "@typescript-eslint/consistent-type-definitions": [2, "interface"], + "@typescript-eslint/no-floating-promises": [2], + "@typescript-eslint/prefer-for-of": [2], + "@typescript-eslint/triple-slash-reference": [ + 2, + { + "path": "never", + "types": "never", + "lib": "never" + } + ], + "@typescript-eslint/unified-signatures": [2], + "@typescript-eslint/no-misused-promises": [2], + "@typescript-eslint/no-unnecessary-type-assertion": [2], + "@typescript-eslint/prefer-readonly": [2], + "@typescript-eslint/no-unnecessary-type-constraint": [2], + "@typescript-eslint/no-unused-expressions": [ + 2, + { + "allowShortCircuit": false, + "allowTaggedTemplates": false, + "allowTernary": true + } + ], + "n/handle-callback-err": [2, "^.*(e|E)rr(or)?$"], + "n/no-new-require": [2], + "n/no-path-concat": [2], + "n/exports-style": [2, "module.exports"], + "n/prefer-global/buffer": [2], + "n/prefer-global/console": [2], + "n/prefer-global/process": [2], + "n/prefer-global/text-decoder": [2], + "n/prefer-global/text-encoder": [2], + "n/prefer-global/url-search-params": [2], + "n/prefer-global/url": [2], + "n/no-unpublished-bin": [2], + "n/shebang": [2], + "n/prefer-promises/dns": [2], + "n/prefer-promises/fs": [2], + "n/no-exports-assign": [2], + "n/no-callback-literal": [2], + "no-catch-all/no-catch-all": [2], + "@typescript-eslint/switch-exhaustiveness-check": [2], + "unused-imports/no-unused-imports": [2], + "no-restricted-imports": [ + 2, + { + "paths": [ + { + "name": "path", + "message": "Please use: import { joinPath } from '@shopify/cli-kit/node/path'" + }, + { + "name": "node:path", + "message": "Please use: import { joinPath } from '@shopify/cli-kit/node/path'" + }, + { + "name": "child_process", + "message": "Please use: import { exec } from '@shopify/cli-kit/node/system'" + }, + { + "name": "node:child_process", + "message": "Please use: import { exec } from '@shopify/cli-kit/node/system'" + } + ] + } + ], + "vitest/consistent-test-it": [ + 2, + { + "fn": "test", + "withinDescribe": "test" + } + ], + "vitest/max-nested-describe": [ + 2, + { + "max": 2 + } + ], + "vitest/no-disabled-tests": [2], + "vitest/prefer-expect-resolves": [2], + "@shopify/cli/command-flags-with-env": [2], + "@shopify/cli/command-conventional-flag-env": [2], + "@shopify/cli/command-reserved-flags": [2], + "@shopify/cli/command-json-output": [2], + "@shopify/cli/no-error-factory-functions": [2], + "@shopify/cli/no-process-cwd": [2], + "@shopify/cli/no-trailing-js-in-cli-kit-imports": [2], + "@shopify/cli/no-vi-manual-mock-clear": [2], + "@shopify/cli/no-vi-mock-in-callbacks": [2], + "@shopify/cli/prompt-message-format": [2], + "@shopify/cli/banner-headline-format": [2], + "@shopify/cli/required-fields-when-loading-app": [2], + "@shopify/cli/no-inline-graphql": [2], + "tsdoc/syntax": [2], + "@typescript-eslint/prefer-nullish-coalescing": [2], + "@typescript-eslint/prefer-promise-reject-errors": [2], + "@typescript-eslint/only-throw-error": [2], + "@nx/enforce-module-boundaries": [2] + }, + "configurations": [ + { + "files": [ + "packages/app/src/cli/api/admin-as-app.test.ts", + "packages/app/src/cli/commands/app/app-logs/sources.test.ts", + "packages/app/src/cli/commands/app/bulk/cancel.test.ts", + "packages/app/src/cli/commands/app/bulk/execute.test.ts", + "packages/app/src/cli/commands/app/bulk/status.test.ts", + "packages/app/src/cli/commands/app/config/link.test.ts", + "packages/app/src/cli/commands/app/config/validate.test.ts", + "packages/app/src/cli/commands/app/deprecated-import-commands.test.ts", + "packages/app/src/cli/commands/app/dev.test.ts", + "packages/app/src/cli/commands/app/env/pull.test.ts", + "packages/app/src/cli/commands/app/graphiql.test.ts", + "packages/app/src/cli/commands/app/info.test.ts", + "packages/app/src/cli/commands/app/init.test.ts", + "packages/app/src/cli/commands/app/non-interactive-flags.test.ts", + "packages/app/src/cli/commands/app/security/check.integration.test.ts", + "packages/app/src/cli/commands/app/security/check.test.ts", + "packages/app/src/cli/commands/app/security/instructions.test.ts", + "packages/app/src/cli/commands/app/security/submit.integration.test.ts", + "packages/app/src/cli/commands/app/security/submit.test.ts", + "packages/app/src/cli/commands/app/subscription-migrations/commands.test.ts", + "packages/app/src/cli/commands/app/subscription-migrations/list.integration.test.ts", + "packages/app/src/cli/commands/app/subscription-migrations/list.test.ts", + "packages/app/src/cli/commands/app/subscription-migrations/result-codec.test.ts", + "packages/app/src/cli/commands/app/subscription-migrations/result-presenter.test.ts", + "packages/app/src/cli/commands/app/versions/list.test.ts", + "packages/app/src/cli/commands/organization/list.test.ts", + "packages/app/src/cli/hooks/public_metadata.test.ts", + "packages/app/src/cli/index.test.ts", + "packages/app/src/cli/models/app/app.test-data.ts", + "packages/app/src/cli/models/app/app.test.ts", + "packages/app/src/cli/models/app/config-file-naming.test.ts", + "packages/app/src/cli/models/app/error-parsing.test.ts", + "packages/app/src/cli/models/app/identifiers.test.ts", + "packages/app/src/cli/models/app/loader.test.ts", + "packages/app/src/cli/models/app/validation/common.test.ts", + "packages/app/src/cli/models/extensions/extension-instance.test.ts", + "packages/app/src/cli/models/extensions/schemas.test.ts", + "packages/app/src/cli/models/extensions/specification.integration.test.ts", + "packages/app/src/cli/models/extensions/specifications/admin_link.test.ts", + "packages/app/src/cli/models/extensions/specifications/app_config_app_access.test.ts", + "packages/app/src/cli/models/extensions/specifications/app_config_app_home.test.ts", + "packages/app/src/cli/models/extensions/specifications/app_config_app_proxy.test.ts", + "packages/app/src/cli/models/extensions/specifications/app_config_branding.test.ts", + "packages/app/src/cli/models/extensions/specifications/app_config_point_of_sale.test.ts", + "packages/app/src/cli/models/extensions/specifications/app_config_privacy_compliance_webhooks.test.ts", + "packages/app/src/cli/models/extensions/specifications/app_config_webhook.test.ts", + "packages/app/src/cli/models/extensions/specifications/app_config_webhook_subscription.test.ts", + "packages/app/src/cli/models/extensions/specifications/editor_extension_collection.test.ts", + "packages/app/src/cli/models/extensions/specifications/flow_action.test.ts", + "packages/app/src/cli/models/extensions/specifications/flow_trigger_lifecycle_callback.test.ts", + "packages/app/src/cli/models/extensions/specifications/function.test.ts", + "packages/app/src/cli/models/extensions/specifications/payments_app_extension.test.ts", + "packages/app/src/cli/models/extensions/specifications/payments_app_extension_schemas/base_payments_app_extension_schema.test.ts", + "packages/app/src/cli/models/extensions/specifications/payments_app_extension_schemas/card_present_payments_app_extension_schema.test.ts", + "packages/app/src/cli/models/extensions/specifications/payments_app_extension_schemas/credit_card_payments_app_extension_schema.test.ts", + "packages/app/src/cli/models/extensions/specifications/payments_app_extension_schemas/custom_credit_card_payments_app_extension_schema.test.ts", + "packages/app/src/cli/models/extensions/specifications/payments_app_extension_schemas/custom_onsite_payments_app_extension_schema.test.ts", + "packages/app/src/cli/models/extensions/specifications/payments_app_extension_schemas/offsite_payments_app_extension_schema.test.ts", + "packages/app/src/cli/models/extensions/specifications/payments_app_extension_schemas/redeemable_payments_app_extension_schema.test.ts", + "packages/app/src/cli/models/extensions/specifications/transform/app_config_events.test.ts", + "packages/app/src/cli/models/extensions/specifications/transform/app_config_webhook.test.ts", + "packages/app/src/cli/models/extensions/specifications/transform/extension_uuid_to_handle.test.ts", + "packages/app/src/cli/models/extensions/specifications/type-generation.test.ts", + "packages/app/src/cli/models/extensions/specifications/ui_extension.test.ts", + "packages/app/src/cli/models/extensions/specifications/validation/app_relative_urls.test.ts", + "packages/app/src/cli/models/project/active-config.test.ts", + "packages/app/src/cli/models/project/config-selection.test.ts", + "packages/app/src/cli/models/project/project-integration.test.ts", + "packages/app/src/cli/models/project/project.test.ts", + "packages/app/src/cli/models/subscription-migrations.test.ts", + "packages/app/src/cli/prompts/config.test.ts", + "packages/app/src/cli/prompts/deploy-release.test.ts", + "packages/app/src/cli/prompts/dev.test.ts", + "packages/app/src/cli/prompts/function/replay.test.ts", + "packages/app/src/cli/prompts/generate/extension.test.ts", + "packages/app/src/cli/prompts/import-extensions.test.ts", + "packages/app/src/cli/prompts/init/init.test.ts", + "packages/app/src/cli/prompts/ui/deploy-release-info-table-section.test.ts", + "packages/app/src/cli/prompts/webhook/trigger.test.ts", + "packages/app/src/cli/services/admin-link/extension-config-builder.test.ts", + "packages/app/src/cli/services/admin-link/utils.test.ts", + "packages/app/src/cli/services/app/add-uid-to-extension-toml.test.ts", + "packages/app/src/cli/services/app/config/link-service.test.ts", + "packages/app/src/cli/services/app/config/link.test.ts", + "packages/app/src/cli/services/app/config/use.test.ts", + "packages/app/src/cli/services/app/config-pipeline-snapshot.test.ts", + "packages/app/src/cli/services/app/env/pull.test.ts", + "packages/app/src/cli/services/app/env/show.test.ts", + "packages/app/src/cli/services/app/graphiql.test.ts", + "packages/app/src/cli/services/app/patch-app-configuration-file.test.ts", + "packages/app/src/cli/services/app/select-app.test.ts", + "packages/app/src/cli/services/app/write-app-configuration-file.test.ts", + "packages/app/src/cli/services/app-context.test.ts", + "packages/app/src/cli/services/app-logs/camelcase-keys.test.ts", + "packages/app/src/cli/services/app-logs/dev/poll-app-logs.test.ts", + "packages/app/src/cli/services/app-logs/dev/write-app-logs.test.ts", + "packages/app/src/cli/services/app-logs/logs-command/poll-app-logs.test.ts", + "packages/app/src/cli/services/app-logs/logs-command/render-json-logs.test.ts", + "packages/app/src/cli/services/app-logs/logs-command/ui/components/Logs.test.tsx", + "packages/app/src/cli/services/app-logs/logs-command/ui/components/hooks/usePollAppLogs.test.tsx", + "packages/app/src/cli/services/app-logs/logs-command/ui/components/hooks/useSelfAdjustingInterval.test.tsx", + "packages/app/src/cli/services/app-logs/sources/result.test.ts", + "packages/app/src/cli/services/app-logs/sources/types.test.ts", + "packages/app/src/cli/services/app-logs/sources.test.ts", + "packages/app/src/cli/services/app-security-api.test.ts", + "packages/app/src/cli/services/app-security-artifacts.test.ts", + "packages/app/src/cli/services/app-security-config.test.ts", + "packages/app/src/cli/services/app-security-engine/output/group-issues.test.ts", + "packages/app/src/cli/services/app-security-engine/tests/auth-rules.test.ts", + "packages/app/src/cli/services/app-security-engine/tests/dependency-automation-rules.test.ts", + "packages/app/src/cli/services/app-security-engine/tests/deterministic-rules.test.ts", + "packages/app/src/cli/services/app-security-engine/tests/interaction.test.ts", + "packages/app/src/cli/services/app-security-engine/tests/registry.test.ts", + "packages/app/src/cli/services/app-security-engine/tests/rule-analysis.test.ts", + "packages/app/src/cli/services/app-security-engine/tests/submission.test.ts", + "packages/app/src/cli/services/app-security-instructions.test.ts", + "packages/app/src/cli/services/app-security-json.test.ts", + "packages/app/src/cli/services/app-security-submission-payload.test.ts", + "packages/app/src/cli/services/app-security-submit-api.test.ts", + "packages/app/src/cli/services/app-security-submit-target.test.ts", + "packages/app/src/cli/services/build/bundle-size.test.ts", + "packages/app/src/cli/services/build/client-steps.test.ts", + "packages/app/src/cli/services/build/extension.test.ts", + "packages/app/src/cli/services/build/steps/bundle-ui-step.test.ts", + "packages/app/src/cli/services/build/steps/include-assets/assert-path-within-app.test.ts", + "packages/app/src/cli/services/build/steps/include-assets/copy-by-pattern.test.ts", + "packages/app/src/cli/services/build/steps/include-assets/copy-config-key-entry.test.ts", + "packages/app/src/cli/services/build/steps/include-assets/copy-source-entry.test.ts", + "packages/app/src/cli/services/build/steps/include-assets-step.test.ts", + "packages/app/src/cli/services/build/theme-check.test.ts", + "packages/app/src/cli/services/bulk-operations/bulk-operation-status.test.ts", + "packages/app/src/cli/services/bulk-operations/cancel-bulk-operation.test.ts", + "packages/app/src/cli/services/bulk-operations/execute-bulk-operation.test.ts", + "packages/app/src/cli/services/bundle.test.ts", + "packages/app/src/cli/services/context/breakdown-extensions.test.ts", + "packages/app/src/cli/services/context.test.ts", + "packages/app/src/cli/services/dependencies.test.ts", + "packages/app/src/cli/services/deploy/bundle.test.ts", + "packages/app/src/cli/services/deploy/theme-extension-config.test.ts", + "packages/app/src/cli/services/deploy/upload.test.ts", + "packages/app/src/cli/services/deploy.test.ts", + "packages/app/src/cli/services/dev/app-events/app-diffing.test.ts", + "packages/app/src/cli/services/dev/app-events/app-event-watcher.test.ts", + "packages/app/src/cli/services/dev/app-events/file-watcher.test.ts", + "packages/app/src/cli/services/dev/cap.test.ts", + "packages/app/src/cli/services/dev/extension/localization.test.ts", + "packages/app/src/cli/services/dev/extension/payload/store.test.ts", + "packages/app/src/cli/services/dev/extension/payload.test.ts", + "packages/app/src/cli/services/dev/extension/server/middlewares.test.ts", + "packages/app/src/cli/services/dev/extension/server/utilities.test.ts", + "packages/app/src/cli/services/dev/extension/templates.integration.test.ts", + "packages/app/src/cli/services/dev/extension/utilities.test.ts", + "packages/app/src/cli/services/dev/extension/websocket/handlers.test.ts", + "packages/app/src/cli/services/dev/extension/websocket.test.ts", + "packages/app/src/cli/services/dev/extension.test.ts", + "packages/app/src/cli/services/dev/fetch.test.ts", + "packages/app/src/cli/services/dev/migrate-app-module.test.ts", + "packages/app/src/cli/services/dev/migrate-flow-extension.test.ts", + "packages/app/src/cli/services/dev/migrate-to-ui-extension.test.ts", + "packages/app/src/cli/services/dev/port-warnings.test.ts", + "packages/app/src/cli/services/dev/processes/app-logs-polling.test.ts", + "packages/app/src/cli/services/dev/processes/dev-session/dev-session-logger.test.ts", + "packages/app/src/cli/services/dev/processes/dev-session/dev-session-process.test.ts", + "packages/app/src/cli/services/dev/processes/dev-session/dev-session-status-manager.test.ts", + "packages/app/src/cli/services/dev/processes/graphiql-token-provider.test.ts", + "packages/app/src/cli/services/dev/processes/setup-dev-processes.test.ts", + "packages/app/src/cli/services/dev/processes/theme-app-extension.test.ts", + "packages/app/src/cli/services/dev/select-app.test.ts", + "packages/app/src/cli/services/dev/select-store.test.ts", + "packages/app/src/cli/services/dev/tunnel-mode.test.ts", + "packages/app/src/cli/services/dev/ui/components/DevSessionUI.test.tsx", + "packages/app/src/cli/services/dev/ui/components/TabPanel.test.tsx", + "packages/app/src/cli/services/dev/ui.test.tsx", + "packages/app/src/cli/services/dev/urls.test.ts", + "packages/app/src/cli/services/dev-clean.test.ts", + "packages/app/src/cli/services/dev.test.ts", + "packages/app/src/cli/services/execute-operation.test.ts", + "packages/app/src/cli/services/extensions/bundle.test.ts", + "packages/app/src/cli/services/extensions/common.test.ts", + "packages/app/src/cli/services/fetch-extensions.test.ts", + "packages/app/src/cli/services/flow/extension-config-builder.test.ts", + "packages/app/src/cli/services/flow/serialize-fields.test.ts", + "packages/app/src/cli/services/flow/serialize-partners-fields.test.ts", + "packages/app/src/cli/services/flow/utils.test.ts", + "packages/app/src/cli/services/flow/validation.test.ts", + "packages/app/src/cli/services/format-config-info-body.test.ts", + "packages/app/src/cli/services/function/binaries.test.ts", + "packages/app/src/cli/services/function/build.test.ts", + "packages/app/src/cli/services/function/common.test.ts", + "packages/app/src/cli/services/function/info.test.ts", + "packages/app/src/cli/services/function/replay.test.ts", + "packages/app/src/cli/services/function/runner.test.ts", + "packages/app/src/cli/services/function/schema-version.test.ts", + "packages/app/src/cli/services/function/ui/components/Replay/Replay.test.tsx", + "packages/app/src/cli/services/function/ui/components/Replay/hooks/useFunctionWatcher.test.tsx", + "packages/app/src/cli/services/generate/extension.test.ts", + "packages/app/src/cli/services/generate/fetch-extension-specifications.test.ts", + "packages/app/src/cli/services/generate/fetch-template-specifications.test.ts", + "packages/app/src/cli/services/generate/shop-import/declarative-definitions.test.ts", + "packages/app/src/cli/services/generate-schema.test.ts", + "packages/app/src/cli/services/generate.test.ts", + "packages/app/src/cli/services/graphql/common.test.ts", + "packages/app/src/cli/services/import-extensions.test.ts", + "packages/app/src/cli/services/info/result.test.ts", + "packages/app/src/cli/services/info.test.ts", + "packages/app/src/cli/services/init/init.test.ts", + "packages/app/src/cli/services/init/template/cleanup.test.ts", + "packages/app/src/cli/services/init/template/npm.test.ts", + "packages/app/src/cli/services/init/validate.test.ts", + "packages/app/src/cli/services/local-storage.test.ts", + "packages/app/src/cli/services/logs.test.ts", + "packages/app/src/cli/services/marketing_activity/extension-config-builder.test.ts", + "packages/app/src/cli/services/organization/list/result.test.ts", + "packages/app/src/cli/services/organization/list.test.ts", + "packages/app/src/cli/services/payments/extension-config-builder.test.ts", + "packages/app/src/cli/services/release/version-diff.test.ts", + "packages/app/src/cli/services/release.test.ts", + "packages/app/src/cli/services/security-check.test.ts", + "packages/app/src/cli/services/security-output.test.ts", + "packages/app/src/cli/services/security-submit-json.test.ts", + "packages/app/src/cli/services/security-submit-output.test.ts", + "packages/app/src/cli/services/security-submit-result.test.ts", + "packages/app/src/cli/services/security-submit.test.ts", + "packages/app/src/cli/services/store-context.test.ts", + "packages/app/src/cli/services/subscription-migrations/cancel-operations.test.ts", + "packages/app/src/cli/services/subscription-migrations/command-output.test.ts", + "packages/app/src/cli/services/subscription-migrations/get-operations.test.ts", + "packages/app/src/cli/services/subscription-migrations/input/load-csv-input.test.ts", + "packages/app/src/cli/services/subscription-migrations/list-migratable-subscriptions.test.ts", + "packages/app/src/cli/services/subscription-migrations/list-output.test.ts", + "packages/app/src/cli/services/subscription-migrations/partners-api.test.ts", + "packages/app/src/cli/services/subscription-migrations/plan/create-migration-plan.test.ts", + "packages/app/src/cli/services/subscription-migrations/plan/idempotency.test.ts", + "packages/app/src/cli/services/subscription-migrations/plan/parse-migration-csv.test.ts", + "packages/app/src/cli/services/subscription-migrations/plan/plan-migration-input.test.ts", + "packages/app/src/cli/services/subscription-migrations/run-submission-command.test.ts", + "packages/app/src/cli/services/subscription-migrations/submit-migration-plan.test.ts", + "packages/app/src/cli/services/subscription-migrations/wait-for-operations.test.ts", + "packages/app/src/cli/services/subscription-migrations/watch-operations.test.ts", + "packages/app/src/cli/services/subscription_link/extension-config-builder.test.ts", + "packages/app/src/cli/services/validate.test.ts", + "packages/app/src/cli/services/versions-list/result.test.ts", + "packages/app/src/cli/services/versions-list.test.ts", + "packages/app/src/cli/services/webhook/request-api-versions.test.ts", + "packages/app/src/cli/services/webhook/request-sample.test.ts", + "packages/app/src/cli/services/webhook/request-topics.test.ts", + "packages/app/src/cli/services/webhook/send-app-uninstalled-webhook.test.ts", + "packages/app/src/cli/services/webhook/trigger-flags.test.ts", + "packages/app/src/cli/services/webhook/trigger-local-webhook.test.ts", + "packages/app/src/cli/services/webhook/trigger-options.test.ts", + "packages/app/src/cli/services/webhook/trigger.test.ts", + "packages/app/src/cli/utilities/analytics.test.ts", + "packages/app/src/cli/utilities/app/config/hidden-app-config.test.ts", + "packages/app/src/cli/utilities/app/http-reverse-proxy.test.ts", + "packages/app/src/cli/utilities/deprecated-command.test.ts", + "packages/app/src/cli/utilities/developer-platform-client/app-management-client.test.ts", + "packages/app/src/cli/utilities/developer-platform-client/partners-client.test.ts", + "packages/app/src/cli/utilities/developer-platform-client.test.ts", + "packages/app/src/cli/utilities/execute-command-helpers.test.ts", + "packages/app/src/cli/utilities/extensions/locales-configuration.test.ts", + "packages/app/src/cli/utilities/extensions/theme/host-theme-manager.test.ts", + "packages/app/src/cli/utilities/extensions/theme/host-theme-watcher.test.ts", + "packages/app/src/cli/utilities/extensions/theme.test.ts", + "packages/app/src/cli/utilities/json-schema.test.ts", + "packages/app/src/cli/utilities/mkcert.test.ts", + "packages/app/src/cli/validations/message.test.ts", + "packages/app/src/cli/validations/version-name.test.ts", + "packages/cli-kit/src/private/node/analytics/bounded-collections.test.ts", + "packages/cli-kit/src/private/node/analytics/error-categorizer.test.ts", + "packages/cli-kit/src/private/node/analytics/error-grouping.test.ts", + "packages/cli-kit/src/private/node/analytics/graphql-error-codes.test.ts", + "packages/cli-kit/src/private/node/analytics/storage.test.ts", + "packages/cli-kit/src/private/node/analytics.test.ts", + "packages/cli-kit/src/private/node/api/graphql.test.ts", + "packages/cli-kit/src/private/node/api/headers.test.ts", + "packages/cli-kit/src/private/node/api/rest.test.ts", + "packages/cli-kit/src/private/node/api/urls.test.ts", + "packages/cli-kit/src/private/node/api.test.ts", + "packages/cli-kit/src/private/node/command-event-context.test.ts", + "packages/cli-kit/src/private/node/conf-store.test.ts", + "packages/cli-kit/src/private/node/content-tokens.test.ts", + "packages/cli-kit/src/private/node/context/agent.test.ts", + "packages/cli-kit/src/private/node/context/deprecations-store.test.ts", + "packages/cli-kit/src/private/node/context/service.test.ts", + "packages/cli-kit/src/private/node/json-error.integration.test.ts", + "packages/cli-kit/src/private/node/json-error.test.ts", + "packages/cli-kit/src/private/node/otel-metrics.test.ts", + "packages/cli-kit/src/private/node/output.test.tsx", + "packages/cli-kit/src/private/node/plugin-hints.test.ts", + "packages/cli-kit/src/private/node/request-ids.test.ts", + "packages/cli-kit/src/private/node/session/device-authorization.test.ts", + "packages/cli-kit/src/private/node/session/exchange.test.ts", + "packages/cli-kit/src/private/node/session/scopes.test.ts", + "packages/cli-kit/src/private/node/session/store.test.ts", + "packages/cli-kit/src/private/node/session/validate.test.ts", + "packages/cli-kit/src/private/node/session.test.ts", + "packages/cli-kit/src/private/node/sleep-with-backoff.test.ts", + "packages/cli-kit/src/private/node/testing/ui.ts", + "packages/cli-kit/src/private/node/themes/generate-theme-name.test.ts", + "packages/cli-kit/src/private/node/themes/replace-invalid-characters.test.ts", + "packages/cli-kit/src/private/node/ui/components/Alert.test.tsx", + "packages/cli-kit/src/private/node/ui/components/AutocompletePrompt.test.tsx", + "packages/cli-kit/src/private/node/ui/components/Banner.test.tsx", + "packages/cli-kit/src/private/node/ui/components/Command.test.tsx", + "packages/cli-kit/src/private/node/ui/components/ConcurrentOutput.test.tsx", + "packages/cli-kit/src/private/node/ui/components/DangerousConfirmationPrompt.test.tsx", + "packages/cli-kit/src/private/node/ui/components/FatalError.test.tsx", + "packages/cli-kit/src/private/node/ui/components/FilePath.test.tsx", + "packages/cli-kit/src/private/node/ui/components/Link.test.tsx", + "packages/cli-kit/src/private/node/ui/components/List.test.tsx", + "packages/cli-kit/src/private/node/ui/components/LoadingBar.test.tsx", + "packages/cli-kit/src/private/node/ui/components/Prompts/InfoMessage.test.tsx", + "packages/cli-kit/src/private/node/ui/components/Prompts/InfoTable.test.tsx", + "packages/cli-kit/src/private/node/ui/components/Prompts/PromptLayout.test.tsx", + "packages/cli-kit/src/private/node/ui/components/Scrollbar.test.tsx", + "packages/cli-kit/src/private/node/ui/components/SelectInput.test.tsx", + "packages/cli-kit/src/private/node/ui/components/SelectPrompt.test.tsx", + "packages/cli-kit/src/private/node/ui/components/SingleTask.test.tsx", + "packages/cli-kit/src/private/node/ui/components/Subdued.test.tsx", + "packages/cli-kit/src/private/node/ui/components/Table/Table.test.tsx", + "packages/cli-kit/src/private/node/ui/components/Tasks.test.tsx", + "packages/cli-kit/src/private/node/ui/components/TextAnimation.test.tsx", + "packages/cli-kit/src/private/node/ui/components/TextInput.test.tsx", + "packages/cli-kit/src/private/node/ui/components/TextPrompt.test.tsx", + "packages/cli-kit/src/private/node/ui/components/TokenizedText.test.tsx", + "packages/cli-kit/src/private/node/ui/components/UserInput.test.tsx", + "packages/cli-kit/src/private/node/ui/hooks/use-exit-on-ctrl-c.test.ts", + "packages/cli-kit/src/private/node/ui/hooks/use-layout.test.ts", + "packages/cli-kit/src/private/node/ui/utilities.test.ts", + "packages/cli-kit/src/public/common/array.test.ts", + "packages/cli-kit/src/public/common/collection.test.ts", + "packages/cli-kit/src/public/common/command-events.test.ts", + "packages/cli-kit/src/public/common/function.test.ts", + "packages/cli-kit/src/public/common/gid.test.ts", + "packages/cli-kit/src/public/common/json.test.ts", + "packages/cli-kit/src/public/common/lang.test.ts", + "packages/cli-kit/src/public/common/object.test.ts", + "packages/cli-kit/src/public/common/retry.test.ts", + "packages/cli-kit/src/public/common/string.test.ts", + "packages/cli-kit/src/public/common/ts/json-narrowing.test.ts", + "packages/cli-kit/src/public/common/url.test.ts", + "packages/cli-kit/src/public/node/abort.test.ts", + "packages/cli-kit/src/public/node/analytics.test.ts", + "packages/cli-kit/src/public/node/api/admin.test.ts", + "packages/cli-kit/src/public/node/api/app-dev.test.ts", + "packages/cli-kit/src/public/node/api/app-management.test.ts", + "packages/cli-kit/src/public/node/api/bulk-operations/cancel.test.ts", + "packages/cli-kit/src/public/node/api/bulk-operations/download-bulk-operation-results.test.ts", + "packages/cli-kit/src/public/node/api/bulk-operations/fetch.test.ts", + "packages/cli-kit/src/public/node/api/bulk-operations/format-bulk-operation-status.test.ts", + "packages/cli-kit/src/public/node/api/bulk-operations/helpers.test.ts", + "packages/cli-kit/src/public/node/api/bulk-operations/query.test.ts", + "packages/cli-kit/src/public/node/api/bulk-operations/run-mutation.test.ts", + "packages/cli-kit/src/public/node/api/bulk-operations/run-query.test.ts", + "packages/cli-kit/src/public/node/api/bulk-operations/stage-file.test.ts", + "packages/cli-kit/src/public/node/api/bulk-operations/watch-bulk-operation.test.ts", + "packages/cli-kit/src/public/node/api/graphql.test.ts", + "packages/cli-kit/src/public/node/api/partners.test.ts", + "packages/cli-kit/src/public/node/api/rest-api-throttler.test.ts", + "packages/cli-kit/src/public/node/api/utilities.test.ts", + "packages/cli-kit/src/public/node/archiver.integration.test.ts", + "packages/cli-kit/src/public/node/base-command.test.ts", + "packages/cli-kit/src/public/node/cli-launcher.test.ts", + "packages/cli-kit/src/public/node/cli.test.ts", + "packages/cli-kit/src/public/node/command-events.test.ts", + "packages/cli-kit/src/public/node/context/fqdn.test.ts", + "packages/cli-kit/src/public/node/context/local.integration.test.ts", + "packages/cli-kit/src/public/node/context/local.test.ts", + "packages/cli-kit/src/public/node/context/utilities.test.ts", + "packages/cli-kit/src/public/node/crypto.test.ts", + "packages/cli-kit/src/public/node/custom-oclif-loader.test.ts", + "packages/cli-kit/src/public/node/doctor/framework.test.ts", + "packages/cli-kit/src/public/node/dot-env.test.ts", + "packages/cli-kit/src/public/node/environment.test.ts", + "packages/cli-kit/src/public/node/environments.test.ts", + "packages/cli-kit/src/public/node/error/index.test.ts", + "packages/cli-kit/src/public/node/error/schema.test.ts", + "packages/cli-kit/src/public/node/error-handler.test.ts", + "packages/cli-kit/src/public/node/framework.test.ts", + "packages/cli-kit/src/public/node/fs.test.ts", + "packages/cli-kit/src/public/node/git.test.ts", + "packages/cli-kit/src/public/node/github.test.ts", + "packages/cli-kit/src/public/node/graphiql/server.test.ts", + "packages/cli-kit/src/public/node/graphiql/session.test.ts", + "packages/cli-kit/src/public/node/graphiql/utilities.test.ts", + "packages/cli-kit/src/public/node/graphql.test.ts", + "packages/cli-kit/src/public/node/hidden-folder.test.ts", + "packages/cli-kit/src/public/node/hooks/deprecations.test.ts", + "packages/cli-kit/src/public/node/hooks/postrun.test.ts", + "packages/cli-kit/src/public/node/hooks/prerun.integration.test.ts", + "packages/cli-kit/src/public/node/hooks/prerun.test.ts", + "packages/cli-kit/src/public/node/hrtime.test.ts", + "packages/cli-kit/src/public/node/http.test.ts", + "packages/cli-kit/src/public/node/import-extractor.test.ts", + "packages/cli-kit/src/public/node/is-global.test.ts", + "packages/cli-kit/src/public/node/json-output-schema.test.ts", + "packages/cli-kit/src/public/node/json-schema.test.ts", + "packages/cli-kit/src/public/node/liquid.test.ts", + "packages/cli-kit/src/public/node/local-storage.test.ts", + "packages/cli-kit/src/public/node/logs.test.ts", + "packages/cli-kit/src/public/node/metadata.test.ts", + "packages/cli-kit/src/public/node/mimes.test.ts", + "packages/cli-kit/src/public/node/monorail.test.ts", + "packages/cli-kit/src/public/node/multiple-installation-warning.test.ts", + "packages/cli-kit/src/public/node/node-package-manager.test.ts", + "packages/cli-kit/src/public/node/notifications-system.test.ts", + "packages/cli-kit/src/public/node/os.test.ts", + "packages/cli-kit/src/public/node/output.test.ts", + "packages/cli-kit/src/public/node/path.test.ts", + "packages/cli-kit/src/public/node/plugins/multiple-installation-warning.test.ts", + "packages/cli-kit/src/public/node/plugins/tunnel.test.ts", + "packages/cli-kit/src/public/node/plugins.test.ts", + "packages/cli-kit/src/public/node/promises.test.ts", + "packages/cli-kit/src/public/node/result.test.ts", + "packages/cli-kit/src/public/node/schema.test.ts", + "packages/cli-kit/src/public/node/serial-batch-processor.test.ts", + "packages/cli-kit/src/public/node/session-prompt.test.ts", + "packages/cli-kit/src/public/node/session.test.ts", + "packages/cli-kit/src/public/node/store-auth-session.test.ts", + "packages/cli-kit/src/public/node/system.test.ts", + "packages/cli-kit/src/public/node/tcp-retry.test.ts", + "packages/cli-kit/src/public/node/tcp.test.ts", + "packages/cli-kit/src/public/node/testing/output.test.ts", + "packages/cli-kit/src/public/node/themes/api.test.ts", + "packages/cli-kit/src/public/node/themes/conf.test.ts", + "packages/cli-kit/src/public/node/themes/theme-manager.test.ts", + "packages/cli-kit/src/public/node/themes/urls.test.ts", + "packages/cli-kit/src/public/node/themes/utils.test.ts", + "packages/cli-kit/src/public/node/toml/codec.test.ts", + "packages/cli-kit/src/public/node/toml/toml-file.test.ts", + "packages/cli-kit/src/public/node/ui.test.ts", + "packages/cli-kit/src/public/node/upgrade.test.ts", + "packages/cli-kit/src/public/node/version.test.ts", + "packages/cli-kit/src/public/node/vscode.test.ts", + "packages/create-app/src/index.test.ts", + "packages/organizations/src/cli/prompts/organization.test.ts", + "packages/organizations/src/cli/services/dev/create-dev-store.test.ts", + "packages/organizations/src/cli/services/fetch.test.ts", + "packages/organizations/src/cli/services/select.test.ts", + "packages/plugin-cloudflare/src/install-cloudflared.test.ts", + "packages/plugin-cloudflare/src/tunnel.test.ts", + "packages/plugin-did-you-mean/src/commands/config/autocorrect/off.test.ts", + "packages/plugin-did-you-mean/src/commands/config/autocorrect/on.test.ts", + "packages/plugin-did-you-mean/src/commands/config/autocorrect/status.test.ts", + "packages/plugin-did-you-mean/src/index.test.ts", + "packages/plugin-did-you-mean/src/services/conf.test.ts", + "packages/store/src/cli/commands/store/auth/list.test.ts", + "packages/store/src/cli/commands/store/auth-output.test.ts", + "packages/store/src/cli/commands/store/auth.test.ts", + "packages/store/src/cli/commands/store/bulk/cancel.test.ts", + "packages/store/src/cli/commands/store/bulk/execute.test.ts", + "packages/store/src/cli/commands/store/bulk/status.test.ts", + "packages/store/src/cli/commands/store/create/dev.test.ts", + "packages/store/src/cli/commands/store/create/preview.test.ts", + "packages/store/src/cli/commands/store/delete.test.ts", + "packages/store/src/cli/commands/store/execute.test.ts", + "packages/store/src/cli/commands/store/graphiql.test.ts", + "packages/store/src/cli/commands/store/info.test.ts", + "packages/store/src/cli/commands/store/list.test.ts", + "packages/store/src/cli/commands/store/non-interactive-flags.test.ts", + "packages/store/src/cli/commands/store/open.test.ts", + "packages/store/src/cli/commands/store/stripe-auth.test.ts", + "packages/store/src/cli/prompts/store.test.ts", + "packages/store/src/cli/services/store/attribution.test.ts", + "packages/store/src/cli/services/store/auth/admin-session.test.ts", + "packages/store/src/cli/services/store/auth/callback.test.ts", + "packages/store/src/cli/services/store/auth/existing-scopes.test.ts", + "packages/store/src/cli/services/store/auth/index.test.ts", + "packages/store/src/cli/services/store/auth/list-result.test.ts", + "packages/store/src/cli/services/store/auth/list.test.ts", + "packages/store/src/cli/services/store/auth/pkce.test.ts", + "packages/store/src/cli/services/store/auth/preview-claim-recovery.test.ts", + "packages/store/src/cli/services/store/auth/recovery.test.ts", + "packages/store/src/cli/services/store/auth/result.test.ts", + "packages/store/src/cli/services/store/auth/scopes.test.ts", + "packages/store/src/cli/services/store/auth/session-lifecycle.test.ts", + "packages/store/src/cli/services/store/auth/stored-auth.test.ts", + "packages/store/src/cli/services/store/auth/token-client.test.ts", + "packages/store/src/cli/services/store/bulk/bulk-admin-context.test.ts", + "packages/store/src/cli/services/store/bulk/bulk-operation-status.test.ts", + "packages/store/src/cli/services/store/bulk/cancel-bulk-operation.test.ts", + "packages/store/src/cli/services/store/bulk/common.test.ts", + "packages/store/src/cli/services/store/bulk/execute-bulk-operation.test.ts", + "packages/store/src/cli/services/store/bulk/result.test.ts", + "packages/store/src/cli/services/store/create/dev.test.ts", + "packages/store/src/cli/services/store/create/preview/client.test.ts", + "packages/store/src/cli/services/store/create/preview/index.test.ts", + "packages/store/src/cli/services/store/create/preview/result.test.ts", + "packages/store/src/cli/services/store/delete/dev.test.ts", + "packages/store/src/cli/services/store/display.test.ts", + "packages/store/src/cli/services/store/execute/admin-context.test.ts", + "packages/store/src/cli/services/store/execute/admin-transport.test.ts", + "packages/store/src/cli/services/store/execute/index.test.ts", + "packages/store/src/cli/services/store/execute/request.test.ts", + "packages/store/src/cli/services/store/execute/result.test.ts", + "packages/store/src/cli/services/store/execute/targets.test.ts", + "packages/store/src/cli/services/store/graphiql.test.ts", + "packages/store/src/cli/services/store/info/index.test.ts", + "packages/store/src/cli/services/store/info/result.test.ts", + "packages/store/src/cli/services/store/list/bp-source.test.ts", + "packages/store/src/cli/services/store/list/result.test.ts", + "packages/store/src/cli/services/store/list.test.ts", + "packages/store/src/cli/services/store/open/result.test.ts", + "packages/store/src/cli/services/store/open.test.ts", + "packages/store/src/cli/services/store/plan.test.ts", + "packages/store/src/cli/services/store/store-type.test.ts", + "packages/store/src/cli/utilities/store-command.test.ts", + "packages/store/src/cli/utilities/store-lookup/destinations.test.ts", + "packages/store/src/cli/utilities/store-lookup/organization-shop.test.ts", + "packages/store/src/cli/utilities/store-lookup/organization.test.ts", + "packages/ui-extensions-server-kit/src/ExtensionServerClient/ExtensionServerClient.test.ts", + "packages/ui-extensions-server-kit/src/context/ExtensionServerProvider.test.tsx", + "packages/ui-extensions-server-kit/src/i18n.test.ts", + "packages/ui-extensions-server-kit/src/state/reducers/extensionServerReducer.test.ts", + "packages/ui-extensions-server-kit/src/testing/MockExtensionServerProvider.tsx", + "packages/ui-extensions-server-kit/src/testing/app.ts", + "packages/ui-extensions-server-kit/src/testing/extensions.ts", + "packages/ui-extensions-server-kit/src/testing/index.ts", + "packages/ui-extensions-server-kit/src/utilities/assetToString.test.ts" + ], + "rules": { + "@typescript-eslint/no-unnecessary-template-expression": [2], + "@typescript-eslint/prefer-reduce-type-parameter": [2] + }, + "removed": [ + "no-restricted-syntax", + "no-restricted-globals", + "@typescript-eslint/no-explicit-any", + "@typescript-eslint/no-unused-vars", + "@shopify/cli/required-fields-when-loading-app" + ] + }, + { + "files": [ + "packages/app/src/cli/api/admin-as-app.ts", + "packages/app/src/cli/api/graphql/all_app_extension_registrations.ts", + "packages/app/src/cli/api/graphql/app_deploy.ts", + "packages/app/src/cli/api/graphql/app_release.ts", + "packages/app/src/cli/api/graphql/app_versions_diff.ts", + "packages/app/src/cli/api/graphql/extension_migrate_app_module.ts", + "packages/app/src/cli/api/graphql/extension_migrate_flow_extension.ts", + "packages/app/src/cli/api/graphql/extension_migrate_to_ui_extension.ts", + "packages/app/src/cli/api/graphql/extension_specifications.ts", + "packages/app/src/cli/api/graphql/get_variant_id.ts", + "packages/app/src/cli/api/graphql/get_versions_list.ts", + "packages/app/src/cli/api/graphql/subscription_migrations.ts", + "packages/app/src/cli/api/graphql/update_urls.ts", + "packages/app/src/cli/commands/app/app-logs/sources.ts", + "packages/app/src/cli/commands/app/build.ts", + "packages/app/src/cli/commands/app/bulk/cancel.ts", + "packages/app/src/cli/commands/app/bulk/execute.ts", + "packages/app/src/cli/commands/app/bulk/status.ts", + "packages/app/src/cli/commands/app/config/link.ts", + "packages/app/src/cli/commands/app/config/pull.ts", + "packages/app/src/cli/commands/app/config/use.ts", + "packages/app/src/cli/commands/app/config/validate.ts", + "packages/app/src/cli/commands/app/demo/watcher.ts", + "packages/app/src/cli/commands/app/deploy.ts", + "packages/app/src/cli/commands/app/dev/clean.ts", + "packages/app/src/cli/commands/app/dev.ts", + "packages/app/src/cli/commands/app/env/pull.ts", + "packages/app/src/cli/commands/app/env/show.ts", + "packages/app/src/cli/commands/app/execute.ts", + "packages/app/src/cli/commands/app/function/build.ts", + "packages/app/src/cli/commands/app/function/info.ts", + "packages/app/src/cli/commands/app/function/replay.ts", + "packages/app/src/cli/commands/app/function/run.ts", + "packages/app/src/cli/commands/app/function/schema.ts", + "packages/app/src/cli/commands/app/function/typegen.ts", + "packages/app/src/cli/commands/app/generate/extension.ts", + "packages/app/src/cli/commands/app/graphiql.ts", + "packages/app/src/cli/commands/app/import/custom-data-definitions.ts", + "packages/app/src/cli/commands/app/import/dashboard-extensions.ts", + "packages/app/src/cli/commands/app/import-custom-data-definitions.ts", + "packages/app/src/cli/commands/app/import-extensions.ts", + "packages/app/src/cli/commands/app/info.ts", + "packages/app/src/cli/commands/app/init.ts", + "packages/app/src/cli/commands/app/logs.ts", + "packages/app/src/cli/commands/app/release.ts", + "packages/app/src/cli/commands/app/security/check.ts", + "packages/app/src/cli/commands/app/security/instructions.ts", + "packages/app/src/cli/commands/app/security/submit.ts", + "packages/app/src/cli/commands/app/subscription-migrations/cancel.ts", + "packages/app/src/cli/commands/app/subscription-migrations/flags.ts", + "packages/app/src/cli/commands/app/subscription-migrations/list.ts", + "packages/app/src/cli/commands/app/subscription-migrations/result-codec.ts", + "packages/app/src/cli/commands/app/subscription-migrations/result-presenter.ts", + "packages/app/src/cli/commands/app/subscription-migrations/schedule.ts", + "packages/app/src/cli/commands/app/subscription-migrations/status.ts", + "packages/app/src/cli/commands/app/subscription-migrations/unschedule.ts", + "packages/app/src/cli/commands/app/versions/list.ts", + "packages/app/src/cli/commands/app/webhook/trigger.ts", + "packages/app/src/cli/commands/organization/list.ts", + "packages/app/src/cli/constants.ts", + "packages/app/src/cli/flags.ts", + "packages/app/src/cli/hooks/public_metadata.ts", + "packages/app/src/cli/hooks/sensitive_metadata.ts", + "packages/app/src/cli/index.ts", + "packages/app/src/cli/metadata.ts", + "packages/app/src/cli/models/app/app.ts", + "packages/app/src/cli/models/app/config-file-naming.ts", + "packages/app/src/cli/models/app/error-parsing.ts", + "packages/app/src/cli/models/app/identifiers.ts", + "packages/app/src/cli/models/app/loader.ts", + "packages/app/src/cli/models/app/template.ts", + "packages/app/src/cli/models/app/validation/common.ts", + "packages/app/src/cli/models/extensions/extension-instance.ts", + "packages/app/src/cli/models/extensions/load-specifications.ts", + "packages/app/src/cli/models/extensions/schemas.ts", + "packages/app/src/cli/models/extensions/specification.ts", + "packages/app/src/cli/models/extensions/specifications/admin_link.ts", + "packages/app/src/cli/models/extensions/specifications/app_config_app_access.ts", + "packages/app/src/cli/models/extensions/specifications/app_config_app_home.ts", + "packages/app/src/cli/models/extensions/specifications/app_config_app_proxy.ts", + "packages/app/src/cli/models/extensions/specifications/app_config_branding.ts", + "packages/app/src/cli/models/extensions/specifications/app_config_events.ts", + "packages/app/src/cli/models/extensions/specifications/app_config_point_of_sale.ts", + "packages/app/src/cli/models/extensions/specifications/app_config_privacy_compliance_webhooks.ts", + "packages/app/src/cli/models/extensions/specifications/app_config_webhook.ts", + "packages/app/src/cli/models/extensions/specifications/app_config_webhook_schemas/webhook_subscription_schema.ts", + "packages/app/src/cli/models/extensions/specifications/app_config_webhook_schemas/webhooks_schema.ts", + "packages/app/src/cli/models/extensions/specifications/app_config_webhook_subscription.ts", + "packages/app/src/cli/models/extensions/specifications/channel.ts", + "packages/app/src/cli/models/extensions/specifications/checkout_post_purchase.ts", + "packages/app/src/cli/models/extensions/specifications/checkout_ui_extension.ts", + "packages/app/src/cli/models/extensions/specifications/editor_extension_collection.ts", + "packages/app/src/cli/models/extensions/specifications/flow_action.ts", + "packages/app/src/cli/models/extensions/specifications/flow_template.ts", + "packages/app/src/cli/models/extensions/specifications/flow_trigger.ts", + "packages/app/src/cli/models/extensions/specifications/flow_trigger_lifecycle_callback.ts", + "packages/app/src/cli/models/extensions/specifications/function.ts", + "packages/app/src/cli/models/extensions/specifications/order_attribution_config.ts", + "packages/app/src/cli/models/extensions/specifications/payments_app_extension.ts", + "packages/app/src/cli/models/extensions/specifications/payments_app_extension_schemas/base_payments_app_extension_schema.ts", + "packages/app/src/cli/models/extensions/specifications/payments_app_extension_schemas/card_present_payments_app_extension_schema.ts", + "packages/app/src/cli/models/extensions/specifications/payments_app_extension_schemas/credit_card_payments_app_extension_schema.ts", + "packages/app/src/cli/models/extensions/specifications/payments_app_extension_schemas/custom_credit_card_payments_app_extension_schema.ts", + "packages/app/src/cli/models/extensions/specifications/payments_app_extension_schemas/custom_onsite_payments_app_extension_schema.ts", + "packages/app/src/cli/models/extensions/specifications/payments_app_extension_schemas/offsite_payments_app_extension_schema.ts", + "packages/app/src/cli/models/extensions/specifications/payments_app_extension_schemas/payments_app_extension_test_helper.ts", + "packages/app/src/cli/models/extensions/specifications/payments_app_extension_schemas/redeemable_payments_app_extension_schema.ts", + "packages/app/src/cli/models/extensions/specifications/pos_ui_extension.ts", + "packages/app/src/cli/models/extensions/specifications/product_subscription.ts", + "packages/app/src/cli/models/extensions/specifications/tax_calculation.ts", + "packages/app/src/cli/models/extensions/specifications/theme.ts", + "packages/app/src/cli/models/extensions/specifications/transform/app_config_events.ts", + "packages/app/src/cli/models/extensions/specifications/transform/app_config_webhook.ts", + "packages/app/src/cli/models/extensions/specifications/transform/extension_uuid_to_handle.ts", + "packages/app/src/cli/models/extensions/specifications/type-generation.ts", + "packages/app/src/cli/models/extensions/specifications/types/app_config.ts", + "packages/app/src/cli/models/extensions/specifications/types/app_config_webhook.ts", + "packages/app/src/cli/models/extensions/specifications/ui_extension.ts", + "packages/app/src/cli/models/extensions/specifications/validation/app_config_webhook.ts", + "packages/app/src/cli/models/extensions/specifications/validation/app_relative_urls.ts", + "packages/app/src/cli/models/extensions/specifications/validation/common.ts", + "packages/app/src/cli/models/extensions/specifications/validation/url_prepender.ts", + "packages/app/src/cli/models/extensions/specifications/web_pixel_extension.ts", + "packages/app/src/cli/models/organization.ts", + "packages/app/src/cli/models/project/active-config.ts", + "packages/app/src/cli/models/project/config-selection.ts", + "packages/app/src/cli/models/project/project.ts", + "packages/app/src/cli/models/subscription-migrations.ts", + "packages/app/src/cli/prompts/deploy-release.ts", + "packages/app/src/cli/prompts/dev.ts", + "packages/app/src/cli/prompts/function/replay.ts", + "packages/app/src/cli/prompts/generate/extension.ts", + "packages/app/src/cli/prompts/import-extensions.ts", + "packages/app/src/cli/prompts/init/init.ts", + "packages/app/src/cli/prompts/ui/deploy-release-info-table-section.ts", + "packages/app/src/cli/prompts/uid-mapping-error.ts", + "packages/app/src/cli/prompts/webhook/trigger.ts", + "packages/app/src/cli/services/admin-link/extension-config-builder.ts", + "packages/app/src/cli/services/admin-link/utils.ts", + "packages/app/src/cli/services/app/add-uid-to-extension-toml.ts", + "packages/app/src/cli/services/app/config/link.ts", + "packages/app/src/cli/services/app/config/pull.ts", + "packages/app/src/cli/services/app/config/use.ts", + "packages/app/src/cli/services/app/env/pull.ts", + "packages/app/src/cli/services/app/env/show.ts", + "packages/app/src/cli/services/app/graphiql.ts", + "packages/app/src/cli/services/app/patch-app-configuration-file.ts", + "packages/app/src/cli/services/app/select-app.ts", + "packages/app/src/cli/services/app/write-app-configuration-file.ts", + "packages/app/src/cli/services/app-context.ts", + "packages/app/src/cli/services/app-logs/camelcase-keys.ts", + "packages/app/src/cli/services/app-logs/dev/poll-app-logs.ts", + "packages/app/src/cli/services/app-logs/dev/write-app-logs.ts", + "packages/app/src/cli/services/app-logs/logs-command/poll-app-logs.ts", + "packages/app/src/cli/services/app-logs/logs-command/render-json-logs.ts", + "packages/app/src/cli/services/app-logs/logs-command/ui/components/Logs.tsx", + "packages/app/src/cli/services/app-logs/logs-command/ui/components/hooks/usePollAppLogs.ts", + "packages/app/src/cli/services/app-logs/logs-command/ui/components/hooks/useSelfAdjustingInterval.ts", + "packages/app/src/cli/services/app-logs/logs-command/ui.tsx", + "packages/app/src/cli/services/app-logs/sources/result.ts", + "packages/app/src/cli/services/app-logs/sources/types.ts", + "packages/app/src/cli/services/app-logs/sources.ts", + "packages/app/src/cli/services/app-logs/types.ts", + "packages/app/src/cli/services/app-logs/utils.ts", + "packages/app/src/cli/services/app-security-api.ts", + "packages/app/src/cli/services/app-security-artifacts.ts", + "packages/app/src/cli/services/app-security-commands.ts", + "packages/app/src/cli/services/app-security-config.ts", + "packages/app/src/cli/services/app-security-engine/capabilities/detect.ts", + "packages/app/src/cli/services/app-security-engine/checks/index.ts", + "packages/app/src/cli/services/app-security-engine/external/index.ts", + "packages/app/src/cli/services/app-security-engine/index.ts", + "packages/app/src/cli/services/app-security-engine/output/format.ts", + "packages/app/src/cli/services/app-security-engine/output/group-issues.ts", + "packages/app/src/cli/services/app-security-engine/registry/index.ts", + "packages/app/src/cli/services/app-security-engine/rules/catalog.ts", + "packages/app/src/cli/services/app-security-engine/rules/compliance-rules.ts", + "packages/app/src/cli/services/app-security-engine/rules/config-rules.ts", + "packages/app/src/cli/services/app-security-engine/rules/csp-rules.ts", + "packages/app/src/cli/services/app-security-engine/rules/dependency-automation-rules.ts", + "packages/app/src/cli/services/app-security-engine/rules/js-rules.ts", + "packages/app/src/cli/services/app-security-engine/rules/liquid-rules.ts", + "packages/app/src/cli/services/app-security-engine/rules/proxy-rules.ts", + "packages/app/src/cli/services/app-security-engine/rules/secret-rules.ts", + "packages/app/src/cli/services/app-security-engine/rules/shopify-rules.ts", + "packages/app/src/cli/services/app-security-engine/rules/token-rules.ts", + "packages/app/src/cli/services/app-security-engine/rules/types.ts", + "packages/app/src/cli/services/app-security-engine/run.ts", + "packages/app/src/cli/services/app-security-engine/scanners/discover.ts", + "packages/app/src/cli/services/app-security-engine/scanners/filesystem-errors.ts", + "packages/app/src/cli/services/app-security-engine/scanners/index.ts", + "packages/app/src/cli/services/app-security-engine/scanners/path-rules.ts", + "packages/app/src/cli/services/app-security-engine/scanners/repository-marker.ts", + "packages/app/src/cli/services/app-security-engine/scanners/types.ts", + "packages/app/src/cli/services/app-security-engine/scorer/index.ts", + "packages/app/src/cli/services/app-security-engine/submission/index.ts", + "packages/app/src/cli/services/app-security-engine/tests/fixtures/submission-trace.ts", + "packages/app/src/cli/services/app-security-engine/trace/index.ts", + "packages/app/src/cli/services/app-security-engine/types.ts", + "packages/app/src/cli/services/app-security-engine/version.ts", + "packages/app/src/cli/services/app-security-instructions.ts", + "packages/app/src/cli/services/app-security-submission-payload.ts", + "packages/app/src/cli/services/app-security-submit-api.ts", + "packages/app/src/cli/services/app-security-submit-target.ts", + "packages/app/src/cli/services/build/bundle-size.ts", + "packages/app/src/cli/services/build/client-steps.ts", + "packages/app/src/cli/services/build/extension.ts", + "packages/app/src/cli/services/build/steps/build-function-step.ts", + "packages/app/src/cli/services/build/steps/build-theme-step.ts", + "packages/app/src/cli/services/build/steps/bundle-theme-step.ts", + "packages/app/src/cli/services/build/steps/bundle-ui-step.ts", + "packages/app/src/cli/services/build/steps/create-tax-stub-step.ts", + "packages/app/src/cli/services/build/steps/include-assets/assert-path-within-app.ts", + "packages/app/src/cli/services/build/steps/include-assets/copy-by-pattern.ts", + "packages/app/src/cli/services/build/steps/include-assets/copy-config-key-entry.ts", + "packages/app/src/cli/services/build/steps/include-assets/copy-source-entry.ts", + "packages/app/src/cli/services/build/steps/include-assets/generate-manifest.ts", + "packages/app/src/cli/services/build/steps/include-assets-step.ts", + "packages/app/src/cli/services/build/steps/index.ts", + "packages/app/src/cli/services/build/theme-check.ts", + "packages/app/src/cli/services/build.ts", + "packages/app/src/cli/services/bulk-operations/bulk-operation-status.ts", + "packages/app/src/cli/services/bulk-operations/cancel-bulk-operation.ts", + "packages/app/src/cli/services/bulk-operations/execute-bulk-operation.ts", + "packages/app/src/cli/services/bundle.ts", + "packages/app/src/cli/services/context/breakdown-extensions.ts", + "packages/app/src/cli/services/context/deploy-app-version-migrations.ts", + "packages/app/src/cli/services/context/deploy-identifier-matching.ts", + "packages/app/src/cli/services/context/identifiers.ts", + "packages/app/src/cli/services/context/prompts.ts", + "packages/app/src/cli/services/context.ts", + "packages/app/src/cli/services/dependencies.ts", + "packages/app/src/cli/services/deploy/bundle.ts", + "packages/app/src/cli/services/deploy/theme-extension-config.ts", + "packages/app/src/cli/services/deploy/upload.ts", + "packages/app/src/cli/services/deploy.ts", + "packages/app/src/cli/services/dev/app-events/app-diffing.ts", + "packages/app/src/cli/services/dev/app-events/app-event-watcher-handler.ts", + "packages/app/src/cli/services/dev/cap.ts", + "packages/app/src/cli/services/dev/extension/localization.ts", + "packages/app/src/cli/services/dev/extension/payload/models.ts", + "packages/app/src/cli/services/dev/extension/payload/store.ts", + "packages/app/src/cli/services/dev/extension/payload.ts", + "packages/app/src/cli/services/dev/extension/server/middlewares.ts", + "packages/app/src/cli/services/dev/extension/server/models.ts", + "packages/app/src/cli/services/dev/extension/server/utilities.ts", + "packages/app/src/cli/services/dev/extension/server.ts", + "packages/app/src/cli/services/dev/extension/templates.ts", + "packages/app/src/cli/services/dev/extension/utilities.ts", + "packages/app/src/cli/services/dev/extension/websocket/handlers.ts", + "packages/app/src/cli/services/dev/extension/websocket/models.ts", + "packages/app/src/cli/services/dev/extension/websocket.ts", + "packages/app/src/cli/services/dev/fetch.ts", + "packages/app/src/cli/services/dev/migrate-app-module.ts", + "packages/app/src/cli/services/dev/migrate-flow-extension.ts", + "packages/app/src/cli/services/dev/migrate-to-ui-extension.ts", + "packages/app/src/cli/services/dev/port-warnings.ts", + "packages/app/src/cli/services/dev/processes/app-logs-polling.ts", + "packages/app/src/cli/services/dev/processes/app-watcher-process.ts", + "packages/app/src/cli/services/dev/processes/dev-session/dev-session-logger.ts", + "packages/app/src/cli/services/dev/processes/dev-session/dev-session-process.ts", + "packages/app/src/cli/services/dev/processes/dev-session/dev-session-status-manager.ts", + "packages/app/src/cli/services/dev/processes/dev-session/dev-session.ts", + "packages/app/src/cli/services/dev/processes/graphiql-token-provider.ts", + "packages/app/src/cli/services/dev/processes/graphiql.ts", + "packages/app/src/cli/services/dev/processes/previewable-extension.ts", + "packages/app/src/cli/services/dev/processes/setup-dev-processes.ts", + "packages/app/src/cli/services/dev/processes/theme-app-extension.ts", + "packages/app/src/cli/services/dev/processes/types.ts", + "packages/app/src/cli/services/dev/processes/uninstall-webhook.ts", + "packages/app/src/cli/services/dev/processes/utils.ts", + "packages/app/src/cli/services/dev/processes/web.ts", + "packages/app/src/cli/services/dev/prompt-helpers.ts", + "packages/app/src/cli/services/dev/select-app.ts", + "packages/app/src/cli/services/dev/select-store.ts", + "packages/app/src/cli/services/dev/tunnel-mode.ts", + "packages/app/src/cli/services/dev/ui/components/DevSessionUI.tsx", + "packages/app/src/cli/services/dev/ui/components/Spinner.tsx", + "packages/app/src/cli/services/dev/ui/components/TabPanel.tsx", + "packages/app/src/cli/services/dev/ui.tsx", + "packages/app/src/cli/services/dev/urls.ts", + "packages/app/src/cli/services/dev-clean.ts", + "packages/app/src/cli/services/dev.ts", + "packages/app/src/cli/services/execute-operation.ts", + "packages/app/src/cli/services/extensions/bundle.ts", + "packages/app/src/cli/services/extensions/common.ts", + "packages/app/src/cli/services/fetch-extensions.ts", + "packages/app/src/cli/services/flow/constants.ts", + "packages/app/src/cli/services/flow/extension-config-builder.ts", + "packages/app/src/cli/services/flow/serialize-fields.ts", + "packages/app/src/cli/services/flow/serialize-partners-fields.ts", + "packages/app/src/cli/services/flow/types.ts", + "packages/app/src/cli/services/flow/utils.ts", + "packages/app/src/cli/services/flow/validation.ts", + "packages/app/src/cli/services/format-config-info-body.ts", + "packages/app/src/cli/services/function/binaries.ts", + "packages/app/src/cli/services/function/build.ts", + "packages/app/src/cli/services/function/common.ts", + "packages/app/src/cli/services/function/info.ts", + "packages/app/src/cli/services/function/replay.ts", + "packages/app/src/cli/services/function/runner.ts", + "packages/app/src/cli/services/function/schema-version.ts", + "packages/app/src/cli/services/function/ui/components/Replay/Replay.tsx", + "packages/app/src/cli/services/function/ui/components/Replay/hooks/useFunctionWatcher.ts", + "packages/app/src/cli/services/function/ui/components/Replay/types.ts", + "packages/app/src/cli/services/function/ui.tsx", + "packages/app/src/cli/services/generate/extension.ts", + "packages/app/src/cli/services/generate/fetch-extension-specifications.ts", + "packages/app/src/cli/services/generate/fetch-template-specifications.ts", + "packages/app/src/cli/services/generate-schema.ts", + "packages/app/src/cli/services/generate.ts", + "packages/app/src/cli/services/graphql/common.ts", + "packages/app/src/cli/services/import-extensions.ts", + "packages/app/src/cli/services/info/result.ts", + "packages/app/src/cli/services/info/types.ts", + "packages/app/src/cli/services/info.ts", + "packages/app/src/cli/services/init/init.ts", + "packages/app/src/cli/services/init/template/cleanup.ts", + "packages/app/src/cli/services/init/template/npm.ts", + "packages/app/src/cli/services/init/validate.ts", + "packages/app/src/cli/services/local-storage.ts", + "packages/app/src/cli/services/logs.ts", + "packages/app/src/cli/services/marketing_activity/extension-config-builder.ts", + "packages/app/src/cli/services/organization/list/result.ts", + "packages/app/src/cli/services/organization/list/types.ts", + "packages/app/src/cli/services/organization/list.ts", + "packages/app/src/cli/services/payments/extension-config-builder.ts", + "packages/app/src/cli/services/release/version-diff.ts", + "packages/app/src/cli/services/release.ts", + "packages/app/src/cli/services/security-check.ts", + "packages/app/src/cli/services/security-json.ts", + "packages/app/src/cli/services/security-output.ts", + "packages/app/src/cli/services/security-submit-json.ts", + "packages/app/src/cli/services/security-submit-output.ts", + "packages/app/src/cli/services/security-submit-result.ts", + "packages/app/src/cli/services/security-submit.ts", + "packages/app/src/cli/services/store-context.ts", + "packages/app/src/cli/services/subscription-migrations/cancel-operations.ts", + "packages/app/src/cli/services/subscription-migrations/command-output.ts", + "packages/app/src/cli/services/subscription-migrations/get-operations.ts", + "packages/app/src/cli/services/subscription-migrations/input/load-csv-input.ts", + "packages/app/src/cli/services/subscription-migrations/list-migratable-subscriptions.ts", + "packages/app/src/cli/services/subscription-migrations/list-output.ts", + "packages/app/src/cli/services/subscription-migrations/partners-api.ts", + "packages/app/src/cli/services/subscription-migrations/plan/create-migration-plan.ts", + "packages/app/src/cli/services/subscription-migrations/plan/idempotency.ts", + "packages/app/src/cli/services/subscription-migrations/plan/parse-migration-csv.ts", + "packages/app/src/cli/services/subscription-migrations/plan/plan-migration-input.ts", + "packages/app/src/cli/services/subscription-migrations/run-submission-command.ts", + "packages/app/src/cli/services/subscription-migrations/submit-migration-plan.ts", + "packages/app/src/cli/services/subscription-migrations/wait-for-operations.ts", + "packages/app/src/cli/services/subscription-migrations/watch-operations.ts", + "packages/app/src/cli/services/subscription_link/extension-config-builder.ts", + "packages/app/src/cli/services/validate.ts", + "packages/app/src/cli/services/versions-list/result.ts", + "packages/app/src/cli/services/versions-list/types.ts", + "packages/app/src/cli/services/versions-list.ts", + "packages/app/src/cli/services/web.ts", + "packages/app/src/cli/services/webhook/request-api-versions.ts", + "packages/app/src/cli/services/webhook/request-sample.ts", + "packages/app/src/cli/services/webhook/request-topics.ts", + "packages/app/src/cli/services/webhook/send-app-uninstalled-webhook.ts", + "packages/app/src/cli/services/webhook/trigger-flags.ts", + "packages/app/src/cli/services/webhook/trigger-local-webhook.ts", + "packages/app/src/cli/services/webhook/trigger-options.ts", + "packages/app/src/cli/services/webhook/trigger.ts", + "packages/app/src/cli/utilities/analytics.ts", + "packages/app/src/cli/utilities/app/app-url.ts", + "packages/app/src/cli/utilities/app/config/getTomls.ts", + "packages/app/src/cli/utilities/app/config/hidden-app-config.ts", + "packages/app/src/cli/utilities/app/http-reverse-proxy.ts", + "packages/app/src/cli/utilities/app-command.ts", + "packages/app/src/cli/utilities/app-linked-command.ts", + "packages/app/src/cli/utilities/app-unlinked-command.ts", + "packages/app/src/cli/utilities/deprecated-command.ts", + "packages/app/src/cli/utilities/developer-platform-client/app-management-client/graphql/organization_beta_flags.ts", + "packages/app/src/cli/utilities/developer-platform-client/app-management-client.ts", + "packages/app/src/cli/utilities/developer-platform-client/partners-client.ts", + "packages/app/src/cli/utilities/developer-platform-client.ts", + "packages/app/src/cli/utilities/execute-command-helpers.ts", + "packages/app/src/cli/utilities/extensions/configuration.ts", + "packages/app/src/cli/utilities/extensions/fetch-product-variant.ts", + "packages/app/src/cli/utilities/extensions/locales-configuration.ts", + "packages/app/src/cli/utilities/extensions/theme/host-theme-manager.ts", + "packages/app/src/cli/utilities/extensions/theme/host-theme-watcher.ts", + "packages/app/src/cli/utilities/extensions/theme.ts", + "packages/app/src/cli/utilities/file-formatter.ts", + "packages/app/src/cli/utilities/json-schema.ts", + "packages/app/src/cli/utilities/mkcert.ts", + "packages/app/src/cli/validations/message.ts", + "packages/app/src/cli/validations/version-name.ts", + "packages/cli-kit/src/private/common/array.ts", + "packages/cli-kit/src/private/common/json.ts", + "packages/cli-kit/src/private/node/analytics/bounded-collections.ts", + "packages/cli-kit/src/private/node/analytics/error-categorizer.ts", + "packages/cli-kit/src/private/node/analytics/error-grouping.ts", + "packages/cli-kit/src/private/node/analytics/graphql-error-codes.ts", + "packages/cli-kit/src/private/node/analytics/storage.ts", + "packages/cli-kit/src/private/node/analytics.ts", + "packages/cli-kit/src/private/node/api/graphql/business-platform-destinations/user-email.ts", + "packages/cli-kit/src/private/node/api/graphql.ts", + "packages/cli-kit/src/private/node/api/headers.ts", + "packages/cli-kit/src/private/node/api/rest.ts", + "packages/cli-kit/src/private/node/api/status-checks.ts", + "packages/cli-kit/src/private/node/api/urls.ts", + "packages/cli-kit/src/private/node/api.ts", + "packages/cli-kit/src/private/node/command-event-context.ts", + "packages/cli-kit/src/private/node/command-event-output.ts", + "packages/cli-kit/src/private/node/command-json-schema.ts", + "packages/cli-kit/src/private/node/conf-store.ts", + "packages/cli-kit/src/private/node/constants.ts", + "packages/cli-kit/src/private/node/content-tokens.ts", + "packages/cli-kit/src/private/node/context/agent.ts", + "packages/cli-kit/src/private/node/context/deprecations-store.ts", + "packages/cli-kit/src/private/node/context/service.ts", + "packages/cli-kit/src/private/node/context/utilities.ts", + "packages/cli-kit/src/private/node/json-error.ts", + "packages/cli-kit/src/private/node/otel-metrics.ts", + "packages/cli-kit/src/private/node/output.ts", + "packages/cli-kit/src/private/node/plugin-hints.ts", + "packages/cli-kit/src/private/node/request-ids.ts", + "packages/cli-kit/src/private/node/session/device-authorization.ts", + "packages/cli-kit/src/private/node/session/exchange.ts", + "packages/cli-kit/src/private/node/session/identity.ts", + "packages/cli-kit/src/private/node/session/schema.ts", + "packages/cli-kit/src/private/node/session/scopes.ts", + "packages/cli-kit/src/private/node/session/store.ts", + "packages/cli-kit/src/private/node/session/validate.ts", + "packages/cli-kit/src/private/node/session.ts", + "packages/cli-kit/src/private/node/sleep-with-backoff.ts", + "packages/cli-kit/src/private/node/temp-dir.ts", + "packages/cli-kit/src/private/node/themes/generate-theme-name.ts", + "packages/cli-kit/src/private/node/themes/replace-invalid-characters.ts", + "packages/cli-kit/src/private/node/ui/alert.tsx", + "packages/cli-kit/src/private/node/ui/components/Alert.tsx", + "packages/cli-kit/src/private/node/ui/components/AutocompletePrompt.tsx", + "packages/cli-kit/src/private/node/ui/components/Banner.tsx", + "packages/cli-kit/src/private/node/ui/components/Command.tsx", + "packages/cli-kit/src/private/node/ui/components/ConcurrentOutput.tsx", + "packages/cli-kit/src/private/node/ui/components/DangerousConfirmationPrompt.tsx", + "packages/cli-kit/src/private/node/ui/components/FatalError.tsx", + "packages/cli-kit/src/private/node/ui/components/FilePath.tsx", + "packages/cli-kit/src/private/node/ui/components/Link.tsx", + "packages/cli-kit/src/private/node/ui/components/List.tsx", + "packages/cli-kit/src/private/node/ui/components/LoadingBar.tsx", + "packages/cli-kit/src/private/node/ui/components/Prompts/InfoMessage.tsx", + "packages/cli-kit/src/private/node/ui/components/Prompts/InfoTable.tsx", + "packages/cli-kit/src/private/node/ui/components/Prompts/PromptLayout.tsx", + "packages/cli-kit/src/private/node/ui/components/Scrollbar.tsx", + "packages/cli-kit/src/private/node/ui/components/SelectInput.tsx", + "packages/cli-kit/src/private/node/ui/components/SelectPrompt.tsx", + "packages/cli-kit/src/private/node/ui/components/SingleTask.tsx", + "packages/cli-kit/src/private/node/ui/components/Subdued.tsx", + "packages/cli-kit/src/private/node/ui/components/Table/Column.ts", + "packages/cli-kit/src/private/node/ui/components/Table/Row.tsx", + "packages/cli-kit/src/private/node/ui/components/Table/ScalarDict.ts", + "packages/cli-kit/src/private/node/ui/components/Table/Table.tsx", + "packages/cli-kit/src/private/node/ui/components/TabularData.tsx", + "packages/cli-kit/src/private/node/ui/components/Tasks.tsx", + "packages/cli-kit/src/private/node/ui/components/TextPrompt.tsx", + "packages/cli-kit/src/private/node/ui/components/TokenizedText.tsx", + "packages/cli-kit/src/private/node/ui/components/UserInput.tsx", + "packages/cli-kit/src/private/node/ui/components/token-item.ts", + "packages/cli-kit/src/private/node/ui/contexts/LinksContext.ts", + "packages/cli-kit/src/private/node/ui/hooks/use-abort-signal.ts", + "packages/cli-kit/src/private/node/ui/hooks/use-async-and-unmount.ts", + "packages/cli-kit/src/private/node/ui/hooks/use-exit-on-ctrl-c.ts", + "packages/cli-kit/src/private/node/ui/hooks/use-layout.ts", + "packages/cli-kit/src/private/node/ui/hooks/use-prompt.ts", + "packages/cli-kit/src/private/node/ui/hooks/use-select-state.ts", + "packages/cli-kit/src/private/node/ui/tasks.ts", + "packages/cli-kit/src/private/node/ui/utilities.ts", + "packages/cli-kit/src/private/node/ui.tsx", + "packages/cli-kit/src/public/node/abort.ts", + "packages/cli-kit/src/public/node/analytics.ts", + "packages/cli-kit/src/public/node/base-command.ts", + "packages/cli-kit/src/public/node/cli.ts", + "packages/cli-kit/src/public/node/dot-env.ts", + "packages/cli-kit/src/public/node/environments.ts", + "packages/cli-kit/src/public/node/error-handler.ts", + "packages/cli-kit/src/public/node/framework.ts", + "packages/cli-kit/src/public/node/fs.ts", + "packages/cli-kit/src/public/node/github.ts", + "packages/cli-kit/src/public/node/graphiql/templates/graphiql.tsx", + "packages/cli-kit/src/public/node/graphiql/templates/unauthorized.tsx", + "packages/cli-kit/src/public/node/hooks/prerun.ts", + "packages/cli-kit/src/public/node/node-package-manager.ts", + "packages/cli-kit/src/public/node/os.ts", + "packages/cli-kit/src/public/node/plugins/tunnel.ts", + "packages/cli-kit/src/public/node/result.ts", + "packages/cli-kit/src/public/node/themes/api.ts", + "packages/cli-kit/src/public/node/themes/conf.ts", + "packages/cli-kit/src/public/node/themes/factories.ts", + "packages/cli-kit/src/public/node/themes/theme-manager.ts", + "packages/cli-kit/src/public/node/themes/types.ts", + "packages/cli-kit/src/public/node/themes/urls.ts", + "packages/cli-kit/src/public/node/themes/utils.ts", + "packages/create-app/src/hooks/postrun.ts", + "packages/create-app/src/hooks/prerun.ts", + "packages/create-app/src/index.ts", + "packages/e2e/helpers/browser-login.ts", + "packages/e2e/helpers/loadtest-header.ts", + "packages/e2e/helpers/strip-ansi.ts", + "packages/e2e/helpers/wait-for-text.ts", + "packages/e2e/setup/auth-diagnostics.ts", + "packages/e2e/setup/auth.ts", + "packages/e2e/setup/browser.ts", + "packages/e2e/setup/cli.ts", + "packages/e2e/setup/constants.ts", + "packages/e2e/setup/global-auth.setup.ts", + "packages/e2e/setup/global-auth.ts", + "packages/e2e/tests/app-deploy.spec.ts", + "packages/e2e/tests/app-dev-server.spec.ts", + "packages/e2e/tests/auth-diagnostics.spec.ts", + "packages/e2e/tests/smoke-pty.spec.ts", + "packages/e2e/tests/smoke.spec.ts", + "packages/organizations/src/cli/models/organization.ts", + "packages/organizations/src/cli/models/store.ts", + "packages/organizations/src/cli/prompts/dev.ts", + "packages/organizations/src/cli/prompts/organization.ts", + "packages/organizations/src/cli/services/business-platform.ts", + "packages/organizations/src/cli/services/dev/create-dev-store.ts", + "packages/organizations/src/cli/services/dev/plans.ts", + "packages/organizations/src/cli/services/dev/types.ts", + "packages/organizations/src/cli/services/fetch.ts", + "packages/organizations/src/cli/services/select.ts", + "packages/organizations/src/index.ts", + "packages/plugin-cloudflare/src/install-cloudflared.ts", + "packages/plugin-cloudflare/src/provider.ts", + "packages/plugin-cloudflare/src/tunnel.ts", + "packages/plugin-did-you-mean/src/commands/config/autocorrect/off.ts", + "packages/plugin-did-you-mean/src/commands/config/autocorrect/on.ts", + "packages/plugin-did-you-mean/src/commands/config/autocorrect/status.ts", + "packages/plugin-did-you-mean/src/index.ts", + "packages/plugin-did-you-mean/src/services/conf.ts", + "packages/plugin-did-you-mean/src/services/constants.ts", + "packages/store/src/cli/commands/store/auth/list.ts", + "packages/store/src/cli/commands/store/auth.ts", + "packages/store/src/cli/commands/store/bulk/cancel.ts", + "packages/store/src/cli/commands/store/bulk/execute.ts", + "packages/store/src/cli/commands/store/bulk/status.ts", + "packages/store/src/cli/commands/store/create/dev.ts", + "packages/store/src/cli/commands/store/create/preview.ts", + "packages/store/src/cli/commands/store/delete.ts", + "packages/store/src/cli/commands/store/execute.ts", + "packages/store/src/cli/commands/store/graphiql.ts", + "packages/store/src/cli/commands/store/info.ts", + "packages/store/src/cli/commands/store/list.ts", + "packages/store/src/cli/commands/store/open.ts", + "packages/store/src/cli/commands/store/stripe-auth.ts", + "packages/store/src/cli/flags.ts", + "packages/store/src/cli/prompts/store.ts", + "packages/store/src/cli/services/store/admin-errors.ts", + "packages/store/src/cli/services/store/attribution.ts", + "packages/store/src/cli/services/store/auth/admin-session.ts", + "packages/store/src/cli/services/store/auth/callback.ts", + "packages/store/src/cli/services/store/auth/config.ts", + "packages/store/src/cli/services/store/auth/existing-scopes.ts", + "packages/store/src/cli/services/store/auth/index.ts", + "packages/store/src/cli/services/store/auth/list-result.ts", + "packages/store/src/cli/services/store/auth/list-types.ts", + "packages/store/src/cli/services/store/auth/list.ts", + "packages/store/src/cli/services/store/auth/pkce.ts", + "packages/store/src/cli/services/store/auth/recovery.ts", + "packages/store/src/cli/services/store/auth/result.ts", + "packages/store/src/cli/services/store/auth/scopes.ts", + "packages/store/src/cli/services/store/auth/session-lifecycle.ts", + "packages/store/src/cli/services/store/auth/stored-auth.ts", + "packages/store/src/cli/services/store/auth/token-client.ts", + "packages/store/src/cli/services/store/auth/types.ts", + "packages/store/src/cli/services/store/bulk/bulk-admin-context.ts", + "packages/store/src/cli/services/store/bulk/bulk-operation-status.ts", + "packages/store/src/cli/services/store/bulk/cancel-bulk-operation.ts", + "packages/store/src/cli/services/store/bulk/cancel-result.ts", + "packages/store/src/cli/services/store/bulk/common.ts", + "packages/store/src/cli/services/store/bulk/execute-bulk-operation.ts", + "packages/store/src/cli/services/store/bulk/execute-result.ts", + "packages/store/src/cli/services/store/bulk/progress.ts", + "packages/store/src/cli/services/store/bulk/status-result.ts", + "packages/store/src/cli/services/store/bulk/types.ts", + "packages/store/src/cli/services/store/business-platform.ts", + "packages/store/src/cli/services/store/constants.ts", + "packages/store/src/cli/services/store/create/dev.ts", + "packages/store/src/cli/services/store/create/preview/client.ts", + "packages/store/src/cli/services/store/create/preview/index.ts", + "packages/store/src/cli/services/store/create/preview/result.ts", + "packages/store/src/cli/services/store/create/preview/types.ts", + "packages/store/src/cli/services/store/delete/dev.ts", + "packages/store/src/cli/services/store/delete/types.ts", + "packages/store/src/cli/services/store/display.ts", + "packages/store/src/cli/services/store/execute/admin-context.ts", + "packages/store/src/cli/services/store/execute/admin-transport.ts", + "packages/store/src/cli/services/store/execute/index.ts", + "packages/store/src/cli/services/store/execute/request.ts", + "packages/store/src/cli/services/store/execute/result.ts", + "packages/store/src/cli/services/store/execute/targets.ts", + "packages/store/src/cli/services/store/execute/types.ts", + "packages/store/src/cli/services/store/graphiql.ts", + "packages/store/src/cli/services/store/info/index.ts", + "packages/store/src/cli/services/store/info/result.ts", + "packages/store/src/cli/services/store/info/types.ts", + "packages/store/src/cli/services/store/list/bp-source.ts", + "packages/store/src/cli/services/store/list/constants.ts", + "packages/store/src/cli/services/store/list/result.ts", + "packages/store/src/cli/services/store/list/types.ts", + "packages/store/src/cli/services/store/list.ts", + "packages/store/src/cli/services/store/open/result.ts", + "packages/store/src/cli/services/store/open/types.ts", + "packages/store/src/cli/services/store/open.ts", + "packages/store/src/cli/services/store/plan.ts", + "packages/store/src/cli/services/store/store-type.ts", + "packages/store/src/cli/services/store/types.ts", + "packages/store/src/cli/utilities/store-command.ts", + "packages/store/src/cli/utilities/store-lookup/destinations.ts", + "packages/store/src/cli/utilities/store-lookup/organization-shop.ts", + "packages/store/src/cli/utilities/store-lookup/organization.ts", + "packages/store/src/cli/utilities/store-lookup/types.ts", + "packages/store/src/index.ts", + "packages/ui-extensions-server-kit/src/ExtensionServerClient/index.ts", + "packages/ui-extensions-server-kit/src/ExtensionServerClient/server-types.ts", + "packages/ui-extensions-server-kit/src/ExtensionServerClient/types.ts", + "packages/ui-extensions-server-kit/src/context/ExtensionServerProvider.tsx", + "packages/ui-extensions-server-kit/src/context/constants.ts", + "packages/ui-extensions-server-kit/src/context/index.ts", + "packages/ui-extensions-server-kit/src/context/types.ts", + "packages/ui-extensions-server-kit/src/hooks/index.ts", + "packages/ui-extensions-server-kit/src/hooks/useExtensionServerContext.ts", + "packages/ui-extensions-server-kit/src/hooks/useExtensionServerState.ts", + "packages/ui-extensions-server-kit/src/hooks/useIsomorphicLayoutEffect.ts", + "packages/ui-extensions-server-kit/src/i18n.ts", + "packages/ui-extensions-server-kit/src/index.ts", + "packages/ui-extensions-server-kit/src/state/actions/actions.ts", + "packages/ui-extensions-server-kit/src/state/actions/index.ts", + "packages/ui-extensions-server-kit/src/state/actions/types.ts", + "packages/ui-extensions-server-kit/src/state/index.ts", + "packages/ui-extensions-server-kit/src/state/reducers/constants.ts", + "packages/ui-extensions-server-kit/src/state/reducers/extensionServerReducer.ts", + "packages/ui-extensions-server-kit/src/state/reducers/index.ts", + "packages/ui-extensions-server-kit/src/state/reducers/types.ts", + "packages/ui-extensions-server-kit/src/types.ts", + "packages/ui-extensions-server-kit/src/utilities/assetToString.ts", + "packages/ui-extensions-server-kit/src/utilities/index.ts", + "packages/ui-extensions-server-kit/src/utilities/isUIExtension.ts", + "packages/ui-extensions-server-kit/src/utilities/isValidSurface.ts", + "packages/ui-extensions-server-kit/src/utilities/noop.ts", + "packages/ui-extensions-server-kit/src/utilities/replaceUpdated.ts", + "packages/ui-extensions-server-kit/src/utilities/set.ts", + "packages/ui-extensions-test-utils/src/index.ts", + "packages/ui-extensions-test-utils/src/render.tsx", + "packages/ui-extensions-test-utils/src/renderHook.tsx", + "packages/ui-extensions-test-utils/src/withProviders.ts" + ], + "rules": {}, + "removed": [] + }, + { + "files": [ + "packages/app/src/cli/api/graphql/admin/generated/metafield_definitions.ts", + "packages/app/src/cli/api/graphql/admin/generated/metaobject_definitions.ts", + "packages/app/src/cli/api/graphql/app-dev/generated/dev-session-create.ts", + "packages/app/src/cli/api/graphql/app-dev/generated/dev-session-delete.ts", + "packages/app/src/cli/api/graphql/app-dev/generated/dev-session-update.ts", + "packages/app/src/cli/api/graphql/app-management/generated/active-app-release-from-api-key.ts", + "packages/app/src/cli/api/graphql/app-management/generated/active-app-release.ts", + "packages/app/src/cli/api/graphql/app-management/generated/app-install-count.ts", + "packages/app/src/cli/api/graphql/app-management/generated/app-logs-subscribe.ts", + "packages/app/src/cli/api/graphql/app-management/generated/app-version-by-id.ts", + "packages/app/src/cli/api/graphql/app-management/generated/app-version-by-tag.ts", + "packages/app/src/cli/api/graphql/app-management/generated/app-versions.ts", + "packages/app/src/cli/api/graphql/app-management/generated/apps.ts", + "packages/app/src/cli/api/graphql/app-management/generated/create-app-version.ts", + "packages/app/src/cli/api/graphql/app-management/generated/create-app.ts", + "packages/app/src/cli/api/graphql/app-management/generated/create-asset-url.ts", + "packages/app/src/cli/api/graphql/app-management/generated/create-source-scan.ts", + "packages/app/src/cli/api/graphql/app-management/generated/release-version.ts", + "packages/app/src/cli/api/graphql/app-management/generated/request-source-scan-upload-url.ts", + "packages/app/src/cli/api/graphql/app-management/generated/specifications.ts", + "packages/app/src/cli/api/graphql/business-platform-destinations/generated/user-info.ts", + "packages/app/src/cli/api/graphql/business-platform-organizations/generated/dev_store_cap_reached.ts", + "packages/app/src/cli/api/graphql/business-platform-organizations/generated/fetch_store_by_domain.ts", + "packages/app/src/cli/api/graphql/business-platform-organizations/generated/list_app_dev_stores.ts", + "packages/app/src/cli/api/graphql/business-platform-organizations/generated/organization_exp_flags.ts", + "packages/app/src/cli/api/graphql/business-platform-organizations/generated/provision_shop_access.ts", + "packages/app/src/cli/api/graphql/functions/generated/schema-definition-by-api-type.ts", + "packages/app/src/cli/api/graphql/functions/generated/schema-definition-by-target.ts", + "packages/app/src/cli/api/graphql/webhooks/generated/available-topics.ts", + "packages/app/src/cli/api/graphql/webhooks/generated/cli-testing.ts", + "packages/app/src/cli/api/graphql/webhooks/generated/public-api-versions.ts", + "packages/cli-kit/src/cli/api/graphql/admin/generated/find_development_theme_by_name.ts", + "packages/cli-kit/src/cli/api/graphql/admin/generated/get_theme.ts", + "packages/cli-kit/src/cli/api/graphql/admin/generated/get_theme_file_bodies.ts", + "packages/cli-kit/src/cli/api/graphql/admin/generated/get_theme_file_checksums.ts", + "packages/cli-kit/src/cli/api/graphql/admin/generated/get_themes.ts", + "packages/cli-kit/src/cli/api/graphql/admin/generated/metafield_definitions_by_owner_type.ts", + "packages/cli-kit/src/cli/api/graphql/admin/generated/online_store_password_protection.ts", + "packages/cli-kit/src/cli/api/graphql/admin/generated/public_api_versions.ts", + "packages/cli-kit/src/cli/api/graphql/admin/generated/theme_create.ts", + "packages/cli-kit/src/cli/api/graphql/admin/generated/theme_delete.ts", + "packages/cli-kit/src/cli/api/graphql/admin/generated/theme_duplicate.ts", + "packages/cli-kit/src/cli/api/graphql/admin/generated/theme_files_delete.ts", + "packages/cli-kit/src/cli/api/graphql/admin/generated/theme_files_upsert.ts", + "packages/cli-kit/src/cli/api/graphql/admin/generated/theme_publish.ts", + "packages/cli-kit/src/cli/api/graphql/admin/generated/theme_update.ts", + "packages/cli-kit/src/cli/api/graphql/bulk-operations/generated/bulk-operation-cancel.ts", + "packages/cli-kit/src/cli/api/graphql/bulk-operations/generated/bulk-operation-run-mutation.ts", + "packages/cli-kit/src/cli/api/graphql/bulk-operations/generated/bulk-operation-run-query.ts", + "packages/cli-kit/src/cli/api/graphql/bulk-operations/generated/get-bulk-operation-by-id.ts", + "packages/cli-kit/src/cli/api/graphql/bulk-operations/generated/list-bulk-operations.ts", + "packages/cli-kit/src/cli/api/graphql/bulk-operations/generated/staged-uploads-create.ts", + "packages/organizations/src/cli/api/graphql/business-platform-destinations/generated/find_organization.ts", + "packages/organizations/src/cli/api/graphql/business-platform-destinations/generated/organizations.ts", + "packages/organizations/src/cli/api/graphql/business-platform-organizations/generated/create_app_development_store.ts", + "packages/organizations/src/cli/api/graphql/business-platform-organizations/generated/poll_store_creation.ts", + "packages/store/src/cli/api/graphql/business-platform-destinations/generated/store-info-destinations.ts", + "packages/store/src/cli/api/graphql/business-platform-destinations/generated/store-info-owning-org.ts", + "packages/store/src/cli/api/graphql/business-platform-organizations/generated/delete_app_development_store.ts", + "packages/store/src/cli/api/graphql/business-platform-organizations/generated/list_accessible_shops.ts", + "packages/store/src/cli/api/graphql/business-platform-organizations/generated/organization_accessible_shop.ts", + "packages/store/src/cli/api/graphql/business-platform-organizations/generated/store-info-shop.ts" + ], + "rules": {}, + "removed": ["@typescript-eslint/consistent-type-definitions"] + }, + { + "files": [ + "packages/app/src/cli/prompts/config.ts", + "packages/app/src/cli/services/dev/extension.ts", + "packages/e2e/setup/store.ts", + "packages/e2e/setup/teardown.ts" + ], + "rules": {}, + "removed": ["no-await-in-loop"] + }, + { + "files": [ + "packages/app/src/cli/services/app-security-commands.test.ts", + "packages/app/src/cli/services/app-security-engine/tests/dependency-automation-discovery.test.ts", + "packages/app/src/cli/services/app-security-engine/tests/dependency-automation.test.ts", + "packages/app/src/cli/services/app-security-engine/tests/discovery-safety.test.ts", + "packages/app/src/cli/services/app-security-engine/tests/path-rules.test.ts", + "packages/app/src/cli/services/app-security-engine/tests/scan-contract.test.ts", + "packages/app/src/cli/services/app-security-engine/tests/trace.test.ts", + "packages/cli-kit/src/public/node/tree-kill.test.ts" + ], + "rules": { + "@typescript-eslint/no-unnecessary-template-expression": [2], + "@typescript-eslint/prefer-reduce-type-parameter": [2] + }, + "removed": [ + "no-restricted-syntax", + "no-restricted-globals", + "@typescript-eslint/no-explicit-any", + "@typescript-eslint/no-unused-vars", + "no-restricted-imports", + "@shopify/cli/required-fields-when-loading-app" + ] + }, + { + "files": ["packages/app/src/cli/services/app-security-engine/checks/embedded.ts"], + "rules": {}, + "removed": ["no-template-curly-in-string", "no-restricted-syntax"] + }, + { + "files": ["packages/app/src/cli/services/app-security-engine/embed-checks.mjs"], + "rules": { + "array-callback-return": [ + 2, + { + "allowImplicit": false, + "checkForEach": false, + "allowVoid": false + } + ], + "consistent-return": [ + 2, + { + "treatUndefinedAsUnspecified": false + } + ], + "no-empty-function": [ + 2, + { + "allow": [] + } + ], + "no-redeclare": [ + 2, + { + "builtinGlobals": true + } + ], + "no-unused-expressions": [ + 2, + { + "allowShortCircuit": false, + "allowTernary": false, + "allowTaggedTemplates": false, + "enforceForJSX": false, + "ignoreDirectives": false + } + ], + "prefer-promise-reject-errors": [ + 2, + { + "allowEmptyReject": true + } + ], + "require-await": [2], + "getter-return": [ + 2, + { + "allowImplicit": true + } + ], + "no-dupe-args": [2], + "no-dupe-keys": [2], + "no-unreachable": [2], + "valid-typeof": [ + 2, + { + "requireStringLiterals": false + } + ], + "@shopify/no-fully-static-classes": [2], + "@shopify/prefer-early-return": [ + 2, + { + "maximumStatements": 1 + } + ], + "strict": [2, "never"], + "camelcase": [ + 2, + { + "allow": [], + "ignoreDestructuring": false, + "ignoreGlobals": false, + "ignoreImports": false, + "properties": "always" + } + ], + "no-array-constructor": [2], + "no-catch-shadow": [2], + "no-restricted-globals": [2], + "no-shadow": [ + 2, + { + "allow": [], + "builtinGlobals": false, + "hoist": "functions", + "ignoreOnInitialization": false, + "ignoreTypeValueShadow": true, + "ignoreFunctionTypeParameterNameValueShadow": true + } + ], + "no-undef": [ + 2, + { + "typeof": false + } + ], + "no-unused-vars": [2], + "no-use-before-define": [2, "nofunc"], + "no-const-assign": [2], + "no-dupe-class-members": [2], + "no-new-symbol": [2], + "no-this-before-super": [2], + "no-useless-constructor": [2], + "promise/catch-or-return": [2], + "sort-class-members/sort-class-members": [ + 2, + { + "order": [ + "[static-members]", + "[properties]", + "[conventional-private-properties]", + "constructor", + "[methods]", + "[conventional-private-methods]", + "[everything-else]" + ], + "groups": { + "static-members": [ + { + "static": true + } + ] + }, + "accessorPairPositioning": "getThenSet" + } + ], + "import-x/no-unresolved": [2], + "import-x/named": [2], + "import-x/no-cycle": [2], + "import-x/export": [2], + "import-x/no-extraneous-dependencies": [2], + "import-x/extensions": [ + 2, + { + "js": "never", + "json": "always", + "svg": "always", + "png": "always", + "jpg": "always", + "ico": "always", + "graphql": "always", + "css": "always", + "sass": "always", + "scss": "always", + "less": "always", + "styl": "always" + } + ], + "import-x/order": [ + 2, + { + "groups": ["builtin", "external", "internal", "parent", "sibling"], + "newlines-between": "always", + "distinctGroup": true, + "sortTypesGroup": false, + "named": false, + "warnOnUnassignedImports": false + } + ], + "n/callback-return": [2, ["callback", "cb", "next"]], + "n/no-deprecated-api": [2], + "n/no-unsupported-features/node-builtins": [2] + }, + "removed": [ + "no-await-in-loop", + "no-console", + "@shopify/typescript-prefer-pascal-case-enums", + "@shopify/typescript-prefer-singular-enums", + "no-restricted-syntax", + "@typescript-eslint/no-array-constructor", + "@typescript-eslint/no-explicit-any", + "@typescript-eslint/no-inferrable-types", + "@typescript-eslint/member-ordering", + "@typescript-eslint/no-unused-vars", + "@typescript-eslint/adjacent-overload-signatures", + "@typescript-eslint/array-type", + "@typescript-eslint/no-wrapper-object-types", + "@typescript-eslint/naming-convention", + "@typescript-eslint/no-extraneous-class", + "@typescript-eslint/no-misused-new", + "@typescript-eslint/no-this-alias", + "@typescript-eslint/ban-ts-comment", + "@typescript-eslint/consistent-type-assertions", + "@typescript-eslint/consistent-type-definitions", + "@typescript-eslint/no-floating-promises", + "@typescript-eslint/prefer-for-of", + "@typescript-eslint/triple-slash-reference", + "@typescript-eslint/unified-signatures", + "@typescript-eslint/no-misused-promises", + "@typescript-eslint/no-unnecessary-type-assertion", + "@typescript-eslint/prefer-readonly", + "@typescript-eslint/no-unnecessary-type-constraint", + "@typescript-eslint/no-unused-expressions", + "no-catch-all/no-catch-all", + "@typescript-eslint/switch-exhaustiveness-check", + "unused-imports/no-unused-imports", + "no-restricted-imports", + "vitest/consistent-test-it", + "vitest/max-nested-describe", + "vitest/no-disabled-tests", + "vitest/prefer-expect-resolves", + "@shopify/cli/command-flags-with-env", + "@shopify/cli/command-conventional-flag-env", + "@shopify/cli/command-reserved-flags", + "@shopify/cli/command-json-output", + "@shopify/cli/no-error-factory-functions", + "@shopify/cli/no-process-cwd", + "@shopify/cli/no-trailing-js-in-cli-kit-imports", + "@shopify/cli/no-vi-manual-mock-clear", + "@shopify/cli/no-vi-mock-in-callbacks", + "@shopify/cli/prompt-message-format", + "@shopify/cli/banner-headline-format", + "@shopify/cli/required-fields-when-loading-app", + "@shopify/cli/no-inline-graphql", + "tsdoc/syntax", + "@typescript-eslint/prefer-nullish-coalescing", + "@typescript-eslint/prefer-promise-reject-errors", + "@typescript-eslint/only-throw-error", + "@nx/enforce-module-boundaries" + ] + }, + { + "files": [ + "packages/app/src/cli/services/app-security-engine/tests/checks.test.ts", + "packages/ui-extensions-server-kit/src/utilities/replaceUpdated.test.ts", + "packages/ui-extensions-server-kit/src/utilities/set.test.ts" + ], + "rules": { + "@typescript-eslint/no-unnecessary-template-expression": [2], + "@typescript-eslint/prefer-reduce-type-parameter": [2] + }, + "removed": [ + "id-length", + "no-restricted-syntax", + "no-restricted-globals", + "@typescript-eslint/no-explicit-any", + "@typescript-eslint/no-unused-vars", + "@shopify/cli/required-fields-when-loading-app" + ] + }, + { + "files": [ + "packages/app/src/cli/services/app-security-engine/tests/git-test-helpers.ts", + "packages/e2e/setup/auth-state.ts", + "packages/e2e/setup/env.ts", + "packages/e2e/tests/app-scaffold.spec.ts", + "packages/e2e/tests/fixture-toml.spec.ts" + ], + "rules": {}, + "removed": ["no-restricted-imports"] + }, + { + "files": ["packages/app/src/cli/services/app-security-engine/tests/secret-safety.test.ts"], + "rules": { + "@typescript-eslint/no-unnecessary-template-expression": [2], + "@typescript-eslint/prefer-reduce-type-parameter": [2] + }, + "removed": [ + "id-length", + "line-comment-position", + "no-restricted-syntax", + "no-restricted-globals", + "@typescript-eslint/no-explicit-any", + "@typescript-eslint/no-unused-vars", + "no-restricted-imports", + "@shopify/cli/required-fields-when-loading-app" + ] + }, + { + "files": ["packages/app/src/cli/services/context/deploy-identifier-matching.test.ts"], + "rules": { + "@typescript-eslint/no-unnecessary-template-expression": [2], + "@typescript-eslint/prefer-reduce-type-parameter": [2] + }, + "removed": [ + "@shopify/prefer-module-scope-constants", + "no-restricted-syntax", + "no-restricted-globals", + "@typescript-eslint/no-explicit-any", + "@typescript-eslint/no-unused-vars", + "@shopify/cli/required-fields-when-loading-app" + ] + }, + { + "files": [ + "packages/app/src/cli/services/dev/app-events/app-event-watcher.ts", + "packages/cli-kit/src/public/node/ui.tsx" + ], + "rules": {}, + "removed": ["tsdoc/syntax"] + }, + { + "files": ["packages/app/src/cli/services/dev/app-events/file-watcher.ts"], + "rules": {}, + "removed": ["no-case-declarations"] + }, + { + "files": ["packages/app/src/cli/services/generate/shop-import/declarative-definitions.ts"], + "rules": {}, + "removed": ["@typescript-eslint/prefer-nullish-coalescing"] + }, + { + "files": ["packages/cli/bin/dev.js", "packages/cli/bin/run.js"], + "rules": { + "array-callback-return": [ + 2, + { + "allowImplicit": false, + "checkForEach": false, + "allowVoid": false + } + ], + "consistent-return": [ + 2, + { + "treatUndefinedAsUnspecified": false + } + ], + "no-empty-function": [ + 2, + { + "allow": [] + } + ], + "no-redeclare": [ + 2, + { + "builtinGlobals": true + } + ], + "no-unused-expressions": [ + 2, + { + "allowShortCircuit": false, + "allowTernary": false, + "allowTaggedTemplates": false, + "enforceForJSX": false, + "ignoreDirectives": false + } + ], + "prefer-promise-reject-errors": [ + 2, + { + "allowEmptyReject": true + } + ], + "require-await": [2], + "getter-return": [ + 2, + { + "allowImplicit": true + } + ], + "no-dupe-args": [2], + "no-dupe-keys": [2], + "no-unreachable": [2], + "valid-typeof": [ + 2, + { + "requireStringLiterals": false + } + ], + "@shopify/no-fully-static-classes": [2], + "@shopify/prefer-early-return": [ + 2, + { + "maximumStatements": 1 + } + ], + "strict": [2, "never"], + "camelcase": [ + 2, + { + "allow": [], + "ignoreDestructuring": false, + "ignoreGlobals": false, + "ignoreImports": false, + "properties": "always" + } + ], + "no-array-constructor": [2], + "no-catch-shadow": [2], + "no-restricted-globals": [2], + "no-shadow": [ + 2, + { + "allow": [], + "builtinGlobals": false, + "hoist": "functions", + "ignoreOnInitialization": false, + "ignoreTypeValueShadow": true, + "ignoreFunctionTypeParameterNameValueShadow": true + } + ], + "no-undef": [ + 2, + { + "typeof": false + } + ], + "no-unused-vars": [2], + "no-use-before-define": [2, "nofunc"], + "no-const-assign": [2], + "no-dupe-class-members": [2], + "no-new-symbol": [2], + "no-this-before-super": [2], + "no-useless-constructor": [2], + "promise/catch-or-return": [2], + "sort-class-members/sort-class-members": [ + 2, + { + "order": [ + "[static-members]", + "[properties]", + "[conventional-private-properties]", + "constructor", + "[methods]", + "[conventional-private-methods]", + "[everything-else]" + ], + "groups": { + "static-members": [ + { + "static": true + } + ] + }, + "accessorPairPositioning": "getThenSet" + } + ], + "import-x/named": [2], + "import-x/no-cycle": [2], + "import-x/export": [2], + "import-x/no-extraneous-dependencies": [2], + "import-x/order": [ + 2, + { + "groups": ["builtin", "external", "internal", "parent", "sibling"], + "newlines-between": "always", + "distinctGroup": true, + "sortTypesGroup": false, + "named": false, + "warnOnUnassignedImports": false + } + ], + "n/callback-return": [2, ["callback", "cb", "next"]], + "n/no-deprecated-api": [2], + "n/no-unsupported-features/node-builtins": [2] + }, + "removed": [ + "no-await-in-loop", + "no-console", + "@shopify/typescript-prefer-pascal-case-enums", + "@shopify/typescript-prefer-singular-enums", + "no-restricted-syntax", + "import-x/extensions", + "@typescript-eslint/no-array-constructor", + "@typescript-eslint/no-explicit-any", + "@typescript-eslint/no-inferrable-types", + "@typescript-eslint/member-ordering", + "@typescript-eslint/no-unused-vars", + "@typescript-eslint/adjacent-overload-signatures", + "@typescript-eslint/array-type", + "@typescript-eslint/no-wrapper-object-types", + "@typescript-eslint/naming-convention", + "@typescript-eslint/no-extraneous-class", + "@typescript-eslint/no-misused-new", + "@typescript-eslint/no-this-alias", + "@typescript-eslint/ban-ts-comment", + "@typescript-eslint/consistent-type-assertions", + "@typescript-eslint/consistent-type-definitions", + "@typescript-eslint/no-floating-promises", + "@typescript-eslint/prefer-for-of", + "@typescript-eslint/triple-slash-reference", + "@typescript-eslint/unified-signatures", + "@typescript-eslint/no-misused-promises", + "@typescript-eslint/no-unnecessary-type-assertion", + "@typescript-eslint/prefer-readonly", + "@typescript-eslint/no-unnecessary-type-constraint", + "@typescript-eslint/no-unused-expressions", + "n/no-unpublished-bin", + "no-catch-all/no-catch-all", + "@typescript-eslint/switch-exhaustiveness-check", + "unused-imports/no-unused-imports", + "no-restricted-imports", + "vitest/consistent-test-it", + "vitest/max-nested-describe", + "vitest/no-disabled-tests", + "vitest/prefer-expect-resolves", + "@shopify/cli/command-flags-with-env", + "@shopify/cli/command-conventional-flag-env", + "@shopify/cli/command-reserved-flags", + "@shopify/cli/command-json-output", + "@shopify/cli/no-error-factory-functions", + "@shopify/cli/no-process-cwd", + "@shopify/cli/no-trailing-js-in-cli-kit-imports", + "@shopify/cli/no-vi-manual-mock-clear", + "@shopify/cli/no-vi-mock-in-callbacks", + "@shopify/cli/prompt-message-format", + "@shopify/cli/banner-headline-format", + "@shopify/cli/required-fields-when-loading-app", + "@shopify/cli/no-inline-graphql", + "tsdoc/syntax", + "@typescript-eslint/prefer-nullish-coalescing", + "@typescript-eslint/prefer-promise-reject-errors", + "@typescript-eslint/only-throw-error", + "@nx/enforce-module-boundaries" + ] + }, + { + "files": [ + "packages/cli/src/bootstrap.ts", + "packages/cli/src/cli/commands/auth/login.ts", + "packages/cli/src/cli/commands/auth/logout.ts", + "packages/cli/src/cli/commands/cache/clear.ts", + "packages/cli/src/cli/commands/config/autoupgrade/constants.ts", + "packages/cli/src/cli/commands/config/autoupgrade/off.ts", + "packages/cli/src/cli/commands/config/autoupgrade/on.ts", + "packages/cli/src/cli/commands/config/autoupgrade/status.ts", + "packages/cli/src/cli/commands/debug/command-flags.ts", + "packages/cli/src/cli/commands/doc/fetch.ts", + "packages/cli/src/cli/commands/doc/search.ts", + "packages/cli/src/cli/commands/docs/generate.ts", + "packages/cli/src/cli/commands/doctor-release/doctor-release.ts", + "packages/cli/src/cli/commands/doctor-release/theme/index.ts", + "packages/cli/src/cli/commands/help.ts", + "packages/cli/src/cli/commands/kitchen-sink/async.ts", + "packages/cli/src/cli/commands/kitchen-sink/index.ts", + "packages/cli/src/cli/commands/kitchen-sink/prompts.ts", + "packages/cli/src/cli/commands/kitchen-sink/static.ts", + "packages/cli/src/cli/commands/notifications/generate.ts", + "packages/cli/src/cli/commands/notifications/list.ts", + "packages/cli/src/cli/commands/search.ts", + "packages/cli/src/cli/commands/send-analytics.ts", + "packages/cli/src/cli/commands/upgrade.ts", + "packages/cli/src/cli/commands/version.ts", + "packages/cli/src/cli/help.ts", + "packages/cli/src/cli/services/commands/doc/fetch.ts", + "packages/cli/src/cli/services/commands/doc/search.ts", + "packages/cli/src/cli/services/commands/help/index.ts", + "packages/cli/src/cli/services/commands/help/result.ts", + "packages/cli/src/cli/services/commands/help/types.ts", + "packages/cli/src/cli/services/commands/notifications.ts", + "packages/cli/src/cli/services/commands/search/index.ts", + "packages/cli/src/cli/services/commands/search/result.ts", + "packages/cli/src/cli/services/commands/search/types.ts", + "packages/cli/src/cli/services/commands/version/index.ts", + "packages/cli/src/cli/services/commands/version/result.ts", + "packages/cli/src/cli/services/commands/version/types.ts", + "packages/cli/src/cli/services/doctor-release/context.ts", + "packages/cli/src/cli/services/doctor-release/theme/runner.ts", + "packages/cli/src/cli/services/doctor-release/theme/tests/init.ts", + "packages/cli/src/cli/services/doctor-release/theme/tests/push.ts", + "packages/cli/src/cli/services/kitchen-sink/async.ts", + "packages/cli/src/cli/services/kitchen-sink/prompts.ts", + "packages/cli/src/cli/services/kitchen-sink/static.ts", + "packages/cli/src/command-registry.ts", + "packages/cli/src/hooks/did-you-mean.ts", + "packages/cli/src/hooks/hydrogen-init.ts", + "packages/cli/src/hooks/plugin-plugins.ts", + "packages/cli/src/hooks/postrun.ts", + "packages/cli/src/hooks/prerun.ts", + "packages/cli/src/hooks/public-metadata.ts", + "packages/cli/src/hooks/sensitive-metadata.ts", + "packages/cli/src/hooks/tunnel-provider.ts", + "packages/cli/src/hooks/tunnel-start.ts", + "packages/cli/src/index.ts", + "packages/cli/src/uncaught-error-handler.ts" + ], + "rules": {}, + "removed": ["@nx/enforce-module-boundaries"] + }, + { + "files": [ + "packages/cli/src/cli/commands/auth/login.test.ts", + "packages/cli/src/cli/commands/auth/logout.test.ts", + "packages/cli/src/cli/commands/config/autoupgrade/off.test.ts", + "packages/cli/src/cli/commands/config/autoupgrade/on.test.ts", + "packages/cli/src/cli/commands/config/autoupgrade/status.test.ts", + "packages/cli/src/cli/commands/docs/generate.test.ts", + "packages/cli/src/cli/commands/help.test.ts", + "packages/cli/src/cli/commands/kitchen-sink/async.test.ts", + "packages/cli/src/cli/commands/kitchen-sink/index.test.ts", + "packages/cli/src/cli/commands/kitchen-sink/prompts.test.ts", + "packages/cli/src/cli/commands/kitchen-sink/static.test.ts", + "packages/cli/src/cli/commands/search.test.ts", + "packages/cli/src/cli/commands/upgrade.test.ts", + "packages/cli/src/cli/commands/version.test.ts", + "packages/cli/src/cli/help.test.ts", + "packages/cli/src/cli/services/commands/doc/fetch.test.ts", + "packages/cli/src/cli/services/commands/doc/search.test.ts", + "packages/cli/src/cli/services/commands/help/index.test.ts", + "packages/cli/src/cli/services/commands/search/index.test.ts", + "packages/cli/src/cli/services/commands/version/index.test.ts", + "packages/cli/src/cli/services/commands/version/result.test.ts", + "packages/cli/src/cli/subscription-migrations-help.test.ts", + "packages/cli/src/uncaught-error-handler.integration.test.ts", + "packages/cli/src/uncaught-error-handler.test.ts" + ], + "rules": { + "@typescript-eslint/no-unnecessary-template-expression": [2], + "@typescript-eslint/prefer-reduce-type-parameter": [2] + }, + "removed": [ + "no-restricted-syntax", + "no-restricted-globals", + "@typescript-eslint/no-explicit-any", + "@typescript-eslint/no-unused-vars", + "@shopify/cli/required-fields-when-loading-app", + "@nx/enforce-module-boundaries" + ] + }, + { + "files": ["packages/cli/src/cli/repo-health.test.ts"], + "rules": { + "@typescript-eslint/no-unnecessary-template-expression": [2], + "@typescript-eslint/prefer-reduce-type-parameter": [2] + }, + "removed": [ + "no-await-in-loop", + "no-restricted-syntax", + "no-restricted-globals", + "@typescript-eslint/no-explicit-any", + "@typescript-eslint/no-unused-vars", + "no-restricted-imports", + "@shopify/cli/required-fields-when-loading-app", + "@nx/enforce-module-boundaries" + ] + }, + { + "files": ["packages/cli-kit/src/private/common/ts/overloaded-parameters.ts"], + "rules": {}, + "removed": ["@typescript-eslint/no-explicit-any"] + }, + { + "files": ["packages/cli-kit/src/private/node/ui/components/TextAnimation.tsx"], + "rules": {}, + "removed": ["id-length"] + }, + { + "files": ["packages/cli-kit/src/private/node/ui/components/TextInput.tsx"], + "rules": {}, + "removed": ["no-nested-ternary"] + }, + { + "files": [ + "packages/cli-kit/src/public/common/array.ts", + "packages/cli-kit/src/public/common/collection.ts", + "packages/cli-kit/src/public/common/command-events.ts", + "packages/cli-kit/src/public/common/function.ts", + "packages/cli-kit/src/public/common/gid.ts", + "packages/cli-kit/src/public/common/json.ts", + "packages/cli-kit/src/public/common/lang.ts", + "packages/cli-kit/src/public/common/object.ts", + "packages/cli-kit/src/public/common/retry.ts", + "packages/cli-kit/src/public/common/string.ts", + "packages/cli-kit/src/public/common/ts/deep-required.ts", + "packages/cli-kit/src/public/common/ts/json-narrowing.ts", + "packages/cli-kit/src/public/common/ts/pick-by-prefix.ts", + "packages/cli-kit/src/public/common/url.ts", + "packages/cli-kit/src/public/common/version.ts", + "packages/cli-kit/src/public/node/api/admin.ts", + "packages/cli-kit/src/public/node/api/app-dev.ts", + "packages/cli-kit/src/public/node/api/app-management.ts", + "packages/cli-kit/src/public/node/api/bulk-operations/cancel.ts", + "packages/cli-kit/src/public/node/api/bulk-operations/constants.ts", + "packages/cli-kit/src/public/node/api/bulk-operations/download-bulk-operation-results.ts", + "packages/cli-kit/src/public/node/api/bulk-operations/fetch.ts", + "packages/cli-kit/src/public/node/api/bulk-operations/format-bulk-operation-status.ts", + "packages/cli-kit/src/public/node/api/bulk-operations/helpers.ts", + "packages/cli-kit/src/public/node/api/bulk-operations/query.ts", + "packages/cli-kit/src/public/node/api/bulk-operations/run-mutation.ts", + "packages/cli-kit/src/public/node/api/bulk-operations/run-query.ts", + "packages/cli-kit/src/public/node/api/bulk-operations/stage-file.ts", + "packages/cli-kit/src/public/node/api/bulk-operations/watch-bulk-operation.ts", + "packages/cli-kit/src/public/node/api/bulk-operations.ts", + "packages/cli-kit/src/public/node/api/business-platform.ts", + "packages/cli-kit/src/public/node/api/functions.ts", + "packages/cli-kit/src/public/node/api/graphql.ts", + "packages/cli-kit/src/public/node/api/partners.ts", + "packages/cli-kit/src/public/node/api/rest-api-throttler.ts", + "packages/cli-kit/src/public/node/api/utilities.ts", + "packages/cli-kit/src/public/node/api/webhooks.ts", + "packages/cli-kit/src/public/node/archiver.ts", + "packages/cli-kit/src/public/node/cli-launcher.ts", + "packages/cli-kit/src/public/node/colors.ts", + "packages/cli-kit/src/public/node/command-events.ts", + "packages/cli-kit/src/public/node/constants.ts", + "packages/cli-kit/src/public/node/context/local.ts", + "packages/cli-kit/src/public/node/context/utilities.ts", + "packages/cli-kit/src/public/node/crypto.ts", + "packages/cli-kit/src/public/node/custom-oclif-loader.ts", + "packages/cli-kit/src/public/node/doctor/framework.ts", + "packages/cli-kit/src/public/node/doctor/reporter.ts", + "packages/cli-kit/src/public/node/doctor/types.ts", + "packages/cli-kit/src/public/node/environment.ts", + "packages/cli-kit/src/public/node/error/index.ts", + "packages/cli-kit/src/public/node/error/schema.ts", + "packages/cli-kit/src/public/node/error/types.ts", + "packages/cli-kit/src/public/node/error.ts", + "packages/cli-kit/src/public/node/figures.ts", + "packages/cli-kit/src/public/node/git.ts", + "packages/cli-kit/src/public/node/global-context.ts", + "packages/cli-kit/src/public/node/graphiql/server.ts", + "packages/cli-kit/src/public/node/graphiql/session.ts", + "packages/cli-kit/src/public/node/graphiql/utilities.ts", + "packages/cli-kit/src/public/node/graphql.ts", + "packages/cli-kit/src/public/node/hidden-folder.ts", + "packages/cli-kit/src/public/node/hooks/deprecations.ts", + "packages/cli-kit/src/public/node/hooks/postrun.ts", + "packages/cli-kit/src/public/node/hrtime.ts", + "packages/cli-kit/src/public/node/http.ts", + "packages/cli-kit/src/public/node/import-extractor.ts", + "packages/cli-kit/src/public/node/ink.ts", + "packages/cli-kit/src/public/node/is-global.ts", + "packages/cli-kit/src/public/node/json-output-schema.ts", + "packages/cli-kit/src/public/node/json-schema.ts", + "packages/cli-kit/src/public/node/liquid.ts", + "packages/cli-kit/src/public/node/local-storage.ts", + "packages/cli-kit/src/public/node/logs.ts", + "packages/cli-kit/src/public/node/metadata.ts", + "packages/cli-kit/src/public/node/mimes.ts", + "packages/cli-kit/src/public/node/monorail.ts", + "packages/cli-kit/src/public/node/multiple-installation-warning.ts", + "packages/cli-kit/src/public/node/notifications-system.ts", + "packages/cli-kit/src/public/node/output.ts", + "packages/cli-kit/src/public/node/path.ts", + "packages/cli-kit/src/public/node/plugins.ts", + "packages/cli-kit/src/public/node/promises.ts", + "packages/cli-kit/src/public/node/schema.ts", + "packages/cli-kit/src/public/node/serial-batch-processor.ts", + "packages/cli-kit/src/public/node/session-prompt.ts", + "packages/cli-kit/src/public/node/session.ts", + "packages/cli-kit/src/public/node/store-auth-session.ts", + "packages/cli-kit/src/public/node/system.ts", + "packages/cli-kit/src/public/node/tcp.ts", + "packages/cli-kit/src/public/node/toml/codec.ts", + "packages/cli-kit/src/public/node/toml/index.ts", + "packages/cli-kit/src/public/node/toml/toml-file.ts", + "packages/cli-kit/src/public/node/ui/components.ts", + "packages/cli-kit/src/public/node/ui/hooks.ts", + "packages/cli-kit/src/public/node/upgrade.ts", + "packages/cli-kit/src/public/node/version.ts", + "packages/cli-kit/src/public/node/vscode.ts" + ], + "rules": { + "jsdoc/check-access": [2], + "jsdoc/check-alignment": [2], + "jsdoc/check-indentation": [2], + "jsdoc/check-line-alignment": [2], + "jsdoc/check-param-names": [2], + "jsdoc/check-property-names": [2], + "jsdoc/check-syntax": [2], + "jsdoc/check-tag-names": [2], + "jsdoc/check-types": [2], + "jsdoc/check-values": [2], + "jsdoc/empty-tags": [2], + "jsdoc/implements-on-classes": [2], + "jsdoc/match-description": [2], + "jsdoc/multiline-blocks": [2], + "jsdoc/no-bad-blocks": [2], + "jsdoc/no-defaults": [2], + "jsdoc/no-multi-asterisks": [2], + "jsdoc/no-types": [2], + "jsdoc/no-undefined-types": [2], + "jsdoc/require-asterisk-prefix": [2], + "jsdoc/require-description": [2], + "jsdoc/require-description-complete-sentence": [2], + "jsdoc/require-hyphen-before-param-description": [2], + "jsdoc/require-jsdoc": [ + 2, + { + "publicOnly": true, + "checkConstructors": true, + "checkGetters": true, + "checkSetters": true, + "enableFixer": true, + "exemptEmptyConstructors": false, + "exemptEmptyFunctions": false, + "fixerMessage": "", + "require": { + "ArrowFunctionExpression": false, + "ClassDeclaration": false, + "ClassExpression": false, + "FunctionDeclaration": true, + "FunctionExpression": false, + "MethodDefinition": false + } + } + ], + "jsdoc/require-param": [2], + "jsdoc/require-param-description": [2], + "jsdoc/require-param-name": [2], + "jsdoc/require-property": [2], + "jsdoc/require-property-description": [2], + "jsdoc/require-property-name": [2], + "jsdoc/require-property-type": [2], + "jsdoc/require-returns": [ + 2, + { + "publicOnly": true, + "checkConstructors": false, + "checkGetters": true, + "forceRequireReturn": false, + "forceReturnsWithAsync": false + } + ], + "jsdoc/require-returns-check": [2], + "jsdoc/require-returns-description": [2], + "jsdoc/require-throws": [2], + "jsdoc/require-yields": [2], + "jsdoc/require-yields-check": [2], + "jsdoc/tag-lines": [ + 2, + "any", + { + "startLines": 1 + } + ], + "jsdoc/valid-types": [2] + }, + "removed": [] + }, + { + "files": ["packages/cli-kit/src/public/node/context/fqdn.ts"], + "rules": { + "jsdoc/check-access": [2], + "jsdoc/check-alignment": [2], + "jsdoc/check-indentation": [2], + "jsdoc/check-line-alignment": [2], + "jsdoc/check-param-names": [2], + "jsdoc/check-property-names": [2], + "jsdoc/check-syntax": [2], + "jsdoc/check-tag-names": [2], + "jsdoc/check-types": [2], + "jsdoc/check-values": [2], + "jsdoc/empty-tags": [2], + "jsdoc/implements-on-classes": [2], + "jsdoc/match-description": [2], + "jsdoc/multiline-blocks": [2], + "jsdoc/no-bad-blocks": [2], + "jsdoc/no-defaults": [2], + "jsdoc/no-multi-asterisks": [2], + "jsdoc/no-types": [2], + "jsdoc/no-undefined-types": [2], + "jsdoc/require-asterisk-prefix": [2], + "jsdoc/require-description": [2], + "jsdoc/require-description-complete-sentence": [2], + "jsdoc/require-hyphen-before-param-description": [2], + "jsdoc/require-jsdoc": [ + 2, + { + "publicOnly": true, + "checkConstructors": true, + "checkGetters": true, + "checkSetters": true, + "enableFixer": true, + "exemptEmptyConstructors": false, + "exemptEmptyFunctions": false, + "fixerMessage": "", + "require": { + "ArrowFunctionExpression": false, + "ClassDeclaration": false, + "ClassExpression": false, + "FunctionDeclaration": true, + "FunctionExpression": false, + "MethodDefinition": false + } + } + ], + "jsdoc/require-param": [2], + "jsdoc/require-param-description": [2], + "jsdoc/require-param-name": [2], + "jsdoc/require-property": [2], + "jsdoc/require-property-description": [2], + "jsdoc/require-property-name": [2], + "jsdoc/require-property-type": [2], + "jsdoc/require-returns": [ + 2, + { + "publicOnly": true, + "checkConstructors": false, + "checkGetters": true, + "forceRequireReturn": false, + "forceReturnsWithAsync": false + } + ], + "jsdoc/require-returns-check": [2], + "jsdoc/require-returns-description": [2], + "jsdoc/require-throws": [2], + "jsdoc/require-yields": [2], + "jsdoc/require-yields-check": [2], + "jsdoc/tag-lines": [ + 2, + "any", + { + "startLines": 1 + } + ], + "jsdoc/valid-types": [2] + }, + "removed": ["@typescript-eslint/switch-exhaustiveness-check"] + }, + { + "files": [ + "packages/cli-kit/src/public/node/testing/output.ts", + "packages/cli-kit/src/public/node/testing/test-with-temp-dir.ts", + "packages/cli-kit/src/public/node/testing/ui.ts" + ], + "rules": { + "@typescript-eslint/no-unnecessary-template-expression": [2], + "@typescript-eslint/prefer-reduce-type-parameter": [2], + "jsdoc/check-access": [2], + "jsdoc/check-alignment": [2], + "jsdoc/check-indentation": [2], + "jsdoc/check-line-alignment": [2], + "jsdoc/check-param-names": [2], + "jsdoc/check-property-names": [2], + "jsdoc/check-syntax": [2], + "jsdoc/check-tag-names": [2], + "jsdoc/check-types": [2], + "jsdoc/check-values": [2], + "jsdoc/empty-tags": [2], + "jsdoc/implements-on-classes": [2], + "jsdoc/match-description": [2], + "jsdoc/multiline-blocks": [2], + "jsdoc/no-bad-blocks": [2], + "jsdoc/no-defaults": [2], + "jsdoc/no-multi-asterisks": [2], + "jsdoc/no-types": [2], + "jsdoc/no-undefined-types": [2], + "jsdoc/require-asterisk-prefix": [2], + "jsdoc/require-description": [2], + "jsdoc/require-description-complete-sentence": [2], + "jsdoc/require-hyphen-before-param-description": [2], + "jsdoc/require-jsdoc": [ + 2, + { + "publicOnly": true, + "checkConstructors": true, + "checkGetters": true, + "checkSetters": true, + "enableFixer": true, + "exemptEmptyConstructors": false, + "exemptEmptyFunctions": false, + "fixerMessage": "", + "require": { + "ArrowFunctionExpression": false, + "ClassDeclaration": false, + "ClassExpression": false, + "FunctionDeclaration": true, + "FunctionExpression": false, + "MethodDefinition": false + } + } + ], + "jsdoc/require-param": [2], + "jsdoc/require-param-description": [2], + "jsdoc/require-param-name": [2], + "jsdoc/require-property": [2], + "jsdoc/require-property-description": [2], + "jsdoc/require-property-name": [2], + "jsdoc/require-property-type": [2], + "jsdoc/require-returns": [ + 2, + { + "publicOnly": true, + "checkConstructors": false, + "checkGetters": true, + "forceRequireReturn": false, + "forceReturnsWithAsync": false + } + ], + "jsdoc/require-returns-check": [2], + "jsdoc/require-returns-description": [2], + "jsdoc/require-throws": [2], + "jsdoc/require-yields": [2], + "jsdoc/require-yields-check": [2], + "jsdoc/tag-lines": [ + 2, + "any", + { + "startLines": 1 + } + ], + "jsdoc/valid-types": [2] + }, + "removed": [ + "no-restricted-syntax", + "no-restricted-globals", + "@typescript-eslint/no-explicit-any", + "@typescript-eslint/no-unused-vars", + "@shopify/cli/required-fields-when-loading-app" + ] + }, + { + "files": ["packages/cli-kit/src/public/node/tree-kill.ts"], + "rules": { + "jsdoc/check-access": [2], + "jsdoc/check-alignment": [2], + "jsdoc/check-indentation": [2], + "jsdoc/check-line-alignment": [2], + "jsdoc/check-param-names": [2], + "jsdoc/check-property-names": [2], + "jsdoc/check-syntax": [2], + "jsdoc/check-tag-names": [2], + "jsdoc/check-types": [2], + "jsdoc/check-values": [2], + "jsdoc/empty-tags": [2], + "jsdoc/implements-on-classes": [2], + "jsdoc/match-description": [2], + "jsdoc/multiline-blocks": [2], + "jsdoc/no-bad-blocks": [2], + "jsdoc/no-defaults": [2], + "jsdoc/no-multi-asterisks": [2], + "jsdoc/no-types": [2], + "jsdoc/no-undefined-types": [2], + "jsdoc/require-asterisk-prefix": [2], + "jsdoc/require-description": [2], + "jsdoc/require-description-complete-sentence": [2], + "jsdoc/require-hyphen-before-param-description": [2], + "jsdoc/require-jsdoc": [ + 2, + { + "publicOnly": true, + "checkConstructors": true, + "checkGetters": true, + "checkSetters": true, + "enableFixer": true, + "exemptEmptyConstructors": false, + "exemptEmptyFunctions": false, + "fixerMessage": "", + "require": { + "ArrowFunctionExpression": false, + "ClassDeclaration": false, + "ClassExpression": false, + "FunctionDeclaration": true, + "FunctionExpression": false, + "MethodDefinition": false + } + } + ], + "jsdoc/require-param": [2], + "jsdoc/require-param-description": [2], + "jsdoc/require-param-name": [2], + "jsdoc/require-property": [2], + "jsdoc/require-property-description": [2], + "jsdoc/require-property-name": [2], + "jsdoc/require-property-type": [2], + "jsdoc/require-returns": [ + 2, + { + "publicOnly": true, + "checkConstructors": false, + "checkGetters": true, + "forceRequireReturn": false, + "forceReturnsWithAsync": false + } + ], + "jsdoc/require-returns-check": [2], + "jsdoc/require-returns-description": [2], + "jsdoc/require-yields": [2], + "jsdoc/require-yields-check": [2], + "jsdoc/tag-lines": [ + 2, + "any", + { + "startLines": 1 + } + ], + "jsdoc/valid-types": [2] + }, + "removed": ["@typescript-eslint/ban-ts-comment", "no-restricted-imports"] + }, + { + "files": ["packages/e2e/playwright.config.ts"], + "rules": {}, + "removed": ["line-comment-position"] + }, + { + "files": ["packages/e2e/setup/admin-api.ts"], + "rules": {}, + "removed": ["no-restricted-globals"] + }, + { + "files": ["packages/e2e/setup/app.ts"], + "rules": {}, + "removed": ["no-await-in-loop", "no-restricted-imports"] + }, + { + "files": [ + "packages/e2e/tests/dev-hot-reload.spec.ts", + "packages/e2e/tests/multi-config-dev.spec.ts", + "packages/e2e/tests/toml-config-invalid.spec.ts", + "packages/e2e/tests/toml-config.spec.ts" + ], + "rules": {}, + "removed": ["no-console", "no-restricted-imports"] + }, + { + "files": [ + "packages/eslint-plugin-cli/config.js", + "packages/eslint-plugin-cli/oxlint-commonjs-scopes.js", + "packages/eslint-plugin-cli/oxlint-compat.js", + "packages/eslint-plugin-cli/oxlint-compat.test.js", + "packages/eslint-plugin-cli/oxlint-typescript-services.js", + "packages/eslint-plugin-cli/rules/banner-headline-format.js", + "packages/eslint-plugin-cli/rules/command-conventional-flag-env.js", + "packages/eslint-plugin-cli/rules/command-flags-with-env.js", + "packages/eslint-plugin-cli/rules/command-json-output.js", + "packages/eslint-plugin-cli/rules/command-json-output.test.js", + "packages/eslint-plugin-cli/rules/command-reserved-flags.js", + "packages/eslint-plugin-cli/rules/flag-options.js", + "packages/eslint-plugin-cli/rules/flag-options.test.js", + "packages/eslint-plugin-cli/rules/json-output-command-exceptions.js", + "packages/eslint-plugin-cli/rules/no-error-factory-functions.js", + "packages/eslint-plugin-cli/rules/no-inline-graphql.js", + "packages/eslint-plugin-cli/rules/no-process-cwd.js", + "packages/eslint-plugin-cli/rules/no-trailing-js-in-cli-kit-imports.js", + "packages/eslint-plugin-cli/rules/no-vi-manual-mock-clear.js", + "packages/eslint-plugin-cli/rules/no-vi-mock-in-callbacks.js", + "packages/eslint-plugin-cli/rules/prompt-message-format.js", + "packages/eslint-plugin-cli/rules/required-fields-when-loading-app.js", + "packages/eslint-plugin-cli/rules/specific-imports-in-bootstrap-code.js" + ], + "rules": { + "array-callback-return": [ + 2, + { + "allowImplicit": false, + "checkForEach": false, + "allowVoid": false + } + ], + "consistent-return": [ + 2, + { + "treatUndefinedAsUnspecified": false + } + ], + "no-empty-function": [ + 2, + { + "allow": [] + } + ], + "no-redeclare": [ + 2, + { + "builtinGlobals": true + } + ], + "no-unused-expressions": [ + 2, + { + "allowShortCircuit": false, + "allowTernary": false, + "allowTaggedTemplates": false, + "enforceForJSX": false, + "ignoreDirectives": false + } + ], + "prefer-promise-reject-errors": [ + 2, + { + "allowEmptyReject": true + } + ], + "require-await": [2], + "getter-return": [ + 2, + { + "allowImplicit": true + } + ], + "no-dupe-args": [2], + "no-dupe-keys": [2], + "no-unreachable": [2], + "valid-typeof": [ + 2, + { + "requireStringLiterals": false + } + ], + "@shopify/no-fully-static-classes": [2], + "@shopify/prefer-early-return": [ + 2, + { + "maximumStatements": 1 + } + ], + "@shopify/strict-component-boundaries": [2], + "strict": [2, "never"], + "camelcase": [ + 2, + { + "allow": [], + "ignoreDestructuring": false, + "ignoreGlobals": false, + "ignoreImports": false, + "properties": "always" + } + ], + "no-array-constructor": [2], + "no-catch-shadow": [2], + "no-restricted-globals": [2], + "no-shadow": [ + 2, + { + "allow": [], + "builtinGlobals": false, + "hoist": "functions", + "ignoreOnInitialization": false, + "ignoreTypeValueShadow": true, + "ignoreFunctionTypeParameterNameValueShadow": true + } + ], + "no-undef": [ + 2, + { + "typeof": false + } + ], + "no-unused-vars": [2], + "no-use-before-define": [2, "nofunc"], + "no-const-assign": [2], + "no-dupe-class-members": [2], + "no-new-symbol": [2], + "no-this-before-super": [2], + "no-useless-constructor": [2], + "promise/catch-or-return": [2], + "sort-class-members/sort-class-members": [ + 2, + { + "order": [ + "[static-members]", + "[properties]", + "[conventional-private-properties]", + "constructor", + "[methods]", + "[conventional-private-methods]", + "[everything-else]" + ], + "groups": { + "static-members": [ + { + "static": true + } + ] + }, + "accessorPairPositioning": "getThenSet" + } + ], + "import-x/no-unresolved": [2], + "import-x/named": [2], + "import-x/no-cycle": [2], + "import-x/export": [2], + "import-x/no-extraneous-dependencies": [2], + "import-x/extensions": [ + 2, + { + "js": "never", + "json": "always", + "svg": "always", + "png": "always", + "jpg": "always", + "ico": "always", + "graphql": "always", + "css": "always", + "sass": "always", + "scss": "always", + "less": "always", + "styl": "always" + } + ], + "import-x/order": [ + 2, + { + "groups": ["builtin", "external", "internal", "parent", "sibling"], + "newlines-between": "always", + "distinctGroup": true, + "sortTypesGroup": false, + "named": false, + "warnOnUnassignedImports": false + } + ], + "n/callback-return": [2, ["callback", "cb", "next"]], + "n/no-deprecated-api": [2], + "n/no-unsupported-features/node-builtins": [2] + }, + "removed": [ + "no-await-in-loop", + "no-console", + "@shopify/typescript-prefer-pascal-case-enums", + "@shopify/typescript-prefer-singular-enums", + "no-restricted-syntax", + "@typescript-eslint/no-array-constructor", + "@typescript-eslint/no-explicit-any", + "@typescript-eslint/no-inferrable-types", + "@typescript-eslint/member-ordering", + "@typescript-eslint/no-unused-vars", + "@typescript-eslint/adjacent-overload-signatures", + "@typescript-eslint/array-type", + "@typescript-eslint/no-wrapper-object-types", + "@typescript-eslint/naming-convention", + "@typescript-eslint/no-extraneous-class", + "@typescript-eslint/no-misused-new", + "@typescript-eslint/no-this-alias", + "@typescript-eslint/ban-ts-comment", + "@typescript-eslint/consistent-type-assertions", + "@typescript-eslint/consistent-type-definitions", + "@typescript-eslint/no-floating-promises", + "@typescript-eslint/prefer-for-of", + "@typescript-eslint/triple-slash-reference", + "@typescript-eslint/unified-signatures", + "@typescript-eslint/no-misused-promises", + "@typescript-eslint/no-unnecessary-type-assertion", + "@typescript-eslint/prefer-readonly", + "@typescript-eslint/no-unnecessary-type-constraint", + "@typescript-eslint/no-unused-expressions", + "no-catch-all/no-catch-all", + "@typescript-eslint/switch-exhaustiveness-check", + "unused-imports/no-unused-imports", + "no-restricted-imports", + "vitest/consistent-test-it", + "vitest/max-nested-describe", + "vitest/no-disabled-tests", + "vitest/prefer-expect-resolves", + "@shopify/cli/command-flags-with-env", + "@shopify/cli/command-conventional-flag-env", + "@shopify/cli/command-reserved-flags", + "@shopify/cli/command-json-output", + "@shopify/cli/no-error-factory-functions", + "@shopify/cli/no-process-cwd", + "@shopify/cli/no-trailing-js-in-cli-kit-imports", + "@shopify/cli/no-vi-manual-mock-clear", + "@shopify/cli/no-vi-mock-in-callbacks", + "@shopify/cli/prompt-message-format", + "@shopify/cli/banner-headline-format", + "@shopify/cli/required-fields-when-loading-app", + "@shopify/cli/no-inline-graphql", + "tsdoc/syntax", + "@typescript-eslint/prefer-nullish-coalescing", + "@typescript-eslint/prefer-promise-reject-errors", + "@typescript-eslint/only-throw-error", + "@nx/enforce-module-boundaries" + ] + }, + { + "files": [ + "packages/theme/src/cli/commands/theme/check.test.ts", + "packages/theme/src/cli/commands/theme/info.test.ts", + "packages/theme/src/cli/commands/theme/non-interactive-flags.test.ts", + "packages/theme/src/cli/commands/theme/preview.test.ts", + "packages/theme/src/cli/flags.test.ts", + "packages/theme/src/cli/services/check.test.ts", + "packages/theme/src/cli/services/console.test.ts", + "packages/theme/src/cli/services/delete.test.ts", + "packages/theme/src/cli/services/dev-override.test.ts", + "packages/theme/src/cli/services/dev.test.ts", + "packages/theme/src/cli/services/duplicate.test.ts", + "packages/theme/src/cli/services/info.test.ts", + "packages/theme/src/cli/services/init.test.ts", + "packages/theme/src/cli/services/list.test.ts", + "packages/theme/src/cli/services/local-storage.test.ts", + "packages/theme/src/cli/services/metafields-pull.test.ts", + "packages/theme/src/cli/services/open.test.ts", + "packages/theme/src/cli/services/package.test.ts", + "packages/theme/src/cli/services/profile.test.ts", + "packages/theme/src/cli/services/publish.test.ts", + "packages/theme/src/cli/services/pull.test.ts", + "packages/theme/src/cli/services/push.test.ts", + "packages/theme/src/cli/services/rename.test.ts", + "packages/theme/src/cli/utilities/asset-checksum.test.ts", + "packages/theme/src/cli/utilities/asset-ignore.test.ts", + "packages/theme/src/cli/utilities/cli-config.test.ts", + "packages/theme/src/cli/utilities/development-theme-manager.test.ts", + "packages/theme/src/cli/utilities/errors.test.ts", + "packages/theme/src/cli/utilities/log-request-line.test.ts", + "packages/theme/src/cli/utilities/notifier.test.ts", + "packages/theme/src/cli/utilities/repl/evaluator.test.ts", + "packages/theme/src/cli/utilities/repl/presenter.test.ts", + "packages/theme/src/cli/utilities/repl/repl-theme-manager.test.ts", + "packages/theme/src/cli/utilities/repl/repl.test.ts", + "packages/theme/src/cli/utilities/theme-command.test.ts", + "packages/theme/src/cli/utilities/theme-downloader.test.ts", + "packages/theme/src/cli/utilities/theme-environment/cookies.test.ts", + "packages/theme/src/cli/utilities/theme-environment/crawler-signature.test.ts", + "packages/theme/src/cli/utilities/theme-environment/dev-server-session.test.ts", + "packages/theme/src/cli/utilities/theme-environment/host-validation.test.ts", + "packages/theme/src/cli/utilities/theme-environment/hot-reload/error-page.test.ts", + "packages/theme/src/cli/utilities/theme-environment/hot-reload/server.test.ts", + "packages/theme/src/cli/utilities/theme-environment/html.test.ts", + "packages/theme/src/cli/utilities/theme-environment/liquid-tag-content.test.ts", + "packages/theme/src/cli/utilities/theme-environment/local-assets.test.ts", + "packages/theme/src/cli/utilities/theme-environment/proxy.test.ts", + "packages/theme/src/cli/utilities/theme-environment/remote-theme-watcher.test.ts", + "packages/theme/src/cli/utilities/theme-environment/standard-events.test.ts", + "packages/theme/src/cli/utilities/theme-environment/storefront-password-prompt.test.ts", + "packages/theme/src/cli/utilities/theme-environment/storefront-renderer.test.ts", + "packages/theme/src/cli/utilities/theme-environment/storefront-session.test.ts", + "packages/theme/src/cli/utilities/theme-environment/storefront-utils.test.ts", + "packages/theme/src/cli/utilities/theme-environment/theme-environment.test.ts", + "packages/theme/src/cli/utilities/theme-environment/theme-polling.test.ts", + "packages/theme/src/cli/utilities/theme-environment/theme-reconciliation.test.ts", + "packages/theme/src/cli/utilities/theme-ext-environment/theme-ext-fs.test.ts", + "packages/theme/src/cli/utilities/theme-ext-environment/theme-ext-server.test.ts", + "packages/theme/src/cli/utilities/theme-fs.test.ts", + "packages/theme/src/cli/utilities/theme-listing.test.ts", + "packages/theme/src/cli/utilities/theme-previews/preview.test.ts", + "packages/theme/src/cli/utilities/theme-selector/fetch.test.ts", + "packages/theme/src/cli/utilities/theme-selector/filter.test.ts", + "packages/theme/src/cli/utilities/theme-selector.test.ts", + "packages/theme/src/cli/utilities/theme-store.test.ts", + "packages/theme/src/cli/utilities/theme-ui.test.ts", + "packages/theme/src/cli/utilities/theme-uploader.test.ts" + ], + "rules": { + "@typescript-eslint/no-unnecessary-template-expression": [2], + "@typescript-eslint/prefer-reduce-type-parameter": [2], + "@nx/enforce-module-boundaries": [ + 2, + { + "checkDynamicDependenciesExceptions": ["@shopify/cli-kit/**"] + } + ] + }, + "removed": [ + "no-restricted-syntax", + "no-restricted-globals", + "@typescript-eslint/no-explicit-any", + "@typescript-eslint/no-unused-vars", + "@shopify/cli/required-fields-when-loading-app" + ] + }, + { + "files": [ + "packages/theme/src/cli/commands/theme/check.ts", + "packages/theme/src/cli/commands/theme/console.ts", + "packages/theme/src/cli/commands/theme/delete.ts", + "packages/theme/src/cli/commands/theme/dev.ts", + "packages/theme/src/cli/commands/theme/duplicate.ts", + "packages/theme/src/cli/commands/theme/info.ts", + "packages/theme/src/cli/commands/theme/init.ts", + "packages/theme/src/cli/commands/theme/language-server.ts", + "packages/theme/src/cli/commands/theme/list.ts", + "packages/theme/src/cli/commands/theme/metafields/pull.ts", + "packages/theme/src/cli/commands/theme/open.ts", + "packages/theme/src/cli/commands/theme/package.ts", + "packages/theme/src/cli/commands/theme/preview.ts", + "packages/theme/src/cli/commands/theme/profile.ts", + "packages/theme/src/cli/commands/theme/publish.ts", + "packages/theme/src/cli/commands/theme/pull.ts", + "packages/theme/src/cli/commands/theme/push.ts", + "packages/theme/src/cli/commands/theme/rename.ts", + "packages/theme/src/cli/commands/theme/share.ts", + "packages/theme/src/cli/constants.ts", + "packages/theme/src/cli/flags.ts", + "packages/theme/src/cli/services/check.ts", + "packages/theme/src/cli/services/console.ts", + "packages/theme/src/cli/services/delete.ts", + "packages/theme/src/cli/services/dev-override.ts", + "packages/theme/src/cli/services/dev.ts", + "packages/theme/src/cli/services/duplicate.ts", + "packages/theme/src/cli/services/info.ts", + "packages/theme/src/cli/services/init.ts", + "packages/theme/src/cli/services/list.ts", + "packages/theme/src/cli/services/local-storage.ts", + "packages/theme/src/cli/services/metafields-pull.ts", + "packages/theme/src/cli/services/open.ts", + "packages/theme/src/cli/services/package.ts", + "packages/theme/src/cli/services/profile.ts", + "packages/theme/src/cli/services/publish.ts", + "packages/theme/src/cli/services/pull.ts", + "packages/theme/src/cli/services/rename.ts", + "packages/theme/src/cli/utilities/asset-checksum.ts", + "packages/theme/src/cli/utilities/asset-ignore.ts", + "packages/theme/src/cli/utilities/asset-path.ts", + "packages/theme/src/cli/utilities/batching.ts", + "packages/theme/src/cli/utilities/cli-config.ts", + "packages/theme/src/cli/utilities/development-theme-manager.ts", + "packages/theme/src/cli/utilities/errors.ts", + "packages/theme/src/cli/utilities/log-request-line.ts", + "packages/theme/src/cli/utilities/notifier.ts", + "packages/theme/src/cli/utilities/repl/evaluator.ts", + "packages/theme/src/cli/utilities/repl/presenter.ts", + "packages/theme/src/cli/utilities/repl/repl-theme-manager.ts", + "packages/theme/src/cli/utilities/repl/repl.ts", + "packages/theme/src/cli/utilities/theme-command.ts", + "packages/theme/src/cli/utilities/theme-downloader.ts", + "packages/theme/src/cli/utilities/theme-environment/cookies.ts", + "packages/theme/src/cli/utilities/theme-environment/crawler-signature-types.ts", + "packages/theme/src/cli/utilities/theme-environment/crawler-signature.ts", + "packages/theme/src/cli/utilities/theme-environment/dev-server-session.ts", + "packages/theme/src/cli/utilities/theme-environment/host-validation.ts", + "packages/theme/src/cli/utilities/theme-environment/hot-reload/error-page.ts", + "packages/theme/src/cli/utilities/theme-environment/hot-reload/server.ts", + "packages/theme/src/cli/utilities/theme-environment/html.ts", + "packages/theme/src/cli/utilities/theme-environment/liquid-tag-content.ts", + "packages/theme/src/cli/utilities/theme-environment/local-assets.ts", + "packages/theme/src/cli/utilities/theme-environment/proxy.ts", + "packages/theme/src/cli/utilities/theme-environment/remote-theme-watcher.ts", + "packages/theme/src/cli/utilities/theme-environment/server-utils.ts", + "packages/theme/src/cli/utilities/theme-environment/standard-events.ts", + "packages/theme/src/cli/utilities/theme-environment/storefront-password-prompt.ts", + "packages/theme/src/cli/utilities/theme-environment/storefront-renderer.ts", + "packages/theme/src/cli/utilities/theme-environment/storefront-session.ts", + "packages/theme/src/cli/utilities/theme-environment/storefront-utils.ts", + "packages/theme/src/cli/utilities/theme-environment/theme-environment.ts", + "packages/theme/src/cli/utilities/theme-environment/theme-polling.ts", + "packages/theme/src/cli/utilities/theme-environment/theme-reconciliation.ts", + "packages/theme/src/cli/utilities/theme-environment/types.ts", + "packages/theme/src/cli/utilities/theme-ext-environment/theme-ext-fs.ts", + "packages/theme/src/cli/utilities/theme-ext-environment/theme-ext-server.ts", + "packages/theme/src/cli/utilities/theme-fs/theme-fs-mock-factory.ts", + "packages/theme/src/cli/utilities/theme-fs-empty.ts", + "packages/theme/src/cli/utilities/theme-fs.ts", + "packages/theme/src/cli/utilities/theme-listing.ts", + "packages/theme/src/cli/utilities/theme-previews/preview.ts", + "packages/theme/src/cli/utilities/theme-selector/fetch.ts", + "packages/theme/src/cli/utilities/theme-selector/filter.ts", + "packages/theme/src/cli/utilities/theme-selector.ts", + "packages/theme/src/cli/utilities/theme-store.ts", + "packages/theme/src/cli/utilities/theme-ui.ts", + "packages/theme/src/cli/utilities/theme-uploader.ts", + "packages/theme/src/index.ts" + ], + "rules": { + "@nx/enforce-module-boundaries": [ + 2, + { + "checkDynamicDependenciesExceptions": ["@shopify/cli-kit/**"] + } + ] + }, + "removed": [] + }, + { + "files": ["packages/theme/src/cli/services/push.ts"], + "rules": { + "@nx/enforce-module-boundaries": [ + 2, + { + "checkDynamicDependenciesExceptions": ["@shopify/cli-kit/**"] + } + ] + }, + "removed": ["tsdoc/syntax"] + }, + { + "files": ["packages/ui-extensions-server-kit/src/ExtensionServerClient/ExtensionServerClient.ts"], + "rules": {}, + "removed": ["no-console"] + } + ] +} diff --git a/configurations/oxlint-rule-mapping.json b/configurations/oxlint-rule-mapping.json new file mode 100644 index 00000000000..59a7578dddf --- /dev/null +++ b/configurations/oxlint-rule-mapping.json @@ -0,0 +1,1493 @@ +{ + "@nx/enforce-module-boundaries": { + "replacement": "@shopify/cli/module-boundaries", + "status": "partial", + "limitation": "Relative cross-project imports and re-exports are checked. Nx graph cycles, tag constraints, lazy-loading checks and buildability checks are not retained." + }, + "@shopify/cli/banner-headline-format": { + "replacement": "@shopify/cli/banner-headline-format", + "status": "retained" + }, + "@shopify/cli/command-conventional-flag-env": { + "replacement": "@shopify/cli/command-conventional-flag-env", + "status": "retained" + }, + "@shopify/cli/command-flags-with-env": { + "replacement": "@shopify/cli/command-flags-with-env", + "status": "retained" + }, + "@shopify/cli/command-json-output": { + "replacement": "@shopify/cli/command-json-output", + "status": "retained" + }, + "@shopify/cli/command-reserved-flags": { + "replacement": "@shopify/cli/command-reserved-flags", + "status": "retained" + }, + "@shopify/cli/no-error-factory-functions": { + "replacement": "@shopify/cli/no-error-factory-functions", + "status": "retained" + }, + "@shopify/cli/no-inline-graphql": { + "replacement": "@shopify/cli/no-inline-graphql", + "status": "retained" + }, + "@shopify/cli/no-process-cwd": { + "replacement": "@shopify/cli/no-process-cwd", + "status": "retained" + }, + "@shopify/cli/no-trailing-js-in-cli-kit-imports": { + "replacement": "@shopify/cli/no-trailing-js-in-cli-kit-imports", + "status": "retained" + }, + "@shopify/cli/no-vi-manual-mock-clear": { + "replacement": "@shopify/cli/no-vi-manual-mock-clear", + "status": "retained" + }, + "@shopify/cli/no-vi-mock-in-callbacks": { + "replacement": "@shopify/cli/no-vi-mock-in-callbacks", + "status": "retained" + }, + "@shopify/cli/prompt-message-format": { + "replacement": "@shopify/cli/prompt-message-format", + "status": "retained" + }, + "@shopify/cli/required-fields-when-loading-app": { + "replacement": "@shopify/cli/required-fields-when-loading-app", + "status": "retained" + }, + "@shopify/images-no-direct-imports": { + "replacement": null, + "status": "unsupported", + "limitation": "The specialized Shopify rule is not ported." + }, + "@shopify/no-context-menu": { + "replacement": null, + "status": "unsupported", + "limitation": "The specialized Shopify rule is not ported." + }, + "@shopify/no-debugger": { + "replacement": "no-debugger", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "@shopify/no-fully-static-classes": { + "replacement": "@shopify/cli/no-fully-static-classes", + "status": "partial", + "limitation": "Independent syntax check covers repository conventions, not the complete upstream rule API." + }, + "@shopify/no-useless-computed-properties": { + "replacement": "no-useless-computed-key", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "@shopify/prefer-early-return": { + "replacement": null, + "status": "unsupported", + "limitation": "The specialized Shopify rule is not ported." + }, + "@shopify/prefer-module-scope-constants": { + "replacement": null, + "status": "unsupported", + "limitation": "The specialized Shopify rule is not ported." + }, + "@shopify/prefer-twine": { + "replacement": null, + "status": "unsupported", + "limitation": "The specialized Shopify rule is not ported." + }, + "@shopify/strict-component-boundaries": { + "replacement": "@shopify/cli/module-boundaries", + "status": "partial", + "limitation": "Relative imports between projects are rejected. Resolver-based component entrypoint checks are not retained." + }, + "@shopify/typescript-prefer-build-client-schema": { + "replacement": "@shopify/cli/prefer-build-client-schema", + "status": "partial", + "limitation": "Independent syntax check covers repository conventions, not the complete upstream rule API." + }, + "@shopify/typescript-prefer-pascal-case-enums": { + "replacement": "@shopify/cli/prefer-pascal-case-enums", + "status": "partial", + "limitation": "Independent syntax check covers repository conventions, not the complete upstream rule API." + }, + "@shopify/typescript-prefer-singular-enums": { + "replacement": null, + "status": "unsupported", + "limitation": "The specialized Shopify rule is not ported." + }, + "@typescript-eslint/adjacent-overload-signatures": { + "replacement": "typescript/adjacent-overload-signatures", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "@typescript-eslint/array-type": { + "replacement": "typescript/array-type", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "@typescript-eslint/ban-ts-comment": { + "replacement": "typescript/ban-ts-comment", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "@typescript-eslint/consistent-type-assertions": { + "replacement": "typescript/consistent-type-assertions", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "@typescript-eslint/consistent-type-definitions": { + "replacement": "typescript/consistent-type-definitions", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "@typescript-eslint/member-ordering": { + "replacement": "@shopify/cli/member-ordering", + "status": "partial", + "limitation": "Independent syntax check covers repository conventions, not the complete upstream rule API." + }, + "@typescript-eslint/naming-convention": { + "replacement": "@shopify/cli/naming-convention", + "status": "partial", + "limitation": "Configured declaration, parameter, property and type names are checked. Type filters, all upstream selectors and modifier precedence are not implemented." + }, + "@typescript-eslint/no-array-constructor": { + "replacement": "no-array-constructor", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "@typescript-eslint/no-explicit-any": { + "replacement": "typescript/no-explicit-any", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "@typescript-eslint/no-extraneous-class": { + "replacement": "typescript/no-extraneous-class", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "@typescript-eslint/no-floating-promises": { + "replacement": "typescript/no-floating-promises", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "@typescript-eslint/no-inferrable-types": { + "replacement": "typescript/no-inferrable-types", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "@typescript-eslint/no-misused-new": { + "replacement": "typescript/no-misused-new", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "@typescript-eslint/no-misused-promises": { + "replacement": "typescript/no-misused-promises", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "@typescript-eslint/no-this-alias": { + "replacement": "typescript/no-this-alias", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "@typescript-eslint/no-unnecessary-template-expression": { + "replacement": "typescript/no-unnecessary-template-expression", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "@typescript-eslint/no-unnecessary-type-assertion": { + "replacement": "typescript/no-unnecessary-type-assertion", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "@typescript-eslint/no-unnecessary-type-constraint": { + "replacement": "typescript/no-unnecessary-type-constraint", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "@typescript-eslint/no-unused-expressions": { + "replacement": "no-unused-expressions", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "@typescript-eslint/no-unused-vars": { + "replacement": "no-unused-vars", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "@typescript-eslint/no-wrapper-object-types": { + "replacement": "typescript/no-wrapper-object-types", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "@typescript-eslint/only-throw-error": { + "replacement": "typescript/only-throw-error", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "@typescript-eslint/prefer-for-of": { + "replacement": "typescript/prefer-for-of", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "@typescript-eslint/prefer-nullish-coalescing": { + "replacement": "typescript/prefer-nullish-coalescing", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "@typescript-eslint/prefer-promise-reject-errors": { + "replacement": "typescript/prefer-promise-reject-errors", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "@typescript-eslint/prefer-readonly": { + "replacement": "typescript/prefer-readonly", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "@typescript-eslint/prefer-reduce-type-parameter": { + "replacement": "typescript/prefer-reduce-type-parameter", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "@typescript-eslint/switch-exhaustiveness-check": { + "replacement": "typescript/switch-exhaustiveness-check", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "@typescript-eslint/triple-slash-reference": { + "replacement": "typescript/triple-slash-reference", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "@typescript-eslint/unified-signatures": { + "replacement": "typescript/unified-signatures", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "array-callback-return": { + "replacement": "array-callback-return", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "block-scoped-var": { + "replacement": "block-scoped-var", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "camelcase": { + "replacement": null, + "status": "unsupported", + "limitation": "No independent implementation is enabled." + }, + "consistent-return": { + "replacement": null, + "status": "unsupported", + "limitation": "No independent implementation is enabled." + }, + "consistent-this": { + "replacement": "@shopify/cli/consistent-this", + "status": "partial", + "limitation": "Independent syntax check covers repository conventions, not the complete upstream rule API." + }, + "constructor-super": { + "replacement": "constructor-super", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "dot-notation": { + "replacement": "@shopify/cli/dot-notation", + "status": "partial", + "limitation": "Independent syntax check covers repository conventions, not the complete upstream rule API." + }, + "eqeqeq": { + "replacement": "eqeqeq", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "eslint-comments/disable-enable-pair": { + "replacement": null, + "status": "unsupported", + "limitation": "ESLint directive conventions are removed; Oxlint still checks unused disable directives." + }, + "eslint-comments/no-aggregating-enable": { + "replacement": null, + "status": "unsupported", + "limitation": "ESLint directive conventions are removed; Oxlint still checks unused disable directives." + }, + "eslint-comments/no-duplicate-disable": { + "replacement": null, + "status": "unsupported", + "limitation": "ESLint directive conventions are removed; Oxlint still checks unused disable directives." + }, + "eslint-comments/no-unlimited-disable": { + "replacement": null, + "status": "unsupported", + "limitation": "ESLint directive conventions are removed; Oxlint still checks unused disable directives." + }, + "eslint-comments/no-unused-disable": { + "replacement": null, + "status": "unsupported", + "limitation": "ESLint directive conventions are removed; Oxlint still checks unused disable directives." + }, + "eslint-comments/no-unused-enable": { + "replacement": null, + "status": "unsupported", + "limitation": "ESLint directive conventions are removed; Oxlint still checks unused disable directives." + }, + "for-direction": { + "replacement": "for-direction", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "func-name-matching": { + "replacement": "func-name-matching", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "func-style": { + "replacement": "func-style", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "getter-return": { + "replacement": "getter-return", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "grouped-accessor-pairs": { + "replacement": "grouped-accessor-pairs", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "guard-for-in": { + "replacement": "guard-for-in", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "id-length": { + "replacement": "@shopify/cli/id-length", + "status": "partial", + "limitation": "Independent syntax check covers repository conventions, not the complete upstream rule API." + }, + "import-x/default": { + "replacement": "import/default", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "import-x/export": { + "replacement": "import/export", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "import-x/extensions": { + "replacement": "import/extensions", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "import-x/first": { + "replacement": "import/first", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "import-x/named": { + "replacement": "import/named", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "import-x/namespace": { + "replacement": "import/namespace", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "import-x/newline-after-import": { + "replacement": "import/newline-after-import", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "import-x/no-absolute-path": { + "replacement": "import/no-absolute-path", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "import-x/no-anonymous-default-export": { + "replacement": "import/no-anonymous-default-export", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "import-x/no-cycle": { + "replacement": "import/no-cycle", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "import-x/no-deprecated": { + "replacement": null, + "status": "unsupported", + "limitation": "The ESLint import resolver and project-wide export analysis are removed." + }, + "import-x/no-duplicates": { + "replacement": "import/no-duplicates", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "import-x/no-extraneous-dependencies": { + "replacement": null, + "status": "unsupported", + "limitation": "The ESLint import resolver and project-wide export analysis are removed." + }, + "import-x/no-mutable-exports": { + "replacement": "import/no-mutable-exports", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "import-x/no-named-as-default": { + "replacement": "import/no-named-as-default", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "import-x/no-named-as-default-member": { + "replacement": "import/no-named-as-default-member", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "import-x/no-named-default": { + "replacement": "import/no-named-default", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "import-x/no-self-import": { + "replacement": "import/no-self-import", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "import-x/no-unresolved": { + "replacement": null, + "status": "unsupported", + "limitation": "The ESLint import resolver and project-wide export analysis are removed." + }, + "import-x/no-unused-modules": { + "replacement": null, + "status": "unsupported", + "limitation": "The ESLint import resolver and project-wide export analysis are removed." + }, + "import-x/no-useless-path-segments": { + "replacement": null, + "status": "unsupported", + "limitation": "The ESLint import resolver and project-wide export analysis are removed." + }, + "import-x/no-webpack-loader-syntax": { + "replacement": "import/no-webpack-loader-syntax", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "import-x/order": { + "replacement": "@shopify/cli/import-order", + "status": "partial", + "limitation": "Configured import groups and blank lines are checked. Resolver-based internal groups, path groups and ordering of imports across intervening statements are not equivalent." + }, + "jsdoc/check-access": { + "replacement": "jsdoc/check-access", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "jsdoc/check-alignment": { + "replacement": null, + "status": "unsupported", + "limitation": "Advanced JSDoc validation is not implemented by the enabled native and independent checks." + }, + "jsdoc/check-indentation": { + "replacement": null, + "status": "unsupported", + "limitation": "Advanced JSDoc validation is not implemented by the enabled native and independent checks." + }, + "jsdoc/check-line-alignment": { + "replacement": null, + "status": "unsupported", + "limitation": "Advanced JSDoc validation is not implemented by the enabled native and independent checks." + }, + "jsdoc/check-param-names": { + "replacement": null, + "status": "unsupported", + "limitation": "Advanced JSDoc validation is not implemented by the enabled native and independent checks." + }, + "jsdoc/check-property-names": { + "replacement": "jsdoc/check-property-names", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "jsdoc/check-syntax": { + "replacement": null, + "status": "unsupported", + "limitation": "Advanced JSDoc validation is not implemented by the enabled native and independent checks." + }, + "jsdoc/check-tag-names": { + "replacement": "jsdoc/check-tag-names", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "jsdoc/check-types": { + "replacement": null, + "status": "unsupported", + "limitation": "Advanced JSDoc validation is not implemented by the enabled native and independent checks." + }, + "jsdoc/check-values": { + "replacement": null, + "status": "unsupported", + "limitation": "Advanced JSDoc validation is not implemented by the enabled native and independent checks." + }, + "jsdoc/empty-tags": { + "replacement": "jsdoc/empty-tags", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "jsdoc/implements-on-classes": { + "replacement": "jsdoc/implements-on-classes", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "jsdoc/match-description": { + "replacement": null, + "status": "unsupported", + "limitation": "Advanced JSDoc validation is not implemented by the enabled native and independent checks." + }, + "jsdoc/multiline-blocks": { + "replacement": null, + "status": "unsupported", + "limitation": "Advanced JSDoc validation is not implemented by the enabled native and independent checks." + }, + "jsdoc/no-bad-blocks": { + "replacement": null, + "status": "unsupported", + "limitation": "Advanced JSDoc validation is not implemented by the enabled native and independent checks." + }, + "jsdoc/no-defaults": { + "replacement": "jsdoc/no-defaults", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "jsdoc/no-multi-asterisks": { + "replacement": null, + "status": "unsupported", + "limitation": "Advanced JSDoc validation is not implemented by the enabled native and independent checks." + }, + "jsdoc/no-types": { + "replacement": "@shopify/cli/jsdoc-no-types", + "status": "partial", + "limitation": "Independent syntax check covers repository conventions, not the complete upstream rule API." + }, + "jsdoc/no-undefined-types": { + "replacement": null, + "status": "unsupported", + "limitation": "Advanced JSDoc validation is not implemented by the enabled native and independent checks." + }, + "jsdoc/require-asterisk-prefix": { + "replacement": null, + "status": "unsupported", + "limitation": "Advanced JSDoc validation is not implemented by the enabled native and independent checks." + }, + "jsdoc/require-description": { + "replacement": "@shopify/cli/jsdoc-require-description", + "status": "partial", + "limitation": "Independent syntax check covers repository conventions, not the complete upstream rule API." + }, + "jsdoc/require-description-complete-sentence": { + "replacement": "@shopify/cli/jsdoc-require-description-complete-sentence", + "status": "partial", + "limitation": "Independent syntax check covers repository conventions, not the complete upstream rule API." + }, + "jsdoc/require-hyphen-before-param-description": { + "replacement": "@shopify/cli/jsdoc-require-hyphen-before-param-description", + "status": "partial", + "limitation": "Independent syntax check covers repository conventions, not the complete upstream rule API." + }, + "jsdoc/require-jsdoc": { + "replacement": "@shopify/cli/jsdoc-require-jsdoc", + "status": "partial", + "limitation": "Independent syntax check covers repository conventions, not the complete upstream rule API." + }, + "jsdoc/require-param": { + "replacement": "@shopify/cli/jsdoc-require-param", + "status": "partial", + "limitation": "Independent syntax check covers repository conventions, not the complete upstream rule API." + }, + "jsdoc/require-param-description": { + "replacement": "jsdoc/require-param-description", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "jsdoc/require-param-name": { + "replacement": "jsdoc/require-param-name", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "jsdoc/require-property": { + "replacement": "jsdoc/require-property", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "jsdoc/require-property-description": { + "replacement": "jsdoc/require-property-description", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "jsdoc/require-property-name": { + "replacement": "jsdoc/require-property-name", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "jsdoc/require-property-type": { + "replacement": "jsdoc/require-property-type", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "jsdoc/require-returns": { + "replacement": "@shopify/cli/jsdoc-require-returns", + "status": "partial", + "limitation": "Independent syntax check covers repository conventions, not the complete upstream rule API." + }, + "jsdoc/require-returns-check": { + "replacement": null, + "status": "unsupported", + "limitation": "Advanced JSDoc validation is not implemented by the enabled native and independent checks." + }, + "jsdoc/require-returns-description": { + "replacement": "jsdoc/require-returns-description", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "jsdoc/require-throws": { + "replacement": null, + "status": "unsupported", + "limitation": "Advanced JSDoc validation is not implemented by the enabled native and independent checks." + }, + "jsdoc/require-yields": { + "replacement": "jsdoc/require-yields", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "jsdoc/require-yields-check": { + "replacement": null, + "status": "unsupported", + "limitation": "Advanced JSDoc validation is not implemented by the enabled native and independent checks." + }, + "jsdoc/tag-lines": { + "replacement": null, + "status": "unsupported", + "limitation": "Advanced JSDoc validation is not implemented by the enabled native and independent checks." + }, + "jsdoc/valid-types": { + "replacement": null, + "status": "unsupported", + "limitation": "Advanced JSDoc validation is not implemented by the enabled native and independent checks." + }, + "line-comment-position": { + "replacement": null, + "status": "unsupported", + "limitation": "No independent implementation is enabled." + }, + "lines-between-class-members": { + "replacement": null, + "status": "unsupported", + "limitation": "No independent implementation is enabled." + }, + "max-params": { + "replacement": "max-params", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "n/callback-return": { + "replacement": "node/callback-return", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "n/exports-style": { + "replacement": "@shopify/cli/exports-style", + "status": "partial", + "limitation": "Independent syntax check covers repository conventions, not the complete upstream rule API." + }, + "n/handle-callback-err": { + "replacement": "node/handle-callback-err", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "n/no-callback-literal": { + "replacement": null, + "status": "unsupported", + "limitation": "Node API metadata and callback conventions are not ported." + }, + "n/no-deprecated-api": { + "replacement": null, + "status": "unsupported", + "limitation": "Node API metadata and callback conventions are not ported." + }, + "n/no-exports-assign": { + "replacement": "node/no-exports-assign", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "n/no-new-require": { + "replacement": "node/no-new-require", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "n/no-path-concat": { + "replacement": "node/no-path-concat", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "n/no-unpublished-bin": { + "replacement": null, + "status": "unsupported", + "limitation": "Node API metadata and callback conventions are not ported." + }, + "n/no-unsupported-features/node-builtins": { + "replacement": null, + "status": "unsupported", + "limitation": "Node API metadata and callback conventions are not ported." + }, + "n/prefer-global/buffer": { + "replacement": "@shopify/cli/prefer-global-buffer", + "status": "partial", + "limitation": "Independent syntax check covers repository conventions, not the complete upstream rule API." + }, + "n/prefer-global/console": { + "replacement": "@shopify/cli/prefer-global-console", + "status": "partial", + "limitation": "Independent syntax check covers repository conventions, not the complete upstream rule API." + }, + "n/prefer-global/process": { + "replacement": "@shopify/cli/prefer-global-process", + "status": "partial", + "limitation": "Independent syntax check covers repository conventions, not the complete upstream rule API." + }, + "n/prefer-global/text-decoder": { + "replacement": "@shopify/cli/prefer-global-text-decoder", + "status": "partial", + "limitation": "Independent syntax check covers repository conventions, not the complete upstream rule API." + }, + "n/prefer-global/text-encoder": { + "replacement": "@shopify/cli/prefer-global-text-encoder", + "status": "partial", + "limitation": "Independent syntax check covers repository conventions, not the complete upstream rule API." + }, + "n/prefer-global/url": { + "replacement": "@shopify/cli/prefer-global-url", + "status": "partial", + "limitation": "Independent syntax check covers repository conventions, not the complete upstream rule API." + }, + "n/prefer-global/url-search-params": { + "replacement": "@shopify/cli/prefer-global-url-search-params", + "status": "partial", + "limitation": "Independent syntax check covers repository conventions, not the complete upstream rule API." + }, + "n/prefer-promises/dns": { + "replacement": null, + "status": "unsupported", + "limitation": "Node API metadata and callback conventions are not ported." + }, + "n/prefer-promises/fs": { + "replacement": null, + "status": "unsupported", + "limitation": "Node API metadata and callback conventions are not ported." + }, + "n/shebang": { + "replacement": null, + "status": "unsupported", + "limitation": "Node API metadata and callback conventions are not ported." + }, + "new-cap": { + "replacement": "new-cap", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "no-alert": { + "replacement": "no-alert", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "no-array-constructor": { + "replacement": "no-array-constructor", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "no-async-promise-executor": { + "replacement": "no-async-promise-executor", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "no-await-in-loop": { + "replacement": "no-await-in-loop", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "no-caller": { + "replacement": "no-caller", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "no-case-declarations": { + "replacement": "no-case-declarations", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "no-catch-all/no-catch-all": { + "replacement": "@shopify/cli/no-catch-all", + "status": "retained" + }, + "no-catch-shadow": { + "replacement": null, + "status": "unsupported", + "limitation": "No independent implementation is enabled." + }, + "no-class-assign": { + "replacement": "no-class-assign", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "no-compare-neg-zero": { + "replacement": "no-compare-neg-zero", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "no-cond-assign": { + "replacement": "no-cond-assign", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "no-console": { + "replacement": "no-console", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "no-const-assign": { + "replacement": "no-const-assign", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "no-constant-condition": { + "replacement": "no-constant-condition", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "no-constructor-return": { + "replacement": "no-constructor-return", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "no-control-regex": { + "replacement": "no-control-regex", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "no-delete-var": { + "replacement": "no-delete-var", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "no-div-regex": { + "replacement": "no-div-regex", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "no-dupe-args": { + "replacement": null, + "status": "unsupported", + "limitation": "No independent implementation is enabled." + }, + "no-dupe-class-members": { + "replacement": "no-dupe-class-members", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "no-dupe-else-if": { + "replacement": "no-dupe-else-if", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "no-dupe-keys": { + "replacement": "no-dupe-keys", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "no-duplicate-case": { + "replacement": "no-duplicate-case", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "no-empty": { + "replacement": "no-empty", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "no-empty-character-class": { + "replacement": "no-empty-character-class", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "no-empty-function": { + "replacement": "no-empty-function", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "no-empty-pattern": { + "replacement": "no-empty-pattern", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "no-eval": { + "replacement": "no-eval", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "no-ex-assign": { + "replacement": "no-ex-assign", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "no-extend-native": { + "replacement": "no-extend-native", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "no-extra-bind": { + "replacement": "no-extra-bind", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "no-extra-boolean-cast": { + "replacement": "no-extra-boolean-cast", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "no-extra-label": { + "replacement": "no-extra-label", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "no-fallthrough": { + "replacement": "no-fallthrough", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "no-func-assign": { + "replacement": "no-func-assign", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "no-global-assign": { + "replacement": "no-global-assign", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "no-implicit-coercion": { + "replacement": "no-implicit-coercion", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "no-implicit-globals": { + "replacement": "@shopify/cli/no-implicit-globals", + "status": "partial", + "limitation": "Independent syntax check covers repository conventions, not the complete upstream rule API." + }, + "no-implied-eval": { + "replacement": "no-implied-eval", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "no-inner-declarations": { + "replacement": "no-inner-declarations", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "no-invalid-regexp": { + "replacement": "no-invalid-regexp", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "no-irregular-whitespace": { + "replacement": "no-irregular-whitespace", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "no-iterator": { + "replacement": "no-iterator", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "no-label-var": { + "replacement": "no-label-var", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "no-labels": { + "replacement": "no-labels", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "no-lone-blocks": { + "replacement": "no-lone-blocks", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "no-lonely-if": { + "replacement": "no-lonely-if", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "no-loop-func": { + "replacement": "no-loop-func", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "no-misleading-character-class": { + "replacement": "no-misleading-character-class", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "no-multi-assign": { + "replacement": "no-multi-assign", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "no-negated-condition": { + "replacement": "no-negated-condition", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "no-nested-ternary": { + "replacement": "no-nested-ternary", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "no-new": { + "replacement": "no-new", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "no-new-func": { + "replacement": "no-new-func", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "no-new-object": { + "replacement": "@shopify/cli/no-new-object", + "status": "partial", + "limitation": "Independent syntax check covers repository conventions, not the complete upstream rule API." + }, + "no-new-symbol": { + "replacement": "no-new-native-nonconstructor", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "no-new-wrappers": { + "replacement": "no-new-wrappers", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "no-obj-calls": { + "replacement": "no-obj-calls", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "no-octal": { + "replacement": null, + "status": "unsupported", + "limitation": "No independent implementation is enabled." + }, + "no-octal-escape": { + "replacement": null, + "status": "unsupported", + "limitation": "No independent implementation is enabled." + }, + "no-param-reassign": { + "replacement": "no-param-reassign", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "no-proto": { + "replacement": "no-proto", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "no-prototype-builtins": { + "replacement": "no-prototype-builtins", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "no-redeclare": { + "replacement": "@shopify/cli/no-redeclare", + "status": "partial", + "limitation": "Independent syntax check covers repository conventions, not the complete upstream rule API." + }, + "no-regex-spaces": { + "replacement": "no-regex-spaces", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "no-restricted-globals": { + "replacement": "no-restricted-globals", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "no-restricted-imports": { + "replacement": "no-restricted-imports", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "no-restricted-syntax": { + "replacement": "@shopify/cli/restricted-syntax", + "status": "partial", + "limitation": "Independent syntax check covers repository conventions, not the complete upstream rule API." + }, + "no-return-assign": { + "replacement": "no-return-assign", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "no-return-await": { + "replacement": "@shopify/cli/no-return-await", + "status": "partial", + "limitation": "Independent syntax check covers repository conventions, not the complete upstream rule API." + }, + "no-self-assign": { + "replacement": "no-self-assign", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "no-self-compare": { + "replacement": "no-self-compare", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "no-sequences": { + "replacement": "no-sequences", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "no-setter-return": { + "replacement": "no-setter-return", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "no-shadow": { + "replacement": "no-shadow", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "no-shadow-restricted-names": { + "replacement": "no-shadow-restricted-names", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "no-sparse-arrays": { + "replacement": "no-sparse-arrays", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "no-template-curly-in-string": { + "replacement": "no-template-curly-in-string", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "no-this-before-super": { + "replacement": "no-this-before-super", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "no-throw-literal": { + "replacement": "no-throw-literal", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "no-undef": { + "replacement": "no-undef", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "no-undef-init": { + "replacement": "@shopify/cli/no-undef-init", + "status": "partial", + "limitation": "Independent syntax check covers repository conventions, not the complete upstream rule API." + }, + "no-unmodified-loop-condition": { + "replacement": "no-unmodified-loop-condition", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "no-unneeded-ternary": { + "replacement": "no-unneeded-ternary", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "no-unreachable": { + "replacement": "no-unreachable", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "no-unsafe-finally": { + "replacement": "no-unsafe-finally", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "no-unsafe-negation": { + "replacement": "no-unsafe-negation", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "no-unused-expressions": { + "replacement": "no-unused-expressions", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "no-unused-labels": { + "replacement": "no-unused-labels", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "no-unused-vars": { + "replacement": "no-unused-vars", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "no-use-before-define": { + "replacement": "no-use-before-define", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "no-useless-call": { + "replacement": "no-useless-call", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "no-useless-catch": { + "replacement": "no-useless-catch", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "no-useless-concat": { + "replacement": "no-useless-concat", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "no-useless-constructor": { + "replacement": "no-useless-constructor", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "no-useless-escape": { + "replacement": "no-useless-escape", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "no-useless-rename": { + "replacement": "no-useless-rename", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "no-useless-return": { + "replacement": "no-useless-return", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "no-var": { + "replacement": "no-var", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "no-void": { + "replacement": "no-void", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "no-warning-comments": { + "replacement": "no-warning-comments", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "no-with": { + "replacement": "no-with", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "object-shorthand": { + "replacement": "object-shorthand", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "one-var": { + "replacement": "@shopify/cli/one-var", + "status": "partial", + "limitation": "Independent syntax check covers repository conventions, not the complete upstream rule API." + }, + "operator-assignment": { + "replacement": "operator-assignment", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "padding-line-between-statements": { + "replacement": null, + "status": "unsupported", + "limitation": "No independent implementation is enabled." + }, + "prefer-const": { + "replacement": "prefer-const", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "prefer-exponentiation-operator": { + "replacement": "prefer-exponentiation-operator", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "prefer-numeric-literals": { + "replacement": "prefer-numeric-literals", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "prefer-object-spread": { + "replacement": "prefer-object-spread", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "prefer-promise-reject-errors": { + "replacement": "prefer-promise-reject-errors", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "prefer-rest-params": { + "replacement": "prefer-rest-params", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "prefer-spread": { + "replacement": "prefer-spread", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "prefer-template": { + "replacement": "prefer-template", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "promise/catch-or-return": { + "replacement": "promise/catch-or-return", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "promise/no-nesting": { + "replacement": "promise/no-nesting", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "promise/no-return-in-finally": { + "replacement": "promise/no-return-in-finally", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "promise/no-return-wrap": { + "replacement": "promise/no-return-wrap", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "promise/param-names": { + "replacement": "promise/param-names", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "promise/valid-params": { + "replacement": "promise/valid-params", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "radix": { + "replacement": "radix", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "require-atomic-updates": { + "replacement": null, + "status": "unsupported", + "limitation": "No independent implementation is enabled." + }, + "require-await": { + "replacement": "require-await", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "require-yield": { + "replacement": "require-yield", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "sort-class-members/sort-class-members": { + "replacement": null, + "status": "unsupported", + "limitation": "No independent implementation is enabled." + }, + "spaced-comment": { + "replacement": null, + "status": "unsupported", + "limitation": "No independent implementation is enabled." + }, + "strict": { + "replacement": null, + "status": "unsupported", + "limitation": "No independent implementation is enabled." + }, + "symbol-description": { + "replacement": "symbol-description", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "tsdoc/syntax": { + "replacement": "@shopify/cli/tsdoc-syntax", + "status": "partial", + "limitation": "Uses the same TSDoc parser with its default configuration. Per-directory tsdoc.json loading is not implemented; this repository has no such file." + }, + "unicode-bom": { + "replacement": "unicode-bom", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "unused-imports/no-unused-imports": { + "replacement": "@shopify/cli/unused-imports", + "status": "partial", + "limitation": "Independent binding-reference check includes tests, where ordinary unused variables remain allowed. Import-removal fixes are supplied by native no-unused-vars outside tests." + }, + "use-isnan": { + "replacement": "use-isnan", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "valid-typeof": { + "replacement": "valid-typeof", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "vitest/consistent-test-it": { + "replacement": "vitest/consistent-test-it", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "vitest/max-nested-describe": { + "replacement": "vitest/max-nested-describe", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "vitest/no-disabled-tests": { + "replacement": "vitest/no-disabled-tests", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "vitest/prefer-expect-resolves": { + "replacement": "vitest/prefer-expect-resolves", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + }, + "yoda": { + "replacement": "yoda", + "status": "native", + "limitation": "Native behavior and option support may differ from ESLint." + } +} diff --git a/docs/README.md b/docs/README.md index 34222272eb1..174bf1dae45 100644 --- a/docs/README.md +++ b/docs/README.md @@ -17,7 +17,7 @@ The list below contains valuable resources for people interested in contributing * [JSON output contracts](./cli/json-output.md) * [Performance](./cli/performance.md) * [Debugging](./cli/debugging.md) -* [ESLint rules](./cli/eslint-rules.md) +* [Oxlint rules](./cli/oxlint-rules.md) * [Testing strategy](./cli/testing-strategy.md) * [Cross-OS compatibility](./cli/cross-os-compatibility.md) * [Troubleshooting](./cli/troubleshooting.md) diff --git a/docs/cli/get-started.md b/docs/cli/get-started.md index 505a90e82bc..9e218c617e0 100644 --- a/docs/cli/get-started.md +++ b/docs/cli/get-started.md @@ -73,8 +73,8 @@ Besides the scripts for building and running the CLIs, there are others that mig - `pnpm test`: Runs the tests of all the packages. - `pnpm prettier`: Checks formatting for all linted source files. - `pnpm prettier:fix`: Formats all linted source files. -- `pnpm lint`: Runs Prettier, Oxlint, and ESLint compatibility checks for all the packages. -- `pnpm lint:fix`: Runs Prettier, Oxlint, and ESLint compatibility checks and fixes supported issues. +- `pnpm lint`: Runs Prettier and Oxlint checks for all the packages. +- `pnpm lint:fix`: Runs Prettier and Oxlint and fixes supported issues. - `pnpm type-check`: Type-checks all the packagesusing the Typescript `tsc` tool. - `pnpm clean`: Removes the `dist` directory from all the packages. diff --git a/docs/cli/oxlint-rule-coverage.md b/docs/cli/oxlint-rule-coverage.md index 96a1cf317d8..1d636082317 100644 --- a/docs/cli/oxlint-rule-coverage.md +++ b/docs/cli/oxlint-rule-coverage.md @@ -1,26 +1,77 @@ -# Lint rule coverage +# Oxlint rule coverage -`pnpm lint` runs Prettier, Oxlint, and ESLint. Oxlint uses native rules and -JavaScript rules configured in `oxlint.json`. +Repository linting uses Oxlint, its native type-aware checker, Prettier, and the +TSDoc parser. ESLint and its upstream rule plugins are absent from the dependency +graph and lockfile. Oxlint's native core diagnostics still use the `eslint` prefix; +that names the rule family, not an installed or executed ESLint engine. -The `compat` plugin in `packages/eslint-plugin-cli/oxlint-compat.js` runs shared -ESLint rules for module boundaries, import ordering and deprecations, naming and -member ordering, public API JSDoc, and comment conventions. The adapters supply -import-resolution settings and rule options. Naming checks use syntax-only -parser services; redundant type assertion checks use TypeScript parser services. +The public `@shopify/eslint-plugin-cli` package keeps all 14 custom rule exports, +including `command-json-output`, and the `configs.config` entry point. That config +now contains CLI custom rules and their test exemption. It no longer bundles the +shared Shopify, TypeScript, React, Vitest, or other third-party ESLint configs. +Consumers must configure those separately. This is a breaking public config change. -The lint script builds the Nx project graph before running Oxlint. Module -boundary checks require that graph. Generated GraphQL exemptions are configured -in `oxlint.json`. +## Replacements -Use `compat/` in disable directives for compatibility rules. The -adapter also accepts the upstream rule names. Oxlint checks unused directives. +The original configuration at `656de9379cb7b4e2af6fe0bc6c8d81b1a50163f7` enabled +301 lint rule names plus `prettier/prettier`. The migration has replacements for +246 lint rule names: 197 native counterparts, 14 retained implementations, and +35 partial independent replacements. Prettier covers formatting separately. +There are 55 unsupported rule names. This is not full behavioral parity. -The independent JavaScript rules in `packages/eslint-plugin-cli/oxlint.js` cover -naming, member and import ordering, workspace boundaries, unused imports, public -API documentation, and core/Node conventions. Their tests include an Oxlint run -that rejects loading ESLint or its plugins. +The independent plugin in `packages/eslint-plugin-cli/oxlint.js` adds naming, +member ordering, identifier length, import ordering, project boundaries, unused +imports, CommonJS declarations, public API JSDoc, Node global imports, restricted +syntax, and constructor checks. TSDoc syntax validation calls the parser directly. +It uses the default TSDoc configuration; this repository has no `tsdoc.json`. -The public `@shopify/eslint-plugin-cli` package exports custom rules and a shared -ESLint configuration. Consumers of that configuration require ESLint and its -configured plugins. +Partial implementations support repository conventions rather than every +upstream selector or option. Project boundaries reject relative imports and +re-exports between workspace packages, including `require()` and dynamic imports. +They do not reproduce Nx graph cycles, tag constraints, buildability, or lazy-loading +checks. Import ordering handles configured groups and blank lines, with conservative +fixes for contiguous imports without comments or side effects. Public parameter and +return documentation checks cover directly exported functions; destructured parameter +paths and full export reachability are not equivalent to the original JSDoc rules. + +Native rules can report additional cases, including unnecessary type assertions +and ambiguous default imports. Existing code and directives are updated for these +diagnostics. Unused imports in tests remain checked even though unused local variables +are allowed. Import-removal fixes differ from the original dedicated plugin. + +## Remaining gaps + +The complete rule-by-rule mapping and limitations are in +[`configurations/oxlint-rule-mapping.json`](../../configurations/oxlint-rule-mapping.json). + +| Family | Remaining checks | +| --- | --- | +| Import analysis | Deprecated imports, unresolved imports, undeclared dependencies, unused exports, redundant path segments | +| JSDoc | Advanced tag/type validation, parameter path matching, return/throw/yield consistency, comment layout | +| Control flow | Consistent returns, atomic updates, early-return conventions | +| Node APIs | Deprecated or unsupported APIs, callback conventions, promise API preferences, executable/shebang checks | +| Shopify conventions | Image imports, context menus, module-scope constants, Twine, singular enum names | +| Style and directives | Camel case, line-comment placement, statement padding, class sorting, strict-mode conventions, ESLint directive conventions | + +Oxlint still checks unused disable directives. Generated GraphQL files keep their +original consistent-type-definition exemption; array style, naming, and project +boundaries remain checked. Public JSDoc checks preserve the original file exclusions, +including public CLI entry points and theme helpers. + +## Audit + +```sh +node bin/audit-oxlint-coverage.js +``` + +The audit needs no ESLint dependency. It compares current rule scopes against +frozen effective configurations captured from the original revision in +[`configurations/oxlint-baseline.json`](../../configurations/oxlint-baseline.json). +It checks 1,633 surviving files, with four deleted compatibility files recorded +separately. Every original rule has an explicit replacement or documented gap. +The audit also checks formatting coverage and severity, and reports option differences. +It compares configuration coverage, not exhaustive behavioral equivalence. + +Focused tests exercise the independent rules, native-compatible directives, and +project boundaries. An integration test rejects attempts to load ESLint or upstream +ESLint plugins while running Oxlint. diff --git a/docs/cli/eslint-rules.md b/docs/cli/oxlint-rules.md similarity index 80% rename from docs/cli/eslint-rules.md rename to docs/cli/oxlint-rules.md index c792117212a..5519df14847 100644 --- a/docs/cli/eslint-rules.md +++ b/docs/cli/oxlint-rules.md @@ -1,8 +1,8 @@ -# ESLint Rules +# Oxlint Rules -To ensure the contributions to the project follow the conventions, -the project leverages [ESLint](https://eslint.org/) with third-party and local rules. -This page contains a list of all the local rules alongside the convention they enforce. +To ensure contributions follow the project's conventions, the project uses +[Oxlint](https://oxc.rs/docs/guide/usage/linter.html) with native and local rules. +This page lists the local rules and the conventions they enforce. ### `command-flags-with-env` diff --git a/eslint.codegen.config.js b/eslint.codegen.config.js deleted file mode 100644 index e778ead89c3..00000000000 --- a/eslint.codegen.config.js +++ /dev/null @@ -1,3 +0,0 @@ -import {eslintBaseConfig} from './eslint.config.js' - -export default eslintBaseConfig diff --git a/eslint.config.js b/eslint.config.js deleted file mode 100644 index ee74fd99253..00000000000 --- a/eslint.config.js +++ /dev/null @@ -1,295 +0,0 @@ -import nxPlugin from '@nx/eslint-plugin' -import compatibilityPlugin from './packages/eslint-plugin-cli/oxlint-compat.js' -import cliPlugin from '@shopify/eslint-plugin-cli' -import jsdocPlugin from 'eslint-plugin-jsdoc' -import {readFileSync} from 'node:fs' - -const oxlintConfig = JSON.parse(readFileSync(new URL('./oxlint.json', import.meta.url), 'utf8')) - -const eslintPluginNames = { - import: 'import-x', - node: 'n', - typescript: '@typescript-eslint', -} - -const eslintRuleName = (oxlintRuleName) => { - if (oxlintRuleName.startsWith('compat/')) return compatibilityPlugin.ruleNames[oxlintRuleName.slice(7)] - const [pluginName, ...ruleNameParts] = oxlintRuleName.split('/') - const eslintPluginName = eslintPluginNames[pluginName] - return eslintPluginName ? `${eslintPluginName}/${ruleNameParts.join('/')}` : oxlintRuleName -} - -const isEnabled = (ruleConfiguration) => { - const severity = Array.isArray(ruleConfiguration) ? ruleConfiguration[0] : ruleConfiguration - return severity !== 'off' && severity !== 0 -} - -const eslintCompatibilityConfig = ({files, rules, excludeFiles = []}) => ({ - files: files ?? ['packages/*/src/**/*.{js,mjs,ts,tsx}', 'packages/cli/bin/*.js', 'packages/e2e/**/*.ts'], - ignores: [...oxlintConfig.ignorePatterns, 'packages/eslint-plugin-cli/**', ...excludeFiles], - rules: Object.fromEntries( - Object.entries(rules) - .filter(([, ruleConfiguration]) => isEnabled(ruleConfiguration)) - .map(([ruleName]) => [eslintRuleName(ruleName), 'off']), - ), -}) - -// Spread the CLI plugin's base config which includes all necessary plugins -export const eslintBaseConfig = [ - {plugins: {compat: compatibilityPlugin}}, - // Base config from @shopify/eslint-plugin-cli (includes shopify, typescript, prettier, etc.) - ...cliPlugin.configs.config, - - // Global ignores - { - ignores: ['**/dist/**', '**/node_modules/**', '**/coverage/**', '**/*.d.ts', '**/*.cjs'], - }, - - // The local ESLint plugin uses CommonJS so its rules can load themselves. - { - files: ['packages/eslint-plugin-cli/**/*.js'], - languageOptions: { - ecmaVersion: 'latest', - sourceType: 'commonjs', - }, - }, - - { - files: ['packages/eslint-plugin-cli/**/*.test.js'], - languageOptions: { - globals: { - describe: 'readonly', - expect: 'readonly', - test: 'readonly', - }, - }, - }, - - // NX module boundaries - { - files: ['**/*.ts', '**/*.tsx'], - plugins: { - '@nx': nxPlugin, - }, - rules: { - '@nx/enforce-module-boundaries': 'error', - }, - }, - - // The theme package has tests that partially mock cli-kit with dynamic imports. - // Those mocks should not make every static cli-kit import in the package fail. - { - files: ['packages/theme/src/**/*.ts'], - rules: { - '@nx/enforce-module-boundaries': [ - 'error', - { - checkDynamicDependenciesExceptions: ['@shopify/cli-kit/**'], - }, - ], - }, - }, - - // JSDoc rules for public API files - { - files: ['**/public/**/*.ts'], - ignores: [ - '**/*.test.ts', - '**/public/node/abort.ts', - '**/public/node/analytics.ts', - '**/public/node/base-command.ts', - '**/public/node/cli.ts', - '**/public/node/dot-env.ts', - '**/public/node/error-handler.ts', - '**/public/node/framework.ts', - '**/public/node/fs.ts', - '**/public/node/github.ts', - '**/public/node/hooks/prerun.ts', - '**/public/node/os.ts', - '**/public/node/node-package-manager.ts', - '**/public/node/plugins/tunnel.ts', - '**/public/node/environments.ts', - '**/public/node/result.ts', - '**/public/node/themes/**/*', - ], - plugins: { - jsdoc: jsdocPlugin, - }, - settings: { - jsdoc: { - publicFunctionsOnly: true, - mode: 'typescript', - }, - }, - rules: { - 'jsdoc/check-access': 'error', - 'jsdoc/check-alignment': 'error', - 'jsdoc/check-indentation': 'error', - 'jsdoc/check-line-alignment': 'error', - 'jsdoc/check-param-names': 'error', - 'jsdoc/check-property-names': 'error', - 'jsdoc/check-syntax': 'error', - 'jsdoc/check-tag-names': 'error', - 'jsdoc/check-types': 'error', - 'jsdoc/check-values': 'error', - 'jsdoc/empty-tags': 'error', - 'jsdoc/implements-on-classes': 'error', - 'jsdoc/match-description': 'error', - 'jsdoc/multiline-blocks': 'error', - 'jsdoc/no-bad-blocks': 'error', - 'jsdoc/no-defaults': 'error', - 'jsdoc/no-multi-asterisks': 'error', - 'jsdoc/no-types': 'error', - 'jsdoc/no-undefined-types': 'error', - 'jsdoc/require-asterisk-prefix': 'error', - 'jsdoc/require-description': 'error', - 'jsdoc/require-description-complete-sentence': 'error', - 'jsdoc/require-hyphen-before-param-description': 'error', - 'jsdoc/require-jsdoc': ['error', {publicOnly: true}], - 'jsdoc/require-param': 'error', - 'jsdoc/require-param-description': 'error', - 'jsdoc/require-param-name': 'error', - 'jsdoc/require-property': 'error', - 'jsdoc/require-property-description': 'error', - 'jsdoc/require-property-name': 'error', - 'jsdoc/require-property-type': 'error', - 'jsdoc/require-returns': ['error', {publicOnly: true}], - 'jsdoc/require-returns-check': 'error', - 'jsdoc/require-returns-description': 'error', - 'jsdoc/require-throws': 'error', - 'jsdoc/require-yields': 'error', - 'jsdoc/require-yields-check': 'error', - 'jsdoc/tag-lines': ['error', 'any', {startLines: 1}], - 'jsdoc/valid-types': 'error', - }, - }, - - // Test file overrides - { - files: ['**/*.test.ts'], - rules: { - '@typescript-eslint/no-explicit-any': 'off', - 'no-restricted-syntax': 'off', - }, - }, - - // Public API explicit module boundary types - { - files: ['src/public/**/*.ts'], - ignores: ['**/public/node/themes/**/*'], - rules: { - '@typescript-eslint/explicit-module-boundary-types': 'error', - }, - }, - - // React components (rely on plugins already defined in cli config) - { - files: ['src/private/node/ui/components/**/*.tsx'], - settings: { - react: { - version: 'detect', - }, - }, - rules: { - 'react/function-component-definition': [ - 'error', - { - namedComponents: 'arrow-function', - unnamedComponents: 'arrow-function', - }, - ], - 'react/hook-use-state': 2, - 'react/jsx-boolean-value': 2, - 'react/jsx-child-element-spacing': 2, - 'react/jsx-closing-bracket-location': 2, - 'react/jsx-closing-tag-location': 2, - 'react/jsx-curly-brace-presence': 2, - 'react/jsx-curly-spacing': 2, - 'react/jsx-equals-spacing': 2, - 'react/jsx-first-prop-new-line': 2, - 'react/jsx-fragments': 2, - 'react/jsx-handler-names': 2, - 'react/jsx-indent': [2, 2, {checkAttributes: true, indentLogicalExpressions: true}], - 'react/jsx-indent-props': [2, 2], - 'react/jsx-no-leaked-render': 2, - 'react/jsx-no-useless-fragment': 2, - 'react/jsx-pascal-case': 2, - 'react/jsx-props-no-multi-spaces': 2, - 'react/jsx-tag-spacing': 2, - 'react/no-namespace': 2, - 'react/no-object-type-as-default-prop': 2, - 'react/self-closing-comp': 2, - 'react/no-unused-prop-types': 2, - 'import-x/no-default-export': 2, - 'import-x/no-namespace': 2, - 'no-restricted-imports': [ - 'error', - { - paths: [ - { - name: 'react', - importNames: ['FC'], - message: 'Please use FunctionComponent from react instead.', - }, - ], - }, - ], - '@typescript-eslint/naming-convention': [ - 'error', - { - selector: 'interface', - format: ['PascalCase'], - custom: { - regex: '^Props', - match: false, - }, - }, - ], - }, - }, - - // UI module max params - { - files: ['src/public/node/ui.tsx'], - rules: { - 'max-params': ['error', 1], - }, - }, - - // CLI bin/*.js files - disable rules that don't work for plain JS files - { - files: ['packages/cli/bin/*.js'], - rules: { - '@shopify/strict-component-boundaries': 'off', - }, - }, - - // The cli package uses a lazy command-loading pattern (command-registry.ts) that - // dynamically imports libraries at runtime. NX detects these dynamic imports and - // flags every static import of the same library elsewhere in the package. Since - // the command files themselves are lazy-loaded, their static imports are fine. - { - files: ['packages/cli/src/**/*.ts'], - rules: { - '@nx/enforce-module-boundaries': 'off', - }, - }, -] - -const config = [ - ...eslintBaseConfig, - // A directive can target an Oxlint-owned rule, so ESLint alone cannot determine whether it is unused. - { - linterOptions: { - reportUnusedDisableDirectives: 'off', - }, - }, - eslintCompatibilityConfig(oxlintConfig), - ...oxlintConfig.overrides.map((override) => eslintCompatibilityConfig(override)), - { - files: ['packages/app/src/cli/services/app-security-engine/embed-checks.mjs'], - rules: {'@shopify/strict-component-boundaries': 'off'}, - }, -] - -export default config diff --git a/nx.json b/nx.json index 9d7caaafeab..e58319926bc 100644 --- a/nx.json +++ b/nx.json @@ -79,8 +79,6 @@ "{workspaceRoot}/.nvmrc", "{workspaceRoot}/configurations/tsconfig.json", "{workspaceRoot}/configurations/vite.config.ts", - "{workspaceRoot}/eslint.config.js", - "{workspaceRoot}/eslint.codegen.config.js", "{workspaceRoot}/oxlint.json", "{workspaceRoot}/graphql.config.ts", "{workspaceRoot}/package.json", diff --git a/oxlint.json b/oxlint.json index 0b5469a840d..09cfb347390 100644 --- a/oxlint.json +++ b/oxlint.json @@ -1,22 +1,10 @@ { "$schema": "./node_modules/oxlint/configuration_schema.json", - "plugins": [ - "typescript", - "promise", - "import", - "node", - "unicorn" - ], + "plugins": ["typescript", "promise", "import", "node", "unicorn", "jsdoc", "react"], "jsPlugins": [ { "name": "@shopify/cli", - "specifier": "./packages/eslint-plugin-cli/index.js" - }, - "eslint-plugin-no-catch-all", - "eslint-plugin-tsdoc", - { - "name": "compat", - "specifier": "./packages/eslint-plugin-cli/oxlint-compat.js" + "specifier": "./packages/eslint-plugin-cli/oxlint.js" } ], "categories": { @@ -113,7 +101,14 @@ "packages/e2e/scripts/**" ], "rules": { - "array-callback-return": "error", + "array-callback-return": [ + "error", + { + "allowImplicit": false, + "checkForEach": false, + "allowVoid": false + } + ], "block-scoped-var": "error", "eqeqeq": [ "error", @@ -127,19 +122,64 @@ "no-case-declarations": "error", "no-caller": "error", "no-div-regex": "error", - "no-empty-function": "error", - "no-empty-pattern": "error", - "no-eval": "error", - "no-extend-native": "error", + "no-empty-function": [ + "error", + { + "allow": [] + } + ], + "no-empty-pattern": [ + "error", + { + "allowObjectPatternsAsParameters": false + } + ], + "no-eval": [ + "error", + { + "allowIndirect": false + } + ], + "no-extend-native": [ + "error", + { + "exceptions": [] + } + ], "no-extra-bind": "error", "no-extra-label": "error", - "no-fallthrough": "error", - "no-global-assign": "error", - "no-implicit-coercion": "error", - "no-implicit-globals": "error", + "no-fallthrough": [ + "error", + { + "allowEmptyCase": false, + "reportUnusedFallthroughComment": false + } + ], + "no-global-assign": [ + "error", + { + "exceptions": [] + } + ], + "no-implicit-coercion": [ + "error", + { + "allow": [], + "boolean": true, + "disallowTemplateShorthand": false, + "number": true, + "string": true + } + ], "no-implied-eval": "error", "no-iterator": "error", - "no-labels": "error", + "no-labels": [ + "error", + { + "allowLoop": false, + "allowSwitch": false + } + ], "no-lone-blocks": "error", "no-loop-func": "error", "no-new-func": "error", @@ -147,8 +187,7 @@ "no-new": "error", "no-param-reassign": "error", "no-proto": "error", - "no-redeclare": "error", - "no-return-assign": "error", + "no-return-assign": ["error", "except-parens"], "no-self-assign": [ "error", { @@ -156,18 +195,48 @@ } ], "no-self-compare": "error", - "no-sequences": "error", + "no-sequences": [ + "error", + { + "allowInParentheses": true + } + ], "no-throw-literal": "error", "no-unmodified-loop-condition": "error", - "no-unused-expressions": "error", + "no-unused-expressions": [ + "error", + { + "allowShortCircuit": false, + "allowTernary": false, + "allowTaggedTemplates": false, + "enforceForJSX": false, + "ignoreDirectives": false + } + ], "no-unused-labels": "error", "no-useless-call": "error", "no-useless-catch": "error", "no-useless-concat": "error", - "no-useless-escape": "error", + "no-useless-escape": [ + "error", + { + "allowRegexCharacters": [] + } + ], "no-useless-return": "error", - "no-void": "error", - "no-warning-comments": "error", + "no-void": [ + "error", + { + "allowAsStatement": false + } + ], + "no-warning-comments": [ + "error", + { + "location": "start", + "terms": ["todo", "fixme", "xxx"] + } + ], "no-with": "error", "prefer-promise-reject-errors": [ "error", @@ -175,18 +244,25 @@ "allowEmptyReject": true } ], - "radix": "error", + "radix": ["error", "always"], "require-await": "error", "yoda": [ "error", - "never" + "never", + { + "exceptRange": false, + "onlyEquality": false + } ], "no-constructor-return": "error", - "grouped-accessor-pairs": "error", - "max-params": [ + "grouped-accessor-pairs": [ "error", - 10 + "anyOrder", + { + "enforceForTSTypes": false + } ], + "max-params": ["error", 10], "for-direction": "error", "getter-return": [ "error", @@ -196,7 +272,7 @@ ], "no-async-promise-executor": "error", "no-compare-neg-zero": "error", - "no-cond-assign": "error", + "no-cond-assign": ["error", "except-parens"], "no-constant-condition": [ "error", { @@ -207,14 +283,39 @@ "no-dupe-keys": "error", "no-duplicate-case": "error", "no-empty-character-class": "error", - "no-empty": "error", + "no-empty": [ + "error", + { + "allowEmptyCatch": false + } + ], "no-ex-assign": "error", - "no-extra-boolean-cast": "error", + "no-extra-boolean-cast": ["error", {}], "no-func-assign": "error", - "no-inner-declarations": "error", - "no-invalid-regexp": "error", - "no-irregular-whitespace": "error", - "no-misleading-character-class": "error", + "no-inner-declarations": [ + "error", + "functions", + { + "blockScopedFunctions": "allow" + } + ], + "no-invalid-regexp": ["error", {}], + "no-irregular-whitespace": [ + "error", + { + "skipComments": false, + "skipJSXText": false, + "skipRegExps": false, + "skipStrings": true, + "skipTemplates": false + } + ], + "no-misleading-character-class": [ + "error", + { + "allowEscape": false + } + ], "no-obj-calls": "error", "no-prototype-builtins": "error", "no-regex-spaces": "error", @@ -222,9 +323,25 @@ "no-template-curly-in-string": "error", "no-unreachable": "error", "no-unsafe-finally": "error", - "no-unsafe-negation": "error", - "use-isnan": "error", - "valid-typeof": "error", + "no-unsafe-negation": [ + "error", + { + "enforceForOrderingRelations": false + } + ], + "use-isnan": [ + "error", + { + "enforceForIndexOf": false, + "enforceForSwitchCase": true + } + ], + "valid-typeof": [ + "error", + { + "requireStringLiterals": false + } + ], "no-setter-return": "error", "no-dupe-else-if": "error", "func-name-matching": "error", @@ -232,50 +349,89 @@ "error", "declaration", { - "allowArrowFunctions": true + "allowArrowFunctions": true, + "allowTypeAnnotation": false, + "overrides": {} } ], - "id-length": "off", "new-cap": [ "error", { + "capIsNew": false, + "capIsNewExceptions": [ + "Array", + "Boolean", + "Date", + "Error", + "Function", + "Number", + "Object", + "RegExp", + "String", + "Symbol", + "BigInt" + ], "newIsCap": true, - "capIsNew": false + "newIsCapExceptions": [], + "properties": true } ], "no-array-constructor": "error", "no-lonely-if": "error", - "no-multi-assign": "error", + "no-multi-assign": [ + "error", + { + "ignoreNonDeclaration": false + } + ], "no-negated-condition": "error", "no-nested-ternary": "error", - "no-unneeded-ternary": "error", - "operator-assignment": [ + "no-unneeded-ternary": [ "error", - "always" + { + "defaultAssignment": true + } ], + "operator-assignment": ["error", "always"], "prefer-object-spread": "error", - "unicode-bom": [ - "error", - "never" - ], + "unicode-bom": ["error", "never"], "prefer-exponentiation-operator": "error", "no-delete-var": "error", "no-label-var": "error", "no-restricted-globals": "error", - "no-shadow-restricted-names": "error", - "no-shadow": "error", - "no-unused-vars": "error", - "no-use-before-define": [ + "no-shadow-restricted-names": [ "error", - "nofunc" + { + "reportGlobalThis": false + } ], + "no-shadow": [ + "error", + { + "allow": [], + "builtinGlobals": false, + "hoist": "functions", + "ignoreOnInitialization": false, + "ignoreTypeValueShadow": true, + "ignoreFunctionTypeParameterNameValueShadow": true + } + ], + "no-unused-vars": "error", + "no-use-before-define": ["error", "nofunc"], "constructor-super": "error", "no-class-assign": "error", "no-const-assign": "error", "no-dupe-class-members": "error", "no-this-before-super": "error", "no-useless-constructor": "error", - "no-useless-rename": "error", + "no-useless-rename": [ + "error", + { + "ignoreDestructuring": false, + "ignoreImport": false, + "ignoreExport": false + } + ], "no-var": "error", "object-shorthand": [ "error", @@ -284,7 +440,13 @@ "avoidQuotes": true } ], - "prefer-const": "error", + "prefer-const": [ + "error", + { + "destructuring": "any", + "ignoreReadBeforeAssign": false + } + ], "prefer-numeric-literals": "error", "prefer-rest-params": "error", "prefer-spread": "error", @@ -327,64 +489,30 @@ ], "import/newline-after-import": "error", "import/no-anonymous-default-export": "error", - "node/callback-return": [ - "error", - [ - "callback", - "cb", - "next" - ] - ], - "node/handle-callback-err": [ - "error", - "^.*(e|E)rr(or)?$" - ], + "node/callback-return": ["error", ["callback", "cb", "next"]], + "node/handle-callback-err": ["error", "^.*(e|E)rr(or)?$"], "node/no-new-require": "error", "node/no-path-concat": "error", "node/no-exports-assign": "error", - "@shopify/cli/command-flags-with-env": "error", - "@shopify/cli/command-conventional-flag-env": "error", - "@shopify/cli/command-reserved-flags": "error", - "@shopify/cli/no-error-factory-functions": "error", - "@shopify/cli/no-process-cwd": "error", - "@shopify/cli/no-trailing-js-in-cli-kit-imports": "error", - "@shopify/cli/no-vi-manual-mock-clear": "error", - "@shopify/cli/no-vi-mock-in-callbacks": "error", - "@shopify/cli/prompt-message-format": "error", - "@shopify/cli/banner-headline-format": "error", - "@shopify/cli/required-fields-when-loading-app": "error", - "@shopify/cli/no-inline-graphql": "error", - "no-catch-all/no-catch-all": "error", - "tsdoc/syntax": "error", - "typescript/consistent-return": "error", - "typescript/dot-notation": [ + "@shopify/cli/id-length": "off", + "@shopify/cli/no-implicit-globals": [ "error", { - "allowKeywords": true + "lexicalBindings": false } ], - "@shopify/cli/command-json-output": "error", - "compat/eslint-comments-no-unused-disable": "error" + "@shopify/cli/no-redeclare": [ + "error", + { + "builtinGlobals": true + } + ] }, "overrides": [ { - "files": [ - "**/*.ts", - "**/*.tsx" - ], + "files": ["**/*.ts", "**/*.tsx"], "rules": { - "no-unused-vars": [ - "error", - { - "args": "all", - "argsIgnorePattern": "^_", - "caughtErrors": "none", - "caughtErrorsIgnorePattern": "^_", - "destructuredArrayIgnorePattern": "^_", - "varsIgnorePattern": "^_", - "ignoreRestSiblings": true - } - ], + "no-unused-vars": "off", "no-useless-constructor": "off", "no-shadow": "off", "no-use-before-define": "off", @@ -395,7 +523,6 @@ "valid-typeof": "off", "no-const-assign": "off", "no-this-before-super": "off", - "no-redeclare": "off", "no-dupe-class-members": "off", "array-callback-return": "off", "getter-return": "off", @@ -455,10 +582,7 @@ "objectLiteralTypeAssertions": "allow" } ], - "typescript/consistent-type-definitions": [ - "error", - "interface" - ], + "typescript/consistent-type-definitions": ["error", "interface"], "typescript/no-floating-promises": "error", "typescript/prefer-for-of": "error", "typescript/require-array-sort-compare": "off", @@ -487,7 +611,7 @@ "typescript/prefer-readonly": "error", "typescript/consistent-indexed-object-style": "off", "typescript/no-unnecessary-type-constraint": "error", - "no-console": "error", + "no-console": ["error", {}], "no-await-in-loop": "error", "no-restricted-imports": [ "error", @@ -534,12 +658,7 @@ } ], "prefer-promise-reject-errors": "off", - "no-unused-expressions": [ - "error", - { - "allowTernary": true - } - ], + "no-unused-expressions": "off", "no-restricted-globals": [ "error", { @@ -573,23 +692,33 @@ "typescript/only-throw-error": "error", "typescript/use-unknown-in-catch-callback-variable": "off", "typescript/no-confusing-void-expression": "off", - "typescript/non-nullable-type-assertion-style": "off" + "typescript/non-nullable-type-assertion-style": "off", + "@shopify/cli/command-flags-with-env": "error", + "@shopify/cli/command-conventional-flag-env": "error", + "@shopify/cli/command-reserved-flags": "error", + "@shopify/cli/no-error-factory-functions": "error", + "@shopify/cli/no-process-cwd": "error", + "@shopify/cli/no-trailing-js-in-cli-kit-imports": "error", + "@shopify/cli/no-vi-manual-mock-clear": "error", + "@shopify/cli/no-vi-mock-in-callbacks": "error", + "@shopify/cli/prompt-message-format": "error", + "@shopify/cli/banner-headline-format": "error", + "@shopify/cli/required-fields-when-loading-app": "error", + "@shopify/cli/no-inline-graphql": "error", + "@shopify/cli/no-catch-all": "error", + "@shopify/cli/tsdoc-syntax": "error", + "@shopify/cli/command-json-output": "error", + "no-array-constructor": "off", + "@shopify/cli/unused-imports": "error", + "@shopify/cli/no-redeclare": "off" }, - "plugins": [ - "vitest" - ], + "plugins": ["vitest", "jsdoc", "react"], "env": { "node": true } }, { - "files": [ - "**/*.test.ts", - "**/*.test.tsx", - "**/*.test-data.ts", - "**/testing/*.ts", - "**/testing/*.tsx" - ], + "files": ["**/*.test.ts", "**/*.test.tsx", "**/*.test-data.ts", "**/testing/*.ts", "**/testing/*.tsx"], "rules": { "no-restricted-globals": "off", "no-unused-vars": "off", @@ -608,17 +737,13 @@ } }, { - "files": [ - "**/bin/*.js" - ], + "files": ["**/bin/*.js"], "rules": { "import/extensions": "off" } }, { - "files": [ - "**/public/**/*.ts" - ], + "files": ["**/public/**/*.ts"], "rules": { "jsdoc/check-access": "error", "jsdoc/check-property-names": "error", @@ -626,41 +751,86 @@ "jsdoc/empty-tags": "error", "jsdoc/implements-on-classes": "error", "jsdoc/no-defaults": "error", - "jsdoc/require-param": "off", + "@shopify/cli/jsdoc-no-types": "error", + "@shopify/cli/jsdoc-require-description": "error", + "@shopify/cli/jsdoc-require-description-complete-sentence": "error", + "@shopify/cli/jsdoc-require-hyphen-before-param-description": "error", + "@shopify/cli/jsdoc-require-jsdoc": [ + "error", + { + "publicOnly": true, + "checkConstructors": true, + "checkGetters": true, + "checkSetters": true, + "enableFixer": true, + "exemptEmptyConstructors": false, + "exemptEmptyFunctions": false, + "fixerMessage": "", + "require": { + "ArrowFunctionExpression": false, + "ClassDeclaration": false, + "ClassExpression": false, + "FunctionDeclaration": true, + "FunctionExpression": false, + "MethodDefinition": false + } + } + ], "jsdoc/require-param-description": "error", "jsdoc/require-param-name": "error", "jsdoc/require-property": "error", "jsdoc/require-property-description": "error", "jsdoc/require-property-name": "error", "jsdoc/require-property-type": "error", - "jsdoc/require-returns": "off", "jsdoc/require-returns-description": "error", - "jsdoc/require-yields": "error" + "jsdoc/require-yields": "error", + "@shopify/cli/jsdoc-require-param": "error", + "@shopify/cli/jsdoc-require-returns": [ + "error", + { + "publicOnly": true, + "checkConstructors": false, + "checkGetters": true, + "forceRequireReturn": false, + "forceReturnsWithAsync": false + } + ] }, - "plugins": [ - "jsdoc" + "plugins": ["jsdoc", "react"], + "excludeFiles": [ + "**/*.test.ts", + "**/public/node/abort.ts", + "**/public/node/analytics.ts", + "**/public/node/base-command.ts", + "**/public/node/cli.ts", + "**/public/node/dot-env.ts", + "**/public/node/error-handler.ts", + "**/public/node/framework.ts", + "**/public/node/fs.ts", + "**/public/node/github.ts", + "**/public/node/hooks/prerun.ts", + "**/public/node/os.ts", + "**/public/node/node-package-manager.ts", + "**/public/node/plugins/tunnel.ts", + "**/public/node/environments.ts", + "**/public/node/result.ts", + "**/public/node/themes/**/*" ] }, { - "files": [ - "**/*.test.ts" - ], + "files": ["**/*.test.ts"], "rules": { "typescript/no-explicit-any": "off" } }, { - "files": [ - "src/public/**/*.ts" - ], + "files": ["src/public/**/*.ts"], "rules": { "typescript/explicit-module-boundary-types": "error" } }, { - "files": [ - "src/private/node/ui/components/**/*.tsx" - ], + "files": ["src/private/node/ui/components/**/*.tsx"], "rules": { "react/function-component-definition": [ "error", @@ -685,9 +855,7 @@ "paths": [ { "name": "react", - "importNames": [ - "FC" - ], + "importNames": ["FC"], "message": "Please use FunctionComponent from react instead." } ] @@ -696,220 +864,97 @@ "import/no-default-export": "error", "import/no-namespace": "error" }, - "plugins": [ - "react" - ] + "plugins": ["react", "jsdoc"] }, { - "files": [ - "src/public/node/ui.tsx" - ], + "files": ["src/public/node/ui.tsx"], "rules": { - "max-params": [ - "error", - 1 - ] + "max-params": ["error", 1] } }, { - "files": [ - "**/*.{js,ts,tsx}" - ], + "files": ["**/*.{js,mjs,ts,tsx}"], "rules": { - "compat/consistent-return": "error", - "compat/curly": [ - "error", - "all" - ], - "compat/dot-notation": [ + "curly": ["error", "all"], + "no-unexpected-multiline": "error", + "no-object-constructor": "off", + "@shopify/cli/restricted-syntax": "off", + "no-undef": [ "error", { - "allowKeywords": true + "typeof": false } ], - "compat/no-octal-escape": "error", - "compat/no-octal": "error", - "compat/no-process-env": "error", - "compat/no-return-await": "error", - "compat/no-dupe-args": "error", - "compat/require-atomic-updates": "error", - "compat/no-unexpected-multiline": "error", - "compat/shopify-binary-assignment-parens": [ - "error", - "always" - ], - "compat/shopify-class-property-semi": "error", - "compat/shopify-images-no-direct-imports": "error", - "compat/shopify-no-context-menu": "error", - "compat/shopify-no-debugger": "error", - "compat/shopify-no-useless-computed-properties": "error", - "compat/shopify-no-fully-static-classes": "error", - "compat/shopify-prefer-early-return": [ + "@shopify/cli/no-new-object": "error", + "@shopify/cli/dot-notation": [ "error", { - "maximumStatements": 1 + "allowKeywords": true, + "allowPattern": "" } ], - "compat/shopify-prefer-module-scope-constants": "error", - "compat/shopify-prefer-twine": "error", - "compat/shopify-strict-component-boundaries": "error", - "compat/shopify-typescript-prefer-pascal-case-enums": "off", - "compat/shopify-typescript-prefer-singular-enums": "off", - "compat/shopify-typescript-prefer-build-client-schema": "error", - "compat/strict": [ - "error", - "never" - ], - "compat/camelcase": [ - "error", - { - "properties": "always" - } - ], - "compat/consistent-this": [ - "error", - "self" - ], - "compat/id-length": [ + "@shopify/cli/no-process-env": "error", + "@shopify/cli/no-return-await": "error", + "no-debugger": "error", + "no-useless-computed-key": "error", + "@shopify/cli/no-fully-static-classes": "error", + "@shopify/cli/prefer-pascal-case-enums": "off", + "@shopify/cli/prefer-build-client-schema": "error", + "@shopify/cli/consistent-this": ["error", "self"], + "@shopify/cli/one-var": ["error", "never"], + "@shopify/cli/no-undef-init": "error", + "@shopify/cli/id-length": [ "error", { + "exceptionPatterns": [], + "exceptions": ["x", "y", "i", "j", "t", "q", "_", "$"], "min": 2, - "properties": "always", - "exceptions": [ - "x", - "y", - "i", - "j", - "t", - "q", - "_", - "$" - ] - } - ], - "compat/line-comment-position": [ - "error", - { - "position": "above" - } - ], - "no-object-constructor": "error", - "compat/no-restricted-syntax": "off", - "compat/one-var": [ - "error", - "never" - ], - "compat/no-catch-shadow": "error", - "compat/no-undef-init": "error", - "compat/no-undef": "error", - "compat/lines-between-class-members": [ - "error", - "always", - { - "exceptAfterSingleLine": true - } - ], - "compat/padding-line-between-statements": [ - "error", - { - "blankLine": "always", - "prev": "directive", - "next": "*" - }, - { - "blankLine": "any", - "prev": "directive", - "next": "directive" - } - ], - "compat/spaced-comment": [ - "error", - "always", - { - "markers": [ - "=" - ] - } - ], - "compat/eslint-comments-disable-enable-pair": [ - "error", - { - "allowWholeFile": true + "properties": "always" } ], - "compat/eslint-comments-no-aggregating-enable": "error", - "compat/eslint-comments-no-duplicate-disable": "error", - "compat/eslint-comments-no-unlimited-disable": "error", - "compat/eslint-comments-no-unused-enable": "error" + "@shopify/cli/exports-style": ["error", "module.exports"], + "@shopify/cli/prefer-global-buffer": "error", + "@shopify/cli/prefer-global-console": "error", + "@shopify/cli/prefer-global-process": "error", + "@shopify/cli/prefer-global-text-decoder": "error", + "@shopify/cli/prefer-global-text-encoder": "error", + "@shopify/cli/prefer-global-url-search-params": "error", + "@shopify/cli/prefer-global-url": "error" } }, { - "files": [ - "**/*.{js,ts,tsx}" - ], + "files": ["**/*.{js,mjs,ts,tsx}"], "rules": { - "compat/no-new-symbol": "error", - "compat/prefer-arrow-callback": [ + "prefer-arrow-callback": [ "error", { "allowNamedFunctions": true } ], "promise/no-return-in-finally": "error", - "compat/sort-class-members-sort-class-members": [ + "import/named": "error", + "import/export": "error", + "@shopify/cli/import-order": [ "error", { - "order": [ - "[static-members]", - "[properties]", - "[conventional-private-properties]", - "constructor", - "[methods]", - "[conventional-private-methods]", - "[everything-else]" - ], - "groups": { - "static-members": [ - { - "static": true - } - ] - }, - "accessorPairPositioning": "getThenSet" + "groups": ["builtin", "external", "internal", "parent", "sibling"], + "newlines-between": "always", + "distinctGroup": true, + "sortTypesGroup": false, + "named": false, + "warnOnUnassignedImports": false } ], - "compat/import-x-no-unresolved": "error", - "compat/import-x-named": "error", - "compat/import-x-no-useless-path-segments": "error", - "compat/import-x-no-unused-modules": "error", - "compat/import-x-export": "error", - "compat/import-x-no-deprecated": "error", - "compat/import-x-no-extraneous-dependencies": "error", - "compat/import-x-order": [ - "error", - { - "groups": [ - "builtin", - "external", - "internal", - "parent", - "sibling" - ], - "newlines-between": "always" - } - ], - "compat/import-x-no-named-as-default": "error", - "compat/import-x-no-named-as-default-member": "error" + "import/no-named-as-default": "error", + "import/no-named-as-default-member": "error", + "no-new-native-nonconstructor": "error" } }, { - "files": [ - "**/*.ts", - "**/*.tsx" - ], + "files": ["**/*.ts", "**/*.tsx"], "rules": { - "compat/typescript-eslint-no-array-constructor": "error", - "compat/typescript-eslint-member-ordering": [ + "no-array-constructor": "error", + "@shopify/cli/member-ordering": [ "error", { "default": [ @@ -929,16 +974,12 @@ ] } ], - "compat/typescript-eslint-no-unused-vars": "off", - "compat/typescript-eslint-naming-convention": [ + "no-unused-vars": "off", + "@shopify/cli/naming-convention": [ "error", { "selector": "default", - "format": [ - "camelCase", - "PascalCase", - "UPPER_CASE" - ], + "format": ["camelCase", "PascalCase", "UPPER_CASE"], "leadingUnderscore": "allow", "trailingUnderscore": "allow" }, @@ -952,24 +993,16 @@ }, { "selector": "typeLike", - "format": [ - "PascalCase" - ] + "format": ["PascalCase"] }, { "selector": "typeParameter", - "format": [ - "PascalCase" - ], - "prefix": [ - "T" - ] + "format": ["PascalCase"], + "prefix": ["T"] }, { "selector": "interface", - "format": [ - "PascalCase" - ], + "format": ["PascalCase"], "custom": { "regex": "^I[A-Z]", "match": false @@ -977,111 +1010,54 @@ } ], "typescript/no-unnecessary-type-assertion": "off", - "compat/typescript-eslint-no-unused-expressions": "error", - "compat/no-undef": "off", - "compat/shopify-no-fully-static-classes": "off", - "compat/sort-class-members-sort-class-members": "off", - "compat/camelcase": "off", - "compat/no-dupe-args": "off", - "compat/no-new-symbol": "off", - "compat/import-x-no-unresolved": "off", - "compat/import-x-named": "off", - "compat/import-x-export": "off", - "compat/strict": "off", - "compat/shopify-prefer-early-return": "off", - "compat/shopify-typescript-prefer-pascal-case-enums": "error", - "compat/shopify-typescript-prefer-singular-enums": "error", - "compat/shopify-typescript-prefer-build-client-schema": "error" + "no-unused-expressions": "error", + "no-undef": "off", + "import/named": "off", + "import/export": "off", + "@shopify/cli/no-fully-static-classes": "off", + "no-new-native-nonconstructor": "off", + "@shopify/cli/prefer-pascal-case-enums": "error", + "@shopify/cli/prefer-build-client-schema": "error" } }, { - "files": [ - "**/*.{js,ts,tsx}" - ], + "files": ["**/*.{js,mjs,ts,tsx}"], "rules": { - "compat/n-exports-style": [ - "error", - "module.exports" - ], - "compat/n-prefer-global-buffer": "error", - "compat/n-prefer-global-console": "error", - "compat/n-prefer-global-process": "error", - "compat/n-prefer-global-text-decoder": "error", - "compat/n-prefer-global-text-encoder": "error", - "compat/n-prefer-global-url-search-params": "error", - "compat/n-prefer-global-url": "error", - "compat/n-no-deprecated-api": "error", - "compat/n-no-unpublished-bin": "error", - "compat/n-no-unsupported-features-node-builtins": "error", - "compat/n-shebang": "error", - "compat/n-prefer-promises-dns": "error", - "compat/n-prefer-promises-fs": "error", - "compat/n-no-callback-literal": "error", - "compat/no-process-env": "off" + "@shopify/cli/no-process-env": "off" } }, { - "files": [ - "**/*.{js,ts,tsx}" - ], + "files": ["**/*.{js,mjs,ts,tsx}"], "rules": { - "compat/curly": 0, - "compat/no-unexpected-multiline": 0, - "compat/react-jsx-child-element-spacing": "off", - "compat/react-jsx-closing-bracket-location": "off", - "compat/react-jsx-closing-tag-location": "off", - "compat/react-jsx-curly-spacing": "off", - "compat/react-jsx-equals-spacing": "off", - "compat/react-jsx-first-prop-new-line": "off", - "compat/react-jsx-indent": "off", - "compat/react-jsx-indent-props": "off", - "compat/react-jsx-props-no-multi-spaces": "off", - "compat/react-jsx-tag-spacing": "off" + "curly": 0, + "no-unexpected-multiline": 0 } }, { - "files": [ - "**/*.{js,ts,tsx}" - ], + "files": ["**/*.{js,mjs,ts,tsx}"], "rules": { - "compat/shopify-class-property-semi": "off", - "compat/shopify-binary-assignment-parens": "off", - "compat/prefer-arrow-callback": "off", - "compat/no-unexpected-multiline": "error" + "prefer-arrow-callback": "off", + "no-unexpected-multiline": "error" } }, { - "files": [ - "**/*.ts", - "**/*.tsx" - ], + "files": ["**/*.ts", "**/*.tsx"], "rules": { - "compat/shopify-strict-component-boundaries": "off", - "compat/import-x-order": [ + "@shopify/cli/import-order": [ "error", { - "groups": [ - "index", - "sibling", - "parent", - "internal", - "external", - "builtin", - "object", - "type" - ] + "groups": ["index", "sibling", "parent", "internal", "external", "builtin", "object", "type"], + "distinctGroup": true, + "sortTypesGroup": false, + "named": false, + "warnOnUnassignedImports": false } ], - "compat/no-catch-shadow": "off", - "compat/typescript-eslint-naming-convention": [ + "@shopify/cli/naming-convention": [ "error", { "selector": "default", - "format": [ - "camelCase", - "PascalCase", - "UPPER_CASE" - ], + "format": ["camelCase", "PascalCase", "UPPER_CASE"], "leadingUnderscore": "allow", "trailingUnderscore": "allow" }, @@ -1095,43 +1071,28 @@ }, { "selector": "typeLike", - "format": [ - "PascalCase" - ] + "format": ["PascalCase"] }, { "selector": "typeParameter", - "format": [ - "PascalCase" - ], - "prefix": [ - "T" - ] + "format": ["PascalCase"], + "prefix": ["T"] }, { "selector": "interface", - "format": [ - "PascalCase" - ], + "format": ["PascalCase"], "custom": { "regex": "^I[A-Z]", "match": false } }, { - "selector": [ - "objectLiteralProperty", - "typeProperty" - ], + "selector": ["objectLiteralProperty", "typeProperty"], "format": null } ], - "compat/typescript-eslint-no-unnecessary-type-assertion": "error", - "compat/consistent-return": "off", - "compat/n-no-deprecated-api": "off", - "compat/import-x-no-extraneous-dependencies": "off", - "compat/unused-imports-no-unused-imports": "error", - "compat/no-restricted-syntax": [ + "typescript/no-unnecessary-type-assertion": "error", + "@shopify/cli/restricted-syntax": [ "error", { "selector": "Literal[value=/(cannot|will not|do not)/i]", @@ -1142,7 +1103,7 @@ "message": "Be human - prefer don't to do not, won't to will not etc." } ], - "compat/typescript-eslint-no-unused-vars": [ + "no-unused-vars": [ "error", { "args": "all", @@ -1154,10 +1115,11 @@ "ignoreRestSiblings": true } ], - "compat/n-no-unsupported-features-node-builtins": "off", - "compat/typescript-eslint-no-unused-expressions": [ + "no-unused-expressions": [ "error", { + "allowShortCircuit": false, + "allowTaggedTemplates": false, "allowTernary": true } ], @@ -1165,75 +1127,45 @@ } }, { - "files": [ - "**/*.{js,ts,tsx}" - ], + "files": ["**/*.{js,mjs,ts,tsx}"], "rules": { - "compat/curly": 0, - "compat/no-unexpected-multiline": 0, - "compat/react-jsx-child-element-spacing": "off", - "compat/react-jsx-closing-bracket-location": "off", - "compat/react-jsx-closing-tag-location": "off", - "compat/react-jsx-curly-spacing": "off", - "compat/react-jsx-equals-spacing": "off", - "compat/react-jsx-first-prop-new-line": "off", - "compat/react-jsx-indent": "off", - "compat/react-jsx-indent-props": "off", - "compat/react-jsx-props-no-multi-spaces": "off", - "compat/react-jsx-tag-spacing": "off" + "curly": 0, + "no-unexpected-multiline": 0 } }, { - "files": [ - "**/*.test.ts", - "**/*.test.tsx", - "**/*.test-data.ts", - "**/testing/*.ts", - "**/testing/*.tsx" - ], + "files": ["**/*.test.ts", "**/*.test.tsx", "**/*.test-data.ts", "**/testing/*.ts", "**/testing/*.tsx"], "rules": { - "compat/no-restricted-syntax": "off", - "compat/typescript-eslint-no-unused-vars": "off" + "@shopify/cli/restricted-syntax": "off", + "no-unused-vars": "off", + "@shopify/cli/required-fields-when-loading-app": "off" } }, { - "files": [ - "**/bin/*.js" - ], + "files": ["**/bin/*.js"], "rules": { - "compat/import-x-no-unresolved": "off", - "compat/nx-enforce-module-boundaries": "off", - "compat/n-no-unpublished-bin": "off" + "@shopify/cli/module-boundaries": "off" } }, { - "files": [ - "**/*.ts", - "**/*.tsx" - ], + "files": ["**/*.ts", "**/*.tsx"], "rules": { - "compat/nx-enforce-module-boundaries": "error" + "@shopify/cli/module-boundaries": "error" } }, { - "files": [ - "packages/theme/src/**/*.ts" - ], + "files": ["packages/theme/src/**/*.ts"], "rules": { - "compat/nx-enforce-module-boundaries": [ + "@shopify/cli/module-boundaries": [ "error", { - "checkDynamicDependenciesExceptions": [ - "@shopify/cli-kit/**" - ] + "checkDynamicDependenciesExceptions": ["@shopify/cli-kit/**"] } ] } }, { - "files": [ - "**/public/**/*.ts" - ], + "files": ["**/public/**/*.ts"], "excludeFiles": [ "**/*.test.ts", "**/public/node/abort.ts", @@ -1254,84 +1186,72 @@ "**/public/node/themes/**/*" ], "rules": { - "compat/jsdoc-check-alignment": "error", - "compat/jsdoc-check-indentation": "error", - "compat/jsdoc-check-line-alignment": "error", - "compat/jsdoc-check-param-names": "error", - "compat/jsdoc-check-syntax": "error", - "compat/jsdoc-check-types": "error", - "compat/jsdoc-check-values": "error", - "compat/jsdoc-match-description": "error", - "compat/jsdoc-multiline-blocks": "error", - "compat/jsdoc-no-bad-blocks": "error", - "compat/jsdoc-no-multi-asterisks": "error", - "compat/jsdoc-no-types": "error", - "compat/jsdoc-no-undefined-types": "error", - "compat/jsdoc-require-asterisk-prefix": "error", - "compat/jsdoc-require-description": "error", - "compat/jsdoc-require-description-complete-sentence": "error", - "compat/jsdoc-require-hyphen-before-param-description": "error", - "compat/jsdoc-require-jsdoc": [ + "jsdoc/check-access": "error", + "jsdoc/check-property-names": "error", + "jsdoc/check-tag-names": "error", + "jsdoc/empty-tags": "error", + "jsdoc/implements-on-classes": "error", + "jsdoc/no-defaults": "error", + "@shopify/cli/jsdoc-no-types": "error", + "@shopify/cli/jsdoc-require-description": "error", + "@shopify/cli/jsdoc-require-description-complete-sentence": "error", + "@shopify/cli/jsdoc-require-hyphen-before-param-description": "error", + "@shopify/cli/jsdoc-require-jsdoc": [ "error", { - "publicOnly": true + "publicOnly": true, + "checkConstructors": true, + "checkGetters": true, + "checkSetters": true, + "enableFixer": true, + "exemptEmptyConstructors": false, + "exemptEmptyFunctions": false, + "fixerMessage": "", + "require": { + "ArrowFunctionExpression": false, + "ClassDeclaration": false, + "ClassExpression": false, + "FunctionDeclaration": true, + "FunctionExpression": false, + "MethodDefinition": false + } } ], - "compat/jsdoc-require-returns-check": "error", - "compat/jsdoc-require-throws": "error", - "compat/jsdoc-require-yields-check": "error", - "compat/jsdoc-tag-lines": [ + "jsdoc/require-param-description": "error", + "jsdoc/require-param-name": "error", + "jsdoc/require-property": "error", + "jsdoc/require-property-description": "error", + "jsdoc/require-property-name": "error", + "jsdoc/require-property-type": "error", + "jsdoc/require-returns-description": "error", + "jsdoc/require-yields": "error", + "@shopify/cli/jsdoc-require-param": "error", + "@shopify/cli/jsdoc-require-returns": [ "error", - "any", { - "startLines": 1 + "publicOnly": true, + "checkConstructors": false, + "checkGetters": true, + "forceRequireReturn": false, + "forceReturnsWithAsync": false } - ], - "compat/jsdoc-valid-types": "error" + ] } }, { - "files": [ - "**/*.test.ts" - ], + "files": ["**/*.test.ts"], "rules": { - "compat/no-restricted-syntax": "off" + "@shopify/cli/restricted-syntax": "off" } }, { - "files": [ - "src/private/node/ui/components/**/*.tsx" - ], + "files": ["src/private/node/ui/components/**/*.tsx"], "rules": { - "compat/react-jsx-child-element-spacing": 2, - "compat/react-jsx-closing-bracket-location": 2, - "compat/react-jsx-closing-tag-location": 2, - "compat/react-jsx-curly-spacing": 2, - "compat/react-jsx-equals-spacing": 2, - "compat/react-jsx-first-prop-new-line": 2, - "compat/react-jsx-indent": [ - 2, - 2, - { - "checkAttributes": true, - "indentLogicalExpressions": true - } - ], - "compat/react-jsx-indent-props": [ - 2, - 2 - ], - "compat/react-jsx-no-leaked-render": 2, - "compat/react-jsx-props-no-multi-spaces": 2, - "compat/react-jsx-tag-spacing": 2, - "compat/react-no-unused-prop-types": 2, - "compat/typescript-eslint-naming-convention": [ + "@shopify/cli/naming-convention": [ "error", { "selector": "interface", - "format": [ - "PascalCase" - ], + "format": ["PascalCase"], "custom": { "regex": "^Props", "match": false @@ -1341,31 +1261,56 @@ } }, { - "files": [ - "packages/cli/bin/*.js" - ], + "files": ["packages/cli/src/**/*.ts"], "rules": { - "compat/shopify-strict-component-boundaries": "off" + "@shopify/cli/module-boundaries": "off" } }, { - "files": [ - "packages/cli/src/**/*.ts" - ], + "files": ["**/api/graphql/**/generated/*.ts"], "rules": { - "compat/nx-enforce-module-boundaries": "off" + "typescript/consistent-type-definitions": "off" } }, { - "files": [ - "**/api/graphql/**/generated/*.ts" - ], + "files": ["packages/eslint-plugin-cli/**/*.js"], "rules": { - "typescript/consistent-type-definitions": "off", - "compat/typescript-eslint-naming-convention": "off", - "typescript/no-duplicate-type-constituents": "off", - "typescript/no-redundant-type-constituents": "off", - "compat/nx-enforce-module-boundaries": "off" + "@shopify/cli/tsdoc-syntax": "off", + "@shopify/cli/no-implicit-globals": [ + "error", + { + "lexicalBindings": false + } + ], + "@shopify/cli/no-redeclare": [ + "error", + { + "builtinGlobals": true + } + ], + "@shopify/cli/module-boundaries": "error" + } + }, + { + "files": ["packages/eslint-plugin-cli/config.js", "packages/eslint-plugin-cli/oxlint-typescript-services.js"], + "rules": { + "@shopify/cli/no-process-cwd": "off" + } + }, + { + "files": ["packages/eslint-plugin-cli/**/*.test.js"], + "env": { + "vitest": true + }, + "rules": {} + }, + { + "files": ["packages/eslint-plugin-cli/vite.config.ts"], + "rules": { + "typescript/no-unnecessary-type-assertion": "off", + "@shopify/cli/module-boundaries": "off", + "@shopify/cli/no-implicit-globals": "off", + "@shopify/cli/no-redeclare": "off" } } ] diff --git a/package.json b/package.json index 55a6cfb2e56..e1a6766c553 100644 --- a/package.json +++ b/package.json @@ -17,15 +17,13 @@ "graphql-codegen:get-graphql-schemas": "bin/get-graphql-schemas.js", "graphql-codegen": "nx run-many --target=graphql-codegen --all", "knip": "knip", - "lint:affected": "pnpm prettier && pnpm lint:oxlint && pnpm lint:eslint:affected", - "lint:eslint:affected": "nx affected --target=lint", - "lint:fix:affected": "pnpm lint:oxlint --fix && nx affected --target=lint:fix && pnpm prettier:fix", - "lint:fix": "pnpm lint:oxlint --fix && nx run-many --target=lint:fix --all --skip-nx-cache && pnpm prettier:fix", - "lint": "pnpm prettier && pnpm lint:oxlint && pnpm lint:eslint", - "lint:eslint": "nx run-many --target=lint --all", - "lint:oxlint": "nx graph --file .nx/oxlint-project-graph.json && oxlint --config oxlint.json --deny-warnings --report-unused-disable-directives packages/app/src packages/cli-kit/src packages/cli/src packages/create-app/src packages/organizations/src packages/plugin-cloudflare/src packages/plugin-did-you-mean/src packages/store/src packages/theme/src packages/ui-extensions-server-kit/src packages/ui-extensions-test-utils/src packages/cli/bin packages/e2e", - "prettier": "prettier --check \"packages/{app,cli-kit,cli,create-app,organizations,plugin-cloudflare,plugin-did-you-mean,store,theme,ui-extensions-server-kit,ui-extensions-test-utils}/src/**/*.{js,ts,tsx}\" \"packages/cli/bin/*.js\" \"packages/e2e/{setup,helpers,tests}/**/*.ts\" \"packages/e2e/*.ts\"", - "prettier:fix": "prettier --write \"packages/{app,cli-kit,cli,create-app,organizations,plugin-cloudflare,plugin-did-you-mean,store,theme,ui-extensions-server-kit,ui-extensions-test-utils}/src/**/*.{js,ts,tsx}\" \"packages/cli/bin/*.js\" \"packages/e2e/{setup,helpers,tests}/**/*.ts\" \"packages/e2e/*.ts\"", + "lint:affected": "pnpm prettier && nx affected --target=lint", + "lint:fix:affected": "nx affected --target=lint:fix && pnpm prettier:fix", + "lint:fix": "nx run-many --target=lint:fix --all --skip-nx-cache && pnpm prettier:fix", + "lint": "pnpm prettier && pnpm lint:oxlint", + "lint:oxlint": "oxlint --config oxlint.json --deny-warnings --report-unused-disable-directives packages/app/src packages/cli-kit/src packages/cli/src packages/create-app/src packages/organizations/src packages/plugin-cloudflare/src packages/plugin-did-you-mean/src packages/store/src packages/theme/src packages/ui-extensions-server-kit/src packages/ui-extensions-test-utils/src packages/cli/bin packages/e2e packages/eslint-plugin-cli && nx run workspace:lint", + "prettier": "prettier --check \"packages/{app,cli-kit,cli,create-app,organizations,plugin-cloudflare,plugin-did-you-mean,store,theme,ui-extensions-server-kit,ui-extensions-test-utils}/src/**/*.{js,mjs,ts,tsx}\" \"packages/cli/bin/*.js\" \"packages/e2e/{setup,helpers,tests}/**/*.ts\" \"packages/e2e/*.ts\" \"packages/eslint-plugin-cli/**/*.js\"", + "prettier:fix": "prettier --write \"packages/{app,cli-kit,cli,create-app,organizations,plugin-cloudflare,plugin-did-you-mean,store,theme,ui-extensions-server-kit,ui-extensions-test-utils}/src/**/*.{js,mjs,ts,tsx}\" \"packages/cli/bin/*.js\" \"packages/e2e/{setup,helpers,tests}/**/*.ts\" \"packages/e2e/*.ts\" \"packages/eslint-plugin-cli/**/*.js\"", "create-homebrew-pr": "bin/create-homebrew-pr.js", "refresh-code-documentation": "nx run-many --target=refresh-code-documentation --all --skip-nx-cache", "refresh-manifests": "nx run-many --target=refresh-manifests --all --skip-nx-cache && bin/prettify-manifests.js && pnpm refresh-readme", @@ -53,19 +51,14 @@ "@graphql-codegen/near-operation-file-preset": "4.0.0", "@graphql-codegen/typed-document-node": "6.1.8", "@graphql-codegen/typescript-operations": "5.1.0", - "@nx/eslint-plugin": "22.7.7", "@nx/workspace": "22.7.7", "@octokit/rest": "22.0.1", - "@shopify/eslint-plugin-cli": "file:packages/eslint-plugin-cli", "@shopify/generate-docs": "1.2.3", "@types/node": "22.20.1", - "@typescript-eslint/parser": "8.56.1", "@vitest/coverage-istanbul": "^3.2.7", "bugsnag-build-reporter": "^2.0.0", "commander": "^9.4.0", "esbuild": "0.28.1", - "eslint": "^9.39.5", - "eslint-plugin-jsdoc": "50.8.0", "execa": "^7.2.0", "fast-glob": "3.3.3", "find-up": "^6.3.0", @@ -130,14 +123,6 @@ "resolutions": { "@types/react": "18.3.12", "vite": "6.4.3", - "@typescript-eslint/utils": "8.56.1", - "@typescript-eslint/type-utils": "8.56.1", - "@typescript-eslint/typescript-estree": "8.56.1", - "@typescript-eslint/types": "8.56.1", - "@typescript-eslint/scope-manager": "8.56.1", - "@typescript-eslint/visitor-keys": "8.56.1", - "@typescript-eslint/project-service": "8.56.1", - "@typescript-eslint/tsconfig-utils": "8.56.1", "@aws-sdk/core": "3.974.6", "@aws-sdk/credential-provider-env": "3.972.32", "@aws-sdk/credential-provider-http": "3.972.34", @@ -184,17 +169,11 @@ "packages/eslint-plugin-cli", "packages/e2e" ], - "paths": { - "@shopify/eslint-plugin-cli/configs": [ - "./packages/eslint-plugin-cli/config.js" - ] - }, "workspaces": { ".": { "entry": [ "bin/**/*.js", - "configurations/vite.config.ts", - "eslint.codegen.config.js" + "configurations/vite.config.ts" ], "ignoreBinaries": [ "bin/*", diff --git a/packages/app/package.json b/packages/app/package.json index 4c4ae4293db..5f55f112252 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -49,11 +49,6 @@ "vitest": "vitest", "type-check": "nx type-check" }, - "eslintConfig": { - "extends": [ - "../../.eslintrc.cjs" - ] - }, "dependencies": { "@graphql-typed-document-node/core": "3.2.0", "@luckycatfactory/esbuild-graphql-loader": "3.8.1", diff --git a/packages/app/project.json b/packages/app/project.json index 45dca8d85e6..72d624eab8e 100644 --- a/packages/app/project.json +++ b/packages/app/project.json @@ -37,14 +37,14 @@ "lint": { "executor": "nx:run-commands", "options": { - "command": "pnpm eslint src", + "command": "pnpm oxlint --config ../../oxlint.json --deny-warnings src", "cwd": "packages/app" } }, "lint:fix": { "executor": "nx:run-commands", "options": { - "command": "pnpm eslint src --fix", + "command": "pnpm oxlint --config ../../oxlint.json --deny-warnings src --fix", "cwd": "packages/app" } }, diff --git a/packages/app/src/cli/api/graphql/app-dev/generated/dev-session-create.ts b/packages/app/src/cli/api/graphql/app-dev/generated/dev-session-create.ts index 90ddf3fa375..bbee5450989 100644 --- a/packages/app/src/cli/api/graphql/app-dev/generated/dev-session-create.ts +++ b/packages/app/src/cli/api/graphql/app-dev/generated/dev-session-create.ts @@ -1,6 +1,6 @@ import * as Types from './types.js' -import {JsonMapType} from '@shopify/cli-kit/node/toml' +import {JsonMapType} from '@shopify/cli-kit/node/toml' import {TypedDocumentNode as DocumentNode} from '@graphql-typed-document-node/core' export type DevSessionCreateMutationVariables = Types.Exact<{ diff --git a/packages/app/src/cli/api/graphql/app-dev/generated/dev-session-update.ts b/packages/app/src/cli/api/graphql/app-dev/generated/dev-session-update.ts index cc50be78016..7cb9288ef58 100644 --- a/packages/app/src/cli/api/graphql/app-dev/generated/dev-session-update.ts +++ b/packages/app/src/cli/api/graphql/app-dev/generated/dev-session-update.ts @@ -1,6 +1,6 @@ import * as Types from './types.js' -import {JsonMapType} from '@shopify/cli-kit/node/toml' +import {JsonMapType} from '@shopify/cli-kit/node/toml' import {TypedDocumentNode as DocumentNode} from '@graphql-typed-document-node/core' export type DevSessionUpdateMutationVariables = Types.Exact<{ diff --git a/packages/app/src/cli/api/graphql/app-management/generated/active-app-release-from-api-key.ts b/packages/app/src/cli/api/graphql/app-management/generated/active-app-release-from-api-key.ts index 084173d7138..eb771b190ce 100644 --- a/packages/app/src/cli/api/graphql/app-management/generated/active-app-release-from-api-key.ts +++ b/packages/app/src/cli/api/graphql/app-management/generated/active-app-release-from-api-key.ts @@ -1,6 +1,6 @@ import * as Types from './types.js' -import {JsonMapType} from '@shopify/cli-kit/node/toml' +import {JsonMapType} from '@shopify/cli-kit/node/toml' import {TypedDocumentNode as DocumentNode} from '@graphql-typed-document-node/core' export type ActiveAppReleaseFromApiKeyQueryVariables = Types.Exact<{ diff --git a/packages/app/src/cli/api/graphql/app-management/generated/active-app-release.ts b/packages/app/src/cli/api/graphql/app-management/generated/active-app-release.ts index 5be1993b37f..422cf22a3c6 100644 --- a/packages/app/src/cli/api/graphql/app-management/generated/active-app-release.ts +++ b/packages/app/src/cli/api/graphql/app-management/generated/active-app-release.ts @@ -1,6 +1,6 @@ import * as Types from './types.js' -import {JsonMapType} from '@shopify/cli-kit/node/toml' +import {JsonMapType} from '@shopify/cli-kit/node/toml' import {TypedDocumentNode as DocumentNode} from '@graphql-typed-document-node/core' export type ActiveAppReleaseQueryVariables = Types.Exact<{ diff --git a/packages/app/src/cli/api/graphql/app-management/generated/app-version-by-id.ts b/packages/app/src/cli/api/graphql/app-management/generated/app-version-by-id.ts index 23bee3a911b..994de9d0825 100644 --- a/packages/app/src/cli/api/graphql/app-management/generated/app-version-by-id.ts +++ b/packages/app/src/cli/api/graphql/app-management/generated/app-version-by-id.ts @@ -1,6 +1,6 @@ import * as Types from './types.js' -import {JsonMapType} from '@shopify/cli-kit/node/toml' +import {JsonMapType} from '@shopify/cli-kit/node/toml' import {TypedDocumentNode as DocumentNode} from '@graphql-typed-document-node/core' export type AppVersionByIdQueryVariables = Types.Exact<{ diff --git a/packages/app/src/cli/api/graphql/app-management/generated/app-version-by-tag.ts b/packages/app/src/cli/api/graphql/app-management/generated/app-version-by-tag.ts index d968494ab3c..1085a18b30c 100644 --- a/packages/app/src/cli/api/graphql/app-management/generated/app-version-by-tag.ts +++ b/packages/app/src/cli/api/graphql/app-management/generated/app-version-by-tag.ts @@ -1,6 +1,6 @@ import * as Types from './types.js' -import {JsonMapType} from '@shopify/cli-kit/node/toml' +import {JsonMapType} from '@shopify/cli-kit/node/toml' import {TypedDocumentNode as DocumentNode} from '@graphql-typed-document-node/core' export type AppVersionByTagQueryVariables = Types.Exact<{ diff --git a/packages/app/src/cli/api/graphql/app-management/generated/create-app-version.ts b/packages/app/src/cli/api/graphql/app-management/generated/create-app-version.ts index b423c09910a..15f9dce82c2 100644 --- a/packages/app/src/cli/api/graphql/app-management/generated/create-app-version.ts +++ b/packages/app/src/cli/api/graphql/app-management/generated/create-app-version.ts @@ -1,6 +1,6 @@ import * as Types from './types.js' -import {JsonMapType} from '@shopify/cli-kit/node/toml' +import {JsonMapType} from '@shopify/cli-kit/node/toml' import {TypedDocumentNode as DocumentNode} from '@graphql-typed-document-node/core' export type CreateAppVersionMutationVariables = Types.Exact<{ diff --git a/packages/app/src/cli/api/graphql/app-management/generated/create-app.ts b/packages/app/src/cli/api/graphql/app-management/generated/create-app.ts index d6f4d3fa571..67537aa2495 100644 --- a/packages/app/src/cli/api/graphql/app-management/generated/create-app.ts +++ b/packages/app/src/cli/api/graphql/app-management/generated/create-app.ts @@ -1,6 +1,6 @@ import * as Types from './types.js' -import {JsonMapType} from '@shopify/cli-kit/node/toml' +import {JsonMapType} from '@shopify/cli-kit/node/toml' import {TypedDocumentNode as DocumentNode} from '@graphql-typed-document-node/core' export type CreateAppMutationVariables = Types.Exact<{ diff --git a/packages/app/src/cli/api/graphql/app-management/generated/release-version.ts b/packages/app/src/cli/api/graphql/app-management/generated/release-version.ts index 4c432f877dc..41dd7ceac10 100644 --- a/packages/app/src/cli/api/graphql/app-management/generated/release-version.ts +++ b/packages/app/src/cli/api/graphql/app-management/generated/release-version.ts @@ -1,6 +1,6 @@ import * as Types from './types.js' -import {JsonMapType} from '@shopify/cli-kit/node/toml' +import {JsonMapType} from '@shopify/cli-kit/node/toml' import {TypedDocumentNode as DocumentNode} from '@graphql-typed-document-node/core' export type ReleaseVersionMutationVariables = Types.Exact<{ diff --git a/packages/app/src/cli/commands/app/app-logs/sources.test.ts b/packages/app/src/cli/commands/app/app-logs/sources.test.ts index 1393255dd87..a9355df6258 100644 --- a/packages/app/src/cli/commands/app/app-logs/sources.test.ts +++ b/packages/app/src/cli/commands/app/app-logs/sources.test.ts @@ -4,7 +4,6 @@ import {Config} from '@oclif/core' import {afterEach, expect, test, vi} from 'vitest' import {formatSection} from '@shopify/cli-kit/node/output' import {mockAndCaptureOutput} from '@shopify/cli-kit/node/testing/output' -// eslint-disable-next-line compat/n-prefer-global-console import {Console} from 'node:console' vi.mock('../../../services/app-context.js') @@ -26,14 +25,14 @@ function captureStandardStreams() { const stdout: string[] = [] const stderr: string[] = [] - const stdoutSpy = vi.spyOn(process.stdout, 'write').mockImplementation(((chunk: string | Uint8Array) => { + const stdoutSpy = vi.spyOn(process.stdout, 'write').mockImplementation((chunk: string | Uint8Array) => { stdout.push(typeof chunk === 'string' ? chunk : Buffer.from(chunk).toString('utf8')) return true - }) as typeof process.stdout.write) - const stderrSpy = vi.spyOn(process.stderr, 'write').mockImplementation(((chunk: string | Uint8Array) => { + }) + const stderrSpy = vi.spyOn(process.stderr, 'write').mockImplementation((chunk: string | Uint8Array) => { stderr.push(typeof chunk === 'string' ? chunk : Buffer.from(chunk).toString('utf8')) return true - }) as typeof process.stderr.write) + }) // Vitest intercepts console.warn; use Node's console to exercise the captured streams. const warnSpy = vi.spyOn(console, 'warn').mockImplementation(new Console(process.stdout, process.stderr).warn) diff --git a/packages/app/src/cli/commands/app/logs.ts b/packages/app/src/cli/commands/app/logs.ts index 54539ec1275..d9d78256b23 100644 --- a/packages/app/src/cli/commands/app/logs.ts +++ b/packages/app/src/cli/commands/app/logs.ts @@ -69,6 +69,7 @@ export default class Logs extends AppLinkedCommand { storeFqdns: flags.store, sources: flags.source, status: flags.status, + // eslint-disable-next-line typescript/no-unnecessary-type-assertion -- Preserve the literal-union type when building the options object. format: (flags.json ? 'json' : 'text') as Format, } diff --git a/packages/app/src/cli/commands/app/security/check.integration.test.ts b/packages/app/src/cli/commands/app/security/check.integration.test.ts index 3b78c128f94..57b71e130da 100644 --- a/packages/app/src/cli/commands/app/security/check.integration.test.ts +++ b/packages/app/src/cli/commands/app/security/check.integration.test.ts @@ -10,7 +10,6 @@ import {unstyled} from '@shopify/cli-kit/node/output' import {joinPath, normalizePath} from '@shopify/cli-kit/node/path' import {describe, expect, test, vi} from 'vitest' import {mkdir, readFile, writeFile} from 'node:fs/promises' -// eslint-disable-next-line compat/n-prefer-global-console import {Console} from 'node:console' // Exercise actual stdout/stderr instead of CLI-kit's unit-test log collector. diff --git a/packages/app/src/cli/hooks/public_metadata.ts b/packages/app/src/cli/hooks/public_metadata.ts index 03b0a8bc7b2..f96cc6032fa 100644 --- a/packages/app/src/cli/hooks/public_metadata.ts +++ b/packages/app/src/cli/hooks/public_metadata.ts @@ -16,7 +16,7 @@ async function logAppContextMetadata(directory: string): Promise { timer = setTimeout(resolve, APP_CONTEXT_METADATA_TIMEOUT_MS) }), ]) - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch { // Metadata is strictly best-effort: never surface errors or affect the command. } finally { diff --git a/packages/app/src/cli/models/app/app.test-data.ts b/packages/app/src/cli/models/app/app.test-data.ts index a2efc77064e..79f77d47aa9 100644 --- a/packages/app/src/cli/models/app/app.test-data.ts +++ b/packages/app/src/cli/models/app/app.test-data.ts @@ -140,7 +140,7 @@ export function testAppWithConfig(options?: TestAppWithConfigOptions): AppLinked app.configuration = { ...DEFAULT_CONFIG, ...options?.config, - } as CurrentAppConfiguration + } return app } @@ -274,7 +274,7 @@ export async function testUIExtension( const specification = allSpecs.find((spec) => spec.identifier === configuration.type)! const extension = new ExtensionInstance({ - configuration: configuration as BaseConfigType, + configuration, configurationPath, entryPath, directory, diff --git a/packages/app/src/cli/models/app/identifiers.ts b/packages/app/src/cli/models/app/identifiers.ts index e1d43f8e278..b64f7a810ac 100644 --- a/packages/app/src/cli/models/app/identifiers.ts +++ b/packages/app/src/cli/models/app/identifiers.ts @@ -59,7 +59,6 @@ export async function updateAppIdentifiers( const updatedEnvFileContent = patchEnvFile(envFileContent, updatedVariables) await writeFile(dotenvFile.path, updatedEnvFileContent) - // eslint-disable-next-line compat/require-atomic-updates app.dotenv = dotenvFile } diff --git a/packages/app/src/cli/models/app/loader.ts b/packages/app/src/cli/models/app/loader.ts index 1940b0907f0..776ae74c580 100644 --- a/packages/app/src/cli/models/app/loader.ts +++ b/packages/app/src/cli/models/app/loader.ts @@ -9,7 +9,6 @@ import { CurrentAppConfiguration, getAppVersionedSchema, AppSchema, - SchemaForConfig, AppLinkedInterface, } from './app.js' import {parseStructuredErrors} from './error-parsing.js' @@ -303,7 +302,7 @@ export async function loadAppFromContext + const configSchema = appVersionedSchema const configurationPath = activeConfig.file.path const configurationFileName = basename(configurationPath) as AppConfigurationFileName @@ -321,7 +320,7 @@ export async function loadAppFromContext { function instanceFor(specification: ExtensionSpecification): ExtensionInstance { return new ExtensionInstance({ - configuration: {name: 'test extension', type: specification.identifier} as BaseConfigType, + configuration: {name: 'test extension', type: specification.identifier}, configurationPath: '', directory: '/tmp/test-extension', specification, diff --git a/packages/app/src/cli/models/extensions/extension-instance.ts b/packages/app/src/cli/models/extensions/extension-instance.ts index 54a14f89095..11220e86dba 100644 --- a/packages/app/src/cli/models/extensions/extension-instance.ts +++ b/packages/app/src/cli/models/extensions/extension-instance.ts @@ -518,7 +518,7 @@ export class ExtensionInstance, + schema: zod.any({}), appModuleFeatures: spec.appModuleFeatures, experience: spec.experience, clientSteps: spec.clientSteps, diff --git a/packages/app/src/cli/models/extensions/specifications/app_config_privacy_compliance_webhooks.ts b/packages/app/src/cli/models/extensions/specifications/app_config_privacy_compliance_webhooks.ts index 83d12d30eeb..2493eb6fc9a 100644 --- a/packages/app/src/cli/models/extensions/specifications/app_config_privacy_compliance_webhooks.ts +++ b/packages/app/src/cli/models/extensions/specifications/app_config_privacy_compliance_webhooks.ts @@ -39,7 +39,7 @@ function transformToPrivacyComplianceWebhooksModule(content: object, appConfigur if (Object.keys(urls).length === 0) { return urls } else { - // eslint-disable-next-line compat/typescript-eslint-naming-convention + // eslint-disable-next-line @shopify/cli/naming-convention const {api_version} = webhooks return { api_version, diff --git a/packages/app/src/cli/models/extensions/specifications/function.test.ts b/packages/app/src/cli/models/extensions/specifications/function.test.ts index 58a5528a5a7..45bb8ef3503 100644 --- a/packages/app/src/cli/models/extensions/specifications/function.test.ts +++ b/packages/app/src/cli/models/extensions/specifications/function.test.ts @@ -357,7 +357,7 @@ describe('functionConfiguration', () => { // When const extension = await testFunctionExtension({ dir: '/function', - config: configWithTypegen as FunctionConfigType, + config: configWithTypegen, }) // Then @@ -380,7 +380,7 @@ describe('functionConfiguration', () => { // When const extension = await testFunctionExtension({ dir: '/function', - config: configWithoutBuild as FunctionConfigType, + config: configWithoutBuild, }) // Then diff --git a/packages/app/src/cli/models/extensions/specifications/payments_app_extension_schemas/card_present_payments_app_extension_schema.test.ts b/packages/app/src/cli/models/extensions/specifications/payments_app_extension_schemas/card_present_payments_app_extension_schema.test.ts index 90d7b9713b5..de7f4c208a0 100644 --- a/packages/app/src/cli/models/extensions/specifications/payments_app_extension_schemas/card_present_payments_app_extension_schema.test.ts +++ b/packages/app/src/cli/models/extensions/specifications/payments_app_extension_schemas/card_present_payments_app_extension_schema.test.ts @@ -51,7 +51,7 @@ describe('CardPresentPaymentsAppExtensionSchema', () => { }) test('returns an error if payment_session_url is not provided', async () => { - // eslint-disable-next-line compat/typescript-eslint-naming-convention + // eslint-disable-next-line @shopify/cli/naming-convention const {payment_session_url, ...rest} = config expect(() => CardPresentPaymentsAppExtensionSchema.parse({ @@ -71,7 +71,7 @@ describe('CardPresentPaymentsAppExtensionSchema', () => { }) test('returns an error if refund_session_url is not provided', async () => { - // eslint-disable-next-line compat/typescript-eslint-naming-convention + // eslint-disable-next-line @shopify/cli/naming-convention const {refund_session_url, ...rest} = config expect(() => CardPresentPaymentsAppExtensionSchema.parse({ @@ -91,7 +91,7 @@ describe('CardPresentPaymentsAppExtensionSchema', () => { }) test('returns an error if capture_session_url is not provided', async () => { - // eslint-disable-next-line compat/typescript-eslint-naming-convention + // eslint-disable-next-line @shopify/cli/naming-convention const {capture_session_url, ...rest} = config expect(() => CardPresentPaymentsAppExtensionSchema.parse({ @@ -111,7 +111,7 @@ describe('CardPresentPaymentsAppExtensionSchema', () => { }) test('returns an error if void_session_url is not provided', async () => { - // eslint-disable-next-line compat/typescript-eslint-naming-convention + // eslint-disable-next-line @shopify/cli/naming-convention const {void_session_url, ...rest} = config expect(() => CardPresentPaymentsAppExtensionSchema.parse({ @@ -131,7 +131,7 @@ describe('CardPresentPaymentsAppExtensionSchema', () => { }) test('validates with optional sync_terminal_transaction_result_url', async () => { - // eslint-disable-next-line compat/typescript-eslint-naming-convention + // eslint-disable-next-line @shopify/cli/naming-convention const {sync_terminal_transaction_result_url, ...rest} = config const {success} = CardPresentPaymentsAppExtensionSchema.safeParse({ ...rest, diff --git a/packages/app/src/cli/models/extensions/specifications/payments_app_extension_schemas/credit_card_payments_app_extension_schema.test.ts b/packages/app/src/cli/models/extensions/specifications/payments_app_extension_schemas/credit_card_payments_app_extension_schema.test.ts index 156112c60bb..5d589027c07 100644 --- a/packages/app/src/cli/models/extensions/specifications/payments_app_extension_schemas/credit_card_payments_app_extension_schema.test.ts +++ b/packages/app/src/cli/models/extensions/specifications/payments_app_extension_schemas/credit_card_payments_app_extension_schema.test.ts @@ -91,7 +91,7 @@ describe('CreditCardPaymentsAppExtensionSchema', () => { test('returns an error if encryption certificate fingerprint is not present', async () => { // When/Then - // eslint-disable-next-line compat/typescript-eslint-naming-convention + // eslint-disable-next-line @shopify/cli/naming-convention const {encryption_certificate_fingerprint, ...rest} = config expect(() => CreditCardPaymentsAppExtensionSchema.parse({ diff --git a/packages/app/src/cli/models/extensions/specifications/payments_app_extension_schemas/custom_credit_card_payments_app_extension_schema.test.ts b/packages/app/src/cli/models/extensions/specifications/payments_app_extension_schemas/custom_credit_card_payments_app_extension_schema.test.ts index 86f9c143e0c..620d0aaf3a5 100644 --- a/packages/app/src/cli/models/extensions/specifications/payments_app_extension_schemas/custom_credit_card_payments_app_extension_schema.test.ts +++ b/packages/app/src/cli/models/extensions/specifications/payments_app_extension_schemas/custom_credit_card_payments_app_extension_schema.test.ts @@ -92,7 +92,7 @@ describe('CustomCreditCardPaymentsAppExtensionSchema', () => { test('returns an error if encryption certificate fingerprint is not present', async () => { // When/Then - // eslint-disable-next-line compat/typescript-eslint-naming-convention + // eslint-disable-next-line @shopify/cli/naming-convention const {encryption_certificate_fingerprint, ...rest} = config expect(() => CustomCreditCardPaymentsAppExtensionSchema.parse({ diff --git a/packages/app/src/cli/models/extensions/specifications/transform/app_config_webhook.ts b/packages/app/src/cli/models/extensions/specifications/transform/app_config_webhook.ts index e7f632918e8..5afd209c233 100644 --- a/packages/app/src/cli/models/extensions/specifications/transform/app_config_webhook.ts +++ b/packages/app/src/cli/models/extensions/specifications/transform/app_config_webhook.ts @@ -5,7 +5,7 @@ export function transformFromWebhookConfig(content: object) { const webhooks = getPathValue(content, 'webhooks') as WebhooksConfig if (!webhooks) return content - // eslint-disable-next-line compat/typescript-eslint-naming-convention + // eslint-disable-next-line @shopify/cli/naming-convention const {api_version} = webhooks return {api_version} @@ -33,14 +33,14 @@ export function mergeAllWebhooks(subscriptions: WebhookSubscription[]): WebhookS if (subscriptions.length === 0) return const topicSubscriptions = subscriptions .filter((subscription) => subscription.topics !== undefined) - // eslint-disable-next-line compat/typescript-eslint-naming-convention + // eslint-disable-next-line @shopify/cli/naming-convention .flatMap(({compliance_topics, topics, ...rest}) => { const sortedTopics = sortArrayAlphabetically(topics) return sortedTopics?.map((topic) => ({topics: [topic], ...rest})) ?? [] }) const complianceSubscriptions = subscriptions .filter((subscription) => subscription.topics === undefined || subscription.compliance_topics !== undefined) - // eslint-disable-next-line compat/typescript-eslint-naming-convention + // eslint-disable-next-line @shopify/cli/naming-convention .map(({compliance_topics, topics, ...rest}) => { return {compliance_topics, ...rest} }) @@ -81,7 +81,7 @@ export function reduceWebhooks( const existingSubscription = findSubscription(accumulator, subscription) if (existingSubscription) { if (property && subscription?.[property]?.length) { - // eslint-disable-next-line compat/typescript-eslint-no-unnecessary-type-assertion + // eslint-disable-next-line typescript/no-unnecessary-type-assertion existingSubscription[property]?.push(...subscription[property]!) } else { if (subscription.topics) { diff --git a/packages/app/src/cli/models/extensions/specifications/type-generation.ts b/packages/app/src/cli/models/extensions/specifications/type-generation.ts index 367a962e26d..f57f2beec56 100644 --- a/packages/app/src/cli/models/extensions/specifications/type-generation.ts +++ b/packages/app/src/cli/models/extensions/specifications/type-generation.ts @@ -336,7 +336,7 @@ async function targetExportsShopifyGlobal(targetDtsPath: string): Promise { try { files.push(await TomlFile.read(filePath)) - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch (err) { const tomlError = err instanceof TomlFileError ? err : new TomlFileError(filePath, `Failed to read ${filePath}`) const file = new TomlFile(filePath, {}) @@ -245,7 +245,7 @@ async function discoverDotEnvFiles(directory: string): Promise { const raw = await readFile(hiddenPath) return JSON.parse(raw) as JsonMapType } - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch { // Parse errors are not fatal } diff --git a/packages/app/src/cli/prompts/generate/extension.ts b/packages/app/src/cli/prompts/generate/extension.ts index b457c0d345f..9da41bc8478 100644 --- a/packages/app/src/cli/prompts/generate/extension.ts +++ b/packages/app/src/cli/prompts/generate/extension.ts @@ -30,7 +30,7 @@ export interface GenerateExtensionContentOutput { } export function buildChoices(extensionTemplates: ExtensionTemplate[], unavailableExtensions: ExtensionTemplate[] = []) { - type ArrElement = TArrType extends ReadonlyArray ? ElementType : never + type ArrElement = TArrType extends ReadonlyArray ? TElementType : never const templateSpecChoices = [ ...extensionTemplates.map((spec) => { @@ -82,7 +82,6 @@ const generateExtensionPrompts = async ( throw new AbortError('You have reached the limit for the number of extensions you can create.') } - // eslint-disable-next-line compat/require-atomic-updates templateType = await renderAutocompletePrompt({ message: 'Type of extension?', choices: buildChoices(extensionTemplates, options.unavailableExtensions), diff --git a/packages/app/src/cli/services/admin-link/extension-config-builder.ts b/packages/app/src/cli/services/admin-link/extension-config-builder.ts index a77295ca087..26375ee53c4 100644 --- a/packages/app/src/cli/services/admin-link/extension-config-builder.ts +++ b/packages/app/src/cli/services/admin-link/extension-config-builder.ts @@ -33,7 +33,7 @@ export function buildExtensionConfig( fullUrl.search = linkUrl.search fullUrl.hash = linkUrl.hash config.url = fullUrl.toString() - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch (error) { // Keep original URL if parsing fails } diff --git a/packages/app/src/cli/services/app-logs/dev/poll-app-logs.ts b/packages/app/src/cli/services/app-logs/dev/poll-app-logs.ts index 8f9730afc6e..c667f21145e 100644 --- a/packages/app/src/cli/services/app-logs/dev/poll-app-logs.ts +++ b/packages/app/src/cli/services/app-logs/dev/poll-app-logs.ts @@ -143,7 +143,7 @@ export const pollAppLogs = async ({ outputDebug(`Unexpected error during polling: ${error}}\n`) }) }, retryIntervalMs) - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch (error) { outputWarn(`Error while polling app logs.`, stdout) outputWarn(`Retrying in ${POLLING_ERROR_RETRY_INTERVAL_MS / 1000} seconds.`, stdout) diff --git a/packages/app/src/cli/services/app-logs/logs-command/ui/components/hooks/usePollAppLogs.ts b/packages/app/src/cli/services/app-logs/logs-command/ui/components/hooks/usePollAppLogs.ts index 37a24dbd9fd..31002b5a531 100644 --- a/packages/app/src/cli/services/app-logs/logs-command/ui/components/hooks/usePollAppLogs.ts +++ b/packages/app/src/cli/services/app-logs/logs-command/ui/components/hooks/usePollAppLogs.ts @@ -180,9 +180,9 @@ export function usePollAppLogs({ } // ESLint is concerned about these updates being atomic, but the approach to useSelfAdjustingInterval ensures that is the case. - // eslint-disable-next-line compat/require-atomic-updates + nextJwtToken.current = res.nextJwtToken - // eslint-disable-next-line compat/require-atomic-updates + cursor.current = res.cursor retryIntervalMs.current = res.retryIntervalMs diff --git a/packages/app/src/cli/services/app-logs/logs-command/ui/components/hooks/useSelfAdjustingInterval.test.tsx b/packages/app/src/cli/services/app-logs/logs-command/ui/components/hooks/useSelfAdjustingInterval.test.tsx index 1beaa1d2b29..a4fd3ccb7f6 100644 --- a/packages/app/src/cli/services/app-logs/logs-command/ui/components/hooks/useSelfAdjustingInterval.test.tsx +++ b/packages/app/src/cli/services/app-logs/logs-command/ui/components/hooks/useSelfAdjustingInterval.test.tsx @@ -16,7 +16,7 @@ function renderHook(renderHookCallback: () => THookResult) { try { const hookResult = renderHookCallback() result.lastResult = hookResult - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch (errorFromHook) { result.lastError = errorFromHook } diff --git a/packages/app/src/cli/services/app-logs/utils.ts b/packages/app/src/cli/services/app-logs/utils.ts index 558995447e5..653596326be 100644 --- a/packages/app/src/cli/services/app-logs/utils.ts +++ b/packages/app/src/cli/services/app-logs/utils.ts @@ -126,7 +126,7 @@ export const handleFetchAppLogsError = async ( try { nextJwtToken = await input.onResubscribe() resubscribeResult = 'succeeded' - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch (resubscribeError) { outputDebug(`Failed to resubscribe to app logs: ${resubscribeError}`) retryIntervalMs = POLLING_THROTTLE_RETRY_INTERVAL_MS @@ -260,7 +260,7 @@ export function prettyPrintJsonIfPossible(json: unknown): string | undefined { const parseJson = (json: string): object | string => { try { return JSON.parse(json) - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch (error) { return json } diff --git a/packages/app/src/cli/services/app-security-engine/checks/embedded.ts b/packages/app/src/cli/services/app-security-engine/checks/embedded.ts index d7c5aaa9de2..bd8541aed7a 100644 --- a/packages/app/src/cli/services/app-security-engine/checks/embedded.ts +++ b/packages/app/src/cli/services/app-security-engine/checks/embedded.ts @@ -1,6 +1,6 @@ // AUTO-GENERATED by app-security-engine/embed-checks.mjs — do not edit. // Sources of truth: adjacent checks/*.md files and ../INSTRUCTIONS.md. -/* eslint-disable compat/no-restricted-syntax, no-template-curly-in-string */ +/* eslint-disable @shopify/cli/restricted-syntax, no-template-curly-in-string */ // prettier-ignore export const EMBEDDED_CHECK_SOURCES: ReadonlyArray = [ diff --git a/packages/app/src/cli/services/app-security-engine/embed-checks.mjs b/packages/app/src/cli/services/app-security-engine/embed-checks.mjs index 514b41ad79d..2f0e8850086 100644 --- a/packages/app/src/cli/services/app-security-engine/embed-checks.mjs +++ b/packages/app/src/cli/services/app-security-engine/embed-checks.mjs @@ -21,7 +21,7 @@ const instructions = readFileSync(instructionsPath, 'utf8') const output = `// AUTO-GENERATED by app-security-engine/embed-checks.mjs — do not edit. // Sources of truth: adjacent checks/*.md files and ../INSTRUCTIONS.md. -/* eslint-disable compat/no-restricted-syntax, no-template-curly-in-string */ +/* eslint-disable @shopify/cli/restricted-syntax, no-template-curly-in-string */ // prettier-ignore export const EMBEDDED_CHECK_SOURCES: ReadonlyArray = ${JSON.stringify(sources, null, 2)}; diff --git a/packages/app/src/cli/services/app-security-engine/rules/config-rules.ts b/packages/app/src/cli/services/app-security-engine/rules/config-rules.ts index 297ff432c61..fc69aeecad4 100644 --- a/packages/app/src/cli/services/app-security-engine/rules/config-rules.ts +++ b/packages/app/src/cli/services/app-security-engine/rules/config-rules.ts @@ -87,7 +87,7 @@ function isSafeConfiguredUrl(value: string, webhook: boolean): boolean { if (url.username || url.password || url.hash) return false return url.pathname.startsWith('/') && !url.pathname.includes('*') // URL construction is intentionally validation: malformed input is unsafe. - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch { return false } diff --git a/packages/app/src/cli/services/app-security-engine/rules/liquid-rules.ts b/packages/app/src/cli/services/app-security-engine/rules/liquid-rules.ts index 1c9f1e4eb2c..024bdf5812e 100644 --- a/packages/app/src/cli/services/app-security-engine/rules/liquid-rules.ts +++ b/packages/app/src/cli/services/app-security-engine/rules/liquid-rules.ts @@ -21,7 +21,7 @@ export function scanLiquidSecurity(files: SourceFile[]): LiquidScanResult { try { ast = toLiquidHTMLAST(file.content) // Parser failures are coverage gaps and are handed to the agent tier. - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch { parserFailures.push(file.path) continue diff --git a/packages/app/src/cli/services/app-security-engine/scanners/discover.ts b/packages/app/src/cli/services/app-security-engine/scanners/discover.ts index 1aea42861aa..2c83af02bee 100644 --- a/packages/app/src/cli/services/app-security-engine/scanners/discover.ts +++ b/packages/app/src/cli/services/app-security-engine/scanners/discover.ts @@ -54,7 +54,7 @@ export function loadAppToml(appConfigFilePath: string, appDirectory: string): Ap const raw = decodeToml(content) as Record return parseAppToml(raw, appConfigFilePath, content, appDirectory) // Invalid repository TOML is a coverage gap, not a scanner crash. - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch { recordSkippedFile(appConfigFilePath, { ok: false, @@ -189,7 +189,7 @@ function readDirectoryEntries(absolutePath: string, isScanDirectory: boolean): D try { return readdirSync(absolutePath, {withFileTypes: true}) // An unreadable directory is a coverage gap, not a scanner crash. - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch (error) { recordSkippedFile(absolutePath, { ok: false, @@ -410,7 +410,7 @@ export function findExtensions(appRoot: string, repositoryFiles: ReadonlyArray MAX_REPOSITORY_FILE_SIZE_BYTES) return {ok: false, reason: 'too_large', sizeBytes: size} return {ok: true, content: readFileSync(path)} // Discovery records unreadable files as scan coverage gaps. - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch (error) { return { ok: false, @@ -537,7 +537,7 @@ function inspectRepositoryPath(scanDirectory: string, path: string): InspectedPa let canonicalRoot: string try { canonicalRoot = realpathSync(absoluteRoot) - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch (error) { return {status: 'unresolved', reason: inspectErrorReason('scan directory', error)} } @@ -557,7 +557,7 @@ function inspectRepositoryPath(scanDirectory: string, path: string): InspectedPa return {status: 'unresolved', reason: `${display} is not a file`} } return {status: 'file', path: canonicalPath} - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch (error) { if (isMissingFilesystemEntry(error)) { return inspectMissingRepositoryPath(canonicalRoot, segments, display) @@ -587,7 +587,7 @@ function inspectMissingRepositoryPath(canonicalRoot: string, segments: string[], currentPath = canonicalPath // Discovery must distinguish a missing optional allowlist entry from an // entry that exists but cannot be inspected safely. - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch (error) { if (isMissingFilesystemEntry(error)) { // lstat succeeds for a dangling link, so ENOENT from realpath is an @@ -596,7 +596,7 @@ function inspectMissingRepositoryPath(canonicalRoot: string, segments: string[], if (lstatSync(currentPath).isSymbolicLink()) { return {status: 'unresolved', reason: `${display} contains a dangling symbolic link`} } - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch { return {status: 'missing'} } @@ -835,7 +835,7 @@ export function findDependencyAutomationInputs( if (!lstatSync(canonicalRoot).isDirectory()) { return {files: [], unresolvedReason: 'App root is not a directory'} } - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch (error) { return {files: [], unresolvedReason: inspectErrorReason('app root', error)} } @@ -907,7 +907,7 @@ export function findManifests(appRoot: string, discoveredPaths: ReadonlyArray { const {configSpecifications: specs} = await buildVersionedAppSchema() // First write - await writeAppConfigurationFile(REALISTIC_CONFIG as CurrentAppConfiguration, filePath) + await writeAppConfigurationFile(REALISTIC_CONFIG, filePath) // Read back through the full parse pipeline (which fires Zod transforms) const parsedConfig = await parseConfigAsCurrentApp(getAppVersionedSchema(specs), filePath) @@ -114,7 +114,7 @@ describe('Config pipeline snapshots', () => { const {configSpecifications: specs} = await buildVersionedAppSchema() // First write + read + second write (reordering happens here) - await writeAppConfigurationFile(REALISTIC_CONFIG as CurrentAppConfiguration, filePath) + await writeAppConfigurationFile(REALISTIC_CONFIG, filePath) const parsed1 = await parseConfigAsCurrentApp(getAppVersionedSchema(specs), filePath) await writeAppConfigurationFile(parsed1, filePath) const secondWrite = await readFile(filePath) @@ -160,7 +160,7 @@ describe('Config pipeline snapshots', () => { } // Snapshot the first write - await writeAppConfigurationFile(config as CurrentAppConfiguration, filePath) + await writeAppConfigurationFile(config, filePath) const firstWrite = await readFile(filePath) expect(firstWrite).toMatchSnapshot() @@ -194,7 +194,7 @@ describe('Config pipeline snapshots', () => { } // Write, read, write (first round-trip may reorder) - await writeAppConfigurationFile(config as CurrentAppConfiguration, filePath) + await writeAppConfigurationFile(config, filePath) const parsed1 = await parseConfigAsCurrentApp(getAppVersionedSchema(specs), filePath) await writeAppConfigurationFile(parsed1, filePath) const secondWrite = await readFile(filePath) @@ -250,7 +250,7 @@ describe('Config pipeline snapshots', () => { }, } - await writeAppConfigurationFile(config as CurrentAppConfiguration, filePath) + await writeAppConfigurationFile(config, filePath) const firstWrite = await readFile(filePath) expect(firstWrite).toMatchSnapshot() @@ -286,7 +286,7 @@ describe('Config pipeline snapshots', () => { }, } - await writeAppConfigurationFile(config as CurrentAppConfiguration, filePath) + await writeAppConfigurationFile(config, filePath) const firstWrite = await readFile(filePath) expect(firstWrite).toMatchSnapshot() @@ -322,7 +322,7 @@ describe('Config pipeline snapshots', () => { }, } - await writeAppConfigurationFile(config as CurrentAppConfiguration, filePath) + await writeAppConfigurationFile(config, filePath) const firstWrite = await readFile(filePath) const parsedConfig = await parseConfigAsCurrentApp(getAppVersionedSchema(specs), filePath) diff --git a/packages/app/src/cli/services/app/config/link.ts b/packages/app/src/cli/services/app/config/link.ts index 31083764e01..934a945c6c0 100644 --- a/packages/app/src/cli/services/app/config/link.ts +++ b/packages/app/src/cli/services/app/config/link.ts @@ -179,7 +179,7 @@ async function getAppCreationDefaultsFromLocalApp(options: LinkOptions): Promise return {creationOptions: app.creationDefaultOptions(), appDirectory: app.directory} - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch (error) { return {creationOptions: appCreationDefaults(options.directory)} } diff --git a/packages/app/src/cli/services/app/patch-app-configuration-file.ts b/packages/app/src/cli/services/app/patch-app-configuration-file.ts index cfce44be796..12f5e3e1d27 100644 --- a/packages/app/src/cli/services/app/patch-app-configuration-file.ts +++ b/packages/app/src/cli/services/app/patch-app-configuration-file.ts @@ -11,7 +11,7 @@ export async function patchAppHiddenConfigFile(path: string, clientId: string, c try { const jsonContents = await readFile(path) configuration = JSON.parse(jsonContents) - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch { // Do nothing if the file doesn't exist or can't be loaded } diff --git a/packages/app/src/cli/services/app/write-app-configuration-file.test.ts b/packages/app/src/cli/services/app/write-app-configuration-file.test.ts index 6835542f673..53ddeaba36f 100644 --- a/packages/app/src/cli/services/app/write-app-configuration-file.test.ts +++ b/packages/app/src/cli/services/app/write-app-configuration-file.test.ts @@ -113,7 +113,7 @@ url = "https://example.com/prefs" api_version: '2023-04', privacy_compliance: {}, }, - } as CurrentAppConfiguration, + }, filePath, ) @@ -136,7 +136,7 @@ url = "https://example.com/prefs" { ...FULL_CONFIGURATION, auth: {redirect_urls: []}, - } as CurrentAppConfiguration, + }, filePath, ) diff --git a/packages/app/src/cli/services/build/bundle-size.ts b/packages/app/src/cli/services/build/bundle-size.ts index f2212d295d0..f7fa1e63e42 100644 --- a/packages/app/src/cli/services/build/bundle-size.ts +++ b/packages/app/src/cli/services/build/bundle-size.ts @@ -40,7 +40,7 @@ export async function formatBundleSize(filePath: string) { try { const {rawBytes, compressedBytes} = await getBundleSize(filePath) return ` (${formatSize(rawBytes)} original, ~${formatSize(compressedBytes)} compressed)` - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch (error) { outputDebug(`Failed to get bundle size for ${filePath}: ${error}`) return '' diff --git a/packages/app/src/cli/services/build/steps/bundle-ui-step.test.ts b/packages/app/src/cli/services/build/steps/bundle-ui-step.test.ts index 866ca7ef057..f0ac74dc17a 100644 --- a/packages/app/src/cli/services/build/steps/bundle-ui-step.test.ts +++ b/packages/app/src/cli/services/build/steps/bundle-ui-step.test.ts @@ -101,7 +101,7 @@ describe('executeBundleUIStep', () => { extension_points: [ {target: 'admin.product-details.action.render', build_manifest: {assets: {main: {filepath: 'main.js'}}}}, ], - } as ExtensionInstance['configuration'] + } vi.mocked(buildExtension.buildUIExtension).mockResolvedValue(joinPath(localOutputDir, 'handle.js')) // When diff --git a/packages/app/src/cli/services/build/steps/include-assets/generate-manifest.ts b/packages/app/src/cli/services/build/steps/include-assets/generate-manifest.ts index 02a67666541..9f2cd098ebd 100644 --- a/packages/app/src/cli/services/build/steps/include-assets/generate-manifest.ts +++ b/packages/app/src/cli/services/build/steps/include-assets/generate-manifest.ts @@ -143,7 +143,7 @@ export async function createOrUpdateManifestFile( try { const content = await readFile(manifestPath) existing = JSON.parse(content) - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch { outputDebug(`Warning: could not parse existing manifest.json, starting fresh\n`, context.options.stdout) } diff --git a/packages/app/src/cli/services/bulk-operations/execute-bulk-operation.test.ts b/packages/app/src/cli/services/bulk-operations/execute-bulk-operation.test.ts index af659dc5ba0..a72595c69ec 100644 --- a/packages/app/src/cli/services/bulk-operations/execute-bulk-operation.test.ts +++ b/packages/app/src/cli/services/bulk-operations/execute-bulk-operation.test.ts @@ -282,7 +282,7 @@ describe('executeBulkOperation', () => { bulkOperation: createdBulkOperation, userErrors: [], } - vi.mocked(runBulkOperationMutation).mockResolvedValue(mockResponse as any) + vi.mocked(runBulkOperationMutation).mockResolvedValue(mockResponse) await executeAndPresentBulkOperation({ organization: mockOrganization, diff --git a/packages/app/src/cli/services/context/deploy-identifier-matching.test.ts b/packages/app/src/cli/services/context/deploy-identifier-matching.test.ts index 724e405be39..164848de7e7 100644 --- a/packages/app/src/cli/services/context/deploy-identifier-matching.test.ts +++ b/packages/app/src/cli/services/context/deploy-identifier-matching.test.ts @@ -1,4 +1,3 @@ -/* eslint-disable compat/shopify-prefer-module-scope-constants */ import {classifyDeployExtensionChanges, ensureDeployIdentifiersFromAppVersion} from './deploy-identifier-matching.js' import {extensionMigrationPrompt} from './prompts.js' import {EnsureDeploymentIdsPresenceOptions} from './identifiers.js' @@ -90,7 +89,7 @@ function remoteWebhookModule( experience: 'configuration', options: {managementExperience: 'cli'}, }, - } as AppModuleVersion + } } // The option bag both entry points accept; each test overrides only what it exercises. diff --git a/packages/app/src/cli/services/deploy.test.ts b/packages/app/src/cli/services/deploy.test.ts index 95159ee3646..bb3f1e44742 100644 --- a/packages/app/src/cli/services/deploy.test.ts +++ b/packages/app/src/cli/services/deploy.test.ts @@ -806,7 +806,7 @@ describe('ImportExtensionsIfNeeded', () => { vi.mocked(isTTY).mockReturnValue(true) vi.mocked(getExtensions).mockResolvedValue(mockExtensions as any) vi.mocked(renderConfirmationPrompt).mockResolvedValue(true) - vi.mocked(reloadApp).mockResolvedValue(reloadedApp as any) + vi.mocked(reloadApp).mockResolvedValue(reloadedApp) // When const result = await importExtensionsIfNeeded({ diff --git a/packages/app/src/cli/services/deploy/upload.test.ts b/packages/app/src/cli/services/deploy/upload.test.ts index a9c39585ccf..3e007fc2c1f 100644 --- a/packages/app/src/cli/services/deploy/upload.test.ts +++ b/packages/app/src/cli/services/deploy/upload.test.ts @@ -254,7 +254,7 @@ describe('uploadExtensionsBundle', () => { release: true, }) - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch (error: any) { expect(error.message).toEqual("Version couldn't be created.") expect(error.customSections).toEqual([ @@ -703,7 +703,7 @@ describe('deploymentErrorsToCustomSections', () => { // When const customSections = deploymentErrorsToCustomSections( - errors as AppDeploySchema['appDeploy']['userErrors'], + errors, { 'webhook-subscription-1': '1', 'webhook-subscription-2': '2', diff --git a/packages/app/src/cli/services/deploy/upload.ts b/packages/app/src/cli/services/deploy/upload.ts index 1107751eb48..2ab26aa2ddd 100644 --- a/packages/app/src/cli/services/deploy/upload.ts +++ b/packages/app/src/cli/services/deploy/upload.ts @@ -290,7 +290,7 @@ function cliErrorsSections( } sections.forEach((section) => { - // eslint-disable-next-line compat/id-length + // eslint-disable-next-line @shopify/cli/id-length ;(section.body as ListToken[]).sort((a, b) => { if (a.list.title === VALIDATION_ERRORS_TITLE) { return 1 diff --git a/packages/app/src/cli/services/dev.test.ts b/packages/app/src/cli/services/dev.test.ts index 119576f884d..82b3a1ecfc6 100644 --- a/packages/app/src/cli/services/dev.test.ts +++ b/packages/app/src/cli/services/dev.test.ts @@ -105,7 +105,7 @@ describe('blockIfMigrationIncomplete', () => { configurationRegistrations: [], dashboardManagedExtensionRegistrations: [], }, - } as any + } }, }) @@ -129,7 +129,7 @@ describe('blockIfMigrationIncomplete', () => { configurationRegistrations: [], dashboardManagedExtensionRegistrations: [], }, - } as any + } }, }) diff --git a/packages/app/src/cli/services/dev/app-events/app-event-watcher.ts b/packages/app/src/cli/services/dev/app-events/app-event-watcher.ts index 39d2fc2673f..0ddd7f8b1ac 100644 --- a/packages/app/src/cli/services/dev/app-events/app-event-watcher.ts +++ b/packages/app/src/cli/services/dev/app-events/app-event-watcher.ts @@ -1,4 +1,4 @@ -/* eslint-disable tsdoc/syntax */ +/* eslint-disable @shopify/cli/tsdoc-syntax */ import {FileWatcher, OutputContextOptions} from './file-watcher.js' import {handleWatcherEvents} from './app-event-watcher-handler.js' import {AppLinkedInterface} from '../../../models/app/app.js' @@ -239,7 +239,7 @@ export class AppEventWatcher extends EventEmitter { events.forEach((event) => { event.buildResult = buildResult }) - // eslint-disable-next-line no-catch-all/no-catch-all, @typescript-eslint/no-explicit-any + // eslint-disable-next-line @shopify/cli/no-catch-all, @typescript-eslint/no-explicit-any } catch (error: any) { // If there is an `errors` array, it's an esbuild error, format it and log it // If not, just print the error message to stderr. diff --git a/packages/app/src/cli/services/dev/app-events/file-watcher.test.ts b/packages/app/src/cli/services/dev/app-events/file-watcher.test.ts index 5fad96b49d0..48e294a878a 100644 --- a/packages/app/src/cli/services/dev/app-events/file-watcher.test.ts +++ b/packages/app/src/cli/services/dev/app-events/file-watcher.test.ts @@ -278,7 +278,7 @@ describe('file-watcher events', () => { configuration: { ...DEFAULT_CONFIG, extension_directories: ['extensions'], - } as any, + }, }) let eventHandler: any @@ -374,7 +374,7 @@ describe('file-watcher events', () => { configuration: { ...DEFAULT_CONFIG, extension_directories: ['extensions'], - } as any, + }, }) const onChange = vi.fn() @@ -736,7 +736,7 @@ describe('file-watcher events', () => { configuration: { ...DEFAULT_CONFIG, extension_directories: ['extensions'], - } as any, + }, }) let eventHandler: any @@ -785,7 +785,7 @@ describe('file-watcher events', () => { configuration: { ...DEFAULT_CONFIG, extension_directories: ['extensions'], - } as any, + }, }) let eventHandler: any @@ -827,7 +827,7 @@ describe('file-watcher events', () => { configuration: { ...DEFAULT_CONFIG, extension_directories: ['extensions'], - } as any, + }, }) let eventHandler: any diff --git a/packages/app/src/cli/services/dev/app-events/file-watcher.ts b/packages/app/src/cli/services/dev/app-events/file-watcher.ts index cbc86472baa..a89d195d2bf 100644 --- a/packages/app/src/cli/services/dev/app-events/file-watcher.ts +++ b/packages/app/src/cli/services/dev/app-events/file-watcher.ts @@ -101,7 +101,7 @@ export class FileWatcher { fullExtensionDirectories.map(async (dir) => { try { await mkdir(dir.replace(/\/\*+$/, '')) - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch { // Non-fatal: directory may be unwritable (e.g. test fixtures) } diff --git a/packages/app/src/cli/services/dev/cap.ts b/packages/app/src/cli/services/dev/cap.ts index 8bc93833e20..4fc7529414f 100644 --- a/packages/app/src/cli/services/dev/cap.ts +++ b/packages/app/src/cli/services/dev/cap.ts @@ -10,7 +10,7 @@ export async function devStoreCapReached( try { return await developerPlatformClient.devStoreCapReached(organizationId) - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch { return false } diff --git a/packages/app/src/cli/services/dev/extension.test.ts b/packages/app/src/cli/services/dev/extension.test.ts index 56ed3a8d7be..082a84e3d6d 100644 --- a/packages/app/src/cli/services/dev/extension.test.ts +++ b/packages/app/src/cli/services/dev/extension.test.ts @@ -3,7 +3,7 @@ import * as server from './extension/server.js' import * as websocket from './extension/websocket.js' import {devUIExtensions, ExtensionDevOptions} from './extension.js' import {ExtensionsEndpointPayload} from './extension/payload/models.js' -import {WebsocketConnection} from './extension/websocket/models.js' + import {AppEventWatcher} from './app-events/app-event-watcher.js' import {testAppLinked} from '../../models/app/app.test-data.js' import {describe, test, vi, expect} from 'vitest' @@ -37,14 +37,14 @@ describe('devUIExtensions()', () => { return { mock: 'payload-store', } as unknown as store.ExtensionsPayloadStore - } as any) + }) vi.spyOn(server, 'setupHTTPServer').mockReturnValue({ mock: 'http-server', close: serverCloseSpy, } as unknown as Server) vi.spyOn(websocket, 'setupWebsocketConnection').mockReturnValue({ close: websocketCloseSpy, - } as unknown as WebsocketConnection) + }) } test('initializes the payload store', async () => { diff --git a/packages/app/src/cli/services/dev/extension.ts b/packages/app/src/cli/services/dev/extension.ts index 06813466f10..6158983c2fb 100644 --- a/packages/app/src/cli/services/dev/extension.ts +++ b/packages/app/src/cli/services/dev/extension.ts @@ -164,7 +164,7 @@ export async function devUIExtensions(options: ExtensionDevOptions): Promise { handle: 'test-ext', metafields: [], extension_points: [{target: 'target1', tools: '../tools.json'}], - } as any, + }, }) const outputDir = joinPath(extDir, 'dist') await mkdir(outputDir) diff --git a/packages/app/src/cli/services/dev/extension/websocket.test.ts b/packages/app/src/cli/services/dev/extension/websocket.test.ts index 9ebec316e47..18e0c62154c 100644 --- a/packages/app/src/cli/services/dev/extension/websocket.test.ts +++ b/packages/app/src/cli/services/dev/extension/websocket.test.ts @@ -24,7 +24,7 @@ describe('setupWebsocketConnection', () => { vi.useFakeTimers() vi.mocked(WebSocketServer).mockImplementation(function () { return websocketServer - } as any) + }) }) afterEach(() => { diff --git a/packages/app/src/cli/services/dev/extension/websocket/handlers.test.ts b/packages/app/src/cli/services/dev/extension/websocket/handlers.test.ts index 7be464d1461..a1c33a0fb15 100644 --- a/packages/app/src/cli/services/dev/extension/websocket/handlers.test.ts +++ b/packages/app/src/cli/services/dev/extension/websocket/handlers.test.ts @@ -10,7 +10,7 @@ import {SetupWebSocketConnectionOptions} from './models.js' import {ExtensionsEndpointPayload} from '../payload/models.js' import {vi, describe, test, expect, Mock} from 'vitest' import {useConcurrentOutputContext} from '@shopify/cli-kit/node/ui/components' -import WebSocket, {RawData, WebSocketServer} from 'ws' +import {WebSocket, RawData, WebSocketServer} from 'ws' import colors from '@shopify/cli-kit/node/colors' import {outputContent, outputToken} from '@shopify/cli-kit/node/output' import {IncomingMessage} from 'http' diff --git a/packages/app/src/cli/services/dev/processes/app-logs-polling.ts b/packages/app/src/cli/services/dev/processes/app-logs-polling.ts index f822f96ed7f..381df51a4bb 100644 --- a/packages/app/src/cli/services/dev/processes/app-logs-polling.ts +++ b/packages/app/src/cli/services/dev/processes/app-logs-polling.ts @@ -107,7 +107,7 @@ export const subscribeAndStartPolling: DevProcessFunction { { message: 'test error', category: 'test', - on: {user_identifier: 'test-id'} as JsonMapType, + on: {user_identifier: 'test-id'}, }, ] as UserError[] await logger.logUserErrors(errors, extensions) diff --git a/packages/app/src/cli/services/dev/ui/components/DevSessionUI.tsx b/packages/app/src/cli/services/dev/ui/components/DevSessionUI.tsx index a88aa523baf..25eef63a786 100644 --- a/packages/app/src/cli/services/dev/ui/components/DevSessionUI.tsx +++ b/packages/app/src/cli/services/dev/ui/components/DevSessionUI.tsx @@ -78,7 +78,7 @@ const DevSessionUI: FunctionComponent = ({ action: async (stdout: Writable, stderr: Writable, signal: AbortSignal) => { try { return await process.action(stdout, stderr, signal) - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch (error) { abortController.abort(error) } @@ -163,7 +163,7 @@ const DevSessionUI: FunctionComponent = ({ const activeShortcuts = devStatusShortcuts.filter((shortcut) => shortcut.condition?.() ?? true) const tabs: {[key: string]: Tab} = { - // eslint-disable-next-line compat/id-length + // eslint-disable-next-line @shopify/cli/id-length d: { label: 'Dev status', shortcuts: devStatusShortcuts, @@ -210,7 +210,7 @@ const DevSessionUI: FunctionComponent = ({ ), }, - // eslint-disable-next-line compat/id-length + // eslint-disable-next-line @shopify/cli/id-length a: { label: 'App info', content: ( @@ -227,7 +227,7 @@ const DevSessionUI: FunctionComponent = ({ ), }, - // eslint-disable-next-line compat/id-length + // eslint-disable-next-line @shopify/cli/id-length s: { label: 'Store info', content: ( diff --git a/packages/app/src/cli/services/dev/ui/components/TabPanel.test.tsx b/packages/app/src/cli/services/dev/ui/components/TabPanel.test.tsx index 6f920bb9d5c..2499f16854f 100644 --- a/packages/app/src/cli/services/dev/ui/components/TabPanel.test.tsx +++ b/packages/app/src/cli/services/dev/ui/components/TabPanel.test.tsx @@ -43,7 +43,7 @@ describe('TabPanel', () => { const mockShortcutAction = vi.fn() const sampleTabs: {[key: string]: Tab} = { - // eslint-disable-next-line compat/id-length + // eslint-disable-next-line @shopify/cli/id-length a: { label: 'First Tab', content: First tab content, @@ -54,12 +54,12 @@ describe('TabPanel', () => { }, ], }, - // eslint-disable-next-line compat/id-length + // eslint-disable-next-line @shopify/cli/id-length b: { label: 'Second Tab', content: Second tab content, }, - // eslint-disable-next-line compat/id-length + // eslint-disable-next-line @shopify/cli/id-length c: { label: 'Action Tab', action: mockAction, @@ -138,13 +138,13 @@ describe('TabPanel', () => { test('only executes shortcuts for the active tab', async () => { const secondTabShortcut = vi.fn() const tabsWithMultipleShortcuts: {[key: string]: Tab} = { - // eslint-disable-next-line compat/id-length + // eslint-disable-next-line @shopify/cli/id-length a: { label: 'First Tab', content: First tab content, shortcuts: [{key: 'x', action: mockShortcutAction}], }, - // eslint-disable-next-line compat/id-length + // eslint-disable-next-line @shopify/cli/id-length b: { label: 'Second Tab', content: Second tab content, @@ -175,7 +175,7 @@ describe('TabPanel', () => { const actionWhenConditionNotMet = vi.fn() const tabsWithConditions: {[key: string]: Tab} = { - // eslint-disable-next-line compat/id-length + // eslint-disable-next-line @shopify/cli/id-length a: { label: 'Conditional Tab', content: Conditional tab content, @@ -251,18 +251,18 @@ describe('TabPanel', () => { test('supports arrow key navigation for content tabs', async () => { const tabsWithContent: {[key: string]: Tab} = { - // eslint-disable-next-line compat/id-length + // eslint-disable-next-line @shopify/cli/id-length a: { label: 'First Tab', content: First tab content, }, - // eslint-disable-next-line compat/id-length + // eslint-disable-next-line @shopify/cli/id-length b: { label: 'Action Tab', // No content - should be skipped in navigation action: mockAction, }, - // eslint-disable-next-line compat/id-length + // eslint-disable-next-line @shopify/cli/id-length c: { label: 'Second Tab', content: Second tab content, @@ -296,12 +296,12 @@ describe('TabPanel', () => { test('arrow key navigation loops through content tabs', async () => { const tabsWithContent: {[key: string]: Tab} = { - // eslint-disable-next-line compat/id-length + // eslint-disable-next-line @shopify/cli/id-length a: { label: 'First Tab', content: First tab content, }, - // eslint-disable-next-line compat/id-length + // eslint-disable-next-line @shopify/cli/id-length b: { label: 'Second Tab', content: Second tab content, @@ -340,17 +340,17 @@ describe('TabPanel', () => { test('tab key functions like right arrow for navigation', async () => { const tabsWithContent: {[key: string]: Tab} = { - // eslint-disable-next-line compat/id-length + // eslint-disable-next-line @shopify/cli/id-length a: { label: 'First Tab', content: First tab content, }, - // eslint-disable-next-line compat/id-length + // eslint-disable-next-line @shopify/cli/id-length b: { label: 'Second Tab', content: Second tab content, }, - // eslint-disable-next-line compat/id-length + // eslint-disable-next-line @shopify/cli/id-length c: { label: 'Third Tab', content: Third tab content, @@ -402,7 +402,7 @@ describe('TabPanel', () => { mocks.measureElement.mockReturnValue({width: 70}) const tabsWithActions: {[key: string]: Tab} = { - // eslint-disable-next-line compat/id-length + // eslint-disable-next-line @shopify/cli/id-length a: { label: 'Content Tab', content: Content, @@ -445,7 +445,7 @@ describe('TabPanel', () => { mocks.measureElement.mockReturnValue({width: 50}) const tabsWithActions: {[key: string]: Tab} = { - // eslint-disable-next-line compat/id-length + // eslint-disable-next-line @shopify/cli/id-length a: { label: 'Content Tab', content: Content, diff --git a/packages/app/src/cli/services/extensions/bundle.ts b/packages/app/src/cli/services/extensions/bundle.ts index 8de5eebd4ea..6974eebba88 100644 --- a/packages/app/src/cli/services/extensions/bundle.ts +++ b/packages/app/src/cli/services/extensions/bundle.ts @@ -123,7 +123,7 @@ async function writeMetafile(result: EsbuildResult | null, outputPath: string) { const metafilePath = joinPath(dir, `${name}.metafile.json`) try { await writeFile(metafilePath, JSON.stringify(result.metafile)) - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch (error) { outputWarn(`Failed to write metafile to ${metafilePath}: ${error}`) } @@ -198,14 +198,14 @@ function getESBuildOptions(options: BundleOptions, processEnv = process.env): Pa function getPlugins(resolveDir: string | undefined, processEnv = process.env): Plugin[] { // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore - const plugins: Plugin[] = [graphqlLoaderPlugin.default()] + const plugins: Plugin[] = [graphqlLoaderPlugin.default()] // eslint-disable-line import/no-named-as-default-member -- CommonJS exposes its factory through default. const skipReactDeduplication = isTruthy(processEnv[environmentVariableNames.skipEsbuildReactDedeuplication]) if (resolveDir && !skipReactDeduplication) { let resolvedReactPath: string | undefined try { resolvedReactPath = require.resolve('react', {paths: [resolveDir]}) - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch { // If weren't able to find React, that's fine. It might not be used. outputDebug(`Unable to load React in ${resolveDir}, skipping React de-duplication`) diff --git a/packages/app/src/cli/services/function/runner.ts b/packages/app/src/cli/services/function/runner.ts index bf1516cdd1d..ed42094423d 100644 --- a/packages/app/src/cli/services/function/runner.ts +++ b/packages/app/src/cli/services/function/runner.ts @@ -69,7 +69,7 @@ async function warnIfProfileWillNotContainFunctionNames( ' in shopify.extension.toml, configure the compiler to emit function names, and rebuild the function.', ], }) - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch { // Inspecting function names is best-effort and must never prevent the function from running. } diff --git a/packages/app/src/cli/services/generate/extension.ts b/packages/app/src/cli/services/generate/extension.ts index 9b58f107a01..09a9a5f8f41 100644 --- a/packages/app/src/cli/services/generate/extension.ts +++ b/packages/app/src/cli/services/generate/extension.ts @@ -153,7 +153,7 @@ async function extensionInit(options: ExtensionInitOptions) { async function removePartiallyGeneratedExtension(directory: string): Promise { try { await removeFile(directory, {maxRetries: 10, retryDelay: 100}) - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch { renderWarning({ headline: ["Couldn't remove", {filePath: directory}, {char: '.'}], diff --git a/packages/app/src/cli/services/generate/fetch-extension-specifications.test.ts b/packages/app/src/cli/services/generate/fetch-extension-specifications.test.ts index 49c1e82bf9d..ef411061e3f 100644 --- a/packages/app/src/cli/services/generate/fetch-extension-specifications.test.ts +++ b/packages/app/src/cli/services/generate/fetch-extension-specifications.test.ts @@ -131,7 +131,7 @@ describe('getDevSessionUpdateMessages for remotely-sourced specifications', () = function instanceFor(specification: ExtensionSpecification): ExtensionInstance { return new ExtensionInstance({ - configuration: {name: 'analytics app events', type: specification.identifier} as BaseConfigType, + configuration: {name: 'analytics app events', type: specification.identifier}, configurationPath: '', directory: '/tmp/test-extension', specification, diff --git a/packages/app/src/cli/services/generate/shop-import/declarative-definitions.test.ts b/packages/app/src/cli/services/generate/shop-import/declarative-definitions.test.ts index 6269ed71c3e..cb1baa15af9 100644 --- a/packages/app/src/cli/services/generate/shop-import/declarative-definitions.test.ts +++ b/packages/app/src/cli/services/generate/shop-import/declarative-definitions.test.ts @@ -10,12 +10,10 @@ import { } from './declarative-definitions/result.js' import { MetaobjectDefinitions, - MetaobjectDefinitionsQuery, MetaobjectForImportFragment, } from '../../../api/graphql/admin/generated/metaobject_definitions.js' import { MetafieldDefinitions, - MetafieldDefinitionsQuery, MetafieldForImportFragment, } from '../../../api/graphql/admin/generated/metafield_definitions.js' import {adminAsAppRequestDoc} from '../../../api/admin-as-app.js' @@ -112,7 +110,7 @@ describe('processDeclarativeDefinitionNodes', () => { { namespace: 'app--123456', ...defaultMetafieldFragment, - } as MetafieldForImportFragment, + }, ], }, ] @@ -140,7 +138,7 @@ describe('processDeclarativeDefinitionNodes', () => { { namespace: 'app--123456--custom', ...defaultMetafieldFragment, - } as MetafieldForImportFragment, + }, ], }, ] @@ -167,7 +165,7 @@ describe('processDeclarativeDefinitionNodes', () => { { namespace: 'custom', ...defaultMetafieldFragment, - } as MetafieldForImportFragment, + }, ], }, ] @@ -192,7 +190,7 @@ describe('processDeclarativeDefinitionNodes', () => { {name: 'max', value: '50'}, {name: 'choices', value: '["red", "blue", "green"]'}, ], - } as MetafieldForImportFragment, + }, ], }, ] @@ -229,7 +227,7 @@ describe('processDeclarativeDefinitionNodes', () => { storefront: 'PUBLIC_READ', customerAccount: 'READ', }, - } as MetafieldForImportFragment, + }, ], }, ] @@ -263,7 +261,7 @@ describe('processDeclarativeDefinitionNodes', () => { enabled: true, }, }, - } as MetafieldForImportFragment, + }, ], }, ] @@ -292,13 +290,13 @@ describe('processDeclarativeDefinitionNodes', () => { ...defaultMetafieldFragment, key: 'color', name: 'Color', - } as MetafieldForImportFragment, + }, { namespace: 'app--123456', ...defaultMetafieldFragment, key: 'size', name: 'Size', - } as MetafieldForImportFragment, + }, ], }, { @@ -310,7 +308,7 @@ describe('processDeclarativeDefinitionNodes', () => { ...defaultMetafieldFragment, key: 'vip_status', name: 'VIP Status', - } as MetafieldForImportFragment, + }, ], }, ] @@ -345,7 +343,7 @@ describe('processDeclarativeDefinitionNodes', () => { { type: 'app--345678--test', ...defaultMetaobjectFragment, - } as MetaobjectForImportFragment, + }, ] const result = processDeclarativeDefinitionNodes([], metaobjectNodes) @@ -402,7 +400,7 @@ describe('processDeclarativeDefinitionNodes', () => { ], }, ], - } as MetaobjectForImportFragment, + }, ] const result = processDeclarativeDefinitionNodes([], metaobjectNodes) @@ -440,7 +438,7 @@ describe('processDeclarativeDefinitionNodes', () => { { type: 'custom', ...defaultMetaobjectFragment, - } as MetaobjectForImportFragment, + }, ] const result = processDeclarativeDefinitionNodes([], metaobjectNodes) @@ -458,7 +456,7 @@ describe('processDeclarativeDefinitionNodes', () => { { namespace: 'app--123456', ...defaultMetafieldFragment, - } as MetafieldForImportFragment, + }, ], }, ] @@ -467,7 +465,7 @@ describe('processDeclarativeDefinitionNodes', () => { { type: 'app--345678--test', ...defaultMetaobjectFragment, - } as MetaobjectForImportFragment, + }, ] const result = processDeclarativeDefinitionNodes(metafieldNodes, metaobjectNodes) @@ -499,7 +497,7 @@ describe('processDeclarativeDefinitionNodes', () => { ...defaultMetafieldFragment, key: 'samename', name: 'samename', - } as MetafieldForImportFragment, + }, ], }, ] @@ -533,7 +531,7 @@ describe('processDeclarativeDefinitionNodes', () => { {name: 'array_strings', value: '["a", "b"]'}, {name: 'complex_object', value: '{"nested": {"value": 123}}'}, ], - } as MetafieldForImportFragment, + }, ], }, ] @@ -567,7 +565,7 @@ describe('processDeclarativeDefinitionNodes', () => { namespace: 'app--123456', ...defaultMetafieldFragment, description: null, - } as MetafieldForImportFragment, + }, ], }, ] @@ -594,7 +592,7 @@ describe('processDeclarativeDefinitionNodes', () => { namespace: 'app--123456', ...defaultMetafieldFragment, validations: [], - } as MetafieldForImportFragment, + }, ], }, ] @@ -628,7 +626,7 @@ describe('processDeclarativeDefinitionNodes', () => { validations: [], }, ], - } as MetaobjectForImportFragment, + }, ] const result = processDeclarativeDefinitionNodes([], metaobjectNodes) @@ -656,7 +654,7 @@ describe('processDeclarativeDefinitionNodes', () => { {name: 'min', value: '5'}, {name: 'max', value: null}, ], - } as MetafieldForImportFragment, + }, ], }, ] @@ -687,7 +685,7 @@ describe('processDeclarativeDefinitionNodes', () => { admin: 'MERCHANT_READ', storefront: 'NONE', }, - } as MetaobjectForImportFragment, + }, ] const result = processDeclarativeDefinitionNodes([], metaobjectNodes) @@ -709,7 +707,7 @@ describe('processDeclarativeDefinitionNodes', () => { ...defaultMetaobjectFragment.capabilities, renderable: null, }, - } as MetaobjectForImportFragment, + }, ] const result = processDeclarativeDefinitionNodes([], metaobjectNodes) @@ -752,7 +750,7 @@ describe('processDeclarativeDefinitionNodes', () => { ], }, ], - } as MetaobjectForImportFragment, + }, ] const result = processDeclarativeDefinitionNodes([], metaobjectNodes) @@ -796,7 +794,7 @@ describe('processDeclarativeDefinitionNodes', () => { ], }, ], - } as MetaobjectForImportFragment, + }, ] const result = processDeclarativeDefinitionNodes([], metaobjectNodes) @@ -822,7 +820,7 @@ describe('processDeclarativeDefinitionNodes', () => { // No trailing segment like "--custom" namespace: 'app--999999', ...defaultMetafieldFragment, - } as MetafieldForImportFragment, + }, ], }, ] @@ -848,7 +846,7 @@ describe('processDeclarativeDefinitionNodes', () => { // No trailing segment type: 'app--999999', ...defaultMetaobjectFragment, - } as MetaobjectForImportFragment, + }, ] const result = processDeclarativeDefinitionNodes([], metaobjectNodes) @@ -881,7 +879,7 @@ describe('processDeclarativeDefinitionNodes', () => { // Invalid JSON - should be returned as-is {name: 'invalid_json', value: 'this is not valid json {{'}, ], - } as MetafieldForImportFragment, + }, ], }, ] @@ -920,7 +918,7 @@ describe('processDeclarativeDefinitionNodes', () => { // Testing the READ_WRITE case customerAccount: 'READ_WRITE', }, - } as MetafieldForImportFragment, + }, ], }, ] @@ -1219,7 +1217,7 @@ describe('importDeclarativeDefinitions', () => { }, ], }, - } as MetafieldDefinitionsQuery + } } if (query === MetafieldDefinitions) { return { @@ -1227,7 +1225,7 @@ describe('importDeclarativeDefinitions', () => { pageInfo: {hasNextPage: false, endCursor: null}, nodes: [], }, - } as MetafieldDefinitionsQuery + } } if (query === MetaobjectDefinitions) { return { @@ -1292,7 +1290,7 @@ describe('importDeclarativeDefinitions', () => { }, ], }, - } as MetaobjectDefinitionsQuery + } } return {} }) diff --git a/packages/app/src/cli/services/generate/shop-import/declarative-definitions.ts b/packages/app/src/cli/services/generate/shop-import/declarative-definitions.ts index 1d308df11b4..233a9a4001b 100644 --- a/packages/app/src/cli/services/generate/shop-import/declarative-definitions.ts +++ b/packages/app/src/cli/services/generate/shop-import/declarative-definitions.ts @@ -521,7 +521,7 @@ function validationsNodeToObject(validations: {name: string; value?: string | nu const safelyJsonParse = (value: string) => { try { return JSON.parse(value) - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch (error) { return value } diff --git a/packages/app/src/cli/services/init/template/npm.ts b/packages/app/src/cli/services/init/template/npm.ts index 8686648580d..50ade07c21e 100644 --- a/packages/app/src/cli/services/init/template/npm.ts +++ b/packages/app/src/cli/services/init/template/npm.ts @@ -28,7 +28,6 @@ export async function updateCLIDependencies({ if (local) { const cliPath = await packagePath('cli') - // eslint-disable-next-line compat/require-atomic-updates packageJSON.dependencies['@shopify/cli'] = cliPath const dependencyOverrides = { diff --git a/packages/app/src/cli/utilities/app/config/getTomls.ts b/packages/app/src/cli/utilities/app/config/getTomls.ts index f6662db42fa..75ed2408594 100644 --- a/packages/app/src/cli/utilities/app/config/getTomls.ts +++ b/packages/app/src/cli/utilities/app/config/getTomls.ts @@ -17,7 +17,7 @@ export async function getTomls(appDirectory?: string): Promise<{[clientId: strin if (isValidFormatAppConfigurationFileName(file)) { const filePath = joinPath(appDirectory, file) const tomlFile = await TomlFile.read(filePath) - // eslint-disable-next-line @typescript-eslint/no-explicit-any + // eslint-disable-next-line @typescript-eslint/no-explicit-any, typescript/no-unnecessary-type-assertion -- TOML values need narrowing before indexing by client_id. const parsedToml = tomlFile.content as {[key: string]: any} if (parsedToml.client_id) { diff --git a/packages/app/src/cli/utilities/app/http-reverse-proxy.test.ts b/packages/app/src/cli/utilities/app/http-reverse-proxy.test.ts index 7d26a2bf0c8..f3102ab1fdd 100644 --- a/packages/app/src/cli/utilities/app/http-reverse-proxy.test.ts +++ b/packages/app/src/cli/utilities/app/http-reverse-proxy.test.ts @@ -2,7 +2,7 @@ import {getProxyingWebServer} from './http-reverse-proxy.js' import {AbortController} from '@shopify/cli-kit/node/abort' import {describe, test, expect} from 'vitest' import fetch from 'node-fetch' -import WebSocket, {WebSocketServer} from 'ws' +import {WebSocket, WebSocketServer} from 'ws' import http from 'http' import https from 'https' import net from 'net' @@ -91,7 +91,7 @@ describe.sequential.each(each)('http-reverse-proxy for %s', (protocol) => { try { await fetch(`${protocol}://localhost:${setup.proxyPort}/path1`, {agent}) return 'open' - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch { return 'closed' } diff --git a/packages/app/src/cli/utilities/developer-platform-client/app-management-client.test.ts b/packages/app/src/cli/utilities/developer-platform-client/app-management-client.test.ts index faa969b436d..e8386685664 100644 --- a/packages/app/src/cli/utilities/developer-platform-client/app-management-client.test.ts +++ b/packages/app/src/cli/utilities/developer-platform-client/app-management-client.test.ts @@ -1530,7 +1530,7 @@ describe('AppManagementClient', () => { query: CreateAssetUrl, token: 'token', variables: { - sourceExtension: 'BR' as SourceExtension, + sourceExtension: 'BR', organizationId: 'gid://shopify/Organization/213141', }, unauthorizedHandler: { @@ -2490,7 +2490,7 @@ describe('orgFromId', () => { client.session = vi.fn().mockResolvedValue({ token: 'refreshed-token', businessPlatformToken: 'refreshed-business-platform-token', - }) as unknown as typeof client.session + }) const result = await client.orgFromId('123') @@ -2528,7 +2528,7 @@ describe('devStoreCapReached', () => { client.session = vi.fn().mockResolvedValue({ token: 'refreshed-app-management-token', businessPlatformToken: 'refreshed-business-platform-token', - }) as unknown as typeof client.session + }) const result = await client.devStoreCapReached('gid://shopify/Organization/123') diff --git a/packages/app/src/cli/utilities/developer-platform-client/app-management-client.ts b/packages/app/src/cli/utilities/developer-platform-client/app-management-client.ts index ce548ad1a3a..572a009803f 100644 --- a/packages/app/src/cli/utilities/developer-platform-client/app-management-client.ts +++ b/packages/app/src/cli/utilities/developer-platform-client/app-management-client.ts @@ -264,7 +264,7 @@ export class AppManagementClient implements DeveloperPlatformClient { cursor: data.cursor, status: response.status, } - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch (error) { return { errors: [`Failed to parse response: ${error}`], diff --git a/packages/app/src/cli/utilities/extensions/theme/host-theme-manager.ts b/packages/app/src/cli/utilities/extensions/theme/host-theme-manager.ts index c80d08ee1d4..725510ea8e7 100644 --- a/packages/app/src/cli/utilities/extensions/theme/host-theme-manager.ts +++ b/packages/app/src/cli/utilities/extensions/theme/host-theme-manager.ts @@ -60,7 +60,7 @@ export class HostThemeManager extends ThemeManager { } else { throw new Error() } - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch (error) { outputDebug(`Failed to create theme with name "${options.name}" and role "${options.role}". Retrying...`) } diff --git a/packages/app/src/cli/utilities/file-formatter.ts b/packages/app/src/cli/utilities/file-formatter.ts index 1aa88c0ceef..04a32c036d0 100644 --- a/packages/app/src/cli/utilities/file-formatter.ts +++ b/packages/app/src/cli/utilities/file-formatter.ts @@ -1,4 +1,4 @@ -import prettier from 'prettier' +import {format} from 'prettier' import type {Options} from 'prettier' /** @@ -8,5 +8,5 @@ import type {Options} from 'prettier' * @returns The formatted content. */ export async function formatContent(content: string, options?: Options): Promise { - return prettier.format(content, options) + return format(content, options) } diff --git a/packages/app/src/cli/utilities/json-schema.ts b/packages/app/src/cli/utilities/json-schema.ts index 76ac3d5e411..8b13b565a43 100644 --- a/packages/app/src/cli/utilities/json-schema.ts +++ b/packages/app/src/cli/utilities/json-schema.ts @@ -7,7 +7,6 @@ import { normaliseJsonSchema, } from '@shopify/cli-kit/node/json-schema' import {isEmpty} from '@shopify/cli-kit/common/object' -import {JsonMapType} from '@shopify/cli-kit/node/toml' /** * The base properties that are added to all JSON Schema contracts. @@ -49,7 +48,7 @@ export async function unifiedConfigurationParserFactory( // Then, even if this failed, we try to validate against the contract. const zodValidatedData = zodParse.state === 'ok' ? zodParse.data : undefined - const subjectForAjv = zodValidatedData ?? (config as JsonMapType) + const subjectForAjv = zodValidatedData ?? config const jsonSchemaParse = jsonSchemaValidate( subjectForAjv, diff --git a/packages/app/src/cli/utilities/mkcert.test.ts b/packages/app/src/cli/utilities/mkcert.test.ts index 36940aa85fa..c75e1588dfa 100644 --- a/packages/app/src/cli/utilities/mkcert.test.ts +++ b/packages/app/src/cli/utilities/mkcert.test.ts @@ -9,7 +9,7 @@ import which from 'which' import {downloadGitHubRelease} from '@shopify/cli-kit/node/github' import {testWithTempDir} from '@shopify/cli-kit/node/testing/test-with-temp-dir' import {AbortError} from '@shopify/cli-kit/node/error' -import {fetch, Response} from '@shopify/cli-kit/node/http' +import {fetch} from '@shopify/cli-kit/node/http' import {mockAndCaptureOutput} from '@shopify/cli-kit/node/testing/output' import {keypress, renderWarning} from '@shopify/cli-kit/node/ui' @@ -305,7 +305,7 @@ describe('mkcert', () => { const mockFetch = vi.fn().mockResolvedValue({ ok: true, text: async () => 'LICENSE CONTENT', - } as unknown as Response) + }) vi.mocked(fetch).mockImplementation(mockFetch) @@ -331,7 +331,7 @@ describe('mkcert', () => { const mockFetch = vi.fn().mockResolvedValue({ ok: false, text: async () => 'LICENSE CONTENT', - } as unknown as Response) + }) const mockOutput = mockAndCaptureOutput() vi.mocked(fetch).mockImplementation(mockFetch) diff --git a/packages/app/src/cli/utilities/mkcert.ts b/packages/app/src/cli/utilities/mkcert.ts index f0ea73f3bd0..b9b35af4478 100644 --- a/packages/app/src/cli/utilities/mkcert.ts +++ b/packages/app/src/cli/utilities/mkcert.ts @@ -109,7 +109,7 @@ async function downloadMkcertLicense(dotShopifyPath: string): Promise { diff --git a/packages/cli-kit/src/private/node/analytics/error-grouping.ts b/packages/cli-kit/src/private/node/analytics/error-grouping.ts index 05e1673b578..3877e81b010 100644 --- a/packages/cli-kit/src/private/node/analytics/error-grouping.ts +++ b/packages/cli-kit/src/private/node/analytics/error-grouping.ts @@ -197,7 +197,7 @@ function parseEmbeddedJson(message: string): EmbeddedGraphQLPayload | undefined try { return JSON.parse(message.slice(jsonStart)) as EmbeddedGraphQLPayload - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch { return undefined } diff --git a/packages/cli-kit/src/private/node/api.ts b/packages/cli-kit/src/private/node/api.ts index 969bbae3611..7c0e1b1a43c 100644 --- a/packages/cli-kit/src/private/node/api.ts +++ b/packages/cli-kit/src/private/node/api.ts @@ -209,7 +209,7 @@ async function makeVerboseRequest( response.headers.forEach((value: any, key: any) => { if (responseHeaderIsInteresting(key)) responseHeaders[key] = value }) - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch (err) { const t1 = performance.now() duration = Math.round(t1 - t0) @@ -227,7 +227,7 @@ async function makeVerboseRequest( try { delayMs = responseHeaders['retry-after'] ? Number.parseInt(responseHeaders['retry-after'], 10) : undefined - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch { // ignore errors in extracting retry-after header } diff --git a/packages/cli-kit/src/private/node/api/graphql.ts b/packages/cli-kit/src/private/node/api/graphql.ts index 9d99517f271..a4522b8cf22 100644 --- a/packages/cli-kit/src/private/node/api/graphql.ts +++ b/packages/cli-kit/src/private/node/api/graphql.ts @@ -38,7 +38,7 @@ function sanitizeDeepVariables(value: unknown, sensitiveKeys: string[]): unknown const sanitized = sanitizeDeepVariables(parsed, sensitiveKeys) return JSON.stringify(sanitized, null) } - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch (error) { return value } diff --git a/packages/cli-kit/src/private/node/content-tokens.ts b/packages/cli-kit/src/private/node/content-tokens.ts index 09c23dbf7eb..29029faeca7 100644 --- a/packages/cli-kit/src/private/node/content-tokens.ts +++ b/packages/cli-kit/src/private/node/content-tokens.ts @@ -78,7 +78,7 @@ export class JsonContentToken extends ContentToken { output(): string { try { return colorJson(stringifyMessage(this.value) ?? {}) - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch (_) { return JSON.stringify(stringifyMessage(this.value) ?? {}, null, 2) } diff --git a/packages/cli-kit/src/private/node/context/agent.ts b/packages/cli-kit/src/private/node/context/agent.ts index 2f4153af890..e7f1a3f401d 100644 --- a/packages/cli-kit/src/private/node/context/agent.ts +++ b/packages/cli-kit/src/private/node/context/agent.ts @@ -41,7 +41,7 @@ export async function detectedAgentEnvironmentVariables( SHOPIFY_CLI_AGENT_INFO: `n:${toolkitAgentNamesByDetectedName.get(detectedName) ?? detectedName}`, }) - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch (error) { let message = 'Unable to detect which AI agent is running the CLI' if (error instanceof Error) { diff --git a/packages/cli-kit/src/private/node/json-error.ts b/packages/cli-kit/src/private/node/json-error.ts index 7777dcdf15c..78f1eefd663 100644 --- a/packages/cli-kit/src/private/node/json-error.ts +++ b/packages/cli-kit/src/private/node/json-error.ts @@ -19,7 +19,7 @@ export function renderFatalErrorAsJson(error: unknown): void { const document = {error: errorToJson(error)} serializedDocument = JSON.stringify(jsonErrorOutputSchema.validate(document)) // Serialization must not replace the JSON contract with a text banner. - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch { serializedDocument = JSON.stringify({error: {type: 'bug', message: 'Failed to serialize the error as JSON.'}}) } diff --git a/packages/cli-kit/src/private/node/output.test.tsx b/packages/cli-kit/src/private/node/output.test.tsx index 1337de9dff2..009e9496bcd 100644 --- a/packages/cli-kit/src/private/node/output.test.tsx +++ b/packages/cli-kit/src/private/node/output.test.tsx @@ -7,7 +7,6 @@ import ansiEscapes from 'ansi-escapes' import {describe, expect, test, vi} from 'vitest' import {PassThrough} from 'stream' // Vitest's console omits the constructor used by Ink's console patch. -// eslint-disable-next-line compat/n-prefer-global-console import {Console} from 'console' // Ink detects CI when imported; exercise terminal rendering on CI runners too. diff --git a/packages/cli-kit/src/private/node/session.ts b/packages/cli-kit/src/private/node/session.ts index aec2781a0c1..a24e951056f 100644 --- a/packages/cli-kit/src/private/node/session.ts +++ b/packages/cli-kit/src/private/node/session.ts @@ -37,7 +37,7 @@ async function fetchEmail(businessPlatformToken: string | undefined): Promise(UserEmailQueryString, businessPlatformToken) return userEmailResult.currentUserAccount?.email ?? undefined - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch (error) { outputDebug(outputContent`Failed to fetch user email: ${(error as Error).message ?? String(error)}`) return undefined diff --git a/packages/cli-kit/src/private/node/ui/components/ConcurrentOutput.tsx b/packages/cli-kit/src/private/node/ui/components/ConcurrentOutput.tsx index 081b16667ff..b4381b56682 100644 --- a/packages/cli-kit/src/private/node/ui/components/ConcurrentOutput.tsx +++ b/packages/cli-kit/src/private/node/ui/components/ConcurrentOutput.tsx @@ -244,7 +244,7 @@ const ConcurrentOutput: FunctionComponent = ({ if (!keepRunningAfterProcessesResolve) { setCompletionResult({}) } - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch (error: unknown) { if (!keepRunningAfterProcessesResolve) { setCompletionResult({error: error as Error}) diff --git a/packages/cli-kit/src/private/node/ui/components/SelectInput.tsx b/packages/cli-kit/src/private/node/ui/components/SelectInput.tsx index e23e8d1dae5..52a4d72b0b9 100644 --- a/packages/cli-kit/src/private/node/ui/components/SelectInput.tsx +++ b/packages/cli-kit/src/private/node/ui/components/SelectInput.tsx @@ -45,7 +45,7 @@ function highlightedLabel(label: string, term: string | undefined) { let regex try { regex = new RegExp(term, 'i') - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch (error) { // term is user provided and could be an invalid regex at that moment (e.g. ending in '\') return label diff --git a/packages/cli-kit/src/private/node/ui/components/TextAnimation.tsx b/packages/cli-kit/src/private/node/ui/components/TextAnimation.tsx index e2ac1e7b421..8f3bf567777 100644 --- a/packages/cli-kit/src/private/node/ui/components/TextAnimation.tsx +++ b/packages/cli-kit/src/private/node/ui/components/TextAnimation.tsx @@ -1,4 +1,4 @@ -/* eslint-disable compat/id-length */ +/* eslint-disable @shopify/cli/id-length */ import {Text, useStdout} from 'ink' import React, {memo, useCallback, useLayoutEffect, useRef, useState} from 'react' import gradient from 'gradient-string' diff --git a/packages/cli-kit/src/public/common/array.ts b/packages/cli-kit/src/public/common/array.ts index 8b22c0b7b93..e038efcee4b 100644 --- a/packages/cli-kit/src/public/common/array.ts +++ b/packages/cli-kit/src/public/common/array.ts @@ -19,7 +19,7 @@ export function takeRandomFromArray(array: T[]): T { * @returns A copy of the array with the undefined elements deleted. */ export function getArrayRejectingUndefined(array: (T | undefined)[]): T[] { - return array.filter((item) => item !== undefined) as Exclude[] + return array.filter((item) => item !== undefined) } /** diff --git a/packages/cli-kit/src/public/common/url.ts b/packages/cli-kit/src/public/common/url.ts index d8a85db9531..0e6d354d767 100644 --- a/packages/cli-kit/src/public/common/url.ts +++ b/packages/cli-kit/src/public/common/url.ts @@ -23,7 +23,7 @@ export function isValidURL(url: string): boolean { export function safeParseURL(url: string): URL | undefined { try { return new URL(url) - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch (error) { return undefined } diff --git a/packages/cli-kit/src/public/node/analytics.ts b/packages/cli-kit/src/public/node/analytics.ts index 574783f4af5..760b654864a 100644 --- a/packages/cli-kit/src/public/node/analytics.ts +++ b/packages/cli-kit/src/public/node/analytics.ts @@ -92,7 +92,7 @@ export async function sendAnalyticsEventFromStdin(): Promise { } await sendAnalyticsEvent(payload, skipMonorailAnalytics, skipMetricAnalytics) - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch (error) { const message = error instanceof Error ? error.message : String(error) outputDebug(`Failed to send analytics in background: ${message}`) @@ -166,7 +166,7 @@ export async function reportAnalyticsEvent(options: ReportAnalyticsEventOptions) // eslint-disable-next-line no-void void analyticsProcess - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch (error) { let message = 'Failed to report usage analytics' if (error instanceof Error) { diff --git a/packages/cli-kit/src/public/node/api/admin.test.ts b/packages/cli-kit/src/public/node/api/admin.test.ts index d7b240b4323..3dacc5983fd 100644 --- a/packages/cli-kit/src/public/node/api/admin.test.ts +++ b/packages/cli-kit/src/public/node/api/admin.test.ts @@ -200,12 +200,9 @@ describe('fetchApiVersions error classification', () => { // Mirrors `packages/cli-kit/src/public/node/error/index.test.ts`: a real `ClientError`, because // the branches under test use `instanceof ClientError`. function clientError(status: number, errors: unknown): ClientError { - return new ClientError( - {status, errors, headers: {}} as any, - { - query: 'query publicApiVersions { publicApiVersions { handle supported } }', - } as any, - ) + return new ClientError({status, errors, headers: {}} as any, { + query: 'query publicApiVersions { publicApiVersions { handle supported } }', + }) } test('reports a 402 Unavailable Shop as an expected store-state failure, not a CLI bug', async () => { diff --git a/packages/cli-kit/src/public/node/api/graphql.ts b/packages/cli-kit/src/public/node/api/graphql.ts index 137bfd1b365..7b82eccf03e 100644 --- a/packages/cli-kit/src/public/node/api/graphql.ts +++ b/packages/cli-kit/src/public/node/api/graphql.ts @@ -285,7 +285,7 @@ async function logLastRequestIdFromResponse(response: GraphQLResponse) await addPublicMetadata(() => ({ cmd_all_last_graphql_request_id: requestId ?? undefined, })) - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch { // no problem if unable to get request ID. } diff --git a/packages/cli-kit/src/public/node/archiver.ts b/packages/cli-kit/src/public/node/archiver.ts index 35d781a2f75..755c4d52345 100644 --- a/packages/cli-kit/src/public/node/archiver.ts +++ b/packages/cli-kit/src/public/node/archiver.ts @@ -195,7 +195,7 @@ export async function brotliCompress(options: BrotliOptions): Promise { } finally { try { await removeFile(tempTarPath) - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch (error) { outputDebug(outputContent`Failed to clean up temporary file: ${outputToken.path(tempTarPath)}`) } diff --git a/packages/cli-kit/src/public/node/base-command.test.ts b/packages/cli-kit/src/public/node/base-command.test.ts index 30cf81da03a..dbf6bc6d477 100644 --- a/packages/cli-kit/src/public/node/base-command.test.ts +++ b/packages/cli-kit/src/public/node/base-command.test.ts @@ -347,7 +347,7 @@ describe('applying environments', async () => { testResult = {} testError = undefined await inTemporaryDirectory(async (tmpDir) => { - await writeFile(joinPath(tmpDir, 'shopify.environments.toml'), encodeTOML(allEnvironments as any)) + await writeFile(joinPath(tmpDir, 'shopify.environments.toml'), encodeTOML(allEnvironments)) await testFunc(tmpDir) }) }) @@ -874,7 +874,7 @@ const deleteDefaultEnvironment = async (tmpDir: string): Promise => { const clone = {...allEnvironments} clone.environments = {...allEnvironments.environments} delete clone.environments.default - await writeFile(joinPath(tmpDir, 'shopify.environments.toml'), encodeTOML({environments: clone} as any)) + await writeFile(joinPath(tmpDir, 'shopify.environments.toml'), encodeTOML({environments: clone})) } describe('removeDuplicatedPlugins', () => { @@ -892,7 +892,7 @@ describe('removeDuplicatedPlugins', () => { const result = await super.init() // Capture the plugins after init (which calls removeDuplicatedPlugins) - // eslint-disable-next-line compat/require-atomic-updates + capturedPlugins = new Map(this.config.plugins) return result diff --git a/packages/cli-kit/src/public/node/base-command.ts b/packages/cli-kit/src/public/node/base-command.ts index b05d9e0f3e9..3b921e5cbd6 100644 --- a/packages/cli-kit/src/public/node/base-command.ts +++ b/packages/cli-kit/src/public/node/base-command.ts @@ -444,7 +444,7 @@ async function removeDuplicatedPlugins(config: Config): Promise { }) } const filteredPlugins = plugins.filter((plugin) => !bundlePlugins.includes(plugin.name)) - // eslint-disable-next-line compat/require-atomic-updates -- config.plugins won't be modified by renderWarning above + config.plugins = new Map(filteredPlugins.map((plugin) => [plugin.name, plugin])) } diff --git a/packages/cli-kit/src/public/node/cli-launcher.ts b/packages/cli-kit/src/public/node/cli-launcher.ts index 49edb55f701..48bcd268101 100644 --- a/packages/cli-kit/src/public/node/cli-launcher.ts +++ b/packages/cli-kit/src/public/node/cli-launcher.ts @@ -47,7 +47,7 @@ export async function launchCLI(options: Options): Promise { await run(argv, config) await flush() - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch (error) { const {errorHandler} = await import('./error-handler.js') await errorHandler(error as Error) diff --git a/packages/cli-kit/src/public/node/context/local.ts b/packages/cli-kit/src/public/node/context/local.ts index 07754e82a4f..630d6d8f000 100644 --- a/packages/cli-kit/src/public/node/context/local.ts +++ b/packages/cli-kit/src/public/node/context/local.ts @@ -240,7 +240,7 @@ export async function hasGit(): Promise { try { await lazyExec('git', ['--version']) return true - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch { return false } diff --git a/packages/cli-kit/src/public/node/custom-oclif-loader.ts b/packages/cli-kit/src/public/node/custom-oclif-loader.ts index 0b3542f62ff..7f0914807da 100644 --- a/packages/cli-kit/src/public/node/custom-oclif-loader.ts +++ b/packages/cli-kit/src/public/node/custom-oclif-loader.ts @@ -84,7 +84,7 @@ function setShellVariableWhenUserLookupFails(): void { try { os.userInfo() - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch { process.env.SHELL = 'unknown' } diff --git a/packages/cli-kit/src/public/node/doctor/framework.ts b/packages/cli-kit/src/public/node/doctor/framework.ts index b4062d3160e..4526063077e 100644 --- a/packages/cli-kit/src/public/node/doctor/framework.ts +++ b/packages/cli-kit/src/public/node/doctor/framework.ts @@ -90,7 +90,7 @@ export abstract class DoctorSuite { } eventHandler(mockEvent) capturedEventHandler(mockEvent) - lastBugsnagEvent = mockEvent as any + lastBugsnagEvent = mockEvent callback(null) }, isStarted: () => true, @@ -218,7 +218,7 @@ describe('sends errors to Bugsnag', () => { }) test('processes string instances', async () => { - const res = await sendErrorToBugsnag('In test' as any, 'unexpected_error') + const res = await sendErrorToBugsnag('In test', 'unexpected_error') expect(res.reported).toEqual(true) const {error} = res as any expect(error.stack).toMatch(/^Error: In test/) diff --git a/packages/cli-kit/src/public/node/error-handler.ts b/packages/cli-kit/src/public/node/error-handler.ts index 706249ed1d4..761ae3724d0 100644 --- a/packages/cli-kit/src/public/node/error-handler.ts +++ b/packages/cli-kit/src/public/node/error-handler.ts @@ -192,7 +192,7 @@ export async function sendErrorToBugsnag( }) } return {error: reportableError, reported: report, unhandled} - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch (err) { outputDebug(`Error reporting to Bugsnag: ${err}`) return {error, reported: false, unhandled: undefined} @@ -258,7 +258,7 @@ export async function registerCleanBugsnagErrorsFromWithinPlugins(config: Interf }) try { await addBugsnagMetadata(event, config) - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch (metadataError) { outputDebug(`There was an error adding metadata to the Bugsnag report; Ignoring and carrying on ${metadataError}`) } diff --git a/packages/cli-kit/src/public/node/error/index.test.ts b/packages/cli-kit/src/public/node/error/index.test.ts index 9958fe57271..0c5619baf70 100644 --- a/packages/cli-kit/src/public/node/error/index.test.ts +++ b/packages/cli-kit/src/public/node/error/index.test.ts @@ -14,7 +14,7 @@ import {beforeEach, describe, expect, test, vi} from 'vitest' function clientError(status: number, code?: string): ClientError { const errors = code ? [{message: 'boom', extensions: {code}}] : undefined - return new ClientError({status, errors, headers: {}} as any, {query: 'q'} as any) + return new ClientError({status, errors, headers: {}} as any, {query: 'q'}) } vi.mock('../ui.js') @@ -160,7 +160,7 @@ describe('shouldReportErrorAsUnexpected helper', () => { test('returns false for a rate-limit code on a later error entry, not just the first', () => { const error = new ClientError( {status: 200, errors: [{message: 'noise'}, {extensions: {code: 'THROTTLED'}}], headers: {}} as any, - {query: 'q'} as any, + {query: 'q'}, ) expect(shouldReportErrorAsUnexpected(error)).toBe(false) }) diff --git a/packages/cli-kit/src/public/node/error/index.ts b/packages/cli-kit/src/public/node/error/index.ts index 2b608baddb7..aace5d2b01b 100644 --- a/packages/cli-kit/src/public/node/error/index.ts +++ b/packages/cli-kit/src/public/node/error/index.ts @@ -187,7 +187,7 @@ export function errorMapper(error: unknown): Promise { function isFatal(error: unknown): error is FatalError { try { return Object.prototype.hasOwnProperty.call(error, 'type') - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch { return false } diff --git a/packages/cli-kit/src/public/node/fs.ts b/packages/cli-kit/src/public/node/fs.ts index cd3aecf4742..189f27b076c 100644 --- a/packages/cli-kit/src/public/node/fs.ts +++ b/packages/cli-kit/src/public/node/fs.ts @@ -311,7 +311,7 @@ export async function symlink(target: string, path: string): Promise { if (stats.isDirectory()) { type = 'junction' } - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch { // If we can't stat the target, assume it's a file } @@ -462,7 +462,7 @@ export async function fileLastUpdatedTimestamp(path: string): Promise { try { await fsAccess(path) return true - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch { return false } diff --git a/packages/cli-kit/src/public/node/graphiql/server.ts b/packages/cli-kit/src/public/node/graphiql/server.ts index 9ca1548c886..3f900c79aeb 100644 --- a/packages/cli-kit/src/public/node/graphiql/server.ts +++ b/packages/cli-kit/src/public/node/graphiql/server.ts @@ -216,7 +216,7 @@ export function setupGraphiQLServer(options: SetupGraphiQLServerOptions): Server try { await fetchApiVersionsWithTokenRefresh() return {status: 'OK', storeFqdn, appName: appContext?.appName, appUrl: appContext?.appUrl} - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch { return {status: 'UNAUTHENTICATED'} } @@ -334,7 +334,7 @@ export function setupGraphiQLServer(options: SetupGraphiQLServerOptions): Server setResponseHeader(event, 'Content-Type', 'application/json') setResponseStatus(event, result.status) return result.json() - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch (error: unknown) { setResponseStatus(event, 500) if (error instanceof Error) { diff --git a/packages/cli-kit/src/public/node/graphql.ts b/packages/cli-kit/src/public/node/graphql.ts index 82fd931f05d..2f0a2ad5d85 100644 --- a/packages/cli-kit/src/public/node/graphql.ts +++ b/packages/cli-kit/src/public/node/graphql.ts @@ -22,7 +22,7 @@ export function containsMutation(query: string, operationName?: string): boolean let document try { document = parse(query) - // eslint-disable-next-line no-catch-all/no-catch-all -- swallowing parse errors is the entire purpose + // eslint-disable-next-line @shopify/cli/no-catch-all -- swallowing parse errors is the entire purpose } catch { return false } diff --git a/packages/cli-kit/src/public/node/hooks/postrun.ts b/packages/cli-kit/src/public/node/hooks/postrun.ts index 08d2afd6518..8877a1b759c 100644 --- a/packages/cli-kit/src/public/node/hooks/postrun.ts +++ b/packages/cli-kit/src/public/node/hooks/postrun.ts @@ -54,7 +54,7 @@ export function waitForPostRunHookAndExit(): void { // This hook is called after each successful command run. More info: https://oclif.io/docs/hooks export const hook: Hook.Postrun = async ({config, Command}) => { - await detectStopCommand(Command as unknown as typeof Command) + await detectStopCommand(Command) const metadata = await import('../metadata.js') const {commandStartOptions} = metadata.getAllSensitiveMetadata() @@ -147,7 +147,7 @@ async function performAutoUpgrade(newerVersion: string): Promise { try { await runCLIUpgrade({autoupgrade: true}) await metadata.addPublicMetadata(() => ({env_auto_upgrade_success: true})) - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch (error) { const errorMessage = `Auto-upgrade failed: ${error}` outputDebug(errorMessage) diff --git a/packages/cli-kit/src/public/node/http.ts b/packages/cli-kit/src/public/node/http.ts index 86bda5a9f9b..6d7d17daf76 100644 --- a/packages/cli-kit/src/public/node/http.ts +++ b/packages/cli-kit/src/public/node/http.ts @@ -236,7 +236,7 @@ export function downloadFile(url: string, to: string): Promise { if (fileExistsSync(to)) { unlinkFileSync(to) } - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch (err: unknown) { outputDebug(outputContent`Failed to remove file ${outputToken.path(to)}: ${outputToken.raw(String(err))}`) } diff --git a/packages/cli-kit/src/public/node/is-global.ts b/packages/cli-kit/src/public/node/is-global.ts index 9bb193719a6..63b5de12113 100644 --- a/packages/cli-kit/src/public/node/is-global.ts +++ b/packages/cli-kit/src/public/node/is-global.ts @@ -41,7 +41,7 @@ export function currentProcessIsGlobal(argv = process.argv): boolean { _isGlobal = !isLocal return _isGlobal - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch (error) { return false } @@ -112,7 +112,7 @@ export function inferPackageManagerForGlobalCLI(argv = process.argv, env = proce let realPath = symlinkPath try { realPath = realpathSync(processArgv).toLowerCase() - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch (error) { // fall back to using the original path for detection } @@ -152,7 +152,7 @@ export function getProjectDir(directory: string): string | undefined { type: 'file', }) if (configFile) return dirname(configFile) - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch (error) { return undefined } diff --git a/packages/cli-kit/src/public/node/local-storage.ts b/packages/cli-kit/src/public/node/local-storage.ts index e59eb420943..2d75518c55a 100644 --- a/packages/cli-kit/src/public/node/local-storage.ts +++ b/packages/cli-kit/src/public/node/local-storage.ts @@ -66,7 +66,7 @@ export class LocalStorage> { get(key: TKey): T[TKey] | undefined { try { return this.config.get(key) - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch (error) { this.handleError(error, 'get') } @@ -83,7 +83,7 @@ export class LocalStorage> { set(key: TKey, value?: T[TKey]): void { try { this.config.set(key, value) - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch (error) { this.handleError(error, 'set') } @@ -99,7 +99,7 @@ export class LocalStorage> { delete(key: TKey): void { try { this.config.delete(key) - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch (error) { this.handleError(error, 'delete') } @@ -114,7 +114,7 @@ export class LocalStorage> { clear(): void { try { this.config.clear() - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch (error) { this.handleError(error, 'clear') } diff --git a/packages/cli-kit/src/public/node/metadata.test.ts b/packages/cli-kit/src/public/node/metadata.test.ts index 4500b4681e6..fe0b2fdd1d5 100644 --- a/packages/cli-kit/src/public/node/metadata.test.ts +++ b/packages/cli-kit/src/public/node/metadata.test.ts @@ -127,7 +127,7 @@ describe('runtime metadata', () => { clock.restore() } - // eslint-disable-next-line compat/id-length + // eslint-disable-next-line @shopify/cli/id-length const {a, b, c, d, e} = container.getAllPublicMetadata() as any expect(a).toBeGreaterThanOrEqual(0) @@ -170,7 +170,7 @@ describe('runtime metadata', () => { throw new Error('error inside a nested timed section') }) }) - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch { errorOccurred = true } finally { @@ -179,7 +179,7 @@ describe('runtime metadata', () => { expect(errorOccurred).toBe(true) - // eslint-disable-next-line compat/id-length + // eslint-disable-next-line @shopify/cli/id-length const {a, b} = container.getAllPublicMetadata() as any expect(a).toBeGreaterThanOrEqual(0) expect(b).toBeGreaterThanOrEqual(0) diff --git a/packages/cli-kit/src/public/node/metadata.ts b/packages/cli-kit/src/public/node/metadata.ts index 2530ab6d96b..1bc5f72fee4 100644 --- a/packages/cli-kit/src/public/node/metadata.ts +++ b/packages/cli-kit/src/public/node/metadata.ts @@ -92,7 +92,7 @@ export function createRuntimeMetadataContainer< } else { try { await getAndSet() - // eslint-disable-next-line no-catch-all/no-catch-all, @typescript-eslint/no-explicit-any + // eslint-disable-next-line @shopify/cli/no-catch-all, @typescript-eslint/no-explicit-any } catch (error: any) { // This is very prone to becoming a circular dependency, so we import it dynamically const {sendErrorToBugsnag} = await import('./error-handler.js') diff --git a/packages/cli-kit/src/public/node/monorail.ts b/packages/cli-kit/src/public/node/monorail.ts index 7c9f04122f1..8d89245f93b 100644 --- a/packages/cli-kit/src/public/node/monorail.ts +++ b/packages/cli-kit/src/public/node/monorail.ts @@ -234,7 +234,7 @@ export async function publishMonorailEvent { test('ignores invalid package manager in options', () => { const mockEnv = {npm_config_user_agent: 'npm/1.0.0'} - expect(inferPackageManager('invalid' as PackageManager, mockEnv)).toBe('npm') + expect(inferPackageManager('invalid', mockEnv)).toBe('npm') }) test('infers package manager from user agent when not provided in options', () => { diff --git a/packages/cli-kit/src/public/node/node-package-manager.ts b/packages/cli-kit/src/public/node/node-package-manager.ts index 48d5bc1cccf..0d6725b16df 100644 --- a/packages/cli-kit/src/public/node/node-package-manager.ts +++ b/packages/cli-kit/src/public/node/node-package-manager.ts @@ -321,7 +321,7 @@ export async function checkForNewVersion( let lastVersion try { lastVersion = await cacheRetrieveOrRepopulate(cacheKey, getLatestVersion, cacheExpiryInHours * 3600 * 1000) - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch (error) { return undefined } diff --git a/packages/cli-kit/src/public/node/notifications-system.ts b/packages/cli-kit/src/public/node/notifications-system.ts index 32d2b7b4e2c..d07b30cdc0f 100644 --- a/packages/cli-kit/src/public/node/notifications-system.ts +++ b/packages/cli-kit/src/public/node/notifications-system.ts @@ -41,7 +41,7 @@ function url(): string { outputDebug( `The notifications URL provided via SHOPIFY_CLI_NOTIFICATIONS_URL (${envUrl}) must use https, or http with a loopback host. Falling back to default.`, ) - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch { outputDebug( `The notifications URL provided via SHOPIFY_CLI_NOTIFICATIONS_URL (${envUrl}) is not a valid URL. Falling back to default.`, diff --git a/packages/cli-kit/src/public/node/os.ts b/packages/cli-kit/src/public/node/os.ts index 89171932a89..269ef49b5b7 100644 --- a/packages/cli-kit/src/public/node/os.ts +++ b/packages/cli-kit/src/public/node/os.ts @@ -35,10 +35,10 @@ export async function username(platform: typeof process.platform = process.platf const {stdout} = await execa('id', ['-un', userId]) return stdout - // eslint-disable-next-line no-catch-all/no-catch-all,no-empty + // eslint-disable-next-line @shopify/cli/no-catch-all, no-empty } catch {} return makeUsernameFromId(userId) - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch { return null } @@ -78,7 +78,7 @@ function getEnvironmentVariable() { function getUsernameFromOsUserInfo(): string | null { try { return osUserInfo().username - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch { return null } diff --git a/packages/cli-kit/src/public/node/output.test.ts b/packages/cli-kit/src/public/node/output.test.ts index 0805efabf4a..5c899b51054 100644 --- a/packages/cli-kit/src/public/node/output.test.ts +++ b/packages/cli-kit/src/public/node/output.test.ts @@ -18,7 +18,6 @@ import {renderCommandEventAsJson, runWithCommandEvents} from './command-events.j import {currentProcessIsGlobal} from './is-global.js' import {beforeEach, describe, expect, test, vi} from 'vitest' import {Writable} from 'stream' -// eslint-disable-next-line compat/n-prefer-global-console import {Console} from 'node:console' const isVerboseMock = vi.hoisted(() => vi.fn(() => false)) diff --git a/packages/cli-kit/src/public/node/path.ts b/packages/cli-kit/src/public/node/path.ts index 40ac87eb601..d9fbdee500b 100644 --- a/packages/cli-kit/src/public/node/path.ts +++ b/packages/cli-kit/src/public/node/path.ts @@ -10,9 +10,9 @@ import { isAbsolute, } from 'pathe' import {fileURLToPath} from 'url' -// eslint-disable-next-line no-restricted-imports -- Native containment must preserve literal POSIX backslashes. +// eslint-disable-next-line @shopify/cli/restricted-imports -- Native containment must preserve literal POSIX backslashes. import {relative as nativeRelative, isAbsolute as nativeIsAbsolute, sep as nativeSeparator} from 'node:path' -// eslint-disable-next-line compat/n-prefer-global-url +// eslint-disable-next-line @shopify/cli/prefer-global-url import type {URL} from 'url' interface IsSubpathOptions { diff --git a/packages/cli-kit/src/public/node/session-prompt.test.ts b/packages/cli-kit/src/public/node/session-prompt.test.ts index afd1d72aecd..3a97e0f5d33 100644 --- a/packages/cli-kit/src/public/node/session-prompt.test.ts +++ b/packages/cli-kit/src/public/node/session-prompt.test.ts @@ -125,7 +125,7 @@ describe('promptSessionSelect', () => { scopes: ['scope3'], userId: 'user3', // Missing alias - alias: undefined as any, + alias: undefined, }, applications: {}, }, diff --git a/packages/cli-kit/src/public/node/store-auth-session.test.ts b/packages/cli-kit/src/public/node/store-auth-session.test.ts index afa209a8b01..b337f757626 100644 --- a/packages/cli-kit/src/public/node/store-auth-session.test.ts +++ b/packages/cli-kit/src/public/node/store-auth-session.test.ts @@ -25,7 +25,7 @@ function inMemoryStorage() { return { get(key: string) { - return values.get(key) as any + return values.get(key) }, set(key: string, value: unknown) { values.set(key, value) diff --git a/packages/cli-kit/src/public/node/system.ts b/packages/cli-kit/src/public/node/system.ts index e2e2109deeb..f1ac7262d85 100644 --- a/packages/cli-kit/src/public/node/system.ts +++ b/packages/cli-kit/src/public/node/system.ts @@ -66,7 +66,7 @@ export async function openURL(url: string): Promise { try { const subprocess = await externalOpen.default(url) return await browserLaunchSucceeded(subprocess) - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch (error) { return false } @@ -418,7 +418,7 @@ export async function isWsl(overrides: WslDetectionOverrides = {}): Promise { try { await renderConcurrent({processes: [throwingProcess]}) - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch (error) { renderFatalError(error as FatalError) } @@ -725,7 +725,7 @@ describe('renderTasks', async () => { try { await renderTasks([throwingTask]) - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch (error: any) { renderWarning({ headline: error.message, @@ -786,7 +786,7 @@ describe('keypress', async () => { let rejected = false try { await promise - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch (rejection: any) { expect(rejection.type).toEqual(FatalErrorType.AbortSilent) rejected = true diff --git a/packages/cli-kit/src/public/node/ui.tsx b/packages/cli-kit/src/public/node/ui.tsx index 6f65e8152e5..32ee3c254a3 100644 --- a/packages/cli-kit/src/public/node/ui.tsx +++ b/packages/cli-kit/src/public/node/ui.tsx @@ -1,4 +1,4 @@ -/* eslint-disable tsdoc/syntax */ +/* eslint-disable @shopify/cli/tsdoc-syntax */ import {AbortError, AbortSilentError, FatalError as Fatal} from './error.js' import {commandEventOutputMode, emitCommandEvent} from './command-events.js' import {randomUUID} from './crypto.js' diff --git a/packages/cli-kit/src/public/node/upgrade.test.ts b/packages/cli-kit/src/public/node/upgrade.test.ts index edd7cad4ddf..8e39b8c3eee 100644 --- a/packages/cli-kit/src/public/node/upgrade.test.ts +++ b/packages/cli-kit/src/public/node/upgrade.test.ts @@ -7,7 +7,6 @@ import { getPackageManager, usesWorkspaces, packageManagerFromUserAgent, - PackageManager, } from './node-package-manager.js' import {exec, isCI} from './system.js' import { @@ -220,7 +219,7 @@ describe('runCLIUpgrade', () => { // Given vi.mocked(currentProcessIsGlobal).mockReturnValue(true) // 'unknown' is returned by inferPackageManagerForGlobalCLI for local installs - vi.mocked(inferPackageManagerForGlobalCLI).mockReturnValue('unknown' as PackageManager) + vi.mocked(inferPackageManagerForGlobalCLI).mockReturnValue('unknown') // When/Then await expect(runCLIUpgrade()).rejects.toThrow('Could not determine the package manager') diff --git a/packages/cli-kit/src/public/node/upgrade.ts b/packages/cli-kit/src/public/node/upgrade.ts index 56b00d23fe7..574e44d89ae 100644 --- a/packages/cli-kit/src/public/node/upgrade.ts +++ b/packages/cli-kit/src/public/node/upgrade.ts @@ -207,7 +207,7 @@ export async function hasBlockingAutoUpgradeNotification(): Promise { // written to the lastShown cache for these notifications. const matching = filterNotifications(notifications, '', ['autoupgrade']) return matching.some((notification) => notification.type === 'error') - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch { return false } diff --git a/packages/cli-kit/src/public/node/version.ts b/packages/cli-kit/src/public/node/version.ts index a28ba9e44cf..bf94b5d59f0 100644 --- a/packages/cli-kit/src/public/node/version.ts +++ b/packages/cli-kit/src/public/node/version.ts @@ -11,7 +11,7 @@ export async function localCLIVersion(directory: string): Promise { } } return undefined - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch { return undefined } diff --git a/packages/cli/bin/bundle.js b/packages/cli/bin/bundle.js index a431b46e64b..1f330504e23 100644 --- a/packages/cli/bin/bundle.js +++ b/packages/cli/bin/bundle.js @@ -1,4 +1,4 @@ -/* eslint-disable @shopify/cli/specific-imports-in-bootstrap-code, compat/nx-enforce-module-boundaries */ +/* eslint-disable @shopify/cli/specific-imports-in-bootstrap-code, @shopify/cli/module-boundaries */ import {createRequire} from 'module' import {readFileSync} from 'fs' diff --git a/packages/cli/bin/dev.js b/packages/cli/bin/dev.js index 6ec87b782f0..e5c2f8692c9 100755 --- a/packages/cli/bin/dev.js +++ b/packages/cli/bin/dev.js @@ -1,4 +1,4 @@ -// eslint-disable-next-line compat/n-no-unsupported-features-node-builtins + import {enableCompileCache} from 'node:module' if (enableCompileCache) enableCompileCache() diff --git a/packages/cli/bin/run.js b/packages/cli/bin/run.js index 294f7991606..1d0f1a87fa5 100755 --- a/packages/cli/bin/run.js +++ b/packages/cli/bin/run.js @@ -1,6 +1,6 @@ #!/usr/bin/env node -// eslint-disable-next-line compat/n-no-unsupported-features-node-builtins + import {enableCompileCache} from 'node:module' if (enableCompileCache) enableCompileCache() diff --git a/packages/cli/project.json b/packages/cli/project.json index 5f83298337a..58113824f1b 100644 --- a/packages/cli/project.json +++ b/packages/cli/project.json @@ -36,14 +36,14 @@ "lint": { "executor": "nx:run-commands", "options": { - "command": "pnpm eslint src 'bin/*.js'", + "command": "pnpm oxlint --config ../../oxlint.json --deny-warnings src 'bin/*.js'", "cwd": "packages/cli" } }, "lint:fix": { "executor": "nx:run-commands", "options": { - "command": "pnpm eslint src 'bin/*.js' --fix", + "command": "pnpm oxlint --config ../../oxlint.json --fix src 'bin/*.js'", "cwd": "packages/cli" } }, diff --git a/packages/cli/src/cli/commands/help.test.ts b/packages/cli/src/cli/commands/help.test.ts index 7c4f490e48b..040040bc6bc 100644 --- a/packages/cli/src/cli/commands/help.test.ts +++ b/packages/cli/src/cli/commands/help.test.ts @@ -101,7 +101,7 @@ describe('help command', () => { helpLoader.mockRestore() handleError.mockRestore() // These tests run sequentially and must restore argv even when an assertion fails. - // eslint-disable-next-line compat/require-atomic-updates + process.argv = originalArgv } }) diff --git a/packages/cli/src/cli/commands/help.ts b/packages/cli/src/cli/commands/help.ts index 383e6ba6536..c4a6b26d6c4 100644 --- a/packages/cli/src/cli/commands/help.ts +++ b/packages/cli/src/cli/commands/help.ts @@ -35,13 +35,13 @@ export default class HelpCommand extends Command { async run(): Promise { const {argv, flags} = await this.parse(HelpCommand) if (flags.json) { - const result = await helpService(this.config, argv as string[], flags['nested-commands']) + const result = await helpService(this.config, argv, flags['nested-commands']) presentHelpResult(result) return } const Help = await loadHelpClass(this.config) const help = new Help(this.config, {all: flags['nested-commands']}) - await help.showHelp(argv as string[]) + await help.showHelp(argv) } } diff --git a/packages/cli/src/cli/help.test.ts b/packages/cli/src/cli/help.test.ts index 075af2ef976..f6b3765b42f 100644 --- a/packages/cli/src/cli/help.test.ts +++ b/packages/cli/src/cli/help.test.ts @@ -32,11 +32,7 @@ function renderFlags(flags: Command.Flag.Any[]): [string, string | undefined][] } function renderDescription(command: Partial, maxWidth = 80): string | undefined { - const help = new ShopifyCommandHelp( - command as Command.Loadable, - {} as Interfaces.Config, - {maxWidth} as Interfaces.HelpOptions, - ) + const help = new ShopifyCommandHelp(command as Command.Loadable, {} as Interfaces.Config, {maxWidth}) return (help as unknown as {description: () => string | undefined}).description() } @@ -70,11 +66,7 @@ interface Result { test('uses the default description formatting when there are no code blocks', () => { const command = {summary: 'Return a value.', description: 'A regular command description.'} - const defaultHelp = new CommandHelp( - command as Command.Loadable, - {} as Interfaces.Config, - {maxWidth: 80} as Interfaces.HelpOptions, - ) + const defaultHelp = new CommandHelp(command as Command.Loadable, {} as Interfaces.Config, {maxWidth: 80}) const defaultDescription = (defaultHelp as unknown as {description: () => string | undefined}).description() expect(renderDescription(command)).toBe(defaultDescription) @@ -154,11 +146,7 @@ interface Result { test('renders flags with enough width to keep long env labels intact', () => { // Given - const help = new ShopifyCommandHelp( - {} as Command.Loadable, - {} as Interfaces.Config, - {maxWidth: 80} as Interfaces.HelpOptions, - ) + const help = new ShopifyCommandHelp({} as Command.Loadable, {} as Interfaces.Config, {maxWidth: 80}) const rows = [ [ '--skip-dependencies-installation', diff --git a/packages/cli/src/uncaught-error-handler.ts b/packages/cli/src/uncaught-error-handler.ts index 4bb9c03e32d..2c647d867b9 100644 --- a/packages/cli/src/uncaught-error-handler.ts +++ b/packages/cli/src/uncaught-error-handler.ts @@ -26,7 +26,7 @@ export async function renderUncaughtError(error: unknown): Promise { } else { writeRawError(error) } - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch { writeRawError(error) } diff --git a/packages/create-app/package.json b/packages/create-app/package.json index f9b85c5ffa0..a763df624d0 100644 --- a/packages/create-app/package.json +++ b/packages/create-app/package.json @@ -49,11 +49,6 @@ "vitest": "vitest", "type-check": "nx type-check" }, - "eslintConfig": { - "extends": [ - "../../.eslintrc.cjs" - ] - }, "dependencies": { "esbuild": "0.28.1" }, diff --git a/packages/create-app/project.json b/packages/create-app/project.json index 79b3eb4177f..81ef166d839 100644 --- a/packages/create-app/project.json +++ b/packages/create-app/project.json @@ -30,14 +30,14 @@ "lint": { "executor": "nx:run-commands", "options": { - "command": "pnpm eslint \"src/**/*.ts\"", + "command": "pnpm oxlint --config ../../oxlint.json --deny-warnings src", "cwd": "packages/create-app" } }, "lint:fix": { "executor": "nx:run-commands", "options": { - "command": "pnpm eslint 'src/**/*.ts' --fix", + "command": "pnpm oxlint --config ../../oxlint.json --fix src", "cwd": "packages/create-app" } }, diff --git a/packages/e2e/helpers/browser-login.ts b/packages/e2e/helpers/browser-login.ts index 420f8a2646f..d80826aa041 100644 --- a/packages/e2e/helpers/browser-login.ts +++ b/packages/e2e/helpers/browser-login.ts @@ -78,7 +78,7 @@ export async function completeLogin(page: Page, loginUrl: string, email: string, try { const btn = page.locator('button[type="submit"]').first() if (await isVisibleWithin(btn, BROWSER_TIMEOUT.long)) await btn.click() - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch (_error) { // No confirmation page — expected } diff --git a/packages/e2e/package.json b/packages/e2e/package.json index 119246f80ee..e5b9903a47a 100644 --- a/packages/e2e/package.json +++ b/packages/e2e/package.json @@ -10,24 +10,6 @@ "lint:fix": "nx lint:fix", "type-check": "nx type-check" }, - "eslintConfig": { - "extends": [ - "../../.eslintrc.cjs" - ], - "ignorePatterns": [ - "scripts/" - ], - "rules": { - "no-console": "off", - "import/extensions": [ - "error", - "never", - { - "ignorePackages": true - } - ] - } - }, "devDependencies": { "@iarna/toml": "2.2.5", "@playwright/test": "^1.61.1", diff --git a/packages/e2e/playwright.config.ts b/packages/e2e/playwright.config.ts index cbdaf11a6df..cd025dc580f 100644 --- a/packages/e2e/playwright.config.ts +++ b/packages/e2e/playwright.config.ts @@ -1,4 +1,3 @@ -/* eslint-disable compat/line-comment-position */ import {TEST_TIMEOUT} from './setup/constants.js' import {config} from 'dotenv' import {defineConfig} from '@playwright/test' diff --git a/packages/e2e/project.json b/packages/e2e/project.json index cc050bd29ac..b1f92bfda1e 100644 --- a/packages/e2e/project.json +++ b/packages/e2e/project.json @@ -17,14 +17,14 @@ "lint": { "executor": "nx:run-commands", "options": { - "command": "pnpm eslint \"setup/**/*.ts\" \"helpers/**/*.ts\" \"tests/**/*.ts\" \"*.ts\"", + "command": "pnpm oxlint --config ../../oxlint.json --deny-warnings .", "cwd": "packages/e2e" } }, "lint:fix": { "executor": "nx:run-commands", "options": { - "command": "pnpm eslint 'setup/**/*.ts' 'helpers/**/*.ts' 'tests/**/*.ts' '*.ts' --fix", + "command": "pnpm oxlint --config ../../oxlint.json --fix .", "cwd": "packages/e2e" } }, diff --git a/packages/e2e/scripts/cleanup-apps.ts b/packages/e2e/scripts/cleanup-apps.ts index 586f684119d..c481d416753 100644 --- a/packages/e2e/scripts/cleanup-apps.ts +++ b/packages/e2e/scripts/cleanup-apps.ts @@ -95,7 +95,7 @@ const DASHBOARD_ERROR_PATTERN = /(unprocessable entity|request can't be processe function isAccountsShopifyUrl(rawUrl: string): boolean { try { return new URL(rawUrl).hostname === 'accounts.shopify.com' - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch { return false } @@ -577,7 +577,7 @@ async function uninstallApp(page: Page, appUrl: string, appName: string): Promis try { const uninstalled = await uninstallAppFromStore(page, storeSlug, appName) if (!uninstalled) allUninstalled = false - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch (err) { console.warn(` Failed to uninstall from ${storeSlug}: ${err instanceof Error ? err.message : String(err)}`) allUninstalled = false diff --git a/packages/e2e/scripts/cleanup-stores.ts b/packages/e2e/scripts/cleanup-stores.ts index 61108caca04..1d96ca65b8b 100644 --- a/packages/e2e/scripts/cleanup-stores.ts +++ b/packages/e2e/scripts/cleanup-stores.ts @@ -81,7 +81,7 @@ export interface CleanupStoresOptions { function isAccountsShopifyUrl(rawUrl: string): boolean { try { return new URL(rawUrl).hostname === 'accounts.shopify.com' - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch { return false } @@ -245,7 +245,7 @@ export async function cleanupStores(opts: CleanupStoresOptions = {}): Promise { try { return await findStoresWithBusinessPlatformApi(opts.pattern, opts.orgId) - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch (err) { console.warn( `[cleanup-stores] API discovery failed, falling back to Dev Dashboard UI: ${err instanceof Error ? err.message : err}`, diff --git a/packages/e2e/scripts/prime-browser-auth.ts b/packages/e2e/scripts/prime-browser-auth.ts index 6e6ae2cc6cd..7584f42ac36 100644 --- a/packages/e2e/scripts/prime-browser-auth.ts +++ b/packages/e2e/scripts/prime-browser-auth.ts @@ -47,7 +47,7 @@ interface PrimeBrowserAuthOptions { function isAccountsShopifyUrl(rawUrl: string): boolean { try { return new URL(rawUrl).hostname === 'accounts.shopify.com' - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch { return false } @@ -180,7 +180,7 @@ async function primeCliAuth(page: Page, email: string, password: string, env: No } finally { try { ptyProcess.kill() - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch (_error) { // Process may already be dead. } @@ -190,7 +190,7 @@ async function primeCliAuth(page: Page, email: string, password: string, env: No async function attemptVisitAndHandleAccountPicker(page: Page, url: string, email: string, label: string) { try { await visitAndHandleAccountPicker(page, url, email) - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch (err) { console.warn( `[prime-browser-auth] Browser session prewarm for ${label} failed: ${err instanceof Error ? err.message : err}`, diff --git a/packages/e2e/setup/auth-diagnostics.ts b/packages/e2e/setup/auth-diagnostics.ts index c3138f78c2d..45ee5f68f94 100644 --- a/packages/e2e/setup/auth-diagnostics.ts +++ b/packages/e2e/setup/auth-diagnostics.ts @@ -127,7 +127,7 @@ export function isExpectedAuthDestination(rawUrl: string, hostname: string, path try { const url = new URL(rawUrl) return url.hostname === hostname && (!pathnamePrefix || url.pathname.startsWith(pathnamePrefix)) - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch { return false } diff --git a/packages/e2e/setup/cli.ts b/packages/e2e/setup/cli.ts index ad1793d171f..c3ce3ad3888 100644 --- a/packages/e2e/setup/cli.ts +++ b/packages/e2e/setup/cli.ts @@ -260,7 +260,7 @@ export const cliFixture = envFixture.extend<{cli: CLIProcess}>({ kill() { try { ptyProcess.kill() - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch (_error) { // Process may already be dead } diff --git a/packages/e2e/setup/global-auth.ts b/packages/e2e/setup/global-auth.ts index 0ac051d63d1..a0920191d71 100644 --- a/packages/e2e/setup/global-auth.ts +++ b/packages/e2e/setup/global-auth.ts @@ -30,7 +30,7 @@ import type {IPty} from 'node-pty' function isAccountsShopifyUrl(rawUrl: string): boolean { try { return new URL(rawUrl).hostname === 'accounts.shopify.com' - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch { return false } @@ -179,7 +179,7 @@ async function authenticateOnce({ } finally { try { ptyProcess.kill() - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch (_error) { // Process may already be dead } diff --git a/packages/e2e/setup/store.ts b/packages/e2e/setup/store.ts index 9bebf367e9d..8dcd4e210e9 100644 --- a/packages/e2e/setup/store.ts +++ b/packages/e2e/setup/store.ts @@ -287,7 +287,7 @@ export const storeTestFixture = appTestFixture.extend<{storeFqdn: string}>({ const storeName = generateStoreName(wi) const fqdn = await createDevStoreWithCli({cli, workerIndex: wi, storeName, orgId: env.orgId}) - env.processEnv.SHOPIFY_FLAG_STORE = fqdn // eslint-disable-line compat/require-atomic-updates + env.processEnv.SHOPIFY_FLAG_STORE = fqdn await use(fqdn) }, diff --git a/packages/e2e/setup/teardown.ts b/packages/e2e/setup/teardown.ts index fcfb0aa32f5..45e158cacbb 100644 --- a/packages/e2e/setup/teardown.ts +++ b/packages/e2e/setup/teardown.ts @@ -63,7 +63,7 @@ export async function teardownAll(ctx: TeardownCtx): Promise { break } log.log(wCtx, `(${attempt}/3) app uninstall attempt failed, app still visible`) - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch (err) { log.log(wCtx, `(${attempt}/3) app uninstall attempt failed: ${err instanceof Error ? err.message : err}`) } @@ -102,7 +102,7 @@ export async function teardownAll(ctx: TeardownCtx): Promise { log.error(wCtx, 'store has apps installed, skipping delete') } } - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch (err) { log.error(wCtx, `store empty state unclear, skipping delete: ${err instanceof Error ? err.message : err}`) } @@ -118,7 +118,7 @@ export async function teardownAll(ctx: TeardownCtx): Promise { log.log(wCtx, deletionConfirmed ? 'store deletion confirmed by CLI' : 'store deletion requested with CLI') storeDeletionRequested = true break - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch (err) { log.log(wCtx, `(${attempt}/3) store deletion failed: ${err instanceof Error ? err.message : err}`) } @@ -164,7 +164,7 @@ export async function teardownAll(ctx: TeardownCtx): Promise { break } log.log(wCtx, `(${attempt}/3) app deletion failed`) - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch (err) { // Fail fast: Delete button stays disabled while installs exist — retries won't help. // cleanup-apps.ts reaps the orphan. diff --git a/packages/eslint-plugin-cli/config.js b/packages/eslint-plugin-cli/config.js index 989ff1f2899..f68e3c5e05f 100644 --- a/packages/eslint-plugin-cli/config.js +++ b/packages/eslint-plugin-cli/config.js @@ -1,321 +1,27 @@ -const shopifyPlugin = require('@shopify/eslint-plugin') -const vitestPlugin = require('@vitest/eslint-plugin') -const unusedImportsPlugin = require('eslint-plugin-unused-imports') -const tsdocPlugin = require('eslint-plugin-tsdoc') -const noCatchAllPlugin = require('eslint-plugin-no-catch-all') -const eslintConfigPrettier = require('eslint-config-prettier') -const globals = require('globals') +const {rules, meta} = require('./index') -const [shopifyPrettierCompatibilityConfig, shopifyPrettierPluginConfig] = shopifyPlugin.configs.prettier -const shopifyPrettierCompatibilityRules = Object.fromEntries( - Object.entries(shopifyPrettierPluginConfig.rules).filter(([ruleName]) => ruleName !== 'prettier/prettier'), -) - -// Load rules directly to avoid circular dependency -const rules = { - 'command-flags-with-env': require('./rules/command-flags-with-env'), - 'command-conventional-flag-env': require('./rules/command-conventional-flag-env'), - 'command-reserved-flags': require('./rules/command-reserved-flags'), - 'command-json-output': require('./rules/command-json-output'), - 'no-error-factory-functions': require('./rules/no-error-factory-functions'), - 'no-process-cwd': require('./rules/no-process-cwd'), - 'no-trailing-js-in-cli-kit-imports': require('./rules/no-trailing-js-in-cli-kit-imports'), - 'no-vi-manual-mock-clear': require('./rules/no-vi-manual-mock-clear'), - 'no-vi-mock-in-callbacks': require('./rules/no-vi-mock-in-callbacks'), - 'prompt-message-format': require('./rules/prompt-message-format'), - 'specific-imports-in-bootstrap-code': require('./rules/specific-imports-in-bootstrap-code'), - 'banner-headline-format': require('./rules/banner-headline-format'), - 'required-fields-when-loading-app': require('./rules/required-fields-when-loading-app'), - 'no-inline-graphql': require('./rules/no-inline-graphql'), -} - -const cliPlugin = { - meta: { - name: '@shopify/eslint-plugin-cli', - version: '4.0.0', - }, - rules, -} - -const baseRules = { - // Disable strict-component-boundaries as it requires eslint-plugin-import resolver which we don't use - '@shopify/strict-component-boundaries': 'off', - // Use import-x rules instead of import (provided by @shopify/eslint-plugin) - 'import-x/order': [ - 'error', - { - groups: ['index', 'sibling', 'parent', 'internal', 'external', 'builtin', 'object', 'type'], - }, - ], - 'no-catch-shadow': 'off', - 'no-catch-all/no-catch-all': 'error', - 'no-console': 'error', - '@typescript-eslint/no-namespace': 'off', - '@typescript-eslint/no-var-requires': 'off', - '@typescript-eslint/no-require-imports': 'off', - '@typescript-eslint/no-explicit-any': [ - 'error', - { - fixToUnknown: true, - }, - ], - '@typescript-eslint/switch-exhaustiveness-check': 'error', - '@typescript-eslint/naming-convention': [ - 'error', - { - selector: 'default', - format: ['camelCase', 'PascalCase', 'UPPER_CASE'], - leadingUnderscore: 'allow', - trailingUnderscore: 'allow', - }, - { - selector: 'default', - filter: { - match: true, - // Allow double underscores and React UNSAFE_ (for lifecycle hooks that are to be deprecated) - regex: '^(__|UNSAFE_).+$', - }, - format: null, - }, - { - selector: 'typeLike', - format: ['PascalCase'], - }, - { - selector: 'typeParameter', - format: ['PascalCase'], - prefix: ['T'], - }, - { - selector: 'interface', - format: ['PascalCase'], - custom: { - regex: '^I[A-Z]', - match: false, - }, - }, - { - selector: ['objectLiteralProperty', 'typeProperty'], - format: null, - }, - ], - // Use .js extensions for TypeScript files (ESM convention) - 'import-x/extensions': [ - 'error', - 'ignorePackages', - { - ts: 'never', - tsx: 'never', - js: 'always', - }, - ], - '@typescript-eslint/no-misused-promises': 'error', - '@typescript-eslint/no-floating-promises': 'error', - '@typescript-eslint/no-unnecessary-type-assertion': 'error', - 'consistent-return': 'off', - 'import-x/no-cycle': 'off', - 'callback-return': 'off', - 'n/callback-return': 'off', - 'no-undefined': 'off', - 'node/no-deprecated-api': 'off', - 'n/no-deprecated-api': 'off', - // In a monorepo, dependencies can be hoisted to root or in the package - 'import-x/no-extraneous-dependencies': 'off', - 'no-await-in-loop': 'error', - 'unused-imports/no-unused-imports': 'error', - 'no-restricted-imports': [ - 'error', - { - paths: [ - { - name: 'path', - message: "Please use: import { joinPath } from '@shopify/cli-kit/node/path'", - }, - { - name: 'node:path', - message: "Please use: import { joinPath } from '@shopify/cli-kit/node/path'", - }, - { - name: 'child_process', - message: "Please use: import { exec } from '@shopify/cli-kit/node/system'", - }, - { - name: 'node:child_process', - message: "Please use: import { exec } from '@shopify/cli-kit/node/system'", - }, - ], - }, - ], - 'vitest/consistent-test-it': [ - 'error', - { - fn: 'test', - withinDescribe: 'test', - }, - ], - 'vitest/max-nested-describe': [ - 'error', - { - max: 2, - }, - ], - 'vitest/no-disabled-tests': 'error', - 'vitest/prefer-expect-resolves': 'error', - '@shopify/cli/command-flags-with-env': 'error', - '@shopify/cli/command-conventional-flag-env': 'error', - '@shopify/cli/command-reserved-flags': 'error', - '@shopify/cli/command-json-output': 'error', - '@shopify/cli/no-error-factory-functions': 'error', - '@shopify/cli/no-process-cwd': 'error', - '@shopify/cli/no-trailing-js-in-cli-kit-imports': 'error', - '@shopify/cli/no-vi-manual-mock-clear': 'error', - '@shopify/cli/no-vi-mock-in-callbacks': 'error', - '@shopify/cli/prompt-message-format': 'error', - '@shopify/cli/banner-headline-format': 'error', - '@shopify/cli/required-fields-when-loading-app': 'error', - '@shopify/cli/no-inline-graphql': 'error', - 'no-restricted-syntax': [ - 'error', - { - selector: 'Literal[value=/(cannot|will not|do not)/i]', - message: "Be human - prefer don't to do not, won't to will not etc.", - }, - { - selector: 'TemplateElement[value.raw=/(cannot|will not|do not)/i]', - message: "Be human - prefer don't to do not, won't to will not etc.", - }, - ], - 'tsdoc/syntax': 'error', - 'promise/catch-or-return': ['error', {allowFinally: true}], - 'no-unused-vars': 'off', - '@typescript-eslint/no-unused-vars': [ - 'error', - { - args: 'all', - argsIgnorePattern: '^_', - caughtErrors: 'none', - caughtErrorsIgnorePattern: '^_', - destructuredArrayIgnorePattern: '^_', - varsIgnorePattern: '^_', - ignoreRestSiblings: true, - }, - ], - '@typescript-eslint/no-empty-function': 'off', - '@typescript-eslint/no-empty-object-type': 'off', - // Disable strict Node.js version checking for experimental features - 'n/no-unsupported-features/node-builtins': 'off', - '@typescript-eslint/require-await': 'off', - '@typescript-eslint/await-thenable': 'off', - '@typescript-eslint/no-unsafe-argument': 'off', - '@typescript-eslint/no-unsafe-assignment': 'off', - '@typescript-eslint/no-unsafe-call': 'off', - '@typescript-eslint/no-unsafe-member-access': 'off', - '@typescript-eslint/no-unsafe-return': 'off', - '@typescript-eslint/restrict-template-expressions': 'off', - '@typescript-eslint/no-unsafe-enum-comparison': 'off', - '@typescript-eslint/prefer-nullish-coalescing': 'error', - 'no-negated-condition': 'error', - '@typescript-eslint/prefer-promise-reject-errors': 'error', - 'prefer-promise-reject-errors': 'off', - 'no-lone-blocks': 'error', - '@typescript-eslint/only-throw-error': 'error', - '@typescript-eslint/prefer-readonly': 'error', - // These should be moved to a warning/error eventually. - '@typescript-eslint/use-unknown-in-catch-callback-variable': 'off', - '@typescript-eslint/no-unnecessary-condition': 'off', - '@typescript-eslint/prefer-optional-chain': 'off', - '@typescript-eslint/no-confusing-void-expression': 'off', - '@typescript-eslint/non-nullable-type-assertion-style': 'off', - '@typescript-eslint/consistent-indexed-object-style': 'off', - '@babel/no-unused-expressions': 'off', - 'no-unused-expressions': 'off', - '@typescript-eslint/no-unused-expressions': ['error', {allowTernary: true}], - 'no-restricted-globals': [ - 'error', - { - name: 'fetch', - message: - 'Please use our alternative fetch implementation in @shopify/cli-kit/node/http instead of Node.js built-in fetch. Built-in fetch does not support HTTP proxies.', - }, - ], -} - -const testFileRules = { - '@typescript-eslint/no-explicit-any': 'off', - 'no-restricted-syntax': 'off', - '@shopify/cli/required-fields-when-loading-app': 'off', - // '@typescript-eslint/ban-types' was removed in @typescript-eslint v8, use @typescript-eslint/no-restricted-types instead - '@typescript-eslint/no-unused-vars': 'off', - '@typescript-eslint/no-non-null-assertion': 'off', - '@typescript-eslint/no-empty-function': 'off', - '@typescript-eslint/no-dynamic-delete': 'off', - '@typescript-eslint/unbound-method': 'off', - '@typescript-eslint/no-redundant-type-constituents': 'off', - '@typescript-eslint/no-confusing-void-expression': 'off', - '@typescript-eslint/no-unnecessary-template-expression': 'error', - '@typescript-eslint/no-unnecessary-condition': 'off', - '@typescript-eslint/restrict-plus-operands': 'off', - '@typescript-eslint/non-nullable-type-assertion-style': 'off', - '@typescript-eslint/prefer-reduce-type-parameter': 'error', - 'no-restricted-globals': 'off', -} - -// Build the flat config array -const config = [ - // Spread the Shopify configs (these already include typescript-eslint plugin) - ...shopifyPlugin.configs.typescript, - ...shopifyPlugin.configs.node, - shopifyPrettierCompatibilityConfig, - {rules: shopifyPrettierCompatibilityRules}, - - // Global ignores - { - ignores: ['**/dist/**', '**/node_modules/**', '**/coverage/**', '**/vendor/**', '**/bin/bundle.js'], - }, - - // Add CLI-specific plugins and rules +module.exports = [ + {plugins: {'@shopify/cli': {rules, meta}}}, { files: ['**/*.ts', '**/*.tsx'], - languageOptions: { - parserOptions: { - projectService: true, - tsconfigRootDir: process.cwd(), - }, - globals: { - ...globals.node, - ...globals.es2021, - }, - }, - plugins: { - vitest: vitestPlugin, - 'unused-imports': unusedImportsPlugin, - tsdoc: tsdocPlugin, - 'no-catch-all': noCatchAllPlugin, - '@shopify/cli': cliPlugin, + rules: { + '@shopify/cli/command-flags-with-env': 'error', + '@shopify/cli/command-conventional-flag-env': 'error', + '@shopify/cli/command-reserved-flags': 'error', + '@shopify/cli/no-error-factory-functions': 'error', + '@shopify/cli/no-process-cwd': 'error', + '@shopify/cli/no-trailing-js-in-cli-kit-imports': 'error', + '@shopify/cli/no-vi-manual-mock-clear': 'error', + '@shopify/cli/no-vi-mock-in-callbacks': 'error', + '@shopify/cli/prompt-message-format': 'error', + '@shopify/cli/banner-headline-format': 'error', + '@shopify/cli/required-fields-when-loading-app': 'error', + '@shopify/cli/no-inline-graphql': 'error', + '@shopify/cli/command-json-output': 'error', }, - rules: baseRules, }, - - // Prettier config to disable conflicting rules - eslintConfigPrettier, - - // Test files config { files: ['**/*.test.ts', '**/*.test.tsx', '**/*.test-data.ts', '**/testing/*.ts', '**/testing/*.tsx'], - rules: testFileRules, - }, - - // JS bin files - different rules apply - { - files: ['**/bin/*.js'], - rules: { - 'import-x/extensions': 'off', - 'import-x/no-unresolved': 'off', - '@shopify/cli/specific-imports-in-bootstrap-code': 'off', - '@nx/enforce-module-boundaries': 'off', - 'n/no-unpublished-bin': 'off', - }, + rules: {'@shopify/cli/required-fields-when-loading-app': 'off'}, }, ] - -module.exports = config diff --git a/packages/eslint-plugin-cli/oxlint-compat.js b/packages/eslint-plugin-cli/oxlint-compat.js deleted file mode 100644 index 368fb3918ba..00000000000 --- a/packages/eslint-plugin-cli/oxlint-compat.js +++ /dev/null @@ -1,101 +0,0 @@ -const {createRequire} = require('node:module') - -const {builtinRules} = require('eslint/use-at-your-own-risk') -const typescriptParser = require('@typescript-eslint/parser') - -const {parserServices} = require('./oxlint-typescript-services') -const config = require('./config') - -const shopifyRequire = createRequire(require.resolve('@shopify/eslint-plugin')) -const DisabledArea = shopifyRequire('eslint-plugin-eslint-comments/lib/internal/disabled-area') - -const plugins = Object.assign({}, ...config.map((entry) => entry.plugins)) -plugins['@nx'] = require('@nx/eslint-plugin') -plugins.jsdoc = require('eslint-plugin-jsdoc') -plugins.react = require('eslint-plugin-react') - -const ruleNames = Object.fromEntries([...builtinRules.keys()].map((name) => [name, name])) -const rules = Object.fromEntries(builtinRules) -for (const [pluginName, plugin] of Object.entries(plugins)) { - for (const [ruleName, rule] of Object.entries(plugin.rules)) { - const name = `${pluginName}/${ruleName}`.replaceAll('/', '-').replace('@', '') - rules[name] = rule - ruleNames[name] = `${pluginName}/${ruleName}` - } -} - -const directiveUsage = new WeakMap() - -function usageFor(sourceCode) { - let usage = directiveUsage.get(sourceCode.ast) - if (!usage) { - usage = {activeRules: new Set(), usedComments: new Set()} - directiveUsage.set(sourceCode.ast, usage) - } - return usage -} - -const settings = Object.assign({}, ...config.map((entry) => entry.settings)) -for (const [name, rule] of Object.entries(rules)) { - rules[name] = { - ...rule, - create(context) { - const typed = name === 'typescript-eslint-no-unnecessary-type-assertion' - const needsServices = typed || name === 'typescript-eslint-naming-convention' - if (name === 'typescript-eslint-naming-convention' && context.options.some((option) => option.types?.length)) { - throw new Error('Type-filtered naming conventions are not configured for this Oxlint adapter.') - } - const sourceCode = needsServices - ? Object.create(context.sourceCode, { - parserServices: {value: parserServices(context.sourceCode, context.filename, typed)}, - }) - : context.sourceCode - const disabledAreas = DisabledArea.get(sourceCode).areas - const usage = usageFor(sourceCode) - usage.activeRules.add(ruleNames[name]) - const adaptedContext = Object.create(context, { - sourceCode: {value: sourceCode}, - report: { - value(descriptor, message) { - const problem = message === undefined ? descriptor : {node: descriptor, message} - const location = problem.loc?.start ?? problem.loc ?? problem.node.loc.start - const disabled = disabledAreas.find( - (area) => - (area.ruleId === null || area.ruleId === ruleNames[name]) && - (area.start.line < location.line || - (area.start.line === location.line && area.start.column <= location.column)) && - (!area.end || - area.end.line > location.line || - (area.end.line === location.line && area.end.column >= location.column)), - ) - if (disabled) usage.usedComments.add(disabled.comment) - else context.report(problem) - }, - }, - settings: {value: {...settings, ...context.settings, jsdoc: {mode: 'typescript', publicFunctionsOnly: true}}}, - languageOptions: {value: {...context.languageOptions, parser: typescriptParser}}, - }) - return rule.create(adaptedContext) - }, - } -} - -// The upstream rule patches ESLint's verifier. Oxlint owns verification, so track -// suppressions made by the adapters instead. Native directives are checked by Oxlint. -rules['eslint-comments-no-unused-disable'] = { - meta: {type: 'problem', schema: [], messages: {unused: "Unused disable directive for '{{ruleId}}'."}}, - create(context) { - return { - 'Program:exit': function () { - const usage = usageFor(context.sourceCode) - for (const area of DisabledArea.get(context.sourceCode).areas) { - if (area.ruleId && usage.activeRules.has(area.ruleId) && !usage.usedComments.has(area.comment)) { - context.report({loc: area.comment.loc, messageId: 'unused', data: {ruleId: area.ruleId}}) - } - } - }, - } - }, -} - -module.exports = {rules, ruleNames} diff --git a/packages/eslint-plugin-cli/oxlint-compat.test.js b/packages/eslint-plugin-cli/oxlint-compat.test.js deleted file mode 100644 index c7c7368c2a5..00000000000 --- a/packages/eslint-plugin-cli/oxlint-compat.test.js +++ /dev/null @@ -1,179 +0,0 @@ -const {RuleTester} = require('oxlint/plugins-dev') - -const {rules} = require('./oxlint-compat') - -const ruleTester = new RuleTester({languageOptions: {sourceType: 'module'}, filename: '/repo/fixture.ts'}) - -ruleTester.run('naming-convention', rules['typescript-eslint-naming-convention'], { - valid: [ - { - filename: '/repo/fixture.ts', - code: 'interface Widget {}', - options: [{selector: 'typeLike', format: ['PascalCase']}], - }, - { - filename: '/repo/fixture.ts', - code: '/* eslint-disable @typescript-eslint/naming-convention */\ninterface widget {}', - options: [{selector: 'typeLike', format: ['PascalCase']}], - }, - ], - invalid: [ - { - filename: '/repo/fixture.ts', - code: 'interface widget {}', - options: [{selector: 'typeLike', format: ['PascalCase']}], - errors: [{messageId: 'doesNotMatchFormat'}], - }, - { - filename: '/repo/fixture.ts', - code: 'interface Widget {}', - options: [{selector: 'typeParameter', format: ['PascalCase'], prefix: ['U']}], - errors: [{messageId: 'missingAffix'}], - }, - ], -}) - -ruleTester.run('member-ordering', rules['typescript-eslint-member-ordering'], { - valid: [ - { - filename: '/repo/fixture.ts', - code: 'class Widget { static count = 0; run() {} }', - options: [{default: ['static-field', 'method']}], - }, - ], - invalid: [ - { - filename: '/repo/fixture.ts', - code: 'class Widget { run() {} static count = 0 }', - options: [{default: ['static-field', 'method']}], - errors: [{messageId: 'incorrectGroupOrder'}], - }, - ], -}) - -ruleTester.run('id-length', rules['id-length'], { - valid: [ - {filename: '/repo/fixture.ts', code: 'type Widget = T', options: [{min: 2}]}, - {filename: '/repo/fixture.ts', code: 'const x = 1', options: [{min: 2, exceptions: ['x']}]}, - {filename: '/repo/fixture.ts', code: '/* eslint-disable id-length */\nconst a = 1', options: [{min: 2}]}, - ], - invalid: [ - {filename: '/repo/fixture.ts', code: 'const a = 1', options: [{min: 2}], errors: [{messageId: 'tooShort'}]}, - ], -}) - -ruleTester.run('restricted-syntax', rules['no-restricted-syntax'], { - valid: [ - { - filename: '/repo/fixture.ts', - code: "const message = 'Try again'", - options: [{selector: 'Literal[value=/do not/]', message: 'Use contractions'}], - }, - { - filename: '/repo/fixture.ts', - code: "// eslint-disable-next-line no-restricted-syntax\nconst message = 'do not retry'", - options: [{selector: 'Literal[value=/do not/]', message: 'Use contractions'}], - }, - ], - invalid: [ - { - filename: '/repo/fixture.ts', - code: "const message = 'do not retry'", - options: [{selector: 'Literal[value=/do not/]', message: 'Use contractions'}], - errors: [{message: 'Use contractions'}], - }, - ], -}) - -ruleTester.run('public-jsdoc', rules['jsdoc-require-param'], { - valid: ['/** @param value - The value. */\nexport function read(value) { return value }'], - invalid: [ - { - filename: '/repo/fixture.ts', - code: '/** Read a value. */\nexport function read(value) { return value }', - errors: [{message: 'Missing JSDoc @param "value" declaration.'}], - output: '/**\n * Read a value.\n * @param value\n */\nexport function read(value) { return value }', - }, - ], -}) - -test('checks module boundaries, deprecated imports, assertions, and unused directives with Oxlint', () => { - const {mkdtempSync, mkdirSync, writeFileSync, rmSync, symlinkSync} = require('node:fs') - const {tmpdir} = require('node:os') - const {join, resolve} = require('node:path') - const {spawnSync} = require('node:child_process') - const workspace = mkdtempSync(join(tmpdir(), 'cli-oxlint-rules-')) - const repository = resolve(__dirname, '../..') - try { - symlinkSync(join(repository, 'node_modules'), join(workspace, 'node_modules'), 'junction') - writeFileSync(join(workspace, 'nx.json'), '{}') - writeFileSync(join(workspace, 'package.json'), JSON.stringify({name: 'lint-fixtures', private: true})) - writeFileSync( - join(workspace, 'tsconfig.json'), - JSON.stringify({compilerOptions: {strict: true}, include: ['packages/**/*.ts']}), - ) - for (const name of ['app', 'kit']) { - mkdirSync(join(workspace, 'packages', name, 'src'), {recursive: true}) - writeFileSync( - join(workspace, 'packages', name, 'project.json'), - JSON.stringify({name, root: `packages/${name}`, projectType: 'library'}), - ) - } - writeFileSync( - join(workspace, 'packages/kit/src/index.ts'), - '/** @deprecated Use another function. */\nexport function oldFunction() {}', - ) - writeFileSync( - join(workspace, 'packages/app/src/index.ts'), - "import {oldFunction} from '../../kit/src/index'\nconst value: string = 'value'\noldFunction()\nexport const result = value as string\n// eslint-disable-next-line compat/no-restricted-syntax\nexport const message = 'retry'", - ) - writeFileSync( - join(workspace, 'oxlint.json'), - JSON.stringify({ - categories: {correctness: 'off'}, - jsPlugins: [{name: 'compat', specifier: join(__dirname, 'oxlint-compat.js')}], - rules: { - 'compat/nx-enforce-module-boundaries': 'error', - 'compat/import-x-no-deprecated': 'error', - 'compat/typescript-eslint-no-unnecessary-type-assertion': 'error', - 'compat/no-restricted-syntax': ['error', {selector: 'Literal[value=/do not/]', message: 'Use contractions'}], - }, - }), - ) - const graph = spawnSync(process.execPath, [require.resolve('nx/bin/nx.js'), 'graph', '--file', 'graph.json'], { - cwd: workspace, - encoding: 'utf8', - env: {...process.env, NX_DAEMON: 'false', NX_ISOLATE_PLUGINS: 'false'}, - }) - expect(graph.status, graph.stdout + graph.stderr).toBe(0) - const lint = spawnSync( - process.execPath, - [ - join(repository, 'node_modules/oxlint/bin/oxlint'), - '--config', - 'oxlint.json', - '--format', - 'json', - '--report-unused-disable-directives', - 'packages/app/src/index.ts', - ], - { - cwd: workspace, - encoding: 'utf8', - env: {...process.env, NX_DAEMON: 'false', NX_ISOLATE_PLUGINS: 'false'}, - }, - ) - expect(lint.status).toBe(1) - const diagnostics = JSON.parse(lint.stdout).diagnostics - expect(diagnostics.map((diagnostic) => diagnostic.code)).toEqual( - expect.arrayContaining([ - 'compat(nx-enforce-module-boundaries)', - 'compat(import-x-no-deprecated)', - 'compat(typescript-eslint-no-unnecessary-type-assertion)', - ]), - ) - expect(diagnostics.some((diagnostic) => diagnostic.message.includes('Unused eslint-disable directive'))).toBe(true) - } finally { - rmSync(workspace, {recursive: true, force: true, maxRetries: 2}) - } -}, 30000) diff --git a/packages/eslint-plugin-cli/oxlint-typescript-services.js b/packages/eslint-plugin-cli/oxlint-typescript-services.js deleted file mode 100644 index 5575bcb041d..00000000000 --- a/packages/eslint-plugin-cli/oxlint-typescript-services.js +++ /dev/null @@ -1,51 +0,0 @@ -const parser = require('@typescript-eslint/parser') - -const parsedSources = new WeakMap() - -function parserServices(sourceCode, filename, typeAware = false) { - let parsed = parsedSources.get(sourceCode.ast) - if (!parsed || (typeAware && !parsed.services.program)) { - parsed = parser.parseForESLint(sourceCode.text, { - sourceType: 'module', - ecmaVersion: 'latest', - filePath: filename, - ...(typeAware ? {projectService: true, tsconfigRootDir: process.cwd()} : {}), - }) - parsedSources.set(sourceCode.ast, parsed) - } - const nodesByRange = new Map() - function indexNodes(node) { - nodesByRange.set(`${node.type}:${node.range}`, node) - for (const key of parsed.visitorKeys[node.type] ?? []) { - const value = node[key] - for (const child of Array.isArray(value) ? value : [value]) { - if (child) indexNodes(child) - } - } - } - indexNodes(parsed.ast) - const services = parsed.services - const esTreeNodeToTSNodeMap = { - get(node) { - const parsedNode = nodesByRange.get(`${node.type}:${node.range}`) - if (!parsedNode) throw new Error(`Unable to resolve TypeScript node ${node.type} in ${filename}`) - return services.esTreeNodeToTSNodeMap.get(parsedNode) - }, - } - return { - ...services, - esTreeNodeToTSNodeMap, - ...(services.program - ? { - getTypeAtLocation(node) { - return services.program.getTypeChecker().getTypeAtLocation(esTreeNodeToTSNodeMap.get(node)) - }, - getSymbolAtLocation(node) { - return services.program.getTypeChecker().getSymbolAtLocation(esTreeNodeToTSNodeMap.get(node)) - }, - } - : {}), - } -} - -module.exports = {parserServices} diff --git a/packages/eslint-plugin-cli/package.json b/packages/eslint-plugin-cli/package.json index b7c86c9f2d8..e30743800fc 100644 --- a/packages/eslint-plugin-cli/package.json +++ b/packages/eslint-plugin-cli/package.json @@ -20,31 +20,11 @@ }, "license": "MIT", "author": "Shopify Inc.", - "dependencies": { - "@shopify/eslint-plugin": "50.0.0", - "@typescript-eslint/eslint-plugin": "8.56.1", - "@typescript-eslint/parser": "8.56.1", - "eslint-config-prettier": "10.1.8", - "eslint-plugin-no-catch-all": "1.1.0", - "eslint-plugin-react": "7.37.5", - "eslint-plugin-react-hooks": "5.2.0", - "eslint-plugin-tsdoc": "0.5.2", - "eslint-plugin-unused-imports": "4.4.1", - "@vitest/eslint-plugin": "1.1.44", - "globals": "16.5.0", - "execa": "7.2.0", - "@microsoft/tsdoc": "0.16.0" - }, - "peerDependencies": { - "eslint": "^9.0.0" - }, "publishConfig": { "@shopify:registry": "https://registry.npmjs.org", "access": "public" }, - "devDependencies": { - "@nx/eslint-plugin": "22.7.7", - "eslint-plugin-jsdoc": "50.8.0", - "oxlint": "1.75.0" + "dependencies": { + "@microsoft/tsdoc": "0.16.0" } } diff --git a/packages/eslint-plugin-cli/project.json b/packages/eslint-plugin-cli/project.json index f8e7379e846..79afcd09b06 100644 --- a/packages/eslint-plugin-cli/project.json +++ b/packages/eslint-plugin-cli/project.json @@ -7,14 +7,14 @@ "lint": { "executor": "nx:run-commands", "options": { - "command": "pnpm eslint \"**/*.js\"", + "command": "pnpm oxlint --config ../../oxlint.json --deny-warnings .", "cwd": "packages/eslint-plugin-cli" } }, "lint:fix": { "executor": "nx:run-commands", "options": { - "command": "pnpm eslint \"**/*.js\" --fix", + "command": "pnpm oxlint --config ../../oxlint.json --fix .", "cwd": "packages/eslint-plugin-cli" } } diff --git a/packages/eslint-plugin-cli/rules/command-json-output.test.js b/packages/eslint-plugin-cli/rules/command-json-output.test.js index 06d80aedf1a..aa68caf3c46 100644 --- a/packages/eslint-plugin-cli/rules/command-json-output.test.js +++ b/packages/eslint-plugin-cli/rules/command-json-output.test.js @@ -1,13 +1,10 @@ -const {RuleTester} = require('eslint') -const typescriptParser = require('@typescript-eslint/parser') +const {RuleTester} = require('oxlint/plugins-dev') const rule = require('./command-json-output') const ruleTester = new RuleTester({ languageOptions: { - ecmaVersion: 2022, sourceType: 'module', - parser: typescriptParser, }, }) diff --git a/packages/eslint-plugin-cli/vite.config.ts b/packages/eslint-plugin-cli/vite.config.ts index 6e808d404a6..0131ff14eae 100644 --- a/packages/eslint-plugin-cli/vite.config.ts +++ b/packages/eslint-plugin-cli/vite.config.ts @@ -1,13 +1,17 @@ import baseConfig from '../../configurations/vite.config' +import {defineConfig} from 'vitest/config' -const config = baseConfig(__dirname, {poolStrategy: 'forks'}) +const config = defineConfig(async () => { + const sharedConfig = await baseConfig(__dirname, {poolStrategy: 'forks'}) + return { + ...sharedConfig, + test: { + ...sharedConfig.test, + globals: true, + // RuleTester's large native buffers can exhaust Windows memory when files run concurrently. + fileParallelism: process.platform !== 'win32', + }, + } +}) -export default { - ...config, - test: { - ...config.test, - globals: true, - // RuleTester's large native buffers can exhaust Windows memory when files run concurrently. - fileParallelism: process.platform !== 'win32', - }, -} +export default config diff --git a/packages/organizations/package.json b/packages/organizations/package.json index c4143dfafe1..48ed67804d0 100644 --- a/packages/organizations/package.json +++ b/packages/organizations/package.json @@ -33,11 +33,6 @@ "vitest": "vitest", "type-check": "nx type-check" }, - "eslintConfig": { - "extends": [ - "../../.eslintrc.cjs" - ] - }, "dependencies": { "@shopify/cli-kit": "4.9.0", "@graphql-typed-document-node/core": "3.2.0" diff --git a/packages/organizations/project.json b/packages/organizations/project.json index dd8e61e4167..df8f8ecec01 100644 --- a/packages/organizations/project.json +++ b/packages/organizations/project.json @@ -22,14 +22,14 @@ "lint": { "executor": "nx:run-commands", "options": { - "command": "pnpm eslint \"src/**/*.ts\"", + "command": "pnpm oxlint --config ../../oxlint.json --deny-warnings src", "cwd": "packages/organizations" } }, "lint:fix": { "executor": "nx:run-commands", "options": { - "command": "pnpm eslint 'src/**/*.ts' --fix", + "command": "pnpm oxlint --config ../../oxlint.json --deny-warnings src --fix", "cwd": "packages/organizations" } }, diff --git a/packages/plugin-cloudflare/package.json b/packages/plugin-cloudflare/package.json index 53e4d6aa90f..167c6abd2aa 100644 --- a/packages/plugin-cloudflare/package.json +++ b/packages/plugin-cloudflare/package.json @@ -39,11 +39,6 @@ "vitest": "vitest", "type-check": "nx type-check" }, - "eslintConfig": { - "extends": [ - "../../.eslintrc.cjs" - ] - }, "dependencies": { "@oclif/core": "4.8.3", "@shopify/cli-kit": "4.9.0" diff --git a/packages/plugin-cloudflare/project.json b/packages/plugin-cloudflare/project.json index bb871a5a201..ed435dcfa39 100644 --- a/packages/plugin-cloudflare/project.json +++ b/packages/plugin-cloudflare/project.json @@ -22,14 +22,14 @@ "lint": { "executor": "nx:run-commands", "options": { - "command": "pnpm eslint \"src/**/*.ts\"", + "command": "pnpm oxlint --config ../../oxlint.json --deny-warnings src", "cwd": "packages/plugin-cloudflare" } }, "lint:fix": { "executor": "nx:run-commands", "options": { - "command": "pnpm eslint 'src/**/*.ts' --fix", + "command": "pnpm oxlint --config ../../oxlint.json --fix src", "cwd": "packages/plugin-cloudflare" } }, diff --git a/packages/plugin-cloudflare/src/install-cloudflared.ts b/packages/plugin-cloudflare/src/install-cloudflared.ts index 00db20addcc..501ca092be5 100644 --- a/packages/plugin-cloudflare/src/install-cloudflared.ts +++ b/packages/plugin-cloudflare/src/install-cloudflared.ts @@ -90,7 +90,7 @@ export default async function install(env = process.env, platform = process.plat outputDebug('cloudflared already installed, skipping') return } - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch { outputDebug('version check failed, reinstalling') } diff --git a/packages/plugin-cloudflare/src/tunnel.ts b/packages/plugin-cloudflare/src/tunnel.ts index c92e03c604f..b9035e1e98b 100644 --- a/packages/plugin-cloudflare/src/tunnel.ts +++ b/packages/plugin-cloudflare/src/tunnel.ts @@ -33,7 +33,7 @@ export async function hookStart(port: number): Promise { const client = new TunnelClientInstance(port) await client.startTunnel() return ok(client) - // eslint-disable-next-line no-catch-all/no-catch-all, @typescript-eslint/no-explicit-any + // eslint-disable-next-line @shopify/cli/no-catch-all, @typescript-eslint/no-explicit-any } catch (error: any) { const tunnelError = new TunnelError('unknown', error.message) return err(tunnelError) @@ -55,7 +55,7 @@ class TunnelClientInstance implements TunnelClient { try { await install() this.tunnel() - // eslint-disable-next-line no-catch-all/no-catch-all, @typescript-eslint/no-explicit-any + // eslint-disable-next-line @shopify/cli/no-catch-all, @typescript-eslint/no-explicit-any } catch (error: any) { this.currentStatus = {status: 'error', message: error.message, tryMessage: whatToTry()} } diff --git a/packages/plugin-did-you-mean/package.json b/packages/plugin-did-you-mean/package.json index 7e6dacea69c..0682c933ef5 100644 --- a/packages/plugin-did-you-mean/package.json +++ b/packages/plugin-did-you-mean/package.json @@ -34,11 +34,6 @@ "vitest": "vitest", "type-check": "nx type-check" }, - "eslintConfig": { - "extends": [ - "../../.eslintrc.cjs" - ] - }, "dependencies": { "@oclif/core": "4.8.3", "@shopify/cli-kit": "4.9.0", diff --git a/packages/plugin-did-you-mean/project.json b/packages/plugin-did-you-mean/project.json index 342da80d64e..3cbd0667687 100644 --- a/packages/plugin-did-you-mean/project.json +++ b/packages/plugin-did-you-mean/project.json @@ -22,14 +22,14 @@ "lint": { "executor": "nx:run-commands", "options": { - "command": "pnpm eslint \"src/**/*.ts\"", + "command": "pnpm oxlint --config ../../oxlint.json --deny-warnings src", "cwd": "packages/plugin-did-you-mean" } }, "lint:fix": { "executor": "nx:run-commands", "options": { - "command": "pnpm eslint 'src/**/*.ts' --fix", + "command": "pnpm oxlint --config ../../oxlint.json --fix src", "cwd": "packages/plugin-did-you-mean" } }, diff --git a/packages/store/package.json b/packages/store/package.json index 15fb9926954..1a596ac9294 100644 --- a/packages/store/package.json +++ b/packages/store/package.json @@ -33,11 +33,6 @@ "vitest": "vitest", "type-check": "nx type-check" }, - "eslintConfig": { - "extends": [ - "../../.eslintrc.cjs" - ] - }, "dependencies": { "@graphql-typed-document-node/core": "3.2.0", "@oclif/core": "4.8.3", diff --git a/packages/store/project.json b/packages/store/project.json index d861b24e69c..c9e47dff6d2 100644 --- a/packages/store/project.json +++ b/packages/store/project.json @@ -22,14 +22,14 @@ "lint": { "executor": "nx:run-commands", "options": { - "command": "pnpm eslint \"src/**/*.ts\"", + "command": "pnpm oxlint --config ../../oxlint.json --deny-warnings src", "cwd": "packages/store" } }, "lint:fix": { "executor": "nx:run-commands", "options": { - "command": "pnpm eslint 'src/**/*.ts' --fix", + "command": "pnpm oxlint --config ../../oxlint.json --deny-warnings src --fix", "cwd": "packages/store" } }, diff --git a/packages/store/src/cli/commands/store/auth-output.test.ts b/packages/store/src/cli/commands/store/auth-output.test.ts index 47fe6d93597..2d797adcfd8 100644 --- a/packages/store/src/cli/commands/store/auth-output.test.ts +++ b/packages/store/src/cli/commands/store/auth-output.test.ts @@ -1,6 +1,5 @@ import {describe, expect, test, vi} from 'vitest' // Vitest intercepts console.warn; use Node's console to exercise the real stderr writer. -// eslint-disable-next-line compat/n-prefer-global-console import {Console} from 'node:console' import type * as System from '@shopify/cli-kit/node/system' diff --git a/packages/store/src/cli/commands/store/create/dev.test.ts b/packages/store/src/cli/commands/store/create/dev.test.ts index 3ab37c1729f..d62ae9d5183 100644 --- a/packages/store/src/cli/commands/store/create/dev.test.ts +++ b/packages/store/src/cli/commands/store/create/dev.test.ts @@ -131,9 +131,9 @@ describe('store create dev command', () => { }) test('rejects an invalid --country value without calling the service', async () => { - const mockExit = vi.spyOn(process, 'exit').mockImplementation((() => { + const mockExit = vi.spyOn(process, 'exit').mockImplementation(() => { throw new Error('process.exit') - }) as never) + }) await expect( StoreCreateDev.run([ @@ -235,9 +235,9 @@ describe('store create dev command', () => { return all[index - 1] !== `--${missingFlag}` }, ) - const mockExit = vi.spyOn(process, 'exit').mockImplementation((() => { + const mockExit = vi.spyOn(process, 'exit').mockImplementation(() => { throw new Error('process.exit') - }) as never) + }) await expect(StoreCreateDev.run(argv)).rejects.toThrow() expect(createDevStore).not.toHaveBeenCalled() @@ -258,9 +258,9 @@ describe('store create dev command', () => { test('outputs structured JSON error when --json is active and service throws AbortError', async () => { vi.mocked(createDevStore).mockRejectedValueOnce(new AbortError('Something went wrong')) - const mockExit = vi.spyOn(process, 'exit').mockImplementation((() => { + const mockExit = vi.spyOn(process, 'exit').mockImplementation(() => { throw new Error('process.exit') - }) as never) + }) await expect( StoreCreateDev.run(['--name', 'my-test-store', '--plan', 'plus', '--organization-id', '12345', '--json']), diff --git a/packages/store/src/cli/commands/store/delete.test.ts b/packages/store/src/cli/commands/store/delete.test.ts index 1cc99f4f6ce..fa65ec6a2ff 100644 --- a/packages/store/src/cli/commands/store/delete.test.ts +++ b/packages/store/src/cli/commands/store/delete.test.ts @@ -125,9 +125,9 @@ describe('store delete command', () => { test('outputs structured JSON error when --json is active and --force is missing in a non-interactive run', async () => { vi.mocked(isTTY).mockReturnValue(false) - const mockExit = vi.spyOn(process, 'exit').mockImplementation((() => { + const mockExit = vi.spyOn(process, 'exit').mockImplementation(() => { throw new Error('process.exit') - }) as never) + }) await expect( StoreDelete.run(['--store', 'my-store.myshopify.com', '--organization-id', '12345', '--json']), @@ -150,9 +150,9 @@ describe('store delete command', () => { test('outputs structured JSON error when --json is active and service throws AbortError', async () => { vi.mocked(deleteDevStore).mockRejectedValueOnce(new AbortError('Something went wrong')) - const mockExit = vi.spyOn(process, 'exit').mockImplementation((() => { + const mockExit = vi.spyOn(process, 'exit').mockImplementation(() => { throw new Error('process.exit') - }) as never) + }) await expect( StoreDelete.run(['--store', 'my-store.myshopify.com', '--organization-id', '12345', '--json']), @@ -174,9 +174,9 @@ describe('store delete command', () => { test('outputs structured JSON error when --json is active and organization resolution throws AbortError', async () => { vi.mocked(resolveOrganizationForStore).mockRejectedValueOnce(new AbortError('Could not resolve organization')) - const mockExit = vi.spyOn(process, 'exit').mockImplementation((() => { + const mockExit = vi.spyOn(process, 'exit').mockImplementation(() => { throw new Error('process.exit') - }) as never) + }) await expect(StoreDelete.run(['--store', 'my-store.myshopify.com', '--json'])).rejects.toThrow('process.exit') diff --git a/packages/store/src/cli/services/store/auth/existing-scopes.test.ts b/packages/store/src/cli/services/store/auth/existing-scopes.test.ts index 836ecf1958c..454fe604009 100644 --- a/packages/store/src/cli/services/store/auth/existing-scopes.test.ts +++ b/packages/store/src/cli/services/store/auth/existing-scopes.test.ts @@ -54,10 +54,10 @@ describe('resolveExistingStoreAuthScopes', () => { refreshToken: 'fresh-refresh-token', scopes: ['read_orders'], acquiredAt: '2026-04-02T00:00:00.000Z', - } as any) + }) vi.mocked(graphqlRequest).mockResolvedValue({ currentAppInstallation: {accessScopes: [{handle: 'read_products'}, {handle: 'read_customers'}]}, - } as any) + }) await expect(resolveExistingStoreAuthScopes('shop.myshopify.com')).resolves.toEqual({ scopes: ['read_products', 'read_customers'], @@ -111,7 +111,7 @@ describe('resolveExistingStoreAuthScopes', () => { refreshToken: 'fresh-refresh-token', scopes: ['read_orders'], acquiredAt: '2026-04-02T00:00:00.000Z', - } as any) + }) const scopeLookupError = new Error('GraphQL Error (Code: 401)') Object.assign(scopeLookupError, { response: { @@ -153,10 +153,10 @@ describe('resolveExistingStoreAuthScopes', () => { refreshToken: 'fresh-refresh-token', scopes: ['read_orders'], acquiredAt: '2026-04-02T00:00:00.000Z', - } as any) + }) vi.mocked(graphqlRequest).mockResolvedValue({ currentAppInstallation: undefined, - } as any) + }) await expect(resolveExistingStoreAuthScopes('shop.myshopify.com')).resolves.toEqual({ scopes: ['read_orders'], diff --git a/packages/store/src/cli/services/store/auth/recovery.test.ts b/packages/store/src/cli/services/store/auth/recovery.test.ts index add964a805e..7aee215c0cc 100644 --- a/packages/store/src/cli/services/store/auth/recovery.test.ts +++ b/packages/store/src/cli/services/store/auth/recovery.test.ts @@ -46,7 +46,7 @@ describe('throwStoredStoreAuthError', () => { let captured: AbortError | undefined try { throwStoredStoreAuthError(SHOP) - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch (error) { captured = error as AbortError } @@ -65,7 +65,7 @@ describe('throwReauthenticateStoreAuthError', () => { let captured: AbortError | undefined try { throwReauthenticateStoreAuthError('Custom message.', standardSession()) - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch (error) { captured = error as AbortError } @@ -86,7 +86,7 @@ describe('throwReauthenticateStoreAuthError', () => { let captured: AbortError | undefined try { throwReauthenticateStoreAuthError('Custom message.', previewSession()) - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch (error) { captured = error as AbortError } @@ -109,7 +109,7 @@ describe('throwStoredAuthInvalidError', () => { let captured: AbortError | undefined try { throwStoredAuthInvalidError(standardSession()) - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch (error) { captured = error as AbortError } @@ -130,7 +130,7 @@ describe('throwStoredAuthInvalidError', () => { let captured: AbortError | undefined try { throwStoredAuthInvalidError(previewSession()) - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch (error) { captured = error as AbortError } diff --git a/packages/store/src/cli/services/store/auth/result.test.ts b/packages/store/src/cli/services/store/auth/result.test.ts index e6bbe1db5f8..b92de8f3f8a 100644 --- a/packages/store/src/cli/services/store/auth/result.test.ts +++ b/packages/store/src/cli/services/store/auth/result.test.ts @@ -1,21 +1,20 @@ import {createStoreAuthPresenter} from './result.js' import {afterEach, beforeEach, describe, expect, test, vi} from 'vitest' import {mockAndCaptureOutput} from '@shopify/cli-kit/node/testing/output' -// eslint-disable-next-line compat/n-prefer-global-console import {Console} from 'node:console' function captureStandardStreams() { const stdout: string[] = [] const stderr: string[] = [] - const stdoutSpy = vi.spyOn(process.stdout, 'write').mockImplementation(((chunk: string | Uint8Array) => { + const stdoutSpy = vi.spyOn(process.stdout, 'write').mockImplementation((chunk: string | Uint8Array) => { stdout.push(typeof chunk === 'string' ? chunk : Buffer.from(chunk).toString('utf8')) return true - }) as typeof process.stdout.write) - const stderrSpy = vi.spyOn(process.stderr, 'write').mockImplementation(((chunk: string | Uint8Array) => { + }) + const stderrSpy = vi.spyOn(process.stderr, 'write').mockImplementation((chunk: string | Uint8Array) => { stderr.push(typeof chunk === 'string' ? chunk : Buffer.from(chunk).toString('utf8')) return true - }) as typeof process.stderr.write) + }) // Vitest intercepts console.warn; use Node's console to exercise the captured streams. const warnSpy = vi.spyOn(console, 'warn').mockImplementation(new Console(process.stdout, process.stderr).warn) diff --git a/packages/store/src/cli/services/store/auth/token-client.test.ts b/packages/store/src/cli/services/store/auth/token-client.test.ts index 600ea9022b2..4791f1def5e 100644 --- a/packages/store/src/cli/services/store/auth/token-client.test.ts +++ b/packages/store/src/cli/services/store/auth/token-client.test.ts @@ -127,7 +127,7 @@ describe('token client', () => { test('fetchCurrentStoreAuthScopes returns current scope handles', async () => { vi.mocked(graphqlRequest).mockResolvedValue({ currentAppInstallation: {accessScopes: [{handle: 'read_products'}, {handle: 'read_orders'}]}, - } as any) + }) await expect(fetchCurrentStoreAuthScopes({store: 'shop.myshopify.com', accessToken: 'token'})).resolves.toEqual([ 'read_products', @@ -155,7 +155,7 @@ describe('token client', () => { test('fetchCurrentStoreAuthScopes throws on invalid response shape', async () => { vi.mocked(graphqlRequest).mockResolvedValue({ currentAppInstallation: undefined, - } as any) + }) await expect(fetchCurrentStoreAuthScopes({store: 'shop.myshopify.com', accessToken: 'token'})).rejects.toThrow( 'Shopify did not return currentAppInstallation.accessScopes.', diff --git a/packages/store/src/cli/services/store/create/preview/index.ts b/packages/store/src/cli/services/store/create/preview/index.ts index 6646ad95313..f51dca1e4f1 100644 --- a/packages/store/src/cli/services/store/create/preview/index.ts +++ b/packages/store/src/cli/services/store/create/preview/index.ts @@ -75,7 +75,7 @@ async function persistPreviewStoreSession( dependencies.setLastSeenUserId(userId) try { await dependencies.recordStoreFqdnMetadata(response.shop.domain, true, response.shop.id) - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch { // Store metadata is best-effort; credentials and access URL are already persisted. } diff --git a/packages/store/src/cli/services/store/delete/dev.test.ts b/packages/store/src/cli/services/store/delete/dev.test.ts index 20eeacbbdc6..c59a91a4851 100644 --- a/packages/store/src/cli/services/store/delete/dev.test.ts +++ b/packages/store/src/cli/services/store/delete/dev.test.ts @@ -280,17 +280,17 @@ function mockBusinessPlatformRequests(options: {mutationResult?: unknown; pollSh const variables = request.variables as Record if ('search' in variables) { - return defaultShopLookupResult as never + return defaultShopLookupResult } if ('storeFqdn' in variables) { - return mutationResult as never + return mutationResult } if ('id' in variables) { const shop = pollShops[Math.min(pollIndex, pollShops.length - 1)] pollIndex++ - return {organization: {accessibleShop: shop}} as never + return {organization: {accessibleShop: shop}} } throw new Error(`Unexpected request variables: ${JSON.stringify(variables)}`) diff --git a/packages/store/src/cli/services/store/info/index.ts b/packages/store/src/cli/services/store/info/index.ts index d31cf2e2b2c..e976767785c 100644 --- a/packages/store/src/cli/services/store/info/index.ts +++ b/packages/store/src/cli/services/store/info/index.ts @@ -185,7 +185,7 @@ async function safeFetchOrganizationShop( } try { return await fetchOrganizationShop({store, organizationId: ctx.owningOrg.id, noPrompt: options.noPrompt}) - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch (error) { outputDebug(`BP Organizations shop lookup failed: ${error instanceof Error ? error.message : String(error)}`) return undefined @@ -223,7 +223,7 @@ function buildAdminResult(args: BuildAdminResultArgs): StoreInfoResult { adminUrl: buildAdminUrl(extractMyshopifyHandle(subdomain)), } - return {...compact(fields), subdomain} as StoreInfoResult + return {...compact(fields), subdomain} } interface BuildBusinessPlatformResultArgs { @@ -247,7 +247,7 @@ function buildBusinessPlatformResult(args: BuildBusinessPlatformResultArgs): Sto adminUrl: buildAdminUrl(extractMyshopifyHandle(store)), } - return {...compact(fields), subdomain: store} as StoreInfoResult + return {...compact(fields), subdomain: store} } function buildPreviewStoreResult(args: { @@ -268,7 +268,7 @@ function buildPreviewStoreResult(args: { // `authScopes` is always present for preview stores (even when empty) so consumers can rely on the // key to learn which Admin API scopes are preapproved. There's no way to grant more scopes later. - return {...compact(fields), subdomain: store, authScopes: previewSession.scopes} as StoreInfoResult + return {...compact(fields), subdomain: store, authScopes: previewSession.scopes} } // The BP `ShopifyShopID` scalar is the bare numeric id; the admin GID is derived locally. diff --git a/packages/store/src/cli/utilities/store-lookup/destinations.test.ts b/packages/store/src/cli/utilities/store-lookup/destinations.test.ts index 1f96c724266..217e1561b3d 100644 --- a/packages/store/src/cli/utilities/store-lookup/destinations.test.ts +++ b/packages/store/src/cli/utilities/store-lookup/destinations.test.ts @@ -26,7 +26,7 @@ describe('fetchDestinationsContext', () => { test('throws AbortError when no destination matches the domain', async () => { vi.mocked(businessPlatformRequestDoc).mockResolvedValueOnce({ currentUserAccount: {destinations: {nodes: []}}, - } as never) + }) const err = await fetchDestinationsContext({store: SHOP}).catch((error: unknown) => error) expect(err).toBeInstanceOf(AbortError) @@ -45,7 +45,7 @@ describe('fetchDestinationsContext', () => { ], }, }, - } as never) + }) const err = await fetchDestinationsContext({store: SHOP}).catch((error: unknown) => error) expect(err).toBeInstanceOf(AbortError) @@ -56,10 +56,10 @@ describe('fetchDestinationsContext', () => { vi.mocked(businessPlatformRequestDoc) .mockResolvedValueOnce({ currentUserAccount: {destinations: {nodes: [destinationNode()]}}, - } as never) + }) .mockResolvedValueOnce({ currentUserAccount: {organizationForDestination: {id: 'gid', name: 'Org'}}, - } as never) + }) await fetchDestinationsContext({store: SHOP}) @@ -75,10 +75,10 @@ describe('fetchDestinationsContext', () => { nodes: [destinationNode({primaryDomain: `https://${devStore}`, webUrl: `https://${devStore}/admin`})], }, }, - } as never) + }) .mockResolvedValueOnce({ currentUserAccount: {organizationForDestination: {id: 'gid', name: 'Org'}}, - } as never) + }) await fetchDestinationsContext({store: devStore}) @@ -89,7 +89,7 @@ describe('fetchDestinationsContext', () => { vi.mocked(businessPlatformRequestDoc) .mockResolvedValueOnce({ currentUserAccount: {destinations: {nodes: [destinationNode()]}}, - } as never) + }) .mockResolvedValueOnce({ currentUserAccount: { organizationForDestination: { @@ -97,7 +97,7 @@ describe('fetchDestinationsContext', () => { name: 'Acme Org', }, }, - } as never) + }) const ctx = await fetchDestinationsContext({store: SHOP}) @@ -111,7 +111,7 @@ describe('fetchDestinationsContext', () => { vi.mocked(businessPlatformRequestDoc) .mockResolvedValueOnce({ currentUserAccount: {destinations: {nodes: [destinationNode()]}}, - } as never) + }) .mockRejectedValueOnce(new Error('boom')) const ctx = await fetchDestinationsContext({store: SHOP}) @@ -123,10 +123,10 @@ describe('fetchDestinationsContext', () => { vi.mocked(businessPlatformRequestDoc) .mockResolvedValueOnce({ currentUserAccount: {destinations: {nodes: [destinationNode()]}}, - } as never) + }) .mockResolvedValueOnce({ currentUserAccount: {organizationForDestination: null}, - } as never) + }) const ctx = await fetchDestinationsContext({store: SHOP}) @@ -136,10 +136,10 @@ describe('fetchDestinationsContext', () => { test('uses a provided token without re-authenticating', async () => { vi.mocked(businessPlatformRequestDoc).mockResolvedValueOnce({ currentUserAccount: {destinations: {nodes: [destinationNode()]}}, - } as never) + }) vi.mocked(businessPlatformRequestDoc).mockResolvedValueOnce({ currentUserAccount: {organizationForDestination: {id: 'gid', name: 'O'}}, - } as never) + }) await fetchDestinationsContext({store: SHOP, token: 'preset'}) @@ -150,10 +150,10 @@ describe('fetchDestinationsContext', () => { test('passes noPrompt through when authenticating', async () => { vi.mocked(businessPlatformRequestDoc).mockResolvedValueOnce({ currentUserAccount: {destinations: {nodes: [destinationNode()]}}, - } as never) + }) vi.mocked(businessPlatformRequestDoc).mockResolvedValueOnce({ currentUserAccount: {organizationForDestination: {id: 'gid', name: 'O'}}, - } as never) + }) await fetchDestinationsContext({store: SHOP, noPrompt: true}) diff --git a/packages/store/src/cli/utilities/store-lookup/destinations.ts b/packages/store/src/cli/utilities/store-lookup/destinations.ts index a9b97dd8bf4..ea57ea18ab5 100644 --- a/packages/store/src/cli/utilities/store-lookup/destinations.ts +++ b/packages/store/src/cli/utilities/store-lookup/destinations.ts @@ -87,7 +87,7 @@ async function fetchOwningOrg( } const decodedId = org.id ? numericIdFromEncodedGid(org.id) : undefined return {name: org.name, ...(decodedId ? {id: decodedId} : {})} - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch (error) { outputDebug(`Failed to resolve owning organization: ${errorMessage(error)}`) return undefined diff --git a/packages/store/src/cli/utilities/store-lookup/organization-shop.test.ts b/packages/store/src/cli/utilities/store-lookup/organization-shop.test.ts index 3d03fbd51cc..1972fe16614 100644 --- a/packages/store/src/cli/utilities/store-lookup/organization-shop.test.ts +++ b/packages/store/src/cli/utilities/store-lookup/organization-shop.test.ts @@ -35,7 +35,7 @@ describe('fetchOrganizationShop', () => { name: 'Acme', accessibleShops: {edges: [{node: shopNode()}]}, }, - } as never) + }) const shop = await fetchOrganizationShop({store: SHOP, organizationId: ORG_ID}) expect(shop.name).toBe('My Shop') @@ -55,7 +55,7 @@ describe('fetchOrganizationShop', () => { name: 'Acme', accessibleShops: {edges: [{node: shopNode({primaryDomain: 'https://other.myshopify.com'})}]}, }, - } as never) + }) await expect(fetchOrganizationShop({store: SHOP, organizationId: ORG_ID})).rejects.toBeInstanceOf(AbortError) }) @@ -63,7 +63,7 @@ describe('fetchOrganizationShop', () => { test('passes organizationId and search variable to the request', async () => { vi.mocked(businessPlatformOrganizationsRequestDoc).mockResolvedValueOnce({ organization: {id: 'gid', name: 'Acme', accessibleShops: {edges: [{node: shopNode()}]}}, - } as never) + }) await fetchOrganizationShop({store: SHOP, organizationId: ORG_ID, token: 'preset'}) @@ -77,7 +77,7 @@ describe('fetchOrganizationShop', () => { test('passes noPrompt through when authenticating', async () => { vi.mocked(businessPlatformOrganizationsRequestDoc).mockResolvedValueOnce({ organization: {id: 'gid', name: 'Acme', accessibleShops: {edges: [{node: shopNode()}]}}, - } as never) + }) await fetchOrganizationShop({store: SHOP, organizationId: ORG_ID, noPrompt: true}) @@ -85,7 +85,7 @@ describe('fetchOrganizationShop', () => { }) test('throws when organization is missing', async () => { - vi.mocked(businessPlatformOrganizationsRequestDoc).mockResolvedValueOnce({organization: null} as never) + vi.mocked(businessPlatformOrganizationsRequestDoc).mockResolvedValueOnce({organization: null}) await expect(fetchOrganizationShop({store: SHOP, organizationId: ORG_ID})).rejects.toBeInstanceOf(AbortError) }) }) diff --git a/packages/store/src/cli/utilities/store-lookup/organization.ts b/packages/store/src/cli/utilities/store-lookup/organization.ts index 752e7c1fcd1..87e8573f78b 100644 --- a/packages/store/src/cli/utilities/store-lookup/organization.ts +++ b/packages/store/src/cli/utilities/store-lookup/organization.ts @@ -26,7 +26,7 @@ export async function findStoreOwningOrganization( } return {id: owningOrganization.id, businessName: owningOrganization.name} - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch (error) { outputDebug(`Could not infer the owning organization for ${store}: ${errorMessage(error)}`) return undefined diff --git a/packages/theme/package.json b/packages/theme/package.json index ab27ace8cfa..bfcc9f3d79c 100644 --- a/packages/theme/package.json +++ b/packages/theme/package.json @@ -34,11 +34,6 @@ "vitest": "vitest", "type-check": "nx type-check" }, - "eslintConfig": { - "extends": [ - "../../.eslintrc.cjs" - ] - }, "dependencies": { "@oclif/core": "4.8.3", "@shopify/cli-kit": "4.9.0", diff --git a/packages/theme/project.json b/packages/theme/project.json index 3dd114b6bf8..f08b01de59f 100644 --- a/packages/theme/project.json +++ b/packages/theme/project.json @@ -31,14 +31,14 @@ "lint": { "executor": "nx:run-commands", "options": { - "command": "pnpm eslint \"src/**/*.ts\"", + "command": "pnpm oxlint --config ../../oxlint.json --deny-warnings src", "cwd": "packages/theme" } }, "lint:fix": { "executor": "nx:run-commands", "options": { - "command": "pnpm eslint 'src/**/*.ts' --fix", + "command": "pnpm oxlint --config ../../oxlint.json --fix src", "cwd": "packages/theme" } }, diff --git a/packages/theme/src/cli/services/dev.test.ts b/packages/theme/src/cli/services/dev.test.ts index c4810488bdf..3ac70081992 100644 --- a/packages/theme/src/cli/services/dev.test.ts +++ b/packages/theme/src/cli/services/dev.test.ts @@ -370,7 +370,7 @@ describe('dev() Ctrl-C analytics', () => { const exitOrder = exitSpy.mock.invocationCallOrder[0]! expect(reportOrder).toBeLessThan(exitOrder) - await reportDevAnalytics(mockConfig, adminSession as any) + await reportDevAnalytics(mockConfig, adminSession) expect(reportAnalyticsEvent).toHaveBeenCalledTimes(1) }) diff --git a/packages/theme/src/cli/services/dev.ts b/packages/theme/src/cli/services/dev.ts index 309211a7316..2c50f44a65c 100644 --- a/packages/theme/src/cli/services/dev.ts +++ b/packages/theme/src/cli/services/dev.ts @@ -194,7 +194,7 @@ export async function reportDevAnalytics(config: Config, session: AdminSession): await addPublicMetadata(() => ({store_fqdn_hash: hashString(session.storeFqdn)})) await addSensitiveMetadata(() => ({store_fqdn: session.storeFqdn})) await reportAnalyticsEvent({config, exitMode: 'ok'}) - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch (_error) { // Analytics must never block exit. } diff --git a/packages/theme/src/cli/services/init.test.ts b/packages/theme/src/cli/services/init.test.ts index 5ed52088289..77511ef47de 100644 --- a/packages/theme/src/cli/services/init.test.ts +++ b/packages/theme/src/cli/services/init.test.ts @@ -23,7 +23,6 @@ vi.mock('@shopify/cli-kit/node/fs', async () => { writeFile: vi.fn(), symlink: vi.fn(), inTemporaryDirectory: vi.fn(async (callback) => { - // eslint-disable-next-line compat/n-no-callback-literal return callback('/tmp') }), } diff --git a/packages/theme/src/cli/services/publish.ts b/packages/theme/src/cli/services/publish.ts index 008976ce45f..ee7e1fb2680 100644 --- a/packages/theme/src/cli/services/publish.ts +++ b/packages/theme/src/cli/services/publish.ts @@ -2,7 +2,6 @@ import {themeComponent} from '../utilities/theme-ui.js' import {findOrSelectTheme} from '../utilities/theme-selector.js' import {themePublish} from '@shopify/cli-kit/node/themes/api' import {themePreviewUrl} from '@shopify/cli-kit/node/themes/urls' -import {Theme} from '@shopify/cli-kit/node/themes/types' import {renderConfirmationPrompt, renderSuccess} from '@shopify/cli-kit/node/ui' import {AdminSession} from '@shopify/cli-kit/node/session' @@ -22,7 +21,7 @@ export async function publish(adminSession: AdminSession, options: PublishServic }, }) - const previewUrl = themePreviewUrl({...themeToPublish, role: 'live'} as Theme, adminSession) + const previewUrl = themePreviewUrl({...themeToPublish, role: 'live'}, adminSession) if (!options.force && !multiEnvironment) { const accept = await renderConfirmationPrompt({ diff --git a/packages/theme/src/cli/services/push.ts b/packages/theme/src/cli/services/push.ts index ff2c42b517c..1624fedb38e 100644 --- a/packages/theme/src/cli/services/push.ts +++ b/packages/theme/src/cli/services/push.ts @@ -1,4 +1,4 @@ -/* eslint-disable tsdoc/syntax */ +/* eslint-disable @shopify/cli/tsdoc-syntax */ import {hasRequiredThemeDirectories, mountThemeFileSystem} from '../utilities/theme-fs.js' import {uploadTheme} from '../utilities/theme-uploader.js' import {ensureDirectoryConfirmed, themeComponent} from '../utilities/theme-ui.js' diff --git a/packages/theme/src/cli/utilities/notifier.ts b/packages/theme/src/cli/utilities/notifier.ts index c47736eefa4..9073ab19181 100644 --- a/packages/theme/src/cli/utilities/notifier.ts +++ b/packages/theme/src/cli/utilities/notifier.ts @@ -30,7 +30,7 @@ export class Notifier { } else { await this.notifyFile(fileName) } - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch (error) { recordError(error) @@ -64,7 +64,7 @@ export class Notifier { try { const parsedUrl = new URL(url) return parsedUrl.protocol === 'http:' || parsedUrl.protocol === 'https:' - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch (error) { return false } diff --git a/packages/theme/src/cli/utilities/theme-command.ts b/packages/theme/src/cli/utilities/theme-command.ts index da8b70b23a9..1d8e94605a8 100644 --- a/packages/theme/src/cli/utilities/theme-command.ts +++ b/packages/theme/src/cli/utilities/theme-command.ts @@ -318,7 +318,7 @@ export default abstract class ThemeCommand extends Command { } }) - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch (error) { if (error instanceof Error) { error.message = `Environment ${environment} failed: \n\n${error.message}` diff --git a/packages/theme/src/cli/utilities/theme-environment/crawler-signature.ts b/packages/theme/src/cli/utilities/theme-environment/crawler-signature.ts index afd65ca908b..d5d0ccc65e3 100644 --- a/packages/theme/src/cli/utilities/theme-environment/crawler-signature.ts +++ b/packages/theme/src/cli/utilities/theme-environment/crawler-signature.ts @@ -133,7 +133,7 @@ export async function fetchOrCreateCrawlerSignatureHeaders( ) return headers - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch (error) { const message = error instanceof Error ? error.message : String(error) outputDebug(`Could not obtain crawler signature headers; continuing without them. ${message}`) diff --git a/packages/theme/src/cli/utilities/theme-environment/host-validation.test.ts b/packages/theme/src/cli/utilities/theme-environment/host-validation.test.ts index 6b0db7448c7..ef99162d489 100644 --- a/packages/theme/src/cli/utilities/theme-environment/host-validation.test.ts +++ b/packages/theme/src/cli/utilities/theme-environment/host-validation.test.ts @@ -63,7 +63,7 @@ describe('createHostValidationHandler', () => { cidr: '192.168.1.50/24', }, ], - } as ReturnType) + }) }) const buildHandler = () => createHostValidationHandler('0.0.0.0', 9292) diff --git a/packages/theme/src/cli/utilities/theme-environment/proxy.test.ts b/packages/theme/src/cli/utilities/theme-environment/proxy.test.ts index 4e1a56d8b21..c2aee7ec9e0 100644 --- a/packages/theme/src/cli/utilities/theme-environment/proxy.test.ts +++ b/packages/theme/src/cli/utilities/theme-environment/proxy.test.ts @@ -129,7 +129,7 @@ describe('dev proxy', () => { const standardEventsCtx = { ...ctx, options: {...ctx.options, standardEventsDevBundle: true}, - } as unknown as DevServerContext + } const content = ` const runtimeUrl = "${standardEventsRuntimeUrl}"; import("${standardEventsRuntimeUrl}"); @@ -274,7 +274,7 @@ describe('dev proxy', () => { const standardEventsCtx = { ...ctx, options: {...ctx.options, standardEventsInspector: true}, - } as unknown as DevServerContext + } const renderingResponse = new Response('') @@ -289,7 +289,7 @@ describe('dev proxy', () => { const standardEventsCtx = { ...ctx, options: {...ctx.options, standardEventsInspector: true}, - } as unknown as DevServerContext + } const renderingResponse = new Response( ``, diff --git a/packages/theme/src/cli/utilities/theme-environment/storefront-password-prompt.test.ts b/packages/theme/src/cli/utilities/theme-environment/storefront-password-prompt.test.ts index 3bc0e9296b1..90c0292b1db 100644 --- a/packages/theme/src/cli/utilities/theme-environment/storefront-password-prompt.test.ts +++ b/packages/theme/src/cli/utilities/theme-environment/storefront-password-prompt.test.ts @@ -118,7 +118,7 @@ describe('ensureValidPassword', () => { // Given vi.mocked(isStorefrontPasswordProtected).mockResolvedValue(true) vi.mocked(isStorefrontPasswordCorrect).mockResolvedValue(true) - vi.mocked(getThemeStore).mockReturnValue(undefined as any) + vi.mocked(getThemeStore).mockReturnValue(undefined) // When await ensureValidPassword('testPassword', 'test-store') diff --git a/packages/theme/src/cli/utilities/theme-environment/theme-environment.test.ts b/packages/theme/src/cli/utilities/theme-environment/theme-environment.test.ts index 434ba57be9e..316d30911c8 100644 --- a/packages/theme/src/cli/utilities/theme-environment/theme-environment.test.ts +++ b/packages/theme/src/cli/utilities/theme-environment/theme-environment.test.ts @@ -80,7 +80,6 @@ describe('setupDevServer', () => { await server.dispatchEvent(event) if (!body && '_data' in res) { - // eslint-disable-next-line compat/require-atomic-updates body = await new Response(res._data as ReadableStream).text() } diff --git a/packages/theme/src/cli/utilities/theme-environment/theme-polling.ts b/packages/theme/src/cli/utilities/theme-environment/theme-polling.ts index ce29487d001..9fde4a817ca 100644 --- a/packages/theme/src/cli/utilities/theme-environment/theme-polling.ts +++ b/packages/theme/src/cli/utilities/theme-environment/theme-polling.ts @@ -35,7 +35,6 @@ export function pollThemeEditorChanges( // but ensure the polling work is done before starting the next interval. await new Promise((resolve) => setTimeout(resolve, POLLING_INTERVAL)) - // eslint-disable-next-line compat/require-atomic-updates latestChecksums = await pollRemoteJsonChanges(targetTheme, session, latestChecksums, localFileSystem, options) .then((checksums) => { failedPollingAttempts = 0 diff --git a/packages/theme/src/cli/utilities/theme-ext-environment/theme-ext-server.test.ts b/packages/theme/src/cli/utilities/theme-ext-environment/theme-ext-server.test.ts index a84357fda28..ada3b05891e 100644 --- a/packages/theme/src/cli/utilities/theme-ext-environment/theme-ext-server.test.ts +++ b/packages/theme/src/cli/utilities/theme-ext-environment/theme-ext-server.test.ts @@ -44,7 +44,6 @@ describe('createDevelopmentExtensionServer', () => { await server.dispatch(event) if (!body && '_data' in res) { - // eslint-disable-next-line compat/require-atomic-updates body = await new Response(res._data as ReadableStream).text() } diff --git a/packages/theme/src/cli/utilities/theme-fs.test.ts b/packages/theme/src/cli/utilities/theme-fs.test.ts index 66d7c1704f9..e020ac01214 100644 --- a/packages/theme/src/cli/utilities/theme-fs.test.ts +++ b/packages/theme/src/cli/utilities/theme-fs.test.ts @@ -1162,7 +1162,7 @@ describe('theme-fs', () => { } // When - await themeFileSystem.write(asset as any) + await themeFileSystem.write(asset) // Then await expect(readFile(joinPath(root, 'sections/announcement-bar.liquid'))).resolves.toBe(asset.value) diff --git a/packages/ui-extensions-server-kit/package.json b/packages/ui-extensions-server-kit/package.json index a0ee21cf0ec..f14fa66d0ba 100644 --- a/packages/ui-extensions-server-kit/package.json +++ b/packages/ui-extensions-server-kit/package.json @@ -36,21 +36,6 @@ "prepack": "NODE_ENV=production pnpm nx build && cp ../../README.md README.md", "vitest": "vitest" }, - "eslintConfig": { - "extends": [ - "../../.eslintrc.cjs" - ], - "rules": { - "@typescript-eslint/no-explicit-any": "off", - "import/extensions": [ - "error", - "never", - { - "ignorePackages": true - } - ] - } - }, "devDependencies": { "@testing-library/react": "^16.3.2", "@types/react": "^18.2.0", diff --git a/packages/ui-extensions-server-kit/project.json b/packages/ui-extensions-server-kit/project.json index 987fccb3128..e74295caaf1 100644 --- a/packages/ui-extensions-server-kit/project.json +++ b/packages/ui-extensions-server-kit/project.json @@ -25,14 +25,14 @@ "lint": { "executor": "nx:run-commands", "options": { - "command": "pnpm eslint src", + "command": "pnpm oxlint --config ../../oxlint.json --deny-warnings src", "cwd": "packages/ui-extensions-server-kit" } }, "lint:fix": { "executor": "nx:run-commands", "options": { - "command": "pnpm eslint src --fix", + "command": "pnpm oxlint --config ../../oxlint.json --fix src", "cwd": "packages/ui-extensions-server-kit" } } diff --git a/packages/ui-extensions-server-kit/src/ExtensionServerClient/ExtensionServerClient.ts b/packages/ui-extensions-server-kit/src/ExtensionServerClient/ExtensionServerClient.ts index 507bfb5df73..8139c23bb83 100644 --- a/packages/ui-extensions-server-kit/src/ExtensionServerClient/ExtensionServerClient.ts +++ b/packages/ui-extensions-server-kit/src/ExtensionServerClient/ExtensionServerClient.ts @@ -50,7 +50,7 @@ export class ExtensionServerClient implements ExtensionServer.Client { const optionsChanged = JSON.stringify(newOptions) !== JSON.stringify(this.options) if (optionsChanged) { - this.options = newOptions as ExtensionServer.Options + this.options = newOptions this.setupConnection(true) } @@ -75,7 +75,7 @@ export class ExtensionServerClient implements ExtensionServer.Client { event: TEvent, data: ExtensionServer.OutboundPersistEvents[TEvent], ): void { - if (this.EVENT_THAT_WILL_MUTATE_THE_SERVER.includes(event as string)) { + if (this.EVENT_THAT_WILL_MUTATE_THE_SERVER.includes(event)) { if (!this.options.locales) { return this.connection?.send(JSON.stringify({event, data})) } @@ -128,7 +128,7 @@ export class ExtensionServerClient implements ExtensionServer.Client { const event = args[0] const data = args.length > 1 ? args[1] : undefined - if (this.EVENT_THAT_WILL_MUTATE_THE_SERVER.includes(event as string)) { + if (this.EVENT_THAT_WILL_MUTATE_THE_SERVER.includes(event)) { return console.warn( `You tried to use "emit" with a the "${event}" event. Please use the "persist" method instead to persist changes to the server.`, ) @@ -178,7 +178,7 @@ export class ExtensionServerClient implements ExtensionServer.Client { this.listeners[event]?.forEach((listener) => { listener({...typedData, extensions: this._getLocalizedExtensions(filteredExtensions)}) }) - // eslint-disable-next-line no-catch-all/no-catch-all + // eslint-disable-next-line @shopify/cli/no-catch-all } catch (err) { console.error( `[ExtensionServer] Something went wrong while parsing a server message:`, diff --git a/packages/ui-extensions-server-kit/src/context/constants.ts b/packages/ui-extensions-server-kit/src/context/constants.ts index a5ee78f7118..e3554aa1d5f 100644 --- a/packages/ui-extensions-server-kit/src/context/constants.ts +++ b/packages/ui-extensions-server-kit/src/context/constants.ts @@ -1,7 +1,6 @@ import {ExtensionServerClient} from '../ExtensionServerClient' import {INITIAL_STATE} from '../state' import {noop} from '../utilities' -import {ExtensionServer} from '../ExtensionServerClient/server-types.js' import {createContext} from 'react' import type {ExtensionServerContext} from './types' @@ -10,7 +9,7 @@ const DEFAULT_VALUE: ExtensionServerContext = { connect: noop, dispatch: noop, state: INITIAL_STATE, - client: new ExtensionServerClient() as ExtensionServer.Client, + client: new ExtensionServerClient(), } export const extensionServerContext = createContext(DEFAULT_VALUE) diff --git a/packages/ui-extensions-server-kit/src/testing/extensions.ts b/packages/ui-extensions-server-kit/src/testing/extensions.ts index 6821e4d1c2d..07f98337f64 100644 --- a/packages/ui-extensions-server-kit/src/testing/extensions.ts +++ b/packages/ui-extensions-server-kit/src/testing/extensions.ts @@ -57,7 +57,7 @@ export function mockExtension(obj: DeepPartial = {}): Extensio supportedFeatures: obj.supportedFeatures as any, localization: obj.localization as any, metafields: obj.metafields as any, - authenticatedRedirectStartUrl: obj.authenticatedRedirectStartUrl as any, + authenticatedRedirectStartUrl: obj.authenticatedRedirectStartUrl, authenticatedRedirectRedirectUrls: obj.authenticatedRedirectRedirectUrls as any, settings: { fields: [ diff --git a/packages/ui-extensions-server-kit/src/utilities/replaceUpdated.test.ts b/packages/ui-extensions-server-kit/src/utilities/replaceUpdated.test.ts index 90b56096d23..ddbc05cd746 100644 --- a/packages/ui-extensions-server-kit/src/utilities/replaceUpdated.test.ts +++ b/packages/ui-extensions-server-kit/src/utilities/replaceUpdated.test.ts @@ -1,4 +1,4 @@ -/* eslint-disable compat/id-length */ +/* eslint-disable @shopify/cli/id-length */ import {replaceUpdated} from './replaceUpdated' describe('replaceUpdated', () => { diff --git a/packages/ui-extensions-server-kit/src/utilities/set.test.ts b/packages/ui-extensions-server-kit/src/utilities/set.test.ts index 832183f1da2..e79927bc845 100644 --- a/packages/ui-extensions-server-kit/src/utilities/set.test.ts +++ b/packages/ui-extensions-server-kit/src/utilities/set.test.ts @@ -1,4 +1,4 @@ -/* eslint-disable compat/id-length */ +/* eslint-disable @shopify/cli/id-length */ import {set} from './set' describe('set()', () => { diff --git a/packages/ui-extensions-test-utils/package.json b/packages/ui-extensions-test-utils/package.json index 1a6b4f4a2a6..47392ad48b7 100644 --- a/packages/ui-extensions-test-utils/package.json +++ b/packages/ui-extensions-test-utils/package.json @@ -12,21 +12,6 @@ "lint": "nx lint", "lint:fix": "nx lint:fix" }, - "eslintConfig": { - "extends": [ - "../../.eslintrc.cjs" - ], - "rules": { - "@typescript-eslint/no-explicit-any": "off", - "import/extensions": [ - "error", - "never", - { - "ignorePackages": true - } - ] - } - }, "devDependencies": { "@testing-library/react": "^16.3.2", "@types/react": "^18.2.0", diff --git a/packages/ui-extensions-test-utils/project.json b/packages/ui-extensions-test-utils/project.json index 3332def2ee6..2fab500d70c 100644 --- a/packages/ui-extensions-test-utils/project.json +++ b/packages/ui-extensions-test-utils/project.json @@ -22,14 +22,14 @@ "lint": { "executor": "nx:run-commands", "options": { - "command": "pnpm eslint src", + "command": "pnpm oxlint --config ../../oxlint.json --deny-warnings src", "cwd": "packages/ui-extensions-test-utils" } }, "lint:fix": { "executor": "nx:run-commands", "options": { - "command": "pnpm eslint src --fix", + "command": "pnpm oxlint --config ../../oxlint.json --fix src", "cwd": "packages/ui-extensions-test-utils" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 62365263731..5c0894a7d10 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -7,14 +7,6 @@ settings: overrides: '@types/react': 18.3.12 vite: 6.4.3 - '@typescript-eslint/utils': 8.56.1 - '@typescript-eslint/type-utils': 8.56.1 - '@typescript-eslint/typescript-estree': 8.56.1 - '@typescript-eslint/types': 8.56.1 - '@typescript-eslint/scope-manager': 8.56.1 - '@typescript-eslint/visitor-keys': 8.56.1 - '@typescript-eslint/project-service': 8.56.1 - '@typescript-eslint/tsconfig-utils': 8.56.1 '@aws-sdk/core': 3.974.6 '@aws-sdk/credential-provider-env': 3.972.32 '@aws-sdk/credential-provider-http': 3.972.34 @@ -59,27 +51,18 @@ importers: '@graphql-codegen/typescript-operations': specifier: 5.1.0 version: 5.1.0(graphql@16.14.2) - '@nx/eslint-plugin': - specifier: 22.7.7 - version: 22.7.7(@babel/traverse@7.29.7)(@typescript-eslint/parser@8.56.1(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3))(eslint-config-prettier@10.1.8(eslint@9.39.5(jiti@2.6.1)))(eslint@9.39.5(jiti@2.6.1))(nx@22.7.7)(typescript@5.9.3) '@nx/workspace': specifier: 22.7.7 version: 22.7.7 '@octokit/rest': specifier: 22.0.1 version: 22.0.1 - '@shopify/eslint-plugin-cli': - specifier: file:packages/eslint-plugin-cli - version: file:packages/eslint-plugin-cli(@typescript-eslint/utils@8.56.1(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.5(jiti@2.6.1))(prettier@3.8.4)(typescript@5.9.3)(vitest@4.1.10) '@shopify/generate-docs': specifier: 1.2.3 version: 1.2.3 '@types/node': specifier: 22.20.1 version: 22.20.1 - '@typescript-eslint/parser': - specifier: 8.56.1 - version: 8.56.1(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3) '@vitest/coverage-istanbul': specifier: ^3.2.7 version: 3.2.7(vitest@4.1.10) @@ -92,12 +75,6 @@ importers: esbuild: specifier: 0.28.1 version: 0.28.1 - eslint: - specifier: ^9.39.5 - version: 9.39.5(jiti@2.6.1) - eslint-plugin-jsdoc: - specifier: 50.8.0 - version: 50.8.0(eslint@9.39.5(jiti@2.6.1)) execa: specifier: ^7.2.0 version: 7.2.0 @@ -585,55 +562,6 @@ importers: '@microsoft/tsdoc': specifier: 0.16.0 version: 0.16.0 - '@shopify/eslint-plugin': - specifier: 50.0.0 - version: 50.0.0(@typescript-eslint/eslint-plugin@8.56.1(@typescript-eslint/parser@8.56.1(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3))(@typescript-eslint/parser@8.56.1(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3))(@typescript-eslint/utils@8.56.1(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.5(jiti@2.6.1))(prettier@3.8.4)(typescript@5.9.3) - '@typescript-eslint/eslint-plugin': - specifier: 8.56.1 - version: 8.56.1(@typescript-eslint/parser@8.56.1(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/parser': - specifier: 8.56.1 - version: 8.56.1(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3) - '@vitest/eslint-plugin': - specifier: 1.1.44 - version: 1.1.44(@typescript-eslint/utils@8.56.1(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3)(vitest@4.1.10(@opentelemetry/api@1.9.1)(@types/node@26.1.1)(@vitest/coverage-istanbul@3.2.7)(jsdom@28.1.0)(msw@2.15.0(@types/node@26.1.1)(typescript@5.9.3))(vite@6.4.3(@types/node@26.1.1)(jiti@2.6.1)(sass@1.100.0)(tsx@4.23.1)(yaml@2.9.0))) - eslint: - specifier: ^9.0.0 - version: 9.39.5(jiti@2.6.1) - eslint-config-prettier: - specifier: 10.1.8 - version: 10.1.8(eslint@9.39.5(jiti@2.6.1)) - eslint-plugin-no-catch-all: - specifier: 1.1.0 - version: 1.1.0(eslint@9.39.5(jiti@2.6.1)) - eslint-plugin-react: - specifier: 7.37.5 - version: 7.37.5(eslint@9.39.5(jiti@2.6.1)) - eslint-plugin-react-hooks: - specifier: 5.2.0 - version: 5.2.0(eslint@9.39.5(jiti@2.6.1)) - eslint-plugin-tsdoc: - specifier: 0.5.2 - version: 0.5.2(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3) - eslint-plugin-unused-imports: - specifier: 4.4.1 - version: 4.4.1(@typescript-eslint/eslint-plugin@8.56.1(@typescript-eslint/parser@8.56.1(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.5(jiti@2.6.1)) - execa: - specifier: 7.2.0 - version: 7.2.0 - globals: - specifier: 16.5.0 - version: 16.5.0 - devDependencies: - '@nx/eslint-plugin': - specifier: 22.7.7 - version: 22.7.7(@babel/traverse@7.29.7)(@typescript-eslint/parser@8.56.1(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3))(eslint-config-prettier@10.1.8(eslint@9.39.5(jiti@2.6.1)))(eslint@9.39.5(jiti@2.6.1))(nx@22.7.7)(typescript@5.9.3) - eslint-plugin-jsdoc: - specifier: 50.8.0 - version: 50.8.0(eslint@9.39.5(jiti@2.6.1)) - oxlint: - specifier: 1.75.0 - version: 1.75.0(oxlint-tsgolint@7.0.2001) packages/organizations: dependencies: @@ -1065,10 +993,6 @@ packages: resolution: {integrity: sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ==, tarball: https://registry.npmjs.org/@babel/generator/-/generator-7.29.7.tgz} engines: {node: '>=6.9.0'} - '@babel/helper-annotate-as-pure@7.29.7': - resolution: {integrity: sha512-OoK6239jHPuSQOoS0kfTVKn0b/rVTk0seKq4Gd2UMLtmOVLjDC0ki3e+c90Trqv2gMfvJFqkiljrr568+qddiw==, tarball: https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.29.7.tgz} - engines: {node: '>=6.9.0'} - '@babel/helper-compilation-targets@7.28.6': resolution: {integrity: sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==, tarball: https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz} engines: {node: '>=6.9.0'} @@ -1077,23 +1001,6 @@ packages: resolution: {integrity: sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==, tarball: https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.29.7.tgz} engines: {node: '>=6.9.0'} - '@babel/helper-create-class-features-plugin@7.29.7': - resolution: {integrity: sha512-IY3ZD9Tmooqr3TUhc3DUWxiuo8xx1DWLhd5M7hQ+ZWJamqM2BbalrBJb2MisSLoYorOj75U03qULCxQTY9r3hg==, tarball: https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.29.7.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/helper-create-regexp-features-plugin@7.29.7': - resolution: {integrity: sha512-907Uymvqgg1dwUA+7IGwFAOSYzQOuzPXKNJ1yxzwPffzkYFg2q2eHi1fIOs6sXkG9NbIUMunnUlkYsfRFNvomg==, tarball: https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.29.7.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/helper-define-polyfill-provider@0.6.8': - resolution: {integrity: sha512-47UwBLPpQi1NoWzLuHNjRoHlYXMwIJoBf7MFou6viC/sIHWYygpvr0B6IAyh5sBdA2nr2LPIRww8lfaUVQINBA==, tarball: https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.8.tgz} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - '@babel/helper-globals@7.28.0': resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==, tarball: https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz} engines: {node: '>=6.9.0'} @@ -1102,10 +1009,6 @@ packages: resolution: {integrity: sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==, tarball: https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.29.7.tgz} engines: {node: '>=6.9.0'} - '@babel/helper-member-expression-to-functions@7.29.7': - resolution: {integrity: sha512-j+7JYmk1JYDtACIGj0QJqqWZjoUpMoEikQGADMaHgCMCSDqd2+P32rfcibUNrGOMWrlzK1WJBdxrB3JJQZwWtg==, tarball: https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.29.7.tgz} - engines: {node: '>=6.9.0'} - '@babel/helper-module-imports@7.28.6': resolution: {integrity: sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==, tarball: https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz} engines: {node: '>=6.9.0'} @@ -1126,10 +1029,6 @@ packages: peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-optimise-call-expression@7.29.7': - resolution: {integrity: sha512-+kmGVjcT9RGYzoDwdwEqEvGgKe3BYq+O1iGzjFubaNgZHwYHP6lsF2Yghf4kEuv9BV7tYDZ913aBW9am6YKong==, tarball: https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.29.7.tgz} - engines: {node: '>=6.9.0'} - '@babel/helper-plugin-utils@7.28.6': resolution: {integrity: sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==, tarball: https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz} engines: {node: '>=6.9.0'} @@ -1138,22 +1037,6 @@ packages: resolution: {integrity: sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw==, tarball: https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.29.7.tgz} engines: {node: '>=6.9.0'} - '@babel/helper-remap-async-to-generator@7.29.7': - resolution: {integrity: sha512-16AMiW26DbXWBbr3B8wNozKM0ydMLB892vaOaJW/fPJdnT8vJk5sdkQcU/isqUxyCE0cEoa8wZOcbgDuC4b6Og==, tarball: https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.29.7.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/helper-replace-supers@7.29.7': - resolution: {integrity: sha512-atfGXWSeCiF4DnKZIfmJfQRkSw9b9gNNXR1kqKjbhG4pGYCOnkp8OcTB8E3NXjBu8NpheSnOeNKz8KT7UNFTmQ==, tarball: https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.29.7.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - - '@babel/helper-skip-transparent-expression-wrappers@7.29.7': - resolution: {integrity: sha512-brcMGQaVzIeUb+6/bs1Av0f8YuNNjKY2JyvfRCsFuFsdKccEQ5Ges2y74D74NZ1Rz8lKJ9ksJkfqwQFJ/iNEyQ==, tarball: https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.29.7.tgz} - engines: {node: '>=6.9.0'} - '@babel/helper-string-parser@7.27.1': resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==, tarball: https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz} engines: {node: '>=6.9.0'} @@ -1174,10 +1057,6 @@ packages: resolution: {integrity: sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==, tarball: https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.29.7.tgz} engines: {node: '>=6.9.0'} - '@babel/helper-wrap-function@7.29.7': - resolution: {integrity: sha512-iES0Skag9ERIF68aXadpO6dbXa03mNWK3sEqJaMnLNs/eC3l0lkImdfoy6Y09/SfkpawdAB4RjQ7PVA7TcVGdw==, tarball: https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.29.7.tgz} - engines: {node: '>=6.9.0'} - '@babel/helpers@7.28.6': resolution: {integrity: sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==, tarball: https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.6.tgz} engines: {node: '>=6.9.0'} @@ -1196,1421 +1075,951 @@ packages: engines: {node: '>=6.0.0'} hasBin: true - '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.29.7': - resolution: {integrity: sha512-j8SrR0zLZrRsC09DlszEx8FpMiwukKffYXMK0d5LmOglO7vGG6sz/BR/20yHqWH+Lnn31JTt2PE3hIWNgM2J6w==, tarball: https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.29.7.tgz} + '@babel/plugin-syntax-import-assertions@7.28.6': + resolution: {integrity: sha512-pSJUpFHdx9z5nqTSirOCMtYVP2wFgoWhP0p3g8ONK/4IHhLIBd0B9NYqAvIUAhq+OkhO4VM1tENCt0cjlsNShw==, tarball: https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.28.6.tgz} engines: {node: '>=6.9.0'} peerDependencies: - '@babel/core': ^7.0.0 + '@babel/core': ^7.0.0-0 - '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.29.7': - resolution: {integrity: sha512-r8j8escF+U2FUHo0KOhPUdMzUO+jp9fInva6+ACVAF3Y97Ev+5iNZwiqTghmzNeWwDkOPlYuTcfb1vDaoZKmAQ==, tarball: https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.29.7.tgz} + '@babel/plugin-transform-react-jsx-self@7.27.1': + resolution: {integrity: sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==, tarball: https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz} engines: {node: '>=6.9.0'} peerDependencies: - '@babel/core': ^7.0.0 + '@babel/core': ^7.0.0-0 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.29.7': - resolution: {integrity: sha512-GE1TFSiuFeGsCxmYXZl8HwoPrVlwe4rHPFE8weieGKZqnDORK+Ar3vgWMgW+AOxQ6/2TgLSKx9p6W7O4rC6qgQ==, tarball: https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.29.7.tgz} + '@babel/plugin-transform-react-jsx-source@7.27.1': + resolution: {integrity: sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==, tarball: https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz} engines: {node: '>=6.9.0'} peerDependencies: - '@babel/core': ^7.0.0 + '@babel/core': ^7.0.0-0 - '@babel/plugin-bugfix-safari-rest-destructuring-rhs-array@7.29.7': - resolution: {integrity: sha512-oBNVCvnO5tND+xSopWvV8WNGfpTfgP4Zr/YXXSj8zfmcPktp5Ku/aZlsIowgSD4fjmgHn6sGmB9APVsU5zOdhA==, tarball: https://registry.npmjs.org/@babel/plugin-bugfix-safari-rest-destructuring-rhs-array/-/plugin-bugfix-safari-rest-destructuring-rhs-array-7.29.7.tgz} + '@babel/runtime@7.28.6': + resolution: {integrity: sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==, tarball: https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.6.tgz} engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.29.7': - resolution: {integrity: sha512-QQt9qKHZ2sg/kivaLr7lnQr8HVrQDdBNSfCsTjiDxRuX/K5ORyKq+Bu8Xr0cDE3Dfkv0cw28Ve0EKyKMvulkOw==, tarball: https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.29.7.tgz} + '@babel/runtime@7.29.7': + resolution: {integrity: sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==, tarball: https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.7.tgz} engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.13.0 - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.29.7': - resolution: {integrity: sha512-pn6QacGLgvCcwc+syUhKE/qSjV2D1IHDB84RNxWYSt1mW3K/SCtjinZ2p0cETJxAWBjPy3K/1lHwG5BjjPxNlw==, tarball: https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.29.7.tgz} + '@babel/template@7.28.6': + resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==, tarball: https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz} engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - '@babel/plugin-proposal-decorators@7.29.7': - resolution: {integrity: sha512-EtU0Hi3GvrTqD56xKmZvV/uCXK2ZbwVNPNLAquVItcAZpUhkXwWlo3Fmj0c2LxgSf2I8IDULeAepwNP1OefLXg==, tarball: https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.29.7.tgz} + '@babel/template@7.29.7': + resolution: {integrity: sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==, tarball: https://registry.npmjs.org/@babel/template/-/template-7.29.7.tgz} engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2': - resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==, tarball: https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz} + '@babel/traverse@7.29.0': + resolution: {integrity: sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==, tarball: https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz} engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-decorators@7.29.7': - resolution: {integrity: sha512-9MTTLbF39X6sqM92JPEsoI7++26hjZvzkxKZy64aMhWLH2mPkJ/Q3AV4QLmls3R14FpSpkOwQQfUh962JGQxxg==, tarball: https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.29.7.tgz} + '@babel/traverse@7.29.7': + resolution: {integrity: sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw==, tarball: https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.7.tgz} engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-import-assertions@7.28.6': - resolution: {integrity: sha512-pSJUpFHdx9z5nqTSirOCMtYVP2wFgoWhP0p3g8ONK/4IHhLIBd0B9NYqAvIUAhq+OkhO4VM1tENCt0cjlsNShw==, tarball: https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.28.6.tgz} + '@babel/types@7.29.0': + resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==, tarball: https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz} engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-import-assertions@7.29.7': - resolution: {integrity: sha512-/An1OCBN93thpBAGyfsK2pcf0jvju1SAtKkL2Ny++B5Sy6sqgzXDQH1cZxWbF96Wuk+bn41MDA9bLd4VVAw6rw==, tarball: https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.29.7.tgz} + '@babel/types@7.29.7': + resolution: {integrity: sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==, tarball: https://registry.npmjs.org/@babel/types/-/types-7.29.7.tgz} engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-import-attributes@7.29.7': - resolution: {integrity: sha512-zGYcYfq/WmZ4V+kBIXQon9dSSc8ircGZqw9ZaNhhGj9nZkeBu1jHLBDQqYYi5WA9uawvA2sIMbry2nCFhf5Djg==, tarball: https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.29.7.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@bramus/specificity@2.4.2': + resolution: {integrity: sha512-ctxtJ/eA+t+6q2++vj5j7FYX3nRu311q1wfYH3xjlLOsczhlhxAg2FWNUXhpGvAw3BWo1xBcvOV6/YLc2r5FJw==, tarball: https://registry.npmjs.org/@bramus/specificity/-/specificity-2.4.2.tgz} + hasBin: true - '@babel/plugin-syntax-jsx@7.29.7': - resolution: {integrity: sha512-TSu8+mHCoEaaCDEZ0I3+6mvTBYR4PCxQwf2z9/r5Tbztv6NaLR3B9thGTTxX2WGuGHJqRiAbKPeGTJ5XWXVg6A==, tarball: https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.29.7.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@bugsnag/browser@8.9.0': + resolution: {integrity: sha512-lsreEdlIQxEzJxFzp1T2yKH4Jzzm5YiXez0UK734XXfBRx8ZR2SDcNljo2EqctrRIqVrCM6wp6RvEo9hzlpeBg==, tarball: https://registry.npmjs.org/@bugsnag/browser/-/browser-8.9.0.tgz} - '@babel/plugin-syntax-typescript@7.29.7': - resolution: {integrity: sha512-ngr+82Sh0xMz25TPCZi+nC2iTzjfCdWS2ONXTp/PtSCHCgaCNBpdMqgvJ2ccdLlClVZ7sisIgB914j/JFe+RZA==, tarball: https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.29.7.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@bugsnag/core@8.9.0': + resolution: {integrity: sha512-SrXO0isIZfrCem06/WDvC5MSd1Tj6Yjm4Wqdlv6jyjTvsow+cppvt7rS9Bps3qOeXfYCqWHN4ev02OdwnfZ1PQ==, tarball: https://registry.npmjs.org/@bugsnag/core/-/core-8.9.0.tgz} - '@babel/plugin-syntax-unicode-sets-regex@7.18.6': - resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==, tarball: https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 + '@bugsnag/cuid@3.2.1': + resolution: {integrity: sha512-zpvN8xQ5rdRWakMd/BcVkdn2F8HKlDSbM3l7duueK590WmI1T0ObTLc1V/1e55r14WNjPd5AJTYX4yPEAFVi+Q==, tarball: https://registry.npmjs.org/@bugsnag/cuid/-/cuid-3.2.1.tgz} - '@babel/plugin-transform-arrow-functions@7.29.7': - resolution: {integrity: sha512-N7zArUXWzAMzm+/N0uPBeVB3Fam5lMxtUwMmDK5f/IBBS7a7p1qeUoxd/6CckXoxUdgsntq1Dh8xNW06maZbDQ==, tarball: https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.29.7.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@bugsnag/js@8.9.0': + resolution: {integrity: sha512-ChjKFVBF2CgepDXfMBkbEdcFUniJNN8py5V+tinaB8+vpJbr/fD1+VLFhkruSEn3jOafXrc1XJe9WHtsu9ht0g==, tarball: https://registry.npmjs.org/@bugsnag/js/-/js-8.9.0.tgz} - '@babel/plugin-transform-async-generator-functions@7.29.7': - resolution: {integrity: sha512-d98gXZkgswvkyohMBABkhm3GeXhYj8psWfwQ2C7gtfrKGTykQa/iOIi+JJhwMjPlZ6Vm2XN+DCf3Es1EoG4ZLA==, tarball: https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.29.7.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@bugsnag/node@8.9.0': + resolution: {integrity: sha512-WpogbMCY8/Rmg+1nsetp3GcPnXj5rpK1YxSmgEfiBM8B2nr/riYqrzuXIkrb1FZN1ti+Hfn1IecRAyGx3rUBBA==, tarball: https://registry.npmjs.org/@bugsnag/node/-/node-8.9.0.tgz} - '@babel/plugin-transform-async-to-generator@7.29.7': - resolution: {integrity: sha512-pcUb2SS+RMo9TWVBwKGI5ShtoG7R+zBsFmCKDa6fe8c+hPr3XJlZgoE5j6i8W7gDjhyvy+85vmYexanvXh3d1w==, tarball: https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.29.7.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@bugsnag/safe-json-stringify@6.1.0': + resolution: {integrity: sha512-ImA35rnM7bGr+J30R979FQ95BhRB4UO1KfJA0J2sVqc8nwnrS9hhE5mkTmQWMs8Vh1Da+hkLKs5jJB4JjNZp4A==, tarball: https://registry.npmjs.org/@bugsnag/safe-json-stringify/-/safe-json-stringify-6.1.0.tgz} - '@babel/plugin-transform-block-scoped-functions@7.29.7': - resolution: {integrity: sha512-cUSmjh72N+rN4PrkFlN1dJwNCwjVp5d38/CQrEsFggkD10UiFlBFgdH3tv5dNsLuHY+3S8db2xCHjhZcv5WgvA==, tarball: https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.29.7.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@bugsnag/source-maps@2.3.3': + resolution: {integrity: sha512-DCCXhiY1CdCy3Eo6SS/qHnBuyrXY0jyefsJBpXemwI5eXEAR0KrhnhxbGU7Ga/8ysssD1A22J5488BYH1t4pgQ==, tarball: https://registry.npmjs.org/@bugsnag/source-maps/-/source-maps-2.3.3.tgz} + hasBin: true - '@babel/plugin-transform-block-scoping@7.29.7': - resolution: {integrity: sha512-ONyr4+AZhKh8yKWInVxU9AXA9EbsyeLcL6V0dJy6M2/62vuvpGm29zzuymbTpdc451GEpDIdAyPLP3r+P61yKQ==, tarball: https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.29.7.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@changesets/apply-release-plan@7.1.1': + resolution: {integrity: sha512-9qPCm/rLx/xoOFXIHGB229+4GOL76S4MC+7tyOuTsR6+1jYlfFDQORdvwR5hDA6y4FL2BPt3qpbcQIS+dW85LA==, tarball: https://registry.npmjs.org/@changesets/apply-release-plan/-/apply-release-plan-7.1.1.tgz} - '@babel/plugin-transform-class-properties@7.29.7': - resolution: {integrity: sha512-GtcpjFvanPfzNQi3eTitsCqtRRmmqzpy/A+yhTR1HaZo1Ly3EA8ZXxlPyHdR8/IuRMYc3E4wdGBewB2QKQjAaA==, tarball: https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.29.7.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@changesets/assemble-release-plan@6.0.10': + resolution: {integrity: sha512-rSDcqdJ9KbVyjpBIuCidhvZNIiVt1XaIYp73ycVQRIA5n/j6wQaEk0ChRLMUQ1vkxZe51PTQ9OIhbg6HQMW45A==, tarball: https://registry.npmjs.org/@changesets/assemble-release-plan/-/assemble-release-plan-6.0.10.tgz} - '@babel/plugin-transform-class-static-block@7.29.7': - resolution: {integrity: sha512-kibJgmEdX2iMwsHY2tSZNDgj8PwIlCQz7FK9KuGKO8zsuoUwSEhoNnNVp/emKWrbY4HeO6kkXfdMqRKKKXBm2A==, tarball: https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.29.7.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.12.0 + '@changesets/changelog-git@0.2.1': + resolution: {integrity: sha512-x/xEleCFLH28c3bQeQIyeZf8lFXyDFVn1SgcBiR2Tw/r4IAWlk1fzxCEZ6NxQAjF2Nwtczoen3OA2qR+UawQ8Q==, tarball: https://registry.npmjs.org/@changesets/changelog-git/-/changelog-git-0.2.1.tgz} - '@babel/plugin-transform-classes@7.29.7': - resolution: {integrity: sha512-qV0OGGBVacduzQHE649JyCneOFI/maT+YKsO+K4Yi3xv2wTPNjM/W2o2gdzMwEAZz7fXNTHAe0NcSg30bIN69g==, tarball: https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.29.7.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@changesets/cli@2.31.0': + resolution: {integrity: sha512-AhI4enNTgHu2IZr6K4WZyf0EPch4XVMn1yOMFmCD9gsfBGqMYaHXls5HyDv6/CL5axVQABz68eG30eCtbr2wFg==, tarball: https://registry.npmjs.org/@changesets/cli/-/cli-2.31.0.tgz} + hasBin: true - '@babel/plugin-transform-computed-properties@7.29.7': - resolution: {integrity: sha512-RK7/IyU5phpuCdBAuig5VkzG/EnbDaui5SQGdU9BFrHdV+mV4cUjLMQ9lJDjLNtWHsqtiefpGZUXQP2BiTYMsA==, tarball: https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.29.7.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@changesets/config@3.1.4': + resolution: {integrity: sha512-pf0bvD/v6WI2cRlZ6hzpjtZdSlXDXMAJ+Iz7xfFzV4ZxJ8OGGAON+1qYc99ZPrijnt4xp3VGG7eNvAOGS24V1Q==, tarball: https://registry.npmjs.org/@changesets/config/-/config-3.1.4.tgz} - '@babel/plugin-transform-destructuring@7.29.7': - resolution: {integrity: sha512-iPX8aD6H9zV5s7ZsqTdNocPN/MGQ5sSMnElKrktxjJRMnB2jN/1p2+R7GkfD6CAYoVFqy5A4XnSIUeGgJzIWpg==, tarball: https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.29.7.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@changesets/errors@0.2.0': + resolution: {integrity: sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow==, tarball: https://registry.npmjs.org/@changesets/errors/-/errors-0.2.0.tgz} - '@babel/plugin-transform-dotall-regex@7.29.7': - resolution: {integrity: sha512-3qc18hsD2RdZiyJNDNc7HQpv6xbncwh8FYtxNFFzclSyh/trPD9KkVR9BDECUjDLvb7yJVF15GfYUuC+LMkkiQ==, tarball: https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.29.7.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@changesets/get-dependents-graph@2.1.4': + resolution: {integrity: sha512-ZsS00x6WvmHq3sQv8oCMwL0f/z3wbXCVuSVTJwCnnmbC/iBdNJGFx1EcbMG4PC6sXRyH69liM4A2WKXzn/kRPg==, tarball: https://registry.npmjs.org/@changesets/get-dependents-graph/-/get-dependents-graph-2.1.4.tgz} - '@babel/plugin-transform-duplicate-keys@7.29.7': - resolution: {integrity: sha512-6IvRRriEMqnBwD6chtxdLpMYCHWEzN+oL5cyQtjykya19UgzbmKhxmhZgKC/LHxS2nYr9Q/qYPZ5Lr6jOL9+yQ==, tarball: https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.29.7.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@changesets/get-release-plan@4.0.16': + resolution: {integrity: sha512-2K5Om6CrMPm45rtvckfzWo7e9jOVCKLCnXia5eUPaURH7/LWzri7pK1TycdzAuAtehLkW7VPbWLCSExTHmiI6g==, tarball: https://registry.npmjs.org/@changesets/get-release-plan/-/get-release-plan-4.0.16.tgz} - '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.29.7': - resolution: {integrity: sha512-2wiIyo2BjtgU7HufSeDnL9L2O7zr8jmhFKuSr65VpRkUiRKRNpb0mdlk56+XPPKoIrfHqzbMuglDvZun0RISsA==, tarball: https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.29.7.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 + '@changesets/get-version-range-type@0.4.0': + resolution: {integrity: sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ==, tarball: https://registry.npmjs.org/@changesets/get-version-range-type/-/get-version-range-type-0.4.0.tgz} - '@babel/plugin-transform-dynamic-import@7.29.7': - resolution: {integrity: sha512-giOlEm/EFjfjr+te9NsdjkUo2v4f8rS/SXPumRVHAtbNcyNlvtREkU1dZzaIDclNpnaVhlCqRdFKhJBjBikzLg==, tarball: https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.29.7.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@changesets/git@3.0.4': + resolution: {integrity: sha512-BXANzRFkX+XcC1q/d27NKvlJ1yf7PSAgi8JG6dt8EfbHFHi4neau7mufcSca5zRhwOL8j9s6EqsxmT+s+/E6Sw==, tarball: https://registry.npmjs.org/@changesets/git/-/git-3.0.4.tgz} - '@babel/plugin-transform-explicit-resource-management@7.29.7': - resolution: {integrity: sha512-Rstj7coNz8sE+7Ju7ihpHLI564lsK5pUpNNlvptCIC/16E/S5hbl6n3kESPKdNRmqEWlpn5xpS5Q2dvXBsySLw==, tarball: https://registry.npmjs.org/@babel/plugin-transform-explicit-resource-management/-/plugin-transform-explicit-resource-management-7.29.7.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@changesets/logger@0.1.1': + resolution: {integrity: sha512-OQtR36ZlnuTxKqoW4Sv6x5YIhOmClRd5pWsjZsddYxpWs517R0HkyiefQPIytCVh4ZcC5x9XaG8KTdd5iRQUfg==, tarball: https://registry.npmjs.org/@changesets/logger/-/logger-0.1.1.tgz} - '@babel/plugin-transform-exponentiation-operator@7.29.7': - resolution: {integrity: sha512-zFpMOTLZBdW5LfObqcSbL6kefg4R4eLdmvS0wbN9M6D5Mym/sKm9toOoWyVOa+xDjvCnuWcHls2YonXwHvH3CQ==, tarball: https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.29.7.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@changesets/parse@0.4.3': + resolution: {integrity: sha512-ZDmNc53+dXdWEv7fqIUSgRQOLYoUom5Z40gmLgmATmYR9NbL6FJJHwakcCpzaeCy+1D0m0n7mT4jj2B/MQPl7A==, tarball: https://registry.npmjs.org/@changesets/parse/-/parse-0.4.3.tgz} - '@babel/plugin-transform-export-namespace-from@7.29.7': - resolution: {integrity: sha512-24B2nOy2TeJSMheqwPD4DDQOV/elLSIlKxjZt4i05H5AgdPdWR3n18HnNrcJ+j76WJd9gbwb9jPjNYUy6RautA==, tarball: https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.29.7.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@changesets/pre@2.0.2': + resolution: {integrity: sha512-HaL/gEyFVvkf9KFg6484wR9s0qjAXlZ8qWPDkTyKF6+zqjBe/I2mygg3MbpZ++hdi0ToqNUF8cjj7fBy0dg8Ug==, tarball: https://registry.npmjs.org/@changesets/pre/-/pre-2.0.2.tgz} - '@babel/plugin-transform-for-of@7.29.7': - resolution: {integrity: sha512-zeSIHh0+E1Um1WJRXCFlHQYu2ieJNdivLLjlBEp+dIBu3S51n+SZZmIXjxnItw6pz56Cn+KvK68BIBVsxq2JiQ==, tarball: https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.29.7.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@changesets/read@0.6.7': + resolution: {integrity: sha512-D1G4AUYGrBEk8vj8MGwf75k9GpN6XL3wg8i42P2jZZwFLXnlr2Pn7r9yuQNbaMCarP7ZQWNJbV6XLeysAIMhTA==, tarball: https://registry.npmjs.org/@changesets/read/-/read-0.6.7.tgz} - '@babel/plugin-transform-function-name@7.29.7': - resolution: {integrity: sha512-otRWaHXE6fbAGkePvaj/kvs3HsqXfPhlnzwSOlnFgbqCPMd975dW+4wZ00WFBt+/YlBGcJwNrARQTOJOb4ZrIg==, tarball: https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.29.7.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@changesets/should-skip-package@0.1.2': + resolution: {integrity: sha512-qAK/WrqWLNCP22UDdBTMPH5f41elVDlsNyat180A33dWxuUDyNpg6fPi/FyTZwRriVjg0L8gnjJn2F9XAoF0qw==, tarball: https://registry.npmjs.org/@changesets/should-skip-package/-/should-skip-package-0.1.2.tgz} - '@babel/plugin-transform-json-strings@7.29.7': - resolution: {integrity: sha512-RRnE2+eon1rJAq8MnoF1b5kTpY1vU88twHcvcKMrsqP/jxIRqDVs9iJB5fqPuqyeFAW0wJo4MlUIPpQCq/aRsg==, tarball: https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.29.7.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@changesets/types@4.1.0': + resolution: {integrity: sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==, tarball: https://registry.npmjs.org/@changesets/types/-/types-4.1.0.tgz} - '@babel/plugin-transform-literals@7.29.7': - resolution: {integrity: sha512-DZ/oLP21ZuWx1vKqnoNv6/tvEK48AQOBRai40CX9dTjGluvT/YZCyY3rryDtyUqCEoyNroy5KKPwX2iQCiRvyw==, tarball: https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.29.7.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@changesets/types@6.1.0': + resolution: {integrity: sha512-rKQcJ+o1nKNgeoYRHKOS07tAMNd3YSN0uHaJOZYjBAgxfV7TUE7JE+z4BzZdQwb5hKaYbayKN5KrYV7ODb2rAA==, tarball: https://registry.npmjs.org/@changesets/types/-/types-6.1.0.tgz} - '@babel/plugin-transform-logical-assignment-operators@7.29.7': - resolution: {integrity: sha512-A0H91hh6W8MFRkp5TqJmMr39jzGD1A1E1Ysiv2O06Sfbhkapm+XyIzxWCEh5kqwOZ1/8QZ0dY3SeQ7XBqfJd5Q==, tarball: https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.29.7.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@changesets/write@0.4.0': + resolution: {integrity: sha512-CdTLvIOPiCNuH71pyDu3rA+Q0n65cmAbXnwWH84rKGiFumFzkmHNT8KHTMEchcxN+Kl8I54xGUhJ7l3E7X396Q==, tarball: https://registry.npmjs.org/@changesets/write/-/write-0.4.0.tgz} - '@babel/plugin-transform-member-expression-literals@7.29.7': - resolution: {integrity: sha512-hl1kwFZCCiDyfH25Xmco9jTrkPgnS9pmOzSG7W5I4SaGbLeqKv417hcU2RKmaxoPEgsoJh7ZPOrnPGq99bHoUg==, tarball: https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.29.7.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@cspotcode/source-map-support@0.8.1': + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==, tarball: https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz} + engines: {node: '>=12'} - '@babel/plugin-transform-modules-amd@7.29.7': - resolution: {integrity: sha512-fxtQoH3m5ywUSIfaH0FGCzWu4McsYon5bD3K4XnskC7f+OyQMj7rsOMi4NvvmJ83WwBAg4UCe+ov4VZlqEvyew==, tarball: https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.29.7.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@csstools/color-helpers@5.1.0': + resolution: {integrity: sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA==, tarball: https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.1.0.tgz} + engines: {node: '>=18'} - '@babel/plugin-transform-modules-commonjs@7.29.7': - resolution: {integrity: sha512-j0vCldybPC5b5dwCQOJ21uKtHzt7hxLygJTg9eF1ScfaikEDNfzn94XoW5Fi+seBR0nCyL23xaBFFkq7dTM8XQ==, tarball: https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.29.7.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@csstools/color-helpers@6.1.0': + resolution: {integrity: sha512-064IFJdjTfUqnjpCVpMOdbr8FLQBhinbZj6yRv2An2E41O/pLEXqfFRWqGq/SxlE5PEUYTlvWsG2r8MswAVvkg==, tarball: https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-6.1.0.tgz} + engines: {node: '>=20.19.0'} - '@babel/plugin-transform-modules-systemjs@7.29.7': - resolution: {integrity: sha512-TM2ZcQLoG2/y4HODiStCo10DibYhWhGWAwVv+EQKmG/7GFl0N+AAmUiXOMKM+aiJ9XBJ9AHVZBvTzMnJ2sM3cQ==, tarball: https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.29.7.tgz} - engines: {node: '>=6.9.0'} + '@csstools/css-calc@2.1.4': + resolution: {integrity: sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==, tarball: https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.4.tgz} + engines: {node: '>=18'} peerDependencies: - '@babel/core': ^7.0.0-0 + '@csstools/css-parser-algorithms': ^3.0.5 + '@csstools/css-tokenizer': ^3.0.4 - '@babel/plugin-transform-modules-umd@7.29.7': - resolution: {integrity: sha512-B4UkaTK3QpgCwJnrxKfMPKdo92CN7OKXAlpAAnM3UPu0Q0lCCk57ylA9AJbRy2v8dDKOPAAWcoR6CMyeoHwRCA==, tarball: https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.29.7.tgz} - engines: {node: '>=6.9.0'} + '@csstools/css-calc@3.2.1': + resolution: {integrity: sha512-DtdHlgXh5ZkA43cwBcAm+huzgJiwx3ZTWVjBs94kwz2xKqSimDA3lBgCjphYgwgVUMWatSM0pDd8TILB1yrVVg==, tarball: https://registry.npmjs.org/@csstools/css-calc/-/css-calc-3.2.1.tgz} + engines: {node: '>=20.19.0'} peerDependencies: - '@babel/core': ^7.0.0-0 + '@csstools/css-parser-algorithms': ^4.0.0 + '@csstools/css-tokenizer': ^4.0.0 - '@babel/plugin-transform-named-capturing-groups-regex@7.29.7': - resolution: {integrity: sha512-vuFoLwr4qnv2xbZ16SQd6uPcH5FNrLHhk/Jzo++0XJFcaDsr4gjJVg6j398oMHiC+83k/GiBzviwF5KBJkPUtQ==, tarball: https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.29.7.tgz} - engines: {node: '>=6.9.0'} + '@csstools/css-color-parser@3.1.0': + resolution: {integrity: sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA==, tarball: https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.1.0.tgz} + engines: {node: '>=18'} peerDependencies: - '@babel/core': ^7.0.0 + '@csstools/css-parser-algorithms': ^3.0.5 + '@csstools/css-tokenizer': ^3.0.4 - '@babel/plugin-transform-new-target@7.29.7': - resolution: {integrity: sha512-fEo41GmsOUhOBlw8ioo6zvjX5Xc2Lqkzlyfqbpsk3eB6TReV18uhxZ0esfEokVbY2+PVJAQHNKxER6lGrzNd3A==, tarball: https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.29.7.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-nullish-coalescing-operator@7.29.7': - resolution: {integrity: sha512-idmp1dFaekP9GbcMvG24Kvw2BfhFZjHnNJCkV4WuIY4PskJzwI3f1N5OdgYke38T7rftO6ERulFRn2cFeZwRkg==, tarball: https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.29.7.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-numeric-separator@7.29.7': - resolution: {integrity: sha512-zR7fv/z14OjgHl4AgRtkDBvBMhIzCxqV/qN/2BCRC7LjFwvuzjYe7gDWxC4Wl/SNsLM6SE1IWvRPYMgSJaUvNw==, tarball: https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.29.7.tgz} - engines: {node: '>=6.9.0'} + '@csstools/css-color-parser@4.1.9': + resolution: {integrity: sha512-paQcIaOO53Rk5+YrBaBjm/SgrV4INImjo2BT1DtQRYr+XeTRbeAYlS+jxXp9drqvKmtFnWRJKIalDLhZZDu42A==, tarball: https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-4.1.9.tgz} + engines: {node: '>=20.19.0'} peerDependencies: - '@babel/core': ^7.0.0-0 + '@csstools/css-parser-algorithms': ^4.0.0 + '@csstools/css-tokenizer': ^4.0.0 - '@babel/plugin-transform-object-rest-spread@7.29.7': - resolution: {integrity: sha512-Ld98jn4c0smUywL57m7SgsHq3OpThOa6LqZJif3G6jYOovPleoFhVrBJ1WegRApSFB2wu4+RelAj9AC9G08Z4A==, tarball: https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.29.7.tgz} - engines: {node: '>=6.9.0'} + '@csstools/css-parser-algorithms@3.0.5': + resolution: {integrity: sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==, tarball: https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.5.tgz} + engines: {node: '>=18'} peerDependencies: - '@babel/core': ^7.0.0-0 + '@csstools/css-tokenizer': ^3.0.4 - '@babel/plugin-transform-object-super@7.29.7': - resolution: {integrity: sha512-Ea/diGcw0twB5IlZPO5sgET6fJsLJqPABqTuFWIR+iMPGPZJkATEIWx0wa+aEQ5UY1CBQyP/gkAiLEqn1vBiQA==, tarball: https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.29.7.tgz} - engines: {node: '>=6.9.0'} + '@csstools/css-parser-algorithms@4.0.0': + resolution: {integrity: sha512-+B87qS7fIG3L5h3qwJ/IFbjoVoOe/bpOdh9hAjXbvx0o8ImEmUsGXN0inFOnk2ChCFgqkkGFQ+TpM5rbhkKe4w==, tarball: https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-4.0.0.tgz} + engines: {node: '>=20.19.0'} peerDependencies: - '@babel/core': ^7.0.0-0 + '@csstools/css-tokenizer': ^4.0.0 - '@babel/plugin-transform-optional-catch-binding@7.29.7': - resolution: {integrity: sha512-sLsyndxK2VwX6yNUOakMb7Sh553ZTe/vVM1XJ+9Z5aW1ytsc8xOIwmyk05NNjN60vkc5/KqoTH6hB4V41LJhng==, tarball: https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.29.7.tgz} - engines: {node: '>=6.9.0'} + '@csstools/css-syntax-patches-for-csstree@1.1.6': + resolution: {integrity: sha512-TcJCWFbXLPpJYq6z7bfOyjWYJDiDg2/I4gyUC9pqPNqHFRIey0EB0q0L5cSnQDfWJg8Jd6VadakxdIez/3zkqQ==, tarball: https://registry.npmjs.org/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.1.6.tgz} peerDependencies: - '@babel/core': ^7.0.0-0 + css-tree: ^3.2.1 + peerDependenciesMeta: + css-tree: + optional: true - '@babel/plugin-transform-optional-chaining@7.29.7': - resolution: {integrity: sha512-6GM1dhvK3gNODkXcEcMCOLEDCLSoZ/sBbro2Ax8HURyasQ4NshagQixkRFdh5niI6E4gmA/jYI/4aT7rRos3ZQ==, tarball: https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.29.7.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@csstools/css-tokenizer@3.0.4': + resolution: {integrity: sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==, tarball: https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.4.tgz} + engines: {node: '>=18'} - '@babel/plugin-transform-parameters@7.29.7': - resolution: {integrity: sha512-ZDOBqV/qLYJI0YElr8DcENEyARsFQeESqWXH6gZlghYXuPPjvweuDhP4VyEi4BlUBlLRFZVjxoZDMjxhLW766g==, tarball: https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.29.7.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@csstools/css-tokenizer@4.0.0': + resolution: {integrity: sha512-QxULHAm7cNu72w97JUNCBFODFaXpbDg+dP8b/oWFAZ2MTRppA3U00Y2L1HqaS4J6yBqxwa/Y3nMBaxVKbB/NsA==, tarball: https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-4.0.0.tgz} + engines: {node: '>=20.19.0'} - '@babel/plugin-transform-private-methods@7.29.7': - resolution: {integrity: sha512-/6Rz4DK1ETDEM/bWHsPHcaEe7ZaT1EqSXjtSP/L0DijOYuaUhiRiOKcwpZ8P7zR4xXEHc2ITdiCgBm9Tpyv9ug==, tarball: https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.29.7.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@emnapi/core@1.10.0': + resolution: {integrity: sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==, tarball: https://registry.npmjs.org/@emnapi/core/-/core-1.10.0.tgz} - '@babel/plugin-transform-private-property-in-object@7.29.7': - resolution: {integrity: sha512-+BNo06dnrzdNNqCm1X6YUaVv0DKk8Q+JYcoZfOkLhYWNCXzlwTSRq8zGWayT1csjcpNXV9CQTBRRbmTLZac5cA==, tarball: https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.29.7.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@emnapi/core@1.4.5': + resolution: {integrity: sha512-XsLw1dEOpkSX/WucdqUhPWP7hDxSvZiY+fsUC14h+FtQ2Ifni4znbBt8punRX+Uj2JG/uDb8nEHVKvrVlvdZ5Q==, tarball: https://registry.npmjs.org/@emnapi/core/-/core-1.4.5.tgz} - '@babel/plugin-transform-property-literals@7.29.7': - resolution: {integrity: sha512-bOMRLQuI0A5ZqHq3OWJ89/rXpJ/NJrbVhXiP4zwPGMs6kpcVsuTUNjwoE30K0Qm3mf48a/TnRYYD6vPNqcg6jA==, tarball: https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.29.7.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@emnapi/runtime@1.10.0': + resolution: {integrity: sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==, tarball: https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.10.0.tgz} - '@babel/plugin-transform-react-jsx-self@7.27.1': - resolution: {integrity: sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==, tarball: https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@emnapi/runtime@1.4.5': + resolution: {integrity: sha512-++LApOtY0pEEz1zrd9vy1/zXVaVJJ/EbAF3u0fXIzPJEDtnITsBGbbK0EkM72amhl/R5b+5xx0Y/QhcVOpuulg==, tarball: https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.5.tgz} - '@babel/plugin-transform-react-jsx-source@7.27.1': - resolution: {integrity: sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==, tarball: https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@emnapi/wasi-threads@1.0.4': + resolution: {integrity: sha512-PJR+bOmMOPH8AtcTGAyYNiuJ3/Fcoj2XN/gBEWzDIKh254XO+mM9XoXHk5GNEhodxeMznbg7BlRojVbKN+gC6g==, tarball: https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.0.4.tgz} - '@babel/plugin-transform-regenerator@7.29.7': - resolution: {integrity: sha512-rNNFV0DBAJp988xW2DOntfDoYn1eR8GGF5AT5vYc+rjyfaQkM242c9tZUHHPe7KYaiJizXPWhQTzzdbXySyhBw==, tarball: https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.29.7.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@emnapi/wasi-threads@1.2.1': + resolution: {integrity: sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==, tarball: https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz} - '@babel/plugin-transform-regexp-modifiers@7.29.7': - resolution: {integrity: sha512-mB5Fs0VWrJ42ZCmc8114v60qetdaUVNkj9PmSZRmanCZM3S9hm0CFRLjRmYIsuXav14l2jvZ+4T8iiCGnhj3nQ==, tarball: https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.29.7.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 + '@envelop/core@5.5.1': + resolution: {integrity: sha512-3DQg8sFskDo386TkL5j12jyRAdip/8yzK3x7YGbZBgobZ4aKXrvDU0GppU0SnmrpQnNaiTUsxBs9LKkwQ/eyvw==, tarball: https://registry.npmjs.org/@envelop/core/-/core-5.5.1.tgz} + engines: {node: '>=18.0.0'} - '@babel/plugin-transform-reserved-words@7.29.7': - resolution: {integrity: sha512-5+YhdpVgmfSmwZyLMftfaiffLRMHjzIRHFHHLdibcSyJm2pasMrKHrO3Ptrt2DRshjvpgjEJJ1zVW14WPq/6QA==, tarball: https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.29.7.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@envelop/instrumentation@1.0.0': + resolution: {integrity: sha512-cxgkB66RQB95H3X27jlnxCRNTmPuSTgmBAq6/4n2Dtv4hsk4yz8FadA1ggmd0uZzvKqWD6CR+WFgTjhDqg7eyw==, tarball: https://registry.npmjs.org/@envelop/instrumentation/-/instrumentation-1.0.0.tgz} + engines: {node: '>=18.0.0'} - '@babel/plugin-transform-runtime@7.29.7': - resolution: {integrity: sha512-xmAscdE/AsqRW7vutbPNoUmu/nF5SrLKPs7aoJgEjo35lLKA/Bc0i2rMv/hr1+Y0o1bQCiVtith3u2vdgRL39Q==, tarball: https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.29.7.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@envelop/types@5.2.1': + resolution: {integrity: sha512-CsFmA3u3c2QoLDTfEpGr4t25fjMU31nyvse7IzWTvb0ZycuPjMjb0fjlheh+PbhBYb9YLugnT2uY6Mwcg1o+Zg==, tarball: https://registry.npmjs.org/@envelop/types/-/types-5.2.1.tgz} + engines: {node: '>=18.0.0'} - '@babel/plugin-transform-shorthand-properties@7.29.7': - resolution: {integrity: sha512-I+WYbGBAiCn7nA6xBrlgPH+MB7HWb4u8pv5S0Pv7OtwNvIFvCCb24YlttKEeUFVurfBCEaOTnuhlqsb7f0Z5Dg==, tarball: https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.29.7.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@esbuild/aix-ppc64@0.25.12': + resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==, tarball: https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] - '@babel/plugin-transform-spread@7.29.7': - resolution: {integrity: sha512-/u5K1QWada7tbYNqTjMh96718g9NTwh9tfPJMsSmVsQwGT447FskV+KcfeXkXq2GWki4EM/MuTdmBec+hOuVTQ==, tarball: https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.29.7.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@esbuild/aix-ppc64@0.27.7': + resolution: {integrity: sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==, tarball: https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.7.tgz} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] - '@babel/plugin-transform-sticky-regex@7.29.7': - resolution: {integrity: sha512-BCHzNYJGe9l7EpwwDBN/ztlL2NYFFq8hp9ddjtUEM9f2O7S7kKV/lL6Fwo7IF7NSkYhPK2vO+86nIGltA90MsA==, tarball: https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.29.7.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@esbuild/aix-ppc64@0.28.1': + resolution: {integrity: sha512-Svl7tq8k/08+p6CXPpRjQ1fKX+1odH/BQbb48fV6fj3CWHhsoIOoY87w1oHXm0qEpkIK3ZfVgp0hed3XBXzXMQ==, tarball: https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.1.tgz} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] - '@babel/plugin-transform-template-literals@7.29.7': - resolution: {integrity: sha512-NCSEJ4sLFU2gqAub45HYh4fus2yQ36rr6ei6vpU7NdoJqCpxvEG8E6eJpscGyXP3VHD2Ny+fSXr04k1hoUrFqA==, tarball: https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.29.7.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@esbuild/android-arm64@0.25.12': + resolution: {integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==, tarball: https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] - '@babel/plugin-transform-typeof-symbol@7.29.7': - resolution: {integrity: sha512-223mNGoTkBiTEWFoK+Q6Go3tueMRclO8vxxxxquNCYuNI4jWOofFKJRRDu6SDrB8Sgo1UEGW9T4GAQ8ZyRso1A==, tarball: https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.29.7.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@esbuild/android-arm64@0.27.7': + resolution: {integrity: sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==, tarball: https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.7.tgz} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] - '@babel/plugin-transform-typescript@7.29.7': - resolution: {integrity: sha512-jK52h8LaLc7JarhQV2ofeFMts4H7vnOXnqZNA6fYglBTZewRBE51KWt3BUltW1P+KoPsYkHoJeXePuz4zo2LMw==, tarball: https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.29.7.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@esbuild/android-arm64@0.28.1': + resolution: {integrity: sha512-34EGEbCIAgosYz6goLcopX6Mo7NyGv9tfwEM2/7Ce2VcVRk568iSvniGWcUXIy7wEDR1wzolcxcriFVrWYcwBg==, tarball: https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.1.tgz} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] - '@babel/plugin-transform-unicode-escapes@7.29.7': - resolution: {integrity: sha512-jCfXxSjf94lf4E0hKE0AByxF6F3/pVFqRdUUNkDJhsY0m1ZKjnN6ZYyMeHNpzflxb/0q5b7t3p+BE+SLF1WOtA==, tarball: https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.29.7.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@esbuild/android-arm@0.25.12': + resolution: {integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==, tarball: https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz} + engines: {node: '>=18'} + cpu: [arm] + os: [android] - '@babel/plugin-transform-unicode-property-regex@7.29.7': - resolution: {integrity: sha512-OgZ+zoAJgZLUCunsTRQ5LAjOywDv5zzZ2/hQ5aMw1pGXyY2rtE8/chXYUmu3AlVHKpm10KEdG9aMwbI/K76ZGw==, tarball: https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.29.7.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@esbuild/android-arm@0.27.7': + resolution: {integrity: sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==, tarball: https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.7.tgz} + engines: {node: '>=18'} + cpu: [arm] + os: [android] - '@babel/plugin-transform-unicode-regex@7.29.7': - resolution: {integrity: sha512-7D/x/23/d/3VqZ0QA+LGbZMlGwZjztBygSWWWsfTPoQ1oQ6Q1P6Mr3d0kk42XabyUVw+fha3LqdRsFqeKqvCyA==, tarball: https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.29.7.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@esbuild/android-arm@0.28.1': + resolution: {integrity: sha512-0k2F129Xdio1TdJfzJ8sy1Q47vUD2NnwdhiAf7drUN1EBTfPf4hsFCtmMgu/6m8JSzsBrlmVjudMBQqOfG8usQ==, tarball: https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.1.tgz} + engines: {node: '>=18'} + cpu: [arm] + os: [android] - '@babel/plugin-transform-unicode-sets-regex@7.29.7': - resolution: {integrity: sha512-BLOhLht9DOJwIxlmp91wHvkXv1lguuHS3/FwUO8HL1H0u8s4hR1gASVFyilu9iGtcTRYqjTZmlsFFeQletntEg==, tarball: https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.29.7.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 + '@esbuild/android-x64@0.25.12': + resolution: {integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==, tarball: https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz} + engines: {node: '>=18'} + cpu: [x64] + os: [android] - '@babel/preset-env@7.29.7': - resolution: {integrity: sha512-GYzX36n1nsciIb0uyH0GHwxwtNwPQIcpxSeiVLDtG/B7jB5xXgchnmL1f/jCX5o+pwnaDBtO60ONSJhEBJfxYA==, tarball: https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.29.7.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@esbuild/android-x64@0.27.7': + resolution: {integrity: sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==, tarball: https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.7.tgz} + engines: {node: '>=18'} + cpu: [x64] + os: [android] - '@babel/preset-modules@0.1.6-no-external-plugins': - resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==, tarball: https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz} - peerDependencies: - '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 + '@esbuild/android-x64@0.28.1': + resolution: {integrity: sha512-dbwY7ltSMDWsRatcRpCnES4F+im88OCUgGZjy52shC7GqHRE/cYlxNbB4Z4UpJswpcc4Qxd2oE/ufM0p61IKng==, tarball: https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.1.tgz} + engines: {node: '>=18'} + cpu: [x64] + os: [android] - '@babel/preset-typescript@7.29.7': - resolution: {integrity: sha512-/Foi8vKY2EVbed/1eZx0gJEEwHAIxogrySI7rULcRIvhZzbvoE/b5qG5Ghc0WKAFKOHA9SD1x7RsFlOYdutIiQ==, tarball: https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.29.7.tgz} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@esbuild/darwin-arm64@0.25.12': + resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==, tarball: https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] - '@babel/runtime@7.28.6': - resolution: {integrity: sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==, tarball: https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.6.tgz} - engines: {node: '>=6.9.0'} + '@esbuild/darwin-arm64@0.27.7': + resolution: {integrity: sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==, tarball: https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.7.tgz} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] - '@babel/runtime@7.29.7': - resolution: {integrity: sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==, tarball: https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.7.tgz} - engines: {node: '>=6.9.0'} + '@esbuild/darwin-arm64@0.28.1': + resolution: {integrity: sha512-TZbWkQY7kvTAXbXUT7uVACR5cMHsDiSz9z7ZKAX/RTq/WJEk3QyRr0wZpNhBDX+/0CtdqUIJlOiodQcta6tY3Q==, tarball: https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.1.tgz} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] - '@babel/template@7.28.6': - resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==, tarball: https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz} - engines: {node: '>=6.9.0'} + '@esbuild/darwin-x64@0.25.12': + resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==, tarball: https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] - '@babel/template@7.29.7': - resolution: {integrity: sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==, tarball: https://registry.npmjs.org/@babel/template/-/template-7.29.7.tgz} - engines: {node: '>=6.9.0'} + '@esbuild/darwin-x64@0.27.7': + resolution: {integrity: sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==, tarball: https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.7.tgz} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] - '@babel/traverse@7.29.0': - resolution: {integrity: sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==, tarball: https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz} - engines: {node: '>=6.9.0'} + '@esbuild/darwin-x64@0.28.1': + resolution: {integrity: sha512-zfdzgK9ACBNZLI/CyHTOx81SyNbM6YXn7rxSgX97VjyiPl9W1i4Ka4fgKECEoFCKGpvBj5qArWIGgQjOwkgskQ==, tarball: https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.1.tgz} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] - '@babel/traverse@7.29.7': - resolution: {integrity: sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw==, tarball: https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.7.tgz} - engines: {node: '>=6.9.0'} + '@esbuild/freebsd-arm64@0.25.12': + resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==, tarball: https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] - '@babel/types@7.29.0': - resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==, tarball: https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz} - engines: {node: '>=6.9.0'} + '@esbuild/freebsd-arm64@0.27.7': + resolution: {integrity: sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==, tarball: https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.7.tgz} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] - '@babel/types@7.29.7': - resolution: {integrity: sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==, tarball: https://registry.npmjs.org/@babel/types/-/types-7.29.7.tgz} - engines: {node: '>=6.9.0'} - - '@bramus/specificity@2.4.2': - resolution: {integrity: sha512-ctxtJ/eA+t+6q2++vj5j7FYX3nRu311q1wfYH3xjlLOsczhlhxAg2FWNUXhpGvAw3BWo1xBcvOV6/YLc2r5FJw==, tarball: https://registry.npmjs.org/@bramus/specificity/-/specificity-2.4.2.tgz} - hasBin: true - - '@bugsnag/browser@8.9.0': - resolution: {integrity: sha512-lsreEdlIQxEzJxFzp1T2yKH4Jzzm5YiXez0UK734XXfBRx8ZR2SDcNljo2EqctrRIqVrCM6wp6RvEo9hzlpeBg==, tarball: https://registry.npmjs.org/@bugsnag/browser/-/browser-8.9.0.tgz} + '@esbuild/freebsd-arm64@0.28.1': + resolution: {integrity: sha512-wG2EA8ENdEI0qhkSZMjfqrdY+ziCYCPMmtZjjIwOmXFjmyzEHn+UUxk5of+SYsjtfs3VpnlC7QLzSI5hY/rOAw==, tarball: https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.1.tgz} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] - '@bugsnag/core@8.9.0': - resolution: {integrity: sha512-SrXO0isIZfrCem06/WDvC5MSd1Tj6Yjm4Wqdlv6jyjTvsow+cppvt7rS9Bps3qOeXfYCqWHN4ev02OdwnfZ1PQ==, tarball: https://registry.npmjs.org/@bugsnag/core/-/core-8.9.0.tgz} + '@esbuild/freebsd-x64@0.25.12': + resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==, tarball: https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] - '@bugsnag/cuid@3.2.1': - resolution: {integrity: sha512-zpvN8xQ5rdRWakMd/BcVkdn2F8HKlDSbM3l7duueK590WmI1T0ObTLc1V/1e55r14WNjPd5AJTYX4yPEAFVi+Q==, tarball: https://registry.npmjs.org/@bugsnag/cuid/-/cuid-3.2.1.tgz} + '@esbuild/freebsd-x64@0.27.7': + resolution: {integrity: sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==, tarball: https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.7.tgz} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] - '@bugsnag/js@8.9.0': - resolution: {integrity: sha512-ChjKFVBF2CgepDXfMBkbEdcFUniJNN8py5V+tinaB8+vpJbr/fD1+VLFhkruSEn3jOafXrc1XJe9WHtsu9ht0g==, tarball: https://registry.npmjs.org/@bugsnag/js/-/js-8.9.0.tgz} + '@esbuild/freebsd-x64@0.28.1': + resolution: {integrity: sha512-i7dZ9vQgnvSCzi/rYCXNgtF/U+eKZNJBzu3eTQbRgHnM7tNSizLOkRFAl3qzVc/Op/u5YkHHa4pf/3DOYHthLQ==, tarball: https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.1.tgz} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] - '@bugsnag/node@8.9.0': - resolution: {integrity: sha512-WpogbMCY8/Rmg+1nsetp3GcPnXj5rpK1YxSmgEfiBM8B2nr/riYqrzuXIkrb1FZN1ti+Hfn1IecRAyGx3rUBBA==, tarball: https://registry.npmjs.org/@bugsnag/node/-/node-8.9.0.tgz} + '@esbuild/linux-arm64@0.25.12': + resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==, tarball: https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] - '@bugsnag/safe-json-stringify@6.1.0': - resolution: {integrity: sha512-ImA35rnM7bGr+J30R979FQ95BhRB4UO1KfJA0J2sVqc8nwnrS9hhE5mkTmQWMs8Vh1Da+hkLKs5jJB4JjNZp4A==, tarball: https://registry.npmjs.org/@bugsnag/safe-json-stringify/-/safe-json-stringify-6.1.0.tgz} + '@esbuild/linux-arm64@0.27.7': + resolution: {integrity: sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==, tarball: https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.7.tgz} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] - '@bugsnag/source-maps@2.3.3': - resolution: {integrity: sha512-DCCXhiY1CdCy3Eo6SS/qHnBuyrXY0jyefsJBpXemwI5eXEAR0KrhnhxbGU7Ga/8ysssD1A22J5488BYH1t4pgQ==, tarball: https://registry.npmjs.org/@bugsnag/source-maps/-/source-maps-2.3.3.tgz} - hasBin: true + '@esbuild/linux-arm64@0.28.1': + resolution: {integrity: sha512-yHs+0uc8+nvEAfAfxrWQKK5peSNzBc4PegcMO0EJ2hT71uA7vB8Ihg2e77R2P7SG5uYjPbHlLLmve4LLLRCf0g==, tarball: https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.1.tgz} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] - '@changesets/apply-release-plan@7.1.1': - resolution: {integrity: sha512-9qPCm/rLx/xoOFXIHGB229+4GOL76S4MC+7tyOuTsR6+1jYlfFDQORdvwR5hDA6y4FL2BPt3qpbcQIS+dW85LA==, tarball: https://registry.npmjs.org/@changesets/apply-release-plan/-/apply-release-plan-7.1.1.tgz} + '@esbuild/linux-arm@0.25.12': + resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==, tarball: https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] - '@changesets/assemble-release-plan@6.0.10': - resolution: {integrity: sha512-rSDcqdJ9KbVyjpBIuCidhvZNIiVt1XaIYp73ycVQRIA5n/j6wQaEk0ChRLMUQ1vkxZe51PTQ9OIhbg6HQMW45A==, tarball: https://registry.npmjs.org/@changesets/assemble-release-plan/-/assemble-release-plan-6.0.10.tgz} + '@esbuild/linux-arm@0.27.7': + resolution: {integrity: sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==, tarball: https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.7.tgz} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] - '@changesets/changelog-git@0.2.1': - resolution: {integrity: sha512-x/xEleCFLH28c3bQeQIyeZf8lFXyDFVn1SgcBiR2Tw/r4IAWlk1fzxCEZ6NxQAjF2Nwtczoen3OA2qR+UawQ8Q==, tarball: https://registry.npmjs.org/@changesets/changelog-git/-/changelog-git-0.2.1.tgz} + '@esbuild/linux-arm@0.28.1': + resolution: {integrity: sha512-qVXBOHQS+d5Y722GwJzJUtOLlX7km3CraOaGormF1pDtPd2C/l1SHRPgjLunLGe51Sh5YYWKMFDyV4SxgMQYTQ==, tarball: https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.1.tgz} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] - '@changesets/cli@2.31.0': - resolution: {integrity: sha512-AhI4enNTgHu2IZr6K4WZyf0EPch4XVMn1yOMFmCD9gsfBGqMYaHXls5HyDv6/CL5axVQABz68eG30eCtbr2wFg==, tarball: https://registry.npmjs.org/@changesets/cli/-/cli-2.31.0.tgz} - hasBin: true + '@esbuild/linux-ia32@0.25.12': + resolution: {integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==, tarball: https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] - '@changesets/config@3.1.4': - resolution: {integrity: sha512-pf0bvD/v6WI2cRlZ6hzpjtZdSlXDXMAJ+Iz7xfFzV4ZxJ8OGGAON+1qYc99ZPrijnt4xp3VGG7eNvAOGS24V1Q==, tarball: https://registry.npmjs.org/@changesets/config/-/config-3.1.4.tgz} + '@esbuild/linux-ia32@0.27.7': + resolution: {integrity: sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==, tarball: https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.7.tgz} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] - '@changesets/errors@0.2.0': - resolution: {integrity: sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow==, tarball: https://registry.npmjs.org/@changesets/errors/-/errors-0.2.0.tgz} + '@esbuild/linux-ia32@0.28.1': + resolution: {integrity: sha512-d1z4ZuP0ajrfz/FhGT4vv278rX8KnPPJx8i5+AtK7TYbx9Le9F1hyzurZpkEyjkGa9dUGhQow4C1NmeGvqxN2w==, tarball: https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.1.tgz} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] - '@changesets/get-dependents-graph@2.1.4': - resolution: {integrity: sha512-ZsS00x6WvmHq3sQv8oCMwL0f/z3wbXCVuSVTJwCnnmbC/iBdNJGFx1EcbMG4PC6sXRyH69liM4A2WKXzn/kRPg==, tarball: https://registry.npmjs.org/@changesets/get-dependents-graph/-/get-dependents-graph-2.1.4.tgz} + '@esbuild/linux-loong64@0.25.12': + resolution: {integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==, tarball: https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] - '@changesets/get-release-plan@4.0.16': - resolution: {integrity: sha512-2K5Om6CrMPm45rtvckfzWo7e9jOVCKLCnXia5eUPaURH7/LWzri7pK1TycdzAuAtehLkW7VPbWLCSExTHmiI6g==, tarball: https://registry.npmjs.org/@changesets/get-release-plan/-/get-release-plan-4.0.16.tgz} + '@esbuild/linux-loong64@0.27.7': + resolution: {integrity: sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==, tarball: https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.7.tgz} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] - '@changesets/get-version-range-type@0.4.0': - resolution: {integrity: sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ==, tarball: https://registry.npmjs.org/@changesets/get-version-range-type/-/get-version-range-type-0.4.0.tgz} + '@esbuild/linux-loong64@0.28.1': + resolution: {integrity: sha512-M5sRjUVZrkm1OAPR3dlOYzNmN+loZKGVi1VUQGrwuqLcbR6qeAz+famMhjASeH3YVKvZz+zT1jlh/keC3Rj/lg==, tarball: https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.1.tgz} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] - '@changesets/git@3.0.4': - resolution: {integrity: sha512-BXANzRFkX+XcC1q/d27NKvlJ1yf7PSAgi8JG6dt8EfbHFHi4neau7mufcSca5zRhwOL8j9s6EqsxmT+s+/E6Sw==, tarball: https://registry.npmjs.org/@changesets/git/-/git-3.0.4.tgz} + '@esbuild/linux-mips64el@0.25.12': + resolution: {integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==, tarball: https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] - '@changesets/logger@0.1.1': - resolution: {integrity: sha512-OQtR36ZlnuTxKqoW4Sv6x5YIhOmClRd5pWsjZsddYxpWs517R0HkyiefQPIytCVh4ZcC5x9XaG8KTdd5iRQUfg==, tarball: https://registry.npmjs.org/@changesets/logger/-/logger-0.1.1.tgz} + '@esbuild/linux-mips64el@0.27.7': + resolution: {integrity: sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==, tarball: https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.7.tgz} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] - '@changesets/parse@0.4.3': - resolution: {integrity: sha512-ZDmNc53+dXdWEv7fqIUSgRQOLYoUom5Z40gmLgmATmYR9NbL6FJJHwakcCpzaeCy+1D0m0n7mT4jj2B/MQPl7A==, tarball: https://registry.npmjs.org/@changesets/parse/-/parse-0.4.3.tgz} + '@esbuild/linux-mips64el@0.28.1': + resolution: {integrity: sha512-mRObBZeHh2OxcBFPWE/FjylkRgZdYuiTR3vaTozquCGOH14iP9oN4x4Ge81CoIDYQrXmIxpFumJBu5MtZpnQJQ==, tarball: https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.1.tgz} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] - '@changesets/pre@2.0.2': - resolution: {integrity: sha512-HaL/gEyFVvkf9KFg6484wR9s0qjAXlZ8qWPDkTyKF6+zqjBe/I2mygg3MbpZ++hdi0ToqNUF8cjj7fBy0dg8Ug==, tarball: https://registry.npmjs.org/@changesets/pre/-/pre-2.0.2.tgz} + '@esbuild/linux-ppc64@0.25.12': + resolution: {integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==, tarball: https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] - '@changesets/read@0.6.7': - resolution: {integrity: sha512-D1G4AUYGrBEk8vj8MGwf75k9GpN6XL3wg8i42P2jZZwFLXnlr2Pn7r9yuQNbaMCarP7ZQWNJbV6XLeysAIMhTA==, tarball: https://registry.npmjs.org/@changesets/read/-/read-0.6.7.tgz} + '@esbuild/linux-ppc64@0.27.7': + resolution: {integrity: sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==, tarball: https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.7.tgz} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] - '@changesets/should-skip-package@0.1.2': - resolution: {integrity: sha512-qAK/WrqWLNCP22UDdBTMPH5f41elVDlsNyat180A33dWxuUDyNpg6fPi/FyTZwRriVjg0L8gnjJn2F9XAoF0qw==, tarball: https://registry.npmjs.org/@changesets/should-skip-package/-/should-skip-package-0.1.2.tgz} + '@esbuild/linux-ppc64@0.28.1': + resolution: {integrity: sha512-slScBsMAb3GFDcdrCgLwZtPYRoH2H/youv10QiZyRjmsP48fznoveWytSgCI/R0ZcUgpc0ZhIUEx6LHts8yrfQ==, tarball: https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.1.tgz} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] - '@changesets/types@4.1.0': - resolution: {integrity: sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==, tarball: https://registry.npmjs.org/@changesets/types/-/types-4.1.0.tgz} + '@esbuild/linux-riscv64@0.25.12': + resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==, tarball: https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] - '@changesets/types@6.1.0': - resolution: {integrity: sha512-rKQcJ+o1nKNgeoYRHKOS07tAMNd3YSN0uHaJOZYjBAgxfV7TUE7JE+z4BzZdQwb5hKaYbayKN5KrYV7ODb2rAA==, tarball: https://registry.npmjs.org/@changesets/types/-/types-6.1.0.tgz} + '@esbuild/linux-riscv64@0.27.7': + resolution: {integrity: sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==, tarball: https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.7.tgz} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] - '@changesets/write@0.4.0': - resolution: {integrity: sha512-CdTLvIOPiCNuH71pyDu3rA+Q0n65cmAbXnwWH84rKGiFumFzkmHNT8KHTMEchcxN+Kl8I54xGUhJ7l3E7X396Q==, tarball: https://registry.npmjs.org/@changesets/write/-/write-0.4.0.tgz} + '@esbuild/linux-riscv64@0.28.1': + resolution: {integrity: sha512-kw0owk1o0GFETUJyW0jc0G4Yzs0BHZn0JDZ8JRT088vjJYX777BAs1fDGxAC+q831qOs2DTC96mNsG2opdfyyQ==, tarball: https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.1.tgz} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] - '@cspotcode/source-map-support@0.8.1': - resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==, tarball: https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz} - engines: {node: '>=12'} + '@esbuild/linux-s390x@0.25.12': + resolution: {integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==, tarball: https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] - '@csstools/color-helpers@5.1.0': - resolution: {integrity: sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA==, tarball: https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.1.0.tgz} + '@esbuild/linux-s390x@0.27.7': + resolution: {integrity: sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==, tarball: https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.7.tgz} engines: {node: '>=18'} + cpu: [s390x] + os: [linux] - '@csstools/color-helpers@6.1.0': - resolution: {integrity: sha512-064IFJdjTfUqnjpCVpMOdbr8FLQBhinbZj6yRv2An2E41O/pLEXqfFRWqGq/SxlE5PEUYTlvWsG2r8MswAVvkg==, tarball: https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-6.1.0.tgz} - engines: {node: '>=20.19.0'} + '@esbuild/linux-s390x@0.28.1': + resolution: {integrity: sha512-/lAIjX8aYFRByhh6L5rYtPEDRqa9de/4V/juOXcta5frjvzXO4/sqEtyytse0g3zZFuWu5cDN0MkLz2qRDD2Ag==, tarball: https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.1.tgz} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] - '@csstools/css-calc@2.1.4': - resolution: {integrity: sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==, tarball: https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.4.tgz} + '@esbuild/linux-x64@0.25.12': + resolution: {integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==, tarball: https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz} engines: {node: '>=18'} - peerDependencies: - '@csstools/css-parser-algorithms': ^3.0.5 - '@csstools/css-tokenizer': ^3.0.4 + cpu: [x64] + os: [linux] - '@csstools/css-calc@3.2.1': - resolution: {integrity: sha512-DtdHlgXh5ZkA43cwBcAm+huzgJiwx3ZTWVjBs94kwz2xKqSimDA3lBgCjphYgwgVUMWatSM0pDd8TILB1yrVVg==, tarball: https://registry.npmjs.org/@csstools/css-calc/-/css-calc-3.2.1.tgz} - engines: {node: '>=20.19.0'} - peerDependencies: - '@csstools/css-parser-algorithms': ^4.0.0 - '@csstools/css-tokenizer': ^4.0.0 + '@esbuild/linux-x64@0.27.7': + resolution: {integrity: sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==, tarball: https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.7.tgz} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] - '@csstools/css-color-parser@3.1.0': - resolution: {integrity: sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA==, tarball: https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.1.0.tgz} + '@esbuild/linux-x64@0.28.1': + resolution: {integrity: sha512-u/anNYF2mmVOEDwLtnQ1wOr3EZ9sTNGLWrsYGYwHWzGA3Si84IOkHXlbWTD1NB+9/1lcnweYKO54uhxZydNzfA==, tarball: https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.1.tgz} engines: {node: '>=18'} - peerDependencies: - '@csstools/css-parser-algorithms': ^3.0.5 - '@csstools/css-tokenizer': ^3.0.4 + cpu: [x64] + os: [linux] - '@csstools/css-color-parser@4.1.9': - resolution: {integrity: sha512-paQcIaOO53Rk5+YrBaBjm/SgrV4INImjo2BT1DtQRYr+XeTRbeAYlS+jxXp9drqvKmtFnWRJKIalDLhZZDu42A==, tarball: https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-4.1.9.tgz} - engines: {node: '>=20.19.0'} - peerDependencies: - '@csstools/css-parser-algorithms': ^4.0.0 - '@csstools/css-tokenizer': ^4.0.0 + '@esbuild/netbsd-arm64@0.25.12': + resolution: {integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==, tarball: https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] - '@csstools/css-parser-algorithms@3.0.5': - resolution: {integrity: sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==, tarball: https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.5.tgz} + '@esbuild/netbsd-arm64@0.27.7': + resolution: {integrity: sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==, tarball: https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.7.tgz} engines: {node: '>=18'} - peerDependencies: - '@csstools/css-tokenizer': ^3.0.4 + cpu: [arm64] + os: [netbsd] - '@csstools/css-parser-algorithms@4.0.0': - resolution: {integrity: sha512-+B87qS7fIG3L5h3qwJ/IFbjoVoOe/bpOdh9hAjXbvx0o8ImEmUsGXN0inFOnk2ChCFgqkkGFQ+TpM5rbhkKe4w==, tarball: https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-4.0.0.tgz} - engines: {node: '>=20.19.0'} - peerDependencies: - '@csstools/css-tokenizer': ^4.0.0 - - '@csstools/css-syntax-patches-for-csstree@1.1.6': - resolution: {integrity: sha512-TcJCWFbXLPpJYq6z7bfOyjWYJDiDg2/I4gyUC9pqPNqHFRIey0EB0q0L5cSnQDfWJg8Jd6VadakxdIez/3zkqQ==, tarball: https://registry.npmjs.org/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.1.6.tgz} - peerDependencies: - css-tree: ^3.2.1 - peerDependenciesMeta: - css-tree: - optional: true - - '@csstools/css-tokenizer@3.0.4': - resolution: {integrity: sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==, tarball: https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.4.tgz} - engines: {node: '>=18'} - - '@csstools/css-tokenizer@4.0.0': - resolution: {integrity: sha512-QxULHAm7cNu72w97JUNCBFODFaXpbDg+dP8b/oWFAZ2MTRppA3U00Y2L1HqaS4J6yBqxwa/Y3nMBaxVKbB/NsA==, tarball: https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-4.0.0.tgz} - engines: {node: '>=20.19.0'} - - '@emnapi/core@1.10.0': - resolution: {integrity: sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==, tarball: https://registry.npmjs.org/@emnapi/core/-/core-1.10.0.tgz} - - '@emnapi/core@1.11.2': - resolution: {integrity: sha512-TC8MkTuZUtcTSiFeuC0ksCh9QIJ5+F21MvZ4Wn4ORfYaFJ/0dsiudv5tVkejgwZlwQ39jL9WWDe2lz8x0WglOA==, tarball: https://registry.npmjs.org/@emnapi/core/-/core-1.11.2.tgz} - - '@emnapi/core@1.4.5': - resolution: {integrity: sha512-XsLw1dEOpkSX/WucdqUhPWP7hDxSvZiY+fsUC14h+FtQ2Ifni4znbBt8punRX+Uj2JG/uDb8nEHVKvrVlvdZ5Q==, tarball: https://registry.npmjs.org/@emnapi/core/-/core-1.4.5.tgz} - - '@emnapi/runtime@1.10.0': - resolution: {integrity: sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==, tarball: https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.10.0.tgz} - - '@emnapi/runtime@1.11.2': - resolution: {integrity: sha512-kyOl3X0DuTiT1h2ft8r2fYO8JYtU9a9Xis/zBSiGArNaagCOWx90N1k2wxp18czFDH+OgcWGb5ZP/XMt3dcyPA==, tarball: https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.2.tgz} - - '@emnapi/runtime@1.4.5': - resolution: {integrity: sha512-++LApOtY0pEEz1zrd9vy1/zXVaVJJ/EbAF3u0fXIzPJEDtnITsBGbbK0EkM72amhl/R5b+5xx0Y/QhcVOpuulg==, tarball: https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.5.tgz} - - '@emnapi/wasi-threads@1.0.4': - resolution: {integrity: sha512-PJR+bOmMOPH8AtcTGAyYNiuJ3/Fcoj2XN/gBEWzDIKh254XO+mM9XoXHk5GNEhodxeMznbg7BlRojVbKN+gC6g==, tarball: https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.0.4.tgz} - - '@emnapi/wasi-threads@1.2.1': - resolution: {integrity: sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==, tarball: https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz} - - '@emnapi/wasi-threads@1.2.2': - resolution: {integrity: sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==, tarball: https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.2.tgz} - - '@envelop/core@5.5.1': - resolution: {integrity: sha512-3DQg8sFskDo386TkL5j12jyRAdip/8yzK3x7YGbZBgobZ4aKXrvDU0GppU0SnmrpQnNaiTUsxBs9LKkwQ/eyvw==, tarball: https://registry.npmjs.org/@envelop/core/-/core-5.5.1.tgz} - engines: {node: '>=18.0.0'} - - '@envelop/instrumentation@1.0.0': - resolution: {integrity: sha512-cxgkB66RQB95H3X27jlnxCRNTmPuSTgmBAq6/4n2Dtv4hsk4yz8FadA1ggmd0uZzvKqWD6CR+WFgTjhDqg7eyw==, tarball: https://registry.npmjs.org/@envelop/instrumentation/-/instrumentation-1.0.0.tgz} - engines: {node: '>=18.0.0'} - - '@envelop/types@5.2.1': - resolution: {integrity: sha512-CsFmA3u3c2QoLDTfEpGr4t25fjMU31nyvse7IzWTvb0ZycuPjMjb0fjlheh+PbhBYb9YLugnT2uY6Mwcg1o+Zg==, tarball: https://registry.npmjs.org/@envelop/types/-/types-5.2.1.tgz} - engines: {node: '>=18.0.0'} - - '@es-joy/jsdoccomment@0.50.2': - resolution: {integrity: sha512-YAdE/IJSpwbOTiaURNCKECdAwqrJuFiZhylmesBcIRawtYKnBR2wxPhoIewMg+Yu+QuYvHfJNReWpoxGBKOChA==, tarball: https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.50.2.tgz} - engines: {node: '>=18'} - - '@esbuild/aix-ppc64@0.25.12': - resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==, tarball: https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz} - engines: {node: '>=18'} - cpu: [ppc64] - os: [aix] - - '@esbuild/aix-ppc64@0.27.7': - resolution: {integrity: sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==, tarball: https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.7.tgz} - engines: {node: '>=18'} - cpu: [ppc64] - os: [aix] - - '@esbuild/aix-ppc64@0.28.1': - resolution: {integrity: sha512-Svl7tq8k/08+p6CXPpRjQ1fKX+1odH/BQbb48fV6fj3CWHhsoIOoY87w1oHXm0qEpkIK3ZfVgp0hed3XBXzXMQ==, tarball: https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.1.tgz} - engines: {node: '>=18'} - cpu: [ppc64] - os: [aix] - - '@esbuild/android-arm64@0.25.12': - resolution: {integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==, tarball: https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz} - engines: {node: '>=18'} - cpu: [arm64] - os: [android] - - '@esbuild/android-arm64@0.27.7': - resolution: {integrity: sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==, tarball: https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.7.tgz} - engines: {node: '>=18'} - cpu: [arm64] - os: [android] - - '@esbuild/android-arm64@0.28.1': - resolution: {integrity: sha512-34EGEbCIAgosYz6goLcopX6Mo7NyGv9tfwEM2/7Ce2VcVRk568iSvniGWcUXIy7wEDR1wzolcxcriFVrWYcwBg==, tarball: https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.1.tgz} + '@esbuild/netbsd-arm64@0.28.1': + resolution: {integrity: sha512-oks0DYbLwWMmaakTsCb+zL4E+aHRVLom9IJZOAthMQEPiQmydXHkziYEsGYRx0uNV/IjEKGAV941JzH02pflqw==, tarball: https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.1.tgz} engines: {node: '>=18'} cpu: [arm64] - os: [android] - - '@esbuild/android-arm@0.25.12': - resolution: {integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==, tarball: https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz} - engines: {node: '>=18'} - cpu: [arm] - os: [android] - - '@esbuild/android-arm@0.27.7': - resolution: {integrity: sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==, tarball: https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.7.tgz} - engines: {node: '>=18'} - cpu: [arm] - os: [android] - - '@esbuild/android-arm@0.28.1': - resolution: {integrity: sha512-0k2F129Xdio1TdJfzJ8sy1Q47vUD2NnwdhiAf7drUN1EBTfPf4hsFCtmMgu/6m8JSzsBrlmVjudMBQqOfG8usQ==, tarball: https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.1.tgz} - engines: {node: '>=18'} - cpu: [arm] - os: [android] + os: [netbsd] - '@esbuild/android-x64@0.25.12': - resolution: {integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==, tarball: https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz} + '@esbuild/netbsd-x64@0.25.12': + resolution: {integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==, tarball: https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz} engines: {node: '>=18'} cpu: [x64] - os: [android] + os: [netbsd] - '@esbuild/android-x64@0.27.7': - resolution: {integrity: sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==, tarball: https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.7.tgz} + '@esbuild/netbsd-x64@0.27.7': + resolution: {integrity: sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==, tarball: https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.7.tgz} engines: {node: '>=18'} cpu: [x64] - os: [android] + os: [netbsd] - '@esbuild/android-x64@0.28.1': - resolution: {integrity: sha512-dbwY7ltSMDWsRatcRpCnES4F+im88OCUgGZjy52shC7GqHRE/cYlxNbB4Z4UpJswpcc4Qxd2oE/ufM0p61IKng==, tarball: https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.1.tgz} + '@esbuild/netbsd-x64@0.28.1': + resolution: {integrity: sha512-aeL6lAnN89Hz43Mlh1G8ARasbuoYvSITDEx0tHh5b7jJnHcssqgjy9Yx430GDpmCa6OyrKoS0aNRjKundRizGg==, tarball: https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.1.tgz} engines: {node: '>=18'} cpu: [x64] - os: [android] + os: [netbsd] - '@esbuild/darwin-arm64@0.25.12': - resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==, tarball: https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz} + '@esbuild/openbsd-arm64@0.25.12': + resolution: {integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==, tarball: https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz} engines: {node: '>=18'} cpu: [arm64] - os: [darwin] + os: [openbsd] - '@esbuild/darwin-arm64@0.27.7': - resolution: {integrity: sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==, tarball: https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.7.tgz} + '@esbuild/openbsd-arm64@0.27.7': + resolution: {integrity: sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==, tarball: https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.7.tgz} engines: {node: '>=18'} cpu: [arm64] - os: [darwin] + os: [openbsd] - '@esbuild/darwin-arm64@0.28.1': - resolution: {integrity: sha512-TZbWkQY7kvTAXbXUT7uVACR5cMHsDiSz9z7ZKAX/RTq/WJEk3QyRr0wZpNhBDX+/0CtdqUIJlOiodQcta6tY3Q==, tarball: https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.1.tgz} + '@esbuild/openbsd-arm64@0.28.1': + resolution: {integrity: sha512-MEFJe5C3R8pwXdZ5Y21oo6m7ePiS0d9pWucn99O/wvyJZChoIQKrQDxKrGeW8F5+T0okTHesAmDeiHDTIq0V/Q==, tarball: https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.1.tgz} engines: {node: '>=18'} cpu: [arm64] - os: [darwin] + os: [openbsd] - '@esbuild/darwin-x64@0.25.12': - resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==, tarball: https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz} + '@esbuild/openbsd-x64@0.25.12': + resolution: {integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==, tarball: https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz} engines: {node: '>=18'} cpu: [x64] - os: [darwin] + os: [openbsd] - '@esbuild/darwin-x64@0.27.7': - resolution: {integrity: sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==, tarball: https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.7.tgz} + '@esbuild/openbsd-x64@0.27.7': + resolution: {integrity: sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==, tarball: https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.7.tgz} engines: {node: '>=18'} cpu: [x64] - os: [darwin] + os: [openbsd] - '@esbuild/darwin-x64@0.28.1': - resolution: {integrity: sha512-zfdzgK9ACBNZLI/CyHTOx81SyNbM6YXn7rxSgX97VjyiPl9W1i4Ka4fgKECEoFCKGpvBj5qArWIGgQjOwkgskQ==, tarball: https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.1.tgz} + '@esbuild/openbsd-x64@0.28.1': + resolution: {integrity: sha512-i/ZLIOafE0Z8cI/XANJAixoJL/uRAoS2xOA3rb0xN+KK0K177cMAsQYkzHtBrtMXAKuAc7HGgcWiZ/sRC1Nxgw==, tarball: https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.1.tgz} engines: {node: '>=18'} cpu: [x64] - os: [darwin] + os: [openbsd] - '@esbuild/freebsd-arm64@0.25.12': - resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==, tarball: https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz} + '@esbuild/openharmony-arm64@0.25.12': + resolution: {integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==, tarball: https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz} engines: {node: '>=18'} cpu: [arm64] - os: [freebsd] + os: [openharmony] - '@esbuild/freebsd-arm64@0.27.7': - resolution: {integrity: sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==, tarball: https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.7.tgz} + '@esbuild/openharmony-arm64@0.27.7': + resolution: {integrity: sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==, tarball: https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.7.tgz} engines: {node: '>=18'} cpu: [arm64] - os: [freebsd] + os: [openharmony] - '@esbuild/freebsd-arm64@0.28.1': - resolution: {integrity: sha512-wG2EA8ENdEI0qhkSZMjfqrdY+ziCYCPMmtZjjIwOmXFjmyzEHn+UUxk5of+SYsjtfs3VpnlC7QLzSI5hY/rOAw==, tarball: https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.1.tgz} + '@esbuild/openharmony-arm64@0.28.1': + resolution: {integrity: sha512-ge+Z7EXFNt2BO1oAMsVpiQ8EwndV9i1xXerAeTIK7AtPs3bKFXQM7nlRxDSIUIMeueR1CNXxqztLzdNeReKBJg==, tarball: https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.1.tgz} engines: {node: '>=18'} cpu: [arm64] - os: [freebsd] + os: [openharmony] - '@esbuild/freebsd-x64@0.25.12': - resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==, tarball: https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz} + '@esbuild/sunos-x64@0.25.12': + resolution: {integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==, tarball: https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz} engines: {node: '>=18'} cpu: [x64] - os: [freebsd] + os: [sunos] - '@esbuild/freebsd-x64@0.27.7': - resolution: {integrity: sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==, tarball: https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.7.tgz} + '@esbuild/sunos-x64@0.27.7': + resolution: {integrity: sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==, tarball: https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.7.tgz} engines: {node: '>=18'} cpu: [x64] - os: [freebsd] + os: [sunos] - '@esbuild/freebsd-x64@0.28.1': - resolution: {integrity: sha512-i7dZ9vQgnvSCzi/rYCXNgtF/U+eKZNJBzu3eTQbRgHnM7tNSizLOkRFAl3qzVc/Op/u5YkHHa4pf/3DOYHthLQ==, tarball: https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.1.tgz} + '@esbuild/sunos-x64@0.28.1': + resolution: {integrity: sha512-BEjgtECkL3vY+SaSQ6nzVfiALUeFxpawyp8Jmf5PtYhf1Ug40N1h/hxlhts+f1FvSvarEigdxS3BlSMI2PJLcQ==, tarball: https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.1.tgz} engines: {node: '>=18'} cpu: [x64] - os: [freebsd] + os: [sunos] - '@esbuild/linux-arm64@0.25.12': - resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==, tarball: https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz} + '@esbuild/win32-arm64@0.25.12': + resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==, tarball: https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz} engines: {node: '>=18'} cpu: [arm64] - os: [linux] + os: [win32] - '@esbuild/linux-arm64@0.27.7': - resolution: {integrity: sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==, tarball: https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.7.tgz} + '@esbuild/win32-arm64@0.27.7': + resolution: {integrity: sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==, tarball: https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.7.tgz} engines: {node: '>=18'} cpu: [arm64] - os: [linux] + os: [win32] - '@esbuild/linux-arm64@0.28.1': - resolution: {integrity: sha512-yHs+0uc8+nvEAfAfxrWQKK5peSNzBc4PegcMO0EJ2hT71uA7vB8Ihg2e77R2P7SG5uYjPbHlLLmve4LLLRCf0g==, tarball: https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.1.tgz} + '@esbuild/win32-arm64@0.28.1': + resolution: {integrity: sha512-lCv9eK/H6ZJWbE7bh2nw54CZ9M2nupBxJcTsdk/QQnWkdSjKGuxmmH8/GWrlT1eMmZfn4dGcCjRte397WqfQXA==, tarball: https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.1.tgz} engines: {node: '>=18'} cpu: [arm64] - os: [linux] - - '@esbuild/linux-arm@0.25.12': - resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==, tarball: https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz} - engines: {node: '>=18'} - cpu: [arm] - os: [linux] - - '@esbuild/linux-arm@0.27.7': - resolution: {integrity: sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==, tarball: https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.7.tgz} - engines: {node: '>=18'} - cpu: [arm] - os: [linux] - - '@esbuild/linux-arm@0.28.1': - resolution: {integrity: sha512-qVXBOHQS+d5Y722GwJzJUtOLlX7km3CraOaGormF1pDtPd2C/l1SHRPgjLunLGe51Sh5YYWKMFDyV4SxgMQYTQ==, tarball: https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.1.tgz} - engines: {node: '>=18'} - cpu: [arm] - os: [linux] + os: [win32] - '@esbuild/linux-ia32@0.25.12': - resolution: {integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==, tarball: https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz} + '@esbuild/win32-ia32@0.25.12': + resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==, tarball: https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz} engines: {node: '>=18'} cpu: [ia32] - os: [linux] + os: [win32] - '@esbuild/linux-ia32@0.27.7': - resolution: {integrity: sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==, tarball: https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.7.tgz} + '@esbuild/win32-ia32@0.27.7': + resolution: {integrity: sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==, tarball: https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.7.tgz} engines: {node: '>=18'} cpu: [ia32] - os: [linux] + os: [win32] - '@esbuild/linux-ia32@0.28.1': - resolution: {integrity: sha512-d1z4ZuP0ajrfz/FhGT4vv278rX8KnPPJx8i5+AtK7TYbx9Le9F1hyzurZpkEyjkGa9dUGhQow4C1NmeGvqxN2w==, tarball: https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.1.tgz} + '@esbuild/win32-ia32@0.28.1': + resolution: {integrity: sha512-zvb/mB2bSCoJOpoCBgYKKpX6YM6mJBlBUVUtVj41DlZJVEB6/0CKlRYxP5wWl1C1ILiCoAU5wZZ4q1P3qeS6Eg==, tarball: https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.1.tgz} engines: {node: '>=18'} cpu: [ia32] - os: [linux] + os: [win32] - '@esbuild/linux-loong64@0.25.12': - resolution: {integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==, tarball: https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz} + '@esbuild/win32-x64@0.25.12': + resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==, tarball: https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz} engines: {node: '>=18'} - cpu: [loong64] - os: [linux] + cpu: [x64] + os: [win32] - '@esbuild/linux-loong64@0.27.7': - resolution: {integrity: sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==, tarball: https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.7.tgz} + '@esbuild/win32-x64@0.27.7': + resolution: {integrity: sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==, tarball: https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.7.tgz} engines: {node: '>=18'} - cpu: [loong64] - os: [linux] + cpu: [x64] + os: [win32] - '@esbuild/linux-loong64@0.28.1': - resolution: {integrity: sha512-M5sRjUVZrkm1OAPR3dlOYzNmN+loZKGVi1VUQGrwuqLcbR6qeAz+famMhjASeH3YVKvZz+zT1jlh/keC3Rj/lg==, tarball: https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.1.tgz} + '@esbuild/win32-x64@0.28.1': + resolution: {integrity: sha512-bm4Mowrv+GXMlpWX++EcXw/iLyd1o3+bJkC2DkWXYVvgZCqD/bSj9ctZeAMC3cIxgjRVR2Dufaiu4YPxr5gW1A==, tarball: https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.1.tgz} engines: {node: '>=18'} - cpu: [loong64] - os: [linux] + cpu: [x64] + os: [win32] - '@esbuild/linux-mips64el@0.25.12': - resolution: {integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==, tarball: https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz} - engines: {node: '>=18'} - cpu: [mips64el] - os: [linux] + '@exodus/bytes@1.15.1': + resolution: {integrity: sha512-S6mL0yNB/Abt9Ei4tq8gDhcczc4S3+vQ4ra7vxnAf+YHC02srtqxKKZghx2Dq6p0e66THKwR6r8N6P95wEty7Q==, tarball: https://registry.npmjs.org/@exodus/bytes/-/bytes-1.15.1.tgz} + engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} + peerDependencies: + '@noble/hashes': ^1.8.0 || ^2.0.0 + peerDependenciesMeta: + '@noble/hashes': + optional: true - '@esbuild/linux-mips64el@0.27.7': - resolution: {integrity: sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==, tarball: https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.7.tgz} - engines: {node: '>=18'} - cpu: [mips64el] - os: [linux] + '@fastify/busboy@2.1.1': + resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==, tarball: https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz} + engines: {node: '>=14'} - '@esbuild/linux-mips64el@0.28.1': - resolution: {integrity: sha512-mRObBZeHh2OxcBFPWE/FjylkRgZdYuiTR3vaTozquCGOH14iP9oN4x4Ge81CoIDYQrXmIxpFumJBu5MtZpnQJQ==, tarball: https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.1.tgz} - engines: {node: '>=18'} - cpu: [mips64el] - os: [linux] + '@fastify/busboy@3.2.0': + resolution: {integrity: sha512-m9FVDXU3GT2ITSe0UaMA5rU3QkfC/UXtCU8y0gSN/GugTqtVldOBWIB5V6V3sbmenVZUIpU6f+mPEO2+m5iTaA==, tarball: https://registry.npmjs.org/@fastify/busboy/-/busboy-3.2.0.tgz} - '@esbuild/linux-ppc64@0.25.12': - resolution: {integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==, tarball: https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz} - engines: {node: '>=18'} - cpu: [ppc64] - os: [linux] + '@gerrit0/mini-shiki@3.23.0': + resolution: {integrity: sha512-bEMORlG0cqdjVyCEuU0cDQbORWX+kYCeo0kV1lbxF5bt4r7SID2l9bqsxJEM0zndaxpOUT7riCyIVEuqq/Ynxg==, tarball: https://registry.npmjs.org/@gerrit0/mini-shiki/-/mini-shiki-3.23.0.tgz} - '@esbuild/linux-ppc64@0.27.7': - resolution: {integrity: sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==, tarball: https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.7.tgz} - engines: {node: '>=18'} - cpu: [ppc64] - os: [linux] + '@graphql-codegen/add@6.0.1': + resolution: {integrity: sha512-MSylSekjpVWbOBw2A/2ssk1fPY54sYb6Qk2C4AX5u7s2R+2pMQ9ws7DTXo8VU9qwTgWwVp6vGfdQ0AMpAn4Iug==, tarball: https://registry.npmjs.org/@graphql-codegen/add/-/add-6.0.1.tgz} + engines: {node: '>=16'} + peerDependencies: + graphql: 16.14.2 - '@esbuild/linux-ppc64@0.28.1': - resolution: {integrity: sha512-slScBsMAb3GFDcdrCgLwZtPYRoH2H/youv10QiZyRjmsP48fznoveWytSgCI/R0ZcUgpc0ZhIUEx6LHts8yrfQ==, tarball: https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.1.tgz} - engines: {node: '>=18'} - cpu: [ppc64] - os: [linux] + '@graphql-codegen/cli@6.3.1': + resolution: {integrity: sha512-I5KkyX1SgQZPojMeQTRydB6fml4cysZq/mIdhNW4rmqdoOcTgdMPq1Tl+wtRp1VpBAOrBazJUJh1nAqJMMSPIQ==, tarball: https://registry.npmjs.org/@graphql-codegen/cli/-/cli-6.3.1.tgz} + engines: {node: '>=16'} + hasBin: true + peerDependencies: + '@parcel/watcher': ^2.1.0 + graphql: 16.14.2 + peerDependenciesMeta: + '@parcel/watcher': + optional: true - '@esbuild/linux-riscv64@0.25.12': - resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==, tarball: https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz} - engines: {node: '>=18'} - cpu: [riscv64] - os: [linux] + '@graphql-codegen/client-preset@5.3.0': + resolution: {integrity: sha512-K9FON+j7qyxAUDuSGqI3ofb7lWTBs16oPTYpu14lhdL4DKZQSHLyc8EMYU9e3KcyQ/13gU/d6culOppzAuexLA==, tarball: https://registry.npmjs.org/@graphql-codegen/client-preset/-/client-preset-5.3.0.tgz} + engines: {node: '>=16'} + peerDependencies: + graphql: 16.14.2 + graphql-sock: ^1.0.0 + peerDependenciesMeta: + graphql-sock: + optional: true - '@esbuild/linux-riscv64@0.27.7': - resolution: {integrity: sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==, tarball: https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.7.tgz} - engines: {node: '>=18'} - cpu: [riscv64] - os: [linux] + '@graphql-codegen/core@5.0.2': + resolution: {integrity: sha512-7RX0wwjoWPlLG/tUmpaTK91ZZqHcACNWpRL0nGnnJaJrORie9pgmX8JPrcwBgYiHSC+3ERo9xY91RFPem/VrpQ==, tarball: https://registry.npmjs.org/@graphql-codegen/core/-/core-5.0.2.tgz} + engines: {node: '>=16'} + peerDependencies: + graphql: 16.14.2 - '@esbuild/linux-riscv64@0.28.1': - resolution: {integrity: sha512-kw0owk1o0GFETUJyW0jc0G4Yzs0BHZn0JDZ8JRT088vjJYX777BAs1fDGxAC+q831qOs2DTC96mNsG2opdfyyQ==, tarball: https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.1.tgz} - engines: {node: '>=18'} - cpu: [riscv64] - os: [linux] + '@graphql-codegen/gql-tag-operations@5.2.0': + resolution: {integrity: sha512-B9gtJ4ziqpIv+7mHqwjtpYLFOuv0GmmRGpNDoWKM2VIx4OQqgI84d6OHKYCVeO7yu3mUr0QPvUgkSyuLVrdukA==, tarball: https://registry.npmjs.org/@graphql-codegen/gql-tag-operations/-/gql-tag-operations-5.2.0.tgz} + engines: {node: '>=16'} + peerDependencies: + graphql: 16.14.2 - '@esbuild/linux-s390x@0.25.12': - resolution: {integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==, tarball: https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz} - engines: {node: '>=18'} - cpu: [s390x] - os: [linux] + '@graphql-codegen/near-operation-file-preset@4.0.0': + resolution: {integrity: sha512-InHE3tN0dZKCZivrQ950y6Tnxtt/DJbvqqm5iCOmExJeIzhLoMOB0Rq2ex4KsRdSY9YtpYbYNCmO2xSU3MbRcg==, tarball: https://registry.npmjs.org/@graphql-codegen/near-operation-file-preset/-/near-operation-file-preset-4.0.0.tgz} + engines: {node: '>= 16.0.0'} + peerDependencies: + graphql: 16.14.2 - '@esbuild/linux-s390x@0.27.7': - resolution: {integrity: sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==, tarball: https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.7.tgz} - engines: {node: '>=18'} - cpu: [s390x] - os: [linux] + '@graphql-codegen/plugin-helpers@5.1.1': + resolution: {integrity: sha512-28GHODK2HY1NhdyRcPP3sCz0Kqxyfiz7boIZ8qIxFYmpLYnlDgiYok5fhFLVSZihyOpCs4Fa37gVHf/Q4I2FEg==, tarball: https://registry.npmjs.org/@graphql-codegen/plugin-helpers/-/plugin-helpers-5.1.1.tgz} + engines: {node: '>=16'} + peerDependencies: + graphql: 16.14.2 - '@esbuild/linux-s390x@0.28.1': - resolution: {integrity: sha512-/lAIjX8aYFRByhh6L5rYtPEDRqa9de/4V/juOXcta5frjvzXO4/sqEtyytse0g3zZFuWu5cDN0MkLz2qRDD2Ag==, tarball: https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.1.tgz} - engines: {node: '>=18'} - cpu: [s390x] - os: [linux] + '@graphql-codegen/plugin-helpers@6.1.0': + resolution: {integrity: sha512-JJypehWTcty9kxKiqH7TQOetkGdOYjY78RHlI+23qB59cV2wxjFFVf8l7kmuXS4cpGVUNfIjFhVr7A1W7JMtdA==, tarball: https://registry.npmjs.org/@graphql-codegen/plugin-helpers/-/plugin-helpers-6.1.0.tgz} + engines: {node: '>=16'} + peerDependencies: + graphql: 16.14.2 - '@esbuild/linux-x64@0.25.12': - resolution: {integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==, tarball: https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz} - engines: {node: '>=18'} - cpu: [x64] - os: [linux] + '@graphql-codegen/plugin-helpers@6.3.0': + resolution: {integrity: sha512-Auc+/B7okDx9+pVgLVliZtZLYh6iltWXlnzzM+bRE+zh1T4r3hKbnr8xAmtT937ArfSgk5GHcQHr8LfPYnrRBg==, tarball: https://registry.npmjs.org/@graphql-codegen/plugin-helpers/-/plugin-helpers-6.3.0.tgz} + engines: {node: '>=16'} + peerDependencies: + graphql: 16.14.2 - '@esbuild/linux-x64@0.27.7': - resolution: {integrity: sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==, tarball: https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.7.tgz} - engines: {node: '>=18'} - cpu: [x64] - os: [linux] + '@graphql-codegen/schema-ast@4.1.0': + resolution: {integrity: sha512-kZVn0z+th9SvqxfKYgztA6PM7mhnSZaj4fiuBWvMTqA+QqQ9BBed6Pz41KuD/jr0gJtnlr2A4++/0VlpVbCTmQ==, tarball: https://registry.npmjs.org/@graphql-codegen/schema-ast/-/schema-ast-4.1.0.tgz} + peerDependencies: + graphql: 16.14.2 - '@esbuild/linux-x64@0.28.1': - resolution: {integrity: sha512-u/anNYF2mmVOEDwLtnQ1wOr3EZ9sTNGLWrsYGYwHWzGA3Si84IOkHXlbWTD1NB+9/1lcnweYKO54uhxZydNzfA==, tarball: https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.1.tgz} - engines: {node: '>=18'} - cpu: [x64] - os: [linux] + '@graphql-codegen/schema-ast@5.0.2': + resolution: {integrity: sha512-jl1F/9IjRkJisEb9B0ayG4QGqYlPldLRy8ojDdmL9NE1NsdB5ROfxQnSqyC3g+wuvBhWX7kZgMRQYn3RU1I5bA==, tarball: https://registry.npmjs.org/@graphql-codegen/schema-ast/-/schema-ast-5.0.2.tgz} + engines: {node: '>=16'} + peerDependencies: + graphql: 16.14.2 - '@esbuild/netbsd-arm64@0.25.12': - resolution: {integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==, tarball: https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz} - engines: {node: '>=18'} - cpu: [arm64] - os: [netbsd] + '@graphql-codegen/typed-document-node@6.1.8': + resolution: {integrity: sha512-+qDdiJSQ7Ol+vpLMAH8ZJok50CvlYxA6seQ7cwEa3emXt8MmH5hh3zdc9unQlPc7bynoJHRCgoKk7E0B7hry0w==, tarball: https://registry.npmjs.org/@graphql-codegen/typed-document-node/-/typed-document-node-6.1.8.tgz} + engines: {node: '>=16'} + peerDependencies: + graphql: 16.14.2 - '@esbuild/netbsd-arm64@0.27.7': - resolution: {integrity: sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==, tarball: https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.7.tgz} - engines: {node: '>=18'} - cpu: [arm64] - os: [netbsd] + '@graphql-codegen/typescript-operations@5.1.0': + resolution: {integrity: sha512-JlmjbFl0EnsfMDIYvTE1Q0kAOrntVEZ+ZfBqWTP91g4e0F/TzuwJ/V4tiFmeDf5dx/rf9AK4VkPehIdxu7TYhw==, tarball: https://registry.npmjs.org/@graphql-codegen/typescript-operations/-/typescript-operations-5.1.0.tgz} + engines: {node: '>=16'} + peerDependencies: + graphql: 16.14.2 + graphql-sock: ^1.0.0 + peerDependenciesMeta: + graphql-sock: + optional: true - '@esbuild/netbsd-arm64@0.28.1': - resolution: {integrity: sha512-oks0DYbLwWMmaakTsCb+zL4E+aHRVLom9IJZOAthMQEPiQmydXHkziYEsGYRx0uNV/IjEKGAV941JzH02pflqw==, tarball: https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.1.tgz} - engines: {node: '>=18'} - cpu: [arm64] - os: [netbsd] + '@graphql-codegen/typescript@4.1.6': + resolution: {integrity: sha512-vpw3sfwf9A7S+kIUjyFxuvrywGxd4lmwmyYnnDVjVE4kSQ6Td3DpqaPTy8aNQ6O96vFoi/bxbZS2BW49PwSUUA==, tarball: https://registry.npmjs.org/@graphql-codegen/typescript/-/typescript-4.1.6.tgz} + engines: {node: '>=16'} + peerDependencies: + graphql: 16.14.2 - '@esbuild/netbsd-x64@0.25.12': - resolution: {integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==, tarball: https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz} - engines: {node: '>=18'} - cpu: [x64] - os: [netbsd] + '@graphql-codegen/typescript@5.0.10': + resolution: {integrity: sha512-Pa8OFmL9TdhEYnLYJLYA9EhP8eEeivP/YDYq4Nb8LQaL7GXm4TGX8zELYaCM9Fu8M3iZb7iQGMt7qc+1lXz8XQ==, tarball: https://registry.npmjs.org/@graphql-codegen/typescript/-/typescript-5.0.10.tgz} + engines: {node: '>=16'} + peerDependencies: + graphql: 16.14.2 - '@esbuild/netbsd-x64@0.27.7': - resolution: {integrity: sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==, tarball: https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.7.tgz} - engines: {node: '>=18'} - cpu: [x64] - os: [netbsd] + '@graphql-codegen/visitor-plugin-common@5.8.0': + resolution: {integrity: sha512-lC1E1Kmuzi3WZUlYlqB4fP6+CvbKH9J+haU1iWmgsBx5/sO2ROeXJG4Dmt8gP03bI2BwjiwV5WxCEMlyeuzLnA==, tarball: https://registry.npmjs.org/@graphql-codegen/visitor-plugin-common/-/visitor-plugin-common-5.8.0.tgz} + engines: {node: '>=16'} + peerDependencies: + graphql: 16.14.2 - '@esbuild/netbsd-x64@0.28.1': - resolution: {integrity: sha512-aeL6lAnN89Hz43Mlh1G8ARasbuoYvSITDEx0tHh5b7jJnHcssqgjy9Yx430GDpmCa6OyrKoS0aNRjKundRizGg==, tarball: https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.1.tgz} - engines: {node: '>=18'} - cpu: [x64] - os: [netbsd] + '@graphql-codegen/visitor-plugin-common@6.2.3': + resolution: {integrity: sha512-Rewl/QRFfIOXHFK3i/ts4VodsaB4N22kckH1zweTzq7SFodkfrqGrLa/MrGLJ/q6aUuqGiqao7f4Za2IjjkCxw==, tarball: https://registry.npmjs.org/@graphql-codegen/visitor-plugin-common/-/visitor-plugin-common-6.2.3.tgz} + engines: {node: '>=16'} + peerDependencies: + graphql: 16.14.2 - '@esbuild/openbsd-arm64@0.25.12': - resolution: {integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==, tarball: https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz} - engines: {node: '>=18'} - cpu: [arm64] - os: [openbsd] + '@graphql-codegen/visitor-plugin-common@6.3.0': + resolution: {integrity: sha512-vGBoE+4huzZyNhyGSAhXAkdROHlwKxxuziZm4XtP1mxe7nuI+VgyOmXebafLijbmuDsptPXQN0C/htL54O8hrg==, tarball: https://registry.npmjs.org/@graphql-codegen/visitor-plugin-common/-/visitor-plugin-common-6.3.0.tgz} + engines: {node: '>=16'} + peerDependencies: + graphql: 16.14.2 - '@esbuild/openbsd-arm64@0.27.7': - resolution: {integrity: sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==, tarball: https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.7.tgz} - engines: {node: '>=18'} - cpu: [arm64] - os: [openbsd] + '@graphql-hive/signal@2.0.0': + resolution: {integrity: sha512-Pz8wB3K0iU6ae9S1fWfsmJX24CcGeTo6hE7T44ucmV/ALKRj+bxClmqrYcDT7v3f0d12Rh4FAXBb6gon+WkDpQ==, tarball: https://registry.npmjs.org/@graphql-hive/signal/-/signal-2.0.0.tgz} + engines: {node: '>=20.0.0'} - '@esbuild/openbsd-arm64@0.28.1': - resolution: {integrity: sha512-MEFJe5C3R8pwXdZ5Y21oo6m7ePiS0d9pWucn99O/wvyJZChoIQKrQDxKrGeW8F5+T0okTHesAmDeiHDTIq0V/Q==, tarball: https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.1.tgz} - engines: {node: '>=18'} - cpu: [arm64] - os: [openbsd] - - '@esbuild/openbsd-x64@0.25.12': - resolution: {integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==, tarball: https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz} - engines: {node: '>=18'} - cpu: [x64] - os: [openbsd] - - '@esbuild/openbsd-x64@0.27.7': - resolution: {integrity: sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==, tarball: https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.7.tgz} - engines: {node: '>=18'} - cpu: [x64] - os: [openbsd] - - '@esbuild/openbsd-x64@0.28.1': - resolution: {integrity: sha512-i/ZLIOafE0Z8cI/XANJAixoJL/uRAoS2xOA3rb0xN+KK0K177cMAsQYkzHtBrtMXAKuAc7HGgcWiZ/sRC1Nxgw==, tarball: https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.1.tgz} - engines: {node: '>=18'} - cpu: [x64] - os: [openbsd] - - '@esbuild/openharmony-arm64@0.25.12': - resolution: {integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==, tarball: https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz} - engines: {node: '>=18'} - cpu: [arm64] - os: [openharmony] - - '@esbuild/openharmony-arm64@0.27.7': - resolution: {integrity: sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==, tarball: https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.7.tgz} - engines: {node: '>=18'} - cpu: [arm64] - os: [openharmony] - - '@esbuild/openharmony-arm64@0.28.1': - resolution: {integrity: sha512-ge+Z7EXFNt2BO1oAMsVpiQ8EwndV9i1xXerAeTIK7AtPs3bKFXQM7nlRxDSIUIMeueR1CNXxqztLzdNeReKBJg==, tarball: https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.1.tgz} - engines: {node: '>=18'} - cpu: [arm64] - os: [openharmony] - - '@esbuild/sunos-x64@0.25.12': - resolution: {integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==, tarball: https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz} - engines: {node: '>=18'} - cpu: [x64] - os: [sunos] - - '@esbuild/sunos-x64@0.27.7': - resolution: {integrity: sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==, tarball: https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.7.tgz} - engines: {node: '>=18'} - cpu: [x64] - os: [sunos] - - '@esbuild/sunos-x64@0.28.1': - resolution: {integrity: sha512-BEjgtECkL3vY+SaSQ6nzVfiALUeFxpawyp8Jmf5PtYhf1Ug40N1h/hxlhts+f1FvSvarEigdxS3BlSMI2PJLcQ==, tarball: https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.1.tgz} - engines: {node: '>=18'} - cpu: [x64] - os: [sunos] - - '@esbuild/win32-arm64@0.25.12': - resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==, tarball: https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz} - engines: {node: '>=18'} - cpu: [arm64] - os: [win32] - - '@esbuild/win32-arm64@0.27.7': - resolution: {integrity: sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==, tarball: https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.7.tgz} - engines: {node: '>=18'} - cpu: [arm64] - os: [win32] - - '@esbuild/win32-arm64@0.28.1': - resolution: {integrity: sha512-lCv9eK/H6ZJWbE7bh2nw54CZ9M2nupBxJcTsdk/QQnWkdSjKGuxmmH8/GWrlT1eMmZfn4dGcCjRte397WqfQXA==, tarball: https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.1.tgz} - engines: {node: '>=18'} - cpu: [arm64] - os: [win32] - - '@esbuild/win32-ia32@0.25.12': - resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==, tarball: https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz} - engines: {node: '>=18'} - cpu: [ia32] - os: [win32] - - '@esbuild/win32-ia32@0.27.7': - resolution: {integrity: sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==, tarball: https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.7.tgz} - engines: {node: '>=18'} - cpu: [ia32] - os: [win32] - - '@esbuild/win32-ia32@0.28.1': - resolution: {integrity: sha512-zvb/mB2bSCoJOpoCBgYKKpX6YM6mJBlBUVUtVj41DlZJVEB6/0CKlRYxP5wWl1C1ILiCoAU5wZZ4q1P3qeS6Eg==, tarball: https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.1.tgz} - engines: {node: '>=18'} - cpu: [ia32] - os: [win32] - - '@esbuild/win32-x64@0.25.12': - resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==, tarball: https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz} - engines: {node: '>=18'} - cpu: [x64] - os: [win32] - - '@esbuild/win32-x64@0.27.7': - resolution: {integrity: sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==, tarball: https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.7.tgz} - engines: {node: '>=18'} - cpu: [x64] - os: [win32] - - '@esbuild/win32-x64@0.28.1': - resolution: {integrity: sha512-bm4Mowrv+GXMlpWX++EcXw/iLyd1o3+bJkC2DkWXYVvgZCqD/bSj9ctZeAMC3cIxgjRVR2Dufaiu4YPxr5gW1A==, tarball: https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.1.tgz} - engines: {node: '>=18'} - cpu: [x64] - os: [win32] - - '@eslint-community/eslint-utils@4.9.1': - resolution: {integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==, tarball: https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@graphql-tools/apollo-engine-loader@8.0.28': + resolution: {integrity: sha512-MzgDrUuoxp6dZeo54zLBL3cEJKJtM3N/2RqK0rbPxPq5X2z6TUA7EGg8vIFTUkt5xelAsUrm8/4ai41ZDdxOng==, tarball: https://registry.npmjs.org/@graphql-tools/apollo-engine-loader/-/apollo-engine-loader-8.0.28.tgz} + engines: {node: '>=16.0.0'} peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - - '@eslint-community/regexpp@4.12.2': - resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==, tarball: https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - - '@eslint/config-array@0.21.2': - resolution: {integrity: sha512-nJl2KGTlrf9GjLimgIru+V/mzgSK0ABCDQRvxw5BjURL7WfH5uoWmizbH7QB6MmnMBd8cIC9uceWnezL1VZWWw==, tarball: https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.2.tgz} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/config-helpers@0.4.2': - resolution: {integrity: sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==, tarball: https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/core@0.17.0': - resolution: {integrity: sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==, tarball: https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/eslintrc@3.3.6': - resolution: {integrity: sha512-l2Ul9PrHsPCKcEY/ac7VgFj9D80C7S68sOKc618SyHDPK36s1XcFebXY0iTzUVn4Yq+YbwvSnDmCz9yxjX+QrA==, tarball: https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.6.tgz} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/js@9.39.5': - resolution: {integrity: sha512-QywQuszQh77pIXCsq998c8hbhSTI/azTty1Z6N53dmAudKHhy573j3yvRLsX2BSp8YpLtoCEG8E9DJe+8zUh4A==, tarball: https://registry.npmjs.org/@eslint/js/-/js-9.39.5.tgz} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/object-schema@2.1.7': - resolution: {integrity: sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==, tarball: https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/plugin-kit@0.4.1': - resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==, tarball: https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + graphql: 16.14.2 - '@exodus/bytes@1.15.1': - resolution: {integrity: sha512-S6mL0yNB/Abt9Ei4tq8gDhcczc4S3+vQ4ra7vxnAf+YHC02srtqxKKZghx2Dq6p0e66THKwR6r8N6P95wEty7Q==, tarball: https://registry.npmjs.org/@exodus/bytes/-/bytes-1.15.1.tgz} - engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} + '@graphql-tools/batch-execute@10.0.8': + resolution: {integrity: sha512-Kobt37qrVTFhX4HUK5/vPgMXFw/5f97AzmAlfmDBSRh/GnoAmLKCb48FrEI3gdeIwZB2fEhVHJyDqsojldnLQA==, tarball: https://registry.npmjs.org/@graphql-tools/batch-execute/-/batch-execute-10.0.8.tgz} + engines: {node: '>=20.0.0'} peerDependencies: - '@noble/hashes': ^1.8.0 || ^2.0.0 - peerDependenciesMeta: - '@noble/hashes': - optional: true - - '@fastify/busboy@2.1.1': - resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==, tarball: https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz} - engines: {node: '>=14'} - - '@fastify/busboy@3.2.0': - resolution: {integrity: sha512-m9FVDXU3GT2ITSe0UaMA5rU3QkfC/UXtCU8y0gSN/GugTqtVldOBWIB5V6V3sbmenVZUIpU6f+mPEO2+m5iTaA==, tarball: https://registry.npmjs.org/@fastify/busboy/-/busboy-3.2.0.tgz} - - '@gerrit0/mini-shiki@3.23.0': - resolution: {integrity: sha512-bEMORlG0cqdjVyCEuU0cDQbORWX+kYCeo0kV1lbxF5bt4r7SID2l9bqsxJEM0zndaxpOUT7riCyIVEuqq/Ynxg==, tarball: https://registry.npmjs.org/@gerrit0/mini-shiki/-/mini-shiki-3.23.0.tgz} + graphql: 16.14.2 - '@graphql-codegen/add@6.0.1': - resolution: {integrity: sha512-MSylSekjpVWbOBw2A/2ssk1fPY54sYb6Qk2C4AX5u7s2R+2pMQ9ws7DTXo8VU9qwTgWwVp6vGfdQ0AMpAn4Iug==, tarball: https://registry.npmjs.org/@graphql-codegen/add/-/add-6.0.1.tgz} - engines: {node: '>=16'} + '@graphql-tools/code-file-loader@8.1.28': + resolution: {integrity: sha512-BL3Ft/PFlXDE5nNuqA36hYci7Cx+8bDrPDc8X3VSpZy9iKFBY+oQ+IwqnEHCkt8OSp2n2V0gqTg4u3fcQP1Kwg==, tarball: https://registry.npmjs.org/@graphql-tools/code-file-loader/-/code-file-loader-8.1.28.tgz} + engines: {node: '>=16.0.0'} peerDependencies: graphql: 16.14.2 - '@graphql-codegen/cli@6.3.1': - resolution: {integrity: sha512-I5KkyX1SgQZPojMeQTRydB6fml4cysZq/mIdhNW4rmqdoOcTgdMPq1Tl+wtRp1VpBAOrBazJUJh1nAqJMMSPIQ==, tarball: https://registry.npmjs.org/@graphql-codegen/cli/-/cli-6.3.1.tgz} - engines: {node: '>=16'} - hasBin: true + '@graphql-tools/delegate@12.0.17': + resolution: {integrity: sha512-pIVszWEm69rF+bkM0jUyM1KdIxGzygQbIp1GtV1CuEGRB8lN1uFY1eeTzM2nudHXg8cj+XSVO8cnRpph+o8Dmg==, tarball: https://registry.npmjs.org/@graphql-tools/delegate/-/delegate-12.0.17.tgz} + engines: {node: '>=20.0.0'} peerDependencies: - '@parcel/watcher': ^2.1.0 graphql: 16.14.2 - peerDependenciesMeta: - '@parcel/watcher': - optional: true - '@graphql-codegen/client-preset@5.3.0': - resolution: {integrity: sha512-K9FON+j7qyxAUDuSGqI3ofb7lWTBs16oPTYpu14lhdL4DKZQSHLyc8EMYU9e3KcyQ/13gU/d6culOppzAuexLA==, tarball: https://registry.npmjs.org/@graphql-codegen/client-preset/-/client-preset-5.3.0.tgz} - engines: {node: '>=16'} + '@graphql-tools/documents@1.0.1': + resolution: {integrity: sha512-aweoMH15wNJ8g7b2r4C4WRuJxZ0ca8HtNO54rkye/3duxTkW4fGBEutCx03jCIr5+a1l+4vFJNP859QnAVBVCA==, tarball: https://registry.npmjs.org/@graphql-tools/documents/-/documents-1.0.1.tgz} + engines: {node: '>=16.0.0'} peerDependencies: graphql: 16.14.2 - graphql-sock: ^1.0.0 - peerDependenciesMeta: - graphql-sock: - optional: true - '@graphql-codegen/core@5.0.2': - resolution: {integrity: sha512-7RX0wwjoWPlLG/tUmpaTK91ZZqHcACNWpRL0nGnnJaJrORie9pgmX8JPrcwBgYiHSC+3ERo9xY91RFPem/VrpQ==, tarball: https://registry.npmjs.org/@graphql-codegen/core/-/core-5.0.2.tgz} - engines: {node: '>=16'} + '@graphql-tools/executor-common@1.0.6': + resolution: {integrity: sha512-23/K5C+LSlHDI0mj2SwCJ33RcELCcyDUgABm1Z8St7u/4Z5+95i925H/NAjUyggRjiaY8vYtNiMOPE49aPX1sg==, tarball: https://registry.npmjs.org/@graphql-tools/executor-common/-/executor-common-1.0.6.tgz} + engines: {node: '>=20.0.0'} peerDependencies: graphql: 16.14.2 - '@graphql-codegen/gql-tag-operations@5.2.0': - resolution: {integrity: sha512-B9gtJ4ziqpIv+7mHqwjtpYLFOuv0GmmRGpNDoWKM2VIx4OQqgI84d6OHKYCVeO7yu3mUr0QPvUgkSyuLVrdukA==, tarball: https://registry.npmjs.org/@graphql-codegen/gql-tag-operations/-/gql-tag-operations-5.2.0.tgz} - engines: {node: '>=16'} + '@graphql-tools/executor-graphql-ws@3.1.5': + resolution: {integrity: sha512-WXRsfwu9AkrORD9nShrd61OwwxeQ5+eXYcABRR3XPONFIS8pWQfDJGGqxql9/227o/s0DV5SIfkBURb5Knzv+A==, tarball: https://registry.npmjs.org/@graphql-tools/executor-graphql-ws/-/executor-graphql-ws-3.1.5.tgz} + engines: {node: '>=20.0.0'} peerDependencies: graphql: 16.14.2 - '@graphql-codegen/near-operation-file-preset@4.0.0': - resolution: {integrity: sha512-InHE3tN0dZKCZivrQ950y6Tnxtt/DJbvqqm5iCOmExJeIzhLoMOB0Rq2ex4KsRdSY9YtpYbYNCmO2xSU3MbRcg==, tarball: https://registry.npmjs.org/@graphql-codegen/near-operation-file-preset/-/near-operation-file-preset-4.0.0.tgz} - engines: {node: '>= 16.0.0'} + '@graphql-tools/executor-http@3.3.0': + resolution: {integrity: sha512-IkKXIjSg9U8MNsQUBVJAXE4+LSxaQ0cs7p5JTALLGDABY1o17vPDRwWALsX81AXD5dY27ihi/+OhGMueW/Fopg==, tarball: https://registry.npmjs.org/@graphql-tools/executor-http/-/executor-http-3.3.0.tgz} + engines: {node: '>=20.0.0'} peerDependencies: graphql: 16.14.2 - '@graphql-codegen/plugin-helpers@5.1.1': - resolution: {integrity: sha512-28GHODK2HY1NhdyRcPP3sCz0Kqxyfiz7boIZ8qIxFYmpLYnlDgiYok5fhFLVSZihyOpCs4Fa37gVHf/Q4I2FEg==, tarball: https://registry.npmjs.org/@graphql-codegen/plugin-helpers/-/plugin-helpers-5.1.1.tgz} - engines: {node: '>=16'} + '@graphql-tools/executor-legacy-ws@1.1.28': + resolution: {integrity: sha512-O4uj93GG9iUb3s32eyhUohvyfA8mLhN8FvGzEdK628hFQPhZN75yurtVFrR08DHex71mQ3wYCCFkErpwdJbDDQ==, tarball: https://registry.npmjs.org/@graphql-tools/executor-legacy-ws/-/executor-legacy-ws-1.1.28.tgz} + engines: {node: '>=16.0.0'} peerDependencies: graphql: 16.14.2 - '@graphql-codegen/plugin-helpers@6.1.0': - resolution: {integrity: sha512-JJypehWTcty9kxKiqH7TQOetkGdOYjY78RHlI+23qB59cV2wxjFFVf8l7kmuXS4cpGVUNfIjFhVr7A1W7JMtdA==, tarball: https://registry.npmjs.org/@graphql-codegen/plugin-helpers/-/plugin-helpers-6.1.0.tgz} - engines: {node: '>=16'} + '@graphql-tools/executor@1.5.1': + resolution: {integrity: sha512-n94Qcu875Mji9GQ52n5UbgOTxlgvFJicBPYD+FRks9HKIQpdNPjkkrKZUYNG51XKa+bf03rxNflm4+wXhoHHrA==, tarball: https://registry.npmjs.org/@graphql-tools/executor/-/executor-1.5.1.tgz} + engines: {node: '>=16.0.0'} peerDependencies: graphql: 16.14.2 - '@graphql-codegen/plugin-helpers@6.3.0': - resolution: {integrity: sha512-Auc+/B7okDx9+pVgLVliZtZLYh6iltWXlnzzM+bRE+zh1T4r3hKbnr8xAmtT937ArfSgk5GHcQHr8LfPYnrRBg==, tarball: https://registry.npmjs.org/@graphql-codegen/plugin-helpers/-/plugin-helpers-6.3.0.tgz} - engines: {node: '>=16'} + '@graphql-tools/git-loader@8.0.32': + resolution: {integrity: sha512-H5HTp2vevv0rRMEnCJBVmVF8md3LpJI1C1+d6OtzvmuONJ8mOX2mkf9rtoqwiztynVegaDUekvMFsc9k5iE2WA==, tarball: https://registry.npmjs.org/@graphql-tools/git-loader/-/git-loader-8.0.32.tgz} + engines: {node: '>=16.0.0'} peerDependencies: graphql: 16.14.2 - '@graphql-codegen/schema-ast@4.1.0': - resolution: {integrity: sha512-kZVn0z+th9SvqxfKYgztA6PM7mhnSZaj4fiuBWvMTqA+QqQ9BBed6Pz41KuD/jr0gJtnlr2A4++/0VlpVbCTmQ==, tarball: https://registry.npmjs.org/@graphql-codegen/schema-ast/-/schema-ast-4.1.0.tgz} + '@graphql-tools/github-loader@9.1.2': + resolution: {integrity: sha512-jhRJncj9Wkr1Cd8Mo3QI2oG6fTw5ILr1/OXcHIqx744NBj8pPwQBXmQzZqh7MXxbekl2EAcum7SJIjq1HpYcPA==, tarball: https://registry.npmjs.org/@graphql-tools/github-loader/-/github-loader-9.1.2.tgz} + engines: {node: '>=20.0.0'} peerDependencies: graphql: 16.14.2 - '@graphql-codegen/schema-ast@5.0.2': - resolution: {integrity: sha512-jl1F/9IjRkJisEb9B0ayG4QGqYlPldLRy8ojDdmL9NE1NsdB5ROfxQnSqyC3g+wuvBhWX7kZgMRQYn3RU1I5bA==, tarball: https://registry.npmjs.org/@graphql-codegen/schema-ast/-/schema-ast-5.0.2.tgz} - engines: {node: '>=16'} + '@graphql-tools/graphql-file-loader@8.1.14': + resolution: {integrity: sha512-CfAcsSEVkkHfEXLFzrd5rUYpcQEGWNV8lfc1Tb1p5m9HnYICzDDH08I5V33iMrEDza3GuujjjRBYqplBkqwIow==, tarball: https://registry.npmjs.org/@graphql-tools/graphql-file-loader/-/graphql-file-loader-8.1.14.tgz} + engines: {node: '>=16.0.0'} peerDependencies: graphql: 16.14.2 - '@graphql-codegen/typed-document-node@6.1.8': - resolution: {integrity: sha512-+qDdiJSQ7Ol+vpLMAH8ZJok50CvlYxA6seQ7cwEa3emXt8MmH5hh3zdc9unQlPc7bynoJHRCgoKk7E0B7hry0w==, tarball: https://registry.npmjs.org/@graphql-codegen/typed-document-node/-/typed-document-node-6.1.8.tgz} - engines: {node: '>=16'} + '@graphql-tools/graphql-tag-pluck@8.3.27': + resolution: {integrity: sha512-CJ0WVXhGYsfFngpRrAAcjRHyxSDHx4dEz2W15bkwvt9he/AWhuyXm07wuGcoLrl0q0iQp1BiRjU7D8SxWZo3JQ==, tarball: https://registry.npmjs.org/@graphql-tools/graphql-tag-pluck/-/graphql-tag-pluck-8.3.27.tgz} + engines: {node: '>=16.0.0'} peerDependencies: graphql: 16.14.2 - '@graphql-codegen/typescript-operations@5.1.0': - resolution: {integrity: sha512-JlmjbFl0EnsfMDIYvTE1Q0kAOrntVEZ+ZfBqWTP91g4e0F/TzuwJ/V4tiFmeDf5dx/rf9AK4VkPehIdxu7TYhw==, tarball: https://registry.npmjs.org/@graphql-codegen/typescript-operations/-/typescript-operations-5.1.0.tgz} - engines: {node: '>=16'} + '@graphql-tools/graphql-tag-pluck@8.3.31': + resolution: {integrity: sha512-ema2RRPZGj8TKruNElyDBHVCNFMxioGIVfLBuiA+GdfmRGt95b/i7Uksnj4EwItA6MCmhxokxZoa/fl6mJt3tw==, tarball: https://registry.npmjs.org/@graphql-tools/graphql-tag-pluck/-/graphql-tag-pluck-8.3.31.tgz} + engines: {node: '>=16.0.0'} peerDependencies: graphql: 16.14.2 - graphql-sock: ^1.0.0 - peerDependenciesMeta: - graphql-sock: - optional: true - '@graphql-codegen/typescript@4.1.6': - resolution: {integrity: sha512-vpw3sfwf9A7S+kIUjyFxuvrywGxd4lmwmyYnnDVjVE4kSQ6Td3DpqaPTy8aNQ6O96vFoi/bxbZS2BW49PwSUUA==, tarball: https://registry.npmjs.org/@graphql-codegen/typescript/-/typescript-4.1.6.tgz} - engines: {node: '>=16'} + '@graphql-tools/import@7.1.14': + resolution: {integrity: sha512-aqLcu04aEidszbXM6M0PWWL8bP17eX9sxXwjYWpglLvIRd4NFqb3C9QzBY8pleqXNMtWqXktlm9BQjevgSrirQ==, tarball: https://registry.npmjs.org/@graphql-tools/import/-/import-7.1.14.tgz} + engines: {node: '>=16.0.0'} peerDependencies: graphql: 16.14.2 - '@graphql-codegen/typescript@5.0.10': - resolution: {integrity: sha512-Pa8OFmL9TdhEYnLYJLYA9EhP8eEeivP/YDYq4Nb8LQaL7GXm4TGX8zELYaCM9Fu8M3iZb7iQGMt7qc+1lXz8XQ==, tarball: https://registry.npmjs.org/@graphql-codegen/typescript/-/typescript-5.0.10.tgz} - engines: {node: '>=16'} + '@graphql-tools/json-file-loader@8.0.26': + resolution: {integrity: sha512-kwy9IFi5QtXXTLBgWkvA1RqsZeJDn0CxsTbhNlziCzmga9fNo7qtZ18k9FYIq3EIoQQlok+b7W7yeyJATA2xhw==, tarball: https://registry.npmjs.org/@graphql-tools/json-file-loader/-/json-file-loader-8.0.26.tgz} + engines: {node: '>=16.0.0'} peerDependencies: graphql: 16.14.2 - '@graphql-codegen/visitor-plugin-common@5.8.0': - resolution: {integrity: sha512-lC1E1Kmuzi3WZUlYlqB4fP6+CvbKH9J+haU1iWmgsBx5/sO2ROeXJG4Dmt8gP03bI2BwjiwV5WxCEMlyeuzLnA==, tarball: https://registry.npmjs.org/@graphql-codegen/visitor-plugin-common/-/visitor-plugin-common-5.8.0.tgz} - engines: {node: '>=16'} - peerDependencies: - graphql: 16.14.2 - - '@graphql-codegen/visitor-plugin-common@6.2.3': - resolution: {integrity: sha512-Rewl/QRFfIOXHFK3i/ts4VodsaB4N22kckH1zweTzq7SFodkfrqGrLa/MrGLJ/q6aUuqGiqao7f4Za2IjjkCxw==, tarball: https://registry.npmjs.org/@graphql-codegen/visitor-plugin-common/-/visitor-plugin-common-6.2.3.tgz} - engines: {node: '>=16'} - peerDependencies: - graphql: 16.14.2 - - '@graphql-codegen/visitor-plugin-common@6.3.0': - resolution: {integrity: sha512-vGBoE+4huzZyNhyGSAhXAkdROHlwKxxuziZm4XtP1mxe7nuI+VgyOmXebafLijbmuDsptPXQN0C/htL54O8hrg==, tarball: https://registry.npmjs.org/@graphql-codegen/visitor-plugin-common/-/visitor-plugin-common-6.3.0.tgz} - engines: {node: '>=16'} - peerDependencies: - graphql: 16.14.2 - - '@graphql-hive/signal@2.0.0': - resolution: {integrity: sha512-Pz8wB3K0iU6ae9S1fWfsmJX24CcGeTo6hE7T44ucmV/ALKRj+bxClmqrYcDT7v3f0d12Rh4FAXBb6gon+WkDpQ==, tarball: https://registry.npmjs.org/@graphql-hive/signal/-/signal-2.0.0.tgz} - engines: {node: '>=20.0.0'} - - '@graphql-tools/apollo-engine-loader@8.0.28': - resolution: {integrity: sha512-MzgDrUuoxp6dZeo54zLBL3cEJKJtM3N/2RqK0rbPxPq5X2z6TUA7EGg8vIFTUkt5xelAsUrm8/4ai41ZDdxOng==, tarball: https://registry.npmjs.org/@graphql-tools/apollo-engine-loader/-/apollo-engine-loader-8.0.28.tgz} - engines: {node: '>=16.0.0'} - peerDependencies: - graphql: 16.14.2 - - '@graphql-tools/batch-execute@10.0.8': - resolution: {integrity: sha512-Kobt37qrVTFhX4HUK5/vPgMXFw/5f97AzmAlfmDBSRh/GnoAmLKCb48FrEI3gdeIwZB2fEhVHJyDqsojldnLQA==, tarball: https://registry.npmjs.org/@graphql-tools/batch-execute/-/batch-execute-10.0.8.tgz} - engines: {node: '>=20.0.0'} - peerDependencies: - graphql: 16.14.2 - - '@graphql-tools/code-file-loader@8.1.28': - resolution: {integrity: sha512-BL3Ft/PFlXDE5nNuqA36hYci7Cx+8bDrPDc8X3VSpZy9iKFBY+oQ+IwqnEHCkt8OSp2n2V0gqTg4u3fcQP1Kwg==, tarball: https://registry.npmjs.org/@graphql-tools/code-file-loader/-/code-file-loader-8.1.28.tgz} - engines: {node: '>=16.0.0'} - peerDependencies: - graphql: 16.14.2 - - '@graphql-tools/delegate@12.0.17': - resolution: {integrity: sha512-pIVszWEm69rF+bkM0jUyM1KdIxGzygQbIp1GtV1CuEGRB8lN1uFY1eeTzM2nudHXg8cj+XSVO8cnRpph+o8Dmg==, tarball: https://registry.npmjs.org/@graphql-tools/delegate/-/delegate-12.0.17.tgz} - engines: {node: '>=20.0.0'} - peerDependencies: - graphql: 16.14.2 - - '@graphql-tools/documents@1.0.1': - resolution: {integrity: sha512-aweoMH15wNJ8g7b2r4C4WRuJxZ0ca8HtNO54rkye/3duxTkW4fGBEutCx03jCIr5+a1l+4vFJNP859QnAVBVCA==, tarball: https://registry.npmjs.org/@graphql-tools/documents/-/documents-1.0.1.tgz} - engines: {node: '>=16.0.0'} - peerDependencies: - graphql: 16.14.2 - - '@graphql-tools/executor-common@1.0.6': - resolution: {integrity: sha512-23/K5C+LSlHDI0mj2SwCJ33RcELCcyDUgABm1Z8St7u/4Z5+95i925H/NAjUyggRjiaY8vYtNiMOPE49aPX1sg==, tarball: https://registry.npmjs.org/@graphql-tools/executor-common/-/executor-common-1.0.6.tgz} - engines: {node: '>=20.0.0'} - peerDependencies: - graphql: 16.14.2 - - '@graphql-tools/executor-graphql-ws@3.1.5': - resolution: {integrity: sha512-WXRsfwu9AkrORD9nShrd61OwwxeQ5+eXYcABRR3XPONFIS8pWQfDJGGqxql9/227o/s0DV5SIfkBURb5Knzv+A==, tarball: https://registry.npmjs.org/@graphql-tools/executor-graphql-ws/-/executor-graphql-ws-3.1.5.tgz} - engines: {node: '>=20.0.0'} - peerDependencies: - graphql: 16.14.2 - - '@graphql-tools/executor-http@3.3.0': - resolution: {integrity: sha512-IkKXIjSg9U8MNsQUBVJAXE4+LSxaQ0cs7p5JTALLGDABY1o17vPDRwWALsX81AXD5dY27ihi/+OhGMueW/Fopg==, tarball: https://registry.npmjs.org/@graphql-tools/executor-http/-/executor-http-3.3.0.tgz} - engines: {node: '>=20.0.0'} - peerDependencies: - graphql: 16.14.2 - - '@graphql-tools/executor-legacy-ws@1.1.28': - resolution: {integrity: sha512-O4uj93GG9iUb3s32eyhUohvyfA8mLhN8FvGzEdK628hFQPhZN75yurtVFrR08DHex71mQ3wYCCFkErpwdJbDDQ==, tarball: https://registry.npmjs.org/@graphql-tools/executor-legacy-ws/-/executor-legacy-ws-1.1.28.tgz} - engines: {node: '>=16.0.0'} - peerDependencies: - graphql: 16.14.2 - - '@graphql-tools/executor@1.5.1': - resolution: {integrity: sha512-n94Qcu875Mji9GQ52n5UbgOTxlgvFJicBPYD+FRks9HKIQpdNPjkkrKZUYNG51XKa+bf03rxNflm4+wXhoHHrA==, tarball: https://registry.npmjs.org/@graphql-tools/executor/-/executor-1.5.1.tgz} - engines: {node: '>=16.0.0'} - peerDependencies: - graphql: 16.14.2 - - '@graphql-tools/git-loader@8.0.32': - resolution: {integrity: sha512-H5HTp2vevv0rRMEnCJBVmVF8md3LpJI1C1+d6OtzvmuONJ8mOX2mkf9rtoqwiztynVegaDUekvMFsc9k5iE2WA==, tarball: https://registry.npmjs.org/@graphql-tools/git-loader/-/git-loader-8.0.32.tgz} - engines: {node: '>=16.0.0'} - peerDependencies: - graphql: 16.14.2 - - '@graphql-tools/github-loader@9.1.2': - resolution: {integrity: sha512-jhRJncj9Wkr1Cd8Mo3QI2oG6fTw5ILr1/OXcHIqx744NBj8pPwQBXmQzZqh7MXxbekl2EAcum7SJIjq1HpYcPA==, tarball: https://registry.npmjs.org/@graphql-tools/github-loader/-/github-loader-9.1.2.tgz} - engines: {node: '>=20.0.0'} - peerDependencies: - graphql: 16.14.2 - - '@graphql-tools/graphql-file-loader@8.1.14': - resolution: {integrity: sha512-CfAcsSEVkkHfEXLFzrd5rUYpcQEGWNV8lfc1Tb1p5m9HnYICzDDH08I5V33iMrEDza3GuujjjRBYqplBkqwIow==, tarball: https://registry.npmjs.org/@graphql-tools/graphql-file-loader/-/graphql-file-loader-8.1.14.tgz} - engines: {node: '>=16.0.0'} - peerDependencies: - graphql: 16.14.2 - - '@graphql-tools/graphql-tag-pluck@8.3.27': - resolution: {integrity: sha512-CJ0WVXhGYsfFngpRrAAcjRHyxSDHx4dEz2W15bkwvt9he/AWhuyXm07wuGcoLrl0q0iQp1BiRjU7D8SxWZo3JQ==, tarball: https://registry.npmjs.org/@graphql-tools/graphql-tag-pluck/-/graphql-tag-pluck-8.3.27.tgz} - engines: {node: '>=16.0.0'} - peerDependencies: - graphql: 16.14.2 - - '@graphql-tools/graphql-tag-pluck@8.3.31': - resolution: {integrity: sha512-ema2RRPZGj8TKruNElyDBHVCNFMxioGIVfLBuiA+GdfmRGt95b/i7Uksnj4EwItA6MCmhxokxZoa/fl6mJt3tw==, tarball: https://registry.npmjs.org/@graphql-tools/graphql-tag-pluck/-/graphql-tag-pluck-8.3.31.tgz} - engines: {node: '>=16.0.0'} - peerDependencies: - graphql: 16.14.2 - - '@graphql-tools/import@7.1.14': - resolution: {integrity: sha512-aqLcu04aEidszbXM6M0PWWL8bP17eX9sxXwjYWpglLvIRd4NFqb3C9QzBY8pleqXNMtWqXktlm9BQjevgSrirQ==, tarball: https://registry.npmjs.org/@graphql-tools/import/-/import-7.1.14.tgz} - engines: {node: '>=16.0.0'} - peerDependencies: - graphql: 16.14.2 - - '@graphql-tools/json-file-loader@8.0.26': - resolution: {integrity: sha512-kwy9IFi5QtXXTLBgWkvA1RqsZeJDn0CxsTbhNlziCzmga9fNo7qtZ18k9FYIq3EIoQQlok+b7W7yeyJATA2xhw==, tarball: https://registry.npmjs.org/@graphql-tools/json-file-loader/-/json-file-loader-8.0.26.tgz} - engines: {node: '>=16.0.0'} - peerDependencies: - graphql: 16.14.2 - - '@graphql-tools/load@8.1.8': - resolution: {integrity: sha512-gxO662b64qZSToK3N6XUxWG5E6HOUjlg5jEnmGvD4bMtGJ0HwEe/BaVZbBQemCfLkxYjwRIBiVfOY9o0JyjZJg==, tarball: https://registry.npmjs.org/@graphql-tools/load/-/load-8.1.8.tgz} - engines: {node: '>=16.0.0'} + '@graphql-tools/load@8.1.8': + resolution: {integrity: sha512-gxO662b64qZSToK3N6XUxWG5E6HOUjlg5jEnmGvD4bMtGJ0HwEe/BaVZbBQemCfLkxYjwRIBiVfOY9o0JyjZJg==, tarball: https://registry.npmjs.org/@graphql-tools/load/-/load-8.1.8.tgz} + engines: {node: '>=16.0.0'} peerDependencies: graphql: 16.14.2 @@ -2667,26 +2076,6 @@ packages: peerDependencies: graphql: 16.14.2 - '@humanfs/core@0.19.2': - resolution: {integrity: sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==, tarball: https://registry.npmjs.org/@humanfs/core/-/core-0.19.2.tgz} - engines: {node: '>=18.18.0'} - - '@humanfs/node@0.16.8': - resolution: {integrity: sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==, tarball: https://registry.npmjs.org/@humanfs/node/-/node-0.16.8.tgz} - engines: {node: '>=18.18.0'} - - '@humanfs/types@0.15.0': - resolution: {integrity: sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==, tarball: https://registry.npmjs.org/@humanfs/types/-/types-0.15.0.tgz} - engines: {node: '>=18.18.0'} - - '@humanwhocodes/module-importer@1.0.1': - resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==, tarball: https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz} - engines: {node: '>=12.22'} - - '@humanwhocodes/retry@0.4.3': - resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==, tarball: https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz} - engines: {node: '>=18.18'} - '@iarna/toml@2.2.5': resolution: {integrity: sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==, tarball: https://registry.npmjs.org/@iarna/toml/-/toml-2.2.5.tgz} @@ -2939,9 +2328,6 @@ packages: '@manypkg/get-packages@1.1.3': resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==, tarball: https://registry.npmjs.org/@manypkg/get-packages/-/get-packages-1.1.3.tgz} - '@microsoft/tsdoc-config@0.18.1': - resolution: {integrity: sha512-9brPoVdfN9k9g0dcWkFeA7IH9bbcttzDJlXvkf8b2OBzd5MueR1V2wkKBL0abn0otvmkHJC6aapBOTJDDeMCZg==, tarball: https://registry.npmjs.org/@microsoft/tsdoc-config/-/tsdoc-config-0.18.1.tgz} - '@microsoft/tsdoc@0.16.0': resolution: {integrity: sha512-xgAyonlVVS+q7Vc7qLW0UrJU7rSFcETRWsqdXZtjzRU8dF+6CkozTK4V4y1LwOX7j8r/vHphjDeMeGI4tNGeGA==, tarball: https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.16.0.tgz} @@ -2949,9 +2335,6 @@ packages: resolution: {integrity: sha512-VVPPgHyQ6ShqnrmDWuxjmUIsO9gWyOZFmuOfLd9LfBGQJwZfy0gvv9pbHSJuoFNIYC7ZDX9aoFwowjcdSC4E8w==, tarball: https://registry.npmjs.org/@mswjs/interceptors/-/interceptors-0.41.9.tgz} engines: {node: '>=18'} - '@napi-rs/wasm-runtime@0.2.12': - resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==, tarball: https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz} - '@napi-rs/wasm-runtime@0.2.4': resolution: {integrity: sha512-9zESzOO5aDByvhIAsOy9TbpZ0Ur2AJbUI7UT73kcUTS2mxAMHOBaa1st/jAymNoCtvrit99kkzT1FZuXVcgfIQ==, tarball: https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.4.tgz} @@ -2978,23 +2361,6 @@ packages: peerDependencies: nx: '>= 21 <= 23 || ^22.0.0-0' - '@nx/eslint-plugin@22.7.7': - resolution: {integrity: sha512-XSpGOoMnUAO9uUTA0ZP7hTf67V6kHJrj+bc+zrfRzGGQys3f0SIlmgTA6L7lYsyG3Z42BxClW3jlxG83Cxoxrg==, tarball: https://registry.npmjs.org/@nx/eslint-plugin/-/eslint-plugin-22.7.7.tgz} - peerDependencies: - '@typescript-eslint/parser': ^6.13.2 || ^7.0.0 || ^8.0.0 - eslint-config-prettier: ^10.0.0 - peerDependenciesMeta: - eslint-config-prettier: - optional: true - - '@nx/js@22.7.7': - resolution: {integrity: sha512-wjgr9LwT+ULkwjvX0CUMwK8BQ+wY53ipecGN/yCKptch5D5WXTOOBOx+YLrrrD8h+/amHy9jMqAg3ygryRkNhQ==, tarball: https://registry.npmjs.org/@nx/js/-/js-22.7.7.tgz} - peerDependencies: - verdaccio: ^6.0.5 - peerDependenciesMeta: - verdaccio: - optional: true - '@nx/nx-darwin-arm64@22.7.7': resolution: {integrity: sha512-HGu8Bc3DzmIFeKHzIEDBDScgI8/hOjVIj/EzJBE5289dUf+CQ5OSXc6kw2NL9SiCMAPKa0clqcJgLJLqP5t/DQ==, tarball: https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-22.7.7.tgz} cpu: [arm64] @@ -3629,19 +2995,10 @@ packages: resolution: {integrity: sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ==, tarball: https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.6.tgz} engines: {node: '>= 10.0.0'} - '@phenomnomnominal/tsquery@6.2.0': - resolution: {integrity: sha512-Vo9nkhfZxDB/sBiqIY3pjDC4mOSyure+AFlEW5hcy/tRE82MqCXjRN4InnVNMldinRt0dLYqg4HAU2XPq5e1LA==, tarball: https://registry.npmjs.org/@phenomnomnominal/tsquery/-/tsquery-6.2.0.tgz} - peerDependencies: - typescript: '>3.0.0' - '@pkgjs/parseargs@0.11.0': resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==, tarball: https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz} engines: {node: '>=14'} - '@pkgr/core@0.3.6': - resolution: {integrity: sha512-SEeaJLb3qBNF/OaXnaR1NmmBbFYk1zC0ZH/52fATcRPLFg/p791YrcyFFy44Bo9sLaGuSuLp5Q6axbb/O+v/RA==, tarball: https://registry.npmjs.org/@pkgr/core/-/core-0.3.6.tgz} - engines: {node: ^14.18.0 || >=16.0.0} - '@playwright/test@1.61.1': resolution: {integrity: sha512-8nKv6+0RJSL9FE4jYOEGXnPeM/Hg12qZpmqzZjRh3qM0Y7c3z1mrOTfFLids72RDQYVh9WpLEfR5WdpNX4fkig==, tarball: https://registry.npmjs.org/@playwright/test/-/test-1.61.1.tgz} engines: {node: '>=18'} @@ -3860,16 +3217,6 @@ packages: vite: optional: true - '@shopify/eslint-plugin-cli@file:packages/eslint-plugin-cli': - resolution: {directory: packages/eslint-plugin-cli, type: directory} - peerDependencies: - eslint: ^9.0.0 - - '@shopify/eslint-plugin@50.0.0': - resolution: {integrity: sha512-QBuZjOpzaXvq6jC/wl9iy8LRLwMPWxWehFBfUc5vvkmp/P58fO2ljzJfOEkClN5tCe6z6+RfTuzX4vPx6dhJIA==, tarball: https://registry.npmjs.org/@shopify/eslint-plugin/-/eslint-plugin-50.0.0.tgz} - peerDependencies: - eslint: ^9.27.0 - '@shopify/generate-docs@1.2.3': resolution: {integrity: sha512-BqeO3RgbE4Qmnz41K2YZCBY7kVPPFrIYt93Wq5HixGyzzIhHZTS/fz3ojNb3/Tw0P2nVq9CkZa42675+CHyn+Q==, tarball: https://registry.npmjs.org/@shopify/generate-docs/-/generate-docs-1.2.3.tgz} hasBin: true @@ -4091,9 +3438,6 @@ packages: '@types/diff@5.2.3': resolution: {integrity: sha512-K0Oqlrq3kQMaO2RhfrNQX5trmt+XLyom88zS0u84nnIcLvFnRUMRRHmrGny5GSM+kNO9IZLARsdQHDzkhAgmrQ==, tarball: https://registry.npmjs.org/@types/diff/-/diff-5.2.3.tgz} - '@types/esquery@1.5.4': - resolution: {integrity: sha512-yYO4Q8H+KJHKW1rEeSzHxcZi90durqYgWVfnh5K6ZADVBjBv2e1NEveYX5yT2bffgN7RqzH3k9930m+i2yBoMA==, tarball: https://registry.npmjs.org/@types/esquery/-/esquery-1.5.4.tgz} - '@types/estree@1.0.8': resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==, tarball: https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz} @@ -4142,9 +3486,6 @@ packages: '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==, tarball: https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz} - '@types/parse-json@4.0.2': - resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==, tarball: https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz} - '@types/prop-types@15.7.15': resolution: {integrity: sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==, tarball: https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz} @@ -4199,160 +3540,6 @@ packages: '@types/ws@8.18.1': resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==, tarball: https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz} - '@typescript-eslint/eslint-plugin@8.56.1': - resolution: {integrity: sha512-Jz9ZztpB37dNC+HU2HI28Bs9QXpzCz+y/twHOwhyrIRdbuVDxSytJNDl6z/aAKlaRIwC7y8wJdkBv7FxYGgi0A==, tarball: https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.56.1.tgz} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - '@typescript-eslint/parser': ^8.56.1 - eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/parser@8.56.1': - resolution: {integrity: sha512-klQbnPAAiGYFyI02+znpBRLyjL4/BrBd0nyWkdC0s/6xFLkXYQ8OoRrSkqacS1ddVxf/LDyODIKbQ5TgKAf/Fg==, tarball: https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.56.1.tgz} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/project-service@8.56.1': - resolution: {integrity: sha512-TAdqQTzHNNvlVFfR+hu2PDJrURiwKsUvxFn1M0h95BB8ah5jejas08jUWG4dBA68jDMI988IvtfdAI53JzEHOQ==, tarball: https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.56.1.tgz} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/scope-manager@8.56.1': - resolution: {integrity: sha512-YAi4VDKcIZp0O4tz/haYKhmIDZFEUPOreKbfdAN3SzUDMcPhJ8QI99xQXqX+HoUVq8cs85eRKnD+rne2UAnj2w==, tarball: https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.56.1.tgz} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/tsconfig-utils@8.56.1': - resolution: {integrity: sha512-qOtCYzKEeyr3aR9f28mPJqBty7+DBqsdd63eO0yyDwc6vgThj2UjWfJIcsFeSucYydqcuudMOprZ+x1SpF3ZuQ==, tarball: https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.56.1.tgz} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/type-utils@8.56.1': - resolution: {integrity: sha512-yB/7dxi7MgTtGhZdaHCemf7PuwrHMenHjmzgUW1aJpO+bBU43OycnM3Wn+DdvDO/8zzA9HlhaJ0AUGuvri4oGg==, tarball: https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.56.1.tgz} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/types@8.56.1': - resolution: {integrity: sha512-dbMkdIUkIkchgGDIv7KLUpa0Mda4IYjo4IAMJUZ+3xNoUXxMsk9YtKpTHSChRS85o+H9ftm51gsK1dZReY9CVw==, tarball: https://registry.npmjs.org/@typescript-eslint/types/-/types-8.56.1.tgz} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/typescript-estree@8.56.1': - resolution: {integrity: sha512-qzUL1qgalIvKWAf9C1HpvBjif+Vm6rcT5wZd4VoMb9+Km3iS3Cv9DY6dMRMDtPnwRAFyAi7YXJpTIEXLvdfPxg==, tarball: https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.56.1.tgz} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/utils@8.56.1': - resolution: {integrity: sha512-HPAVNIME3tABJ61siYlHzSWCGtOoeP2RTIaHXFMPqjrQKCGB9OgUVdiNgH7TJS2JNIQ5qQ4RsAUDuGaGme/KOA==, tarball: https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.56.1.tgz} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: '>=4.8.4 <6.0.0' - - '@typescript-eslint/visitor-keys@8.56.1': - resolution: {integrity: sha512-KiROIzYdEV85YygXw6BI/Dx4fnBlFQu6Mq4QE4MOH9fFnhohw6wX/OAvDY2/C+ut0I3RSPKenvZJIVYqJNkhEw==, tarball: https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.56.1.tgz} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@unrs/resolver-binding-android-arm-eabi@1.11.1': - resolution: {integrity: sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==, tarball: https://registry.npmjs.org/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.11.1.tgz} - cpu: [arm] - os: [android] - - '@unrs/resolver-binding-android-arm64@1.11.1': - resolution: {integrity: sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==, tarball: https://registry.npmjs.org/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.11.1.tgz} - cpu: [arm64] - os: [android] - - '@unrs/resolver-binding-darwin-arm64@1.11.1': - resolution: {integrity: sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==, tarball: https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.11.1.tgz} - cpu: [arm64] - os: [darwin] - - '@unrs/resolver-binding-darwin-x64@1.11.1': - resolution: {integrity: sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==, tarball: https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.11.1.tgz} - cpu: [x64] - os: [darwin] - - '@unrs/resolver-binding-freebsd-x64@1.11.1': - resolution: {integrity: sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==, tarball: https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.11.1.tgz} - cpu: [x64] - os: [freebsd] - - '@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1': - resolution: {integrity: sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==, tarball: https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.11.1.tgz} - cpu: [arm] - os: [linux] - - '@unrs/resolver-binding-linux-arm-musleabihf@1.11.1': - resolution: {integrity: sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==, tarball: https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.11.1.tgz} - cpu: [arm] - os: [linux] - - '@unrs/resolver-binding-linux-arm64-gnu@1.11.1': - resolution: {integrity: sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==, tarball: https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.11.1.tgz} - cpu: [arm64] - os: [linux] - - '@unrs/resolver-binding-linux-arm64-musl@1.11.1': - resolution: {integrity: sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==, tarball: https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.11.1.tgz} - cpu: [arm64] - os: [linux] - - '@unrs/resolver-binding-linux-ppc64-gnu@1.11.1': - resolution: {integrity: sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==, tarball: https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.11.1.tgz} - cpu: [ppc64] - os: [linux] - - '@unrs/resolver-binding-linux-riscv64-gnu@1.11.1': - resolution: {integrity: sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==, tarball: https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.11.1.tgz} - cpu: [riscv64] - os: [linux] - - '@unrs/resolver-binding-linux-riscv64-musl@1.11.1': - resolution: {integrity: sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==, tarball: https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.11.1.tgz} - cpu: [riscv64] - os: [linux] - - '@unrs/resolver-binding-linux-s390x-gnu@1.11.1': - resolution: {integrity: sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==, tarball: https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.11.1.tgz} - cpu: [s390x] - os: [linux] - - '@unrs/resolver-binding-linux-x64-gnu@1.11.1': - resolution: {integrity: sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==, tarball: https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.11.1.tgz} - cpu: [x64] - os: [linux] - - '@unrs/resolver-binding-linux-x64-musl@1.11.1': - resolution: {integrity: sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==, tarball: https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.11.1.tgz} - cpu: [x64] - os: [linux] - - '@unrs/resolver-binding-wasm32-wasi@1.11.1': - resolution: {integrity: sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==, tarball: https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.11.1.tgz} - engines: {node: '>=14.0.0'} - cpu: [wasm32] - - '@unrs/resolver-binding-win32-arm64-msvc@1.11.1': - resolution: {integrity: sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==, tarball: https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.11.1.tgz} - cpu: [arm64] - os: [win32] - - '@unrs/resolver-binding-win32-ia32-msvc@1.11.1': - resolution: {integrity: sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==, tarball: https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.11.1.tgz} - cpu: [ia32] - os: [win32] - - '@unrs/resolver-binding-win32-x64-msvc@1.11.1': - resolution: {integrity: sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==, tarball: https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.11.1.tgz} - cpu: [x64] - os: [win32] - '@vercel/detect-agent@1.2.5': resolution: {integrity: sha512-0krENrjuitlW8s6TJu0MlqCevyCU7K7JK63jZAf7xZ6n17tx+vUEwzHT3sTxawtwZxaW21hu+oFUpoOrm49FsQ==, tarball: https://registry.npmjs.org/@vercel/detect-agent/-/detect-agent-1.2.5.tgz} engines: {node: '>=14'} @@ -4368,19 +3555,6 @@ packages: peerDependencies: vitest: 3.2.7 - '@vitest/eslint-plugin@1.1.44': - resolution: {integrity: sha512-m4XeohMT+Dj2RZfxnbiFR+Cv5dEC0H7C6TlxRQT7GK2556solm99kxgzJp/trKrZvanZcOFyw7aABykUTfWyrg==, tarball: https://registry.npmjs.org/@vitest/eslint-plugin/-/eslint-plugin-1.1.44.tgz} - peerDependencies: - '@typescript-eslint/utils': 8.56.1 - eslint: '>= 8.57.0' - typescript: '>= 5.0.0' - vitest: '*' - peerDependenciesMeta: - typescript: - optional: true - vitest: - optional: true - '@vitest/expect@4.1.10': resolution: {integrity: sha512-YsCn+qAk1GWjQOWFEsEcL2gNQ0zmVmQu3T03qP6UyjhtmdtwtbuI+DASn/7iQB3HGTXkdBwGddzxPlmiql5vlA==, tarball: https://registry.npmjs.org/@vitest/expect/-/expect-4.1.10.tgz} @@ -4439,11 +3613,6 @@ packages: resolution: {integrity: sha512-nrUSn7hzt7J6JWgWGz78ZYI8wj+gdIJdk0Ynjpp8l+trkn58Uqsf6RYrYkEK+3X18EX+TNdtJI0WxAtc+L84SQ==, tarball: https://registry.npmjs.org/@zkochan/js-yaml/-/js-yaml-0.0.7.tgz} hasBin: true - acorn-jsx@5.3.2: - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==, tarball: https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz} - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - acorn-walk@8.3.5: resolution: {integrity: sha512-HEHNfbars9v4pgpW6SO1KSPkfoS0xVOM/9UzkJltjlsHZmJasxg8aXkuZa7SMf8vKGIBhpUsPluQSqhJFCqebw==, tarball: https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.5.tgz} engines: {node: '>=0.4.0'} @@ -4453,10 +3622,6 @@ packages: engines: {node: '>=0.4.0'} hasBin: true - address@2.0.3: - resolution: {integrity: sha512-XNAb/a6TCqou+TufU8/u11HCu9x1gYvOoxLwtlXgIqmkrYQADVv6ljyW2zwiPhHz9R1gItAWpuDrdJMmrOBFEA==, tarball: https://registry.npmjs.org/address/-/address-2.0.3.tgz} - engines: {node: '>= 16.0.0'} - agent-base@7.1.4: resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==, tarball: https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz} engines: {node: '>= 14'} @@ -4469,12 +3634,6 @@ packages: ajv: optional: true - ajv@6.15.0: - resolution: {integrity: sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==, tarball: https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz} - - ajv@8.18.0: - resolution: {integrity: sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==, tarball: https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz} - ajv@8.20.0: resolution: {integrity: sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==, tarball: https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz} @@ -4541,10 +3700,6 @@ packages: resolution: {integrity: sha512-+25nxyyznAXF7Nef3y0EbBeqmGZgeN/BxHX29Rs39djAfaFalmQ89SE6CWyDCHzGL0yt/ycBtNOmGTW0FyGWNw==, tarball: https://registry.npmjs.org/archiver/-/archiver-5.3.2.tgz} engines: {node: '>= 10'} - are-docs-informative@0.0.2: - resolution: {integrity: sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==, tarball: https://registry.npmjs.org/are-docs-informative/-/are-docs-informative-0.0.2.tgz} - engines: {node: '>=14'} - arg@4.1.3: resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==, tarball: https://registry.npmjs.org/arg/-/arg-4.1.3.tgz} @@ -4557,10 +3712,6 @@ packages: aria-query@5.3.0: resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==, tarball: https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz} - aria-query@5.3.2: - resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==, tarball: https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz} - engines: {node: '>= 0.4'} - array-back@3.1.0: resolution: {integrity: sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==, tarball: https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz} engines: {node: '>=6'} @@ -4569,38 +3720,10 @@ packages: resolution: {integrity: sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==, tarball: https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz} engines: {node: '>=8'} - array-buffer-byte-length@1.0.2: - resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==, tarball: https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz} - engines: {node: '>= 0.4'} - - array-includes@3.1.9: - resolution: {integrity: sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==, tarball: https://registry.npmjs.org/array-includes/-/array-includes-3.1.9.tgz} - engines: {node: '>= 0.4'} - array-union@2.1.0: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==, tarball: https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz} engines: {node: '>=8'} - array.prototype.findlast@1.2.5: - resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==, tarball: https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz} - engines: {node: '>= 0.4'} - - array.prototype.flat@1.3.3: - resolution: {integrity: sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==, tarball: https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz} - engines: {node: '>= 0.4'} - - array.prototype.flatmap@1.3.3: - resolution: {integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==, tarball: https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz} - engines: {node: '>= 0.4'} - - array.prototype.tosorted@1.1.4: - resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==, tarball: https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz} - engines: {node: '>= 0.4'} - - arraybuffer.prototype.slice@1.0.4: - resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==, tarball: https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz} - engines: {node: '>= 0.4'} - arrify@1.0.1: resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==, tarball: https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz} engines: {node: '>=0.10.0'} @@ -4615,17 +3738,10 @@ packages: resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==, tarball: https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz} engines: {node: '>=12'} - ast-types-flow@0.0.8: - resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==, tarball: https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz} - astral-regex@2.0.0: resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==, tarball: https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz} engines: {node: '>=8'} - async-function@1.0.0: - resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==, tarball: https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz} - engines: {node: '>= 0.4'} - async-retry@1.3.3: resolution: {integrity: sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==, tarball: https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz} @@ -4646,59 +3762,9 @@ packages: resolution: {integrity: sha512-ooviqdwwgfIfNmDwo94wlshcdzfO64XV0Cg6oDsDYBJfITDz1EngD2z7DkbvCWn+XIMsIqW27sEVF6qcpJrRcg==, tarball: https://registry.npmjs.org/auto-bind/-/auto-bind-5.0.1.tgz} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - available-typed-arrays@1.0.7: - resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==, tarball: https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz} - engines: {node: '>= 0.4'} - - axe-core@4.11.1: - resolution: {integrity: sha512-BASOg+YwO2C+346x3LZOeoovTIoTrRqEsqMa6fmfAV0P+U9mFr9NsyOEpiYvFjbc64NMrSswhV50WdXzdb/Z5A==, tarball: https://registry.npmjs.org/axe-core/-/axe-core-4.11.1.tgz} - engines: {node: '>=4'} - axios@1.16.0: resolution: {integrity: sha512-6hp5CwvTPlN2A31g5dxnwAX0orzM7pmCRDLnZSX772mv8WDqICwFjowHuPs04Mc8deIld1+ejhtaMn5vp6b+1w==, tarball: https://registry.npmjs.org/axios/-/axios-1.16.0.tgz} - axobject-query@4.1.0: - resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==, tarball: https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz} - engines: {node: '>= 0.4'} - - babel-plugin-const-enum@1.2.0: - resolution: {integrity: sha512-o1m/6iyyFnp9MRsK1dHF3bneqyf3AlM2q3A/YbgQr2pCat6B6XJVDv2TXqzfY2RYUi4mak6WAksSBPlyYGx9dg==, tarball: https://registry.npmjs.org/babel-plugin-const-enum/-/babel-plugin-const-enum-1.2.0.tgz} - peerDependencies: - '@babel/core': ^7.0.0-0 - - babel-plugin-macros@3.1.0: - resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==, tarball: https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz} - engines: {node: '>=10', npm: '>=6'} - - babel-plugin-polyfill-corejs2@0.4.17: - resolution: {integrity: sha512-aTyf30K/rqAsNwN76zYrdtx8obu0E4KoUME29B1xj+B3WxgvWkp943vYQ+z8Mv3lw9xHXMHpvSPOBxzAkIa94w==, tarball: https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.17.tgz} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - - babel-plugin-polyfill-corejs3@0.13.0: - resolution: {integrity: sha512-U+GNwMdSFgzVmfhNm8GJUX88AadB3uo9KpJqS3FaqNIPKgySuvMb+bHPsOmmuWyIcuqZj/pzt1RUIUZns4y2+A==, tarball: https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.13.0.tgz} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - - babel-plugin-polyfill-corejs3@0.14.2: - resolution: {integrity: sha512-coWpDLJ410R781Npmn/SIBZEsAetR4xVi0SxLMXPaMO4lSf1MwnkGYMtkFxew0Dn8B3/CpbpYxN0JCgg8mn67g==, tarball: https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.14.2.tgz} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - - babel-plugin-polyfill-regenerator@0.6.8: - resolution: {integrity: sha512-M762rNHfSF1EV3SLtnCJXFoQbbIIz0OyRwnCmV0KPC7qosSfCO0QLTSuJX3ayAebubhE6oYBAYPrBA5ljowaZg==, tarball: https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.8.tgz} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - - babel-plugin-transform-typescript-metadata@0.3.2: - resolution: {integrity: sha512-mWEvCQTgXQf48yDqgN7CH50waTyYBeP2Lpqx4nNWab9sxEpdXVeKgfj1qYI2/TgUPQtNFZ85i3PemRtnXVYYJg==, tarball: https://registry.npmjs.org/babel-plugin-transform-typescript-metadata/-/babel-plugin-transform-typescript-metadata-0.3.2.tgz} - peerDependencies: - '@babel/core': ^7 - '@babel/traverse': ^7 - peerDependenciesMeta: - '@babel/traverse': - optional: true - balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==, tarball: https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz} @@ -4808,14 +3874,6 @@ packages: resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==, tarball: https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz} engines: {node: '>= 0.4'} - call-bind@1.0.8: - resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==, tarball: https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz} - engines: {node: '>= 0.4'} - - call-bound@1.0.4: - resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==, tarball: https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz} - engines: {node: '>= 0.4'} - callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==, tarball: https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz} engines: {node: '>=6'} @@ -4976,10 +4034,6 @@ packages: colorette@2.0.20: resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==, tarball: https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz} - columnify@1.6.0: - resolution: {integrity: sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q==, tarball: https://registry.npmjs.org/columnify/-/columnify-1.6.0.tgz} - engines: {node: '>=8.0.0'} - combined-stream@1.0.8: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==, tarball: https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz} engines: {node: '>= 0.8'} @@ -5004,14 +4058,6 @@ packages: resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==, tarball: https://registry.npmjs.org/commander/-/commander-9.5.0.tgz} engines: {node: ^12.20.0 || >=14} - comment-parser@1.4.1: - resolution: {integrity: sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==, tarball: https://registry.npmjs.org/comment-parser/-/comment-parser-1.4.1.tgz} - engines: {node: '>= 12.0.0'} - - comment-parser@1.4.5: - resolution: {integrity: sha512-aRDkn3uyIlCFfk5NUA+VdwMmMsh8JGhc4hapfV4yxymHGQ3BVskMQfoXGpCo5IoBuQ9tS5iiVKhCpTcB4pW4qw==, tarball: https://registry.npmjs.org/comment-parser/-/comment-parser-1.4.5.tgz} - engines: {node: '>= 12.0.0'} - common-tags@1.8.2: resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==, tarball: https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz} engines: {node: '>=4.0.0'} @@ -5038,9 +4084,6 @@ packages: config-chain@1.1.13: resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==, tarball: https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz} - confusing-browser-globals@1.0.11: - resolution: {integrity: sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==, tarball: https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz} - consola@2.15.3: resolution: {integrity: sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==, tarball: https://registry.npmjs.org/consola/-/consola-2.15.3.tgz} @@ -5065,16 +4108,9 @@ packages: resolution: {integrity: sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==, tarball: https://registry.npmjs.org/cookie/-/cookie-1.1.1.tgz} engines: {node: '>=18'} - core-js-compat@3.49.0: - resolution: {integrity: sha512-VQXt1jr9cBz03b331DFDCCP90b3fanciLkgiOoy8SBHy06gNf+vQ1A3WFLqG7I8TipYIKeYK9wxd0tUrvHcOZA==, tarball: https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.49.0.tgz} - core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==, tarball: https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz} - cosmiconfig@7.1.0: - resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==, tarball: https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz} - engines: {node: '>=10'} - cosmiconfig@8.3.6: resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==, tarball: https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz} engines: {node: '>=14'} @@ -5149,9 +4185,6 @@ packages: csv-parse@7.0.2: resolution: {integrity: sha512-uKZghv9UmPkMVLYy//KZ9HFAIJsl7wkhoEdIL0+rhuSY9pZQlhaeGEDPIe+/w7eh81MOql8Q/9+inAGWG6ZHYA==, tarball: https://registry.npmjs.org/csv-parse/-/csv-parse-7.0.2.tgz} - damerau-levenshtein@1.0.8: - resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==, tarball: https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz} - data-uri-to-buffer@2.0.2: resolution: {integrity: sha512-ND9qDTLc6diwj+Xe5cdAgVTbLVdXbtxTJRXRhli8Mowuaan+0EJOtdqJ0QCHNSSPyoXGx9HX2/VMnKeC34AChA==, tarball: https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-2.0.2.tgz} @@ -5167,18 +4200,6 @@ packages: resolution: {integrity: sha512-23XHcCF+coGYevirZceTVD7NdJOqVn+49IHyxgszm+JIiHLoB2TkmPtsYkNWT1pvRSGkc35L6NHs0yHkN2SumA==, tarball: https://registry.npmjs.org/data-urls/-/data-urls-7.0.0.tgz} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} - data-view-buffer@1.0.2: - resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==, tarball: https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz} - engines: {node: '>= 0.4'} - - data-view-byte-length@1.0.2: - resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==, tarball: https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz} - engines: {node: '>= 0.4'} - - data-view-byte-offset@1.0.1: - resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==, tarball: https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz} - engines: {node: '>= 0.4'} - dataloader@2.2.3: resolution: {integrity: sha512-y2krtASINtPFS1rSDjacrFgn1dcUuoREVabwlOGOe4SdxenREqwjwjElAdwvbGM7kgZz9a3KVicWR7vcz8rnzA==, tarball: https://registry.npmjs.org/dataloader/-/dataloader-2.2.3.tgz} @@ -5190,14 +4211,6 @@ packages: resolution: {integrity: sha512-Xks6RUDLZFdz8LIdR6q0MTH44k7FikOmnh5xkSjMig6ch45afc8sjTjRQf3P6ax8dMgcQrYO/AR2RGWURrruqw==, tarball: https://registry.npmjs.org/debounce/-/debounce-2.2.0.tgz} engines: {node: '>=18'} - debug@3.2.7: - resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==, tarball: https://registry.npmjs.org/debug/-/debug-3.2.7.tgz} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - debug@4.4.3: resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==, tarball: https://registry.npmjs.org/debug/-/debug-4.4.3.tgz} engines: {node: '>=6.0'} @@ -5226,9 +4239,6 @@ packages: resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==, tarball: https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz} engines: {node: '>=4.0.0'} - deep-is@0.1.4: - resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==, tarball: https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz} - deepmerge@4.3.1: resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==, tarball: https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz} engines: {node: '>=0.10.0'} @@ -5285,11 +4295,6 @@ packages: detect-node@2.1.0: resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==, tarball: https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz} - detect-port@2.1.0: - resolution: {integrity: sha512-epZuWb/6Q62L+nDHJc/hQAqf8pylsqgk3BpZXVBx1CDnr3nkrVNn73Uu1rXcFzkNcc+hkP3whuOg7JZYaQB65Q==, tarball: https://registry.npmjs.org/detect-port/-/detect-port-2.1.0.tgz} - engines: {node: '>= 16.0.0'} - hasBin: true - diff@3.5.1: resolution: {integrity: sha512-Z3u54A8qGyqFOSr2pk0ijYs8mOE9Qz8kTvtKeBI+upoG9j04Sq+oI7W8zAJiQybDcESET8/uIdHzs0p3k4fZlw==, tarball: https://registry.npmjs.org/diff/-/diff-3.5.1.tgz} engines: {node: '>=0.3.1'} @@ -5306,10 +4311,6 @@ packages: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==, tarball: https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz} engines: {node: '>=8'} - doctrine@2.1.0: - resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==, tarball: https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz} - engines: {node: '>=0.10.0'} - dom-accessibility-api@0.5.16: resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==, tarball: https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz} @@ -5377,10 +4378,6 @@ packages: end-of-stream@1.4.5: resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==, tarball: https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz} - enhanced-resolve@5.19.0: - resolution: {integrity: sha512-phv3E1Xl4tQOShqSte26C7Fl84EwUdZsyOuSSk9qtAGyyQs2s3jJzComh+Abf4g187lUUAvH+H26omrqia2aGg==, tarball: https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.19.0.tgz} - engines: {node: '>=10.13.0'} - enquirer@2.3.6: resolution: {integrity: sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==, tarball: https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz} engines: {node: '>=8.6'} @@ -5419,10 +4416,6 @@ packages: error-stack-parser@2.1.4: resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==, tarball: https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz} - es-abstract@1.24.1: - resolution: {integrity: sha512-zHXBLhP+QehSSbsS9Pt23Gg964240DPd6QCf8WpkqEXxQ7fhdZzYsocOr5u7apWonsS5EjZDmTF+/slGMyasvw==, tarball: https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.1.tgz} - engines: {node: '>= 0.4'} - es-define-property@1.0.1: resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==, tarball: https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz} engines: {node: '>= 0.4'} @@ -5431,10 +4424,6 @@ packages: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==, tarball: https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz} engines: {node: '>= 0.4'} - es-iterator-helpers@1.2.2: - resolution: {integrity: sha512-BrUQ0cPTB/IwXj23HtwHjS9n7O4h9FX94b4xc5zlTHxeLgTAdzYUDyy6KdExAl9lbN5rtfe44xpjpmj9grxs5w==, tarball: https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.2.tgz} - engines: {node: '>= 0.4'} - es-module-lexer@2.3.1: resolution: {integrity: sha512-shc1dbU90Yl/xq1QrC7QRtfcwURZuVRfPhZbDoldJ1cn1gzDvBaBWlv0eFolj5+0znnPJz5TXLxsN77X/12KTA==, tarball: https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.3.1.tgz} @@ -5442,22 +4431,10 @@ packages: resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==, tarball: https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz} engines: {node: '>= 0.4'} - es-object-atoms@1.1.2: - resolution: {integrity: sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==, tarball: https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz} - engines: {node: '>= 0.4'} - es-set-tostringtag@2.1.0: resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==, tarball: https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz} engines: {node: '>= 0.4'} - es-shim-unscopables@1.1.0: - resolution: {integrity: sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==, tarball: https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz} - engines: {node: '>= 0.4'} - - es-to-primitive@1.3.0: - resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==, tarball: https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz} - engines: {node: '>= 0.4'} - es-toolkit@1.44.0: resolution: {integrity: sha512-6penXeZalaV88MM3cGkFZZfOoLGWshWWfdy0tWw/RlVVyhvMaWSBTOvXNeiW3e5FwdS5ePW0LGEu17zT139ktg==, tarball: https://registry.npmjs.org/es-toolkit/-/es-toolkit-1.44.0.tgz} @@ -5504,243 +4481,14 @@ packages: resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==, tarball: https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz} engines: {node: '>=12'} - eslint-compat-utils@0.5.1: - resolution: {integrity: sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==, tarball: https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.5.1.tgz} - engines: {node: '>=12'} - peerDependencies: - eslint: '>=6.0.0' - - eslint-config-prettier@10.1.8: - resolution: {integrity: sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==, tarball: https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.8.tgz} - hasBin: true - peerDependencies: - eslint: '>=7.0.0' - - eslint-config-prettier@9.1.2: - resolution: {integrity: sha512-iI1f+D2ViGn+uvv5HuHVUamg8ll4tN+JRHGc6IJi4TP9Kl976C57fzPXgseXNs8v0iA8aSJpHsTWjDb9QJamGQ==, tarball: https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.2.tgz} - hasBin: true - peerDependencies: - eslint: '>=7.0.0' - - eslint-import-context@0.1.9: - resolution: {integrity: sha512-K9Hb+yRaGAGUbwjhFNHvSmmkZs9+zbuoe3kFQ4V1wYjrepUFYM2dZAfNtjbbj3qsPfUfsA68Bx/ICWQMi+C8Eg==, tarball: https://registry.npmjs.org/eslint-import-context/-/eslint-import-context-0.1.9.tgz} - engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} - peerDependencies: - unrs-resolver: ^1.0.0 - peerDependenciesMeta: - unrs-resolver: - optional: true - - eslint-import-resolver-typescript@4.4.4: - resolution: {integrity: sha512-1iM2zeBvrYmUNTj2vSC/90JTHDth+dfOfiNKkxApWRsTJYNrc8rOdxxIf5vazX+BiAXTeOT0UvWpGI/7qIWQOw==, tarball: https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-4.4.4.tgz} - engines: {node: ^16.17.0 || >=18.6.0} - peerDependencies: - eslint: '*' - eslint-plugin-import: '*' - eslint-plugin-import-x: '*' - peerDependenciesMeta: - eslint-plugin-import: - optional: true - eslint-plugin-import-x: - optional: true - - eslint-module-utils@2.12.1: - resolution: {integrity: sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==, tarball: https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.1.tgz} - 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-x@7.8.0: - resolution: {integrity: sha512-7Ds8+wAAoV3T+LAKeu39Y5BzXCrGKrcISfgKEqTS4BDN8SFEDQd0S43jiQ8vIa3wUKD07qitZdfzlenSi8/0qQ==, tarball: https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.8.0.tgz} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - eslint: '>=8' - - eslint-plugin-eslint-comments@3.2.0: - resolution: {integrity: sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==, tarball: https://registry.npmjs.org/eslint-plugin-eslint-comments/-/eslint-plugin-eslint-comments-3.2.0.tgz} - engines: {node: '>=6.5.0'} - peerDependencies: - eslint: '>=4.19.1' - - eslint-plugin-import-x@4.16.1: - resolution: {integrity: sha512-vPZZsiOKaBAIATpFE2uMI4w5IRwdv/FpQ+qZZMR4E+PeOcM4OeoEbqxRMnywdxP19TyB/3h6QBB0EWon7letSQ==, tarball: https://registry.npmjs.org/eslint-plugin-import-x/-/eslint-plugin-import-x-4.16.1.tgz} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - '@typescript-eslint/utils': 8.56.1 - eslint: ^8.57.0 || ^9.0.0 - eslint-import-resolver-node: '*' - peerDependenciesMeta: - '@typescript-eslint/utils': - optional: true - eslint-import-resolver-node: - optional: true - - eslint-plugin-jest-formatting@3.1.0: - resolution: {integrity: sha512-XyysraZ1JSgGbLSDxjj5HzKKh0glgWf+7CkqxbTqb7zEhW7X2WHo5SBQ8cGhnszKN+2Lj3/oevBlHNbHezoc/A==, tarball: https://registry.npmjs.org/eslint-plugin-jest-formatting/-/eslint-plugin-jest-formatting-3.1.0.tgz} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: '>=0.8.0' - - eslint-plugin-jest@28.14.0: - resolution: {integrity: sha512-P9s/qXSMTpRTerE2FQ0qJet2gKbcGyFTPAJipoKxmWqR6uuFqIqk8FuEfg5yBieOezVrEfAMZrEwJ6yEp+1MFQ==, tarball: https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-28.14.0.tgz} - engines: {node: ^16.10.0 || ^18.12.0 || >=20.0.0} - peerDependencies: - '@typescript-eslint/eslint-plugin': ^6.0.0 || ^7.0.0 || ^8.0.0 - eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 - jest: '*' - peerDependenciesMeta: - '@typescript-eslint/eslint-plugin': - optional: true - jest: - optional: true - - eslint-plugin-jsdoc@50.8.0: - resolution: {integrity: sha512-UyGb5755LMFWPrZTEqqvTJ3urLz1iqj+bYOHFNag+sw3NvaMWP9K2z+uIn37XfNALmQLQyrBlJ5mkiVPL7ADEg==, tarball: https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-50.8.0.tgz} - engines: {node: '>=18'} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 - - eslint-plugin-jsx-a11y@6.10.2: - resolution: {integrity: sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==, tarball: https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz} - engines: {node: '>=4.0'} - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9 - - eslint-plugin-n@17.24.0: - resolution: {integrity: sha512-/gC7/KAYmfNnPNOb3eu8vw+TdVnV0zhdQwexsw6FLXbhzroVj20vRn2qL8lDWDGnAQ2J8DhdfvXxX9EoxvERvw==, tarball: https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-17.24.0.tgz} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: '>=8.23.0' - - eslint-plugin-no-catch-all@1.1.0: - resolution: {integrity: sha512-VkP62jLTmccPrFGN/W6V7a3SEwdtTZm+Su2k4T3uyJirtkm0OMMm97h7qd8pRFAHus/jQg9FpUpLRc7sAylBEQ==, tarball: https://registry.npmjs.org/eslint-plugin-no-catch-all/-/eslint-plugin-no-catch-all-1.1.0.tgz} - peerDependencies: - eslint: '>=2.0.0' - - eslint-plugin-prettier@5.5.6: - resolution: {integrity: sha512-ifetmTcxWfz+4qRW3pH/ujdTq2jQIj59AxJMIN26K5avYgU8dxycUETQonWiW+wPrYXA0j3Try0l1CnwVQtDqQ==, tarball: https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.5.6.tgz} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - '@types/eslint': '>=8.0.0' - eslint: '>=8.0.0' - eslint-config-prettier: '>= 7.0.0 <10.0.0 || >=10.1.0' - prettier: '>=3.0.0' - peerDependenciesMeta: - '@types/eslint': - optional: true - eslint-config-prettier: - optional: true - - eslint-plugin-promise@7.2.1: - resolution: {integrity: sha512-SWKjd+EuvWkYaS+uN2csvj0KoP43YTu7+phKQ5v+xw6+A0gutVX2yqCeCkC3uLCJFiPfR2dD8Es5L7yUsmvEaA==, tarball: https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-7.2.1.tgz} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 - - eslint-plugin-react-hooks@5.2.0: - resolution: {integrity: sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==, tarball: https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.2.0.tgz} - engines: {node: '>=10'} - peerDependencies: - eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 - - eslint-plugin-react@7.37.5: - resolution: {integrity: sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==, tarball: https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.5.tgz} - engines: {node: '>=4'} - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 - - eslint-plugin-sort-class-members@1.21.0: - resolution: {integrity: sha512-QKV4jvGMu/ge1l4s1TUBC6rqqV/fbABWY7q2EeNpV3FRikoX6KuLhiNvS8UuMi+EERe0hKGrNU9e6ukFDxNnZQ==, tarball: https://registry.npmjs.org/eslint-plugin-sort-class-members/-/eslint-plugin-sort-class-members-1.21.0.tgz} - engines: {node: '>=4.0.0'} - peerDependencies: - eslint: '>=0.8.0' - - eslint-plugin-tsdoc@0.5.2: - resolution: {integrity: sha512-BlvqjWZdBJDIPO/YU3zcPCF23CvjYT3gyu63yo6b609NNV3D1b6zceAREy2xnweuBoDpZcLNuPyAUq9cvx6bbQ==, tarball: https://registry.npmjs.org/eslint-plugin-tsdoc/-/eslint-plugin-tsdoc-0.5.2.tgz} - - eslint-plugin-unused-imports@4.4.1: - resolution: {integrity: sha512-oZGYUz1X3sRMGUB+0cZyK2VcvRX5lm/vB56PgNNcU+7ficUCKm66oZWKUubXWnOuPjQ8PvmXtCViXBMONPe7tQ==, tarball: https://registry.npmjs.org/eslint-plugin-unused-imports/-/eslint-plugin-unused-imports-4.4.1.tgz} - peerDependencies: - '@typescript-eslint/eslint-plugin': ^8.0.0-0 || ^7.0.0 || ^6.0.0 || ^5.0.0 - eslint: ^10.0.0 || ^9.0.0 || ^8.0.0 - peerDependenciesMeta: - '@typescript-eslint/eslint-plugin': - optional: true - - eslint-scope@8.4.0: - resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==, tarball: https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - eslint-visitor-keys@3.4.3: - resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==, tarball: https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - eslint-visitor-keys@4.2.1: - resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==, tarball: https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - eslint-visitor-keys@5.0.1: - resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==, tarball: https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz} - engines: {node: ^20.19.0 || ^22.13.0 || >=24} - - eslint@9.39.5: - resolution: {integrity: sha512-DgZS62aPLXKlnxILS/AYCoRvHaZeXceIzlXPkkGGzJWSow1aEk0lbTlxUSlyjC8jcaKxAdOnTDz+o1JFSBsyjw==, tarball: https://registry.npmjs.org/eslint/-/eslint-9.39.5.tgz} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. - hasBin: true - peerDependencies: - jiti: '*' - peerDependenciesMeta: - jiti: - optional: true - - espree@10.4.0: - resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==, tarball: https://registry.npmjs.org/espree/-/espree-10.4.0.tgz} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - espree@9.6.1: - resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==, tarball: https://registry.npmjs.org/espree/-/espree-9.6.1.tgz} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==, tarball: https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz} engines: {node: '>=4'} hasBin: true - esquery@1.7.0: - resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==, tarball: https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz} - engines: {node: '>=0.10'} - - esrecurse@4.3.0: - resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==, tarball: https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz} - engines: {node: '>=4.0'} - - estraverse@5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==, tarball: https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz} - engines: {node: '>=4.0'} - estree-walker@3.0.3: resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==, tarball: https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz} - esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==, tarball: https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz} - engines: {node: '>=0.10.0'} - eventemitter3@4.0.7: resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==, tarball: https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz} @@ -5771,9 +4519,6 @@ packages: fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==, tarball: https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz} - fast-diff@1.3.0: - resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==, tarball: https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz} - fast-glob@3.3.3: resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==, tarball: https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz} engines: {node: '>=8.6.0'} @@ -5781,12 +4526,6 @@ packages: fast-json-parse@1.0.3: resolution: {integrity: sha512-FRWsaZRWEJ1ESVNbDWmsAlqDk96gPQezzLghafp5J4GUKjbCz3OkAHuZs5TuPEtkbVQERysLp9xv6c24fBm8Aw==, tarball: https://registry.npmjs.org/fast-json-parse/-/fast-json-parse-1.0.3.tgz} - fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==, tarball: https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz} - - fast-levenshtein@2.0.6: - resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==, tarball: https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz} - fast-levenshtein@3.0.0: resolution: {integrity: sha512-hKKNajm46uNmTlhHSyZkmToAc56uZJwYq7yrciZjqOxnlfQwERDQJmHPUp7m1m9wx8vgOe8IaCKZ5Kv2k1DdCQ==, tarball: https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-3.0.0.tgz} @@ -5845,10 +4584,6 @@ packages: resolution: {integrity: sha512-ej8ksPF4x6e5wvK9yevct0UCXh8TTFlWGVLlgjZuoBH1HwjIfKE/IdL5mq89sFA7zELi1VhKpmtDnrs7zWyeyg==, tarball: https://registry.npmjs.org/figures/-/figures-5.0.0.tgz} engines: {node: '>=14'} - file-entry-cache@8.0.0: - resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==, tarball: https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz} - engines: {node: '>=16.0.0'} - filelist@1.0.6: resolution: {integrity: sha512-5giy2PkLYY1cP39p17Ech+2xlpTRL9HLspOfEgm0L6CwBXBTgsK5ou0JtzYuepxkaQ/tvhCFIJ5uXo0OrM2DxA==, tarball: https://registry.npmjs.org/filelist/-/filelist-1.0.6.tgz} @@ -5867,10 +4602,6 @@ packages: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==, tarball: https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz} engines: {node: '>=8'} - find-up@5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==, tarball: https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz} - engines: {node: '>=10'} - find-up@6.3.0: resolution: {integrity: sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==, tarball: https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -5878,10 +4609,6 @@ packages: find-yarn-workspace-root@2.0.0: resolution: {integrity: sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==, tarball: https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz} - flat-cache@4.0.1: - resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==, tarball: https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz} - engines: {node: '>=16'} - flat@5.0.2: resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==, tarball: https://registry.npmjs.org/flat/-/flat-5.0.2.tgz} hasBin: true @@ -5889,9 +4616,6 @@ packages: flatstr@1.0.12: resolution: {integrity: sha512-4zPxDyhCyiN2wIAtSLI6gc82/EjqZc1onI4Mz/l0pWrAlsSfYH/2ZIcU+e3oA2wDwbzIWNKwa23F8rh6+DRWkw==, tarball: https://registry.npmjs.org/flatstr/-/flatstr-1.0.12.tgz} - flatted@3.4.2: - resolution: {integrity: sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==, tarball: https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz} - follow-redirects@1.15.11: resolution: {integrity: sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==, tarball: https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz} engines: {node: '>=4.0'} @@ -5910,10 +4634,6 @@ packages: debug: optional: true - for-each@0.3.5: - resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==, tarball: https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz} - engines: {node: '>= 0.4'} - foreground-child@3.3.1: resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==, tarball: https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz} engines: {node: '>=14'} @@ -5974,17 +4694,6 @@ packages: function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==, tarball: https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz} - function.prototype.name@1.1.8: - resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==, tarball: https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz} - engines: {node: '>= 0.4'} - - functions-have-names@1.2.3: - resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==, tarball: https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz} - - generator-function@2.0.1: - resolution: {integrity: sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==, tarball: https://registry.npmjs.org/generator-function/-/generator-function-2.0.1.tgz} - engines: {node: '>= 0.4'} - gensync@1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==, tarball: https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz} engines: {node: '>=6.9.0'} @@ -6028,13 +4737,6 @@ packages: resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==, tarball: https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz} engines: {node: '>=16'} - get-symbol-description@1.1.0: - resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==, tarball: https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz} - engines: {node: '>= 0.4'} - - get-tsconfig@4.13.6: - resolution: {integrity: sha512-shZT/QMiSHc/YBLxxOkMtgSid5HFoauqCE3/exfsEcwg1WkeqjG+V40yBbBrsD+jW2HDXcs28xOfcbm2jI8Ddw==, tarball: https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.13.6.tgz} - git-diff@2.0.7: resolution: {integrity: sha512-/+vyWaKNUJLcVT+tm5Hsly2xDcIs49EkZstxqW7ap1ZiZ0BECviLK1iv9/f4cGhlKBokeAf61QkTDnL88H+Uhg==, tarball: https://registry.npmjs.org/git-diff/-/git-diff-2.0.7.tgz} engines: {node: '>= 4.8.0'} @@ -6046,10 +4748,6 @@ packages: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==, tarball: https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz} engines: {node: '>= 6'} - glob-parent@6.0.2: - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==, tarball: https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz} - engines: {node: '>=10.13.0'} - glob@10.5.0: resolution: {integrity: sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==, tarball: https://registry.npmjs.org/glob/-/glob-10.5.0.tgz} deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me @@ -6072,22 +4770,6 @@ packages: resolution: {integrity: sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==, tarball: https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz} engines: {node: '>=10.0'} - globals@14.0.0: - resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==, tarball: https://registry.npmjs.org/globals/-/globals-14.0.0.tgz} - engines: {node: '>=18'} - - globals@15.15.0: - resolution: {integrity: sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==, tarball: https://registry.npmjs.org/globals/-/globals-15.15.0.tgz} - engines: {node: '>=18'} - - globals@16.5.0: - resolution: {integrity: sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==, tarball: https://registry.npmjs.org/globals/-/globals-16.5.0.tgz} - engines: {node: '>=18'} - - globals@17.7.0: - resolution: {integrity: sha512-Czmyns5dUsq4seFBR/Kdydhmo8y9kC79hiSkPn0YcGtNnYWnrgt0vjrSjx9tspoDGWm2CMarffRuLjM4xUz8xg==, tarball: https://registry.npmjs.org/globals/-/globals-17.7.0.tgz} - engines: {node: '>=18'} - globalthis@1.0.4: resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==, tarball: https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz} engines: {node: '>= 0.4'} @@ -6096,9 +4778,6 @@ packages: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==, tarball: https://registry.npmjs.org/globby/-/globby-11.1.0.tgz} engines: {node: '>=10'} - globrex@0.1.2: - resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==, tarball: https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz} - gopd@1.2.0: resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==, tarball: https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz} engines: {node: '>= 0.4'} @@ -6184,10 +4863,6 @@ packages: resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==, tarball: https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz} engines: {node: '>=6'} - has-bigints@1.1.0: - resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==, tarball: https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz} - engines: {node: '>= 0.4'} - has-flag@3.0.0: resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==, tarball: https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz} engines: {node: '>=4'} @@ -6199,10 +4874,6 @@ packages: has-property-descriptors@1.0.2: resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==, tarball: https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz} - has-proto@1.2.0: - resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==, tarball: https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz} - engines: {node: '>= 0.4'} - has-symbols@1.1.0: resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==, tarball: https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz} engines: {node: '>= 0.4'} @@ -6305,10 +4976,6 @@ packages: resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==, tarball: https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz} engines: {node: '>= 4'} - ignore@7.0.6: - resolution: {integrity: sha512-BAg6QkE8W+TuQLrrw0Ugr7HegXduRuuj8/ti2kSOc+jz1dmx8/WNcjr6XGnq5YpDWxFwwaavqD0+jIUOKelTsw==, tarball: https://registry.npmjs.org/ignore/-/ignore-7.0.6.tgz} - engines: {node: '>= 4'} - immutable@3.7.6: resolution: {integrity: sha512-AizQPcaofEtO11RZhPPHBOJRdo/20MKQF9mBLnVkBoyHi1/zXK8fzVdnEpSV9gxqtnh6Qomfp3F0xT5qP/vThw==, tarball: https://registry.npmjs.org/immutable/-/immutable-3.7.6.tgz} engines: {node: '>=0.8.0'} @@ -6327,10 +4994,6 @@ packages: resolution: {integrity: sha512-P9J71vT5nLlDeV8FHs5nNxaLbrpfAV5cF5srvbZfpwpcJoM/xZR3hiv+q+SAnuSmuGbXMWud063iIMx/V/EWZQ==, tarball: https://registry.npmjs.org/import-from/-/import-from-4.0.0.tgz} engines: {node: '>=12.2'} - imurmurhash@0.1.4: - resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==, tarball: https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz} - engines: {node: '>=0.8.19'} - indent-string@4.0.0: resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==, tarball: https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz} engines: {node: '>=8'} @@ -6375,10 +5038,6 @@ packages: react-devtools-core: optional: true - internal-slot@1.1.0: - resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==, tarball: https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz} - engines: {node: '>= 0.4'} - interpret@1.4.0: resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==, tarball: https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz} engines: {node: '>= 0.10'} @@ -6393,39 +5052,16 @@ packages: resolution: {integrity: sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==, tarball: https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz} engines: {node: '>=0.10.0'} - is-array-buffer@3.0.5: - resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==, tarball: https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz} - engines: {node: '>= 0.4'} - is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==, tarball: https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz} is-arrayish@0.3.4: resolution: {integrity: sha512-m6UrgzFVUYawGBh1dUsWR5M2Clqic9RVXC/9f8ceNlv2IcO9j9J/z8UoCLPqtsPBFNzEpfR3xftohbfqDx8EQA==, tarball: https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.4.tgz} - is-async-function@2.1.1: - resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==, tarball: https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz} - engines: {node: '>= 0.4'} - - is-bigint@1.1.0: - resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==, tarball: https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz} - engines: {node: '>= 0.4'} - is-binary-path@2.1.0: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==, tarball: https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz} engines: {node: '>=8'} - is-boolean-object@1.2.2: - resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==, tarball: https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz} - engines: {node: '>= 0.4'} - - is-bun-module@2.0.0: - resolution: {integrity: sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ==, tarball: https://registry.npmjs.org/is-bun-module/-/is-bun-module-2.0.0.tgz} - - is-callable@1.2.7: - resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==, tarball: https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz} - engines: {node: '>= 0.4'} - is-core-module@2.16.1: resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==, tarball: https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz} engines: {node: '>= 0.4'} @@ -6434,14 +5070,6 @@ packages: resolution: {integrity: sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==, tarball: https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.2.tgz} engines: {node: '>= 0.4'} - is-data-view@1.0.2: - resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==, tarball: https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz} - engines: {node: '>= 0.4'} - - is-date-object@1.1.0: - resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==, tarball: https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz} - engines: {node: '>= 0.4'} - is-deflate@1.0.0: resolution: {integrity: sha512-YDoFpuZWu1VRXlsnlYMzKyVRITXj7Ej/V9gXQ2/pAe7X1J7M/RNOqaIYi6qUn+B7nGyB9pDXrv02dsB58d2ZAQ==, tarball: https://registry.npmjs.org/is-deflate/-/is-deflate-1.0.0.tgz} @@ -6463,10 +5091,6 @@ packages: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==, tarball: https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz} engines: {node: '>=0.10.0'} - is-finalizationregistry@1.1.1: - resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==, tarball: https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz} - engines: {node: '>= 0.4'} - is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==, tarball: https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz} engines: {node: '>=8'} @@ -6479,10 +5103,6 @@ packages: resolution: {integrity: sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==, tarball: https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.1.0.tgz} engines: {node: '>=18'} - is-generator-function@1.1.2: - resolution: {integrity: sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==, tarball: https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.2.tgz} - engines: {node: '>= 0.4'} - is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==, tarball: https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz} engines: {node: '>=0.10.0'} @@ -6513,21 +5133,9 @@ packages: is-lower-case@2.0.2: resolution: {integrity: sha512-bVcMJy4X5Og6VZfdOZstSexlEy20Sr0k/p/b2IlQJlfdKAQuMpiv5w2Ccxb8sKdRUNAG1PnHVHjFSdRDVS6NlQ==, tarball: https://registry.npmjs.org/is-lower-case/-/is-lower-case-2.0.2.tgz} - is-map@2.0.3: - resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==, tarball: https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz} - engines: {node: '>= 0.4'} - - is-negative-zero@2.0.3: - resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==, tarball: https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz} - engines: {node: '>= 0.4'} - is-node-process@1.2.0: resolution: {integrity: sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==, tarball: https://registry.npmjs.org/is-node-process/-/is-node-process-1.2.0.tgz} - is-number-object@1.1.1: - resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==, tarball: https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz} - engines: {node: '>= 0.4'} - is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==, tarball: https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz} engines: {node: '>=0.12.0'} @@ -6539,10 +5147,6 @@ packages: is-potential-custom-element-name@1.0.1: resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==, tarball: https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz} - is-regex@1.2.1: - resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==, tarball: https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz} - engines: {node: '>= 0.4'} - is-relative@1.0.0: resolution: {integrity: sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==, tarball: https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz} engines: {node: '>=0.10.0'} @@ -6551,14 +5155,6 @@ packages: resolution: {integrity: sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==, tarball: https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz} engines: {node: '>=0.10.0'} - is-set@2.0.3: - resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==, tarball: https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz} - engines: {node: '>= 0.4'} - - is-shared-array-buffer@1.0.4: - resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==, tarball: https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz} - engines: {node: '>= 0.4'} - is-stream@2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==, tarball: https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz} engines: {node: '>=8'} @@ -6567,22 +5163,10 @@ packages: resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==, tarball: https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - is-string@1.1.1: - resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==, tarball: https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz} - engines: {node: '>= 0.4'} - is-subdir@1.2.0: resolution: {integrity: sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==, tarball: https://registry.npmjs.org/is-subdir/-/is-subdir-1.2.0.tgz} engines: {node: '>=4'} - is-symbol@1.1.1: - resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==, tarball: https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz} - engines: {node: '>= 0.4'} - - is-typed-array@1.1.15: - resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==, tarball: https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz} - engines: {node: '>= 0.4'} - is-unc-path@1.0.0: resolution: {integrity: sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==, tarball: https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz} engines: {node: '>=0.10.0'} @@ -6598,18 +5182,6 @@ packages: is-upper-case@2.0.2: resolution: {integrity: sha512-44pxmxAvnnAOwBg4tHPnkfvgjPwbc5QIsSstNU+YcJ1ovxVzCWpSGosPJOZh/a1tdl81fbgnLc9LLv+x2ywbPQ==, tarball: https://registry.npmjs.org/is-upper-case/-/is-upper-case-2.0.2.tgz} - is-weakmap@2.0.2: - resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==, tarball: https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz} - engines: {node: '>= 0.4'} - - is-weakref@1.1.1: - resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==, tarball: https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz} - engines: {node: '>= 0.4'} - - is-weakset@2.0.4: - resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==, tarball: https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz} - engines: {node: '>= 0.4'} - is-windows@1.0.2: resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==, tarball: https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz} engines: {node: '>=0.10.0'} @@ -6629,9 +5201,6 @@ packages: isarray@1.0.0: resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==, tarball: https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz} - isarray@2.0.5: - resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==, tarball: https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz} - iserror@0.0.2: resolution: {integrity: sha512-oKGGrFVaWwETimP3SiWwjDeY27ovZoyZPHtxblC4hCq9fXxed/jasx+ATWFFjCVSRZng8VTMsN1nDnGo6zMBSw==, tarball: https://registry.npmjs.org/iserror/-/iserror-0.0.2.tgz} @@ -6676,10 +5245,6 @@ packages: resolution: {integrity: sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==, tarball: https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz} engines: {node: '>=8'} - iterator.prototype@1.1.5: - resolution: {integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==, tarball: https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.5.tgz} - engines: {node: '>= 0.4'} - jackspeak@3.4.3: resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==, tarball: https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz} @@ -6692,9 +5257,6 @@ packages: resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==, tarball: https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz} hasBin: true - jju@1.4.0: - resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==, tarball: https://registry.npmjs.org/jju/-/jju-1.4.0.tgz} - jose@5.10.0: resolution: {integrity: sha512-s+3Al/p9g32Iq+oqXxkW//7jk2Vig6FF1CFqzVXoTUXt2qz89YWbL+OwS17NFYEvxC35n0FKeGO2LGYSxeM2Gg==, tarball: https://registry.npmjs.org/jose/-/jose-5.10.0.tgz} @@ -6713,10 +5275,6 @@ packages: resolution: {integrity: sha512-1td788aAnnZ5qs7V2QIRl1owjtYpbKt749Y3xauqQgwIIGF/xXWz1wMTEBx5O3LK3lXLVuqXPdPxj2BoFHaW9Q==, tarball: https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.0.tgz} hasBin: true - jsdoc-type-pratt-parser@4.1.0: - resolution: {integrity: sha512-Hicd6JK5Njt2QB6XYFS7ok9e37O8AYk3jTcppG4YVQnYjOemymvTcmc7OWsmq/Qqj5TdRFO5/x/tIPmBeRtGHg==, tarball: https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.1.0.tgz} - engines: {node: '>=12.0.0'} - jsdom@25.0.1: resolution: {integrity: sha512-8i7LzZj7BF8uplX+ZyOlIz86V6TAsSs+np6m1kpW9u0JWi4z/1t+FzcK1aek+ybTnAC4KhBL4uXCNT0wcUIeCw==, tarball: https://registry.npmjs.org/jsdom/-/jsdom-25.0.1.tgz} engines: {node: '>=18'} @@ -6754,18 +5312,12 @@ packages: engines: {node: '>=16.0.0'} hasBin: true - json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==, tarball: https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz} - json-schema-traverse@1.0.0: resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==, tarball: https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz} json-schema-typed@8.0.2: resolution: {integrity: sha512-fQhoXdcvc3V28x7C7BMs4P5+kNlgUURe2jmUT1T//oBRMDrqy1QPelJimwZGo7Hg9VPV3EQV5Bnq4hbFy2vetA==, tarball: https://registry.npmjs.org/json-schema-typed/-/json-schema-typed-8.0.2.tgz} - json-stable-stringify-without-jsonify@1.0.1: - resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==, tarball: https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz} - json-stringify-deterministic@1.0.14: resolution: {integrity: sha512-aP0bu09AgPQ0siVLg+64SVR9jXRCxwM+fW8pheDCoMKc3fipsVojQtsKyuUdoy1319v/Bgm978q2Il6brzPTFg==, tarball: https://registry.npmjs.org/json-stringify-deterministic/-/json-stringify-deterministic-1.0.14.tgz} engines: {node: '>= 4'} @@ -6785,10 +5337,6 @@ packages: engines: {node: '>=6'} hasBin: true - jsonc-eslint-parser@2.4.2: - resolution: {integrity: sha512-1e4qoRgnn448pRuMvKGsFFymUCquZV0mpGgOyIKNgD3JVDTsVJyRBGH/Fm0tBb8WsWGgmB1mDe6/yJMQM37DUA==, tarball: https://registry.npmjs.org/jsonc-eslint-parser/-/jsonc-eslint-parser-2.4.2.tgz} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - jsonc-parser@3.2.0: resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==, tarball: https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz} @@ -6801,10 +5349,6 @@ packages: jsonfile@6.2.0: resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==, tarball: https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz} - jsx-ast-utils@3.3.5: - resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==, tarball: https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz} - engines: {node: '>=4.0'} - keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==, tarball: https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz} @@ -6820,13 +5364,6 @@ packages: '@types/node': '>=18' typescript: '>=5.0.4 <7' - language-subtag-registry@0.3.23: - resolution: {integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==, tarball: https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz} - - language-tags@1.0.9: - resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==, tarball: https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz} - engines: {node: '>=0.10'} - latest-version@7.0.0: resolution: {integrity: sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg==, tarball: https://registry.npmjs.org/latest-version/-/latest-version-7.0.0.tgz} engines: {node: '>=14.16'} @@ -6835,10 +5372,6 @@ packages: resolution: {integrity: sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==, tarball: https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz} engines: {node: '>= 0.6.3'} - levn@0.4.1: - resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==, tarball: https://registry.npmjs.org/levn/-/levn-0.4.1.tgz} - engines: {node: '>= 0.8.0'} - lilconfig@3.1.3: resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==, tarball: https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz} engines: {node: '>=14'} @@ -6869,10 +5402,6 @@ packages: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==, tarball: https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz} engines: {node: '>=8'} - locate-path@6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==, tarball: https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz} - engines: {node: '>=10'} - locate-path@7.2.0: resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==, tarball: https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -6880,9 +5409,6 @@ packages: lodash.camelcase@4.3.0: resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==, tarball: https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz} - lodash.debounce@4.0.8: - resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==, tarball: https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz} - lodash.defaults@4.2.0: resolution: {integrity: sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==, tarball: https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz} @@ -6895,9 +5421,6 @@ packages: lodash.isplainobject@4.0.6: resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==, tarball: https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz} - lodash.merge@4.6.2: - resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==, tarball: https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz} - lodash.sortby@4.7.0: resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==, tarball: https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz} @@ -7150,14 +5673,6 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - napi-postinstall@0.3.4: - resolution: {integrity: sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==, tarball: https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.3.4.tgz} - engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} - hasBin: true - - natural-compare@1.4.0: - resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==, tarball: https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz} - natural-orderby@2.0.3: resolution: {integrity: sha512-p7KTHxU0CUrcOXe62Zfrb5Z13nLvPhSWR/so3kFulUQU0sgUll2Z0LwpsLN351eOOD+hRGu/F1g+6xDfPeD++Q==, tarball: https://registry.npmjs.org/natural-orderby/-/natural-orderby-2.0.3.tgz} @@ -7176,10 +5691,6 @@ packages: engines: {node: '>=10.5.0'} deprecated: Use your platform's native DOMException instead - node-exports-info@1.6.0: - resolution: {integrity: sha512-pyFS63ptit/P5WqUkt+UUfe+4oevH+bFeIiPPdfb0pFeYEu/1ELnJu5l+5EcTKYL5M7zaAa7S8ddywgXypqKCw==, tarball: https://registry.npmjs.org/node-exports-info/-/node-exports-info-1.6.0.tgz} - engines: {node: '>= 0.4'} - node-fetch@2.7.0: resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==, tarball: https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz} engines: {node: 4.x || >=6.0.0} @@ -7341,10 +5852,6 @@ packages: resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==, tarball: https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz} engines: {node: '>= 6'} - object-inspect@1.13.4: - resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==, tarball: https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz} - engines: {node: '>= 0.4'} - object-keys@1.1.1: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==, tarball: https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz} engines: {node: '>= 0.4'} @@ -7357,22 +5864,6 @@ packages: resolution: {integrity: sha512-Y6tg5rHfsefSkfKujv2SwHulInROy/rCL5F4w0QOWxut8AnxYxf0YmNhTh95Zfyxpsudo66uqkux0ACFnyMSgQ==, tarball: https://registry.npmjs.org/object-treeify/-/object-treeify-4.0.1.tgz} engines: {node: '>= 16'} - object.assign@4.1.7: - resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==, tarball: https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz} - engines: {node: '>= 0.4'} - - object.entries@1.1.9: - resolution: {integrity: sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==, tarball: https://registry.npmjs.org/object.entries/-/object.entries-1.1.9.tgz} - engines: {node: '>= 0.4'} - - object.fromentries@2.0.8: - resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==, tarball: https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz} - engines: {node: '>= 0.4'} - - object.values@1.2.1: - resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==, tarball: https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz} - engines: {node: '>= 0.4'} - obug@2.1.4: resolution: {integrity: sha512-4a+OsYv9UktOJKE+l1A4OufDgdRF9PifWj+tJnHURo/P+WOxpG4GzUFL9qCalmWauao6ogiG+QvnCovwPoyAWA==, tarball: https://registry.npmjs.org/obug/-/obug-2.1.4.tgz} engines: {node: '>=12.20.0'} @@ -7404,10 +5895,6 @@ packages: resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==, tarball: https://registry.npmjs.org/open/-/open-8.4.2.tgz} engines: {node: '>=12'} - optionator@0.9.4: - resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==, tarball: https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz} - engines: {node: '>= 0.8.0'} - ora@5.3.0: resolution: {integrity: sha512-zAKMgGXUim0Jyd6CXK9lraBnD3H5yPGBPPOkC23a2BG6hsm4Zu6OQSjQuEtV0BHDf4aKHcUFvJiGRrFuW3MG8g==, tarball: https://registry.npmjs.org/ora/-/ora-5.3.0.tgz} engines: {node: '>=10'} @@ -7418,10 +5905,6 @@ packages: outvariant@1.4.3: resolution: {integrity: sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA==, tarball: https://registry.npmjs.org/outvariant/-/outvariant-1.4.3.tgz} - own-keys@1.0.1: - resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==, tarball: https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz} - engines: {node: '>= 0.4'} - oxc-resolver@11.20.0: resolution: {integrity: sha512-CblytBiV/a/ZXY34dsVU2NxhIOxMXst8CvDCtyBelVITgd7PLrKzbEbA6oKLdPjvDKDzCiW48qzmzZ+mYaqn+g==, tarball: https://registry.npmjs.org/oxc-resolver/-/oxc-resolver-11.20.0.tgz} @@ -7466,10 +5949,6 @@ packages: resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==, tarball: https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz} engines: {node: '>=8'} - p-locate@5.0.0: - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==, tarball: https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz} - engines: {node: '>=10'} - p-locate@6.0.0: resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==, tarball: https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -7506,9 +5985,6 @@ packages: resolution: {integrity: sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==, tarball: https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz} engines: {node: '>=0.8'} - parse-imports-exports@0.2.4: - resolution: {integrity: sha512-4s6vd6dx1AotCx/RCI2m7t7GCh5bDRUtGNvRfHSP2wbBQdMi67pPe7mtzmgwcaQ8VKK/6IB7Glfyu3qdZJPybQ==, tarball: https://registry.npmjs.org/parse-imports-exports/-/parse-imports-exports-0.2.4.tgz} - parse-json@4.0.0: resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==, tarball: https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz} engines: {node: '>=4'} @@ -7517,9 +5993,6 @@ packages: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==, tarball: https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz} engines: {node: '>=8'} - parse-statements@1.0.11: - resolution: {integrity: sha512-HlsyYdMBnbPQ9Jr/VgJ1YF4scnldvJpJxCVx6KgqPL4dxppsWrJHCIIxQXMJrqGnsRkNPATbeMJ8Yxu7JMsYcA==, tarball: https://registry.npmjs.org/parse-statements/-/parse-statements-1.0.11.tgz} - parse5@7.3.0: resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==, tarball: https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz} @@ -7627,10 +6100,6 @@ packages: resolution: {integrity: sha512-LFDwmhyWLBnmwO/2UFbWu1jEGVDzaPupaVdx0XcZ3tIAx1EDEBauzxXf2S0UcFK7oe+X9MApjH0hx9U1XMgfCA==, tarball: https://registry.npmjs.org/pino/-/pino-4.17.6.tgz} hasBin: true - pkg-dir@5.0.0: - resolution: {integrity: sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==, tarball: https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz} - engines: {node: '>=10'} - playwright-core@1.61.1: resolution: {integrity: sha512-h7Qlt6m4REp25qvIdvbDtVmD4LqVXfpRxhORv9L0jzETM05p4fuPJ3dKyuSXQxDSbXnmS79HAgi9589lGSpLkg==, tarball: https://registry.npmjs.org/playwright-core/-/playwright-core-1.61.1.tgz} engines: {node: '>=18'} @@ -7641,14 +6110,6 @@ packages: engines: {node: '>=18'} hasBin: true - pluralize@8.0.0: - resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==, tarball: https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz} - engines: {node: '>=4'} - - possible-typed-array-names@1.1.0: - resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==, tarball: https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz} - engines: {node: '>= 0.4'} - postcss-safe-parser@7.0.1: resolution: {integrity: sha512-0AioNCJZ2DPYz5ABT6bddIqlhgwhpHZ/l65YAYo0BCIn0xiDpsnTHz0gnoTGk0OXZW0JRs+cDwL8u/teRdz+8A==, tarball: https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-7.0.1.tgz} engines: {node: '>=18.0'} @@ -7667,14 +6128,6 @@ packages: resolution: {integrity: sha512-u82N74LFzG8ca+dD8puPnplTXoGH4fTPpVGuIbt36G3qvNlkvfD0lEAZSxaly3KX8TS/L1A1gsCEmvKmBcVbkQ==, tarball: https://registry.npmjs.org/postcss/-/postcss-8.5.26.tgz} engines: {node: ^10 || ^12 || >=14} - prelude-ls@1.2.1: - resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==, tarball: https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz} - engines: {node: '>= 0.8.0'} - - prettier-linter-helpers@1.0.1: - resolution: {integrity: sha512-SxToR7P8Y2lWmv/kTzVLC1t/GDI2WGjMwNhLLE9qtH8Q13C+aEmuRlzDst4Up4s0Wc8sF2M+J57iB3cMLqftfg==, tarball: https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.1.tgz} - engines: {node: '>=6.0.0'} - prettier@2.8.8: resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==, tarball: https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz} engines: {node: '>=10.13.0'} @@ -7854,25 +6307,6 @@ packages: resolution: {integrity: sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==, tarball: https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz} engines: {node: '>=6'} - reflect.getprototypeof@1.0.10: - resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==, tarball: https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz} - engines: {node: '>= 0.4'} - - regenerate-unicode-properties@10.2.2: - resolution: {integrity: sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g==, tarball: https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.2.tgz} - engines: {node: '>=4'} - - regenerate@1.4.2: - resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==, tarball: https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz} - - regexp.prototype.flags@1.5.4: - resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==, tarball: https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz} - engines: {node: '>= 0.4'} - - regexpu-core@6.4.0: - resolution: {integrity: sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA==, tarball: https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.4.0.tgz} - engines: {node: '>=4'} - registry-auth-token@5.1.1: resolution: {integrity: sha512-P7B4+jq8DeD2nMsAcdfaqHbssgHtZ7Z5+++a5ask90fvmJ8p5je4mOa+wzu+DB4vQ5tdJV/xywY+UnVFeQLV5Q==, tarball: https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.1.1.tgz} engines: {node: '>=14'} @@ -7881,13 +6315,6 @@ packages: resolution: {integrity: sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==, tarball: https://registry.npmjs.org/registry-url/-/registry-url-6.0.1.tgz} engines: {node: '>=12'} - regjsgen@0.8.0: - resolution: {integrity: sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==, tarball: https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz} - - regjsparser@0.13.2: - resolution: {integrity: sha512-NgRBy2Nx/bE+9F27nVHnqcN5HjyLmecqsqx2PJHu3/IEtADD4WuxuXIVExD5PoSDFVrl78dOonfcOe5O+5nbzQ==, tarball: https://registry.npmjs.org/regjsparser/-/regjsparser-0.13.2.tgz} - hasBin: true - relay-runtime@12.0.0: resolution: {integrity: sha512-QU6JKr1tMsry22DXNy9Whsq5rmvwr3LSZiiWV/9+DFpuTWvp+WFhobWMc8TC4OjKFfNhEZy7mOiqUAn5atQtug==, tarball: https://registry.npmjs.org/relay-runtime/-/relay-runtime-12.0.0.tgz} @@ -7922,9 +6349,6 @@ packages: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==, tarball: https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz} engines: {node: '>=8'} - resolve-pkg-maps@1.0.0: - resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==, tarball: https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz} - resolve.exports@2.0.3: resolution: {integrity: sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==, tarball: https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.3.tgz} engines: {node: '>=10'} @@ -7939,11 +6363,6 @@ packages: engines: {node: '>= 0.4'} hasBin: true - resolve@2.0.0-next.6: - resolution: {integrity: sha512-3JmVl5hMGtJ3kMmB3zi3DL25KfkCEyy3Tw7Gmw7z5w8M9WlwoPFnIvwChzu1+cF3iaK3sp18hhPz8ANeimdJfA==, tarball: https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.6.tgz} - engines: {node: '>= 0.4'} - hasBin: true - responselike@3.0.0: resolution: {integrity: sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==, tarball: https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz} engines: {node: '>=14.16'} @@ -8001,24 +6420,12 @@ packages: run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==, tarball: https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz} - safe-array-concat@1.1.3: - resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==, tarball: https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz} - engines: {node: '>=0.4'} - safe-buffer@5.1.2: resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==, tarball: https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz} safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==, tarball: https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz} - safe-push-apply@1.0.0: - resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==, tarball: https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz} - engines: {node: '>= 0.4'} - - safe-regex-test@1.1.0: - resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==, tarball: https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz} - engines: {node: '>= 0.4'} - safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==, tarball: https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz} @@ -8078,18 +6485,6 @@ packages: set-cookie-parser@3.1.2: resolution: {integrity: sha512-5/r/lTwbJ3zQ+qwdUFZYeRNqda7P5HD8zQKqlSjdGt1/S0cjLAphHusj4Y58ahDtWn/g32xrIS58/ikOvwl0Lw==, tarball: https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-3.1.2.tgz} - set-function-length@1.2.2: - resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==, tarball: https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz} - engines: {node: '>= 0.4'} - - set-function-name@2.0.2: - resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==, tarball: https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz} - engines: {node: '>= 0.4'} - - set-proto@1.0.0: - resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==, tarball: https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz} - engines: {node: '>= 0.4'} - setimmediate@1.0.5: resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==, tarball: https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz} @@ -8114,22 +6509,6 @@ packages: engines: {node: '>=4'} hasBin: true - side-channel-list@1.0.0: - resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==, tarball: https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz} - engines: {node: '>= 0.4'} - - side-channel-map@1.0.1: - resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==, tarball: https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz} - engines: {node: '>= 0.4'} - - side-channel-weakmap@1.0.2: - resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==, tarball: https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz} - engines: {node: '>= 0.4'} - - side-channel@1.1.0: - resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==, tarball: https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz} - engines: {node: '>= 0.4'} - siginfo@2.0.0: resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==, tarball: https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz} @@ -8180,9 +6559,6 @@ packages: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==, tarball: https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz} engines: {node: '>=0.10.0'} - source-map-support@0.5.19: - resolution: {integrity: sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==, tarball: https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz} - source-map-support@0.5.21: resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==, tarball: https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz} @@ -8206,9 +6582,6 @@ packages: spdx-expression-parse@3.0.1: resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==, tarball: https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz} - spdx-expression-parse@4.0.0: - resolution: {integrity: sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==, tarball: https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-4.0.0.tgz} - spdx-license-ids@3.0.23: resolution: {integrity: sha512-CWLcCCH7VLu13TgOH+r8p1O/Znwhqv/dbb6lqWy67G+pT1kHmeD/+V36AVb/vq8QMIQwVShJ6Ssl5FPh0fuSdw==, tarball: https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.23.tgz} @@ -8224,10 +6597,6 @@ packages: sprintf-js@1.1.3: resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==, tarball: https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz} - stable-hash-x@0.2.0: - resolution: {integrity: sha512-o3yWv49B/o4QZk5ZcsALc6t0+eCelPc44zZsLtCQnZPDwFpDYSWcDnrv2TtMmMbQ7uKo3J0HTURCqckw23czNQ==, tarball: https://registry.npmjs.org/stable-hash-x/-/stable-hash-x-0.2.0.tgz} - engines: {node: '>=12.0.0'} - stack-generator@2.0.10: resolution: {integrity: sha512-mwnua/hkqM6pF4k8SnmZ2zfETsRUpWXREfA/goT8SLCV4iOFa4bzOX2nDipWAZFPTjLvQB82f5yaodMVhK0yJQ==, tarball: https://registry.npmjs.org/stack-generator/-/stack-generator-2.0.10.tgz} @@ -8251,10 +6620,6 @@ packages: std-env@4.2.0: resolution: {integrity: sha512-oCUKSupKTHX53EyjDtuZQ64pjLJ6yYCtpmEw0goYxtjG9KpbRe8KAsl2tBUGU9DyMcJ0RwJ8GqJAFzMXcXW1Rw==, tarball: https://registry.npmjs.org/std-env/-/std-env-4.2.0.tgz} - stop-iteration-iterator@1.1.0: - resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==, tarball: https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz} - engines: {node: '>= 0.4'} - stream-shift@1.0.3: resolution: {integrity: sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==, tarball: https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.3.tgz} @@ -8284,29 +6649,6 @@ packages: resolution: {integrity: sha512-GaPUh5gfdrYzqeVNZvUfT23vYYxXzKYidUcnMtJg/3rxRV63EFZy3k6xfKlmfeJD0176lnUV/Usr3XcwSvFzpg==, tarball: https://registry.npmjs.org/string-width/-/string-width-8.2.2.tgz} engines: {node: '>=20'} - string.prototype.includes@2.0.1: - resolution: {integrity: sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==, tarball: https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz} - engines: {node: '>= 0.4'} - - string.prototype.matchall@4.0.12: - resolution: {integrity: sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==, tarball: https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz} - engines: {node: '>= 0.4'} - - string.prototype.repeat@1.0.0: - resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==, tarball: https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz} - - string.prototype.trim@1.2.10: - resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==, tarball: https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz} - engines: {node: '>= 0.4'} - - string.prototype.trimend@1.0.9: - resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==, tarball: https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz} - engines: {node: '>= 0.4'} - - string.prototype.trimstart@1.0.8: - resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==, tarball: https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz} - engines: {node: '>= 0.4'} - string_decoder@1.1.1: resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==, tarball: https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz} @@ -8337,10 +6679,6 @@ packages: resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==, tarball: https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz} engines: {node: '>=0.10.0'} - strip-json-comments@3.1.1: - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==, tarball: https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz} - engines: {node: '>=8'} - strip-json-comments@5.0.3: resolution: {integrity: sha512-1tB5mhVo7U+ETBKNf92xT4hrQa3pm0MZ0PQvuDnWgAAGHDsfp4lPSpiS6psrSiet87wyGPh9ft6wmhOMQ0hDiw==, tarball: https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-5.0.3.tgz} engines: {node: '>=14.16'} @@ -8381,10 +6719,6 @@ packages: resolution: {integrity: sha512-IELLEvzHuCfc1uTsshPK58ViSdNqXxlml1U+fmwJIKLYKOr/rAtBrorE2RYm5IHaMpDNlmC0fr1LAvdXvyheEQ==, tarball: https://registry.npmjs.org/sync-fetch/-/sync-fetch-0.6.0.tgz} engines: {node: '>=18'} - synckit@0.11.13: - resolution: {integrity: sha512-eNRKgb3z66Yp3D2CixVujOUvXLFUTij/zVnV8KRyvFdQwpz7I5DS8UfRkTeLzb64u+dkzDSdelE24izu+zSSUg==, tarball: https://registry.npmjs.org/synckit/-/synckit-0.11.13.tgz} - engines: {node: ^14.18.0 || >=16.0.0} - system-architecture@0.1.0: resolution: {integrity: sha512-ulAk51I9UVUyJgxlv9M6lFot2WP3e7t8Kz9+IS6D4rVba1tR9kON+Ey69f+1R4Q8cd45Lod6a4IcJIxnzGc/zA==, tarball: https://registry.npmjs.org/system-architecture/-/system-architecture-0.1.0.tgz} engines: {node: '>=18'} @@ -8397,10 +6731,6 @@ packages: resolution: {integrity: sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==, tarball: https://registry.npmjs.org/tagged-tag/-/tagged-tag-1.0.0.tgz} engines: {node: '>=20'} - tapable@2.3.0: - resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==, tarball: https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz} - engines: {node: '>=6'} - tar-fs@2.1.4: resolution: {integrity: sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==, tarball: https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.4.tgz} @@ -8516,23 +6846,6 @@ packages: resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==, tarball: https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz} engines: {node: '>=8'} - ts-api-utils@2.4.0: - resolution: {integrity: sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==, tarball: https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.4.0.tgz} - engines: {node: '>=18.12'} - peerDependencies: - typescript: '>=4.8.4' - - ts-api-utils@2.5.0: - resolution: {integrity: sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==, tarball: https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.5.0.tgz} - engines: {node: '>=18.12'} - peerDependencies: - typescript: '>=4.8.4' - - ts-declaration-location@1.0.7: - resolution: {integrity: sha512-EDyGAwH1gO0Ausm9gV6T2nUvBgXT5kGoCMJPllOaooZ+4VvJiKBdZE7wK18N1deEowhcUptS+5GXZK8U/fvpwA==, tarball: https://registry.npmjs.org/ts-declaration-location/-/ts-declaration-location-1.0.7.tgz} - peerDependencies: - typescript: '>=4.0.0' - ts-log@2.2.7: resolution: {integrity: sha512-320x5Ggei84AxzlXp91QkIGSw5wgaLT6GeAH0KsqDmRZdVWW2OiSeVvElVoatk3f7nicwXlElXsoFkARiGE2yg==, tarball: https://registry.npmjs.org/ts-log/-/ts-log-2.2.7.tgz} @@ -8578,10 +6891,6 @@ packages: resolution: {integrity: sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==, tarball: https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz} engines: {node: '>=0.6.11 <=0.7.0 || >=0.7.3'} - type-check@0.4.0: - resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==, tarball: https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz} - engines: {node: '>= 0.8.0'} - type-fest@0.13.1: resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==, tarball: https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz} engines: {node: '>=10'} @@ -8618,22 +6927,6 @@ packages: resolution: {integrity: sha512-YGYEVz3Fm5iy/AybuA0oyNFq7H4CgQNfRp/qfe8nurE1kuCeNm3/vfm9X4Mtl+qLyaKJUh5xrFZwogr41SMjYA==, tarball: https://registry.npmjs.org/type-fest/-/type-fest-5.8.0.tgz} engines: {node: '>=20'} - typed-array-buffer@1.0.3: - resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==, tarball: https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz} - engines: {node: '>= 0.4'} - - typed-array-byte-length@1.0.3: - resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==, tarball: https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz} - engines: {node: '>= 0.4'} - - typed-array-byte-offset@1.0.4: - resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==, tarball: https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz} - engines: {node: '>= 0.4'} - - typed-array-length@1.0.7: - resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==, tarball: https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz} - engines: {node: '>= 0.4'} - typedarray@0.0.6: resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==, tarball: https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz} @@ -8644,13 +6937,6 @@ packages: peerDependencies: typescript: 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x || 5.5.x || 5.6.x || 5.7.x || 5.8.x || 5.9.x || 6.0.x - typescript-eslint@8.56.1: - resolution: {integrity: sha512-U4lM6pjmBX7J5wk4szltF7I1cGBHXZopnAXCMXb3+fZ3B/0Z3hq3wS/CCUB2NZBNAExK92mCU2tEohWuwVMsDQ==, tarball: https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.56.1.tgz} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 - typescript: '>=4.8.4 <6.0.0' - typescript@5.9.3: resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==, tarball: https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz} engines: {node: '>=14.17'} @@ -8678,10 +6964,6 @@ packages: resolution: {integrity: sha512-X2wH19RAPZE3+ldGicOkoj/SIA83OIxcJ6Cuaw23hf8Xc6fQpvZXY0SftE2JgS0QhYLUG4uwodSI3R53keyh7w==, tarball: https://registry.npmjs.org/unbash/-/unbash-2.2.0.tgz} engines: {node: '>=14'} - unbox-primitive@1.1.0: - resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==, tarball: https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz} - engines: {node: '>= 0.4'} - unc-path-regex@0.1.2: resolution: {integrity: sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==, tarball: https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz} engines: {node: '>=0.10.0'} @@ -8703,22 +6985,6 @@ packages: resolution: {integrity: sha512-cRZYrTDwWznlnRiPjggAGxZXanty6M8RV1ff8Wm4LWXBp7/IG8v5DnOm74DtUBp9OONpK75YlPnIjQqX0dBDtA==, tarball: https://registry.npmjs.org/undici/-/undici-7.28.0.tgz} engines: {node: '>=20.18.1'} - unicode-canonical-property-names-ecmascript@2.0.1: - resolution: {integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==, tarball: https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz} - engines: {node: '>=4'} - - unicode-match-property-ecmascript@2.0.0: - resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==, tarball: https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz} - engines: {node: '>=4'} - - unicode-match-property-value-ecmascript@2.2.1: - resolution: {integrity: sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg==, tarball: https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.1.tgz} - engines: {node: '>=4'} - - unicode-property-aliases-ecmascript@2.2.0: - resolution: {integrity: sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ==, tarball: https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.2.0.tgz} - engines: {node: '>=4'} - unique-string@3.0.0: resolution: {integrity: sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==, tarball: https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz} engines: {node: '>=12'} @@ -8738,9 +7004,6 @@ packages: resolution: {integrity: sha512-6bc58dPYhCMHHuwxldQxO3RRNZ4eCogZ/st++0+fcC1nr0jiGUtAdBJ2qzmLQWSxbtz42pWt4QQMiZ9HvZf5cg==, tarball: https://registry.npmjs.org/unixify/-/unixify-1.0.0.tgz} engines: {node: '>=0.10.0'} - unrs-resolver@1.11.1: - resolution: {integrity: sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==, tarball: https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.11.1.tgz} - until-async@3.0.2: resolution: {integrity: sha512-IiSk4HlzAMqTUseHHe3VhIGyuFmN90zMTpD3Z3y8jeQbzLIq500MVM7Jq2vUAnTKAFPJrqwkzr6PoTcPhGcOiw==, tarball: https://registry.npmjs.org/until-async/-/until-async-3.0.2.tgz} @@ -8756,9 +7019,6 @@ packages: upper-case@2.0.2: resolution: {integrity: sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==, tarball: https://registry.npmjs.org/upper-case/-/upper-case-2.0.2.tgz} - uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==, tarball: https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz} - urlpattern-polyfill@10.1.0: resolution: {integrity: sha512-IGjKp/o0NL3Bso1PymYURCJxMPNAf/ILOpendP9f5B6e1rTJgdgiOvgfoT8VxCAdY+Wisb9uhGaJJf3yZ2V9nw==, tarball: https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-10.1.0.tgz} @@ -8934,22 +7194,6 @@ packages: when-exit@2.1.5: resolution: {integrity: sha512-VGkKJ564kzt6Ms1dbgPP/yuIoQCrsFAnRbptpC5wOEsDaNsbCB2bnfnaA8i/vRs5tjUSEOtIuvl9/MyVsvQZCg==, tarball: https://registry.npmjs.org/when-exit/-/when-exit-2.1.5.tgz} - which-boxed-primitive@1.1.1: - resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==, tarball: https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz} - engines: {node: '>= 0.4'} - - which-builtin-type@1.2.1: - resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==, tarball: https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz} - engines: {node: '>= 0.4'} - - which-collection@1.0.2: - resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==, tarball: https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz} - engines: {node: '>= 0.4'} - - which-typed-array@1.1.20: - resolution: {integrity: sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg==, tarball: https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.20.tgz} - engines: {node: '>= 0.4'} - which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==, tarball: https://registry.npmjs.org/which/-/which-2.0.2.tgz} engines: {node: '>= 8'} @@ -8977,10 +7221,6 @@ packages: resolution: {integrity: sha512-U89AsyEeAsyoF0zVJBkG9zBgekjgjK7yk9sje3F4IQpXBJ10TF6ByLlIfjMhcmHMJgHZI4KHt4rdNfktzxIAMA==, tarball: https://registry.npmjs.org/widest-line/-/widest-line-6.0.0.tgz} engines: {node: '>=20'} - word-wrap@1.2.5: - resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==, tarball: https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz} - engines: {node: '>=0.10.0'} - wordwrap@1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==, tarball: https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz} @@ -9037,10 +7277,6 @@ packages: yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==, tarball: https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz} - yaml@1.10.3: - resolution: {integrity: sha512-vIYeF1u3CjlhAFekPPAk2h/Kv4T3mAkMox5OymRiJQB0spDP10LHvt+K7G9Ny6NuuMAb25/6n1qyUjAcGNf/AA==, tarball: https://registry.npmjs.org/yaml/-/yaml-1.10.3.tgz} - engines: {node: '>= 6'} - yaml@2.9.0: resolution: {integrity: sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==, tarball: https://registry.npmjs.org/yaml/-/yaml-2.9.0.tgz} engines: {node: '>= 14.6'} @@ -9067,1202 +7303,585 @@ packages: engines: {node: '>=4.0.0'} hasBin: true - yn@3.1.1: - resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==, tarball: https://registry.npmjs.org/yn/-/yn-3.1.1.tgz} - engines: {node: '>=6'} - - yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==, tarball: https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz} - engines: {node: '>=10'} - - yocto-queue@1.2.2: - resolution: {integrity: sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==, tarball: https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.2.tgz} - engines: {node: '>=12.20'} - - yoctocolors-cjs@2.1.3: - resolution: {integrity: sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==, tarball: https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.3.tgz} - engines: {node: '>=18'} - - yoga-layout@3.2.1: - resolution: {integrity: sha512-0LPOt3AxKqMdFBZA3HBAt/t/8vIKq7VaQYbuA8WxCgung+p9TVyKRYdpvCb80HcdTN2NkbIKbhNwKUfm3tQywQ==, tarball: https://registry.npmjs.org/yoga-layout/-/yoga-layout-3.2.1.tgz} - - yoga-wasm-web@0.3.3: - resolution: {integrity: sha512-N+d4UJSJbt/R3wqY7Coqs5pcV0aUj2j9IaQ3rNj9bVCLld8tTGKRa2USARjnvZJWVx1NDmQev8EknoczaOQDOA==, tarball: https://registry.npmjs.org/yoga-wasm-web/-/yoga-wasm-web-0.3.3.tgz} - - zip-stream@4.1.1: - resolution: {integrity: sha512-9qv4rlDiopXg4E69k+vMHjNN63YFMe9sZMrdlvKnCjlCRWeCBswPPMPUfx+ipsAWq1LXHe70RcbaHdJJpS6hyQ==, tarball: https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.1.tgz} - engines: {node: '>= 10'} - - zod-to-json-schema@3.25.2: - resolution: {integrity: sha512-O/PgfnpT1xKSDeQYSCfRI5Gy3hPf91mKVDuYLUHZJMiDFptvP41MSnWofm8dnCm0256ZNfZIM7DSzuSMAFnjHA==, tarball: https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.25.2.tgz} - peerDependencies: - zod: ^3.25.28 || ^4 - - zod@3.25.76: - resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==, tarball: https://registry.npmjs.org/zod/-/zod-3.25.76.tgz} - - zod@4.4.3: - resolution: {integrity: sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==, tarball: https://registry.npmjs.org/zod/-/zod-4.4.3.tgz} - -snapshots: - - '@acemir/cssom@0.9.31': - optional: true - - '@actions/core@1.11.1': - dependencies: - '@actions/exec': 1.1.1 - '@actions/http-client': 2.2.3 - - '@actions/exec@1.1.1': - dependencies: - '@actions/io': 1.1.3 - - '@actions/http-client@2.2.3': - dependencies: - tunnel: 0.0.6 - undici: 5.29.0 - - '@actions/io@1.1.3': {} - - '@alcalzone/ansi-tokenize@0.1.3': - dependencies: - ansi-styles: 6.2.3 - is-fullwidth-code-point: 4.0.0 - - '@alcalzone/ansi-tokenize@0.2.5': - dependencies: - ansi-styles: 6.2.3 - is-fullwidth-code-point: 5.1.0 - - '@apidevtools/json-schema-ref-parser@11.7.3': - dependencies: - '@jsdevtools/ono': 7.1.3 - '@types/json-schema': 7.0.15 - js-yaml: 4.1.1 - - '@apidevtools/json-schema-ref-parser@11.9.3': - dependencies: - '@jsdevtools/ono': 7.1.3 - '@types/json-schema': 7.0.15 - js-yaml: 4.1.1 - - '@ardatan/relay-compiler@12.0.3(graphql@16.14.2)': - dependencies: - '@babel/generator': 7.29.7 - '@babel/parser': 7.29.7 - '@babel/runtime': 7.29.7 - chalk: 4.1.2 - fb-watchman: 2.0.2 - graphql: 16.14.2 - immutable: 3.7.6 - invariant: 2.2.4 - nullthrows: 1.1.1 - relay-runtime: 12.0.0 - signedsource: 1.0.0 - transitivePeerDependencies: - - encoding - - '@ardatan/relay-compiler@13.0.1(graphql@16.14.2)': - dependencies: - '@babel/runtime': 7.29.7 - graphql: 16.14.2 - immutable: 5.1.6 - invariant: 2.2.4 - - '@asamuzakjp/css-color@3.2.0': - dependencies: - '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) - '@csstools/css-color-parser': 3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) - '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) - '@csstools/css-tokenizer': 3.0.4 - lru-cache: 10.4.3 - - '@asamuzakjp/css-color@5.1.11': - dependencies: - '@asamuzakjp/generational-cache': 1.0.1 - '@csstools/css-calc': 3.2.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) - '@csstools/css-color-parser': 4.1.9(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) - '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) - '@csstools/css-tokenizer': 4.0.0 - optional: true - - '@asamuzakjp/dom-selector@6.8.1': - dependencies: - '@asamuzakjp/nwsapi': 2.3.9 - bidi-js: 1.0.3 - css-tree: 3.2.1 - is-potential-custom-element-name: 1.0.1 - lru-cache: 11.5.2 - optional: true - - '@asamuzakjp/generational-cache@1.0.1': - optional: true - - '@asamuzakjp/nwsapi@2.3.9': - optional: true - - '@ast-grep/napi-darwin-arm64@0.34.1': - optional: true - - '@ast-grep/napi-darwin-arm64@0.43.0': - optional: true - - '@ast-grep/napi-darwin-x64@0.34.1': - optional: true - - '@ast-grep/napi-darwin-x64@0.43.0': - optional: true - - '@ast-grep/napi-linux-arm64-gnu@0.34.1': - optional: true - - '@ast-grep/napi-linux-arm64-gnu@0.43.0': - optional: true - - '@ast-grep/napi-linux-arm64-musl@0.34.1': - optional: true - - '@ast-grep/napi-linux-arm64-musl@0.43.0': - optional: true - - '@ast-grep/napi-linux-x64-gnu@0.34.1': - optional: true - - '@ast-grep/napi-linux-x64-gnu@0.43.0': - optional: true - - '@ast-grep/napi-linux-x64-musl@0.34.1': - optional: true - - '@ast-grep/napi-linux-x64-musl@0.43.0': - optional: true - - '@ast-grep/napi-win32-arm64-msvc@0.34.1': - optional: true - - '@ast-grep/napi-win32-arm64-msvc@0.43.0': - optional: true - - '@ast-grep/napi-win32-ia32-msvc@0.34.1': - optional: true - - '@ast-grep/napi-win32-ia32-msvc@0.43.0': - optional: true - - '@ast-grep/napi-win32-x64-msvc@0.34.1': - optional: true - - '@ast-grep/napi-win32-x64-msvc@0.43.0': - optional: true - - '@ast-grep/napi@0.34.1': - optionalDependencies: - '@ast-grep/napi-darwin-arm64': 0.34.1 - '@ast-grep/napi-darwin-x64': 0.34.1 - '@ast-grep/napi-linux-arm64-gnu': 0.34.1 - '@ast-grep/napi-linux-arm64-musl': 0.34.1 - '@ast-grep/napi-linux-x64-gnu': 0.34.1 - '@ast-grep/napi-linux-x64-musl': 0.34.1 - '@ast-grep/napi-win32-arm64-msvc': 0.34.1 - '@ast-grep/napi-win32-ia32-msvc': 0.34.1 - '@ast-grep/napi-win32-x64-msvc': 0.34.1 - - '@ast-grep/napi@0.43.0': - optionalDependencies: - '@ast-grep/napi-darwin-arm64': 0.43.0 - '@ast-grep/napi-darwin-x64': 0.43.0 - '@ast-grep/napi-linux-arm64-gnu': 0.43.0 - '@ast-grep/napi-linux-arm64-musl': 0.43.0 - '@ast-grep/napi-linux-x64-gnu': 0.43.0 - '@ast-grep/napi-linux-x64-musl': 0.43.0 - '@ast-grep/napi-win32-arm64-msvc': 0.43.0 - '@ast-grep/napi-win32-ia32-msvc': 0.43.0 - '@ast-grep/napi-win32-x64-msvc': 0.43.0 - - '@aws-sdk/checksums@3.1000.18': - dependencies: - '@aws-sdk/core': 3.974.6 - '@aws-sdk/types': 3.973.8 - '@smithy/core': 3.29.5 - '@smithy/types': 4.16.1 - tslib: 2.8.1 - - '@aws-sdk/client-cloudfront@3.1089.0': - dependencies: - '@aws-sdk/core': 3.974.6 - '@aws-sdk/credential-provider-node': 3.972.37 - '@aws-sdk/types': 3.973.8 - '@smithy/core': 3.29.5 - '@smithy/fetch-http-handler': 5.6.7 - '@smithy/node-http-handler': 4.9.7 - '@smithy/types': 4.16.1 - tslib: 2.8.1 - - '@aws-sdk/client-s3@3.1089.0': - dependencies: - '@aws-sdk/checksums': 3.1000.18 - '@aws-sdk/core': 3.974.6 - '@aws-sdk/credential-provider-node': 3.972.37 - '@aws-sdk/middleware-sdk-s3': 3.972.35 - '@aws-sdk/signature-v4-multi-region': 3.996.31 - '@aws-sdk/types': 3.973.8 - '@smithy/core': 3.29.5 - '@smithy/fetch-http-handler': 5.6.7 - '@smithy/node-http-handler': 4.9.7 - '@smithy/types': 4.16.1 - tslib: 2.8.1 - - '@aws-sdk/core@3.974.6': - dependencies: - '@aws-sdk/types': 3.973.8 - '@aws-sdk/xml-builder': 3.972.36 - '@smithy/core': 3.29.5 - '@smithy/node-config-provider': 4.5.10 - '@smithy/property-provider': 4.4.10 - '@smithy/protocol-http': 5.5.10 - '@smithy/signature-v4': 5.6.6 - '@smithy/smithy-client': 4.14.10 - '@smithy/types': 4.16.1 - '@smithy/util-base64': 4.5.10 - '@smithy/util-middleware': 4.4.10 - '@smithy/util-retry': 4.5.10 - '@smithy/util-utf8': 4.4.10 - tslib: 2.8.1 - - '@aws-sdk/credential-provider-env@3.972.32': - dependencies: - '@aws-sdk/core': 3.974.6 - '@aws-sdk/types': 3.973.8 - '@smithy/property-provider': 4.4.10 - '@smithy/types': 4.16.1 - tslib: 2.8.1 - - '@aws-sdk/credential-provider-http@3.972.34': - dependencies: - '@aws-sdk/core': 3.974.6 - '@aws-sdk/types': 3.973.8 - '@smithy/fetch-http-handler': 5.6.7 - '@smithy/node-http-handler': 4.9.7 - '@smithy/property-provider': 4.4.10 - '@smithy/protocol-http': 5.5.10 - '@smithy/smithy-client': 4.14.10 - '@smithy/types': 4.16.1 - '@smithy/util-stream': 4.7.10 - tslib: 2.8.1 - - '@aws-sdk/credential-provider-ini@3.972.36': - dependencies: - '@aws-sdk/core': 3.974.6 - '@aws-sdk/credential-provider-env': 3.972.32 - '@aws-sdk/credential-provider-http': 3.972.34 - '@aws-sdk/credential-provider-login': 3.972.66 - '@aws-sdk/credential-provider-process': 3.972.32 - '@aws-sdk/credential-provider-sso': 3.972.36 - '@aws-sdk/credential-provider-web-identity': 3.972.36 - '@aws-sdk/nested-clients': 3.997.33 - '@aws-sdk/types': 3.973.8 - '@smithy/credential-provider-imds': 4.4.10 - '@smithy/property-provider': 4.4.10 - '@smithy/shared-ini-file-loader': 4.6.10 - '@smithy/types': 4.16.1 - tslib: 2.8.1 - - '@aws-sdk/credential-provider-login@3.972.66': - dependencies: - '@aws-sdk/core': 3.974.6 - '@aws-sdk/nested-clients': 3.997.33 - '@aws-sdk/types': 3.973.8 - '@smithy/core': 3.29.5 - '@smithy/types': 4.16.1 - tslib: 2.8.1 - - '@aws-sdk/credential-provider-node@3.972.37': - dependencies: - '@aws-sdk/credential-provider-env': 3.972.32 - '@aws-sdk/credential-provider-http': 3.972.34 - '@aws-sdk/credential-provider-ini': 3.972.36 - '@aws-sdk/credential-provider-process': 3.972.32 - '@aws-sdk/credential-provider-sso': 3.972.36 - '@aws-sdk/credential-provider-web-identity': 3.972.36 - '@aws-sdk/types': 3.973.8 - '@smithy/credential-provider-imds': 4.4.10 - '@smithy/property-provider': 4.4.10 - '@smithy/shared-ini-file-loader': 4.6.10 - '@smithy/types': 4.16.1 - tslib: 2.8.1 - - '@aws-sdk/credential-provider-process@3.972.32': - dependencies: - '@aws-sdk/core': 3.974.6 - '@aws-sdk/types': 3.973.8 - '@smithy/property-provider': 4.4.10 - '@smithy/shared-ini-file-loader': 4.6.10 - '@smithy/types': 4.16.1 - tslib: 2.8.1 - - '@aws-sdk/credential-provider-sso@3.972.36': - dependencies: - '@aws-sdk/core': 3.974.6 - '@aws-sdk/nested-clients': 3.997.33 - '@aws-sdk/token-providers': 3.1038.0 - '@aws-sdk/types': 3.973.8 - '@smithy/property-provider': 4.4.10 - '@smithy/shared-ini-file-loader': 4.6.10 - '@smithy/types': 4.16.1 - tslib: 2.8.1 - - '@aws-sdk/credential-provider-web-identity@3.972.36': - dependencies: - '@aws-sdk/core': 3.974.6 - '@aws-sdk/nested-clients': 3.997.33 - '@aws-sdk/types': 3.973.8 - '@smithy/property-provider': 4.4.10 - '@smithy/shared-ini-file-loader': 4.6.10 - '@smithy/types': 4.16.1 - tslib: 2.8.1 - - '@aws-sdk/middleware-sdk-s3@3.972.35': - dependencies: - '@aws-sdk/core': 3.974.6 - '@aws-sdk/types': 3.973.8 - '@aws-sdk/util-arn-parser': 3.972.28 - '@smithy/core': 3.29.5 - '@smithy/node-config-provider': 4.5.10 - '@smithy/protocol-http': 5.5.10 - '@smithy/signature-v4': 5.6.6 - '@smithy/smithy-client': 4.14.10 - '@smithy/types': 4.16.1 - '@smithy/util-config-provider': 4.4.10 - '@smithy/util-middleware': 4.4.10 - '@smithy/util-stream': 4.7.10 - '@smithy/util-utf8': 4.4.10 - tslib: 2.8.1 - - '@aws-sdk/nested-clients@3.997.33': - dependencies: - '@aws-sdk/core': 3.974.6 - '@aws-sdk/signature-v4-multi-region': 3.996.31 - '@aws-sdk/types': 3.973.8 - '@smithy/core': 3.29.5 - '@smithy/fetch-http-handler': 5.6.7 - '@smithy/node-http-handler': 4.9.7 - '@smithy/types': 4.16.1 - tslib: 2.8.1 - - '@aws-sdk/signature-v4-multi-region@3.996.31': - dependencies: - '@aws-sdk/types': 3.973.8 - '@smithy/signature-v4': 5.6.6 - '@smithy/types': 4.16.1 - tslib: 2.8.1 - - '@aws-sdk/token-providers@3.1038.0': - dependencies: - '@aws-sdk/core': 3.974.6 - '@aws-sdk/nested-clients': 3.997.33 - '@aws-sdk/types': 3.973.8 - '@smithy/property-provider': 4.4.10 - '@smithy/shared-ini-file-loader': 4.6.10 - '@smithy/types': 4.16.1 - tslib: 2.8.1 - - '@aws-sdk/types@3.973.8': - dependencies: - '@smithy/types': 4.16.1 - tslib: 2.8.1 - - '@aws-sdk/util-arn-parser@3.972.28': - dependencies: - '@aws-sdk/core': 3.974.6 - tslib: 2.8.1 - - '@aws-sdk/xml-builder@3.972.36': - dependencies: - '@smithy/types': 4.16.1 - tslib: 2.8.1 - - '@babel/code-frame@7.29.7': - dependencies: - '@babel/helper-validator-identifier': 7.29.7 - js-tokens: 4.0.0 - picocolors: 1.1.1 - - '@babel/compat-data@7.29.0': {} - - '@babel/compat-data@7.29.7': {} - - '@babel/core@7.29.0': - dependencies: - '@babel/code-frame': 7.29.7 - '@babel/generator': 7.29.1 - '@babel/helper-compilation-targets': 7.28.6 - '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) - '@babel/helpers': 7.28.6 - '@babel/parser': 7.29.0 - '@babel/template': 7.28.6 - '@babel/traverse': 7.29.0 - '@babel/types': 7.29.0 - '@jridgewell/remapping': 2.3.5 - convert-source-map: 2.0.0 - debug: 4.4.3(supports-color@8.1.1) - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - - '@babel/core@7.29.7': - dependencies: - '@babel/code-frame': 7.29.7 - '@babel/generator': 7.29.7 - '@babel/helper-compilation-targets': 7.29.7 - '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.7) - '@babel/helpers': 7.29.7 - '@babel/parser': 7.29.7 - '@babel/template': 7.29.7 - '@babel/traverse': 7.29.7 - '@babel/types': 7.29.7 - '@jridgewell/remapping': 2.3.5 - convert-source-map: 2.0.0 - debug: 4.4.3(supports-color@8.1.1) - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - - '@babel/generator@7.29.1': - dependencies: - '@babel/parser': 7.29.0 - '@babel/types': 7.29.0 - '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.31 - jsesc: 3.1.0 - - '@babel/generator@7.29.7': - dependencies: - '@babel/parser': 7.29.7 - '@babel/types': 7.29.7 - '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.31 - jsesc: 3.1.0 - - '@babel/helper-annotate-as-pure@7.29.7': - dependencies: - '@babel/types': 7.29.7 - - '@babel/helper-compilation-targets@7.28.6': - dependencies: - '@babel/compat-data': 7.29.0 - '@babel/helper-validator-option': 7.27.1 - browserslist: 4.28.1 - lru-cache: 5.1.1 - semver: 6.3.1 - - '@babel/helper-compilation-targets@7.29.7': - dependencies: - '@babel/compat-data': 7.29.7 - '@babel/helper-validator-option': 7.29.7 - browserslist: 4.28.6 - lru-cache: 5.1.1 - semver: 6.3.1 - - '@babel/helper-create-class-features-plugin@7.29.7(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-annotate-as-pure': 7.29.7 - '@babel/helper-member-expression-to-functions': 7.29.7 - '@babel/helper-optimise-call-expression': 7.29.7 - '@babel/helper-replace-supers': 7.29.7(@babel/core@7.29.7) - '@babel/helper-skip-transparent-expression-wrappers': 7.29.7 - '@babel/traverse': 7.29.7 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - - '@babel/helper-create-regexp-features-plugin@7.29.7(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-annotate-as-pure': 7.29.7 - regexpu-core: 6.4.0 - semver: 6.3.1 - - '@babel/helper-define-polyfill-provider@0.6.8(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-compilation-targets': 7.29.7 - '@babel/helper-plugin-utils': 7.29.7 - debug: 4.4.3(supports-color@8.1.1) - lodash.debounce: 4.0.8 - resolve: 1.22.12 - transitivePeerDependencies: - - supports-color - - '@babel/helper-globals@7.28.0': {} - - '@babel/helper-globals@7.29.7': {} - - '@babel/helper-member-expression-to-functions@7.29.7': - dependencies: - '@babel/traverse': 7.29.7 - '@babel/types': 7.29.7 - transitivePeerDependencies: - - supports-color - - '@babel/helper-module-imports@7.28.6': - dependencies: - '@babel/traverse': 7.29.7 - '@babel/types': 7.29.7 - transitivePeerDependencies: - - supports-color - - '@babel/helper-module-imports@7.29.7': - dependencies: - '@babel/traverse': 7.29.7 - '@babel/types': 7.29.7 - transitivePeerDependencies: - - supports-color - - '@babel/helper-module-transforms@7.28.6(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-module-imports': 7.28.6 - '@babel/helper-validator-identifier': 7.29.7 - '@babel/traverse': 7.29.0 - transitivePeerDependencies: - - supports-color - - '@babel/helper-module-transforms@7.29.7(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-module-imports': 7.29.7 - '@babel/helper-validator-identifier': 7.29.7 - '@babel/traverse': 7.29.7 - transitivePeerDependencies: - - supports-color - - '@babel/helper-optimise-call-expression@7.29.7': - dependencies: - '@babel/types': 7.29.7 + yn@3.1.1: + resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==, tarball: https://registry.npmjs.org/yn/-/yn-3.1.1.tgz} + engines: {node: '>=6'} - '@babel/helper-plugin-utils@7.28.6': {} + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==, tarball: https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz} + engines: {node: '>=10'} - '@babel/helper-plugin-utils@7.29.7': {} + yocto-queue@1.2.2: + resolution: {integrity: sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==, tarball: https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.2.tgz} + engines: {node: '>=12.20'} - '@babel/helper-remap-async-to-generator@7.29.7(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-annotate-as-pure': 7.29.7 - '@babel/helper-wrap-function': 7.29.7 - '@babel/traverse': 7.29.7 - transitivePeerDependencies: - - supports-color + yoctocolors-cjs@2.1.3: + resolution: {integrity: sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==, tarball: https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.3.tgz} + engines: {node: '>=18'} - '@babel/helper-replace-supers@7.29.7(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-member-expression-to-functions': 7.29.7 - '@babel/helper-optimise-call-expression': 7.29.7 - '@babel/traverse': 7.29.7 - transitivePeerDependencies: - - supports-color + yoga-layout@3.2.1: + resolution: {integrity: sha512-0LPOt3AxKqMdFBZA3HBAt/t/8vIKq7VaQYbuA8WxCgung+p9TVyKRYdpvCb80HcdTN2NkbIKbhNwKUfm3tQywQ==, tarball: https://registry.npmjs.org/yoga-layout/-/yoga-layout-3.2.1.tgz} - '@babel/helper-skip-transparent-expression-wrappers@7.29.7': - dependencies: - '@babel/traverse': 7.29.7 - '@babel/types': 7.29.7 - transitivePeerDependencies: - - supports-color + yoga-wasm-web@0.3.3: + resolution: {integrity: sha512-N+d4UJSJbt/R3wqY7Coqs5pcV0aUj2j9IaQ3rNj9bVCLld8tTGKRa2USARjnvZJWVx1NDmQev8EknoczaOQDOA==, tarball: https://registry.npmjs.org/yoga-wasm-web/-/yoga-wasm-web-0.3.3.tgz} - '@babel/helper-string-parser@7.27.1': {} + zip-stream@4.1.1: + resolution: {integrity: sha512-9qv4rlDiopXg4E69k+vMHjNN63YFMe9sZMrdlvKnCjlCRWeCBswPPMPUfx+ipsAWq1LXHe70RcbaHdJJpS6hyQ==, tarball: https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.1.tgz} + engines: {node: '>= 10'} - '@babel/helper-string-parser@7.29.7': {} + zod-to-json-schema@3.25.2: + resolution: {integrity: sha512-O/PgfnpT1xKSDeQYSCfRI5Gy3hPf91mKVDuYLUHZJMiDFptvP41MSnWofm8dnCm0256ZNfZIM7DSzuSMAFnjHA==, tarball: https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.25.2.tgz} + peerDependencies: + zod: ^3.25.28 || ^4 - '@babel/helper-validator-identifier@7.29.7': {} + zod@3.25.76: + resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==, tarball: https://registry.npmjs.org/zod/-/zod-3.25.76.tgz} - '@babel/helper-validator-option@7.27.1': {} + zod@4.4.3: + resolution: {integrity: sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==, tarball: https://registry.npmjs.org/zod/-/zod-4.4.3.tgz} - '@babel/helper-validator-option@7.29.7': {} +snapshots: - '@babel/helper-wrap-function@7.29.7': - dependencies: - '@babel/template': 7.29.7 - '@babel/traverse': 7.29.7 - '@babel/types': 7.29.7 - transitivePeerDependencies: - - supports-color + '@acemir/cssom@0.9.31': + optional: true - '@babel/helpers@7.28.6': + '@actions/core@1.11.1': dependencies: - '@babel/template': 7.28.6 - '@babel/types': 7.29.7 + '@actions/exec': 1.1.1 + '@actions/http-client': 2.2.3 - '@babel/helpers@7.29.7': + '@actions/exec@1.1.1': dependencies: - '@babel/template': 7.29.7 - '@babel/types': 7.29.7 + '@actions/io': 1.1.3 - '@babel/parser@7.29.0': + '@actions/http-client@2.2.3': dependencies: - '@babel/types': 7.29.7 + tunnel: 0.0.6 + undici: 5.29.0 - '@babel/parser@7.29.7': - dependencies: - '@babel/types': 7.29.7 + '@actions/io@1.1.3': {} - '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.29.7(@babel/core@7.29.7)': + '@alcalzone/ansi-tokenize@0.1.3': dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.29.7 - '@babel/traverse': 7.29.7 - transitivePeerDependencies: - - supports-color + ansi-styles: 6.2.3 + is-fullwidth-code-point: 4.0.0 - '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.29.7(@babel/core@7.29.7)': + '@alcalzone/ansi-tokenize@0.2.5': dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.29.7 + ansi-styles: 6.2.3 + is-fullwidth-code-point: 5.1.0 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.29.7(@babel/core@7.29.7)': + '@apidevtools/json-schema-ref-parser@11.7.3': dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.29.7 + '@jsdevtools/ono': 7.1.3 + '@types/json-schema': 7.0.15 + js-yaml: 4.1.1 - '@babel/plugin-bugfix-safari-rest-destructuring-rhs-array@7.29.7(@babel/core@7.29.7)': + '@apidevtools/json-schema-ref-parser@11.9.3': dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.29.7 - '@babel/helper-skip-transparent-expression-wrappers': 7.29.7 - transitivePeerDependencies: - - supports-color + '@jsdevtools/ono': 7.1.3 + '@types/json-schema': 7.0.15 + js-yaml: 4.1.1 - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.29.7(@babel/core@7.29.7)': + '@ardatan/relay-compiler@12.0.3(graphql@16.14.2)': dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.29.7 - '@babel/helper-skip-transparent-expression-wrappers': 7.29.7 - '@babel/plugin-transform-optional-chaining': 7.29.7(@babel/core@7.29.7) + '@babel/generator': 7.29.7 + '@babel/parser': 7.29.7 + '@babel/runtime': 7.29.7 + chalk: 4.1.2 + fb-watchman: 2.0.2 + graphql: 16.14.2 + immutable: 3.7.6 + invariant: 2.2.4 + nullthrows: 1.1.1 + relay-runtime: 12.0.0 + signedsource: 1.0.0 transitivePeerDependencies: - - supports-color + - encoding - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.29.7(@babel/core@7.29.7)': + '@ardatan/relay-compiler@13.0.1(graphql@16.14.2)': dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.29.7 - '@babel/traverse': 7.29.7 - transitivePeerDependencies: - - supports-color + '@babel/runtime': 7.29.7 + graphql: 16.14.2 + immutable: 5.1.6 + invariant: 2.2.4 - '@babel/plugin-proposal-decorators@7.29.7(@babel/core@7.29.7)': + '@asamuzakjp/css-color@3.2.0': dependencies: - '@babel/core': 7.29.7 - '@babel/helper-create-class-features-plugin': 7.29.7(@babel/core@7.29.7) - '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-syntax-decorators': 7.29.7(@babel/core@7.29.7) - transitivePeerDependencies: - - supports-color + '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) + '@csstools/css-color-parser': 3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) + '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) + '@csstools/css-tokenizer': 3.0.4 + lru-cache: 10.4.3 - '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.29.7)': + '@asamuzakjp/css-color@5.1.11': dependencies: - '@babel/core': 7.29.7 + '@asamuzakjp/generational-cache': 1.0.1 + '@csstools/css-calc': 3.2.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-color-parser': 4.1.9(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) + '@csstools/css-tokenizer': 4.0.0 + optional: true - '@babel/plugin-syntax-decorators@7.29.7(@babel/core@7.29.7)': + '@asamuzakjp/dom-selector@6.8.1': dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.29.7 + '@asamuzakjp/nwsapi': 2.3.9 + bidi-js: 1.0.3 + css-tree: 3.2.1 + is-potential-custom-element-name: 1.0.1 + lru-cache: 11.5.2 + optional: true - '@babel/plugin-syntax-import-assertions@7.28.6(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.29.7 + '@asamuzakjp/generational-cache@1.0.1': + optional: true - '@babel/plugin-syntax-import-assertions@7.29.7(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.29.7 + '@asamuzakjp/nwsapi@2.3.9': + optional: true - '@babel/plugin-syntax-import-attributes@7.29.7(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.29.7 + '@ast-grep/napi-darwin-arm64@0.34.1': + optional: true - '@babel/plugin-syntax-jsx@7.29.7(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.29.7 + '@ast-grep/napi-darwin-arm64@0.43.0': + optional: true - '@babel/plugin-syntax-typescript@7.29.7(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.29.7 + '@ast-grep/napi-darwin-x64@0.34.1': + optional: true - '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-create-regexp-features-plugin': 7.29.7(@babel/core@7.29.7) - '@babel/helper-plugin-utils': 7.29.7 + '@ast-grep/napi-darwin-x64@0.43.0': + optional: true - '@babel/plugin-transform-arrow-functions@7.29.7(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.29.7 + '@ast-grep/napi-linux-arm64-gnu@0.34.1': + optional: true - '@babel/plugin-transform-async-generator-functions@7.29.7(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.29.7 - '@babel/helper-remap-async-to-generator': 7.29.7(@babel/core@7.29.7) - '@babel/traverse': 7.29.7 - transitivePeerDependencies: - - supports-color + '@ast-grep/napi-linux-arm64-gnu@0.43.0': + optional: true - '@babel/plugin-transform-async-to-generator@7.29.7(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-module-imports': 7.29.7 - '@babel/helper-plugin-utils': 7.29.7 - '@babel/helper-remap-async-to-generator': 7.29.7(@babel/core@7.29.7) - transitivePeerDependencies: - - supports-color + '@ast-grep/napi-linux-arm64-musl@0.34.1': + optional: true - '@babel/plugin-transform-block-scoped-functions@7.29.7(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.29.7 + '@ast-grep/napi-linux-arm64-musl@0.43.0': + optional: true - '@babel/plugin-transform-block-scoping@7.29.7(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.29.7 + '@ast-grep/napi-linux-x64-gnu@0.34.1': + optional: true - '@babel/plugin-transform-class-properties@7.29.7(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-create-class-features-plugin': 7.29.7(@babel/core@7.29.7) - '@babel/helper-plugin-utils': 7.29.7 - transitivePeerDependencies: - - supports-color + '@ast-grep/napi-linux-x64-gnu@0.43.0': + optional: true - '@babel/plugin-transform-class-static-block@7.29.7(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-create-class-features-plugin': 7.29.7(@babel/core@7.29.7) - '@babel/helper-plugin-utils': 7.29.7 - transitivePeerDependencies: - - supports-color + '@ast-grep/napi-linux-x64-musl@0.34.1': + optional: true - '@babel/plugin-transform-classes@7.29.7(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-annotate-as-pure': 7.29.7 - '@babel/helper-compilation-targets': 7.29.7 - '@babel/helper-globals': 7.29.7 - '@babel/helper-plugin-utils': 7.29.7 - '@babel/helper-replace-supers': 7.29.7(@babel/core@7.29.7) - '@babel/traverse': 7.29.7 - transitivePeerDependencies: - - supports-color + '@ast-grep/napi-linux-x64-musl@0.43.0': + optional: true - '@babel/plugin-transform-computed-properties@7.29.7(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.29.7 - '@babel/template': 7.29.7 + '@ast-grep/napi-win32-arm64-msvc@0.34.1': + optional: true - '@babel/plugin-transform-destructuring@7.29.7(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.29.7 - '@babel/traverse': 7.29.7 - transitivePeerDependencies: - - supports-color + '@ast-grep/napi-win32-arm64-msvc@0.43.0': + optional: true - '@babel/plugin-transform-dotall-regex@7.29.7(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-create-regexp-features-plugin': 7.29.7(@babel/core@7.29.7) - '@babel/helper-plugin-utils': 7.29.7 + '@ast-grep/napi-win32-ia32-msvc@0.34.1': + optional: true - '@babel/plugin-transform-duplicate-keys@7.29.7(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.29.7 + '@ast-grep/napi-win32-ia32-msvc@0.43.0': + optional: true - '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.29.7(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-create-regexp-features-plugin': 7.29.7(@babel/core@7.29.7) - '@babel/helper-plugin-utils': 7.29.7 + '@ast-grep/napi-win32-x64-msvc@0.34.1': + optional: true - '@babel/plugin-transform-dynamic-import@7.29.7(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.29.7 + '@ast-grep/napi-win32-x64-msvc@0.43.0': + optional: true - '@babel/plugin-transform-explicit-resource-management@7.29.7(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-destructuring': 7.29.7(@babel/core@7.29.7) - transitivePeerDependencies: - - supports-color + '@ast-grep/napi@0.34.1': + optionalDependencies: + '@ast-grep/napi-darwin-arm64': 0.34.1 + '@ast-grep/napi-darwin-x64': 0.34.1 + '@ast-grep/napi-linux-arm64-gnu': 0.34.1 + '@ast-grep/napi-linux-arm64-musl': 0.34.1 + '@ast-grep/napi-linux-x64-gnu': 0.34.1 + '@ast-grep/napi-linux-x64-musl': 0.34.1 + '@ast-grep/napi-win32-arm64-msvc': 0.34.1 + '@ast-grep/napi-win32-ia32-msvc': 0.34.1 + '@ast-grep/napi-win32-x64-msvc': 0.34.1 + + '@ast-grep/napi@0.43.0': + optionalDependencies: + '@ast-grep/napi-darwin-arm64': 0.43.0 + '@ast-grep/napi-darwin-x64': 0.43.0 + '@ast-grep/napi-linux-arm64-gnu': 0.43.0 + '@ast-grep/napi-linux-arm64-musl': 0.43.0 + '@ast-grep/napi-linux-x64-gnu': 0.43.0 + '@ast-grep/napi-linux-x64-musl': 0.43.0 + '@ast-grep/napi-win32-arm64-msvc': 0.43.0 + '@ast-grep/napi-win32-ia32-msvc': 0.43.0 + '@ast-grep/napi-win32-x64-msvc': 0.43.0 - '@babel/plugin-transform-exponentiation-operator@7.29.7(@babel/core@7.29.7)': + '@aws-sdk/checksums@3.1000.18': dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.29.7 + '@aws-sdk/core': 3.974.6 + '@aws-sdk/types': 3.973.8 + '@smithy/core': 3.29.5 + '@smithy/types': 4.16.1 + tslib: 2.8.1 - '@babel/plugin-transform-export-namespace-from@7.29.7(@babel/core@7.29.7)': + '@aws-sdk/client-cloudfront@3.1089.0': dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.29.7 + '@aws-sdk/core': 3.974.6 + '@aws-sdk/credential-provider-node': 3.972.37 + '@aws-sdk/types': 3.973.8 + '@smithy/core': 3.29.5 + '@smithy/fetch-http-handler': 5.6.7 + '@smithy/node-http-handler': 4.9.7 + '@smithy/types': 4.16.1 + tslib: 2.8.1 - '@babel/plugin-transform-for-of@7.29.7(@babel/core@7.29.7)': + '@aws-sdk/client-s3@3.1089.0': dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.29.7 - '@babel/helper-skip-transparent-expression-wrappers': 7.29.7 - transitivePeerDependencies: - - supports-color + '@aws-sdk/checksums': 3.1000.18 + '@aws-sdk/core': 3.974.6 + '@aws-sdk/credential-provider-node': 3.972.37 + '@aws-sdk/middleware-sdk-s3': 3.972.35 + '@aws-sdk/signature-v4-multi-region': 3.996.31 + '@aws-sdk/types': 3.973.8 + '@smithy/core': 3.29.5 + '@smithy/fetch-http-handler': 5.6.7 + '@smithy/node-http-handler': 4.9.7 + '@smithy/types': 4.16.1 + tslib: 2.8.1 - '@babel/plugin-transform-function-name@7.29.7(@babel/core@7.29.7)': + '@aws-sdk/core@3.974.6': dependencies: - '@babel/core': 7.29.7 - '@babel/helper-compilation-targets': 7.29.7 - '@babel/helper-plugin-utils': 7.29.7 - '@babel/traverse': 7.29.7 - transitivePeerDependencies: - - supports-color + '@aws-sdk/types': 3.973.8 + '@aws-sdk/xml-builder': 3.972.36 + '@smithy/core': 3.29.5 + '@smithy/node-config-provider': 4.5.10 + '@smithy/property-provider': 4.4.10 + '@smithy/protocol-http': 5.5.10 + '@smithy/signature-v4': 5.6.6 + '@smithy/smithy-client': 4.14.10 + '@smithy/types': 4.16.1 + '@smithy/util-base64': 4.5.10 + '@smithy/util-middleware': 4.4.10 + '@smithy/util-retry': 4.5.10 + '@smithy/util-utf8': 4.4.10 + tslib: 2.8.1 - '@babel/plugin-transform-json-strings@7.29.7(@babel/core@7.29.7)': + '@aws-sdk/credential-provider-env@3.972.32': dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.29.7 + '@aws-sdk/core': 3.974.6 + '@aws-sdk/types': 3.973.8 + '@smithy/property-provider': 4.4.10 + '@smithy/types': 4.16.1 + tslib: 2.8.1 - '@babel/plugin-transform-literals@7.29.7(@babel/core@7.29.7)': + '@aws-sdk/credential-provider-http@3.972.34': dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.29.7 + '@aws-sdk/core': 3.974.6 + '@aws-sdk/types': 3.973.8 + '@smithy/fetch-http-handler': 5.6.7 + '@smithy/node-http-handler': 4.9.7 + '@smithy/property-provider': 4.4.10 + '@smithy/protocol-http': 5.5.10 + '@smithy/smithy-client': 4.14.10 + '@smithy/types': 4.16.1 + '@smithy/util-stream': 4.7.10 + tslib: 2.8.1 - '@babel/plugin-transform-logical-assignment-operators@7.29.7(@babel/core@7.29.7)': + '@aws-sdk/credential-provider-ini@3.972.36': dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.29.7 + '@aws-sdk/core': 3.974.6 + '@aws-sdk/credential-provider-env': 3.972.32 + '@aws-sdk/credential-provider-http': 3.972.34 + '@aws-sdk/credential-provider-login': 3.972.66 + '@aws-sdk/credential-provider-process': 3.972.32 + '@aws-sdk/credential-provider-sso': 3.972.36 + '@aws-sdk/credential-provider-web-identity': 3.972.36 + '@aws-sdk/nested-clients': 3.997.33 + '@aws-sdk/types': 3.973.8 + '@smithy/credential-provider-imds': 4.4.10 + '@smithy/property-provider': 4.4.10 + '@smithy/shared-ini-file-loader': 4.6.10 + '@smithy/types': 4.16.1 + tslib: 2.8.1 - '@babel/plugin-transform-member-expression-literals@7.29.7(@babel/core@7.29.7)': + '@aws-sdk/credential-provider-login@3.972.66': dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.29.7 + '@aws-sdk/core': 3.974.6 + '@aws-sdk/nested-clients': 3.997.33 + '@aws-sdk/types': 3.973.8 + '@smithy/core': 3.29.5 + '@smithy/types': 4.16.1 + tslib: 2.8.1 - '@babel/plugin-transform-modules-amd@7.29.7(@babel/core@7.29.7)': + '@aws-sdk/credential-provider-node@3.972.37': dependencies: - '@babel/core': 7.29.7 - '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.7) - '@babel/helper-plugin-utils': 7.29.7 - transitivePeerDependencies: - - supports-color + '@aws-sdk/credential-provider-env': 3.972.32 + '@aws-sdk/credential-provider-http': 3.972.34 + '@aws-sdk/credential-provider-ini': 3.972.36 + '@aws-sdk/credential-provider-process': 3.972.32 + '@aws-sdk/credential-provider-sso': 3.972.36 + '@aws-sdk/credential-provider-web-identity': 3.972.36 + '@aws-sdk/types': 3.973.8 + '@smithy/credential-provider-imds': 4.4.10 + '@smithy/property-provider': 4.4.10 + '@smithy/shared-ini-file-loader': 4.6.10 + '@smithy/types': 4.16.1 + tslib: 2.8.1 - '@babel/plugin-transform-modules-commonjs@7.29.7(@babel/core@7.29.7)': + '@aws-sdk/credential-provider-process@3.972.32': dependencies: - '@babel/core': 7.29.7 - '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.7) - '@babel/helper-plugin-utils': 7.29.7 - transitivePeerDependencies: - - supports-color + '@aws-sdk/core': 3.974.6 + '@aws-sdk/types': 3.973.8 + '@smithy/property-provider': 4.4.10 + '@smithy/shared-ini-file-loader': 4.6.10 + '@smithy/types': 4.16.1 + tslib: 2.8.1 - '@babel/plugin-transform-modules-systemjs@7.29.7(@babel/core@7.29.7)': + '@aws-sdk/credential-provider-sso@3.972.36': dependencies: - '@babel/core': 7.29.7 - '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.7) - '@babel/helper-plugin-utils': 7.29.7 - '@babel/helper-validator-identifier': 7.29.7 - '@babel/traverse': 7.29.7 - transitivePeerDependencies: - - supports-color + '@aws-sdk/core': 3.974.6 + '@aws-sdk/nested-clients': 3.997.33 + '@aws-sdk/token-providers': 3.1038.0 + '@aws-sdk/types': 3.973.8 + '@smithy/property-provider': 4.4.10 + '@smithy/shared-ini-file-loader': 4.6.10 + '@smithy/types': 4.16.1 + tslib: 2.8.1 - '@babel/plugin-transform-modules-umd@7.29.7(@babel/core@7.29.7)': + '@aws-sdk/credential-provider-web-identity@3.972.36': dependencies: - '@babel/core': 7.29.7 - '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.7) - '@babel/helper-plugin-utils': 7.29.7 - transitivePeerDependencies: - - supports-color + '@aws-sdk/core': 3.974.6 + '@aws-sdk/nested-clients': 3.997.33 + '@aws-sdk/types': 3.973.8 + '@smithy/property-provider': 4.4.10 + '@smithy/shared-ini-file-loader': 4.6.10 + '@smithy/types': 4.16.1 + tslib: 2.8.1 - '@babel/plugin-transform-named-capturing-groups-regex@7.29.7(@babel/core@7.29.7)': + '@aws-sdk/middleware-sdk-s3@3.972.35': dependencies: - '@babel/core': 7.29.7 - '@babel/helper-create-regexp-features-plugin': 7.29.7(@babel/core@7.29.7) - '@babel/helper-plugin-utils': 7.29.7 + '@aws-sdk/core': 3.974.6 + '@aws-sdk/types': 3.973.8 + '@aws-sdk/util-arn-parser': 3.972.28 + '@smithy/core': 3.29.5 + '@smithy/node-config-provider': 4.5.10 + '@smithy/protocol-http': 5.5.10 + '@smithy/signature-v4': 5.6.6 + '@smithy/smithy-client': 4.14.10 + '@smithy/types': 4.16.1 + '@smithy/util-config-provider': 4.4.10 + '@smithy/util-middleware': 4.4.10 + '@smithy/util-stream': 4.7.10 + '@smithy/util-utf8': 4.4.10 + tslib: 2.8.1 - '@babel/plugin-transform-new-target@7.29.7(@babel/core@7.29.7)': + '@aws-sdk/nested-clients@3.997.33': dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.29.7 + '@aws-sdk/core': 3.974.6 + '@aws-sdk/signature-v4-multi-region': 3.996.31 + '@aws-sdk/types': 3.973.8 + '@smithy/core': 3.29.5 + '@smithy/fetch-http-handler': 5.6.7 + '@smithy/node-http-handler': 4.9.7 + '@smithy/types': 4.16.1 + tslib: 2.8.1 - '@babel/plugin-transform-nullish-coalescing-operator@7.29.7(@babel/core@7.29.7)': + '@aws-sdk/signature-v4-multi-region@3.996.31': dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.29.7 + '@aws-sdk/types': 3.973.8 + '@smithy/signature-v4': 5.6.6 + '@smithy/types': 4.16.1 + tslib: 2.8.1 - '@babel/plugin-transform-numeric-separator@7.29.7(@babel/core@7.29.7)': + '@aws-sdk/token-providers@3.1038.0': dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.29.7 + '@aws-sdk/core': 3.974.6 + '@aws-sdk/nested-clients': 3.997.33 + '@aws-sdk/types': 3.973.8 + '@smithy/property-provider': 4.4.10 + '@smithy/shared-ini-file-loader': 4.6.10 + '@smithy/types': 4.16.1 + tslib: 2.8.1 - '@babel/plugin-transform-object-rest-spread@7.29.7(@babel/core@7.29.7)': + '@aws-sdk/types@3.973.8': dependencies: - '@babel/core': 7.29.7 - '@babel/helper-compilation-targets': 7.29.7 - '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-destructuring': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-parameters': 7.29.7(@babel/core@7.29.7) - '@babel/traverse': 7.29.7 - transitivePeerDependencies: - - supports-color + '@smithy/types': 4.16.1 + tslib: 2.8.1 - '@babel/plugin-transform-object-super@7.29.7(@babel/core@7.29.7)': + '@aws-sdk/util-arn-parser@3.972.28': dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.29.7 - '@babel/helper-replace-supers': 7.29.7(@babel/core@7.29.7) - transitivePeerDependencies: - - supports-color + '@aws-sdk/core': 3.974.6 + tslib: 2.8.1 - '@babel/plugin-transform-optional-catch-binding@7.29.7(@babel/core@7.29.7)': + '@aws-sdk/xml-builder@3.972.36': dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.29.7 + '@smithy/types': 4.16.1 + tslib: 2.8.1 - '@babel/plugin-transform-optional-chaining@7.29.7(@babel/core@7.29.7)': + '@babel/code-frame@7.29.7': dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.29.7 - '@babel/helper-skip-transparent-expression-wrappers': 7.29.7 - transitivePeerDependencies: - - supports-color + '@babel/helper-validator-identifier': 7.29.7 + js-tokens: 4.0.0 + picocolors: 1.1.1 - '@babel/plugin-transform-parameters@7.29.7(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.29.7 + '@babel/compat-data@7.29.0': {} + + '@babel/compat-data@7.29.7': {} - '@babel/plugin-transform-private-methods@7.29.7(@babel/core@7.29.7)': + '@babel/core@7.29.0': dependencies: - '@babel/core': 7.29.7 - '@babel/helper-create-class-features-plugin': 7.29.7(@babel/core@7.29.7) - '@babel/helper-plugin-utils': 7.29.7 + '@babel/code-frame': 7.29.7 + '@babel/generator': 7.29.1 + '@babel/helper-compilation-targets': 7.28.6 + '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) + '@babel/helpers': 7.28.6 + '@babel/parser': 7.29.0 + '@babel/template': 7.28.6 + '@babel/traverse': 7.29.0 + '@babel/types': 7.29.0 + '@jridgewell/remapping': 2.3.5 + convert-source-map: 2.0.0 + debug: 4.4.3(supports-color@8.1.1) + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-private-property-in-object@7.29.7(@babel/core@7.29.7)': + '@babel/core@7.29.7': dependencies: - '@babel/core': 7.29.7 - '@babel/helper-annotate-as-pure': 7.29.7 - '@babel/helper-create-class-features-plugin': 7.29.7(@babel/core@7.29.7) - '@babel/helper-plugin-utils': 7.29.7 + '@babel/code-frame': 7.29.7 + '@babel/generator': 7.29.7 + '@babel/helper-compilation-targets': 7.29.7 + '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.7) + '@babel/helpers': 7.29.7 + '@babel/parser': 7.29.7 + '@babel/template': 7.29.7 + '@babel/traverse': 7.29.7 + '@babel/types': 7.29.7 + '@jridgewell/remapping': 2.3.5 + convert-source-map: 2.0.0 + debug: 4.4.3(supports-color@8.1.1) + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-property-literals@7.29.7(@babel/core@7.29.7)': + '@babel/generator@7.29.1': dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.29.7 + '@babel/parser': 7.29.0 + '@babel/types': 7.29.0 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + jsesc: 3.1.0 - '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.29.0)': + '@babel/generator@7.29.7': dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 + '@babel/parser': 7.29.7 + '@babel/types': 7.29.7 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + jsesc: 3.1.0 - '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.29.0)': + '@babel/helper-compilation-targets@7.28.6': dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 + '@babel/compat-data': 7.29.0 + '@babel/helper-validator-option': 7.27.1 + browserslist: 4.28.1 + lru-cache: 5.1.1 + semver: 6.3.1 - '@babel/plugin-transform-regenerator@7.29.7(@babel/core@7.29.7)': + '@babel/helper-compilation-targets@7.29.7': dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.29.7 + '@babel/compat-data': 7.29.7 + '@babel/helper-validator-option': 7.29.7 + browserslist: 4.28.6 + lru-cache: 5.1.1 + semver: 6.3.1 - '@babel/plugin-transform-regexp-modifiers@7.29.7(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-create-regexp-features-plugin': 7.29.7(@babel/core@7.29.7) - '@babel/helper-plugin-utils': 7.29.7 + '@babel/helper-globals@7.28.0': {} - '@babel/plugin-transform-reserved-words@7.29.7(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.29.7 + '@babel/helper-globals@7.29.7': {} - '@babel/plugin-transform-runtime@7.29.7(@babel/core@7.29.7)': + '@babel/helper-module-imports@7.28.6': dependencies: - '@babel/core': 7.29.7 - '@babel/helper-module-imports': 7.29.7 - '@babel/helper-plugin-utils': 7.29.7 - babel-plugin-polyfill-corejs2: 0.4.17(@babel/core@7.29.7) - babel-plugin-polyfill-corejs3: 0.13.0(@babel/core@7.29.7) - babel-plugin-polyfill-regenerator: 0.6.8(@babel/core@7.29.7) - semver: 6.3.1 + '@babel/traverse': 7.29.7 + '@babel/types': 7.29.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-shorthand-properties@7.29.7(@babel/core@7.29.7)': + '@babel/helper-module-imports@7.29.7': dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.29.7 + '@babel/traverse': 7.29.7 + '@babel/types': 7.29.7 + transitivePeerDependencies: + - supports-color - '@babel/plugin-transform-spread@7.29.7(@babel/core@7.29.7)': + '@babel/helper-module-transforms@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.29.7 - '@babel/helper-skip-transparent-expression-wrappers': 7.29.7 + '@babel/core': 7.29.0 + '@babel/helper-module-imports': 7.28.6 + '@babel/helper-validator-identifier': 7.29.7 + '@babel/traverse': 7.29.0 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-sticky-regex@7.29.7(@babel/core@7.29.7)': + '@babel/helper-module-transforms@7.29.7(@babel/core@7.29.7)': dependencies: '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.29.7 + '@babel/helper-module-imports': 7.29.7 + '@babel/helper-validator-identifier': 7.29.7 + '@babel/traverse': 7.29.7 + transitivePeerDependencies: + - supports-color - '@babel/plugin-transform-template-literals@7.29.7(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.29.7 + '@babel/helper-plugin-utils@7.28.6': {} - '@babel/plugin-transform-typeof-symbol@7.29.7(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.29.7 + '@babel/helper-plugin-utils@7.29.7': {} - '@babel/plugin-transform-typescript@7.29.7(@babel/core@7.29.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-annotate-as-pure': 7.29.7 - '@babel/helper-create-class-features-plugin': 7.29.7(@babel/core@7.29.7) - '@babel/helper-plugin-utils': 7.29.7 - '@babel/helper-skip-transparent-expression-wrappers': 7.29.7 - '@babel/plugin-syntax-typescript': 7.29.7(@babel/core@7.29.7) - transitivePeerDependencies: - - supports-color + '@babel/helper-string-parser@7.27.1': {} + + '@babel/helper-string-parser@7.29.7': {} + + '@babel/helper-validator-identifier@7.29.7': {} - '@babel/plugin-transform-unicode-escapes@7.29.7(@babel/core@7.29.7)': + '@babel/helper-validator-option@7.27.1': {} + + '@babel/helper-validator-option@7.29.7': {} + + '@babel/helpers@7.28.6': dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.29.7 + '@babel/template': 7.28.6 + '@babel/types': 7.29.7 - '@babel/plugin-transform-unicode-property-regex@7.29.7(@babel/core@7.29.7)': + '@babel/helpers@7.29.7': dependencies: - '@babel/core': 7.29.7 - '@babel/helper-create-regexp-features-plugin': 7.29.7(@babel/core@7.29.7) - '@babel/helper-plugin-utils': 7.29.7 + '@babel/template': 7.29.7 + '@babel/types': 7.29.7 - '@babel/plugin-transform-unicode-regex@7.29.7(@babel/core@7.29.7)': + '@babel/parser@7.29.0': dependencies: - '@babel/core': 7.29.7 - '@babel/helper-create-regexp-features-plugin': 7.29.7(@babel/core@7.29.7) - '@babel/helper-plugin-utils': 7.29.7 + '@babel/types': 7.29.7 - '@babel/plugin-transform-unicode-sets-regex@7.29.7(@babel/core@7.29.7)': + '@babel/parser@7.29.7': dependencies: - '@babel/core': 7.29.7 - '@babel/helper-create-regexp-features-plugin': 7.29.7(@babel/core@7.29.7) - '@babel/helper-plugin-utils': 7.29.7 + '@babel/types': 7.29.7 - '@babel/preset-env@7.29.7(@babel/core@7.29.7)': + '@babel/plugin-syntax-import-assertions@7.28.6(@babel/core@7.29.7)': dependencies: - '@babel/compat-data': 7.29.7 '@babel/core': 7.29.7 - '@babel/helper-compilation-targets': 7.29.7 '@babel/helper-plugin-utils': 7.29.7 - '@babel/helper-validator-option': 7.29.7 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-bugfix-safari-rest-destructuring-rhs-array': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.29.7) - '@babel/plugin-syntax-import-assertions': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-syntax-import-attributes': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.29.7) - '@babel/plugin-transform-arrow-functions': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-async-generator-functions': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-async-to-generator': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-block-scoped-functions': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-block-scoping': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-class-properties': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-class-static-block': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-classes': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-computed-properties': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-destructuring': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-dotall-regex': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-duplicate-keys': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-dynamic-import': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-explicit-resource-management': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-exponentiation-operator': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-export-namespace-from': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-for-of': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-function-name': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-json-strings': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-literals': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-logical-assignment-operators': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-member-expression-literals': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-modules-amd': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-modules-commonjs': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-modules-systemjs': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-modules-umd': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-named-capturing-groups-regex': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-new-target': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-nullish-coalescing-operator': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-numeric-separator': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-object-rest-spread': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-object-super': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-optional-catch-binding': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-optional-chaining': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-parameters': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-private-methods': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-private-property-in-object': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-property-literals': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-regenerator': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-regexp-modifiers': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-reserved-words': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-shorthand-properties': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-spread': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-sticky-regex': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-template-literals': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-typeof-symbol': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-unicode-escapes': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-unicode-property-regex': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-unicode-regex': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-unicode-sets-regex': 7.29.7(@babel/core@7.29.7) - '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.29.7) - babel-plugin-polyfill-corejs2: 0.4.17(@babel/core@7.29.7) - babel-plugin-polyfill-corejs3: 0.14.2(@babel/core@7.29.7) - babel-plugin-polyfill-regenerator: 0.6.8(@babel/core@7.29.7) - core-js-compat: 3.49.0 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.29.7)': + '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.29.7 - '@babel/types': 7.29.7 - esutils: 2.0.3 + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 - '@babel/preset-typescript@7.29.7(@babel/core@7.29.7)': + '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.29.7 - '@babel/helper-validator-option': 7.29.7 - '@babel/plugin-syntax-jsx': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-modules-commonjs': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-typescript': 7.29.7(@babel/core@7.29.7) - transitivePeerDependencies: - - supports-color + '@babel/core': 7.29.0 + '@babel/helper-plugin-utils': 7.28.6 '@babel/runtime@7.28.6': {} @@ -10562,12 +8181,6 @@ snapshots: tslib: 2.8.1 optional: true - '@emnapi/core@1.11.2': - dependencies: - '@emnapi/wasi-threads': 1.2.2 - tslib: 2.8.1 - optional: true - '@emnapi/core@1.4.5': dependencies: '@emnapi/wasi-threads': 1.0.4 @@ -10578,11 +8191,6 @@ snapshots: tslib: 2.8.1 optional: true - '@emnapi/runtime@1.11.2': - dependencies: - tslib: 2.8.1 - optional: true - '@emnapi/runtime@1.4.5': dependencies: tslib: 2.8.1 @@ -10596,11 +8204,6 @@ snapshots: tslib: 2.8.1 optional: true - '@emnapi/wasi-threads@1.2.2': - dependencies: - tslib: 2.8.1 - optional: true - '@envelop/core@5.5.1': dependencies: '@envelop/instrumentation': 1.0.0 @@ -10618,14 +8221,6 @@ snapshots: '@whatwg-node/promise-helpers': 1.3.2 tslib: 2.8.1 - '@es-joy/jsdoccomment@0.50.2': - dependencies: - '@types/estree': 1.0.9 - '@typescript-eslint/types': 8.56.1 - comment-parser: 1.4.1 - esquery: 1.7.0 - jsdoc-type-pratt-parser: 4.1.0 - '@esbuild/aix-ppc64@0.25.12': optional: true @@ -10860,52 +8455,6 @@ snapshots: '@esbuild/win32-x64@0.28.1': optional: true - '@eslint-community/eslint-utils@4.9.1(eslint@9.39.5(jiti@2.6.1))': - dependencies: - eslint: 9.39.5(jiti@2.6.1) - eslint-visitor-keys: 3.4.3 - - '@eslint-community/regexpp@4.12.2': {} - - '@eslint/config-array@0.21.2': - dependencies: - '@eslint/object-schema': 2.1.7 - debug: 4.4.3(supports-color@8.1.1) - minimatch: 3.1.5 - transitivePeerDependencies: - - supports-color - - '@eslint/config-helpers@0.4.2': - dependencies: - '@eslint/core': 0.17.0 - - '@eslint/core@0.17.0': - dependencies: - '@types/json-schema': 7.0.15 - - '@eslint/eslintrc@3.3.6': - dependencies: - ajv: 6.15.0 - debug: 4.4.3(supports-color@8.1.1) - espree: 10.4.0 - globals: 14.0.0 - ignore: 5.3.2 - import-fresh: 3.3.1 - js-yaml: 4.3.0 - minimatch: 3.1.5 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - supports-color - - '@eslint/js@9.39.5': {} - - '@eslint/object-schema@2.1.7': {} - - '@eslint/plugin-kit@0.4.1': - dependencies: - '@eslint/core': 0.17.0 - levn: 0.4.1 - '@exodus/bytes@1.15.1': optional: true @@ -11451,27 +9000,11 @@ snapshots: '@graphql-tools/utils': 10.7.2(graphql@16.14.2) '@whatwg-node/promise-helpers': 1.3.2 graphql: 16.14.2 - tslib: 2.8.1 - - '@graphql-typed-document-node/core@3.2.0(graphql@16.14.2)': - dependencies: - graphql: 16.14.2 - - '@humanfs/core@0.19.2': - dependencies: - '@humanfs/types': 0.15.0 - - '@humanfs/node@0.16.8': - dependencies: - '@humanfs/core': 0.19.2 - '@humanfs/types': 0.15.0 - '@humanwhocodes/retry': 0.4.3 - - '@humanfs/types@0.15.0': {} - - '@humanwhocodes/module-importer@1.0.1': {} + tslib: 2.8.1 - '@humanwhocodes/retry@0.4.3': {} + '@graphql-typed-document-node/core@3.2.0(graphql@16.14.2)': + dependencies: + graphql: 16.14.2 '@iarna/toml@2.2.5': {} @@ -11765,13 +9298,6 @@ snapshots: globby: 11.1.0 read-yaml-file: 1.1.0 - '@microsoft/tsdoc-config@0.18.1': - dependencies: - '@microsoft/tsdoc': 0.16.0 - ajv: 8.18.0 - jju: 1.4.0 - resolve: 1.22.11 - '@microsoft/tsdoc@0.16.0': {} '@mswjs/interceptors@0.41.9': @@ -11783,13 +9309,6 @@ snapshots: outvariant: 1.4.3 strict-event-emitter: 0.5.1 - '@napi-rs/wasm-runtime@0.2.12': - dependencies: - '@emnapi/core': 1.11.2 - '@emnapi/runtime': 1.11.2 - '@tybys/wasm-util': 0.10.3 - optional: true - '@napi-rs/wasm-runtime@0.2.4': dependencies: '@emnapi/core': 1.4.5 @@ -11826,69 +9345,6 @@ snapshots: tslib: 2.8.1 yargs-parser: 21.1.1 - '@nx/eslint-plugin@22.7.7(@babel/traverse@7.29.7)(@typescript-eslint/parser@8.56.1(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3))(eslint-config-prettier@10.1.8(eslint@9.39.5(jiti@2.6.1)))(eslint@9.39.5(jiti@2.6.1))(nx@22.7.7)(typescript@5.9.3)': - dependencies: - '@nx/devkit': 22.7.7(nx@22.7.7) - '@nx/js': 22.7.7(@babel/traverse@7.29.7)(nx@22.7.7) - '@phenomnomnominal/tsquery': 6.2.0(typescript@5.9.3) - '@typescript-eslint/parser': 8.56.1(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/type-utils': 8.56.1(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/utils': 8.56.1(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3) - chalk: 4.1.2 - confusing-browser-globals: 1.0.11 - globals: 17.7.0 - jsonc-eslint-parser: 2.4.2 - semver: 7.8.4 - tslib: 2.8.1 - optionalDependencies: - eslint-config-prettier: 10.1.8(eslint@9.39.5(jiti@2.6.1)) - transitivePeerDependencies: - - '@babel/traverse' - - '@swc-node/register' - - '@swc/core' - - debug - - eslint - - nx - - supports-color - - typescript - - verdaccio - - '@nx/js@22.7.7(@babel/traverse@7.29.7)(nx@22.7.7)': - dependencies: - '@babel/core': 7.29.7 - '@babel/plugin-proposal-decorators': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-class-properties': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-runtime': 7.29.7(@babel/core@7.29.7) - '@babel/preset-env': 7.29.7(@babel/core@7.29.7) - '@babel/preset-typescript': 7.29.7(@babel/core@7.29.7) - '@babel/runtime': 7.29.7 - '@nx/devkit': 22.7.7(nx@22.7.7) - '@nx/workspace': 22.7.7 - '@zkochan/js-yaml': 0.0.7 - babel-plugin-const-enum: 1.2.0(@babel/core@7.29.7) - babel-plugin-macros: 3.1.0 - babel-plugin-transform-typescript-metadata: 0.3.2(@babel/core@7.29.7)(@babel/traverse@7.29.7) - chalk: 4.1.2 - columnify: 1.6.0 - detect-port: 2.1.0 - ignore: 7.0.6 - js-tokens: 4.0.0 - jsonc-parser: 3.2.0 - npm-run-path: 4.0.1 - picocolors: 1.1.1 - picomatch: 4.0.4 - semver: 7.8.4 - source-map-support: 0.5.19 - tinyglobby: 0.2.17 - tslib: 2.8.1 - transitivePeerDependencies: - - '@babel/traverse' - - '@swc-node/register' - - '@swc/core' - - debug - - nx - - supports-color - '@nx/nx-darwin-arm64@22.7.7': optional: true @@ -12510,17 +9966,9 @@ snapshots: '@parcel/watcher-win32-x64': 2.5.6 optional: true - '@phenomnomnominal/tsquery@6.2.0(typescript@5.9.3)': - dependencies: - '@types/esquery': 1.5.4 - esquery: 1.7.0 - typescript: 5.9.3 - '@pkgjs/parseargs@0.11.0': optional: true - '@pkgr/core@0.3.6': {} - '@playwright/test@1.61.1': dependencies: playwright: 1.61.1 @@ -12691,71 +10139,6 @@ snapshots: - react - react-dom - '@shopify/eslint-plugin-cli@file:packages/eslint-plugin-cli(@typescript-eslint/utils@8.56.1(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.5(jiti@2.6.1))(prettier@3.8.4)(typescript@5.9.3)(vitest@4.1.10)': - dependencies: - '@shopify/eslint-plugin': 50.0.0(@typescript-eslint/eslint-plugin@8.56.1(@typescript-eslint/parser@8.56.1(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3))(@typescript-eslint/parser@8.56.1(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3))(@typescript-eslint/utils@8.56.1(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.5(jiti@2.6.1))(prettier@3.8.4)(typescript@5.9.3) - '@typescript-eslint/eslint-plugin': 8.56.1(@typescript-eslint/parser@8.56.1(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/parser': 8.56.1(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3) - '@vitest/eslint-plugin': 1.1.44(@typescript-eslint/utils@8.56.1(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3)(vitest@4.1.10) - eslint: 9.39.5(jiti@2.6.1) - eslint-config-prettier: 10.1.8(eslint@9.39.5(jiti@2.6.1)) - eslint-plugin-no-catch-all: 1.1.0(eslint@9.39.5(jiti@2.6.1)) - eslint-plugin-react: 7.37.5(eslint@9.39.5(jiti@2.6.1)) - eslint-plugin-react-hooks: 5.2.0(eslint@9.39.5(jiti@2.6.1)) - eslint-plugin-tsdoc: 0.5.2(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3) - eslint-plugin-unused-imports: 4.4.1(@typescript-eslint/eslint-plugin@8.56.1(@typescript-eslint/parser@8.56.1(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.5(jiti@2.6.1)) - execa: 7.2.0 - globals: 16.5.0 - transitivePeerDependencies: - - '@types/eslint' - - '@typescript-eslint/utils' - - eslint-import-resolver-node - - eslint-import-resolver-webpack - - eslint-plugin-import - - jest - - prettier - - supports-color - - typescript - - vitest - - '@shopify/eslint-plugin@50.0.0(@typescript-eslint/eslint-plugin@8.56.1(@typescript-eslint/parser@8.56.1(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3))(@typescript-eslint/parser@8.56.1(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3))(@typescript-eslint/utils@8.56.1(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.5(jiti@2.6.1))(prettier@3.8.4)(typescript@5.9.3)': - dependencies: - change-case: 4.1.2 - common-tags: 1.8.2 - doctrine: 2.1.0 - eslint: 9.39.5(jiti@2.6.1) - eslint-config-prettier: 9.1.2(eslint@9.39.5(jiti@2.6.1)) - eslint-import-resolver-typescript: 4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.56.1(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.5(jiti@2.6.1)))(eslint@9.39.5(jiti@2.6.1)) - eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.56.1(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.56.1(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.5(jiti@2.6.1)))(eslint@9.39.5(jiti@2.6.1)))(eslint@9.39.5(jiti@2.6.1)) - eslint-plugin-eslint-comments: 3.2.0(eslint@9.39.5(jiti@2.6.1)) - eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.56.1(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.5(jiti@2.6.1)) - eslint-plugin-jest: 28.14.0(@typescript-eslint/eslint-plugin@8.56.1(@typescript-eslint/parser@8.56.1(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3) - eslint-plugin-jest-formatting: 3.1.0(eslint@9.39.5(jiti@2.6.1)) - eslint-plugin-jsx-a11y: 6.10.2(eslint@9.39.5(jiti@2.6.1)) - eslint-plugin-n: 17.24.0(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3) - eslint-plugin-prettier: 5.5.6(eslint-config-prettier@9.1.2(eslint@9.39.5(jiti@2.6.1)))(eslint@9.39.5(jiti@2.6.1))(prettier@3.8.4) - eslint-plugin-promise: 7.2.1(eslint@9.39.5(jiti@2.6.1)) - eslint-plugin-react: 7.37.5(eslint@9.39.5(jiti@2.6.1)) - eslint-plugin-react-hooks: 5.2.0(eslint@9.39.5(jiti@2.6.1)) - eslint-plugin-sort-class-members: 1.21.0(eslint@9.39.5(jiti@2.6.1)) - globals: 15.15.0 - jsx-ast-utils: 3.3.5 - pkg-dir: 5.0.0 - pluralize: 8.0.0 - typescript-eslint: 8.56.1(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3) - transitivePeerDependencies: - - '@types/eslint' - - '@typescript-eslint/eslint-plugin' - - '@typescript-eslint/parser' - - '@typescript-eslint/utils' - - eslint-import-resolver-node - - eslint-import-resolver-webpack - - eslint-plugin-import - - jest - - prettier - - supports-color - - typescript - '@shopify/generate-docs@1.2.3': dependencies: '@types/react': 18.3.12 @@ -13080,10 +10463,6 @@ snapshots: '@types/diff@5.2.3': {} - '@types/esquery@1.5.4': - dependencies: - '@types/estree': 1.0.9 - '@types/estree@1.0.8': {} '@types/estree@1.0.9': {} @@ -13129,8 +10508,6 @@ snapshots: '@types/normalize-package-data@2.4.4': {} - '@types/parse-json@4.0.2': {} - '@types/prop-types@15.7.15': {} '@types/proper-lockfile@4.1.4': @@ -13180,156 +10557,6 @@ snapshots: dependencies: '@types/node': 22.20.1 - '@typescript-eslint/eslint-plugin@8.56.1(@typescript-eslint/parser@8.56.1(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3)': - dependencies: - '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.56.1(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.56.1 - '@typescript-eslint/type-utils': 8.56.1(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/utils': 8.56.1(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.56.1 - eslint: 9.39.5(jiti@2.6.1) - ignore: 7.0.5 - natural-compare: 1.4.0 - ts-api-utils: 2.4.0(typescript@5.9.3) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/parser@8.56.1(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3)': - dependencies: - '@typescript-eslint/scope-manager': 8.56.1 - '@typescript-eslint/types': 8.56.1 - '@typescript-eslint/typescript-estree': 8.56.1(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.56.1 - debug: 4.4.3(supports-color@8.1.1) - eslint: 9.39.5(jiti@2.6.1) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/project-service@8.56.1(typescript@5.9.3)': - dependencies: - '@typescript-eslint/tsconfig-utils': 8.56.1(typescript@5.9.3) - '@typescript-eslint/types': 8.56.1 - debug: 4.4.3(supports-color@8.1.1) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/scope-manager@8.56.1': - dependencies: - '@typescript-eslint/types': 8.56.1 - '@typescript-eslint/visitor-keys': 8.56.1 - - '@typescript-eslint/tsconfig-utils@8.56.1(typescript@5.9.3)': - dependencies: - typescript: 5.9.3 - - '@typescript-eslint/type-utils@8.56.1(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3)': - dependencies: - '@typescript-eslint/types': 8.56.1 - '@typescript-eslint/typescript-estree': 8.56.1(typescript@5.9.3) - '@typescript-eslint/utils': 8.56.1(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3) - debug: 4.4.3(supports-color@8.1.1) - eslint: 9.39.5(jiti@2.6.1) - ts-api-utils: 2.5.0(typescript@5.9.3) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/types@8.56.1': {} - - '@typescript-eslint/typescript-estree@8.56.1(typescript@5.9.3)': - dependencies: - '@typescript-eslint/project-service': 8.56.1(typescript@5.9.3) - '@typescript-eslint/tsconfig-utils': 8.56.1(typescript@5.9.3) - '@typescript-eslint/types': 8.56.1 - '@typescript-eslint/visitor-keys': 8.56.1 - debug: 4.4.3(supports-color@8.1.1) - minimatch: 10.2.5 - semver: 7.8.4 - tinyglobby: 0.2.17 - ts-api-utils: 2.4.0(typescript@5.9.3) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/utils@8.56.1(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3)': - dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.5(jiti@2.6.1)) - '@typescript-eslint/scope-manager': 8.56.1 - '@typescript-eslint/types': 8.56.1 - '@typescript-eslint/typescript-estree': 8.56.1(typescript@5.9.3) - eslint: 9.39.5(jiti@2.6.1) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/visitor-keys@8.56.1': - dependencies: - '@typescript-eslint/types': 8.56.1 - eslint-visitor-keys: 5.0.1 - - '@unrs/resolver-binding-android-arm-eabi@1.11.1': - optional: true - - '@unrs/resolver-binding-android-arm64@1.11.1': - optional: true - - '@unrs/resolver-binding-darwin-arm64@1.11.1': - optional: true - - '@unrs/resolver-binding-darwin-x64@1.11.1': - optional: true - - '@unrs/resolver-binding-freebsd-x64@1.11.1': - optional: true - - '@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1': - optional: true - - '@unrs/resolver-binding-linux-arm-musleabihf@1.11.1': - optional: true - - '@unrs/resolver-binding-linux-arm64-gnu@1.11.1': - optional: true - - '@unrs/resolver-binding-linux-arm64-musl@1.11.1': - optional: true - - '@unrs/resolver-binding-linux-ppc64-gnu@1.11.1': - optional: true - - '@unrs/resolver-binding-linux-riscv64-gnu@1.11.1': - optional: true - - '@unrs/resolver-binding-linux-riscv64-musl@1.11.1': - optional: true - - '@unrs/resolver-binding-linux-s390x-gnu@1.11.1': - optional: true - - '@unrs/resolver-binding-linux-x64-gnu@1.11.1': - optional: true - - '@unrs/resolver-binding-linux-x64-musl@1.11.1': - optional: true - - '@unrs/resolver-binding-wasm32-wasi@1.11.1': - dependencies: - '@napi-rs/wasm-runtime': 0.2.12 - optional: true - - '@unrs/resolver-binding-win32-arm64-msvc@1.11.1': - optional: true - - '@unrs/resolver-binding-win32-ia32-msvc@1.11.1': - optional: true - - '@unrs/resolver-binding-win32-x64-msvc@1.11.1': - optional: true - '@vercel/detect-agent@1.2.5': {} '@vitejs/plugin-react@5.2.0(vite@6.4.3(@types/node@26.1.1)(jiti@2.6.1)(sass@1.100.0)(tsx@4.23.1)(yaml@2.9.0))': @@ -13360,22 +10587,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@vitest/eslint-plugin@1.1.44(@typescript-eslint/utils@8.56.1(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3)(vitest@4.1.10(@opentelemetry/api@1.9.1)(@types/node@26.1.1)(@vitest/coverage-istanbul@3.2.7)(jsdom@28.1.0)(msw@2.15.0(@types/node@26.1.1)(typescript@5.9.3))(vite@6.4.3(@types/node@26.1.1)(jiti@2.6.1)(sass@1.100.0)(tsx@4.23.1)(yaml@2.9.0)))': - dependencies: - '@typescript-eslint/utils': 8.56.1(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3) - eslint: 9.39.5(jiti@2.6.1) - optionalDependencies: - typescript: 5.9.3 - vitest: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@26.1.1)(@vitest/coverage-istanbul@3.2.7)(jsdom@28.1.0)(msw@2.15.0(@types/node@26.1.1)(typescript@5.9.3))(vite@6.4.3(@types/node@26.1.1)(jiti@2.6.1)(sass@1.100.0)(tsx@4.23.1)(yaml@2.9.0)) - - '@vitest/eslint-plugin@1.1.44(@typescript-eslint/utils@8.56.1(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3)(vitest@4.1.10)': - dependencies: - '@typescript-eslint/utils': 8.56.1(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3) - eslint: 9.39.5(jiti@2.6.1) - optionalDependencies: - typescript: 5.9.3 - vitest: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@22.20.1)(@vitest/coverage-istanbul@3.2.7)(jsdom@28.1.0)(msw@2.15.0(@types/node@22.20.1)(typescript@5.9.3))(vite@6.4.3(@types/node@22.20.1)(jiti@2.6.1)(sass@1.100.0)(tsx@4.23.1)(yaml@2.9.0)) - '@vitest/expect@4.1.10': dependencies: '@standard-schema/spec': 1.1.0 @@ -13458,38 +10669,18 @@ snapshots: dependencies: argparse: 2.0.1 - acorn-jsx@5.3.2(acorn@8.17.0): - dependencies: - acorn: 8.17.0 - acorn-walk@8.3.5: dependencies: acorn: 8.17.0 acorn@8.17.0: {} - address@2.0.3: {} - agent-base@7.1.4: {} ajv-formats@2.1.1(ajv@8.20.0): optionalDependencies: ajv: 8.20.0 - ajv@6.15.0: - dependencies: - fast-deep-equal: 3.1.3 - fast-json-stable-stringify: 2.1.0 - json-schema-traverse: 0.4.1 - uri-js: 4.4.1 - - ajv@8.18.0: - dependencies: - fast-deep-equal: 3.1.3 - fast-uri: 3.1.0 - json-schema-traverse: 1.0.0 - require-from-string: 2.0.2 - ajv@8.20.0: dependencies: fast-deep-equal: 3.1.3 @@ -13570,8 +10761,6 @@ snapshots: tar-stream: 2.2.0 zip-stream: 4.1.1 - are-docs-informative@0.0.2: {} - arg@4.1.3: {} argparse@1.0.10: @@ -13584,71 +10773,12 @@ snapshots: dependencies: dequal: 2.0.3 - aria-query@5.3.2: {} - array-back@3.1.0: {} array-back@4.0.2: {} - array-buffer-byte-length@1.0.2: - dependencies: - call-bound: 1.0.4 - is-array-buffer: 3.0.5 - - array-includes@3.1.9: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-abstract: 1.24.1 - es-object-atoms: 1.1.2 - get-intrinsic: 1.3.0 - is-string: 1.1.1 - math-intrinsics: 1.1.0 - array-union@2.1.0: {} - array.prototype.findlast@1.2.5: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.24.1 - es-errors: 1.3.0 - es-object-atoms: 1.1.2 - es-shim-unscopables: 1.1.0 - - array.prototype.flat@1.3.3: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.24.1 - es-shim-unscopables: 1.1.0 - - array.prototype.flatmap@1.3.3: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.24.1 - es-shim-unscopables: 1.1.0 - - array.prototype.tosorted@1.1.4: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.24.1 - es-errors: 1.3.0 - es-shim-unscopables: 1.1.0 - - arraybuffer.prototype.slice@1.0.4: - dependencies: - array-buffer-byte-length: 1.0.2 - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.24.1 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - is-array-buffer: 3.0.5 - arrify@1.0.1: {} as-table@1.0.55: @@ -13659,12 +10789,8 @@ snapshots: assertion-error@2.0.1: {} - ast-types-flow@0.0.8: {} - astral-regex@2.0.0: {} - async-function@1.0.0: {} - async-retry@1.3.3: dependencies: retry: 0.13.1 @@ -13682,12 +10808,6 @@ snapshots: auto-bind@5.0.1: {} - available-typed-arrays@1.0.7: - dependencies: - possible-typed-array-names: 1.1.0 - - axe-core@4.11.1: {} - axios@1.16.0: dependencies: follow-redirects: 1.16.0 @@ -13696,62 +10816,6 @@ snapshots: transitivePeerDependencies: - debug - axobject-query@4.1.0: {} - - babel-plugin-const-enum@1.2.0(@babel/core@7.29.7): - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-syntax-typescript': 7.29.7(@babel/core@7.29.7) - '@babel/traverse': 7.29.7 - transitivePeerDependencies: - - supports-color - - babel-plugin-macros@3.1.0: - dependencies: - '@babel/runtime': 7.29.7 - cosmiconfig: 7.1.0 - resolve: 1.22.12 - - babel-plugin-polyfill-corejs2@0.4.17(@babel/core@7.29.7): - dependencies: - '@babel/compat-data': 7.29.7 - '@babel/core': 7.29.7 - '@babel/helper-define-polyfill-provider': 0.6.8(@babel/core@7.29.7) - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - - babel-plugin-polyfill-corejs3@0.13.0(@babel/core@7.29.7): - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-define-polyfill-provider': 0.6.8(@babel/core@7.29.7) - core-js-compat: 3.49.0 - transitivePeerDependencies: - - supports-color - - babel-plugin-polyfill-corejs3@0.14.2(@babel/core@7.29.7): - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-define-polyfill-provider': 0.6.8(@babel/core@7.29.7) - core-js-compat: 3.49.0 - transitivePeerDependencies: - - supports-color - - babel-plugin-polyfill-regenerator@0.6.8(@babel/core@7.29.7): - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-define-polyfill-provider': 0.6.8(@babel/core@7.29.7) - transitivePeerDependencies: - - supports-color - - babel-plugin-transform-typescript-metadata@0.3.2(@babel/core@7.29.7)(@babel/traverse@7.29.7): - dependencies: - '@babel/core': 7.29.7 - '@babel/helper-plugin-utils': 7.29.7 - optionalDependencies: - '@babel/traverse': 7.29.7 - balanced-match@1.0.2: {} balanced-match@4.0.3: {} @@ -13870,18 +10934,6 @@ snapshots: es-errors: 1.3.0 function-bind: 1.1.2 - call-bind@1.0.8: - dependencies: - call-bind-apply-helpers: 1.0.2 - es-define-property: 1.0.1 - get-intrinsic: 1.3.0 - set-function-length: 1.2.2 - - call-bound@1.0.4: - dependencies: - call-bind-apply-helpers: 1.0.2 - get-intrinsic: 1.3.0 - callsites@3.1.0: {} camel-case@4.1.2: @@ -14074,11 +11126,6 @@ snapshots: colorette@2.0.20: {} - columnify@1.6.0: - dependencies: - strip-ansi: 6.0.1 - wcwidth: 1.0.1 - combined-stream@1.0.8: dependencies: delayed-stream: 1.0.0 @@ -14103,10 +11150,6 @@ snapshots: commander@9.5.0: {} - comment-parser@1.4.1: {} - - comment-parser@1.4.5: {} - common-tags@1.8.2: {} compress-commons@4.1.2: @@ -14148,8 +11191,6 @@ snapshots: ini: 1.3.8 proto-list: 1.2.4 - confusing-browser-globals@1.0.11: {} - consola@2.15.3: {} constant-case@3.0.4: @@ -14168,20 +11209,8 @@ snapshots: cookie@1.1.1: {} - core-js-compat@3.49.0: - dependencies: - browserslist: 4.28.6 - core-util-is@1.0.3: {} - cosmiconfig@7.1.0: - dependencies: - '@types/parse-json': 4.0.2 - import-fresh: 3.3.1 - parse-json: 5.2.0 - path-type: 4.0.0 - yaml: 1.10.3 - cosmiconfig@8.3.6(typescript@5.9.3): dependencies: import-fresh: 3.3.1 @@ -14264,8 +11293,6 @@ snapshots: csv-parse@7.0.2: {} - damerau-levenshtein@1.0.8: {} - data-uri-to-buffer@2.0.2: {} data-uri-to-buffer@4.0.1: {} @@ -14281,24 +11308,6 @@ snapshots: whatwg-url: 14.0.0 optional: true - data-view-buffer@1.0.2: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-data-view: 1.0.2 - - data-view-byte-length@1.0.2: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-data-view: 1.0.2 - - data-view-byte-offset@1.0.1: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-data-view: 1.0.2 - dataloader@2.2.3: {} debounce-fn@5.1.2: @@ -14307,10 +11316,6 @@ snapshots: debounce@2.2.0: {} - debug@3.2.7: - dependencies: - ms: 2.1.3 - debug@4.4.3(supports-color@8.1.1): dependencies: ms: 2.1.3 @@ -14332,8 +11337,6 @@ snapshots: deep-extend@0.6.0: {} - deep-is@0.1.4: {} - deepmerge@4.3.1: {} defaults@1.0.4: @@ -14375,10 +11378,6 @@ snapshots: detect-node@2.1.0: {} - detect-port@2.1.0: - dependencies: - address: 2.0.3 - diff@3.5.1: {} diff@4.0.4: {} @@ -14389,10 +11388,6 @@ snapshots: dependencies: path-type: 4.0.0 - doctrine@2.1.0: - dependencies: - esutils: 2.0.3 - dom-accessibility-api@0.5.16: {} dom-helpers@5.2.1: @@ -14454,11 +11449,6 @@ snapshots: dependencies: once: 1.4.0 - enhanced-resolve@5.19.0: - dependencies: - graceful-fs: 4.2.11 - tapable: 2.3.0 - enquirer@2.3.6: dependencies: ansi-colors: 4.1.3 @@ -14489,96 +11479,16 @@ snapshots: dependencies: stackframe: 1.3.4 - es-abstract@1.24.1: - dependencies: - array-buffer-byte-length: 1.0.2 - arraybuffer.prototype.slice: 1.0.4 - available-typed-arrays: 1.0.7 - call-bind: 1.0.8 - call-bound: 1.0.4 - data-view-buffer: 1.0.2 - data-view-byte-length: 1.0.2 - data-view-byte-offset: 1.0.1 - es-define-property: 1.0.1 - es-errors: 1.3.0 - es-object-atoms: 1.1.2 - es-set-tostringtag: 2.1.0 - es-to-primitive: 1.3.0 - function.prototype.name: 1.1.8 - get-intrinsic: 1.3.0 - get-proto: 1.0.1 - get-symbol-description: 1.1.0 - globalthis: 1.0.4 - gopd: 1.2.0 - has-property-descriptors: 1.0.2 - has-proto: 1.2.0 - has-symbols: 1.1.0 - hasown: 2.0.2 - internal-slot: 1.1.0 - is-array-buffer: 3.0.5 - is-callable: 1.2.7 - is-data-view: 1.0.2 - is-negative-zero: 2.0.3 - is-regex: 1.2.1 - is-set: 2.0.3 - is-shared-array-buffer: 1.0.4 - is-string: 1.1.1 - is-typed-array: 1.1.15 - is-weakref: 1.1.1 - math-intrinsics: 1.1.0 - object-inspect: 1.13.4 - object-keys: 1.1.1 - object.assign: 4.1.7 - own-keys: 1.0.1 - regexp.prototype.flags: 1.5.4 - safe-array-concat: 1.1.3 - safe-push-apply: 1.0.0 - safe-regex-test: 1.1.0 - set-proto: 1.0.0 - stop-iteration-iterator: 1.1.0 - string.prototype.trim: 1.2.10 - string.prototype.trimend: 1.0.9 - string.prototype.trimstart: 1.0.8 - typed-array-buffer: 1.0.3 - typed-array-byte-length: 1.0.3 - typed-array-byte-offset: 1.0.4 - typed-array-length: 1.0.7 - unbox-primitive: 1.1.0 - which-typed-array: 1.1.20 - es-define-property@1.0.1: {} es-errors@1.3.0: {} - es-iterator-helpers@1.2.2: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-abstract: 1.24.1 - es-errors: 1.3.0 - es-set-tostringtag: 2.1.0 - function-bind: 1.1.2 - get-intrinsic: 1.3.0 - globalthis: 1.0.4 - gopd: 1.2.0 - has-property-descriptors: 1.0.2 - has-proto: 1.2.0 - has-symbols: 1.1.0 - internal-slot: 1.1.0 - iterator.prototype: 1.1.5 - safe-array-concat: 1.1.3 - es-module-lexer@2.3.1: {} es-object-atoms@1.1.1: dependencies: es-errors: 1.3.0 - es-object-atoms@1.1.2: - dependencies: - es-errors: 1.3.0 - es-set-tostringtag@2.1.0: dependencies: es-errors: 1.3.0 @@ -14586,16 +11496,6 @@ snapshots: has-tostringtag: 1.0.2 hasown: 2.0.4 - es-shim-unscopables@1.1.0: - dependencies: - hasown: 2.0.2 - - es-to-primitive@1.3.0: - dependencies: - is-callable: 1.2.7 - is-date-object: 1.1.0 - is-symbol: 1.1.1 - es-toolkit@1.44.0: {} es6-error@4.1.1: {} @@ -14705,291 +11605,12 @@ snapshots: escape-string-regexp@5.0.0: {} - eslint-compat-utils@0.5.1(eslint@9.39.5(jiti@2.6.1)): - dependencies: - eslint: 9.39.5(jiti@2.6.1) - semver: 7.8.4 - - eslint-config-prettier@10.1.8(eslint@9.39.5(jiti@2.6.1)): - dependencies: - eslint: 9.39.5(jiti@2.6.1) - - eslint-config-prettier@9.1.2(eslint@9.39.5(jiti@2.6.1)): - dependencies: - eslint: 9.39.5(jiti@2.6.1) - - eslint-import-context@0.1.9(unrs-resolver@1.11.1): - dependencies: - get-tsconfig: 4.13.6 - stable-hash-x: 0.2.0 - optionalDependencies: - unrs-resolver: 1.11.1 - - eslint-import-resolver-typescript@4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.56.1(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.5(jiti@2.6.1)))(eslint@9.39.5(jiti@2.6.1)): - dependencies: - debug: 4.4.3(supports-color@8.1.1) - eslint: 9.39.5(jiti@2.6.1) - eslint-import-context: 0.1.9(unrs-resolver@1.11.1) - get-tsconfig: 4.13.6 - is-bun-module: 2.0.0 - stable-hash-x: 0.2.0 - tinyglobby: 0.2.17 - unrs-resolver: 1.11.1 - optionalDependencies: - eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.56.1(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.5(jiti@2.6.1)) - transitivePeerDependencies: - - supports-color - - eslint-module-utils@2.12.1(@typescript-eslint/parser@8.56.1(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.56.1(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.5(jiti@2.6.1)))(eslint@9.39.5(jiti@2.6.1)))(eslint@9.39.5(jiti@2.6.1)): - dependencies: - debug: 3.2.7 - optionalDependencies: - '@typescript-eslint/parser': 8.56.1(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3) - eslint: 9.39.5(jiti@2.6.1) - eslint-import-resolver-typescript: 4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.56.1(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.5(jiti@2.6.1)))(eslint@9.39.5(jiti@2.6.1)) - transitivePeerDependencies: - - supports-color - - eslint-plugin-es-x@7.8.0(eslint@9.39.5(jiti@2.6.1)): - dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.5(jiti@2.6.1)) - '@eslint-community/regexpp': 4.12.2 - eslint: 9.39.5(jiti@2.6.1) - eslint-compat-utils: 0.5.1(eslint@9.39.5(jiti@2.6.1)) - - eslint-plugin-eslint-comments@3.2.0(eslint@9.39.5(jiti@2.6.1)): - dependencies: - escape-string-regexp: 1.0.5 - eslint: 9.39.5(jiti@2.6.1) - ignore: 5.3.2 - - eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.56.1(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.5(jiti@2.6.1)): - dependencies: - '@typescript-eslint/types': 8.56.1 - comment-parser: 1.4.5 - debug: 4.4.3(supports-color@8.1.1) - eslint: 9.39.5(jiti@2.6.1) - eslint-import-context: 0.1.9(unrs-resolver@1.11.1) - is-glob: 4.0.3 - minimatch: 9.0.9 - semver: 7.8.4 - stable-hash-x: 0.2.0 - unrs-resolver: 1.11.1 - optionalDependencies: - '@typescript-eslint/utils': 8.56.1(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3) - transitivePeerDependencies: - - supports-color - - eslint-plugin-jest-formatting@3.1.0(eslint@9.39.5(jiti@2.6.1)): - dependencies: - eslint: 9.39.5(jiti@2.6.1) - - eslint-plugin-jest@28.14.0(@typescript-eslint/eslint-plugin@8.56.1(@typescript-eslint/parser@8.56.1(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3): - dependencies: - '@typescript-eslint/utils': 8.56.1(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3) - eslint: 9.39.5(jiti@2.6.1) - optionalDependencies: - '@typescript-eslint/eslint-plugin': 8.56.1(@typescript-eslint/parser@8.56.1(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3) - transitivePeerDependencies: - - supports-color - - typescript - - eslint-plugin-jsdoc@50.8.0(eslint@9.39.5(jiti@2.6.1)): - dependencies: - '@es-joy/jsdoccomment': 0.50.2 - are-docs-informative: 0.0.2 - comment-parser: 1.4.1 - debug: 4.4.3(supports-color@8.1.1) - escape-string-regexp: 4.0.0 - eslint: 9.39.5(jiti@2.6.1) - espree: 10.4.0 - esquery: 1.7.0 - parse-imports-exports: 0.2.4 - semver: 7.8.4 - spdx-expression-parse: 4.0.0 - transitivePeerDependencies: - - supports-color - - eslint-plugin-jsx-a11y@6.10.2(eslint@9.39.5(jiti@2.6.1)): - dependencies: - aria-query: 5.3.2 - array-includes: 3.1.9 - array.prototype.flatmap: 1.3.3 - ast-types-flow: 0.0.8 - axe-core: 4.11.1 - axobject-query: 4.1.0 - damerau-levenshtein: 1.0.8 - emoji-regex: 9.2.2 - eslint: 9.39.5(jiti@2.6.1) - hasown: 2.0.4 - jsx-ast-utils: 3.3.5 - language-tags: 1.0.9 - minimatch: 3.1.5 - object.fromentries: 2.0.8 - safe-regex-test: 1.1.0 - string.prototype.includes: 2.0.1 - - eslint-plugin-n@17.24.0(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3): - dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.5(jiti@2.6.1)) - enhanced-resolve: 5.19.0 - eslint: 9.39.5(jiti@2.6.1) - eslint-plugin-es-x: 7.8.0(eslint@9.39.5(jiti@2.6.1)) - get-tsconfig: 4.13.6 - globals: 15.15.0 - globrex: 0.1.2 - ignore: 5.3.2 - semver: 7.8.4 - ts-declaration-location: 1.0.7(typescript@5.9.3) - transitivePeerDependencies: - - typescript - - eslint-plugin-no-catch-all@1.1.0(eslint@9.39.5(jiti@2.6.1)): - dependencies: - eslint: 9.39.5(jiti@2.6.1) - - eslint-plugin-prettier@5.5.6(eslint-config-prettier@9.1.2(eslint@9.39.5(jiti@2.6.1)))(eslint@9.39.5(jiti@2.6.1))(prettier@3.8.4): - dependencies: - eslint: 9.39.5(jiti@2.6.1) - prettier: 3.8.4 - prettier-linter-helpers: 1.0.1 - synckit: 0.11.13 - optionalDependencies: - eslint-config-prettier: 9.1.2(eslint@9.39.5(jiti@2.6.1)) - - eslint-plugin-promise@7.2.1(eslint@9.39.5(jiti@2.6.1)): - dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.5(jiti@2.6.1)) - eslint: 9.39.5(jiti@2.6.1) - - eslint-plugin-react-hooks@5.2.0(eslint@9.39.5(jiti@2.6.1)): - dependencies: - eslint: 9.39.5(jiti@2.6.1) - - eslint-plugin-react@7.37.5(eslint@9.39.5(jiti@2.6.1)): - dependencies: - array-includes: 3.1.9 - array.prototype.findlast: 1.2.5 - array.prototype.flatmap: 1.3.3 - array.prototype.tosorted: 1.1.4 - doctrine: 2.1.0 - es-iterator-helpers: 1.2.2 - eslint: 9.39.5(jiti@2.6.1) - estraverse: 5.3.0 - hasown: 2.0.2 - jsx-ast-utils: 3.3.5 - minimatch: 3.1.5 - object.entries: 1.1.9 - object.fromentries: 2.0.8 - object.values: 1.2.1 - prop-types: 15.8.1 - resolve: 2.0.0-next.6 - semver: 6.3.1 - string.prototype.matchall: 4.0.12 - string.prototype.repeat: 1.0.0 - - eslint-plugin-sort-class-members@1.21.0(eslint@9.39.5(jiti@2.6.1)): - dependencies: - eslint: 9.39.5(jiti@2.6.1) - - eslint-plugin-tsdoc@0.5.2(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3): - dependencies: - '@microsoft/tsdoc': 0.16.0 - '@microsoft/tsdoc-config': 0.18.1 - '@typescript-eslint/utils': 8.56.1(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3) - transitivePeerDependencies: - - eslint - - supports-color - - typescript - - eslint-plugin-unused-imports@4.4.1(@typescript-eslint/eslint-plugin@8.56.1(@typescript-eslint/parser@8.56.1(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.5(jiti@2.6.1)): - dependencies: - eslint: 9.39.5(jiti@2.6.1) - optionalDependencies: - '@typescript-eslint/eslint-plugin': 8.56.1(@typescript-eslint/parser@8.56.1(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3) - - eslint-scope@8.4.0: - dependencies: - esrecurse: 4.3.0 - estraverse: 5.3.0 - - eslint-visitor-keys@3.4.3: {} - - eslint-visitor-keys@4.2.1: {} - - eslint-visitor-keys@5.0.1: {} - - eslint@9.39.5(jiti@2.6.1): - dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.5(jiti@2.6.1)) - '@eslint-community/regexpp': 4.12.2 - '@eslint/config-array': 0.21.2 - '@eslint/config-helpers': 0.4.2 - '@eslint/core': 0.17.0 - '@eslint/eslintrc': 3.3.6 - '@eslint/js': 9.39.5 - '@eslint/plugin-kit': 0.4.1 - '@humanfs/node': 0.16.8 - '@humanwhocodes/module-importer': 1.0.1 - '@humanwhocodes/retry': 0.4.3 - '@types/estree': 1.0.9 - ajv: 6.15.0 - chalk: 4.1.2 - cross-spawn: 7.0.6 - debug: 4.4.3(supports-color@8.1.1) - escape-string-regexp: 4.0.0 - eslint-scope: 8.4.0 - eslint-visitor-keys: 4.2.1 - espree: 10.4.0 - esquery: 1.7.0 - esutils: 2.0.3 - fast-deep-equal: 3.1.3 - file-entry-cache: 8.0.0 - find-up: 5.0.0 - glob-parent: 6.0.2 - ignore: 5.3.2 - imurmurhash: 0.1.4 - is-glob: 4.0.3 - json-stable-stringify-without-jsonify: 1.0.1 - lodash.merge: 4.6.2 - minimatch: 3.1.5 - natural-compare: 1.4.0 - optionator: 0.9.4 - optionalDependencies: - jiti: 2.6.1 - transitivePeerDependencies: - - supports-color - - espree@10.4.0: - dependencies: - acorn: 8.17.0 - acorn-jsx: 5.3.2(acorn@8.17.0) - eslint-visitor-keys: 4.2.1 - - espree@9.6.1: - dependencies: - acorn: 8.17.0 - acorn-jsx: 5.3.2(acorn@8.17.0) - eslint-visitor-keys: 3.4.3 - esprima@4.0.1: {} - esquery@1.7.0: - dependencies: - estraverse: 5.3.0 - - esrecurse@4.3.0: - dependencies: - estraverse: 5.3.0 - - estraverse@5.3.0: {} - estree-walker@3.0.3: dependencies: '@types/estree': 1.0.9 - esutils@2.0.3: {} - eventemitter3@4.0.7: {} eventemitter3@5.0.4: {} @@ -15028,8 +11649,6 @@ snapshots: fast-deep-equal@3.1.3: {} - fast-diff@1.3.0: {} - fast-glob@3.3.3: dependencies: '@nodelib/fs.stat': 2.0.5 @@ -15040,10 +11659,6 @@ snapshots: fast-json-parse@1.0.3: {} - fast-json-stable-stringify@2.1.0: {} - - fast-levenshtein@2.0.6: {} - fast-levenshtein@3.0.0: dependencies: fastest-levenshtein: 1.0.16 @@ -15112,10 +11727,6 @@ snapshots: escape-string-regexp: 5.0.0 is-unicode-supported: 1.3.0 - file-entry-cache@8.0.0: - dependencies: - flat-cache: 4.0.1 - filelist@1.0.6: dependencies: minimatch: 5.1.9 @@ -15135,11 +11746,6 @@ snapshots: locate-path: 5.0.0 path-exists: 4.0.0 - find-up@5.0.0: - dependencies: - locate-path: 6.0.0 - path-exists: 4.0.0 - find-up@6.3.0: dependencies: locate-path: 7.2.0 @@ -15149,25 +11755,14 @@ snapshots: dependencies: micromatch: 4.0.8 - flat-cache@4.0.1: - dependencies: - flatted: 3.4.2 - keyv: 4.5.4 - flat@5.0.2: {} flatstr@1.0.12: {} - flatted@3.4.2: {} - follow-redirects@1.15.11: {} follow-redirects@1.16.0: {} - for-each@0.3.5: - dependencies: - is-callable: 1.2.7 - foreground-child@3.3.1: dependencies: cross-spawn: 7.0.6 @@ -15235,19 +11830,6 @@ snapshots: function-bind@1.1.2: {} - function.prototype.name@1.1.8: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - functions-have-names: 1.2.3 - hasown: 2.0.2 - is-callable: 1.2.7 - - functions-have-names@1.2.3: {} - - generator-function@2.0.1: {} - gensync@1.0.0-beta.2: {} get-caller-file@2.0.5: {} @@ -15287,16 +11869,6 @@ snapshots: get-stream@8.0.1: {} - get-symbol-description@1.1.0: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - - get-tsconfig@4.13.6: - dependencies: - resolve-pkg-maps: 1.0.0 - git-diff@2.0.7: dependencies: chalk: 2.4.2 @@ -15311,10 +11883,6 @@ snapshots: dependencies: is-glob: 4.0.3 - glob-parent@6.0.2: - dependencies: - is-glob: 4.0.3 - glob@10.5.0: dependencies: foreground-child: 3.3.1 @@ -15356,14 +11924,6 @@ snapshots: semver: 7.6.3 serialize-error: 7.0.1 - globals@14.0.0: {} - - globals@15.15.0: {} - - globals@16.5.0: {} - - globals@17.7.0: {} - globalthis@1.0.4: dependencies: define-properties: 1.2.1 @@ -15378,8 +11938,6 @@ snapshots: merge2: 1.4.1 slash: 3.0.0 - globrex@0.1.2: {} - gopd@1.2.0: {} got@12.6.1: @@ -15522,8 +12080,6 @@ snapshots: hard-rejection@2.1.0: {} - has-bigints@1.1.0: {} - has-flag@3.0.0: {} has-flag@4.0.0: {} @@ -15532,10 +12088,6 @@ snapshots: dependencies: es-define-property: 1.0.1 - has-proto@1.2.0: - dependencies: - dunder-proto: 1.0.1 - has-symbols@1.1.0: {} has-tostringtag@1.0.2: @@ -15643,8 +12195,6 @@ snapshots: ignore@7.0.5: {} - ignore@7.0.6: {} - immutable@3.7.6: {} immutable@5.1.6: {} @@ -15659,8 +12209,6 @@ snapshots: import-from@4.0.0: {} - imurmurhash@0.1.4: {} - indent-string@4.0.0: {} indent-string@5.0.0: {} @@ -15741,12 +12289,6 @@ snapshots: - bufferutil - utf-8-validate - internal-slot@1.1.0: - dependencies: - es-errors: 1.3.0 - hasown: 2.0.2 - side-channel: 1.1.0 - interpret@1.4.0: {} invariant@2.2.4: @@ -15760,43 +12302,14 @@ snapshots: is-relative: 1.0.0 is-windows: 1.0.2 - is-array-buffer@3.0.5: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - is-arrayish@0.2.1: {} is-arrayish@0.3.4: {} - is-async-function@2.1.1: - dependencies: - async-function: 1.0.0 - call-bound: 1.0.4 - get-proto: 1.0.1 - has-tostringtag: 1.0.2 - safe-regex-test: 1.1.0 - - is-bigint@1.1.0: - dependencies: - has-bigints: 1.1.0 - is-binary-path@2.1.0: dependencies: binary-extensions: 2.3.0 - is-boolean-object@1.2.2: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 - - is-bun-module@2.0.0: - dependencies: - semver: 7.8.4 - - is-callable@1.2.7: {} - is-core-module@2.16.1: dependencies: hasown: 2.0.2 @@ -15805,17 +12318,6 @@ snapshots: dependencies: hasown: 2.0.4 - is-data-view@1.0.2: - dependencies: - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - is-typed-array: 1.1.15 - - is-date-object@1.1.0: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 - is-deflate@1.0.0: {} is-docker@2.2.1: {} @@ -15826,10 +12328,6 @@ snapshots: is-extglob@2.1.1: {} - is-finalizationregistry@1.1.1: - dependencies: - call-bound: 1.0.4 - is-fullwidth-code-point@3.0.0: {} is-fullwidth-code-point@4.0.0: {} @@ -15838,14 +12336,6 @@ snapshots: dependencies: get-east-asian-width: 1.5.0 - is-generator-function@1.1.2: - dependencies: - call-bound: 1.0.4 - generator-function: 2.0.1 - get-proto: 1.0.1 - has-tostringtag: 1.0.2 - safe-regex-test: 1.1.0 - is-glob@4.0.3: dependencies: is-extglob: 2.1.1 @@ -15866,65 +12356,28 @@ snapshots: dependencies: tslib: 2.8.1 - is-map@2.0.3: {} - - is-negative-zero@2.0.3: {} - is-node-process@1.2.0: {} - is-number-object@1.1.1: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 - is-number@7.0.0: {} is-plain-obj@1.1.0: {} is-potential-custom-element-name@1.0.1: {} - is-regex@1.2.1: - dependencies: - call-bound: 1.0.4 - gopd: 1.2.0 - has-tostringtag: 1.0.2 - hasown: 2.0.4 - is-relative@1.0.0: dependencies: is-unc-path: 1.0.0 is-retry-allowed@1.2.0: {} - is-set@2.0.3: {} - - is-shared-array-buffer@1.0.4: - dependencies: - call-bound: 1.0.4 - is-stream@2.0.1: {} is-stream@3.0.0: {} - is-string@1.1.1: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 - is-subdir@1.2.0: dependencies: better-path-resolve: 1.0.0 - is-symbol@1.1.1: - dependencies: - call-bound: 1.0.4 - has-symbols: 1.1.0 - safe-regex-test: 1.1.0 - - is-typed-array@1.1.15: - dependencies: - which-typed-array: 1.1.20 - is-unc-path@1.0.0: dependencies: unc-path-regex: 0.1.2 @@ -15937,17 +12390,6 @@ snapshots: dependencies: tslib: 2.8.1 - is-weakmap@2.0.2: {} - - is-weakref@1.1.1: - dependencies: - call-bound: 1.0.4 - - is-weakset@2.0.4: - dependencies: - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - is-windows@1.0.2: {} is-wsl@2.2.0: @@ -15964,8 +12406,6 @@ snapshots: isarray@1.0.0: {} - isarray@2.0.5: {} - iserror@0.0.2: {} isexe@2.0.0: {} @@ -16015,15 +12455,6 @@ snapshots: html-escaper: 2.0.2 istanbul-lib-report: 3.0.1 - iterator.prototype@1.1.5: - dependencies: - define-data-property: 1.1.4 - es-object-atoms: 1.1.2 - get-intrinsic: 1.3.0 - get-proto: 1.0.1 - has-symbols: 1.1.0 - set-function-name: 2.0.2 - jackspeak@3.4.3: dependencies: '@isaacs/cliui': 8.0.2 @@ -16038,8 +12469,6 @@ snapshots: jiti@2.6.1: {} - jju@1.4.0: {} - jose@5.10.0: {} js-tokens@4.0.0: {} @@ -16057,8 +12486,6 @@ snapshots: dependencies: argparse: 2.0.1 - jsdoc-type-pratt-parser@4.1.0: {} - jsdom@25.0.1: dependencies: cssstyle: 4.6.0 @@ -16135,14 +12562,10 @@ snapshots: prettier: 3.8.4 tinyglobby: 0.2.15 - json-schema-traverse@0.4.1: {} - json-schema-traverse@1.0.0: {} json-schema-typed@8.0.2: {} - json-stable-stringify-without-jsonify@1.0.1: {} - json-stringify-deterministic@1.0.14: {} json-stringify-safe@5.0.1: {} @@ -16156,13 +12579,6 @@ snapshots: json5@2.2.3: {} - jsonc-eslint-parser@2.4.2: - dependencies: - acorn: 8.17.0 - eslint-visitor-keys: 3.4.3 - espree: 9.6.1 - semver: 7.8.4 - jsonc-parser@3.2.0: {} jsonc-parser@3.3.1: {} @@ -16177,13 +12593,6 @@ snapshots: optionalDependencies: graceful-fs: 4.2.11 - jsx-ast-utils@3.3.5: - dependencies: - array-includes: 3.1.9 - array.prototype.flat: 1.3.3 - object.assign: 4.1.7 - object.values: 1.2.1 - keyv@4.5.4: dependencies: json-buffer: 3.0.1 @@ -16208,12 +12617,6 @@ snapshots: yaml: 2.9.0 zod: 4.4.3 - language-subtag-registry@0.3.23: {} - - language-tags@1.0.9: - dependencies: - language-subtag-registry: 0.3.23 - latest-version@7.0.0: dependencies: package-json: 8.1.1 @@ -16222,11 +12625,6 @@ snapshots: dependencies: readable-stream: 2.3.8 - levn@0.4.1: - dependencies: - prelude-ls: 1.2.1 - type-check: 0.4.0 - lilconfig@3.1.3: {} line-column@1.0.2: @@ -16259,18 +12657,12 @@ snapshots: dependencies: p-locate: 4.1.0 - locate-path@6.0.0: - dependencies: - p-locate: 5.0.0 - locate-path@7.2.0: dependencies: p-locate: 6.0.0 lodash.camelcase@4.3.0: {} - lodash.debounce@4.0.8: {} - lodash.defaults@4.2.0: {} lodash.difference@4.5.0: {} @@ -16279,8 +12671,6 @@ snapshots: lodash.isplainobject@4.0.6: {} - lodash.merge@4.6.2: {} - lodash.sortby@4.7.0: {} lodash.startcase@4.4.0: {} @@ -16536,10 +12926,6 @@ snapshots: nanoid@3.3.8: {} - napi-postinstall@0.3.4: {} - - natural-compare@1.4.0: {} - natural-orderby@2.0.3: {} natural-orderby@3.0.2: {} @@ -16553,13 +12939,6 @@ snapshots: node-domexception@1.0.0: {} - node-exports-info@1.6.0: - dependencies: - array.prototype.flatmap: 1.3.3 - es-errors: 1.3.0 - object.entries: 1.1.9 - semver: 6.3.1 - node-fetch@2.7.0: dependencies: whatwg-url: 14.0.0 @@ -16756,44 +13135,12 @@ snapshots: object-hash@3.0.0: {} - object-inspect@1.13.4: {} - object-keys@1.1.1: {} object-treeify@1.1.33: {} object-treeify@4.0.1: {} - object.assign@4.1.7: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-object-atoms: 1.1.2 - has-symbols: 1.1.0 - object-keys: 1.1.1 - - object.entries@1.1.9: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-object-atoms: 1.1.2 - - object.fromentries@2.0.8: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.24.1 - es-object-atoms: 1.1.2 - - object.values@1.2.1: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-object-atoms: 1.1.2 - obug@2.1.4: {} oclif@4.23.27(@types/node@22.20.1): @@ -16851,15 +13198,6 @@ snapshots: is-docker: 2.2.1 is-wsl: 2.2.0 - optionator@0.9.4: - 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.5 - ora@5.3.0: dependencies: bl: 4.1.0 @@ -16875,12 +13213,6 @@ snapshots: outvariant@1.4.3: {} - own-keys@1.0.1: - dependencies: - get-intrinsic: 1.3.0 - object-keys: 1.1.1 - safe-push-apply: 1.0.0 - oxc-resolver@11.20.0: optionalDependencies: '@oxc-resolver/binding-android-arm-eabi': 11.20.0 @@ -16957,10 +13289,6 @@ snapshots: dependencies: p-limit: 2.3.0 - p-locate@5.0.0: - dependencies: - p-limit: 3.1.0 - p-locate@6.0.0: dependencies: p-limit: 4.0.0 @@ -16999,10 +13327,6 @@ snapshots: map-cache: 0.2.2 path-root: 0.1.1 - parse-imports-exports@0.2.4: - dependencies: - parse-statements: 1.0.11 - parse-json@4.0.0: dependencies: error-ex: 1.3.4 @@ -17015,8 +13339,6 @@ snapshots: json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 - parse-statements@1.0.11: {} - parse5@7.3.0: dependencies: entities: 6.0.1 @@ -17122,10 +13444,6 @@ snapshots: quick-format-unescaped: 1.1.2 split2: 2.2.0 - pkg-dir@5.0.0: - dependencies: - find-up: 5.0.0 - playwright-core@1.61.1: {} playwright@1.61.1: @@ -17134,10 +13452,6 @@ snapshots: optionalDependencies: fsevents: 2.3.2 - pluralize@8.0.0: {} - - possible-typed-array-names@1.1.0: {} - postcss-safe-parser@7.0.1(postcss@8.5.26): dependencies: postcss: 8.5.26 @@ -17159,12 +13473,6 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 - prelude-ls@1.2.1: {} - - prettier-linter-helpers@1.0.1: - dependencies: - fast-diff: 1.3.0 - prettier@2.8.8: {} prettier@3.8.4: {} @@ -17369,41 +13677,6 @@ snapshots: reduce-flatten@2.0.0: {} - reflect.getprototypeof@1.0.10: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.24.1 - es-errors: 1.3.0 - es-object-atoms: 1.1.2 - get-intrinsic: 1.3.0 - get-proto: 1.0.1 - which-builtin-type: 1.2.1 - - regenerate-unicode-properties@10.2.2: - dependencies: - regenerate: 1.4.2 - - regenerate@1.4.2: {} - - regexp.prototype.flags@1.5.4: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-errors: 1.3.0 - get-proto: 1.0.1 - gopd: 1.2.0 - set-function-name: 2.0.2 - - regexpu-core@6.4.0: - dependencies: - regenerate: 1.4.2 - regenerate-unicode-properties: 10.2.2 - regjsgen: 0.8.0 - regjsparser: 0.13.2 - unicode-match-property-ecmascript: 2.0.0 - unicode-match-property-value-ecmascript: 2.2.1 - registry-auth-token@5.1.1: dependencies: '@pnpm/npm-conf': 3.0.3 @@ -17412,12 +13685,6 @@ snapshots: dependencies: rc: 1.2.8 - regjsgen@0.8.0: {} - - regjsparser@0.13.2: - dependencies: - jsesc: 3.1.0 - relay-runtime@12.0.0: dependencies: '@babel/runtime': 7.29.7 @@ -17444,8 +13711,6 @@ snapshots: resolve-from@5.0.0: {} - resolve-pkg-maps@1.0.0: {} - resolve.exports@2.0.3: {} resolve@1.22.11: @@ -17461,15 +13726,6 @@ snapshots: path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - resolve@2.0.0-next.6: - dependencies: - es-errors: 1.3.0 - is-core-module: 2.16.1 - node-exports-info: 1.6.0 - object-keys: 1.1.1 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - responselike@3.0.0: dependencies: lowercase-keys: 3.0.0 @@ -17552,29 +13808,10 @@ snapshots: dependencies: queue-microtask: 1.2.3 - safe-array-concat@1.1.3: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - has-symbols: 1.1.0 - isarray: 2.0.5 - safe-buffer@5.1.2: {} safe-buffer@5.2.1: {} - safe-push-apply@1.0.0: - dependencies: - es-errors: 1.3.0 - isarray: 2.0.5 - - safe-regex-test@1.1.0: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-regex: 1.2.1 - safer-buffer@2.1.2: {} sass@1.100.0: @@ -17622,28 +13859,6 @@ snapshots: set-cookie-parser@3.1.2: {} - set-function-length@1.2.2: - dependencies: - define-data-property: 1.1.4 - es-errors: 1.3.0 - function-bind: 1.1.2 - get-intrinsic: 1.3.0 - gopd: 1.2.0 - has-property-descriptors: 1.0.2 - - set-function-name@2.0.2: - dependencies: - define-data-property: 1.1.4 - es-errors: 1.3.0 - functions-have-names: 1.2.3 - has-property-descriptors: 1.0.2 - - set-proto@1.0.0: - dependencies: - dunder-proto: 1.0.1 - es-errors: 1.3.0 - es-object-atoms: 1.1.2 - setimmediate@1.0.5: {} shebang-command@2.0.0: @@ -17662,34 +13877,6 @@ snapshots: interpret: 1.4.0 rechoir: 0.6.2 - side-channel-list@1.0.0: - dependencies: - es-errors: 1.3.0 - object-inspect: 1.13.4 - - side-channel-map@1.0.1: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - object-inspect: 1.13.4 - - side-channel-weakmap@1.0.2: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - object-inspect: 1.13.4 - side-channel-map: 1.0.1 - - side-channel@1.1.0: - dependencies: - es-errors: 1.3.0 - object-inspect: 1.13.4 - side-channel-list: 1.0.0 - side-channel-map: 1.0.1 - side-channel-weakmap: 1.0.2 - siginfo@2.0.0: {} signal-exit@3.0.7: {} @@ -17744,11 +13931,6 @@ snapshots: source-map-js@1.2.1: {} - source-map-support@0.5.19: - dependencies: - buffer-from: 1.1.2 - source-map: 0.6.1 - source-map-support@0.5.21: dependencies: buffer-from: 1.1.2 @@ -17775,11 +13957,6 @@ snapshots: spdx-exceptions: 2.5.0 spdx-license-ids: 3.0.23 - spdx-expression-parse@4.0.0: - dependencies: - spdx-exceptions: 2.5.0 - spdx-license-ids: 3.0.23 - spdx-license-ids@3.0.23: {} split2@2.2.0: @@ -17794,8 +13971,6 @@ snapshots: sprintf-js@1.1.3: {} - stable-hash-x@0.2.0: {} - stack-generator@2.0.10: dependencies: stackframe: 1.3.4 @@ -17817,11 +13992,6 @@ snapshots: std-env@4.2.0: {} - stop-iteration-iterator@1.1.0: - dependencies: - es-errors: 1.3.0 - internal-slot: 1.1.0 - stream-shift@1.0.3: {} strict-event-emitter@0.5.1: {} @@ -17856,56 +14026,6 @@ snapshots: get-east-asian-width: 1.6.0 strip-ansi: 7.2.0 - string.prototype.includes@2.0.1: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.24.1 - - string.prototype.matchall@4.0.12: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-abstract: 1.24.1 - es-errors: 1.3.0 - es-object-atoms: 1.1.2 - get-intrinsic: 1.3.0 - gopd: 1.2.0 - has-symbols: 1.1.0 - internal-slot: 1.1.0 - regexp.prototype.flags: 1.5.4 - set-function-name: 2.0.2 - side-channel: 1.1.0 - - string.prototype.repeat@1.0.0: - dependencies: - define-properties: 1.2.1 - es-abstract: 1.24.1 - - string.prototype.trim@1.2.10: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-data-property: 1.1.4 - define-properties: 1.2.1 - es-abstract: 1.24.1 - es-object-atoms: 1.1.2 - has-property-descriptors: 1.0.2 - - string.prototype.trimend@1.0.9: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-object-atoms: 1.1.2 - - string.prototype.trimstart@1.0.8: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-object-atoms: 1.1.2 - string_decoder@1.1.1: dependencies: safe-buffer: 5.1.2 @@ -17932,8 +14052,6 @@ snapshots: strip-json-comments@2.0.1: {} - strip-json-comments@3.1.1: {} - strip-json-comments@5.0.3: {} stubborn-fs@2.0.0: @@ -17973,10 +14091,6 @@ snapshots: timeout-signal: 2.0.0 whatwg-mimetype: 4.0.0 - synckit@0.11.13: - dependencies: - '@pkgr/core': 0.3.6 - system-architecture@0.1.0: {} table-layout@1.0.2: @@ -17988,8 +14102,6 @@ snapshots: tagged-tag@1.0.0: {} - tapable@2.3.0: {} - tar-fs@2.1.4: dependencies: chownr: 1.1.4 @@ -18101,19 +14213,6 @@ snapshots: trim-newlines@3.0.1: {} - ts-api-utils@2.4.0(typescript@5.9.3): - dependencies: - typescript: 5.9.3 - - ts-api-utils@2.5.0(typescript@5.9.3): - dependencies: - typescript: 5.9.3 - - ts-declaration-location@1.0.7(typescript@5.9.3): - dependencies: - picomatch: 4.0.5 - typescript: 5.9.3 - ts-log@2.2.7: {} ts-morph@17.0.1: @@ -18166,10 +14265,6 @@ snapshots: tunnel@0.0.6: {} - type-check@0.4.0: - dependencies: - prelude-ls: 1.2.1 - type-fest@0.13.1: {} type-fest@0.21.3: {} @@ -18192,39 +14287,6 @@ snapshots: dependencies: tagged-tag: 1.0.0 - typed-array-buffer@1.0.3: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-typed-array: 1.1.15 - - typed-array-byte-length@1.0.3: - dependencies: - call-bind: 1.0.8 - for-each: 0.3.5 - gopd: 1.2.0 - has-proto: 1.2.0 - is-typed-array: 1.1.15 - - typed-array-byte-offset@1.0.4: - dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.8 - for-each: 0.3.5 - gopd: 1.2.0 - has-proto: 1.2.0 - is-typed-array: 1.1.15 - reflect.getprototypeof: 1.0.10 - - typed-array-length@1.0.7: - dependencies: - call-bind: 1.0.8 - for-each: 0.3.5 - gopd: 1.2.0 - is-typed-array: 1.1.15 - possible-typed-array-names: 1.1.0 - reflect.getprototypeof: 1.0.10 - typedarray@0.0.6: {} typedoc@0.28.20(typescript@5.9.3): @@ -18236,17 +14298,6 @@ snapshots: typescript: 5.9.3 yaml: 2.9.0 - typescript-eslint@8.56.1(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3): - dependencies: - '@typescript-eslint/eslint-plugin': 8.56.1(@typescript-eslint/parser@8.56.1(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/parser': 8.56.1(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/typescript-estree': 8.56.1(typescript@5.9.3) - '@typescript-eslint/utils': 8.56.1(eslint@9.39.5(jiti@2.6.1))(typescript@5.9.3) - eslint: 9.39.5(jiti@2.6.1) - typescript: 5.9.3 - transitivePeerDependencies: - - supports-color - typescript@5.9.3: {} typical@4.0.0: {} @@ -18261,13 +14312,6 @@ snapshots: unbash@2.2.0: {} - unbox-primitive@1.1.0: - dependencies: - call-bound: 1.0.4 - has-bigints: 1.1.0 - has-symbols: 1.1.0 - which-boxed-primitive: 1.1.1 - unc-path-regex@0.1.2: {} uncrypto@0.1.3: {} @@ -18284,17 +14328,6 @@ snapshots: undici@7.28.0: optional: true - unicode-canonical-property-names-ecmascript@2.0.1: {} - - unicode-match-property-ecmascript@2.0.0: - dependencies: - unicode-canonical-property-names-ecmascript: 2.0.1 - unicode-property-aliases-ecmascript: 2.2.0 - - unicode-match-property-value-ecmascript@2.2.1: {} - - unicode-property-aliases-ecmascript@2.2.0: {} - unique-string@3.0.0: dependencies: crypto-random-string: 4.0.0 @@ -18309,30 +14342,6 @@ snapshots: dependencies: normalize-path: 2.1.1 - unrs-resolver@1.11.1: - dependencies: - napi-postinstall: 0.3.4 - optionalDependencies: - '@unrs/resolver-binding-android-arm-eabi': 1.11.1 - '@unrs/resolver-binding-android-arm64': 1.11.1 - '@unrs/resolver-binding-darwin-arm64': 1.11.1 - '@unrs/resolver-binding-darwin-x64': 1.11.1 - '@unrs/resolver-binding-freebsd-x64': 1.11.1 - '@unrs/resolver-binding-linux-arm-gnueabihf': 1.11.1 - '@unrs/resolver-binding-linux-arm-musleabihf': 1.11.1 - '@unrs/resolver-binding-linux-arm64-gnu': 1.11.1 - '@unrs/resolver-binding-linux-arm64-musl': 1.11.1 - '@unrs/resolver-binding-linux-ppc64-gnu': 1.11.1 - '@unrs/resolver-binding-linux-riscv64-gnu': 1.11.1 - '@unrs/resolver-binding-linux-riscv64-musl': 1.11.1 - '@unrs/resolver-binding-linux-s390x-gnu': 1.11.1 - '@unrs/resolver-binding-linux-x64-gnu': 1.11.1 - '@unrs/resolver-binding-linux-x64-musl': 1.11.1 - '@unrs/resolver-binding-wasm32-wasi': 1.11.1 - '@unrs/resolver-binding-win32-arm64-msvc': 1.11.1 - '@unrs/resolver-binding-win32-ia32-msvc': 1.11.1 - '@unrs/resolver-binding-win32-x64-msvc': 1.11.1 - until-async@3.0.2: {} update-browserslist-db@1.2.3(browserslist@4.28.1): @@ -18355,10 +14364,6 @@ snapshots: dependencies: tslib: 2.8.1 - uri-js@4.4.1: - dependencies: - punycode: 2.3.1 - urlpattern-polyfill@10.1.0: {} use-resize-observer@9.1.0(react-dom@19.2.4(react@18.3.1))(react@18.3.1): @@ -18537,47 +14542,6 @@ snapshots: when-exit@2.1.5: {} - which-boxed-primitive@1.1.1: - dependencies: - is-bigint: 1.1.0 - is-boolean-object: 1.2.2 - is-number-object: 1.1.1 - is-string: 1.1.1 - is-symbol: 1.1.1 - - which-builtin-type@1.2.1: - dependencies: - call-bound: 1.0.4 - function.prototype.name: 1.1.8 - has-tostringtag: 1.0.2 - is-async-function: 2.1.1 - is-date-object: 1.1.0 - is-finalizationregistry: 1.1.1 - is-generator-function: 1.1.2 - is-regex: 1.2.1 - is-weakref: 1.1.1 - isarray: 2.0.5 - which-boxed-primitive: 1.1.1 - which-collection: 1.0.2 - which-typed-array: 1.1.20 - - which-collection@1.0.2: - dependencies: - is-map: 2.0.3 - is-set: 2.0.3 - is-weakmap: 2.0.2 - is-weakset: 2.0.4 - - which-typed-array@1.1.20: - dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.8 - call-bound: 1.0.4 - for-each: 0.3.5 - get-proto: 1.0.1 - gopd: 1.2.0 - has-tostringtag: 1.0.2 - which@2.0.2: dependencies: isexe: 2.0.0 @@ -18603,8 +14567,6 @@ snapshots: dependencies: string-width: 8.2.0 - word-wrap@1.2.5: {} - wordwrap@1.0.0: {} wordwrapjs@4.0.1: @@ -18650,8 +14612,6 @@ snapshots: yallist@3.1.1: {} - yaml@1.10.3: {} - yaml@2.9.0: {} yargs-parser@18.1.3: diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index f9454c3be8b..5ce478284f1 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -16,6 +16,5 @@ onlyBuiltDependencies: publicHoistPattern: - '*vitest*' - '*vite*' - - '*eslint*' - '*prettier*' strictPeerDependencies: false From 4ec82983979646c03f633eb6c621b15ef579321a Mon Sep 17 00:00:00 2001 From: Gonzalo Riestra Date: Thu, 1 Oct 2026 17:18:46 +0200 Subject: [PATCH 02/10] Account for existing tools in the lint coverage audit --- bin/audit-oxlint-coverage.js | 34 ++++++++--- configurations/oxlint-rule-mapping.json | 77 +++++++++++++++++++++---- docs/cli/oxlint-rule-coverage.md | 55 ++++++++++++++++-- 3 files changed, 142 insertions(+), 24 deletions(-) diff --git a/bin/audit-oxlint-coverage.js b/bin/audit-oxlint-coverage.js index f710cbc111e..dcd5aa7f197 100644 --- a/bin/audit-oxlint-coverage.js +++ b/bin/audit-oxlint-coverage.js @@ -17,9 +17,12 @@ const severity = (value) => { return {off: 0, allow: 0, warn: 1, error: 2, deny: 2}[level] ?? level } -const stable = (value) => JSON.stringify(value, (_, item) => - item && typeof item === 'object' && !Array.isArray(item) - ? Object.fromEntries(Object.entries(item).sort(([first], [second]) => first.localeCompare(second))) : item) +const stable = (value) => + JSON.stringify(value, (_, item) => + item && typeof item === 'object' && !Array.isArray(item) + ? Object.fromEntries(Object.entries(item).sort(([first], [second]) => first.localeCompare(second))) + : item, + ) const missing = new Map() const options = new Set() @@ -43,9 +46,14 @@ for (const group of baseline.configurations) { if (match(file, override.files) && !match(file, override.excludeFiles)) Object.assign(after, override.rules) } // Preserve file-wide exemptions while comparing effective file scopes. - const header = readFileSync(resolve(root, file), 'utf8').match(/^(?:\s*(?:\/\/[^\n]*(?:\n|$)|\/\*[\s\S]*?\*\/))*/)?.[0] ?? '' + const header = + readFileSync(resolve(root, file), 'utf8').match(/^(?:\s*(?:\/\/[^\n]*(?:\n|$)|\/\*[\s\S]*?\*\/))*/)?.[0] ?? '' for (const directive of header.matchAll(/eslint-disable(?!-)([^\n*]*)/g)) { - for (const name of directive[1].split(' -- ')[0].split(',').map((name) => name.trim())) delete after[name] + for (const name of directive[1] + .split(' -- ')[0] + .split(',') + .map((name) => name.trim())) + delete after[name] } if (!match(file, formattingInputs)) missingFormatting.push(file) for (const [name, value] of Object.entries(before)) { @@ -64,13 +72,21 @@ for (const group of baseline.configurations) { supported.add(name) if (replacement.status === 'partial') partial.add(name) if (severity(value) !== severity(after[replacement.replacement])) severities.add(name) - const parameters = (configuration) => Array.isArray(configuration) ? configuration.slice(1) : [] + const parameters = (configuration) => (Array.isArray(configuration) ? configuration.slice(1) : []) if (stable(parameters(value)) !== stable(parameters(after[replacement.replacement]))) options.add(name) } filesCompared++ } } +// This supplementary inventory records verified tool overlap. It does not turn +// a missing dedicated rule into a claim of equivalent behavior or file scope. +const otherToolCoverage = Object.fromEntries( + [...unsupported] + .filter((name) => mapping[name].otherToolCoverage) + .map((name) => [name, mapping[name].otherToolCoverage]), +) + const summary = { baselineCommit: baseline.baselineCommit, filesCompared, @@ -78,7 +94,8 @@ const summary = { baselineLintRules: Object.keys(mapping).length, rulesWithReplacements: supported.size, partialReplacements: partial.size, - unsupportedRules: unsupported.size, + rulesWithoutDedicatedReplacement: unsupported.size, + rulesWithOtherToolCoverage: Object.keys(otherToolCoverage).length, rulesWithScopeGaps: missing.size, optionDifferences: options.size, severityDifferences: severities.size, @@ -88,7 +105,8 @@ const findings = { scopeGaps: Object.fromEntries(missing), optionDifferences: [...options].sort(), severityDifferences: [...severities].sort(), - unsupportedRules: [...unsupported].sort(), + rulesWithoutDedicatedReplacement: [...unsupported].sort(), + otherToolCoverage, partialReplacements: [...partial].sort(), missingFormatting, } diff --git a/configurations/oxlint-rule-mapping.json b/configurations/oxlint-rule-mapping.json index 59a7578dddf..b6fea3198d1 100644 --- a/configurations/oxlint-rule-mapping.json +++ b/configurations/oxlint-rule-mapping.json @@ -329,7 +329,12 @@ "eslint-comments/no-unused-disable": { "replacement": null, "status": "unsupported", - "limitation": "ESLint directive conventions are removed; Oxlint still checks unused disable directives." + "limitation": "ESLint directive conventions are removed; Oxlint still checks unused disable directives.", + "otherToolCoverage": { + "tools": ["Oxlint unused-disable reporting"], + "scope": "Full pnpm lint and the PR Oxlint job pass --report-unused-disable-directives with --deny-warnings.", + "limitation": "This covers unused suppressions for enabled Oxlint rules. Per-project lint targets do not all pass this flag; other ESLint directive conventions remain separate gaps." + } }, "eslint-comments/no-unused-enable": { "replacement": null, @@ -434,7 +439,12 @@ "import-x/no-extraneous-dependencies": { "replacement": null, "status": "unsupported", - "limitation": "The ESLint import resolver and project-wide export analysis are removed." + "limitation": "The ESLint import resolver and project-wide export analysis are removed.", + "otherToolCoverage": { + "tools": ["Knip unlisted"], + "scope": "Analyzed imports must have a declared dependency under Knip resolution.", + "limitation": "The original ESLint rule applied only to JavaScript. Knip exclusions and ancestor-workspace dependency lookup prevent identical coverage; default mode also accepts devDependencies." + } }, "import-x/no-mutable-exports": { "replacement": "import/no-mutable-exports", @@ -464,12 +474,22 @@ "import-x/no-unresolved": { "replacement": null, "status": "unsupported", - "limitation": "The ESLint import resolver and project-wide export analysis are removed." + "limitation": "The ESLint import resolver and project-wide export analysis are removed.", + "otherToolCoverage": { + "tools": ["Knip unresolved", "TypeScript module resolution", "esbuild resolution"], + "scope": "Knip checks analyzed imports; TypeScript and esbuild check their compilation/bundle inputs.", + "limitation": "The original ESLint rule applied only to JavaScript. Knip excludes the plugin and e2e workspaces and selected files; TypeScript does not type-check all JavaScript, and externalized bundle imports need not resolve." + } }, "import-x/no-unused-modules": { "replacement": null, "status": "unsupported", - "limitation": "The ESLint import resolver and project-wide export analysis are removed." + "limitation": "The ESLint import resolver and project-wide export analysis are removed.", + "otherToolCoverage": { + "tools": ["Knip exports", "Knip types", "Knip files"], + "scope": "Knip reports unused exports, types, and files in its analyzed graph.", + "limitation": "Public entry exports are retained by default. Ignored workspaces, generated files, and configured entry points differ from ESLint scopes." + } }, "import-x/no-useless-path-segments": { "replacement": null, @@ -494,12 +514,22 @@ "jsdoc/check-alignment": { "replacement": null, "status": "unsupported", - "limitation": "Advanced JSDoc validation is not implemented by the enabled native and independent checks." + "limitation": "Advanced JSDoc validation is not implemented by the enabled native and independent checks.", + "otherToolCoverage": { + "tools": ["Prettier"], + "scope": "Prettier normalizes indentation of JSDoc blocks whose lines start with asterisks.", + "limitation": "This is formatting overlap, not complete JSDoc layout validation; missing asterisks and tag-column alignment are not supplied." + } }, "jsdoc/check-indentation": { "replacement": null, "status": "unsupported", - "limitation": "Advanced JSDoc validation is not implemented by the enabled native and independent checks." + "limitation": "Advanced JSDoc validation is not implemented by the enabled native and independent checks.", + "otherToolCoverage": { + "tools": ["Prettier"], + "scope": "Prettier normalizes indentation of supported JSDoc blocks.", + "limitation": "It does not validate all indentation within comment prose and examples or repair arbitrary malformed block comments." + } }, "jsdoc/check-line-alignment": { "replacement": null, @@ -519,7 +549,12 @@ "jsdoc/check-syntax": { "replacement": null, "status": "unsupported", - "limitation": "Advanced JSDoc validation is not implemented by the enabled native and independent checks." + "limitation": "Advanced JSDoc validation is not implemented by the enabled native and independent checks.", + "otherToolCoverage": { + "tools": ["TSDoc parser"], + "scope": "The enabled tsdoc-syntax rule rejects malformed TSDoc, including invalid typed @param syntax.", + "limitation": "TSDoc and JSDoc have different grammars. This does not validate documentation against function signatures or replace the original JSDoc syntax policy." + } }, "jsdoc/check-tag-names": { "replacement": "jsdoc/check-tag-names", @@ -838,7 +873,12 @@ "no-catch-shadow": { "replacement": null, "status": "unsupported", - "limitation": "No independent implementation is enabled." + "limitation": "No independent implementation is enabled.", + "otherToolCoverage": { + "tools": ["Oxlint no-shadow"], + "scope": "The enabled JavaScript no-shadow rule catches a catch binding that shadows an existing outer variable.", + "limitation": "General shadowing options and hoisting behavior differ from the legacy IE8-specific rule." + } }, "no-class-assign": { "replacement": "no-class-assign", @@ -893,7 +933,12 @@ "no-dupe-args": { "replacement": null, "status": "unsupported", - "limitation": "No independent implementation is enabled." + "limitation": "No independent implementation is enabled.", + "otherToolCoverage": { + "tools": ["Oxlint parser", "Independent no-redeclare rule"], + "scope": "The ESM parser rejects duplicate parameters; the enabled independent no-redeclare rule also catches duplicate parameters in CommonJS plugin files.", + "limitation": "The original rule was enabled only for JavaScript. The CommonJS parser alone accepts duplicates; the independent rule is not a full equivalence proof for all parameter shapes." + } }, "no-dupe-class-members": { "replacement": "no-dupe-class-members", @@ -1093,12 +1138,22 @@ "no-octal": { "replacement": null, "status": "unsupported", - "limitation": "No independent implementation is enabled." + "limitation": "No independent implementation is enabled.", + "otherToolCoverage": { + "tools": ["TypeScript", "Prettier TypeScript parser", "Oxlint ESM parser"], + "scope": "TypeScript checking and Prettier parsing reject legacy octal literals in TypeScript; Oxlint rejects them in strict ES modules.", + "limitation": "CommonJS JavaScript still accepts legacy octal syntax. Prettier does not reject or rewrite it there." + } }, "no-octal-escape": { "replacement": null, "status": "unsupported", - "limitation": "No independent implementation is enabled." + "limitation": "No independent implementation is enabled.", + "otherToolCoverage": { + "tools": ["TypeScript", "Prettier TypeScript parser", "Oxlint ESM parser"], + "scope": "TypeScript checking and Prettier parsing reject legacy octal escapes in TypeScript; Oxlint rejects them in strict ES modules.", + "limitation": "CommonJS JavaScript still accepts legacy octal escapes. Prettier does not reject or rewrite them there." + } }, "no-param-reassign": { "replacement": "no-param-reassign", diff --git a/docs/cli/oxlint-rule-coverage.md b/docs/cli/oxlint-rule-coverage.md index 1d636082317..712242ce443 100644 --- a/docs/cli/oxlint-rule-coverage.md +++ b/docs/cli/oxlint-rule-coverage.md @@ -17,7 +17,9 @@ The original configuration at `656de9379cb7b4e2af6fe0bc6c8d81b1a50163f7` enabled 301 lint rule names plus `prettier/prettier`. The migration has replacements for 246 lint rule names: 197 native counterparts, 14 retained implementations, and 35 partial independent replacements. Prettier covers formatting separately. -There are 55 unsupported rule names. This is not full behavioral parity. +There are 55 rule names without a dedicated replacement. Of those, 11 have +identified coverage or overlap elsewhere in the existing toolchain. These are +not 55 wholly missing capabilities, and overlap does not establish full parity. The independent plugin in `packages/eslint-plugin-cli/oxlint.js` adds naming, member ordering, identifier length, import ordering, project boundaries, unused @@ -39,6 +41,47 @@ and ambiguous default imports. Existing code and directives are updated for thes diagnostics. Unused imports in tests remain checked even though unused local variables are allowed. Import-removal fixes differ from the original dedicated plugin. +## Coverage from other existing tools + +The mapping's `unsupported` status means no dedicated rule replacement. Its +`otherToolCoverage` entries record additional coverage and the remaining limits. +The audit lists these separately rather than subtracting partial overlap from gaps. + +| Existing tool | Coverage already available | Limits | +| --- | --- | --- | +| Knip | Unresolved imports, unlisted dependencies, unused exports/types/files | The plugin and e2e workspaces, selected generated files, and dependencies are excluded. Public entry exports are retained; ancestor-workspace dependencies can satisfy imports. | +| TypeScript and esbuild | Module resolution in checked/bundled inputs; TypeScript also rejects undeclared assignments and invalid redeclarations | Not all JavaScript is type-checked; external bundle imports are exempt from resolution. Neither checks dependency declarations or flags deprecated APIs as errors. | +| TypeScript, Prettier's TypeScript parser, Oxlint's ESM parser | Legacy octal literals and escapes are rejected in their respective scopes | CommonJS JavaScript still accepts these cases. | +| Oxlint parser and existing rules | Duplicate parameters in ESM; independent `no-redeclare` catches duplicates in CommonJS plugin files; `no-shadow` catches catch-binding shadowing | Parser behavior depends on source type, and the existing rules are not proven equivalent for every legacy case. | +| Oxlint CLI | Unused disable comments fail full lint and the PR lint job | Per-project targets do not all pass the reporting flag. Pairing, blanket disables, and other directive policies remain separate gaps. | +| Prettier | Indentation/alignment of supported JSDoc blocks | Does not enforce missing asterisks, tag-column alignment, comment spacing, directive padding, or blank lines between class members. | +| TSDoc parser | Malformed TSDoc syntax | Does not validate parameter names against signatures, resolve documentation types, or check return/throw/yield consistency. | + +The original `consistent-return`, `import-x/no-unresolved`, +`import-x/no-extraneous-dependencies`, and Node deprecated/unsupported API rules +were enabled only for JavaScript, not TypeScript. TypeScript coverage must not be +credited as a complete replacement for those JavaScript checks. `noImplicitReturns` +and `checkJs` are not enabled in the shared TypeScript configuration. Also, the +original `strict` rule forbade explicit directives; TypeScript's strict mode does +not replace that style policy. + +TypeDoc generation exists for the documentation deployment, but it is not a PR +lint gate or a replacement for the removed JSDoc policies. Nx task execution, +workspace dependency-version checks, and unit tests likewise do not establish +coverage of missing graph-boundary or API-metadata rules. + +The review used the installed Knip 5.88.1, TypeScript 5.9.3, Prettier 3.8.4, +Oxlint 1.75.0, and TSDoc 0.16.0. Temporary-file probes confirmed both detections +and counterexamples: Knip reported missing modules, unlisted packages and unused +exports; formatting fixed JSDoc indentation but retained missing asterisks and +comment/class-spacing gaps; TypeScript accepted inconsistent inferred returns, +async read-modify-write operations, deprecated calls and mismatched JSDoc names. +These examples support the inventory, not exhaustive equivalence claims. + +Tool references: [Knip issue types](https://knip.dev/reference/issue-types), +[TypeScript options](https://www.typescriptlang.org/tsconfig/), and +[Prettier comment handling](https://prettier.io/docs/rationale.html#comments). + ## Remaining gaps The complete rule-by-rule mapping and limitations are in @@ -46,12 +89,12 @@ The complete rule-by-rule mapping and limitations are in | Family | Remaining checks | | --- | --- | -| Import analysis | Deprecated imports, unresolved imports, undeclared dependencies, unused exports, redundant path segments | -| JSDoc | Advanced tag/type validation, parameter path matching, return/throw/yield consistency, comment layout | +| Import analysis | Deprecated imports and redundant path segments; resolution, dependency, and unused-export coverage outside Knip/compiler scopes | +| JSDoc | Advanced tag/type validation, parameter path matching, return/throw/yield consistency, layout beyond Prettier | | Control flow | Consistent returns, atomic updates, early-return conventions | | Node APIs | Deprecated or unsupported APIs, callback conventions, promise API preferences, executable/shebang checks | | Shopify conventions | Image imports, context menus, module-scope constants, Twine, singular enum names | -| Style and directives | Camel case, line-comment placement, statement padding, class sorting, strict-mode conventions, ESLint directive conventions | +| Style and directives | Camel case in JavaScript, line-comment placement, statement padding, class sorting, explicit strict-directive policy, directive conventions beyond unused suppressions | Oxlint still checks unused disable directives. Generated GraphQL files keep their original consistent-type-definition exemption; array style, naming, and project @@ -70,7 +113,9 @@ frozen effective configurations captured from the original revision in It checks 1,633 surviving files, with four deleted compatibility files recorded separately. Every original rule has an explicit replacement or documented gap. The audit also checks formatting coverage and severity, and reports option differences. -It compares configuration coverage, not exhaustive behavioral equivalence. +It compares lint configuration coverage, not exhaustive behavioral equivalence. +The supplementary tool inventory is manually verified and records scope limits; +the audit does not execute Knip, TypeScript, Prettier, or the probe examples. Focused tests exercise the independent rules, native-compatible directives, and project boundaries. An integration test rejects attempts to load ESLint or upstream From 3f65b2d0b7f5cb093df271a7fd6443a0f664b018 Mon Sep 17 00:00:00 2001 From: Gonzalo Riestra Date: Thu, 1 Oct 2026 17:38:47 +0200 Subject: [PATCH 03/10] Preserve source and legacy suppressions during Oxlint migration --- configurations/oxlint-rule-mapping.json | 38 ++--- docs/cli/oxlint-rule-coverage.md | 25 ++- oxlint.json | 142 ++++++++++-------- .../cli/commands/app/app-logs/sources.test.ts | 8 +- packages/app/src/cli/commands/app/logs.ts | 1 - packages/app/src/cli/hooks/public_metadata.ts | 2 +- .../app/src/cli/models/app/app.test-data.ts | 4 +- packages/app/src/cli/models/app/loader.ts | 11 +- .../src/cli/models/app/validation/common.ts | 2 +- .../extensions/extension-instance.test.ts | 4 +- .../models/extensions/extension-instance.ts | 2 +- .../cli/models/extensions/specification.ts | 2 +- .../app_config_privacy_compliance_webhooks.ts | 2 +- .../specifications/function.test.ts | 4 +- ...sent_payments_app_extension_schema.test.ts | 10 +- ...card_payments_app_extension_schema.test.ts | 2 +- ...card_payments_app_extension_schema.test.ts | 2 +- .../transform/app_config_webhook.ts | 7 +- .../specifications/type-generation.ts | 2 +- .../specifications/ui_extension.test.ts | 6 +- .../extensions/specifications/ui_extension.ts | 4 +- .../validation/app_config_webhook.ts | 2 +- .../cli/models/project/config-selection.ts | 2 +- .../app/src/cli/models/project/project.ts | 6 +- .../app/src/cli/prompts/generate/extension.ts | 2 +- .../admin-link/extension-config-builder.ts | 2 +- .../services/app-logs/dev/poll-app-logs.ts | 2 +- .../hooks/useSelfAdjustingInterval.test.tsx | 2 +- .../app/src/cli/services/app-logs/utils.ts | 4 +- .../app-security-engine/checks/embedded.ts | 2 +- .../app-security-engine/embed-checks.mjs | 2 +- .../app-security-engine/rules/config-rules.ts | 2 +- .../app-security-engine/rules/liquid-rules.ts | 2 +- .../app-security-engine/scanners/discover.ts | 20 +-- .../scanners/path-rules.ts | 2 +- .../scanners/repository-marker.ts | 2 +- .../tests/secret-safety.test.ts | 2 +- .../app/config-pipeline-snapshot.test.ts | 14 +- .../app/src/cli/services/app/config/link.ts | 2 +- .../app/patch-app-configuration-file.ts | 2 +- .../app/write-app-configuration-file.test.ts | 4 +- .../app/src/cli/services/build/bundle-size.ts | 2 +- .../build/steps/bundle-ui-step.test.ts | 2 +- .../steps/include-assets/generate-manifest.ts | 2 +- .../execute-bulk-operation.test.ts | 2 +- .../deploy-identifier-matching.test.ts | 2 +- packages/app/src/cli/services/deploy.test.ts | 2 +- .../src/cli/services/deploy/upload.test.ts | 4 +- .../app/src/cli/services/deploy/upload.ts | 2 +- packages/app/src/cli/services/dev.test.ts | 4 +- .../dev/app-events/app-event-watcher.ts | 4 +- .../dev/app-events/file-watcher.test.ts | 10 +- .../services/dev/app-events/file-watcher.ts | 2 +- packages/app/src/cli/services/dev/cap.ts | 2 +- .../src/cli/services/dev/extension.test.ts | 6 +- .../services/dev/extension/localization.ts | 14 +- .../dev/extension/server/middlewares.test.ts | 2 +- .../services/dev/extension/websocket.test.ts | 2 +- .../dev/extension/websocket/handlers.test.ts | 2 +- .../dev/processes/app-logs-polling.ts | 4 +- .../dev-session/dev-session-logger.test.ts | 8 +- .../dev/ui/components/DevSessionUI.tsx | 8 +- .../dev/ui/components/TabPanel.test.tsx | 32 ++-- .../app/src/cli/services/extensions/bundle.ts | 6 +- .../app/src/cli/services/function/runner.ts | 2 +- .../src/cli/services/generate/extension.ts | 2 +- .../fetch-extension-specifications.test.ts | 2 +- .../declarative-definitions.test.ts | 64 ++++---- .../shop-import/declarative-definitions.ts | 2 +- .../src/cli/utilities/app/config/getTomls.ts | 2 +- .../utilities/app/http-reverse-proxy.test.ts | 4 +- .../app-management-client.test.ts | 6 +- .../app-management-client.ts | 2 +- .../extensions/theme/host-theme-manager.ts | 2 +- .../app/src/cli/utilities/file-formatter.ts | 4 +- packages/app/src/cli/utilities/json-schema.ts | 3 +- packages/app/src/cli/utilities/mkcert.test.ts | 6 +- packages/app/src/cli/utilities/mkcert.ts | 2 +- .../node/analytics/error-grouping.test.ts | 4 +- .../private/node/analytics/error-grouping.ts | 2 +- packages/cli-kit/src/private/node/api.ts | 4 +- .../cli-kit/src/private/node/api/graphql.ts | 2 +- .../src/private/node/content-tokens.ts | 2 +- .../cli-kit/src/private/node/context/agent.ts | 2 +- .../cli-kit/src/private/node/json-error.ts | 2 +- packages/cli-kit/src/private/node/session.ts | 2 +- .../node/ui/components/ConcurrentOutput.tsx | 2 +- .../node/ui/components/SelectInput.tsx | 2 +- .../node/ui/components/TextAnimation.tsx | 2 +- packages/cli-kit/src/public/common/array.ts | 2 +- packages/cli-kit/src/public/common/url.ts | 2 +- packages/cli-kit/src/public/node/analytics.ts | 4 +- .../cli-kit/src/public/node/api/admin.test.ts | 9 +- .../cli-kit/src/public/node/api/graphql.ts | 2 +- packages/cli-kit/src/public/node/archiver.ts | 2 +- .../src/public/node/base-command.test.ts | 4 +- .../cli-kit/src/public/node/cli-launcher.ts | 2 +- .../cli-kit/src/public/node/context/local.ts | 2 +- .../src/public/node/custom-oclif-loader.ts | 2 +- .../src/public/node/doctor/framework.ts | 10 +- .../src/public/node/error-handler.test.ts | 4 +- .../cli-kit/src/public/node/error-handler.ts | 4 +- .../src/public/node/error/index.test.ts | 4 +- .../cli-kit/src/public/node/error/index.ts | 2 +- packages/cli-kit/src/public/node/fs.ts | 12 +- .../src/public/node/graphiql/server.ts | 4 +- packages/cli-kit/src/public/node/graphql.ts | 2 +- .../cli-kit/src/public/node/hooks/postrun.ts | 4 +- packages/cli-kit/src/public/node/http.ts | 2 +- packages/cli-kit/src/public/node/is-global.ts | 6 +- .../cli-kit/src/public/node/local-storage.ts | 8 +- .../cli-kit/src/public/node/metadata.test.ts | 6 +- packages/cli-kit/src/public/node/metadata.ts | 2 +- packages/cli-kit/src/public/node/monorail.ts | 2 +- .../public/node/node-package-manager.test.ts | 3 +- .../src/public/node/node-package-manager.ts | 2 +- .../src/public/node/notifications-system.ts | 2 +- packages/cli-kit/src/public/node/os.ts | 6 +- packages/cli-kit/src/public/node/path.ts | 4 +- .../src/public/node/session-prompt.test.ts | 2 +- .../public/node/store-auth-session.test.ts | 2 +- packages/cli-kit/src/public/node/system.ts | 8 +- .../cli-kit/src/public/node/themes/api.ts | 2 +- packages/cli-kit/src/public/node/tree-kill.ts | 2 +- packages/cli-kit/src/public/node/ui.test.ts | 6 +- packages/cli-kit/src/public/node/ui.tsx | 2 +- .../cli-kit/src/public/node/upgrade.test.ts | 2 +- packages/cli-kit/src/public/node/upgrade.ts | 2 +- packages/cli-kit/src/public/node/version.ts | 4 +- packages/cli/bin/bundle.js | 2 +- packages/cli/bin/run.js | 1 - packages/cli/src/cli/commands/help.ts | 4 +- packages/cli/src/cli/help.test.ts | 18 ++- packages/cli/src/uncaught-error-handler.ts | 2 +- packages/e2e/helpers/browser-login.ts | 2 +- packages/e2e/package.json | 18 +++ packages/e2e/project.json | 4 +- packages/e2e/scripts/cleanup-apps.ts | 4 +- packages/e2e/scripts/cleanup-stores.ts | 6 +- packages/e2e/scripts/prime-browser-auth.ts | 6 +- packages/e2e/setup/auth-diagnostics.ts | 2 +- packages/e2e/setup/cli.ts | 2 +- packages/e2e/setup/global-auth.ts | 4 +- packages/e2e/setup/teardown.ts | 8 +- .../eslint-plugin-cli/oxlint-compat-names.js | 14 ++ .../eslint-plugin-cli/oxlint-no-catch-all.js | 9 ++ .../oxlint-rules/naming-convention.js | 2 + packages/eslint-plugin-cli/oxlint-tsdoc.js | 9 ++ packages/eslint-plugin-cli/oxlint.test.js | 59 +++++++- .../src/install-cloudflared.ts | 2 +- packages/plugin-cloudflare/src/tunnel.ts | 4 +- .../src/cli/commands/store/create/dev.test.ts | 12 +- .../src/cli/commands/store/delete.test.ts | 12 +- .../store/auth/existing-scopes.test.ts | 10 +- .../cli/services/store/auth/recovery.test.ts | 10 +- .../cli/services/store/auth/result.test.ts | 8 +- .../services/store/auth/token-client.test.ts | 4 +- .../services/store/create/preview/index.ts | 2 +- .../src/cli/services/store/delete/dev.test.ts | 6 +- .../src/cli/services/store/info/index.ts | 8 +- .../store-lookup/destinations.test.ts | 30 ++-- .../utilities/store-lookup/destinations.ts | 2 +- .../store-lookup/organization-shop.test.ts | 10 +- .../utilities/store-lookup/organization.ts | 2 +- packages/theme/src/cli/services/dev.test.ts | 2 +- packages/theme/src/cli/services/dev.ts | 2 +- packages/theme/src/cli/services/publish.ts | 3 +- packages/theme/src/cli/services/push.ts | 2 +- packages/theme/src/cli/utilities/notifier.ts | 4 +- .../theme/src/cli/utilities/theme-command.ts | 2 +- .../theme-environment/crawler-signature.ts | 2 +- .../theme-environment/host-validation.test.ts | 2 +- .../utilities/theme-environment/proxy.test.ts | 6 +- .../storefront-password-prompt.test.ts | 2 +- .../theme/src/cli/utilities/theme-fs.test.ts | 2 +- .../ExtensionServerClient.ts | 8 +- .../src/context/constants.ts | 3 +- .../src/testing/extensions.ts | 2 +- .../src/utilities/replaceUpdated.test.ts | 2 +- .../src/utilities/set.test.ts | 2 +- 180 files changed, 627 insertions(+), 480 deletions(-) create mode 100644 packages/eslint-plugin-cli/oxlint-compat-names.js create mode 100644 packages/eslint-plugin-cli/oxlint-no-catch-all.js create mode 100644 packages/eslint-plugin-cli/oxlint-tsdoc.js diff --git a/configurations/oxlint-rule-mapping.json b/configurations/oxlint-rule-mapping.json index b6fea3198d1..b063bb37287 100644 --- a/configurations/oxlint-rule-mapping.json +++ b/configurations/oxlint-rule-mapping.json @@ -1,6 +1,6 @@ { "@nx/enforce-module-boundaries": { - "replacement": "@shopify/cli/module-boundaries", + "replacement": "compat/nx-enforce-module-boundaries", "status": "partial", "limitation": "Relative cross-project imports and re-exports are checked. Nx graph cycles, tag constraints, lazy-loading checks and buildability checks are not retained." }, @@ -97,7 +97,7 @@ "limitation": "The specialized Shopify rule is not ported." }, "@shopify/strict-component-boundaries": { - "replacement": "@shopify/cli/module-boundaries", + "replacement": "compat/nx-enforce-module-boundaries", "status": "partial", "limitation": "Relative imports between projects are rejected. Resolver-based component entrypoint checks are not retained." }, @@ -147,9 +147,9 @@ "limitation": "Independent syntax check covers repository conventions, not the complete upstream rule API." }, "@typescript-eslint/naming-convention": { - "replacement": "@shopify/cli/naming-convention", + "replacement": "compat/typescript-eslint-naming-convention", "status": "partial", - "limitation": "Configured declaration, parameter, property and type names are checked. Type filters, all upstream selectors and modifier precedence are not implemented." + "limitation": "Configured declaration, parameter, property and type names are checked. Type filters, all upstream selectors and modifier precedence are not implemented. Inferred type parameters keep their existing names; naming enforcement applies to declared type parameters." }, "@typescript-eslint/no-array-constructor": { "replacement": "no-array-constructor", @@ -197,9 +197,9 @@ "limitation": "Native behavior and option support may differ from ESLint." }, "@typescript-eslint/no-unnecessary-type-assertion": { - "replacement": "typescript/no-unnecessary-type-assertion", - "status": "native", - "limitation": "Native behavior and option support may differ from ESLint." + "replacement": null, + "status": "unsupported", + "limitation": "Disabled during migration because the native checker flags assertions accepted by the original ESLint setup, including intentional test fixtures. Existing casts are retained; there is no exact compatibility option." }, "@typescript-eslint/no-unnecessary-type-constraint": { "replacement": "typescript/no-unnecessary-type-constraint", @@ -372,7 +372,7 @@ "limitation": "Native behavior and option support may differ from ESLint." }, "id-length": { - "replacement": "@shopify/cli/id-length", + "replacement": "compat/id-length", "status": "partial", "limitation": "Independent syntax check covers repository conventions, not the complete upstream rule API." }, @@ -452,14 +452,14 @@ "limitation": "Native behavior and option support may differ from ESLint." }, "import-x/no-named-as-default": { - "replacement": "import/no-named-as-default", - "status": "native", - "limitation": "Native behavior and option support may differ from ESLint." + "replacement": null, + "status": "unsupported", + "limitation": "Disabled during migration because native module analysis flags existing default WebSocket imports accepted by ESLint. Existing imports are retained; this check is currently lost." }, "import-x/no-named-as-default-member": { - "replacement": "import/no-named-as-default-member", - "status": "native", - "limitation": "Native behavior and option support may differ from ESLint." + "replacement": null, + "status": "unsupported", + "limitation": "Disabled during migration because native module analysis flags existing Prettier and CommonJS GraphQL-loader access accepted by ESLint. Existing imports are retained; this check is currently lost." }, "import-x/no-named-default": { "replacement": "import/no-named-default", @@ -787,7 +787,7 @@ "limitation": "Independent syntax check covers repository conventions, not the complete upstream rule API." }, "n/prefer-global/console": { - "replacement": "@shopify/cli/prefer-global-console", + "replacement": "compat/n-prefer-global-console", "status": "partial", "limitation": "Independent syntax check covers repository conventions, not the complete upstream rule API." }, @@ -807,7 +807,7 @@ "limitation": "Independent syntax check covers repository conventions, not the complete upstream rule API." }, "n/prefer-global/url": { - "replacement": "@shopify/cli/prefer-global-url", + "replacement": "compat/n-prefer-global-url", "status": "partial", "limitation": "Independent syntax check covers repository conventions, not the complete upstream rule API." }, @@ -867,7 +867,7 @@ "limitation": "Native behavior and option support may differ from ESLint." }, "no-catch-all/no-catch-all": { - "replacement": "@shopify/cli/no-catch-all", + "replacement": "no-catch-all/no-catch-all", "status": "retained" }, "no-catch-shadow": { @@ -1191,7 +1191,7 @@ "limitation": "Native behavior and option support may differ from ESLint." }, "no-restricted-syntax": { - "replacement": "@shopify/cli/restricted-syntax", + "replacement": "compat/no-restricted-syntax", "status": "partial", "limitation": "Independent syntax check covers repository conventions, not the complete upstream rule API." }, @@ -1496,7 +1496,7 @@ "limitation": "Native behavior and option support may differ from ESLint." }, "tsdoc/syntax": { - "replacement": "@shopify/cli/tsdoc-syntax", + "replacement": "tsdoc/syntax", "status": "partial", "limitation": "Uses the same TSDoc parser with its default configuration. Per-directory tsdoc.json loading is not implemented; this repository has no such file." }, diff --git a/docs/cli/oxlint-rule-coverage.md b/docs/cli/oxlint-rule-coverage.md index 712242ce443..83f3fda885b 100644 --- a/docs/cli/oxlint-rule-coverage.md +++ b/docs/cli/oxlint-rule-coverage.md @@ -15,11 +15,11 @@ Consumers must configure those separately. This is a breaking public config chan The original configuration at `656de9379cb7b4e2af6fe0bc6c8d81b1a50163f7` enabled 301 lint rule names plus `prettier/prettier`. The migration has replacements for -246 lint rule names: 197 native counterparts, 14 retained implementations, and +243 lint rule names: 194 native counterparts, 14 retained implementations, and 35 partial independent replacements. Prettier covers formatting separately. -There are 55 rule names without a dedicated replacement. Of those, 11 have +There are 58 rule names without a dedicated replacement. Of those, 11 have identified coverage or overlap elsewhere in the existing toolchain. These are -not 55 wholly missing capabilities, and overlap does not establish full parity. +not 58 wholly missing capabilities, and overlap does not establish full parity. The independent plugin in `packages/eslint-plugin-cli/oxlint.js` adds naming, member ordering, identifier length, import ordering, project boundaries, unused @@ -36,9 +36,18 @@ fixes for contiguous imports without comments or side effects. Public parameter return documentation checks cover directly exported functions; destructured parameter paths and full export reachability are not equivalent to the original JSDoc rules. -Native rules can report additional cases, including unnecessary type assertions -and ambiguous default imports. Existing code and directives are updated for these -diagnostics. Unused imports in tests remain checked even though unused local variables +To keep the migration small, existing type assertions and default imports are +preserved. The native `typescript/no-unnecessary-type-assertion`, +`import/no-named-as-default`, and `import/no-named-as-default-member` checks are +disabled because they report existing code accepted by ESLint and have no exact +compatibility option. These are three explicit coverage gaps, not equivalent +replacements. Declared type parameters keep their naming checks; inferred type +parameter names retain their existing spelling. + +Small dependency-free alias plugins preserve the existing `compat/*`, +`no-catch-all/no-catch-all`, and `tsdoc/syntax` suppression names. They call the +independent implementations and do not load ESLint or upstream plugins. Obsolete +and unused suppressions are removed. Unused imports in tests remain checked even though unused local variables are allowed. Import-removal fixes differ from the original dedicated plugin. ## Coverage from other existing tools @@ -89,9 +98,9 @@ The complete rule-by-rule mapping and limitations are in | Family | Remaining checks | | --- | --- | -| Import analysis | Deprecated imports and redundant path segments; resolution, dependency, and unused-export coverage outside Knip/compiler scopes | +| Import analysis | Deprecated imports, redundant path segments, and ambiguous default-import checks; resolution, dependency, and unused-export coverage outside Knip/compiler scopes | | JSDoc | Advanced tag/type validation, parameter path matching, return/throw/yield consistency, layout beyond Prettier | -| Control flow | Consistent returns, atomic updates, early-return conventions | +| Control flow and assertions | Consistent returns, atomic updates, early-return conventions, redundant type assertions | | Node APIs | Deprecated or unsupported APIs, callback conventions, promise API preferences, executable/shebang checks | | Shopify conventions | Image imports, context menus, module-scope constants, Twine, singular enum names | | Style and directives | Camel case in JavaScript, line-comment placement, statement padding, class sorting, explicit strict-directive policy, directive conventions beyond unused suppressions | diff --git a/oxlint.json b/oxlint.json index 09cfb347390..847b420434c 100644 --- a/oxlint.json +++ b/oxlint.json @@ -5,6 +5,18 @@ { "name": "@shopify/cli", "specifier": "./packages/eslint-plugin-cli/oxlint.js" + }, + { + "name": "compat", + "specifier": "./packages/eslint-plugin-cli/oxlint-compat-names.js" + }, + { + "name": "no-catch-all", + "specifier": "./packages/eslint-plugin-cli/oxlint-no-catch-all.js" + }, + { + "name": "tsdoc", + "specifier": "./packages/eslint-plugin-cli/oxlint-tsdoc.js" } ], "categories": { @@ -494,7 +506,6 @@ "node/no-new-require": "error", "node/no-path-concat": "error", "node/no-exports-assign": "error", - "@shopify/cli/id-length": "off", "@shopify/cli/no-implicit-globals": [ "error", { @@ -506,7 +517,8 @@ { "builtinGlobals": true } - ] + ], + "compat/id-length": "off" }, "overrides": [ { @@ -705,12 +717,12 @@ "@shopify/cli/banner-headline-format": "error", "@shopify/cli/required-fields-when-loading-app": "error", "@shopify/cli/no-inline-graphql": "error", - "@shopify/cli/no-catch-all": "error", - "@shopify/cli/tsdoc-syntax": "error", "@shopify/cli/command-json-output": "error", "no-array-constructor": "off", "@shopify/cli/unused-imports": "error", - "@shopify/cli/no-redeclare": "off" + "@shopify/cli/no-redeclare": "off", + "no-catch-all/no-catch-all": "error", + "tsdoc/syntax": "error" }, "plugins": ["vitest", "jsdoc", "react"], "env": { @@ -878,7 +890,6 @@ "curly": ["error", "all"], "no-unexpected-multiline": "error", "no-object-constructor": "off", - "@shopify/cli/restricted-syntax": "off", "no-undef": [ "error", { @@ -903,7 +914,13 @@ "@shopify/cli/consistent-this": ["error", "self"], "@shopify/cli/one-var": ["error", "never"], "@shopify/cli/no-undef-init": "error", - "@shopify/cli/id-length": [ + "@shopify/cli/exports-style": ["error", "module.exports"], + "@shopify/cli/prefer-global-buffer": "error", + "@shopify/cli/prefer-global-process": "error", + "@shopify/cli/prefer-global-text-decoder": "error", + "@shopify/cli/prefer-global-text-encoder": "error", + "@shopify/cli/prefer-global-url-search-params": "error", + "compat/id-length": [ "error", { "exceptionPatterns": [], @@ -912,14 +929,9 @@ "properties": "always" } ], - "@shopify/cli/exports-style": ["error", "module.exports"], - "@shopify/cli/prefer-global-buffer": "error", - "@shopify/cli/prefer-global-console": "error", - "@shopify/cli/prefer-global-process": "error", - "@shopify/cli/prefer-global-text-decoder": "error", - "@shopify/cli/prefer-global-text-encoder": "error", - "@shopify/cli/prefer-global-url-search-params": "error", - "@shopify/cli/prefer-global-url": "error" + "compat/n-prefer-global-console": "error", + "compat/n-prefer-global-url": "error", + "compat/no-restricted-syntax": "off" } }, { @@ -945,8 +957,8 @@ "warnOnUnassignedImports": false } ], - "import/no-named-as-default": "error", - "import/no-named-as-default-member": "error", + "import/no-named-as-default": "off", + "import/no-named-as-default-member": "off", "no-new-native-nonconstructor": "error" } }, @@ -975,7 +987,16 @@ } ], "no-unused-vars": "off", - "@shopify/cli/naming-convention": [ + "typescript/no-unnecessary-type-assertion": "off", + "no-unused-expressions": "error", + "no-undef": "off", + "import/named": "off", + "import/export": "off", + "@shopify/cli/no-fully-static-classes": "off", + "no-new-native-nonconstructor": "off", + "@shopify/cli/prefer-pascal-case-enums": "error", + "@shopify/cli/prefer-build-client-schema": "error", + "compat/typescript-eslint-naming-convention": [ "error", { "selector": "default", @@ -1008,16 +1029,7 @@ "match": false } } - ], - "typescript/no-unnecessary-type-assertion": "off", - "no-unused-expressions": "error", - "no-undef": "off", - "import/named": "off", - "import/export": "off", - "@shopify/cli/no-fully-static-classes": "off", - "no-new-native-nonconstructor": "off", - "@shopify/cli/prefer-pascal-case-enums": "error", - "@shopify/cli/prefer-build-client-schema": "error" + ] } }, { @@ -1053,7 +1065,29 @@ "warnOnUnassignedImports": false } ], - "@shopify/cli/naming-convention": [ + "typescript/no-unnecessary-type-assertion": "off", + "no-unused-vars": [ + "error", + { + "args": "all", + "argsIgnorePattern": "^_", + "caughtErrors": "none", + "caughtErrorsIgnorePattern": "^_", + "destructuredArrayIgnorePattern": "^_", + "varsIgnorePattern": "^_", + "ignoreRestSiblings": true + } + ], + "no-unused-expressions": [ + "error", + { + "allowShortCircuit": false, + "allowTaggedTemplates": false, + "allowTernary": true + } + ], + "@shopify/cli/command-json-output": "error", + "compat/typescript-eslint-naming-convention": [ "error", { "selector": "default", @@ -1091,8 +1125,7 @@ "format": null } ], - "typescript/no-unnecessary-type-assertion": "error", - "@shopify/cli/restricted-syntax": [ + "compat/no-restricted-syntax": [ "error", { "selector": "Literal[value=/(cannot|will not|do not)/i]", @@ -1102,28 +1135,7 @@ "selector": "TemplateElement[value.raw=/(cannot|will not|do not)/i]", "message": "Be human - prefer don't to do not, won't to will not etc." } - ], - "no-unused-vars": [ - "error", - { - "args": "all", - "argsIgnorePattern": "^_", - "caughtErrors": "none", - "caughtErrorsIgnorePattern": "^_", - "destructuredArrayIgnorePattern": "^_", - "varsIgnorePattern": "^_", - "ignoreRestSiblings": true - } - ], - "no-unused-expressions": [ - "error", - { - "allowShortCircuit": false, - "allowTaggedTemplates": false, - "allowTernary": true - } - ], - "@shopify/cli/command-json-output": "error" + ] } }, { @@ -1136,27 +1148,27 @@ { "files": ["**/*.test.ts", "**/*.test.tsx", "**/*.test-data.ts", "**/testing/*.ts", "**/testing/*.tsx"], "rules": { - "@shopify/cli/restricted-syntax": "off", "no-unused-vars": "off", - "@shopify/cli/required-fields-when-loading-app": "off" + "@shopify/cli/required-fields-when-loading-app": "off", + "compat/no-restricted-syntax": "off" } }, { "files": ["**/bin/*.js"], "rules": { - "@shopify/cli/module-boundaries": "off" + "compat/nx-enforce-module-boundaries": "off" } }, { "files": ["**/*.ts", "**/*.tsx"], "rules": { - "@shopify/cli/module-boundaries": "error" + "compat/nx-enforce-module-boundaries": "error" } }, { "files": ["packages/theme/src/**/*.ts"], "rules": { - "@shopify/cli/module-boundaries": [ + "compat/nx-enforce-module-boundaries": [ "error", { "checkDynamicDependenciesExceptions": ["@shopify/cli-kit/**"] @@ -1241,13 +1253,13 @@ { "files": ["**/*.test.ts"], "rules": { - "@shopify/cli/restricted-syntax": "off" + "compat/no-restricted-syntax": "off" } }, { "files": ["src/private/node/ui/components/**/*.tsx"], "rules": { - "@shopify/cli/naming-convention": [ + "compat/typescript-eslint-naming-convention": [ "error", { "selector": "interface", @@ -1263,7 +1275,7 @@ { "files": ["packages/cli/src/**/*.ts"], "rules": { - "@shopify/cli/module-boundaries": "off" + "compat/nx-enforce-module-boundaries": "off" } }, { @@ -1275,7 +1287,6 @@ { "files": ["packages/eslint-plugin-cli/**/*.js"], "rules": { - "@shopify/cli/tsdoc-syntax": "off", "@shopify/cli/no-implicit-globals": [ "error", { @@ -1288,7 +1299,8 @@ "builtinGlobals": true } ], - "@shopify/cli/module-boundaries": "error" + "tsdoc/syntax": "off", + "compat/nx-enforce-module-boundaries": "error" } }, { @@ -1308,9 +1320,9 @@ "files": ["packages/eslint-plugin-cli/vite.config.ts"], "rules": { "typescript/no-unnecessary-type-assertion": "off", - "@shopify/cli/module-boundaries": "off", "@shopify/cli/no-implicit-globals": "off", - "@shopify/cli/no-redeclare": "off" + "@shopify/cli/no-redeclare": "off", + "compat/nx-enforce-module-boundaries": "off" } } ] diff --git a/packages/app/src/cli/commands/app/app-logs/sources.test.ts b/packages/app/src/cli/commands/app/app-logs/sources.test.ts index a9355df6258..751fd8ac182 100644 --- a/packages/app/src/cli/commands/app/app-logs/sources.test.ts +++ b/packages/app/src/cli/commands/app/app-logs/sources.test.ts @@ -25,14 +25,14 @@ function captureStandardStreams() { const stdout: string[] = [] const stderr: string[] = [] - const stdoutSpy = vi.spyOn(process.stdout, 'write').mockImplementation((chunk: string | Uint8Array) => { + const stdoutSpy = vi.spyOn(process.stdout, 'write').mockImplementation(((chunk: string | Uint8Array) => { stdout.push(typeof chunk === 'string' ? chunk : Buffer.from(chunk).toString('utf8')) return true - }) - const stderrSpy = vi.spyOn(process.stderr, 'write').mockImplementation((chunk: string | Uint8Array) => { + }) as typeof process.stdout.write) + const stderrSpy = vi.spyOn(process.stderr, 'write').mockImplementation(((chunk: string | Uint8Array) => { stderr.push(typeof chunk === 'string' ? chunk : Buffer.from(chunk).toString('utf8')) return true - }) + }) as typeof process.stderr.write) // Vitest intercepts console.warn; use Node's console to exercise the captured streams. const warnSpy = vi.spyOn(console, 'warn').mockImplementation(new Console(process.stdout, process.stderr).warn) diff --git a/packages/app/src/cli/commands/app/logs.ts b/packages/app/src/cli/commands/app/logs.ts index d9d78256b23..54539ec1275 100644 --- a/packages/app/src/cli/commands/app/logs.ts +++ b/packages/app/src/cli/commands/app/logs.ts @@ -69,7 +69,6 @@ export default class Logs extends AppLinkedCommand { storeFqdns: flags.store, sources: flags.source, status: flags.status, - // eslint-disable-next-line typescript/no-unnecessary-type-assertion -- Preserve the literal-union type when building the options object. format: (flags.json ? 'json' : 'text') as Format, } diff --git a/packages/app/src/cli/hooks/public_metadata.ts b/packages/app/src/cli/hooks/public_metadata.ts index f96cc6032fa..03b0a8bc7b2 100644 --- a/packages/app/src/cli/hooks/public_metadata.ts +++ b/packages/app/src/cli/hooks/public_metadata.ts @@ -16,7 +16,7 @@ async function logAppContextMetadata(directory: string): Promise { timer = setTimeout(resolve, APP_CONTEXT_METADATA_TIMEOUT_MS) }), ]) - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch { // Metadata is strictly best-effort: never surface errors or affect the command. } finally { diff --git a/packages/app/src/cli/models/app/app.test-data.ts b/packages/app/src/cli/models/app/app.test-data.ts index 79f77d47aa9..a2efc77064e 100644 --- a/packages/app/src/cli/models/app/app.test-data.ts +++ b/packages/app/src/cli/models/app/app.test-data.ts @@ -140,7 +140,7 @@ export function testAppWithConfig(options?: TestAppWithConfigOptions): AppLinked app.configuration = { ...DEFAULT_CONFIG, ...options?.config, - } + } as CurrentAppConfiguration return app } @@ -274,7 +274,7 @@ export async function testUIExtension( const specification = allSpecs.find((spec) => spec.identifier === configuration.type)! const extension = new ExtensionInstance({ - configuration, + configuration: configuration as BaseConfigType, configurationPath, entryPath, directory, diff --git a/packages/app/src/cli/models/app/loader.ts b/packages/app/src/cli/models/app/loader.ts index 776ae74c580..1940b0907f0 100644 --- a/packages/app/src/cli/models/app/loader.ts +++ b/packages/app/src/cli/models/app/loader.ts @@ -9,6 +9,7 @@ import { CurrentAppConfiguration, getAppVersionedSchema, AppSchema, + SchemaForConfig, AppLinkedInterface, } from './app.js' import {parseStructuredErrors} from './error-parsing.js' @@ -302,7 +303,7 @@ export async function loadAppFromContext const configurationPath = activeConfig.file.path const configurationFileName = basename(configurationPath) as AppConfigurationFileName @@ -320,7 +321,7 @@ export async function loadAppFromContext { function instanceFor(specification: ExtensionSpecification): ExtensionInstance { return new ExtensionInstance({ - configuration: {name: 'test extension', type: specification.identifier}, + configuration: {name: 'test extension', type: specification.identifier} as BaseConfigType, configurationPath: '', directory: '/tmp/test-extension', specification, diff --git a/packages/app/src/cli/models/extensions/extension-instance.ts b/packages/app/src/cli/models/extensions/extension-instance.ts index 11220e86dba..54a14f89095 100644 --- a/packages/app/src/cli/models/extensions/extension-instance.ts +++ b/packages/app/src/cli/models/extensions/extension-instance.ts @@ -518,7 +518,7 @@ export class ExtensionInstance, appModuleFeatures: spec.appModuleFeatures, experience: spec.experience, clientSteps: spec.clientSteps, diff --git a/packages/app/src/cli/models/extensions/specifications/app_config_privacy_compliance_webhooks.ts b/packages/app/src/cli/models/extensions/specifications/app_config_privacy_compliance_webhooks.ts index 2493eb6fc9a..83d12d30eeb 100644 --- a/packages/app/src/cli/models/extensions/specifications/app_config_privacy_compliance_webhooks.ts +++ b/packages/app/src/cli/models/extensions/specifications/app_config_privacy_compliance_webhooks.ts @@ -39,7 +39,7 @@ function transformToPrivacyComplianceWebhooksModule(content: object, appConfigur if (Object.keys(urls).length === 0) { return urls } else { - // eslint-disable-next-line @shopify/cli/naming-convention + // eslint-disable-next-line compat/typescript-eslint-naming-convention const {api_version} = webhooks return { api_version, diff --git a/packages/app/src/cli/models/extensions/specifications/function.test.ts b/packages/app/src/cli/models/extensions/specifications/function.test.ts index 45bb8ef3503..58a5528a5a7 100644 --- a/packages/app/src/cli/models/extensions/specifications/function.test.ts +++ b/packages/app/src/cli/models/extensions/specifications/function.test.ts @@ -357,7 +357,7 @@ describe('functionConfiguration', () => { // When const extension = await testFunctionExtension({ dir: '/function', - config: configWithTypegen, + config: configWithTypegen as FunctionConfigType, }) // Then @@ -380,7 +380,7 @@ describe('functionConfiguration', () => { // When const extension = await testFunctionExtension({ dir: '/function', - config: configWithoutBuild, + config: configWithoutBuild as FunctionConfigType, }) // Then diff --git a/packages/app/src/cli/models/extensions/specifications/payments_app_extension_schemas/card_present_payments_app_extension_schema.test.ts b/packages/app/src/cli/models/extensions/specifications/payments_app_extension_schemas/card_present_payments_app_extension_schema.test.ts index de7f4c208a0..90d7b9713b5 100644 --- a/packages/app/src/cli/models/extensions/specifications/payments_app_extension_schemas/card_present_payments_app_extension_schema.test.ts +++ b/packages/app/src/cli/models/extensions/specifications/payments_app_extension_schemas/card_present_payments_app_extension_schema.test.ts @@ -51,7 +51,7 @@ describe('CardPresentPaymentsAppExtensionSchema', () => { }) test('returns an error if payment_session_url is not provided', async () => { - // eslint-disable-next-line @shopify/cli/naming-convention + // eslint-disable-next-line compat/typescript-eslint-naming-convention const {payment_session_url, ...rest} = config expect(() => CardPresentPaymentsAppExtensionSchema.parse({ @@ -71,7 +71,7 @@ describe('CardPresentPaymentsAppExtensionSchema', () => { }) test('returns an error if refund_session_url is not provided', async () => { - // eslint-disable-next-line @shopify/cli/naming-convention + // eslint-disable-next-line compat/typescript-eslint-naming-convention const {refund_session_url, ...rest} = config expect(() => CardPresentPaymentsAppExtensionSchema.parse({ @@ -91,7 +91,7 @@ describe('CardPresentPaymentsAppExtensionSchema', () => { }) test('returns an error if capture_session_url is not provided', async () => { - // eslint-disable-next-line @shopify/cli/naming-convention + // eslint-disable-next-line compat/typescript-eslint-naming-convention const {capture_session_url, ...rest} = config expect(() => CardPresentPaymentsAppExtensionSchema.parse({ @@ -111,7 +111,7 @@ describe('CardPresentPaymentsAppExtensionSchema', () => { }) test('returns an error if void_session_url is not provided', async () => { - // eslint-disable-next-line @shopify/cli/naming-convention + // eslint-disable-next-line compat/typescript-eslint-naming-convention const {void_session_url, ...rest} = config expect(() => CardPresentPaymentsAppExtensionSchema.parse({ @@ -131,7 +131,7 @@ describe('CardPresentPaymentsAppExtensionSchema', () => { }) test('validates with optional sync_terminal_transaction_result_url', async () => { - // eslint-disable-next-line @shopify/cli/naming-convention + // eslint-disable-next-line compat/typescript-eslint-naming-convention const {sync_terminal_transaction_result_url, ...rest} = config const {success} = CardPresentPaymentsAppExtensionSchema.safeParse({ ...rest, diff --git a/packages/app/src/cli/models/extensions/specifications/payments_app_extension_schemas/credit_card_payments_app_extension_schema.test.ts b/packages/app/src/cli/models/extensions/specifications/payments_app_extension_schemas/credit_card_payments_app_extension_schema.test.ts index 5d589027c07..156112c60bb 100644 --- a/packages/app/src/cli/models/extensions/specifications/payments_app_extension_schemas/credit_card_payments_app_extension_schema.test.ts +++ b/packages/app/src/cli/models/extensions/specifications/payments_app_extension_schemas/credit_card_payments_app_extension_schema.test.ts @@ -91,7 +91,7 @@ describe('CreditCardPaymentsAppExtensionSchema', () => { test('returns an error if encryption certificate fingerprint is not present', async () => { // When/Then - // eslint-disable-next-line @shopify/cli/naming-convention + // eslint-disable-next-line compat/typescript-eslint-naming-convention const {encryption_certificate_fingerprint, ...rest} = config expect(() => CreditCardPaymentsAppExtensionSchema.parse({ diff --git a/packages/app/src/cli/models/extensions/specifications/payments_app_extension_schemas/custom_credit_card_payments_app_extension_schema.test.ts b/packages/app/src/cli/models/extensions/specifications/payments_app_extension_schemas/custom_credit_card_payments_app_extension_schema.test.ts index 620d0aaf3a5..86f9c143e0c 100644 --- a/packages/app/src/cli/models/extensions/specifications/payments_app_extension_schemas/custom_credit_card_payments_app_extension_schema.test.ts +++ b/packages/app/src/cli/models/extensions/specifications/payments_app_extension_schemas/custom_credit_card_payments_app_extension_schema.test.ts @@ -92,7 +92,7 @@ describe('CustomCreditCardPaymentsAppExtensionSchema', () => { test('returns an error if encryption certificate fingerprint is not present', async () => { // When/Then - // eslint-disable-next-line @shopify/cli/naming-convention + // eslint-disable-next-line compat/typescript-eslint-naming-convention const {encryption_certificate_fingerprint, ...rest} = config expect(() => CustomCreditCardPaymentsAppExtensionSchema.parse({ diff --git a/packages/app/src/cli/models/extensions/specifications/transform/app_config_webhook.ts b/packages/app/src/cli/models/extensions/specifications/transform/app_config_webhook.ts index 5afd209c233..9201d9d9b42 100644 --- a/packages/app/src/cli/models/extensions/specifications/transform/app_config_webhook.ts +++ b/packages/app/src/cli/models/extensions/specifications/transform/app_config_webhook.ts @@ -5,7 +5,7 @@ export function transformFromWebhookConfig(content: object) { const webhooks = getPathValue(content, 'webhooks') as WebhooksConfig if (!webhooks) return content - // eslint-disable-next-line @shopify/cli/naming-convention + // eslint-disable-next-line compat/typescript-eslint-naming-convention const {api_version} = webhooks return {api_version} @@ -33,14 +33,14 @@ export function mergeAllWebhooks(subscriptions: WebhookSubscription[]): WebhookS if (subscriptions.length === 0) return const topicSubscriptions = subscriptions .filter((subscription) => subscription.topics !== undefined) - // eslint-disable-next-line @shopify/cli/naming-convention + // eslint-disable-next-line compat/typescript-eslint-naming-convention .flatMap(({compliance_topics, topics, ...rest}) => { const sortedTopics = sortArrayAlphabetically(topics) return sortedTopics?.map((topic) => ({topics: [topic], ...rest})) ?? [] }) const complianceSubscriptions = subscriptions .filter((subscription) => subscription.topics === undefined || subscription.compliance_topics !== undefined) - // eslint-disable-next-line @shopify/cli/naming-convention + // eslint-disable-next-line compat/typescript-eslint-naming-convention .map(({compliance_topics, topics, ...rest}) => { return {compliance_topics, ...rest} }) @@ -81,7 +81,6 @@ export function reduceWebhooks( const existingSubscription = findSubscription(accumulator, subscription) if (existingSubscription) { if (property && subscription?.[property]?.length) { - // eslint-disable-next-line typescript/no-unnecessary-type-assertion existingSubscription[property]?.push(...subscription[property]!) } else { if (subscription.topics) { diff --git a/packages/app/src/cli/models/extensions/specifications/type-generation.ts b/packages/app/src/cli/models/extensions/specifications/type-generation.ts index f57f2beec56..367a962e26d 100644 --- a/packages/app/src/cli/models/extensions/specifications/type-generation.ts +++ b/packages/app/src/cli/models/extensions/specifications/type-generation.ts @@ -336,7 +336,7 @@ async function targetExportsShopifyGlobal(targetDtsPath: string): Promise { try { files.push(await TomlFile.read(filePath)) - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch (err) { const tomlError = err instanceof TomlFileError ? err : new TomlFileError(filePath, `Failed to read ${filePath}`) const file = new TomlFile(filePath, {}) @@ -245,7 +245,7 @@ async function discoverDotEnvFiles(directory: string): Promise { const raw = await readFile(hiddenPath) return JSON.parse(raw) as JsonMapType } - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch { // Parse errors are not fatal } diff --git a/packages/app/src/cli/prompts/generate/extension.ts b/packages/app/src/cli/prompts/generate/extension.ts index 9da41bc8478..8590b6a5d38 100644 --- a/packages/app/src/cli/prompts/generate/extension.ts +++ b/packages/app/src/cli/prompts/generate/extension.ts @@ -30,7 +30,7 @@ export interface GenerateExtensionContentOutput { } export function buildChoices(extensionTemplates: ExtensionTemplate[], unavailableExtensions: ExtensionTemplate[] = []) { - type ArrElement = TArrType extends ReadonlyArray ? TElementType : never + type ArrElement = TArrType extends ReadonlyArray ? ElementType : never const templateSpecChoices = [ ...extensionTemplates.map((spec) => { diff --git a/packages/app/src/cli/services/admin-link/extension-config-builder.ts b/packages/app/src/cli/services/admin-link/extension-config-builder.ts index 26375ee53c4..a77295ca087 100644 --- a/packages/app/src/cli/services/admin-link/extension-config-builder.ts +++ b/packages/app/src/cli/services/admin-link/extension-config-builder.ts @@ -33,7 +33,7 @@ export function buildExtensionConfig( fullUrl.search = linkUrl.search fullUrl.hash = linkUrl.hash config.url = fullUrl.toString() - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch (error) { // Keep original URL if parsing fails } diff --git a/packages/app/src/cli/services/app-logs/dev/poll-app-logs.ts b/packages/app/src/cli/services/app-logs/dev/poll-app-logs.ts index c667f21145e..8f9730afc6e 100644 --- a/packages/app/src/cli/services/app-logs/dev/poll-app-logs.ts +++ b/packages/app/src/cli/services/app-logs/dev/poll-app-logs.ts @@ -143,7 +143,7 @@ export const pollAppLogs = async ({ outputDebug(`Unexpected error during polling: ${error}}\n`) }) }, retryIntervalMs) - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch (error) { outputWarn(`Error while polling app logs.`, stdout) outputWarn(`Retrying in ${POLLING_ERROR_RETRY_INTERVAL_MS / 1000} seconds.`, stdout) diff --git a/packages/app/src/cli/services/app-logs/logs-command/ui/components/hooks/useSelfAdjustingInterval.test.tsx b/packages/app/src/cli/services/app-logs/logs-command/ui/components/hooks/useSelfAdjustingInterval.test.tsx index a4fd3ccb7f6..1beaa1d2b29 100644 --- a/packages/app/src/cli/services/app-logs/logs-command/ui/components/hooks/useSelfAdjustingInterval.test.tsx +++ b/packages/app/src/cli/services/app-logs/logs-command/ui/components/hooks/useSelfAdjustingInterval.test.tsx @@ -16,7 +16,7 @@ function renderHook(renderHookCallback: () => THookResult) { try { const hookResult = renderHookCallback() result.lastResult = hookResult - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch (errorFromHook) { result.lastError = errorFromHook } diff --git a/packages/app/src/cli/services/app-logs/utils.ts b/packages/app/src/cli/services/app-logs/utils.ts index 653596326be..558995447e5 100644 --- a/packages/app/src/cli/services/app-logs/utils.ts +++ b/packages/app/src/cli/services/app-logs/utils.ts @@ -126,7 +126,7 @@ export const handleFetchAppLogsError = async ( try { nextJwtToken = await input.onResubscribe() resubscribeResult = 'succeeded' - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch (resubscribeError) { outputDebug(`Failed to resubscribe to app logs: ${resubscribeError}`) retryIntervalMs = POLLING_THROTTLE_RETRY_INTERVAL_MS @@ -260,7 +260,7 @@ export function prettyPrintJsonIfPossible(json: unknown): string | undefined { const parseJson = (json: string): object | string => { try { return JSON.parse(json) - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch (error) { return json } diff --git a/packages/app/src/cli/services/app-security-engine/checks/embedded.ts b/packages/app/src/cli/services/app-security-engine/checks/embedded.ts index bd8541aed7a..d7c5aaa9de2 100644 --- a/packages/app/src/cli/services/app-security-engine/checks/embedded.ts +++ b/packages/app/src/cli/services/app-security-engine/checks/embedded.ts @@ -1,6 +1,6 @@ // AUTO-GENERATED by app-security-engine/embed-checks.mjs — do not edit. // Sources of truth: adjacent checks/*.md files and ../INSTRUCTIONS.md. -/* eslint-disable @shopify/cli/restricted-syntax, no-template-curly-in-string */ +/* eslint-disable compat/no-restricted-syntax, no-template-curly-in-string */ // prettier-ignore export const EMBEDDED_CHECK_SOURCES: ReadonlyArray = [ diff --git a/packages/app/src/cli/services/app-security-engine/embed-checks.mjs b/packages/app/src/cli/services/app-security-engine/embed-checks.mjs index 2f0e8850086..514b41ad79d 100644 --- a/packages/app/src/cli/services/app-security-engine/embed-checks.mjs +++ b/packages/app/src/cli/services/app-security-engine/embed-checks.mjs @@ -21,7 +21,7 @@ const instructions = readFileSync(instructionsPath, 'utf8') const output = `// AUTO-GENERATED by app-security-engine/embed-checks.mjs — do not edit. // Sources of truth: adjacent checks/*.md files and ../INSTRUCTIONS.md. -/* eslint-disable @shopify/cli/restricted-syntax, no-template-curly-in-string */ +/* eslint-disable compat/no-restricted-syntax, no-template-curly-in-string */ // prettier-ignore export const EMBEDDED_CHECK_SOURCES: ReadonlyArray = ${JSON.stringify(sources, null, 2)}; diff --git a/packages/app/src/cli/services/app-security-engine/rules/config-rules.ts b/packages/app/src/cli/services/app-security-engine/rules/config-rules.ts index fc69aeecad4..297ff432c61 100644 --- a/packages/app/src/cli/services/app-security-engine/rules/config-rules.ts +++ b/packages/app/src/cli/services/app-security-engine/rules/config-rules.ts @@ -87,7 +87,7 @@ function isSafeConfiguredUrl(value: string, webhook: boolean): boolean { if (url.username || url.password || url.hash) return false return url.pathname.startsWith('/') && !url.pathname.includes('*') // URL construction is intentionally validation: malformed input is unsafe. - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch { return false } diff --git a/packages/app/src/cli/services/app-security-engine/rules/liquid-rules.ts b/packages/app/src/cli/services/app-security-engine/rules/liquid-rules.ts index 024bdf5812e..1c9f1e4eb2c 100644 --- a/packages/app/src/cli/services/app-security-engine/rules/liquid-rules.ts +++ b/packages/app/src/cli/services/app-security-engine/rules/liquid-rules.ts @@ -21,7 +21,7 @@ export function scanLiquidSecurity(files: SourceFile[]): LiquidScanResult { try { ast = toLiquidHTMLAST(file.content) // Parser failures are coverage gaps and are handed to the agent tier. - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch { parserFailures.push(file.path) continue diff --git a/packages/app/src/cli/services/app-security-engine/scanners/discover.ts b/packages/app/src/cli/services/app-security-engine/scanners/discover.ts index 2c83af02bee..1aea42861aa 100644 --- a/packages/app/src/cli/services/app-security-engine/scanners/discover.ts +++ b/packages/app/src/cli/services/app-security-engine/scanners/discover.ts @@ -54,7 +54,7 @@ export function loadAppToml(appConfigFilePath: string, appDirectory: string): Ap const raw = decodeToml(content) as Record return parseAppToml(raw, appConfigFilePath, content, appDirectory) // Invalid repository TOML is a coverage gap, not a scanner crash. - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch { recordSkippedFile(appConfigFilePath, { ok: false, @@ -189,7 +189,7 @@ function readDirectoryEntries(absolutePath: string, isScanDirectory: boolean): D try { return readdirSync(absolutePath, {withFileTypes: true}) // An unreadable directory is a coverage gap, not a scanner crash. - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch (error) { recordSkippedFile(absolutePath, { ok: false, @@ -410,7 +410,7 @@ export function findExtensions(appRoot: string, repositoryFiles: ReadonlyArray MAX_REPOSITORY_FILE_SIZE_BYTES) return {ok: false, reason: 'too_large', sizeBytes: size} return {ok: true, content: readFileSync(path)} // Discovery records unreadable files as scan coverage gaps. - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch (error) { return { ok: false, @@ -537,7 +537,7 @@ function inspectRepositoryPath(scanDirectory: string, path: string): InspectedPa let canonicalRoot: string try { canonicalRoot = realpathSync(absoluteRoot) - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch (error) { return {status: 'unresolved', reason: inspectErrorReason('scan directory', error)} } @@ -557,7 +557,7 @@ function inspectRepositoryPath(scanDirectory: string, path: string): InspectedPa return {status: 'unresolved', reason: `${display} is not a file`} } return {status: 'file', path: canonicalPath} - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch (error) { if (isMissingFilesystemEntry(error)) { return inspectMissingRepositoryPath(canonicalRoot, segments, display) @@ -587,7 +587,7 @@ function inspectMissingRepositoryPath(canonicalRoot: string, segments: string[], currentPath = canonicalPath // Discovery must distinguish a missing optional allowlist entry from an // entry that exists but cannot be inspected safely. - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch (error) { if (isMissingFilesystemEntry(error)) { // lstat succeeds for a dangling link, so ENOENT from realpath is an @@ -596,7 +596,7 @@ function inspectMissingRepositoryPath(canonicalRoot: string, segments: string[], if (lstatSync(currentPath).isSymbolicLink()) { return {status: 'unresolved', reason: `${display} contains a dangling symbolic link`} } - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch { return {status: 'missing'} } @@ -835,7 +835,7 @@ export function findDependencyAutomationInputs( if (!lstatSync(canonicalRoot).isDirectory()) { return {files: [], unresolvedReason: 'App root is not a directory'} } - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch (error) { return {files: [], unresolvedReason: inspectErrorReason('app root', error)} } @@ -907,7 +907,7 @@ export function findManifests(appRoot: string, discoveredPaths: ReadonlyArray { const {configSpecifications: specs} = await buildVersionedAppSchema() // First write - await writeAppConfigurationFile(REALISTIC_CONFIG, filePath) + await writeAppConfigurationFile(REALISTIC_CONFIG as CurrentAppConfiguration, filePath) // Read back through the full parse pipeline (which fires Zod transforms) const parsedConfig = await parseConfigAsCurrentApp(getAppVersionedSchema(specs), filePath) @@ -114,7 +114,7 @@ describe('Config pipeline snapshots', () => { const {configSpecifications: specs} = await buildVersionedAppSchema() // First write + read + second write (reordering happens here) - await writeAppConfigurationFile(REALISTIC_CONFIG, filePath) + await writeAppConfigurationFile(REALISTIC_CONFIG as CurrentAppConfiguration, filePath) const parsed1 = await parseConfigAsCurrentApp(getAppVersionedSchema(specs), filePath) await writeAppConfigurationFile(parsed1, filePath) const secondWrite = await readFile(filePath) @@ -160,7 +160,7 @@ describe('Config pipeline snapshots', () => { } // Snapshot the first write - await writeAppConfigurationFile(config, filePath) + await writeAppConfigurationFile(config as CurrentAppConfiguration, filePath) const firstWrite = await readFile(filePath) expect(firstWrite).toMatchSnapshot() @@ -194,7 +194,7 @@ describe('Config pipeline snapshots', () => { } // Write, read, write (first round-trip may reorder) - await writeAppConfigurationFile(config, filePath) + await writeAppConfigurationFile(config as CurrentAppConfiguration, filePath) const parsed1 = await parseConfigAsCurrentApp(getAppVersionedSchema(specs), filePath) await writeAppConfigurationFile(parsed1, filePath) const secondWrite = await readFile(filePath) @@ -250,7 +250,7 @@ describe('Config pipeline snapshots', () => { }, } - await writeAppConfigurationFile(config, filePath) + await writeAppConfigurationFile(config as CurrentAppConfiguration, filePath) const firstWrite = await readFile(filePath) expect(firstWrite).toMatchSnapshot() @@ -286,7 +286,7 @@ describe('Config pipeline snapshots', () => { }, } - await writeAppConfigurationFile(config, filePath) + await writeAppConfigurationFile(config as CurrentAppConfiguration, filePath) const firstWrite = await readFile(filePath) expect(firstWrite).toMatchSnapshot() @@ -322,7 +322,7 @@ describe('Config pipeline snapshots', () => { }, } - await writeAppConfigurationFile(config, filePath) + await writeAppConfigurationFile(config as CurrentAppConfiguration, filePath) const firstWrite = await readFile(filePath) const parsedConfig = await parseConfigAsCurrentApp(getAppVersionedSchema(specs), filePath) diff --git a/packages/app/src/cli/services/app/config/link.ts b/packages/app/src/cli/services/app/config/link.ts index 934a945c6c0..31083764e01 100644 --- a/packages/app/src/cli/services/app/config/link.ts +++ b/packages/app/src/cli/services/app/config/link.ts @@ -179,7 +179,7 @@ async function getAppCreationDefaultsFromLocalApp(options: LinkOptions): Promise return {creationOptions: app.creationDefaultOptions(), appDirectory: app.directory} - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch (error) { return {creationOptions: appCreationDefaults(options.directory)} } diff --git a/packages/app/src/cli/services/app/patch-app-configuration-file.ts b/packages/app/src/cli/services/app/patch-app-configuration-file.ts index 12f5e3e1d27..cfce44be796 100644 --- a/packages/app/src/cli/services/app/patch-app-configuration-file.ts +++ b/packages/app/src/cli/services/app/patch-app-configuration-file.ts @@ -11,7 +11,7 @@ export async function patchAppHiddenConfigFile(path: string, clientId: string, c try { const jsonContents = await readFile(path) configuration = JSON.parse(jsonContents) - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch { // Do nothing if the file doesn't exist or can't be loaded } diff --git a/packages/app/src/cli/services/app/write-app-configuration-file.test.ts b/packages/app/src/cli/services/app/write-app-configuration-file.test.ts index 53ddeaba36f..6835542f673 100644 --- a/packages/app/src/cli/services/app/write-app-configuration-file.test.ts +++ b/packages/app/src/cli/services/app/write-app-configuration-file.test.ts @@ -113,7 +113,7 @@ url = "https://example.com/prefs" api_version: '2023-04', privacy_compliance: {}, }, - }, + } as CurrentAppConfiguration, filePath, ) @@ -136,7 +136,7 @@ url = "https://example.com/prefs" { ...FULL_CONFIGURATION, auth: {redirect_urls: []}, - }, + } as CurrentAppConfiguration, filePath, ) diff --git a/packages/app/src/cli/services/build/bundle-size.ts b/packages/app/src/cli/services/build/bundle-size.ts index f7fa1e63e42..f2212d295d0 100644 --- a/packages/app/src/cli/services/build/bundle-size.ts +++ b/packages/app/src/cli/services/build/bundle-size.ts @@ -40,7 +40,7 @@ export async function formatBundleSize(filePath: string) { try { const {rawBytes, compressedBytes} = await getBundleSize(filePath) return ` (${formatSize(rawBytes)} original, ~${formatSize(compressedBytes)} compressed)` - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch (error) { outputDebug(`Failed to get bundle size for ${filePath}: ${error}`) return '' diff --git a/packages/app/src/cli/services/build/steps/bundle-ui-step.test.ts b/packages/app/src/cli/services/build/steps/bundle-ui-step.test.ts index f0ac74dc17a..866ca7ef057 100644 --- a/packages/app/src/cli/services/build/steps/bundle-ui-step.test.ts +++ b/packages/app/src/cli/services/build/steps/bundle-ui-step.test.ts @@ -101,7 +101,7 @@ describe('executeBundleUIStep', () => { extension_points: [ {target: 'admin.product-details.action.render', build_manifest: {assets: {main: {filepath: 'main.js'}}}}, ], - } + } as ExtensionInstance['configuration'] vi.mocked(buildExtension.buildUIExtension).mockResolvedValue(joinPath(localOutputDir, 'handle.js')) // When diff --git a/packages/app/src/cli/services/build/steps/include-assets/generate-manifest.ts b/packages/app/src/cli/services/build/steps/include-assets/generate-manifest.ts index 9f2cd098ebd..02a67666541 100644 --- a/packages/app/src/cli/services/build/steps/include-assets/generate-manifest.ts +++ b/packages/app/src/cli/services/build/steps/include-assets/generate-manifest.ts @@ -143,7 +143,7 @@ export async function createOrUpdateManifestFile( try { const content = await readFile(manifestPath) existing = JSON.parse(content) - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch { outputDebug(`Warning: could not parse existing manifest.json, starting fresh\n`, context.options.stdout) } diff --git a/packages/app/src/cli/services/bulk-operations/execute-bulk-operation.test.ts b/packages/app/src/cli/services/bulk-operations/execute-bulk-operation.test.ts index a72595c69ec..af659dc5ba0 100644 --- a/packages/app/src/cli/services/bulk-operations/execute-bulk-operation.test.ts +++ b/packages/app/src/cli/services/bulk-operations/execute-bulk-operation.test.ts @@ -282,7 +282,7 @@ describe('executeBulkOperation', () => { bulkOperation: createdBulkOperation, userErrors: [], } - vi.mocked(runBulkOperationMutation).mockResolvedValue(mockResponse) + vi.mocked(runBulkOperationMutation).mockResolvedValue(mockResponse as any) await executeAndPresentBulkOperation({ organization: mockOrganization, diff --git a/packages/app/src/cli/services/context/deploy-identifier-matching.test.ts b/packages/app/src/cli/services/context/deploy-identifier-matching.test.ts index 164848de7e7..ee94f39ba51 100644 --- a/packages/app/src/cli/services/context/deploy-identifier-matching.test.ts +++ b/packages/app/src/cli/services/context/deploy-identifier-matching.test.ts @@ -89,7 +89,7 @@ function remoteWebhookModule( experience: 'configuration', options: {managementExperience: 'cli'}, }, - } + } as AppModuleVersion } // The option bag both entry points accept; each test overrides only what it exercises. diff --git a/packages/app/src/cli/services/deploy.test.ts b/packages/app/src/cli/services/deploy.test.ts index bb3f1e44742..95159ee3646 100644 --- a/packages/app/src/cli/services/deploy.test.ts +++ b/packages/app/src/cli/services/deploy.test.ts @@ -806,7 +806,7 @@ describe('ImportExtensionsIfNeeded', () => { vi.mocked(isTTY).mockReturnValue(true) vi.mocked(getExtensions).mockResolvedValue(mockExtensions as any) vi.mocked(renderConfirmationPrompt).mockResolvedValue(true) - vi.mocked(reloadApp).mockResolvedValue(reloadedApp) + vi.mocked(reloadApp).mockResolvedValue(reloadedApp as any) // When const result = await importExtensionsIfNeeded({ diff --git a/packages/app/src/cli/services/deploy/upload.test.ts b/packages/app/src/cli/services/deploy/upload.test.ts index 3e007fc2c1f..a9c39585ccf 100644 --- a/packages/app/src/cli/services/deploy/upload.test.ts +++ b/packages/app/src/cli/services/deploy/upload.test.ts @@ -254,7 +254,7 @@ describe('uploadExtensionsBundle', () => { release: true, }) - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch (error: any) { expect(error.message).toEqual("Version couldn't be created.") expect(error.customSections).toEqual([ @@ -703,7 +703,7 @@ describe('deploymentErrorsToCustomSections', () => { // When const customSections = deploymentErrorsToCustomSections( - errors, + errors as AppDeploySchema['appDeploy']['userErrors'], { 'webhook-subscription-1': '1', 'webhook-subscription-2': '2', diff --git a/packages/app/src/cli/services/deploy/upload.ts b/packages/app/src/cli/services/deploy/upload.ts index 2ab26aa2ddd..1107751eb48 100644 --- a/packages/app/src/cli/services/deploy/upload.ts +++ b/packages/app/src/cli/services/deploy/upload.ts @@ -290,7 +290,7 @@ function cliErrorsSections( } sections.forEach((section) => { - // eslint-disable-next-line @shopify/cli/id-length + // eslint-disable-next-line compat/id-length ;(section.body as ListToken[]).sort((a, b) => { if (a.list.title === VALIDATION_ERRORS_TITLE) { return 1 diff --git a/packages/app/src/cli/services/dev.test.ts b/packages/app/src/cli/services/dev.test.ts index 82b3a1ecfc6..119576f884d 100644 --- a/packages/app/src/cli/services/dev.test.ts +++ b/packages/app/src/cli/services/dev.test.ts @@ -105,7 +105,7 @@ describe('blockIfMigrationIncomplete', () => { configurationRegistrations: [], dashboardManagedExtensionRegistrations: [], }, - } + } as any }, }) @@ -129,7 +129,7 @@ describe('blockIfMigrationIncomplete', () => { configurationRegistrations: [], dashboardManagedExtensionRegistrations: [], }, - } + } as any }, }) diff --git a/packages/app/src/cli/services/dev/app-events/app-event-watcher.ts b/packages/app/src/cli/services/dev/app-events/app-event-watcher.ts index 0ddd7f8b1ac..39d2fc2673f 100644 --- a/packages/app/src/cli/services/dev/app-events/app-event-watcher.ts +++ b/packages/app/src/cli/services/dev/app-events/app-event-watcher.ts @@ -1,4 +1,4 @@ -/* eslint-disable @shopify/cli/tsdoc-syntax */ +/* eslint-disable tsdoc/syntax */ import {FileWatcher, OutputContextOptions} from './file-watcher.js' import {handleWatcherEvents} from './app-event-watcher-handler.js' import {AppLinkedInterface} from '../../../models/app/app.js' @@ -239,7 +239,7 @@ export class AppEventWatcher extends EventEmitter { events.forEach((event) => { event.buildResult = buildResult }) - // eslint-disable-next-line @shopify/cli/no-catch-all, @typescript-eslint/no-explicit-any + // eslint-disable-next-line no-catch-all/no-catch-all, @typescript-eslint/no-explicit-any } catch (error: any) { // If there is an `errors` array, it's an esbuild error, format it and log it // If not, just print the error message to stderr. diff --git a/packages/app/src/cli/services/dev/app-events/file-watcher.test.ts b/packages/app/src/cli/services/dev/app-events/file-watcher.test.ts index 48e294a878a..5fad96b49d0 100644 --- a/packages/app/src/cli/services/dev/app-events/file-watcher.test.ts +++ b/packages/app/src/cli/services/dev/app-events/file-watcher.test.ts @@ -278,7 +278,7 @@ describe('file-watcher events', () => { configuration: { ...DEFAULT_CONFIG, extension_directories: ['extensions'], - }, + } as any, }) let eventHandler: any @@ -374,7 +374,7 @@ describe('file-watcher events', () => { configuration: { ...DEFAULT_CONFIG, extension_directories: ['extensions'], - }, + } as any, }) const onChange = vi.fn() @@ -736,7 +736,7 @@ describe('file-watcher events', () => { configuration: { ...DEFAULT_CONFIG, extension_directories: ['extensions'], - }, + } as any, }) let eventHandler: any @@ -785,7 +785,7 @@ describe('file-watcher events', () => { configuration: { ...DEFAULT_CONFIG, extension_directories: ['extensions'], - }, + } as any, }) let eventHandler: any @@ -827,7 +827,7 @@ describe('file-watcher events', () => { configuration: { ...DEFAULT_CONFIG, extension_directories: ['extensions'], - }, + } as any, }) let eventHandler: any diff --git a/packages/app/src/cli/services/dev/app-events/file-watcher.ts b/packages/app/src/cli/services/dev/app-events/file-watcher.ts index a89d195d2bf..cbc86472baa 100644 --- a/packages/app/src/cli/services/dev/app-events/file-watcher.ts +++ b/packages/app/src/cli/services/dev/app-events/file-watcher.ts @@ -101,7 +101,7 @@ export class FileWatcher { fullExtensionDirectories.map(async (dir) => { try { await mkdir(dir.replace(/\/\*+$/, '')) - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch { // Non-fatal: directory may be unwritable (e.g. test fixtures) } diff --git a/packages/app/src/cli/services/dev/cap.ts b/packages/app/src/cli/services/dev/cap.ts index 4fc7529414f..8bc93833e20 100644 --- a/packages/app/src/cli/services/dev/cap.ts +++ b/packages/app/src/cli/services/dev/cap.ts @@ -10,7 +10,7 @@ export async function devStoreCapReached( try { return await developerPlatformClient.devStoreCapReached(organizationId) - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch { return false } diff --git a/packages/app/src/cli/services/dev/extension.test.ts b/packages/app/src/cli/services/dev/extension.test.ts index 082a84e3d6d..56ed3a8d7be 100644 --- a/packages/app/src/cli/services/dev/extension.test.ts +++ b/packages/app/src/cli/services/dev/extension.test.ts @@ -3,7 +3,7 @@ import * as server from './extension/server.js' import * as websocket from './extension/websocket.js' import {devUIExtensions, ExtensionDevOptions} from './extension.js' import {ExtensionsEndpointPayload} from './extension/payload/models.js' - +import {WebsocketConnection} from './extension/websocket/models.js' import {AppEventWatcher} from './app-events/app-event-watcher.js' import {testAppLinked} from '../../models/app/app.test-data.js' import {describe, test, vi, expect} from 'vitest' @@ -37,14 +37,14 @@ describe('devUIExtensions()', () => { return { mock: 'payload-store', } as unknown as store.ExtensionsPayloadStore - }) + } as any) vi.spyOn(server, 'setupHTTPServer').mockReturnValue({ mock: 'http-server', close: serverCloseSpy, } as unknown as Server) vi.spyOn(websocket, 'setupWebsocketConnection').mockReturnValue({ close: websocketCloseSpy, - }) + } as unknown as WebsocketConnection) } test('initializes the payload store', async () => { diff --git a/packages/app/src/cli/services/dev/extension/localization.ts b/packages/app/src/cli/services/dev/extension/localization.ts index 695d14c8f8f..7efd2382459 100644 --- a/packages/app/src/cli/services/dev/extension/localization.ts +++ b/packages/app/src/cli/services/dev/extension/localization.ts @@ -31,11 +31,13 @@ export async function getLocalization( return {localization: undefined, status: ''} } - const localization = options.currentLocalizationPayload ?? { - defaultLocale: 'en', - translations: {}, - lastUpdated: 0, - } + const localization = + options.currentLocalizationPayload ?? + ({ + defaultLocale: 'en', + translations: {}, + lastUpdated: 0, + } as Localization) let status: ExtensionAssetBuildStatus = 'success' @@ -55,7 +57,7 @@ export async function getLocalization( ) localization.lastUpdated = Date.now() outputDebug(`Parsed locales for extension ${extension.handle} at ${extension.directory}`, options.stdout) - // eslint-disable-next-line @typescript-eslint/no-explicit-any, @shopify/cli/no-catch-all + // eslint-disable-next-line @typescript-eslint/no-explicit-any, no-catch-all/no-catch-all } catch (error: any) { status = 'error' } diff --git a/packages/app/src/cli/services/dev/extension/server/middlewares.test.ts b/packages/app/src/cli/services/dev/extension/server/middlewares.test.ts index acf41b415a4..4ba528f2eda 100644 --- a/packages/app/src/cli/services/dev/extension/server/middlewares.test.ts +++ b/packages/app/src/cli/services/dev/extension/server/middlewares.test.ts @@ -455,7 +455,7 @@ describe('getExtensionAssetMiddleware()', () => { handle: 'test-ext', metafields: [], extension_points: [{target: 'target1', tools: '../tools.json'}], - }, + } as any, }) const outputDir = joinPath(extDir, 'dist') await mkdir(outputDir) diff --git a/packages/app/src/cli/services/dev/extension/websocket.test.ts b/packages/app/src/cli/services/dev/extension/websocket.test.ts index 18e0c62154c..9ebec316e47 100644 --- a/packages/app/src/cli/services/dev/extension/websocket.test.ts +++ b/packages/app/src/cli/services/dev/extension/websocket.test.ts @@ -24,7 +24,7 @@ describe('setupWebsocketConnection', () => { vi.useFakeTimers() vi.mocked(WebSocketServer).mockImplementation(function () { return websocketServer - }) + } as any) }) afterEach(() => { diff --git a/packages/app/src/cli/services/dev/extension/websocket/handlers.test.ts b/packages/app/src/cli/services/dev/extension/websocket/handlers.test.ts index a1c33a0fb15..7be464d1461 100644 --- a/packages/app/src/cli/services/dev/extension/websocket/handlers.test.ts +++ b/packages/app/src/cli/services/dev/extension/websocket/handlers.test.ts @@ -10,7 +10,7 @@ import {SetupWebSocketConnectionOptions} from './models.js' import {ExtensionsEndpointPayload} from '../payload/models.js' import {vi, describe, test, expect, Mock} from 'vitest' import {useConcurrentOutputContext} from '@shopify/cli-kit/node/ui/components' -import {WebSocket, RawData, WebSocketServer} from 'ws' +import WebSocket, {RawData, WebSocketServer} from 'ws' import colors from '@shopify/cli-kit/node/colors' import {outputContent, outputToken} from '@shopify/cli-kit/node/output' import {IncomingMessage} from 'http' diff --git a/packages/app/src/cli/services/dev/processes/app-logs-polling.ts b/packages/app/src/cli/services/dev/processes/app-logs-polling.ts index 381df51a4bb..7405aed9cb2 100644 --- a/packages/app/src/cli/services/dev/processes/app-logs-polling.ts +++ b/packages/app/src/cli/services/dev/processes/app-logs-polling.ts @@ -107,7 +107,7 @@ export const subscribeAndStartPolling: DevProcessFunction { { message: 'test error', category: 'test', - on: {user_identifier: 'test-id'}, + on: {user_identifier: 'test-id'} as JsonMapType, }, ] as UserError[] await logger.logUserErrors(errors, extensions) diff --git a/packages/app/src/cli/services/dev/ui/components/DevSessionUI.tsx b/packages/app/src/cli/services/dev/ui/components/DevSessionUI.tsx index 25eef63a786..a88aa523baf 100644 --- a/packages/app/src/cli/services/dev/ui/components/DevSessionUI.tsx +++ b/packages/app/src/cli/services/dev/ui/components/DevSessionUI.tsx @@ -78,7 +78,7 @@ const DevSessionUI: FunctionComponent = ({ action: async (stdout: Writable, stderr: Writable, signal: AbortSignal) => { try { return await process.action(stdout, stderr, signal) - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch (error) { abortController.abort(error) } @@ -163,7 +163,7 @@ const DevSessionUI: FunctionComponent = ({ const activeShortcuts = devStatusShortcuts.filter((shortcut) => shortcut.condition?.() ?? true) const tabs: {[key: string]: Tab} = { - // eslint-disable-next-line @shopify/cli/id-length + // eslint-disable-next-line compat/id-length d: { label: 'Dev status', shortcuts: devStatusShortcuts, @@ -210,7 +210,7 @@ const DevSessionUI: FunctionComponent = ({ ), }, - // eslint-disable-next-line @shopify/cli/id-length + // eslint-disable-next-line compat/id-length a: { label: 'App info', content: ( @@ -227,7 +227,7 @@ const DevSessionUI: FunctionComponent = ({ ), }, - // eslint-disable-next-line @shopify/cli/id-length + // eslint-disable-next-line compat/id-length s: { label: 'Store info', content: ( diff --git a/packages/app/src/cli/services/dev/ui/components/TabPanel.test.tsx b/packages/app/src/cli/services/dev/ui/components/TabPanel.test.tsx index 2499f16854f..6f920bb9d5c 100644 --- a/packages/app/src/cli/services/dev/ui/components/TabPanel.test.tsx +++ b/packages/app/src/cli/services/dev/ui/components/TabPanel.test.tsx @@ -43,7 +43,7 @@ describe('TabPanel', () => { const mockShortcutAction = vi.fn() const sampleTabs: {[key: string]: Tab} = { - // eslint-disable-next-line @shopify/cli/id-length + // eslint-disable-next-line compat/id-length a: { label: 'First Tab', content: First tab content, @@ -54,12 +54,12 @@ describe('TabPanel', () => { }, ], }, - // eslint-disable-next-line @shopify/cli/id-length + // eslint-disable-next-line compat/id-length b: { label: 'Second Tab', content: Second tab content, }, - // eslint-disable-next-line @shopify/cli/id-length + // eslint-disable-next-line compat/id-length c: { label: 'Action Tab', action: mockAction, @@ -138,13 +138,13 @@ describe('TabPanel', () => { test('only executes shortcuts for the active tab', async () => { const secondTabShortcut = vi.fn() const tabsWithMultipleShortcuts: {[key: string]: Tab} = { - // eslint-disable-next-line @shopify/cli/id-length + // eslint-disable-next-line compat/id-length a: { label: 'First Tab', content: First tab content, shortcuts: [{key: 'x', action: mockShortcutAction}], }, - // eslint-disable-next-line @shopify/cli/id-length + // eslint-disable-next-line compat/id-length b: { label: 'Second Tab', content: Second tab content, @@ -175,7 +175,7 @@ describe('TabPanel', () => { const actionWhenConditionNotMet = vi.fn() const tabsWithConditions: {[key: string]: Tab} = { - // eslint-disable-next-line @shopify/cli/id-length + // eslint-disable-next-line compat/id-length a: { label: 'Conditional Tab', content: Conditional tab content, @@ -251,18 +251,18 @@ describe('TabPanel', () => { test('supports arrow key navigation for content tabs', async () => { const tabsWithContent: {[key: string]: Tab} = { - // eslint-disable-next-line @shopify/cli/id-length + // eslint-disable-next-line compat/id-length a: { label: 'First Tab', content: First tab content, }, - // eslint-disable-next-line @shopify/cli/id-length + // eslint-disable-next-line compat/id-length b: { label: 'Action Tab', // No content - should be skipped in navigation action: mockAction, }, - // eslint-disable-next-line @shopify/cli/id-length + // eslint-disable-next-line compat/id-length c: { label: 'Second Tab', content: Second tab content, @@ -296,12 +296,12 @@ describe('TabPanel', () => { test('arrow key navigation loops through content tabs', async () => { const tabsWithContent: {[key: string]: Tab} = { - // eslint-disable-next-line @shopify/cli/id-length + // eslint-disable-next-line compat/id-length a: { label: 'First Tab', content: First tab content, }, - // eslint-disable-next-line @shopify/cli/id-length + // eslint-disable-next-line compat/id-length b: { label: 'Second Tab', content: Second tab content, @@ -340,17 +340,17 @@ describe('TabPanel', () => { test('tab key functions like right arrow for navigation', async () => { const tabsWithContent: {[key: string]: Tab} = { - // eslint-disable-next-line @shopify/cli/id-length + // eslint-disable-next-line compat/id-length a: { label: 'First Tab', content: First tab content, }, - // eslint-disable-next-line @shopify/cli/id-length + // eslint-disable-next-line compat/id-length b: { label: 'Second Tab', content: Second tab content, }, - // eslint-disable-next-line @shopify/cli/id-length + // eslint-disable-next-line compat/id-length c: { label: 'Third Tab', content: Third tab content, @@ -402,7 +402,7 @@ describe('TabPanel', () => { mocks.measureElement.mockReturnValue({width: 70}) const tabsWithActions: {[key: string]: Tab} = { - // eslint-disable-next-line @shopify/cli/id-length + // eslint-disable-next-line compat/id-length a: { label: 'Content Tab', content: Content, @@ -445,7 +445,7 @@ describe('TabPanel', () => { mocks.measureElement.mockReturnValue({width: 50}) const tabsWithActions: {[key: string]: Tab} = { - // eslint-disable-next-line @shopify/cli/id-length + // eslint-disable-next-line compat/id-length a: { label: 'Content Tab', content: Content, diff --git a/packages/app/src/cli/services/extensions/bundle.ts b/packages/app/src/cli/services/extensions/bundle.ts index 6974eebba88..8de5eebd4ea 100644 --- a/packages/app/src/cli/services/extensions/bundle.ts +++ b/packages/app/src/cli/services/extensions/bundle.ts @@ -123,7 +123,7 @@ async function writeMetafile(result: EsbuildResult | null, outputPath: string) { const metafilePath = joinPath(dir, `${name}.metafile.json`) try { await writeFile(metafilePath, JSON.stringify(result.metafile)) - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch (error) { outputWarn(`Failed to write metafile to ${metafilePath}: ${error}`) } @@ -198,14 +198,14 @@ function getESBuildOptions(options: BundleOptions, processEnv = process.env): Pa function getPlugins(resolveDir: string | undefined, processEnv = process.env): Plugin[] { // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore - const plugins: Plugin[] = [graphqlLoaderPlugin.default()] // eslint-disable-line import/no-named-as-default-member -- CommonJS exposes its factory through default. + const plugins: Plugin[] = [graphqlLoaderPlugin.default()] const skipReactDeduplication = isTruthy(processEnv[environmentVariableNames.skipEsbuildReactDedeuplication]) if (resolveDir && !skipReactDeduplication) { let resolvedReactPath: string | undefined try { resolvedReactPath = require.resolve('react', {paths: [resolveDir]}) - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch { // If weren't able to find React, that's fine. It might not be used. outputDebug(`Unable to load React in ${resolveDir}, skipping React de-duplication`) diff --git a/packages/app/src/cli/services/function/runner.ts b/packages/app/src/cli/services/function/runner.ts index ed42094423d..bf1516cdd1d 100644 --- a/packages/app/src/cli/services/function/runner.ts +++ b/packages/app/src/cli/services/function/runner.ts @@ -69,7 +69,7 @@ async function warnIfProfileWillNotContainFunctionNames( ' in shopify.extension.toml, configure the compiler to emit function names, and rebuild the function.', ], }) - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch { // Inspecting function names is best-effort and must never prevent the function from running. } diff --git a/packages/app/src/cli/services/generate/extension.ts b/packages/app/src/cli/services/generate/extension.ts index 09a9a5f8f41..9b58f107a01 100644 --- a/packages/app/src/cli/services/generate/extension.ts +++ b/packages/app/src/cli/services/generate/extension.ts @@ -153,7 +153,7 @@ async function extensionInit(options: ExtensionInitOptions) { async function removePartiallyGeneratedExtension(directory: string): Promise { try { await removeFile(directory, {maxRetries: 10, retryDelay: 100}) - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch { renderWarning({ headline: ["Couldn't remove", {filePath: directory}, {char: '.'}], diff --git a/packages/app/src/cli/services/generate/fetch-extension-specifications.test.ts b/packages/app/src/cli/services/generate/fetch-extension-specifications.test.ts index ef411061e3f..49c1e82bf9d 100644 --- a/packages/app/src/cli/services/generate/fetch-extension-specifications.test.ts +++ b/packages/app/src/cli/services/generate/fetch-extension-specifications.test.ts @@ -131,7 +131,7 @@ describe('getDevSessionUpdateMessages for remotely-sourced specifications', () = function instanceFor(specification: ExtensionSpecification): ExtensionInstance { return new ExtensionInstance({ - configuration: {name: 'analytics app events', type: specification.identifier}, + configuration: {name: 'analytics app events', type: specification.identifier} as BaseConfigType, configurationPath: '', directory: '/tmp/test-extension', specification, diff --git a/packages/app/src/cli/services/generate/shop-import/declarative-definitions.test.ts b/packages/app/src/cli/services/generate/shop-import/declarative-definitions.test.ts index cb1baa15af9..6269ed71c3e 100644 --- a/packages/app/src/cli/services/generate/shop-import/declarative-definitions.test.ts +++ b/packages/app/src/cli/services/generate/shop-import/declarative-definitions.test.ts @@ -10,10 +10,12 @@ import { } from './declarative-definitions/result.js' import { MetaobjectDefinitions, + MetaobjectDefinitionsQuery, MetaobjectForImportFragment, } from '../../../api/graphql/admin/generated/metaobject_definitions.js' import { MetafieldDefinitions, + MetafieldDefinitionsQuery, MetafieldForImportFragment, } from '../../../api/graphql/admin/generated/metafield_definitions.js' import {adminAsAppRequestDoc} from '../../../api/admin-as-app.js' @@ -110,7 +112,7 @@ describe('processDeclarativeDefinitionNodes', () => { { namespace: 'app--123456', ...defaultMetafieldFragment, - }, + } as MetafieldForImportFragment, ], }, ] @@ -138,7 +140,7 @@ describe('processDeclarativeDefinitionNodes', () => { { namespace: 'app--123456--custom', ...defaultMetafieldFragment, - }, + } as MetafieldForImportFragment, ], }, ] @@ -165,7 +167,7 @@ describe('processDeclarativeDefinitionNodes', () => { { namespace: 'custom', ...defaultMetafieldFragment, - }, + } as MetafieldForImportFragment, ], }, ] @@ -190,7 +192,7 @@ describe('processDeclarativeDefinitionNodes', () => { {name: 'max', value: '50'}, {name: 'choices', value: '["red", "blue", "green"]'}, ], - }, + } as MetafieldForImportFragment, ], }, ] @@ -227,7 +229,7 @@ describe('processDeclarativeDefinitionNodes', () => { storefront: 'PUBLIC_READ', customerAccount: 'READ', }, - }, + } as MetafieldForImportFragment, ], }, ] @@ -261,7 +263,7 @@ describe('processDeclarativeDefinitionNodes', () => { enabled: true, }, }, - }, + } as MetafieldForImportFragment, ], }, ] @@ -290,13 +292,13 @@ describe('processDeclarativeDefinitionNodes', () => { ...defaultMetafieldFragment, key: 'color', name: 'Color', - }, + } as MetafieldForImportFragment, { namespace: 'app--123456', ...defaultMetafieldFragment, key: 'size', name: 'Size', - }, + } as MetafieldForImportFragment, ], }, { @@ -308,7 +310,7 @@ describe('processDeclarativeDefinitionNodes', () => { ...defaultMetafieldFragment, key: 'vip_status', name: 'VIP Status', - }, + } as MetafieldForImportFragment, ], }, ] @@ -343,7 +345,7 @@ describe('processDeclarativeDefinitionNodes', () => { { type: 'app--345678--test', ...defaultMetaobjectFragment, - }, + } as MetaobjectForImportFragment, ] const result = processDeclarativeDefinitionNodes([], metaobjectNodes) @@ -400,7 +402,7 @@ describe('processDeclarativeDefinitionNodes', () => { ], }, ], - }, + } as MetaobjectForImportFragment, ] const result = processDeclarativeDefinitionNodes([], metaobjectNodes) @@ -438,7 +440,7 @@ describe('processDeclarativeDefinitionNodes', () => { { type: 'custom', ...defaultMetaobjectFragment, - }, + } as MetaobjectForImportFragment, ] const result = processDeclarativeDefinitionNodes([], metaobjectNodes) @@ -456,7 +458,7 @@ describe('processDeclarativeDefinitionNodes', () => { { namespace: 'app--123456', ...defaultMetafieldFragment, - }, + } as MetafieldForImportFragment, ], }, ] @@ -465,7 +467,7 @@ describe('processDeclarativeDefinitionNodes', () => { { type: 'app--345678--test', ...defaultMetaobjectFragment, - }, + } as MetaobjectForImportFragment, ] const result = processDeclarativeDefinitionNodes(metafieldNodes, metaobjectNodes) @@ -497,7 +499,7 @@ describe('processDeclarativeDefinitionNodes', () => { ...defaultMetafieldFragment, key: 'samename', name: 'samename', - }, + } as MetafieldForImportFragment, ], }, ] @@ -531,7 +533,7 @@ describe('processDeclarativeDefinitionNodes', () => { {name: 'array_strings', value: '["a", "b"]'}, {name: 'complex_object', value: '{"nested": {"value": 123}}'}, ], - }, + } as MetafieldForImportFragment, ], }, ] @@ -565,7 +567,7 @@ describe('processDeclarativeDefinitionNodes', () => { namespace: 'app--123456', ...defaultMetafieldFragment, description: null, - }, + } as MetafieldForImportFragment, ], }, ] @@ -592,7 +594,7 @@ describe('processDeclarativeDefinitionNodes', () => { namespace: 'app--123456', ...defaultMetafieldFragment, validations: [], - }, + } as MetafieldForImportFragment, ], }, ] @@ -626,7 +628,7 @@ describe('processDeclarativeDefinitionNodes', () => { validations: [], }, ], - }, + } as MetaobjectForImportFragment, ] const result = processDeclarativeDefinitionNodes([], metaobjectNodes) @@ -654,7 +656,7 @@ describe('processDeclarativeDefinitionNodes', () => { {name: 'min', value: '5'}, {name: 'max', value: null}, ], - }, + } as MetafieldForImportFragment, ], }, ] @@ -685,7 +687,7 @@ describe('processDeclarativeDefinitionNodes', () => { admin: 'MERCHANT_READ', storefront: 'NONE', }, - }, + } as MetaobjectForImportFragment, ] const result = processDeclarativeDefinitionNodes([], metaobjectNodes) @@ -707,7 +709,7 @@ describe('processDeclarativeDefinitionNodes', () => { ...defaultMetaobjectFragment.capabilities, renderable: null, }, - }, + } as MetaobjectForImportFragment, ] const result = processDeclarativeDefinitionNodes([], metaobjectNodes) @@ -750,7 +752,7 @@ describe('processDeclarativeDefinitionNodes', () => { ], }, ], - }, + } as MetaobjectForImportFragment, ] const result = processDeclarativeDefinitionNodes([], metaobjectNodes) @@ -794,7 +796,7 @@ describe('processDeclarativeDefinitionNodes', () => { ], }, ], - }, + } as MetaobjectForImportFragment, ] const result = processDeclarativeDefinitionNodes([], metaobjectNodes) @@ -820,7 +822,7 @@ describe('processDeclarativeDefinitionNodes', () => { // No trailing segment like "--custom" namespace: 'app--999999', ...defaultMetafieldFragment, - }, + } as MetafieldForImportFragment, ], }, ] @@ -846,7 +848,7 @@ describe('processDeclarativeDefinitionNodes', () => { // No trailing segment type: 'app--999999', ...defaultMetaobjectFragment, - }, + } as MetaobjectForImportFragment, ] const result = processDeclarativeDefinitionNodes([], metaobjectNodes) @@ -879,7 +881,7 @@ describe('processDeclarativeDefinitionNodes', () => { // Invalid JSON - should be returned as-is {name: 'invalid_json', value: 'this is not valid json {{'}, ], - }, + } as MetafieldForImportFragment, ], }, ] @@ -918,7 +920,7 @@ describe('processDeclarativeDefinitionNodes', () => { // Testing the READ_WRITE case customerAccount: 'READ_WRITE', }, - }, + } as MetafieldForImportFragment, ], }, ] @@ -1217,7 +1219,7 @@ describe('importDeclarativeDefinitions', () => { }, ], }, - } + } as MetafieldDefinitionsQuery } if (query === MetafieldDefinitions) { return { @@ -1225,7 +1227,7 @@ describe('importDeclarativeDefinitions', () => { pageInfo: {hasNextPage: false, endCursor: null}, nodes: [], }, - } + } as MetafieldDefinitionsQuery } if (query === MetaobjectDefinitions) { return { @@ -1290,7 +1292,7 @@ describe('importDeclarativeDefinitions', () => { }, ], }, - } + } as MetaobjectDefinitionsQuery } return {} }) diff --git a/packages/app/src/cli/services/generate/shop-import/declarative-definitions.ts b/packages/app/src/cli/services/generate/shop-import/declarative-definitions.ts index 233a9a4001b..1d308df11b4 100644 --- a/packages/app/src/cli/services/generate/shop-import/declarative-definitions.ts +++ b/packages/app/src/cli/services/generate/shop-import/declarative-definitions.ts @@ -521,7 +521,7 @@ function validationsNodeToObject(validations: {name: string; value?: string | nu const safelyJsonParse = (value: string) => { try { return JSON.parse(value) - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch (error) { return value } diff --git a/packages/app/src/cli/utilities/app/config/getTomls.ts b/packages/app/src/cli/utilities/app/config/getTomls.ts index 75ed2408594..f6662db42fa 100644 --- a/packages/app/src/cli/utilities/app/config/getTomls.ts +++ b/packages/app/src/cli/utilities/app/config/getTomls.ts @@ -17,7 +17,7 @@ export async function getTomls(appDirectory?: string): Promise<{[clientId: strin if (isValidFormatAppConfigurationFileName(file)) { const filePath = joinPath(appDirectory, file) const tomlFile = await TomlFile.read(filePath) - // eslint-disable-next-line @typescript-eslint/no-explicit-any, typescript/no-unnecessary-type-assertion -- TOML values need narrowing before indexing by client_id. + // eslint-disable-next-line @typescript-eslint/no-explicit-any const parsedToml = tomlFile.content as {[key: string]: any} if (parsedToml.client_id) { diff --git a/packages/app/src/cli/utilities/app/http-reverse-proxy.test.ts b/packages/app/src/cli/utilities/app/http-reverse-proxy.test.ts index f3102ab1fdd..7d26a2bf0c8 100644 --- a/packages/app/src/cli/utilities/app/http-reverse-proxy.test.ts +++ b/packages/app/src/cli/utilities/app/http-reverse-proxy.test.ts @@ -2,7 +2,7 @@ import {getProxyingWebServer} from './http-reverse-proxy.js' import {AbortController} from '@shopify/cli-kit/node/abort' import {describe, test, expect} from 'vitest' import fetch from 'node-fetch' -import {WebSocket, WebSocketServer} from 'ws' +import WebSocket, {WebSocketServer} from 'ws' import http from 'http' import https from 'https' import net from 'net' @@ -91,7 +91,7 @@ describe.sequential.each(each)('http-reverse-proxy for %s', (protocol) => { try { await fetch(`${protocol}://localhost:${setup.proxyPort}/path1`, {agent}) return 'open' - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch { return 'closed' } diff --git a/packages/app/src/cli/utilities/developer-platform-client/app-management-client.test.ts b/packages/app/src/cli/utilities/developer-platform-client/app-management-client.test.ts index e8386685664..faa969b436d 100644 --- a/packages/app/src/cli/utilities/developer-platform-client/app-management-client.test.ts +++ b/packages/app/src/cli/utilities/developer-platform-client/app-management-client.test.ts @@ -1530,7 +1530,7 @@ describe('AppManagementClient', () => { query: CreateAssetUrl, token: 'token', variables: { - sourceExtension: 'BR', + sourceExtension: 'BR' as SourceExtension, organizationId: 'gid://shopify/Organization/213141', }, unauthorizedHandler: { @@ -2490,7 +2490,7 @@ describe('orgFromId', () => { client.session = vi.fn().mockResolvedValue({ token: 'refreshed-token', businessPlatformToken: 'refreshed-business-platform-token', - }) + }) as unknown as typeof client.session const result = await client.orgFromId('123') @@ -2528,7 +2528,7 @@ describe('devStoreCapReached', () => { client.session = vi.fn().mockResolvedValue({ token: 'refreshed-app-management-token', businessPlatformToken: 'refreshed-business-platform-token', - }) + }) as unknown as typeof client.session const result = await client.devStoreCapReached('gid://shopify/Organization/123') diff --git a/packages/app/src/cli/utilities/developer-platform-client/app-management-client.ts b/packages/app/src/cli/utilities/developer-platform-client/app-management-client.ts index 572a009803f..ce548ad1a3a 100644 --- a/packages/app/src/cli/utilities/developer-platform-client/app-management-client.ts +++ b/packages/app/src/cli/utilities/developer-platform-client/app-management-client.ts @@ -264,7 +264,7 @@ export class AppManagementClient implements DeveloperPlatformClient { cursor: data.cursor, status: response.status, } - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch (error) { return { errors: [`Failed to parse response: ${error}`], diff --git a/packages/app/src/cli/utilities/extensions/theme/host-theme-manager.ts b/packages/app/src/cli/utilities/extensions/theme/host-theme-manager.ts index 725510ea8e7..c80d08ee1d4 100644 --- a/packages/app/src/cli/utilities/extensions/theme/host-theme-manager.ts +++ b/packages/app/src/cli/utilities/extensions/theme/host-theme-manager.ts @@ -60,7 +60,7 @@ export class HostThemeManager extends ThemeManager { } else { throw new Error() } - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch (error) { outputDebug(`Failed to create theme with name "${options.name}" and role "${options.role}". Retrying...`) } diff --git a/packages/app/src/cli/utilities/file-formatter.ts b/packages/app/src/cli/utilities/file-formatter.ts index 04a32c036d0..1aa88c0ceef 100644 --- a/packages/app/src/cli/utilities/file-formatter.ts +++ b/packages/app/src/cli/utilities/file-formatter.ts @@ -1,4 +1,4 @@ -import {format} from 'prettier' +import prettier from 'prettier' import type {Options} from 'prettier' /** @@ -8,5 +8,5 @@ import type {Options} from 'prettier' * @returns The formatted content. */ export async function formatContent(content: string, options?: Options): Promise { - return format(content, options) + return prettier.format(content, options) } diff --git a/packages/app/src/cli/utilities/json-schema.ts b/packages/app/src/cli/utilities/json-schema.ts index 8b13b565a43..76ac3d5e411 100644 --- a/packages/app/src/cli/utilities/json-schema.ts +++ b/packages/app/src/cli/utilities/json-schema.ts @@ -7,6 +7,7 @@ import { normaliseJsonSchema, } from '@shopify/cli-kit/node/json-schema' import {isEmpty} from '@shopify/cli-kit/common/object' +import {JsonMapType} from '@shopify/cli-kit/node/toml' /** * The base properties that are added to all JSON Schema contracts. @@ -48,7 +49,7 @@ export async function unifiedConfigurationParserFactory( // Then, even if this failed, we try to validate against the contract. const zodValidatedData = zodParse.state === 'ok' ? zodParse.data : undefined - const subjectForAjv = zodValidatedData ?? config + const subjectForAjv = zodValidatedData ?? (config as JsonMapType) const jsonSchemaParse = jsonSchemaValidate( subjectForAjv, diff --git a/packages/app/src/cli/utilities/mkcert.test.ts b/packages/app/src/cli/utilities/mkcert.test.ts index c75e1588dfa..36940aa85fa 100644 --- a/packages/app/src/cli/utilities/mkcert.test.ts +++ b/packages/app/src/cli/utilities/mkcert.test.ts @@ -9,7 +9,7 @@ import which from 'which' import {downloadGitHubRelease} from '@shopify/cli-kit/node/github' import {testWithTempDir} from '@shopify/cli-kit/node/testing/test-with-temp-dir' import {AbortError} from '@shopify/cli-kit/node/error' -import {fetch} from '@shopify/cli-kit/node/http' +import {fetch, Response} from '@shopify/cli-kit/node/http' import {mockAndCaptureOutput} from '@shopify/cli-kit/node/testing/output' import {keypress, renderWarning} from '@shopify/cli-kit/node/ui' @@ -305,7 +305,7 @@ describe('mkcert', () => { const mockFetch = vi.fn().mockResolvedValue({ ok: true, text: async () => 'LICENSE CONTENT', - }) + } as unknown as Response) vi.mocked(fetch).mockImplementation(mockFetch) @@ -331,7 +331,7 @@ describe('mkcert', () => { const mockFetch = vi.fn().mockResolvedValue({ ok: false, text: async () => 'LICENSE CONTENT', - }) + } as unknown as Response) const mockOutput = mockAndCaptureOutput() vi.mocked(fetch).mockImplementation(mockFetch) diff --git a/packages/app/src/cli/utilities/mkcert.ts b/packages/app/src/cli/utilities/mkcert.ts index b9b35af4478..f0ea73f3bd0 100644 --- a/packages/app/src/cli/utilities/mkcert.ts +++ b/packages/app/src/cli/utilities/mkcert.ts @@ -109,7 +109,7 @@ async function downloadMkcertLicense(dotShopifyPath: string): Promise { diff --git a/packages/cli-kit/src/private/node/analytics/error-grouping.ts b/packages/cli-kit/src/private/node/analytics/error-grouping.ts index 3877e81b010..05e1673b578 100644 --- a/packages/cli-kit/src/private/node/analytics/error-grouping.ts +++ b/packages/cli-kit/src/private/node/analytics/error-grouping.ts @@ -197,7 +197,7 @@ function parseEmbeddedJson(message: string): EmbeddedGraphQLPayload | undefined try { return JSON.parse(message.slice(jsonStart)) as EmbeddedGraphQLPayload - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch { return undefined } diff --git a/packages/cli-kit/src/private/node/api.ts b/packages/cli-kit/src/private/node/api.ts index 7c0e1b1a43c..969bbae3611 100644 --- a/packages/cli-kit/src/private/node/api.ts +++ b/packages/cli-kit/src/private/node/api.ts @@ -209,7 +209,7 @@ async function makeVerboseRequest( response.headers.forEach((value: any, key: any) => { if (responseHeaderIsInteresting(key)) responseHeaders[key] = value }) - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch (err) { const t1 = performance.now() duration = Math.round(t1 - t0) @@ -227,7 +227,7 @@ async function makeVerboseRequest( try { delayMs = responseHeaders['retry-after'] ? Number.parseInt(responseHeaders['retry-after'], 10) : undefined - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch { // ignore errors in extracting retry-after header } diff --git a/packages/cli-kit/src/private/node/api/graphql.ts b/packages/cli-kit/src/private/node/api/graphql.ts index a4522b8cf22..9d99517f271 100644 --- a/packages/cli-kit/src/private/node/api/graphql.ts +++ b/packages/cli-kit/src/private/node/api/graphql.ts @@ -38,7 +38,7 @@ function sanitizeDeepVariables(value: unknown, sensitiveKeys: string[]): unknown const sanitized = sanitizeDeepVariables(parsed, sensitiveKeys) return JSON.stringify(sanitized, null) } - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch (error) { return value } diff --git a/packages/cli-kit/src/private/node/content-tokens.ts b/packages/cli-kit/src/private/node/content-tokens.ts index 29029faeca7..09c23dbf7eb 100644 --- a/packages/cli-kit/src/private/node/content-tokens.ts +++ b/packages/cli-kit/src/private/node/content-tokens.ts @@ -78,7 +78,7 @@ export class JsonContentToken extends ContentToken { output(): string { try { return colorJson(stringifyMessage(this.value) ?? {}) - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch (_) { return JSON.stringify(stringifyMessage(this.value) ?? {}, null, 2) } diff --git a/packages/cli-kit/src/private/node/context/agent.ts b/packages/cli-kit/src/private/node/context/agent.ts index e7f1a3f401d..2f4153af890 100644 --- a/packages/cli-kit/src/private/node/context/agent.ts +++ b/packages/cli-kit/src/private/node/context/agent.ts @@ -41,7 +41,7 @@ export async function detectedAgentEnvironmentVariables( SHOPIFY_CLI_AGENT_INFO: `n:${toolkitAgentNamesByDetectedName.get(detectedName) ?? detectedName}`, }) - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch (error) { let message = 'Unable to detect which AI agent is running the CLI' if (error instanceof Error) { diff --git a/packages/cli-kit/src/private/node/json-error.ts b/packages/cli-kit/src/private/node/json-error.ts index 78f1eefd663..7777dcdf15c 100644 --- a/packages/cli-kit/src/private/node/json-error.ts +++ b/packages/cli-kit/src/private/node/json-error.ts @@ -19,7 +19,7 @@ export function renderFatalErrorAsJson(error: unknown): void { const document = {error: errorToJson(error)} serializedDocument = JSON.stringify(jsonErrorOutputSchema.validate(document)) // Serialization must not replace the JSON contract with a text banner. - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch { serializedDocument = JSON.stringify({error: {type: 'bug', message: 'Failed to serialize the error as JSON.'}}) } diff --git a/packages/cli-kit/src/private/node/session.ts b/packages/cli-kit/src/private/node/session.ts index a24e951056f..aec2781a0c1 100644 --- a/packages/cli-kit/src/private/node/session.ts +++ b/packages/cli-kit/src/private/node/session.ts @@ -37,7 +37,7 @@ async function fetchEmail(businessPlatformToken: string | undefined): Promise(UserEmailQueryString, businessPlatformToken) return userEmailResult.currentUserAccount?.email ?? undefined - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch (error) { outputDebug(outputContent`Failed to fetch user email: ${(error as Error).message ?? String(error)}`) return undefined diff --git a/packages/cli-kit/src/private/node/ui/components/ConcurrentOutput.tsx b/packages/cli-kit/src/private/node/ui/components/ConcurrentOutput.tsx index b4381b56682..081b16667ff 100644 --- a/packages/cli-kit/src/private/node/ui/components/ConcurrentOutput.tsx +++ b/packages/cli-kit/src/private/node/ui/components/ConcurrentOutput.tsx @@ -244,7 +244,7 @@ const ConcurrentOutput: FunctionComponent = ({ if (!keepRunningAfterProcessesResolve) { setCompletionResult({}) } - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch (error: unknown) { if (!keepRunningAfterProcessesResolve) { setCompletionResult({error: error as Error}) diff --git a/packages/cli-kit/src/private/node/ui/components/SelectInput.tsx b/packages/cli-kit/src/private/node/ui/components/SelectInput.tsx index 52a4d72b0b9..e23e8d1dae5 100644 --- a/packages/cli-kit/src/private/node/ui/components/SelectInput.tsx +++ b/packages/cli-kit/src/private/node/ui/components/SelectInput.tsx @@ -45,7 +45,7 @@ function highlightedLabel(label: string, term: string | undefined) { let regex try { regex = new RegExp(term, 'i') - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch (error) { // term is user provided and could be an invalid regex at that moment (e.g. ending in '\') return label diff --git a/packages/cli-kit/src/private/node/ui/components/TextAnimation.tsx b/packages/cli-kit/src/private/node/ui/components/TextAnimation.tsx index 8f3bf567777..e2ac1e7b421 100644 --- a/packages/cli-kit/src/private/node/ui/components/TextAnimation.tsx +++ b/packages/cli-kit/src/private/node/ui/components/TextAnimation.tsx @@ -1,4 +1,4 @@ -/* eslint-disable @shopify/cli/id-length */ +/* eslint-disable compat/id-length */ import {Text, useStdout} from 'ink' import React, {memo, useCallback, useLayoutEffect, useRef, useState} from 'react' import gradient from 'gradient-string' diff --git a/packages/cli-kit/src/public/common/array.ts b/packages/cli-kit/src/public/common/array.ts index e038efcee4b..8b22c0b7b93 100644 --- a/packages/cli-kit/src/public/common/array.ts +++ b/packages/cli-kit/src/public/common/array.ts @@ -19,7 +19,7 @@ export function takeRandomFromArray(array: T[]): T { * @returns A copy of the array with the undefined elements deleted. */ export function getArrayRejectingUndefined(array: (T | undefined)[]): T[] { - return array.filter((item) => item !== undefined) + return array.filter((item) => item !== undefined) as Exclude[] } /** diff --git a/packages/cli-kit/src/public/common/url.ts b/packages/cli-kit/src/public/common/url.ts index 0e6d354d767..d8a85db9531 100644 --- a/packages/cli-kit/src/public/common/url.ts +++ b/packages/cli-kit/src/public/common/url.ts @@ -23,7 +23,7 @@ export function isValidURL(url: string): boolean { export function safeParseURL(url: string): URL | undefined { try { return new URL(url) - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch (error) { return undefined } diff --git a/packages/cli-kit/src/public/node/analytics.ts b/packages/cli-kit/src/public/node/analytics.ts index 760b654864a..574783f4af5 100644 --- a/packages/cli-kit/src/public/node/analytics.ts +++ b/packages/cli-kit/src/public/node/analytics.ts @@ -92,7 +92,7 @@ export async function sendAnalyticsEventFromStdin(): Promise { } await sendAnalyticsEvent(payload, skipMonorailAnalytics, skipMetricAnalytics) - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch (error) { const message = error instanceof Error ? error.message : String(error) outputDebug(`Failed to send analytics in background: ${message}`) @@ -166,7 +166,7 @@ export async function reportAnalyticsEvent(options: ReportAnalyticsEventOptions) // eslint-disable-next-line no-void void analyticsProcess - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch (error) { let message = 'Failed to report usage analytics' if (error instanceof Error) { diff --git a/packages/cli-kit/src/public/node/api/admin.test.ts b/packages/cli-kit/src/public/node/api/admin.test.ts index 3dacc5983fd..d7b240b4323 100644 --- a/packages/cli-kit/src/public/node/api/admin.test.ts +++ b/packages/cli-kit/src/public/node/api/admin.test.ts @@ -200,9 +200,12 @@ describe('fetchApiVersions error classification', () => { // Mirrors `packages/cli-kit/src/public/node/error/index.test.ts`: a real `ClientError`, because // the branches under test use `instanceof ClientError`. function clientError(status: number, errors: unknown): ClientError { - return new ClientError({status, errors, headers: {}} as any, { - query: 'query publicApiVersions { publicApiVersions { handle supported } }', - }) + return new ClientError( + {status, errors, headers: {}} as any, + { + query: 'query publicApiVersions { publicApiVersions { handle supported } }', + } as any, + ) } test('reports a 402 Unavailable Shop as an expected store-state failure, not a CLI bug', async () => { diff --git a/packages/cli-kit/src/public/node/api/graphql.ts b/packages/cli-kit/src/public/node/api/graphql.ts index 7b82eccf03e..137bfd1b365 100644 --- a/packages/cli-kit/src/public/node/api/graphql.ts +++ b/packages/cli-kit/src/public/node/api/graphql.ts @@ -285,7 +285,7 @@ async function logLastRequestIdFromResponse(response: GraphQLResponse) await addPublicMetadata(() => ({ cmd_all_last_graphql_request_id: requestId ?? undefined, })) - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch { // no problem if unable to get request ID. } diff --git a/packages/cli-kit/src/public/node/archiver.ts b/packages/cli-kit/src/public/node/archiver.ts index 755c4d52345..35d781a2f75 100644 --- a/packages/cli-kit/src/public/node/archiver.ts +++ b/packages/cli-kit/src/public/node/archiver.ts @@ -195,7 +195,7 @@ export async function brotliCompress(options: BrotliOptions): Promise { } finally { try { await removeFile(tempTarPath) - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch (error) { outputDebug(outputContent`Failed to clean up temporary file: ${outputToken.path(tempTarPath)}`) } diff --git a/packages/cli-kit/src/public/node/base-command.test.ts b/packages/cli-kit/src/public/node/base-command.test.ts index dbf6bc6d477..40b28ac8916 100644 --- a/packages/cli-kit/src/public/node/base-command.test.ts +++ b/packages/cli-kit/src/public/node/base-command.test.ts @@ -347,7 +347,7 @@ describe('applying environments', async () => { testResult = {} testError = undefined await inTemporaryDirectory(async (tmpDir) => { - await writeFile(joinPath(tmpDir, 'shopify.environments.toml'), encodeTOML(allEnvironments)) + await writeFile(joinPath(tmpDir, 'shopify.environments.toml'), encodeTOML(allEnvironments as any)) await testFunc(tmpDir) }) }) @@ -874,7 +874,7 @@ const deleteDefaultEnvironment = async (tmpDir: string): Promise => { const clone = {...allEnvironments} clone.environments = {...allEnvironments.environments} delete clone.environments.default - await writeFile(joinPath(tmpDir, 'shopify.environments.toml'), encodeTOML({environments: clone})) + await writeFile(joinPath(tmpDir, 'shopify.environments.toml'), encodeTOML({environments: clone} as any)) } describe('removeDuplicatedPlugins', () => { diff --git a/packages/cli-kit/src/public/node/cli-launcher.ts b/packages/cli-kit/src/public/node/cli-launcher.ts index 48bcd268101..49edb55f701 100644 --- a/packages/cli-kit/src/public/node/cli-launcher.ts +++ b/packages/cli-kit/src/public/node/cli-launcher.ts @@ -47,7 +47,7 @@ export async function launchCLI(options: Options): Promise { await run(argv, config) await flush() - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch (error) { const {errorHandler} = await import('./error-handler.js') await errorHandler(error as Error) diff --git a/packages/cli-kit/src/public/node/context/local.ts b/packages/cli-kit/src/public/node/context/local.ts index 630d6d8f000..07754e82a4f 100644 --- a/packages/cli-kit/src/public/node/context/local.ts +++ b/packages/cli-kit/src/public/node/context/local.ts @@ -240,7 +240,7 @@ export async function hasGit(): Promise { try { await lazyExec('git', ['--version']) return true - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch { return false } diff --git a/packages/cli-kit/src/public/node/custom-oclif-loader.ts b/packages/cli-kit/src/public/node/custom-oclif-loader.ts index 7f0914807da..0b3542f62ff 100644 --- a/packages/cli-kit/src/public/node/custom-oclif-loader.ts +++ b/packages/cli-kit/src/public/node/custom-oclif-loader.ts @@ -84,7 +84,7 @@ function setShellVariableWhenUserLookupFails(): void { try { os.userInfo() - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch { process.env.SHELL = 'unknown' } diff --git a/packages/cli-kit/src/public/node/doctor/framework.ts b/packages/cli-kit/src/public/node/doctor/framework.ts index 4526063077e..b4062d3160e 100644 --- a/packages/cli-kit/src/public/node/doctor/framework.ts +++ b/packages/cli-kit/src/public/node/doctor/framework.ts @@ -90,7 +90,7 @@ export abstract class DoctorSuite { } eventHandler(mockEvent) capturedEventHandler(mockEvent) - lastBugsnagEvent = mockEvent + lastBugsnagEvent = mockEvent as any callback(null) }, isStarted: () => true, @@ -218,7 +218,7 @@ describe('sends errors to Bugsnag', () => { }) test('processes string instances', async () => { - const res = await sendErrorToBugsnag('In test', 'unexpected_error') + const res = await sendErrorToBugsnag('In test' as any, 'unexpected_error') expect(res.reported).toEqual(true) const {error} = res as any expect(error.stack).toMatch(/^Error: In test/) diff --git a/packages/cli-kit/src/public/node/error-handler.ts b/packages/cli-kit/src/public/node/error-handler.ts index 761ae3724d0..706249ed1d4 100644 --- a/packages/cli-kit/src/public/node/error-handler.ts +++ b/packages/cli-kit/src/public/node/error-handler.ts @@ -192,7 +192,7 @@ export async function sendErrorToBugsnag( }) } return {error: reportableError, reported: report, unhandled} - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch (err) { outputDebug(`Error reporting to Bugsnag: ${err}`) return {error, reported: false, unhandled: undefined} @@ -258,7 +258,7 @@ export async function registerCleanBugsnagErrorsFromWithinPlugins(config: Interf }) try { await addBugsnagMetadata(event, config) - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch (metadataError) { outputDebug(`There was an error adding metadata to the Bugsnag report; Ignoring and carrying on ${metadataError}`) } diff --git a/packages/cli-kit/src/public/node/error/index.test.ts b/packages/cli-kit/src/public/node/error/index.test.ts index 0c5619baf70..9958fe57271 100644 --- a/packages/cli-kit/src/public/node/error/index.test.ts +++ b/packages/cli-kit/src/public/node/error/index.test.ts @@ -14,7 +14,7 @@ import {beforeEach, describe, expect, test, vi} from 'vitest' function clientError(status: number, code?: string): ClientError { const errors = code ? [{message: 'boom', extensions: {code}}] : undefined - return new ClientError({status, errors, headers: {}} as any, {query: 'q'}) + return new ClientError({status, errors, headers: {}} as any, {query: 'q'} as any) } vi.mock('../ui.js') @@ -160,7 +160,7 @@ describe('shouldReportErrorAsUnexpected helper', () => { test('returns false for a rate-limit code on a later error entry, not just the first', () => { const error = new ClientError( {status: 200, errors: [{message: 'noise'}, {extensions: {code: 'THROTTLED'}}], headers: {}} as any, - {query: 'q'}, + {query: 'q'} as any, ) expect(shouldReportErrorAsUnexpected(error)).toBe(false) }) diff --git a/packages/cli-kit/src/public/node/error/index.ts b/packages/cli-kit/src/public/node/error/index.ts index aace5d2b01b..2b608baddb7 100644 --- a/packages/cli-kit/src/public/node/error/index.ts +++ b/packages/cli-kit/src/public/node/error/index.ts @@ -187,7 +187,7 @@ export function errorMapper(error: unknown): Promise { function isFatal(error: unknown): error is FatalError { try { return Object.prototype.hasOwnProperty.call(error, 'type') - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch { return false } diff --git a/packages/cli-kit/src/public/node/fs.ts b/packages/cli-kit/src/public/node/fs.ts index 189f27b076c..cd3aecf4742 100644 --- a/packages/cli-kit/src/public/node/fs.ts +++ b/packages/cli-kit/src/public/node/fs.ts @@ -311,7 +311,7 @@ export async function symlink(target: string, path: string): Promise { if (stats.isDirectory()) { type = 'junction' } - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch { // If we can't stat the target, assume it's a file } @@ -462,7 +462,7 @@ export async function fileLastUpdatedTimestamp(path: string): Promise { try { await fsAccess(path) return true - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch { return false } diff --git a/packages/cli-kit/src/public/node/graphiql/server.ts b/packages/cli-kit/src/public/node/graphiql/server.ts index 3f900c79aeb..9ca1548c886 100644 --- a/packages/cli-kit/src/public/node/graphiql/server.ts +++ b/packages/cli-kit/src/public/node/graphiql/server.ts @@ -216,7 +216,7 @@ export function setupGraphiQLServer(options: SetupGraphiQLServerOptions): Server try { await fetchApiVersionsWithTokenRefresh() return {status: 'OK', storeFqdn, appName: appContext?.appName, appUrl: appContext?.appUrl} - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch { return {status: 'UNAUTHENTICATED'} } @@ -334,7 +334,7 @@ export function setupGraphiQLServer(options: SetupGraphiQLServerOptions): Server setResponseHeader(event, 'Content-Type', 'application/json') setResponseStatus(event, result.status) return result.json() - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch (error: unknown) { setResponseStatus(event, 500) if (error instanceof Error) { diff --git a/packages/cli-kit/src/public/node/graphql.ts b/packages/cli-kit/src/public/node/graphql.ts index 2f0a2ad5d85..82fd931f05d 100644 --- a/packages/cli-kit/src/public/node/graphql.ts +++ b/packages/cli-kit/src/public/node/graphql.ts @@ -22,7 +22,7 @@ export function containsMutation(query: string, operationName?: string): boolean let document try { document = parse(query) - // eslint-disable-next-line @shopify/cli/no-catch-all -- swallowing parse errors is the entire purpose + // eslint-disable-next-line no-catch-all/no-catch-all -- swallowing parse errors is the entire purpose } catch { return false } diff --git a/packages/cli-kit/src/public/node/hooks/postrun.ts b/packages/cli-kit/src/public/node/hooks/postrun.ts index 8877a1b759c..08d2afd6518 100644 --- a/packages/cli-kit/src/public/node/hooks/postrun.ts +++ b/packages/cli-kit/src/public/node/hooks/postrun.ts @@ -54,7 +54,7 @@ export function waitForPostRunHookAndExit(): void { // This hook is called after each successful command run. More info: https://oclif.io/docs/hooks export const hook: Hook.Postrun = async ({config, Command}) => { - await detectStopCommand(Command) + await detectStopCommand(Command as unknown as typeof Command) const metadata = await import('../metadata.js') const {commandStartOptions} = metadata.getAllSensitiveMetadata() @@ -147,7 +147,7 @@ async function performAutoUpgrade(newerVersion: string): Promise { try { await runCLIUpgrade({autoupgrade: true}) await metadata.addPublicMetadata(() => ({env_auto_upgrade_success: true})) - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch (error) { const errorMessage = `Auto-upgrade failed: ${error}` outputDebug(errorMessage) diff --git a/packages/cli-kit/src/public/node/http.ts b/packages/cli-kit/src/public/node/http.ts index 6d7d17daf76..86bda5a9f9b 100644 --- a/packages/cli-kit/src/public/node/http.ts +++ b/packages/cli-kit/src/public/node/http.ts @@ -236,7 +236,7 @@ export function downloadFile(url: string, to: string): Promise { if (fileExistsSync(to)) { unlinkFileSync(to) } - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch (err: unknown) { outputDebug(outputContent`Failed to remove file ${outputToken.path(to)}: ${outputToken.raw(String(err))}`) } diff --git a/packages/cli-kit/src/public/node/is-global.ts b/packages/cli-kit/src/public/node/is-global.ts index 63b5de12113..9bb193719a6 100644 --- a/packages/cli-kit/src/public/node/is-global.ts +++ b/packages/cli-kit/src/public/node/is-global.ts @@ -41,7 +41,7 @@ export function currentProcessIsGlobal(argv = process.argv): boolean { _isGlobal = !isLocal return _isGlobal - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch (error) { return false } @@ -112,7 +112,7 @@ export function inferPackageManagerForGlobalCLI(argv = process.argv, env = proce let realPath = symlinkPath try { realPath = realpathSync(processArgv).toLowerCase() - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch (error) { // fall back to using the original path for detection } @@ -152,7 +152,7 @@ export function getProjectDir(directory: string): string | undefined { type: 'file', }) if (configFile) return dirname(configFile) - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch (error) { return undefined } diff --git a/packages/cli-kit/src/public/node/local-storage.ts b/packages/cli-kit/src/public/node/local-storage.ts index 2d75518c55a..e59eb420943 100644 --- a/packages/cli-kit/src/public/node/local-storage.ts +++ b/packages/cli-kit/src/public/node/local-storage.ts @@ -66,7 +66,7 @@ export class LocalStorage> { get(key: TKey): T[TKey] | undefined { try { return this.config.get(key) - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch (error) { this.handleError(error, 'get') } @@ -83,7 +83,7 @@ export class LocalStorage> { set(key: TKey, value?: T[TKey]): void { try { this.config.set(key, value) - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch (error) { this.handleError(error, 'set') } @@ -99,7 +99,7 @@ export class LocalStorage> { delete(key: TKey): void { try { this.config.delete(key) - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch (error) { this.handleError(error, 'delete') } @@ -114,7 +114,7 @@ export class LocalStorage> { clear(): void { try { this.config.clear() - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch (error) { this.handleError(error, 'clear') } diff --git a/packages/cli-kit/src/public/node/metadata.test.ts b/packages/cli-kit/src/public/node/metadata.test.ts index fe0b2fdd1d5..4500b4681e6 100644 --- a/packages/cli-kit/src/public/node/metadata.test.ts +++ b/packages/cli-kit/src/public/node/metadata.test.ts @@ -127,7 +127,7 @@ describe('runtime metadata', () => { clock.restore() } - // eslint-disable-next-line @shopify/cli/id-length + // eslint-disable-next-line compat/id-length const {a, b, c, d, e} = container.getAllPublicMetadata() as any expect(a).toBeGreaterThanOrEqual(0) @@ -170,7 +170,7 @@ describe('runtime metadata', () => { throw new Error('error inside a nested timed section') }) }) - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch { errorOccurred = true } finally { @@ -179,7 +179,7 @@ describe('runtime metadata', () => { expect(errorOccurred).toBe(true) - // eslint-disable-next-line @shopify/cli/id-length + // eslint-disable-next-line compat/id-length const {a, b} = container.getAllPublicMetadata() as any expect(a).toBeGreaterThanOrEqual(0) expect(b).toBeGreaterThanOrEqual(0) diff --git a/packages/cli-kit/src/public/node/metadata.ts b/packages/cli-kit/src/public/node/metadata.ts index 1bc5f72fee4..2530ab6d96b 100644 --- a/packages/cli-kit/src/public/node/metadata.ts +++ b/packages/cli-kit/src/public/node/metadata.ts @@ -92,7 +92,7 @@ export function createRuntimeMetadataContainer< } else { try { await getAndSet() - // eslint-disable-next-line @shopify/cli/no-catch-all, @typescript-eslint/no-explicit-any + // eslint-disable-next-line no-catch-all/no-catch-all, @typescript-eslint/no-explicit-any } catch (error: any) { // This is very prone to becoming a circular dependency, so we import it dynamically const {sendErrorToBugsnag} = await import('./error-handler.js') diff --git a/packages/cli-kit/src/public/node/monorail.ts b/packages/cli-kit/src/public/node/monorail.ts index 8d89245f93b..7c9f04122f1 100644 --- a/packages/cli-kit/src/public/node/monorail.ts +++ b/packages/cli-kit/src/public/node/monorail.ts @@ -234,7 +234,7 @@ export async function publishMonorailEvent { test('ignores invalid package manager in options', () => { const mockEnv = {npm_config_user_agent: 'npm/1.0.0'} - expect(inferPackageManager('invalid', mockEnv)).toBe('npm') + expect(inferPackageManager('invalid' as PackageManager, mockEnv)).toBe('npm') }) test('infers package manager from user agent when not provided in options', () => { diff --git a/packages/cli-kit/src/public/node/node-package-manager.ts b/packages/cli-kit/src/public/node/node-package-manager.ts index 0d6725b16df..48d5bc1cccf 100644 --- a/packages/cli-kit/src/public/node/node-package-manager.ts +++ b/packages/cli-kit/src/public/node/node-package-manager.ts @@ -321,7 +321,7 @@ export async function checkForNewVersion( let lastVersion try { lastVersion = await cacheRetrieveOrRepopulate(cacheKey, getLatestVersion, cacheExpiryInHours * 3600 * 1000) - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch (error) { return undefined } diff --git a/packages/cli-kit/src/public/node/notifications-system.ts b/packages/cli-kit/src/public/node/notifications-system.ts index d07b30cdc0f..32d2b7b4e2c 100644 --- a/packages/cli-kit/src/public/node/notifications-system.ts +++ b/packages/cli-kit/src/public/node/notifications-system.ts @@ -41,7 +41,7 @@ function url(): string { outputDebug( `The notifications URL provided via SHOPIFY_CLI_NOTIFICATIONS_URL (${envUrl}) must use https, or http with a loopback host. Falling back to default.`, ) - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch { outputDebug( `The notifications URL provided via SHOPIFY_CLI_NOTIFICATIONS_URL (${envUrl}) is not a valid URL. Falling back to default.`, diff --git a/packages/cli-kit/src/public/node/os.ts b/packages/cli-kit/src/public/node/os.ts index 269ef49b5b7..81573ab18ea 100644 --- a/packages/cli-kit/src/public/node/os.ts +++ b/packages/cli-kit/src/public/node/os.ts @@ -35,10 +35,10 @@ export async function username(platform: typeof process.platform = process.platf const {stdout} = await execa('id', ['-un', userId]) return stdout - // eslint-disable-next-line @shopify/cli/no-catch-all, no-empty + // eslint-disable-next-line no-catch-all/no-catch-all, no-empty } catch {} return makeUsernameFromId(userId) - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch { return null } @@ -78,7 +78,7 @@ function getEnvironmentVariable() { function getUsernameFromOsUserInfo(): string | null { try { return osUserInfo().username - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch { return null } diff --git a/packages/cli-kit/src/public/node/path.ts b/packages/cli-kit/src/public/node/path.ts index d9fbdee500b..40ac87eb601 100644 --- a/packages/cli-kit/src/public/node/path.ts +++ b/packages/cli-kit/src/public/node/path.ts @@ -10,9 +10,9 @@ import { isAbsolute, } from 'pathe' import {fileURLToPath} from 'url' -// eslint-disable-next-line @shopify/cli/restricted-imports -- Native containment must preserve literal POSIX backslashes. +// eslint-disable-next-line no-restricted-imports -- Native containment must preserve literal POSIX backslashes. import {relative as nativeRelative, isAbsolute as nativeIsAbsolute, sep as nativeSeparator} from 'node:path' -// eslint-disable-next-line @shopify/cli/prefer-global-url +// eslint-disable-next-line compat/n-prefer-global-url import type {URL} from 'url' interface IsSubpathOptions { diff --git a/packages/cli-kit/src/public/node/session-prompt.test.ts b/packages/cli-kit/src/public/node/session-prompt.test.ts index 3a97e0f5d33..afd1d72aecd 100644 --- a/packages/cli-kit/src/public/node/session-prompt.test.ts +++ b/packages/cli-kit/src/public/node/session-prompt.test.ts @@ -125,7 +125,7 @@ describe('promptSessionSelect', () => { scopes: ['scope3'], userId: 'user3', // Missing alias - alias: undefined, + alias: undefined as any, }, applications: {}, }, diff --git a/packages/cli-kit/src/public/node/store-auth-session.test.ts b/packages/cli-kit/src/public/node/store-auth-session.test.ts index b337f757626..afa209a8b01 100644 --- a/packages/cli-kit/src/public/node/store-auth-session.test.ts +++ b/packages/cli-kit/src/public/node/store-auth-session.test.ts @@ -25,7 +25,7 @@ function inMemoryStorage() { return { get(key: string) { - return values.get(key) + return values.get(key) as any }, set(key: string, value: unknown) { values.set(key, value) diff --git a/packages/cli-kit/src/public/node/system.ts b/packages/cli-kit/src/public/node/system.ts index f1ac7262d85..e2e2109deeb 100644 --- a/packages/cli-kit/src/public/node/system.ts +++ b/packages/cli-kit/src/public/node/system.ts @@ -66,7 +66,7 @@ export async function openURL(url: string): Promise { try { const subprocess = await externalOpen.default(url) return await browserLaunchSucceeded(subprocess) - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch (error) { return false } @@ -418,7 +418,7 @@ export async function isWsl(overrides: WslDetectionOverrides = {}): Promise { try { await renderConcurrent({processes: [throwingProcess]}) - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch (error) { renderFatalError(error as FatalError) } @@ -725,7 +725,7 @@ describe('renderTasks', async () => { try { await renderTasks([throwingTask]) - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch (error: any) { renderWarning({ headline: error.message, @@ -786,7 +786,7 @@ describe('keypress', async () => { let rejected = false try { await promise - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch (rejection: any) { expect(rejection.type).toEqual(FatalErrorType.AbortSilent) rejected = true diff --git a/packages/cli-kit/src/public/node/ui.tsx b/packages/cli-kit/src/public/node/ui.tsx index 32ee3c254a3..6f65e8152e5 100644 --- a/packages/cli-kit/src/public/node/ui.tsx +++ b/packages/cli-kit/src/public/node/ui.tsx @@ -1,4 +1,4 @@ -/* eslint-disable @shopify/cli/tsdoc-syntax */ +/* eslint-disable tsdoc/syntax */ import {AbortError, AbortSilentError, FatalError as Fatal} from './error.js' import {commandEventOutputMode, emitCommandEvent} from './command-events.js' import {randomUUID} from './crypto.js' diff --git a/packages/cli-kit/src/public/node/upgrade.test.ts b/packages/cli-kit/src/public/node/upgrade.test.ts index 8e39b8c3eee..8d93a458583 100644 --- a/packages/cli-kit/src/public/node/upgrade.test.ts +++ b/packages/cli-kit/src/public/node/upgrade.test.ts @@ -219,7 +219,7 @@ describe('runCLIUpgrade', () => { // Given vi.mocked(currentProcessIsGlobal).mockReturnValue(true) // 'unknown' is returned by inferPackageManagerForGlobalCLI for local installs - vi.mocked(inferPackageManagerForGlobalCLI).mockReturnValue('unknown') + vi.mocked(inferPackageManagerForGlobalCLI).mockReturnValue('unknown' as PackageManager) // When/Then await expect(runCLIUpgrade()).rejects.toThrow('Could not determine the package manager') diff --git a/packages/cli-kit/src/public/node/upgrade.ts b/packages/cli-kit/src/public/node/upgrade.ts index 574e44d89ae..56b00d23fe7 100644 --- a/packages/cli-kit/src/public/node/upgrade.ts +++ b/packages/cli-kit/src/public/node/upgrade.ts @@ -207,7 +207,7 @@ export async function hasBlockingAutoUpgradeNotification(): Promise { // written to the lastShown cache for these notifications. const matching = filterNotifications(notifications, '', ['autoupgrade']) return matching.some((notification) => notification.type === 'error') - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch { return false } diff --git a/packages/cli-kit/src/public/node/version.ts b/packages/cli-kit/src/public/node/version.ts index bf94b5d59f0..a28ba9e44cf 100644 --- a/packages/cli-kit/src/public/node/version.ts +++ b/packages/cli-kit/src/public/node/version.ts @@ -11,7 +11,7 @@ export async function localCLIVersion(directory: string): Promise { } } return undefined - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch { return undefined } diff --git a/packages/cli/bin/bundle.js b/packages/cli/bin/bundle.js index 1f330504e23..a431b46e64b 100644 --- a/packages/cli/bin/bundle.js +++ b/packages/cli/bin/bundle.js @@ -1,4 +1,4 @@ -/* eslint-disable @shopify/cli/specific-imports-in-bootstrap-code, @shopify/cli/module-boundaries */ +/* eslint-disable @shopify/cli/specific-imports-in-bootstrap-code, compat/nx-enforce-module-boundaries */ import {createRequire} from 'module' import {readFileSync} from 'fs' diff --git a/packages/cli/bin/run.js b/packages/cli/bin/run.js index 1d0f1a87fa5..34962ac34c5 100755 --- a/packages/cli/bin/run.js +++ b/packages/cli/bin/run.js @@ -1,6 +1,5 @@ #!/usr/bin/env node - import {enableCompileCache} from 'node:module' if (enableCompileCache) enableCompileCache() diff --git a/packages/cli/src/cli/commands/help.ts b/packages/cli/src/cli/commands/help.ts index c4a6b26d6c4..383e6ba6536 100644 --- a/packages/cli/src/cli/commands/help.ts +++ b/packages/cli/src/cli/commands/help.ts @@ -35,13 +35,13 @@ export default class HelpCommand extends Command { async run(): Promise { const {argv, flags} = await this.parse(HelpCommand) if (flags.json) { - const result = await helpService(this.config, argv, flags['nested-commands']) + const result = await helpService(this.config, argv as string[], flags['nested-commands']) presentHelpResult(result) return } const Help = await loadHelpClass(this.config) const help = new Help(this.config, {all: flags['nested-commands']}) - await help.showHelp(argv) + await help.showHelp(argv as string[]) } } diff --git a/packages/cli/src/cli/help.test.ts b/packages/cli/src/cli/help.test.ts index f6b3765b42f..075af2ef976 100644 --- a/packages/cli/src/cli/help.test.ts +++ b/packages/cli/src/cli/help.test.ts @@ -32,7 +32,11 @@ function renderFlags(flags: Command.Flag.Any[]): [string, string | undefined][] } function renderDescription(command: Partial, maxWidth = 80): string | undefined { - const help = new ShopifyCommandHelp(command as Command.Loadable, {} as Interfaces.Config, {maxWidth}) + const help = new ShopifyCommandHelp( + command as Command.Loadable, + {} as Interfaces.Config, + {maxWidth} as Interfaces.HelpOptions, + ) return (help as unknown as {description: () => string | undefined}).description() } @@ -66,7 +70,11 @@ interface Result { test('uses the default description formatting when there are no code blocks', () => { const command = {summary: 'Return a value.', description: 'A regular command description.'} - const defaultHelp = new CommandHelp(command as Command.Loadable, {} as Interfaces.Config, {maxWidth: 80}) + const defaultHelp = new CommandHelp( + command as Command.Loadable, + {} as Interfaces.Config, + {maxWidth: 80} as Interfaces.HelpOptions, + ) const defaultDescription = (defaultHelp as unknown as {description: () => string | undefined}).description() expect(renderDescription(command)).toBe(defaultDescription) @@ -146,7 +154,11 @@ interface Result { test('renders flags with enough width to keep long env labels intact', () => { // Given - const help = new ShopifyCommandHelp({} as Command.Loadable, {} as Interfaces.Config, {maxWidth: 80}) + const help = new ShopifyCommandHelp( + {} as Command.Loadable, + {} as Interfaces.Config, + {maxWidth: 80} as Interfaces.HelpOptions, + ) const rows = [ [ '--skip-dependencies-installation', diff --git a/packages/cli/src/uncaught-error-handler.ts b/packages/cli/src/uncaught-error-handler.ts index 2c647d867b9..4bb9c03e32d 100644 --- a/packages/cli/src/uncaught-error-handler.ts +++ b/packages/cli/src/uncaught-error-handler.ts @@ -26,7 +26,7 @@ export async function renderUncaughtError(error: unknown): Promise { } else { writeRawError(error) } - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch { writeRawError(error) } diff --git a/packages/e2e/helpers/browser-login.ts b/packages/e2e/helpers/browser-login.ts index d80826aa041..420f8a2646f 100644 --- a/packages/e2e/helpers/browser-login.ts +++ b/packages/e2e/helpers/browser-login.ts @@ -78,7 +78,7 @@ export async function completeLogin(page: Page, loginUrl: string, email: string, try { const btn = page.locator('button[type="submit"]').first() if (await isVisibleWithin(btn, BROWSER_TIMEOUT.long)) await btn.click() - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch (_error) { // No confirmation page — expected } diff --git a/packages/e2e/package.json b/packages/e2e/package.json index e5b9903a47a..119246f80ee 100644 --- a/packages/e2e/package.json +++ b/packages/e2e/package.json @@ -10,6 +10,24 @@ "lint:fix": "nx lint:fix", "type-check": "nx type-check" }, + "eslintConfig": { + "extends": [ + "../../.eslintrc.cjs" + ], + "ignorePatterns": [ + "scripts/" + ], + "rules": { + "no-console": "off", + "import/extensions": [ + "error", + "never", + { + "ignorePackages": true + } + ] + } + }, "devDependencies": { "@iarna/toml": "2.2.5", "@playwright/test": "^1.61.1", diff --git a/packages/e2e/project.json b/packages/e2e/project.json index b1f92bfda1e..cc050bd29ac 100644 --- a/packages/e2e/project.json +++ b/packages/e2e/project.json @@ -17,14 +17,14 @@ "lint": { "executor": "nx:run-commands", "options": { - "command": "pnpm oxlint --config ../../oxlint.json --deny-warnings .", + "command": "pnpm eslint \"setup/**/*.ts\" \"helpers/**/*.ts\" \"tests/**/*.ts\" \"*.ts\"", "cwd": "packages/e2e" } }, "lint:fix": { "executor": "nx:run-commands", "options": { - "command": "pnpm oxlint --config ../../oxlint.json --fix .", + "command": "pnpm eslint 'setup/**/*.ts' 'helpers/**/*.ts' 'tests/**/*.ts' '*.ts' --fix", "cwd": "packages/e2e" } }, diff --git a/packages/e2e/scripts/cleanup-apps.ts b/packages/e2e/scripts/cleanup-apps.ts index c481d416753..586f684119d 100644 --- a/packages/e2e/scripts/cleanup-apps.ts +++ b/packages/e2e/scripts/cleanup-apps.ts @@ -95,7 +95,7 @@ const DASHBOARD_ERROR_PATTERN = /(unprocessable entity|request can't be processe function isAccountsShopifyUrl(rawUrl: string): boolean { try { return new URL(rawUrl).hostname === 'accounts.shopify.com' - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch { return false } @@ -577,7 +577,7 @@ async function uninstallApp(page: Page, appUrl: string, appName: string): Promis try { const uninstalled = await uninstallAppFromStore(page, storeSlug, appName) if (!uninstalled) allUninstalled = false - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch (err) { console.warn(` Failed to uninstall from ${storeSlug}: ${err instanceof Error ? err.message : String(err)}`) allUninstalled = false diff --git a/packages/e2e/scripts/cleanup-stores.ts b/packages/e2e/scripts/cleanup-stores.ts index 1d96ca65b8b..61108caca04 100644 --- a/packages/e2e/scripts/cleanup-stores.ts +++ b/packages/e2e/scripts/cleanup-stores.ts @@ -81,7 +81,7 @@ export interface CleanupStoresOptions { function isAccountsShopifyUrl(rawUrl: string): boolean { try { return new URL(rawUrl).hostname === 'accounts.shopify.com' - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch { return false } @@ -245,7 +245,7 @@ export async function cleanupStores(opts: CleanupStoresOptions = {}): Promise { try { return await findStoresWithBusinessPlatformApi(opts.pattern, opts.orgId) - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch (err) { console.warn( `[cleanup-stores] API discovery failed, falling back to Dev Dashboard UI: ${err instanceof Error ? err.message : err}`, diff --git a/packages/e2e/scripts/prime-browser-auth.ts b/packages/e2e/scripts/prime-browser-auth.ts index 7584f42ac36..6e6ae2cc6cd 100644 --- a/packages/e2e/scripts/prime-browser-auth.ts +++ b/packages/e2e/scripts/prime-browser-auth.ts @@ -47,7 +47,7 @@ interface PrimeBrowserAuthOptions { function isAccountsShopifyUrl(rawUrl: string): boolean { try { return new URL(rawUrl).hostname === 'accounts.shopify.com' - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch { return false } @@ -180,7 +180,7 @@ async function primeCliAuth(page: Page, email: string, password: string, env: No } finally { try { ptyProcess.kill() - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch (_error) { // Process may already be dead. } @@ -190,7 +190,7 @@ async function primeCliAuth(page: Page, email: string, password: string, env: No async function attemptVisitAndHandleAccountPicker(page: Page, url: string, email: string, label: string) { try { await visitAndHandleAccountPicker(page, url, email) - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch (err) { console.warn( `[prime-browser-auth] Browser session prewarm for ${label} failed: ${err instanceof Error ? err.message : err}`, diff --git a/packages/e2e/setup/auth-diagnostics.ts b/packages/e2e/setup/auth-diagnostics.ts index 45ee5f68f94..c3138f78c2d 100644 --- a/packages/e2e/setup/auth-diagnostics.ts +++ b/packages/e2e/setup/auth-diagnostics.ts @@ -127,7 +127,7 @@ export function isExpectedAuthDestination(rawUrl: string, hostname: string, path try { const url = new URL(rawUrl) return url.hostname === hostname && (!pathnamePrefix || url.pathname.startsWith(pathnamePrefix)) - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch { return false } diff --git a/packages/e2e/setup/cli.ts b/packages/e2e/setup/cli.ts index c3ce3ad3888..ad1793d171f 100644 --- a/packages/e2e/setup/cli.ts +++ b/packages/e2e/setup/cli.ts @@ -260,7 +260,7 @@ export const cliFixture = envFixture.extend<{cli: CLIProcess}>({ kill() { try { ptyProcess.kill() - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch (_error) { // Process may already be dead } diff --git a/packages/e2e/setup/global-auth.ts b/packages/e2e/setup/global-auth.ts index a0920191d71..0ac051d63d1 100644 --- a/packages/e2e/setup/global-auth.ts +++ b/packages/e2e/setup/global-auth.ts @@ -30,7 +30,7 @@ import type {IPty} from 'node-pty' function isAccountsShopifyUrl(rawUrl: string): boolean { try { return new URL(rawUrl).hostname === 'accounts.shopify.com' - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch { return false } @@ -179,7 +179,7 @@ async function authenticateOnce({ } finally { try { ptyProcess.kill() - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch (_error) { // Process may already be dead } diff --git a/packages/e2e/setup/teardown.ts b/packages/e2e/setup/teardown.ts index 45e158cacbb..fcfb0aa32f5 100644 --- a/packages/e2e/setup/teardown.ts +++ b/packages/e2e/setup/teardown.ts @@ -63,7 +63,7 @@ export async function teardownAll(ctx: TeardownCtx): Promise { break } log.log(wCtx, `(${attempt}/3) app uninstall attempt failed, app still visible`) - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch (err) { log.log(wCtx, `(${attempt}/3) app uninstall attempt failed: ${err instanceof Error ? err.message : err}`) } @@ -102,7 +102,7 @@ export async function teardownAll(ctx: TeardownCtx): Promise { log.error(wCtx, 'store has apps installed, skipping delete') } } - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch (err) { log.error(wCtx, `store empty state unclear, skipping delete: ${err instanceof Error ? err.message : err}`) } @@ -118,7 +118,7 @@ export async function teardownAll(ctx: TeardownCtx): Promise { log.log(wCtx, deletionConfirmed ? 'store deletion confirmed by CLI' : 'store deletion requested with CLI') storeDeletionRequested = true break - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch (err) { log.log(wCtx, `(${attempt}/3) store deletion failed: ${err instanceof Error ? err.message : err}`) } @@ -164,7 +164,7 @@ export async function teardownAll(ctx: TeardownCtx): Promise { break } log.log(wCtx, `(${attempt}/3) app deletion failed`) - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch (err) { // Fail fast: Delete button stays disabled while installs exist — retries won't help. // cleanup-apps.ts reaps the orphan. diff --git a/packages/eslint-plugin-cli/oxlint-compat-names.js b/packages/eslint-plugin-cli/oxlint-compat-names.js new file mode 100644 index 00000000000..a92402e8ff4 --- /dev/null +++ b/packages/eslint-plugin-cli/oxlint-compat-names.js @@ -0,0 +1,14 @@ +const {rules} = require('./oxlint') + +// Keep existing disable comments valid while using independent implementations. +module.exports = { + meta: {name: '@shopify/cli-compat'}, + rules: { + 'id-length': rules['id-length'], + 'typescript-eslint-naming-convention': rules['naming-convention'], + 'n-prefer-global-console': rules['prefer-global-console'], + 'n-prefer-global-url': rules['prefer-global-url'], + 'no-restricted-syntax': rules['restricted-syntax'], + 'nx-enforce-module-boundaries': rules['module-boundaries'], + }, +} diff --git a/packages/eslint-plugin-cli/oxlint-no-catch-all.js b/packages/eslint-plugin-cli/oxlint-no-catch-all.js new file mode 100644 index 00000000000..1d5f51779a9 --- /dev/null +++ b/packages/eslint-plugin-cli/oxlint-no-catch-all.js @@ -0,0 +1,9 @@ +const {rules} = require('./oxlint') + +// Keep existing disable comments valid while using independent implementations. +module.exports = { + meta: {name: '@shopify/cli-no-catch-all'}, + rules: { + 'no-catch-all': rules['no-catch-all'], + }, +} diff --git a/packages/eslint-plugin-cli/oxlint-rules/naming-convention.js b/packages/eslint-plugin-cli/oxlint-rules/naming-convention.js index f8ef7251e96..0b7ed45f670 100644 --- a/packages/eslint-plugin-cli/oxlint-rules/naming-convention.js +++ b/packages/eslint-plugin-cli/oxlint-rules/naming-convention.js @@ -95,6 +95,8 @@ module.exports = { check(node.id, 'enum') }, TSTypeParameter(node) { + // Preserve existing infer bindings accepted by the previous lint setup. + if (node.parent.type === 'TSInferType') return check(node.name, 'typeParameter') }, Property(node) { diff --git a/packages/eslint-plugin-cli/oxlint-tsdoc.js b/packages/eslint-plugin-cli/oxlint-tsdoc.js new file mode 100644 index 00000000000..36dbe096d18 --- /dev/null +++ b/packages/eslint-plugin-cli/oxlint-tsdoc.js @@ -0,0 +1,9 @@ +const {rules} = require('./oxlint') + +// Keep existing disable comments valid while using independent implementations. +module.exports = { + meta: {name: '@shopify/cli-tsdoc'}, + rules: { + syntax: rules['tsdoc-syntax'], + }, +} diff --git a/packages/eslint-plugin-cli/oxlint.test.js b/packages/eslint-plugin-cli/oxlint.test.js index 390062a6caf..03dda2345ec 100644 --- a/packages/eslint-plugin-cli/oxlint.test.js +++ b/packages/eslint-plugin-cli/oxlint.test.js @@ -7,6 +7,10 @@ const tester = new RuleTester({languageOptions: {sourceType: 'module', parserOpt tester.run('naming-convention', rules['naming-convention'], { valid: [ {code: 'interface Widget {}', options: [{selector: 'typeLike', format: ['PascalCase']}]}, + { + code: 'type Element = TValues extends ReadonlyArray ? Value : never', + options: [{selector: 'typeParameter', format: ['PascalCase'], prefix: ['T']}], + }, { code: 'type Widget = T1', options: [{selector: 'typeParameter', format: ['PascalCase'], prefix: ['T']}], @@ -219,7 +223,7 @@ tester.run('commonjs-redeclarations', rules['no-redeclare'], { ], }) -test('blocks project imports while ESLint and upstream plugins are forbidden', () => { +test('runs independent rules and legacy suppressions without ESLint', () => { const {mkdtempSync, mkdirSync, writeFileSync, rmSync} = require('node:fs') const {tmpdir} = require('node:os') const {join, resolve, dirname} = require('node:path') @@ -253,12 +257,30 @@ test('blocks project imports while ESLint and upstream plugins are forbidden', ( : 'export function read() { return 1 }', ) } + const legacyFile = join(workspace, 'packages', 'app', 'src', 'legacy.ts') + const legacySource = `/** @param value Description. */ +function read(value) { try { run() } catch (error) { log(error) } } +interface widget {}` + writeFileSync( + legacyFile, + `/* eslint-disable compat/typescript-eslint-naming-convention, no-catch-all/no-catch-all, tsdoc/syntax */\n${legacySource}`, + ) writeFileSync( join(workspace, 'oxlint.json'), JSON.stringify({ - jsPlugins: [{name: 'cli', specifier: resolve(__dirname, 'oxlint.js')}], + jsPlugins: [ + {name: 'cli', specifier: resolve(__dirname, 'oxlint.js')}, + {name: 'compat', specifier: resolve(__dirname, 'oxlint-compat-names.js')}, + {name: 'no-catch-all', specifier: resolve(__dirname, 'oxlint-no-catch-all.js')}, + {name: 'tsdoc', specifier: resolve(__dirname, 'oxlint-tsdoc.js')}, + ], categories: {correctness: 'off'}, - rules: {'cli/module-boundaries': 'error'}, + rules: { + 'cli/module-boundaries': 'error', + 'compat/typescript-eslint-naming-convention': ['error', {selector: 'typeLike', format: ['PascalCase']}], + 'no-catch-all/no-catch-all': 'error', + 'tsdoc/syntax': 'error', + }, }), ) const result = spawnSync( @@ -269,6 +291,8 @@ test('blocks project imports while ESLint and upstream plugins are forbidden', ( 'oxlint.json', '--format', 'json', + '--deny-warnings', + '--report-unused-disable-directives', 'packages', ], { @@ -282,6 +306,35 @@ test('blocks project imports while ESLint and upstream plugins are forbidden', ( expect(JSON.parse(result.stdout).diagnostics.map((diagnostic) => diagnostic.code)).toEqual([ 'cli(module-boundaries)', ]) + writeFileSync(legacyFile, legacySource) + const unsuppressed = spawnSync( + process.execPath, + [ + join(dirname(require.resolve('oxlint/package.json')), 'bin/oxlint'), + '--config', + 'oxlint.json', + '--format', + 'json', + 'packages', + ], + { + cwd: workspace, + encoding: 'utf8', + env: {...process.env, NODE_OPTIONS: `--require "${guard.replaceAll('\\', '/')}"`}, + }, + ) + expect(unsuppressed.status, unsuppressed.stdout + unsuppressed.stderr).toBe(1) + expect(unsuppressed.stdout, unsuppressed.stderr).not.toBe('') + expect( + JSON.parse(unsuppressed.stdout) + .diagnostics.map((diagnostic) => diagnostic.code) + .sort(), + ).toEqual([ + 'cli(module-boundaries)', + 'compat(typescript-eslint-naming-convention)', + 'no-catch-all(no-catch-all)', + 'tsdoc(syntax)', + ]) } finally { rmSync(workspace, {recursive: true, force: true, maxRetries: 2}) } diff --git a/packages/plugin-cloudflare/src/install-cloudflared.ts b/packages/plugin-cloudflare/src/install-cloudflared.ts index 501ca092be5..00db20addcc 100644 --- a/packages/plugin-cloudflare/src/install-cloudflared.ts +++ b/packages/plugin-cloudflare/src/install-cloudflared.ts @@ -90,7 +90,7 @@ export default async function install(env = process.env, platform = process.plat outputDebug('cloudflared already installed, skipping') return } - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch { outputDebug('version check failed, reinstalling') } diff --git a/packages/plugin-cloudflare/src/tunnel.ts b/packages/plugin-cloudflare/src/tunnel.ts index b9035e1e98b..c92e03c604f 100644 --- a/packages/plugin-cloudflare/src/tunnel.ts +++ b/packages/plugin-cloudflare/src/tunnel.ts @@ -33,7 +33,7 @@ export async function hookStart(port: number): Promise { const client = new TunnelClientInstance(port) await client.startTunnel() return ok(client) - // eslint-disable-next-line @shopify/cli/no-catch-all, @typescript-eslint/no-explicit-any + // eslint-disable-next-line no-catch-all/no-catch-all, @typescript-eslint/no-explicit-any } catch (error: any) { const tunnelError = new TunnelError('unknown', error.message) return err(tunnelError) @@ -55,7 +55,7 @@ class TunnelClientInstance implements TunnelClient { try { await install() this.tunnel() - // eslint-disable-next-line @shopify/cli/no-catch-all, @typescript-eslint/no-explicit-any + // eslint-disable-next-line no-catch-all/no-catch-all, @typescript-eslint/no-explicit-any } catch (error: any) { this.currentStatus = {status: 'error', message: error.message, tryMessage: whatToTry()} } diff --git a/packages/store/src/cli/commands/store/create/dev.test.ts b/packages/store/src/cli/commands/store/create/dev.test.ts index d62ae9d5183..3ab37c1729f 100644 --- a/packages/store/src/cli/commands/store/create/dev.test.ts +++ b/packages/store/src/cli/commands/store/create/dev.test.ts @@ -131,9 +131,9 @@ describe('store create dev command', () => { }) test('rejects an invalid --country value without calling the service', async () => { - const mockExit = vi.spyOn(process, 'exit').mockImplementation(() => { + const mockExit = vi.spyOn(process, 'exit').mockImplementation((() => { throw new Error('process.exit') - }) + }) as never) await expect( StoreCreateDev.run([ @@ -235,9 +235,9 @@ describe('store create dev command', () => { return all[index - 1] !== `--${missingFlag}` }, ) - const mockExit = vi.spyOn(process, 'exit').mockImplementation(() => { + const mockExit = vi.spyOn(process, 'exit').mockImplementation((() => { throw new Error('process.exit') - }) + }) as never) await expect(StoreCreateDev.run(argv)).rejects.toThrow() expect(createDevStore).not.toHaveBeenCalled() @@ -258,9 +258,9 @@ describe('store create dev command', () => { test('outputs structured JSON error when --json is active and service throws AbortError', async () => { vi.mocked(createDevStore).mockRejectedValueOnce(new AbortError('Something went wrong')) - const mockExit = vi.spyOn(process, 'exit').mockImplementation(() => { + const mockExit = vi.spyOn(process, 'exit').mockImplementation((() => { throw new Error('process.exit') - }) + }) as never) await expect( StoreCreateDev.run(['--name', 'my-test-store', '--plan', 'plus', '--organization-id', '12345', '--json']), diff --git a/packages/store/src/cli/commands/store/delete.test.ts b/packages/store/src/cli/commands/store/delete.test.ts index fa65ec6a2ff..1cc99f4f6ce 100644 --- a/packages/store/src/cli/commands/store/delete.test.ts +++ b/packages/store/src/cli/commands/store/delete.test.ts @@ -125,9 +125,9 @@ describe('store delete command', () => { test('outputs structured JSON error when --json is active and --force is missing in a non-interactive run', async () => { vi.mocked(isTTY).mockReturnValue(false) - const mockExit = vi.spyOn(process, 'exit').mockImplementation(() => { + const mockExit = vi.spyOn(process, 'exit').mockImplementation((() => { throw new Error('process.exit') - }) + }) as never) await expect( StoreDelete.run(['--store', 'my-store.myshopify.com', '--organization-id', '12345', '--json']), @@ -150,9 +150,9 @@ describe('store delete command', () => { test('outputs structured JSON error when --json is active and service throws AbortError', async () => { vi.mocked(deleteDevStore).mockRejectedValueOnce(new AbortError('Something went wrong')) - const mockExit = vi.spyOn(process, 'exit').mockImplementation(() => { + const mockExit = vi.spyOn(process, 'exit').mockImplementation((() => { throw new Error('process.exit') - }) + }) as never) await expect( StoreDelete.run(['--store', 'my-store.myshopify.com', '--organization-id', '12345', '--json']), @@ -174,9 +174,9 @@ describe('store delete command', () => { test('outputs structured JSON error when --json is active and organization resolution throws AbortError', async () => { vi.mocked(resolveOrganizationForStore).mockRejectedValueOnce(new AbortError('Could not resolve organization')) - const mockExit = vi.spyOn(process, 'exit').mockImplementation(() => { + const mockExit = vi.spyOn(process, 'exit').mockImplementation((() => { throw new Error('process.exit') - }) + }) as never) await expect(StoreDelete.run(['--store', 'my-store.myshopify.com', '--json'])).rejects.toThrow('process.exit') diff --git a/packages/store/src/cli/services/store/auth/existing-scopes.test.ts b/packages/store/src/cli/services/store/auth/existing-scopes.test.ts index 454fe604009..836ecf1958c 100644 --- a/packages/store/src/cli/services/store/auth/existing-scopes.test.ts +++ b/packages/store/src/cli/services/store/auth/existing-scopes.test.ts @@ -54,10 +54,10 @@ describe('resolveExistingStoreAuthScopes', () => { refreshToken: 'fresh-refresh-token', scopes: ['read_orders'], acquiredAt: '2026-04-02T00:00:00.000Z', - }) + } as any) vi.mocked(graphqlRequest).mockResolvedValue({ currentAppInstallation: {accessScopes: [{handle: 'read_products'}, {handle: 'read_customers'}]}, - }) + } as any) await expect(resolveExistingStoreAuthScopes('shop.myshopify.com')).resolves.toEqual({ scopes: ['read_products', 'read_customers'], @@ -111,7 +111,7 @@ describe('resolveExistingStoreAuthScopes', () => { refreshToken: 'fresh-refresh-token', scopes: ['read_orders'], acquiredAt: '2026-04-02T00:00:00.000Z', - }) + } as any) const scopeLookupError = new Error('GraphQL Error (Code: 401)') Object.assign(scopeLookupError, { response: { @@ -153,10 +153,10 @@ describe('resolveExistingStoreAuthScopes', () => { refreshToken: 'fresh-refresh-token', scopes: ['read_orders'], acquiredAt: '2026-04-02T00:00:00.000Z', - }) + } as any) vi.mocked(graphqlRequest).mockResolvedValue({ currentAppInstallation: undefined, - }) + } as any) await expect(resolveExistingStoreAuthScopes('shop.myshopify.com')).resolves.toEqual({ scopes: ['read_orders'], diff --git a/packages/store/src/cli/services/store/auth/recovery.test.ts b/packages/store/src/cli/services/store/auth/recovery.test.ts index 7aee215c0cc..add964a805e 100644 --- a/packages/store/src/cli/services/store/auth/recovery.test.ts +++ b/packages/store/src/cli/services/store/auth/recovery.test.ts @@ -46,7 +46,7 @@ describe('throwStoredStoreAuthError', () => { let captured: AbortError | undefined try { throwStoredStoreAuthError(SHOP) - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch (error) { captured = error as AbortError } @@ -65,7 +65,7 @@ describe('throwReauthenticateStoreAuthError', () => { let captured: AbortError | undefined try { throwReauthenticateStoreAuthError('Custom message.', standardSession()) - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch (error) { captured = error as AbortError } @@ -86,7 +86,7 @@ describe('throwReauthenticateStoreAuthError', () => { let captured: AbortError | undefined try { throwReauthenticateStoreAuthError('Custom message.', previewSession()) - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch (error) { captured = error as AbortError } @@ -109,7 +109,7 @@ describe('throwStoredAuthInvalidError', () => { let captured: AbortError | undefined try { throwStoredAuthInvalidError(standardSession()) - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch (error) { captured = error as AbortError } @@ -130,7 +130,7 @@ describe('throwStoredAuthInvalidError', () => { let captured: AbortError | undefined try { throwStoredAuthInvalidError(previewSession()) - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch (error) { captured = error as AbortError } diff --git a/packages/store/src/cli/services/store/auth/result.test.ts b/packages/store/src/cli/services/store/auth/result.test.ts index b92de8f3f8a..478ee3b30f6 100644 --- a/packages/store/src/cli/services/store/auth/result.test.ts +++ b/packages/store/src/cli/services/store/auth/result.test.ts @@ -7,14 +7,14 @@ function captureStandardStreams() { const stdout: string[] = [] const stderr: string[] = [] - const stdoutSpy = vi.spyOn(process.stdout, 'write').mockImplementation((chunk: string | Uint8Array) => { + const stdoutSpy = vi.spyOn(process.stdout, 'write').mockImplementation(((chunk: string | Uint8Array) => { stdout.push(typeof chunk === 'string' ? chunk : Buffer.from(chunk).toString('utf8')) return true - }) - const stderrSpy = vi.spyOn(process.stderr, 'write').mockImplementation((chunk: string | Uint8Array) => { + }) as typeof process.stdout.write) + const stderrSpy = vi.spyOn(process.stderr, 'write').mockImplementation(((chunk: string | Uint8Array) => { stderr.push(typeof chunk === 'string' ? chunk : Buffer.from(chunk).toString('utf8')) return true - }) + }) as typeof process.stderr.write) // Vitest intercepts console.warn; use Node's console to exercise the captured streams. const warnSpy = vi.spyOn(console, 'warn').mockImplementation(new Console(process.stdout, process.stderr).warn) diff --git a/packages/store/src/cli/services/store/auth/token-client.test.ts b/packages/store/src/cli/services/store/auth/token-client.test.ts index 4791f1def5e..600ea9022b2 100644 --- a/packages/store/src/cli/services/store/auth/token-client.test.ts +++ b/packages/store/src/cli/services/store/auth/token-client.test.ts @@ -127,7 +127,7 @@ describe('token client', () => { test('fetchCurrentStoreAuthScopes returns current scope handles', async () => { vi.mocked(graphqlRequest).mockResolvedValue({ currentAppInstallation: {accessScopes: [{handle: 'read_products'}, {handle: 'read_orders'}]}, - }) + } as any) await expect(fetchCurrentStoreAuthScopes({store: 'shop.myshopify.com', accessToken: 'token'})).resolves.toEqual([ 'read_products', @@ -155,7 +155,7 @@ describe('token client', () => { test('fetchCurrentStoreAuthScopes throws on invalid response shape', async () => { vi.mocked(graphqlRequest).mockResolvedValue({ currentAppInstallation: undefined, - }) + } as any) await expect(fetchCurrentStoreAuthScopes({store: 'shop.myshopify.com', accessToken: 'token'})).rejects.toThrow( 'Shopify did not return currentAppInstallation.accessScopes.', diff --git a/packages/store/src/cli/services/store/create/preview/index.ts b/packages/store/src/cli/services/store/create/preview/index.ts index f51dca1e4f1..6646ad95313 100644 --- a/packages/store/src/cli/services/store/create/preview/index.ts +++ b/packages/store/src/cli/services/store/create/preview/index.ts @@ -75,7 +75,7 @@ async function persistPreviewStoreSession( dependencies.setLastSeenUserId(userId) try { await dependencies.recordStoreFqdnMetadata(response.shop.domain, true, response.shop.id) - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch { // Store metadata is best-effort; credentials and access URL are already persisted. } diff --git a/packages/store/src/cli/services/store/delete/dev.test.ts b/packages/store/src/cli/services/store/delete/dev.test.ts index c59a91a4851..20eeacbbdc6 100644 --- a/packages/store/src/cli/services/store/delete/dev.test.ts +++ b/packages/store/src/cli/services/store/delete/dev.test.ts @@ -280,17 +280,17 @@ function mockBusinessPlatformRequests(options: {mutationResult?: unknown; pollSh const variables = request.variables as Record if ('search' in variables) { - return defaultShopLookupResult + return defaultShopLookupResult as never } if ('storeFqdn' in variables) { - return mutationResult + return mutationResult as never } if ('id' in variables) { const shop = pollShops[Math.min(pollIndex, pollShops.length - 1)] pollIndex++ - return {organization: {accessibleShop: shop}} + return {organization: {accessibleShop: shop}} as never } throw new Error(`Unexpected request variables: ${JSON.stringify(variables)}`) diff --git a/packages/store/src/cli/services/store/info/index.ts b/packages/store/src/cli/services/store/info/index.ts index e976767785c..d31cf2e2b2c 100644 --- a/packages/store/src/cli/services/store/info/index.ts +++ b/packages/store/src/cli/services/store/info/index.ts @@ -185,7 +185,7 @@ async function safeFetchOrganizationShop( } try { return await fetchOrganizationShop({store, organizationId: ctx.owningOrg.id, noPrompt: options.noPrompt}) - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch (error) { outputDebug(`BP Organizations shop lookup failed: ${error instanceof Error ? error.message : String(error)}`) return undefined @@ -223,7 +223,7 @@ function buildAdminResult(args: BuildAdminResultArgs): StoreInfoResult { adminUrl: buildAdminUrl(extractMyshopifyHandle(subdomain)), } - return {...compact(fields), subdomain} + return {...compact(fields), subdomain} as StoreInfoResult } interface BuildBusinessPlatformResultArgs { @@ -247,7 +247,7 @@ function buildBusinessPlatformResult(args: BuildBusinessPlatformResultArgs): Sto adminUrl: buildAdminUrl(extractMyshopifyHandle(store)), } - return {...compact(fields), subdomain: store} + return {...compact(fields), subdomain: store} as StoreInfoResult } function buildPreviewStoreResult(args: { @@ -268,7 +268,7 @@ function buildPreviewStoreResult(args: { // `authScopes` is always present for preview stores (even when empty) so consumers can rely on the // key to learn which Admin API scopes are preapproved. There's no way to grant more scopes later. - return {...compact(fields), subdomain: store, authScopes: previewSession.scopes} + return {...compact(fields), subdomain: store, authScopes: previewSession.scopes} as StoreInfoResult } // The BP `ShopifyShopID` scalar is the bare numeric id; the admin GID is derived locally. diff --git a/packages/store/src/cli/utilities/store-lookup/destinations.test.ts b/packages/store/src/cli/utilities/store-lookup/destinations.test.ts index 217e1561b3d..1f96c724266 100644 --- a/packages/store/src/cli/utilities/store-lookup/destinations.test.ts +++ b/packages/store/src/cli/utilities/store-lookup/destinations.test.ts @@ -26,7 +26,7 @@ describe('fetchDestinationsContext', () => { test('throws AbortError when no destination matches the domain', async () => { vi.mocked(businessPlatformRequestDoc).mockResolvedValueOnce({ currentUserAccount: {destinations: {nodes: []}}, - }) + } as never) const err = await fetchDestinationsContext({store: SHOP}).catch((error: unknown) => error) expect(err).toBeInstanceOf(AbortError) @@ -45,7 +45,7 @@ describe('fetchDestinationsContext', () => { ], }, }, - }) + } as never) const err = await fetchDestinationsContext({store: SHOP}).catch((error: unknown) => error) expect(err).toBeInstanceOf(AbortError) @@ -56,10 +56,10 @@ describe('fetchDestinationsContext', () => { vi.mocked(businessPlatformRequestDoc) .mockResolvedValueOnce({ currentUserAccount: {destinations: {nodes: [destinationNode()]}}, - }) + } as never) .mockResolvedValueOnce({ currentUserAccount: {organizationForDestination: {id: 'gid', name: 'Org'}}, - }) + } as never) await fetchDestinationsContext({store: SHOP}) @@ -75,10 +75,10 @@ describe('fetchDestinationsContext', () => { nodes: [destinationNode({primaryDomain: `https://${devStore}`, webUrl: `https://${devStore}/admin`})], }, }, - }) + } as never) .mockResolvedValueOnce({ currentUserAccount: {organizationForDestination: {id: 'gid', name: 'Org'}}, - }) + } as never) await fetchDestinationsContext({store: devStore}) @@ -89,7 +89,7 @@ describe('fetchDestinationsContext', () => { vi.mocked(businessPlatformRequestDoc) .mockResolvedValueOnce({ currentUserAccount: {destinations: {nodes: [destinationNode()]}}, - }) + } as never) .mockResolvedValueOnce({ currentUserAccount: { organizationForDestination: { @@ -97,7 +97,7 @@ describe('fetchDestinationsContext', () => { name: 'Acme Org', }, }, - }) + } as never) const ctx = await fetchDestinationsContext({store: SHOP}) @@ -111,7 +111,7 @@ describe('fetchDestinationsContext', () => { vi.mocked(businessPlatformRequestDoc) .mockResolvedValueOnce({ currentUserAccount: {destinations: {nodes: [destinationNode()]}}, - }) + } as never) .mockRejectedValueOnce(new Error('boom')) const ctx = await fetchDestinationsContext({store: SHOP}) @@ -123,10 +123,10 @@ describe('fetchDestinationsContext', () => { vi.mocked(businessPlatformRequestDoc) .mockResolvedValueOnce({ currentUserAccount: {destinations: {nodes: [destinationNode()]}}, - }) + } as never) .mockResolvedValueOnce({ currentUserAccount: {organizationForDestination: null}, - }) + } as never) const ctx = await fetchDestinationsContext({store: SHOP}) @@ -136,10 +136,10 @@ describe('fetchDestinationsContext', () => { test('uses a provided token without re-authenticating', async () => { vi.mocked(businessPlatformRequestDoc).mockResolvedValueOnce({ currentUserAccount: {destinations: {nodes: [destinationNode()]}}, - }) + } as never) vi.mocked(businessPlatformRequestDoc).mockResolvedValueOnce({ currentUserAccount: {organizationForDestination: {id: 'gid', name: 'O'}}, - }) + } as never) await fetchDestinationsContext({store: SHOP, token: 'preset'}) @@ -150,10 +150,10 @@ describe('fetchDestinationsContext', () => { test('passes noPrompt through when authenticating', async () => { vi.mocked(businessPlatformRequestDoc).mockResolvedValueOnce({ currentUserAccount: {destinations: {nodes: [destinationNode()]}}, - }) + } as never) vi.mocked(businessPlatformRequestDoc).mockResolvedValueOnce({ currentUserAccount: {organizationForDestination: {id: 'gid', name: 'O'}}, - }) + } as never) await fetchDestinationsContext({store: SHOP, noPrompt: true}) diff --git a/packages/store/src/cli/utilities/store-lookup/destinations.ts b/packages/store/src/cli/utilities/store-lookup/destinations.ts index ea57ea18ab5..a9b97dd8bf4 100644 --- a/packages/store/src/cli/utilities/store-lookup/destinations.ts +++ b/packages/store/src/cli/utilities/store-lookup/destinations.ts @@ -87,7 +87,7 @@ async function fetchOwningOrg( } const decodedId = org.id ? numericIdFromEncodedGid(org.id) : undefined return {name: org.name, ...(decodedId ? {id: decodedId} : {})} - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch (error) { outputDebug(`Failed to resolve owning organization: ${errorMessage(error)}`) return undefined diff --git a/packages/store/src/cli/utilities/store-lookup/organization-shop.test.ts b/packages/store/src/cli/utilities/store-lookup/organization-shop.test.ts index 1972fe16614..3d03fbd51cc 100644 --- a/packages/store/src/cli/utilities/store-lookup/organization-shop.test.ts +++ b/packages/store/src/cli/utilities/store-lookup/organization-shop.test.ts @@ -35,7 +35,7 @@ describe('fetchOrganizationShop', () => { name: 'Acme', accessibleShops: {edges: [{node: shopNode()}]}, }, - }) + } as never) const shop = await fetchOrganizationShop({store: SHOP, organizationId: ORG_ID}) expect(shop.name).toBe('My Shop') @@ -55,7 +55,7 @@ describe('fetchOrganizationShop', () => { name: 'Acme', accessibleShops: {edges: [{node: shopNode({primaryDomain: 'https://other.myshopify.com'})}]}, }, - }) + } as never) await expect(fetchOrganizationShop({store: SHOP, organizationId: ORG_ID})).rejects.toBeInstanceOf(AbortError) }) @@ -63,7 +63,7 @@ describe('fetchOrganizationShop', () => { test('passes organizationId and search variable to the request', async () => { vi.mocked(businessPlatformOrganizationsRequestDoc).mockResolvedValueOnce({ organization: {id: 'gid', name: 'Acme', accessibleShops: {edges: [{node: shopNode()}]}}, - }) + } as never) await fetchOrganizationShop({store: SHOP, organizationId: ORG_ID, token: 'preset'}) @@ -77,7 +77,7 @@ describe('fetchOrganizationShop', () => { test('passes noPrompt through when authenticating', async () => { vi.mocked(businessPlatformOrganizationsRequestDoc).mockResolvedValueOnce({ organization: {id: 'gid', name: 'Acme', accessibleShops: {edges: [{node: shopNode()}]}}, - }) + } as never) await fetchOrganizationShop({store: SHOP, organizationId: ORG_ID, noPrompt: true}) @@ -85,7 +85,7 @@ describe('fetchOrganizationShop', () => { }) test('throws when organization is missing', async () => { - vi.mocked(businessPlatformOrganizationsRequestDoc).mockResolvedValueOnce({organization: null}) + vi.mocked(businessPlatformOrganizationsRequestDoc).mockResolvedValueOnce({organization: null} as never) await expect(fetchOrganizationShop({store: SHOP, organizationId: ORG_ID})).rejects.toBeInstanceOf(AbortError) }) }) diff --git a/packages/store/src/cli/utilities/store-lookup/organization.ts b/packages/store/src/cli/utilities/store-lookup/organization.ts index 87e8573f78b..752e7c1fcd1 100644 --- a/packages/store/src/cli/utilities/store-lookup/organization.ts +++ b/packages/store/src/cli/utilities/store-lookup/organization.ts @@ -26,7 +26,7 @@ export async function findStoreOwningOrganization( } return {id: owningOrganization.id, businessName: owningOrganization.name} - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch (error) { outputDebug(`Could not infer the owning organization for ${store}: ${errorMessage(error)}`) return undefined diff --git a/packages/theme/src/cli/services/dev.test.ts b/packages/theme/src/cli/services/dev.test.ts index 3ac70081992..c4810488bdf 100644 --- a/packages/theme/src/cli/services/dev.test.ts +++ b/packages/theme/src/cli/services/dev.test.ts @@ -370,7 +370,7 @@ describe('dev() Ctrl-C analytics', () => { const exitOrder = exitSpy.mock.invocationCallOrder[0]! expect(reportOrder).toBeLessThan(exitOrder) - await reportDevAnalytics(mockConfig, adminSession) + await reportDevAnalytics(mockConfig, adminSession as any) expect(reportAnalyticsEvent).toHaveBeenCalledTimes(1) }) diff --git a/packages/theme/src/cli/services/dev.ts b/packages/theme/src/cli/services/dev.ts index 2c50f44a65c..309211a7316 100644 --- a/packages/theme/src/cli/services/dev.ts +++ b/packages/theme/src/cli/services/dev.ts @@ -194,7 +194,7 @@ export async function reportDevAnalytics(config: Config, session: AdminSession): await addPublicMetadata(() => ({store_fqdn_hash: hashString(session.storeFqdn)})) await addSensitiveMetadata(() => ({store_fqdn: session.storeFqdn})) await reportAnalyticsEvent({config, exitMode: 'ok'}) - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch (_error) { // Analytics must never block exit. } diff --git a/packages/theme/src/cli/services/publish.ts b/packages/theme/src/cli/services/publish.ts index ee7e1fb2680..008976ce45f 100644 --- a/packages/theme/src/cli/services/publish.ts +++ b/packages/theme/src/cli/services/publish.ts @@ -2,6 +2,7 @@ import {themeComponent} from '../utilities/theme-ui.js' import {findOrSelectTheme} from '../utilities/theme-selector.js' import {themePublish} from '@shopify/cli-kit/node/themes/api' import {themePreviewUrl} from '@shopify/cli-kit/node/themes/urls' +import {Theme} from '@shopify/cli-kit/node/themes/types' import {renderConfirmationPrompt, renderSuccess} from '@shopify/cli-kit/node/ui' import {AdminSession} from '@shopify/cli-kit/node/session' @@ -21,7 +22,7 @@ export async function publish(adminSession: AdminSession, options: PublishServic }, }) - const previewUrl = themePreviewUrl({...themeToPublish, role: 'live'}, adminSession) + const previewUrl = themePreviewUrl({...themeToPublish, role: 'live'} as Theme, adminSession) if (!options.force && !multiEnvironment) { const accept = await renderConfirmationPrompt({ diff --git a/packages/theme/src/cli/services/push.ts b/packages/theme/src/cli/services/push.ts index 1624fedb38e..ff2c42b517c 100644 --- a/packages/theme/src/cli/services/push.ts +++ b/packages/theme/src/cli/services/push.ts @@ -1,4 +1,4 @@ -/* eslint-disable @shopify/cli/tsdoc-syntax */ +/* eslint-disable tsdoc/syntax */ import {hasRequiredThemeDirectories, mountThemeFileSystem} from '../utilities/theme-fs.js' import {uploadTheme} from '../utilities/theme-uploader.js' import {ensureDirectoryConfirmed, themeComponent} from '../utilities/theme-ui.js' diff --git a/packages/theme/src/cli/utilities/notifier.ts b/packages/theme/src/cli/utilities/notifier.ts index 9073ab19181..c47736eefa4 100644 --- a/packages/theme/src/cli/utilities/notifier.ts +++ b/packages/theme/src/cli/utilities/notifier.ts @@ -30,7 +30,7 @@ export class Notifier { } else { await this.notifyFile(fileName) } - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch (error) { recordError(error) @@ -64,7 +64,7 @@ export class Notifier { try { const parsedUrl = new URL(url) return parsedUrl.protocol === 'http:' || parsedUrl.protocol === 'https:' - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch (error) { return false } diff --git a/packages/theme/src/cli/utilities/theme-command.ts b/packages/theme/src/cli/utilities/theme-command.ts index 1d8e94605a8..da8b70b23a9 100644 --- a/packages/theme/src/cli/utilities/theme-command.ts +++ b/packages/theme/src/cli/utilities/theme-command.ts @@ -318,7 +318,7 @@ export default abstract class ThemeCommand extends Command { } }) - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch (error) { if (error instanceof Error) { error.message = `Environment ${environment} failed: \n\n${error.message}` diff --git a/packages/theme/src/cli/utilities/theme-environment/crawler-signature.ts b/packages/theme/src/cli/utilities/theme-environment/crawler-signature.ts index d5d0ccc65e3..afd65ca908b 100644 --- a/packages/theme/src/cli/utilities/theme-environment/crawler-signature.ts +++ b/packages/theme/src/cli/utilities/theme-environment/crawler-signature.ts @@ -133,7 +133,7 @@ export async function fetchOrCreateCrawlerSignatureHeaders( ) return headers - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch (error) { const message = error instanceof Error ? error.message : String(error) outputDebug(`Could not obtain crawler signature headers; continuing without them. ${message}`) diff --git a/packages/theme/src/cli/utilities/theme-environment/host-validation.test.ts b/packages/theme/src/cli/utilities/theme-environment/host-validation.test.ts index ef99162d489..6b0db7448c7 100644 --- a/packages/theme/src/cli/utilities/theme-environment/host-validation.test.ts +++ b/packages/theme/src/cli/utilities/theme-environment/host-validation.test.ts @@ -63,7 +63,7 @@ describe('createHostValidationHandler', () => { cidr: '192.168.1.50/24', }, ], - }) + } as ReturnType) }) const buildHandler = () => createHostValidationHandler('0.0.0.0', 9292) diff --git a/packages/theme/src/cli/utilities/theme-environment/proxy.test.ts b/packages/theme/src/cli/utilities/theme-environment/proxy.test.ts index c2aee7ec9e0..4e1a56d8b21 100644 --- a/packages/theme/src/cli/utilities/theme-environment/proxy.test.ts +++ b/packages/theme/src/cli/utilities/theme-environment/proxy.test.ts @@ -129,7 +129,7 @@ describe('dev proxy', () => { const standardEventsCtx = { ...ctx, options: {...ctx.options, standardEventsDevBundle: true}, - } + } as unknown as DevServerContext const content = ` const runtimeUrl = "${standardEventsRuntimeUrl}"; import("${standardEventsRuntimeUrl}"); @@ -274,7 +274,7 @@ describe('dev proxy', () => { const standardEventsCtx = { ...ctx, options: {...ctx.options, standardEventsInspector: true}, - } + } as unknown as DevServerContext const renderingResponse = new Response('') @@ -289,7 +289,7 @@ describe('dev proxy', () => { const standardEventsCtx = { ...ctx, options: {...ctx.options, standardEventsInspector: true}, - } + } as unknown as DevServerContext const renderingResponse = new Response( ``, diff --git a/packages/theme/src/cli/utilities/theme-environment/storefront-password-prompt.test.ts b/packages/theme/src/cli/utilities/theme-environment/storefront-password-prompt.test.ts index 90c0292b1db..3bc0e9296b1 100644 --- a/packages/theme/src/cli/utilities/theme-environment/storefront-password-prompt.test.ts +++ b/packages/theme/src/cli/utilities/theme-environment/storefront-password-prompt.test.ts @@ -118,7 +118,7 @@ describe('ensureValidPassword', () => { // Given vi.mocked(isStorefrontPasswordProtected).mockResolvedValue(true) vi.mocked(isStorefrontPasswordCorrect).mockResolvedValue(true) - vi.mocked(getThemeStore).mockReturnValue(undefined) + vi.mocked(getThemeStore).mockReturnValue(undefined as any) // When await ensureValidPassword('testPassword', 'test-store') diff --git a/packages/theme/src/cli/utilities/theme-fs.test.ts b/packages/theme/src/cli/utilities/theme-fs.test.ts index e020ac01214..66d7c1704f9 100644 --- a/packages/theme/src/cli/utilities/theme-fs.test.ts +++ b/packages/theme/src/cli/utilities/theme-fs.test.ts @@ -1162,7 +1162,7 @@ describe('theme-fs', () => { } // When - await themeFileSystem.write(asset) + await themeFileSystem.write(asset as any) // Then await expect(readFile(joinPath(root, 'sections/announcement-bar.liquid'))).resolves.toBe(asset.value) diff --git a/packages/ui-extensions-server-kit/src/ExtensionServerClient/ExtensionServerClient.ts b/packages/ui-extensions-server-kit/src/ExtensionServerClient/ExtensionServerClient.ts index 8139c23bb83..507bfb5df73 100644 --- a/packages/ui-extensions-server-kit/src/ExtensionServerClient/ExtensionServerClient.ts +++ b/packages/ui-extensions-server-kit/src/ExtensionServerClient/ExtensionServerClient.ts @@ -50,7 +50,7 @@ export class ExtensionServerClient implements ExtensionServer.Client { const optionsChanged = JSON.stringify(newOptions) !== JSON.stringify(this.options) if (optionsChanged) { - this.options = newOptions + this.options = newOptions as ExtensionServer.Options this.setupConnection(true) } @@ -75,7 +75,7 @@ export class ExtensionServerClient implements ExtensionServer.Client { event: TEvent, data: ExtensionServer.OutboundPersistEvents[TEvent], ): void { - if (this.EVENT_THAT_WILL_MUTATE_THE_SERVER.includes(event)) { + if (this.EVENT_THAT_WILL_MUTATE_THE_SERVER.includes(event as string)) { if (!this.options.locales) { return this.connection?.send(JSON.stringify({event, data})) } @@ -128,7 +128,7 @@ export class ExtensionServerClient implements ExtensionServer.Client { const event = args[0] const data = args.length > 1 ? args[1] : undefined - if (this.EVENT_THAT_WILL_MUTATE_THE_SERVER.includes(event)) { + if (this.EVENT_THAT_WILL_MUTATE_THE_SERVER.includes(event as string)) { return console.warn( `You tried to use "emit" with a the "${event}" event. Please use the "persist" method instead to persist changes to the server.`, ) @@ -178,7 +178,7 @@ export class ExtensionServerClient implements ExtensionServer.Client { this.listeners[event]?.forEach((listener) => { listener({...typedData, extensions: this._getLocalizedExtensions(filteredExtensions)}) }) - // eslint-disable-next-line @shopify/cli/no-catch-all + // eslint-disable-next-line no-catch-all/no-catch-all } catch (err) { console.error( `[ExtensionServer] Something went wrong while parsing a server message:`, diff --git a/packages/ui-extensions-server-kit/src/context/constants.ts b/packages/ui-extensions-server-kit/src/context/constants.ts index e3554aa1d5f..a5ee78f7118 100644 --- a/packages/ui-extensions-server-kit/src/context/constants.ts +++ b/packages/ui-extensions-server-kit/src/context/constants.ts @@ -1,6 +1,7 @@ import {ExtensionServerClient} from '../ExtensionServerClient' import {INITIAL_STATE} from '../state' import {noop} from '../utilities' +import {ExtensionServer} from '../ExtensionServerClient/server-types.js' import {createContext} from 'react' import type {ExtensionServerContext} from './types' @@ -9,7 +10,7 @@ const DEFAULT_VALUE: ExtensionServerContext = { connect: noop, dispatch: noop, state: INITIAL_STATE, - client: new ExtensionServerClient(), + client: new ExtensionServerClient() as ExtensionServer.Client, } export const extensionServerContext = createContext(DEFAULT_VALUE) diff --git a/packages/ui-extensions-server-kit/src/testing/extensions.ts b/packages/ui-extensions-server-kit/src/testing/extensions.ts index 07f98337f64..6821e4d1c2d 100644 --- a/packages/ui-extensions-server-kit/src/testing/extensions.ts +++ b/packages/ui-extensions-server-kit/src/testing/extensions.ts @@ -57,7 +57,7 @@ export function mockExtension(obj: DeepPartial = {}): Extensio supportedFeatures: obj.supportedFeatures as any, localization: obj.localization as any, metafields: obj.metafields as any, - authenticatedRedirectStartUrl: obj.authenticatedRedirectStartUrl, + authenticatedRedirectStartUrl: obj.authenticatedRedirectStartUrl as any, authenticatedRedirectRedirectUrls: obj.authenticatedRedirectRedirectUrls as any, settings: { fields: [ diff --git a/packages/ui-extensions-server-kit/src/utilities/replaceUpdated.test.ts b/packages/ui-extensions-server-kit/src/utilities/replaceUpdated.test.ts index ddbc05cd746..90b56096d23 100644 --- a/packages/ui-extensions-server-kit/src/utilities/replaceUpdated.test.ts +++ b/packages/ui-extensions-server-kit/src/utilities/replaceUpdated.test.ts @@ -1,4 +1,4 @@ -/* eslint-disable @shopify/cli/id-length */ +/* eslint-disable compat/id-length */ import {replaceUpdated} from './replaceUpdated' describe('replaceUpdated', () => { diff --git a/packages/ui-extensions-server-kit/src/utilities/set.test.ts b/packages/ui-extensions-server-kit/src/utilities/set.test.ts index e79927bc845..832183f1da2 100644 --- a/packages/ui-extensions-server-kit/src/utilities/set.test.ts +++ b/packages/ui-extensions-server-kit/src/utilities/set.test.ts @@ -1,4 +1,4 @@ -/* eslint-disable @shopify/cli/id-length */ +/* eslint-disable compat/id-length */ import {set} from './set' describe('set()', () => { From d9a3da01fe15fb12288754021d7e18fb339a638c Mon Sep 17 00:00:00 2001 From: Gonzalo Riestra Date: Thu, 1 Oct 2026 17:49:33 +0200 Subject: [PATCH 04/10] Preserve generated GraphQL import spacing --- .../src/cli/api/graphql/app-dev/generated/dev-session-create.ts | 2 +- .../src/cli/api/graphql/app-dev/generated/dev-session-update.ts | 2 +- .../app-management/generated/active-app-release-from-api-key.ts | 2 +- .../api/graphql/app-management/generated/active-app-release.ts | 2 +- .../api/graphql/app-management/generated/app-version-by-id.ts | 2 +- .../api/graphql/app-management/generated/app-version-by-tag.ts | 2 +- .../api/graphql/app-management/generated/create-app-version.ts | 2 +- .../src/cli/api/graphql/app-management/generated/create-app.ts | 2 +- .../cli/api/graphql/app-management/generated/release-version.ts | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/packages/app/src/cli/api/graphql/app-dev/generated/dev-session-create.ts b/packages/app/src/cli/api/graphql/app-dev/generated/dev-session-create.ts index bbee5450989..90ddf3fa375 100644 --- a/packages/app/src/cli/api/graphql/app-dev/generated/dev-session-create.ts +++ b/packages/app/src/cli/api/graphql/app-dev/generated/dev-session-create.ts @@ -1,6 +1,6 @@ import * as Types from './types.js' - import {JsonMapType} from '@shopify/cli-kit/node/toml' + import {TypedDocumentNode as DocumentNode} from '@graphql-typed-document-node/core' export type DevSessionCreateMutationVariables = Types.Exact<{ diff --git a/packages/app/src/cli/api/graphql/app-dev/generated/dev-session-update.ts b/packages/app/src/cli/api/graphql/app-dev/generated/dev-session-update.ts index 7cb9288ef58..cc50be78016 100644 --- a/packages/app/src/cli/api/graphql/app-dev/generated/dev-session-update.ts +++ b/packages/app/src/cli/api/graphql/app-dev/generated/dev-session-update.ts @@ -1,6 +1,6 @@ import * as Types from './types.js' - import {JsonMapType} from '@shopify/cli-kit/node/toml' + import {TypedDocumentNode as DocumentNode} from '@graphql-typed-document-node/core' export type DevSessionUpdateMutationVariables = Types.Exact<{ diff --git a/packages/app/src/cli/api/graphql/app-management/generated/active-app-release-from-api-key.ts b/packages/app/src/cli/api/graphql/app-management/generated/active-app-release-from-api-key.ts index eb771b190ce..084173d7138 100644 --- a/packages/app/src/cli/api/graphql/app-management/generated/active-app-release-from-api-key.ts +++ b/packages/app/src/cli/api/graphql/app-management/generated/active-app-release-from-api-key.ts @@ -1,6 +1,6 @@ import * as Types from './types.js' - import {JsonMapType} from '@shopify/cli-kit/node/toml' + import {TypedDocumentNode as DocumentNode} from '@graphql-typed-document-node/core' export type ActiveAppReleaseFromApiKeyQueryVariables = Types.Exact<{ diff --git a/packages/app/src/cli/api/graphql/app-management/generated/active-app-release.ts b/packages/app/src/cli/api/graphql/app-management/generated/active-app-release.ts index 422cf22a3c6..5be1993b37f 100644 --- a/packages/app/src/cli/api/graphql/app-management/generated/active-app-release.ts +++ b/packages/app/src/cli/api/graphql/app-management/generated/active-app-release.ts @@ -1,6 +1,6 @@ import * as Types from './types.js' - import {JsonMapType} from '@shopify/cli-kit/node/toml' + import {TypedDocumentNode as DocumentNode} from '@graphql-typed-document-node/core' export type ActiveAppReleaseQueryVariables = Types.Exact<{ diff --git a/packages/app/src/cli/api/graphql/app-management/generated/app-version-by-id.ts b/packages/app/src/cli/api/graphql/app-management/generated/app-version-by-id.ts index 994de9d0825..23bee3a911b 100644 --- a/packages/app/src/cli/api/graphql/app-management/generated/app-version-by-id.ts +++ b/packages/app/src/cli/api/graphql/app-management/generated/app-version-by-id.ts @@ -1,6 +1,6 @@ import * as Types from './types.js' - import {JsonMapType} from '@shopify/cli-kit/node/toml' + import {TypedDocumentNode as DocumentNode} from '@graphql-typed-document-node/core' export type AppVersionByIdQueryVariables = Types.Exact<{ diff --git a/packages/app/src/cli/api/graphql/app-management/generated/app-version-by-tag.ts b/packages/app/src/cli/api/graphql/app-management/generated/app-version-by-tag.ts index 1085a18b30c..d968494ab3c 100644 --- a/packages/app/src/cli/api/graphql/app-management/generated/app-version-by-tag.ts +++ b/packages/app/src/cli/api/graphql/app-management/generated/app-version-by-tag.ts @@ -1,6 +1,6 @@ import * as Types from './types.js' - import {JsonMapType} from '@shopify/cli-kit/node/toml' + import {TypedDocumentNode as DocumentNode} from '@graphql-typed-document-node/core' export type AppVersionByTagQueryVariables = Types.Exact<{ diff --git a/packages/app/src/cli/api/graphql/app-management/generated/create-app-version.ts b/packages/app/src/cli/api/graphql/app-management/generated/create-app-version.ts index 15f9dce82c2..b423c09910a 100644 --- a/packages/app/src/cli/api/graphql/app-management/generated/create-app-version.ts +++ b/packages/app/src/cli/api/graphql/app-management/generated/create-app-version.ts @@ -1,6 +1,6 @@ import * as Types from './types.js' - import {JsonMapType} from '@shopify/cli-kit/node/toml' + import {TypedDocumentNode as DocumentNode} from '@graphql-typed-document-node/core' export type CreateAppVersionMutationVariables = Types.Exact<{ diff --git a/packages/app/src/cli/api/graphql/app-management/generated/create-app.ts b/packages/app/src/cli/api/graphql/app-management/generated/create-app.ts index 67537aa2495..d6f4d3fa571 100644 --- a/packages/app/src/cli/api/graphql/app-management/generated/create-app.ts +++ b/packages/app/src/cli/api/graphql/app-management/generated/create-app.ts @@ -1,6 +1,6 @@ import * as Types from './types.js' - import {JsonMapType} from '@shopify/cli-kit/node/toml' + import {TypedDocumentNode as DocumentNode} from '@graphql-typed-document-node/core' export type CreateAppMutationVariables = Types.Exact<{ diff --git a/packages/app/src/cli/api/graphql/app-management/generated/release-version.ts b/packages/app/src/cli/api/graphql/app-management/generated/release-version.ts index 41dd7ceac10..4c432f877dc 100644 --- a/packages/app/src/cli/api/graphql/app-management/generated/release-version.ts +++ b/packages/app/src/cli/api/graphql/app-management/generated/release-version.ts @@ -1,6 +1,6 @@ import * as Types from './types.js' - import {JsonMapType} from '@shopify/cli-kit/node/toml' + import {TypedDocumentNode as DocumentNode} from '@graphql-typed-document-node/core' export type ReleaseVersionMutationVariables = Types.Exact<{ From e79f61e484dab44ced7704193585343b3926c864 Mon Sep 17 00:00:00 2001 From: Gonzalo Riestra Date: Tue, 6 Oct 2026 10:03:28 +0200 Subject: [PATCH 05/10] Describe current lint behavior and remove migration commentary --- bin/audit-oxlint-coverage.js | 7 +- configurations/oxlint-rule-mapping.json | 6 +- docs/cli/oxlint-rule-coverage.md | 185 +++++++----------- .../eslint-plugin-cli/oxlint-compat-names.js | 1 - .../eslint-plugin-cli/oxlint-no-catch-all.js | 1 - .../oxlint-rules/naming-convention.js | 2 +- packages/eslint-plugin-cli/oxlint-tsdoc.js | 1 - packages/eslint-plugin-cli/oxlint.test.js | 12 +- 8 files changed, 79 insertions(+), 136 deletions(-) diff --git a/bin/audit-oxlint-coverage.js b/bin/audit-oxlint-coverage.js index dcd5aa7f197..eb0b14a1e4c 100644 --- a/bin/audit-oxlint-coverage.js +++ b/bin/audit-oxlint-coverage.js @@ -4,8 +4,6 @@ import {execFileSync} from 'node:child_process' const root = execFileSync('git', ['rev-parse', '--show-toplevel'], {encoding: 'utf8'}).trim() const read = (file) => JSON.parse(readFileSync(resolve(root, file), 'utf8')) -// Frozen effective configurations were captured from the original revision -// before removing ESLint. Auditing the migration must not reinstall its engine. const baseline = read('configurations/oxlint-baseline.json') const mapping = read('configurations/oxlint-rule-mapping.json') const config = read('oxlint.json') @@ -79,8 +77,7 @@ for (const group of baseline.configurations) { } } -// This supplementary inventory records verified tool overlap. It does not turn -// a missing dedicated rule into a claim of equivalent behavior or file scope. +// Other tools can cover only part of a rule or its file scope. const otherToolCoverage = Object.fromEntries( [...unsupported] .filter((name) => mapping[name].otherToolCoverage) @@ -113,6 +110,4 @@ const findings = { const output = process.argv[2] ?? '/tmp/cli-oxlint-coverage-audit.json' writeFileSync(output, JSON.stringify({summary, findings}, null, 2) + '\n') console.log(JSON.stringify(summary, null, 2)) -// Partial and unsupported replacements are deliberate and recorded in the -// mapping. Missing file scopes or formatting must be fixed or documented there. if (missing.size || missingFormatting.length || severities.size) process.exitCode = 1 diff --git a/configurations/oxlint-rule-mapping.json b/configurations/oxlint-rule-mapping.json index b063bb37287..94eae180193 100644 --- a/configurations/oxlint-rule-mapping.json +++ b/configurations/oxlint-rule-mapping.json @@ -199,7 +199,7 @@ "@typescript-eslint/no-unnecessary-type-assertion": { "replacement": null, "status": "unsupported", - "limitation": "Disabled during migration because the native checker flags assertions accepted by the original ESLint setup, including intentional test fixtures. Existing casts are retained; there is no exact compatibility option." + "limitation": "Redundant type assertions are not checked." }, "@typescript-eslint/no-unnecessary-type-constraint": { "replacement": "typescript/no-unnecessary-type-constraint", @@ -454,12 +454,12 @@ "import-x/no-named-as-default": { "replacement": null, "status": "unsupported", - "limitation": "Disabled during migration because native module analysis flags existing default WebSocket imports accepted by ESLint. Existing imports are retained; this check is currently lost." + "limitation": "Default imports that share a name with a named export are not checked." }, "import-x/no-named-as-default-member": { "replacement": null, "status": "unsupported", - "limitation": "Disabled during migration because native module analysis flags existing Prettier and CommonJS GraphQL-loader access accepted by ESLint. Existing imports are retained; this check is currently lost." + "limitation": "Access to named exports through default imports is not checked." }, "import-x/no-named-default": { "replacement": "import/no-named-default", diff --git a/docs/cli/oxlint-rule-coverage.md b/docs/cli/oxlint-rule-coverage.md index 83f3fda885b..7aabc956ea8 100644 --- a/docs/cli/oxlint-rule-coverage.md +++ b/docs/cli/oxlint-rule-coverage.md @@ -1,131 +1,82 @@ -# Oxlint rule coverage - -Repository linting uses Oxlint, its native type-aware checker, Prettier, and the -TSDoc parser. ESLint and its upstream rule plugins are absent from the dependency -graph and lockfile. Oxlint's native core diagnostics still use the `eslint` prefix; -that names the rule family, not an installed or executed ESLint engine. - -The public `@shopify/eslint-plugin-cli` package keeps all 14 custom rule exports, -including `command-json-output`, and the `configs.config` entry point. That config -now contains CLI custom rules and their test exemption. It no longer bundles the -shared Shopify, TypeScript, React, Vitest, or other third-party ESLint configs. -Consumers must configure those separately. This is a breaking public config change. - -## Replacements - -The original configuration at `656de9379cb7b4e2af6fe0bc6c8d81b1a50163f7` enabled -301 lint rule names plus `prettier/prettier`. The migration has replacements for -243 lint rule names: 194 native counterparts, 14 retained implementations, and -35 partial independent replacements. Prettier covers formatting separately. -There are 58 rule names without a dedicated replacement. Of those, 11 have -identified coverage or overlap elsewhere in the existing toolchain. These are -not 58 wholly missing capabilities, and overlap does not establish full parity. - -The independent plugin in `packages/eslint-plugin-cli/oxlint.js` adds naming, -member ordering, identifier length, import ordering, project boundaries, unused -imports, CommonJS declarations, public API JSDoc, Node global imports, restricted -syntax, and constructor checks. TSDoc syntax validation calls the parser directly. -It uses the default TSDoc configuration; this repository has no `tsdoc.json`. - -Partial implementations support repository conventions rather than every -upstream selector or option. Project boundaries reject relative imports and -re-exports between workspace packages, including `require()` and dynamic imports. -They do not reproduce Nx graph cycles, tag constraints, buildability, or lazy-loading -checks. Import ordering handles configured groups and blank lines, with conservative -fixes for contiguous imports without comments or side effects. Public parameter and -return documentation checks cover directly exported functions; destructured parameter -paths and full export reachability are not equivalent to the original JSDoc rules. - -To keep the migration small, existing type assertions and default imports are -preserved. The native `typescript/no-unnecessary-type-assertion`, -`import/no-named-as-default`, and `import/no-named-as-default-member` checks are -disabled because they report existing code accepted by ESLint and have no exact -compatibility option. These are three explicit coverage gaps, not equivalent -replacements. Declared type parameters keep their naming checks; inferred type -parameter names retain their existing spelling. - -Small dependency-free alias plugins preserve the existing `compat/*`, -`no-catch-all/no-catch-all`, and `tsdoc/syntax` suppression names. They call the -independent implementations and do not load ESLint or upstream plugins. Obsolete -and unused suppressions are removed. Unused imports in tests remain checked even though unused local variables -are allowed. Import-removal fixes differ from the original dedicated plugin. - -## Coverage from other existing tools - -The mapping's `unsupported` status means no dedicated rule replacement. Its -`otherToolCoverage` entries record additional coverage and the remaining limits. -The audit lists these separately rather than subtracting partial overlap from gaps. - -| Existing tool | Coverage already available | Limits | +# Lint checks and limits + +`pnpm lint` runs Prettier, Oxlint with type-aware checking, and workspace +dependency-version checks. ESLint is not installed or invoked. The `eslint` +prefix in native Oxlint diagnostics identifies a rule family. + +## Custom rules + +`packages/eslint-plugin-cli/oxlint.js` provides naming, member and import ordering, +identifier length, workspace boundaries, unused imports, CommonJS declarations, +public API JSDoc, Node global imports, restricted syntax, and constructor checks. +TSDoc syntax validation uses the parser's default configuration. + +- Workspace boundaries reject relative imports and re-exports between packages, + including `require()` and dynamic imports. They do not check dependency cycles, + tags, buildability, or lazy loading. +- Import ordering checks configured groups and blank lines. Automatic fixes apply + only to contiguous imports without comments or side effects. +- Public JSDoc checks cover directly exported functions. They do not resolve + exports through other modules or validate destructured parameter paths. +- Naming checks apply to declared type parameters. Inferred type bindings are exempt. +- Unused imports are checked in tests, where unused local variables are allowed. + +The alias plugins support `compat/*`, `no-catch-all/no-catch-all`, and +`tsdoc/syntax` in disable directives. They delegate to the custom rules. +`pnpm lint` rejects unused disable directives. + +Generated GraphQL files are exempt from consistent-type-definition checks; +array style, naming, and workspace boundaries are checked. Public JSDoc checks +exclude CLI entry points and theme helpers, as configured in `oxlint.json`. + +## Other tools + +| Tool | Checks | Limits | | --- | --- | --- | -| Knip | Unresolved imports, unlisted dependencies, unused exports/types/files | The plugin and e2e workspaces, selected generated files, and dependencies are excluded. Public entry exports are retained; ancestor-workspace dependencies can satisfy imports. | -| TypeScript and esbuild | Module resolution in checked/bundled inputs; TypeScript also rejects undeclared assignments and invalid redeclarations | Not all JavaScript is type-checked; external bundle imports are exempt from resolution. Neither checks dependency declarations or flags deprecated APIs as errors. | -| TypeScript, Prettier's TypeScript parser, Oxlint's ESM parser | Legacy octal literals and escapes are rejected in their respective scopes | CommonJS JavaScript still accepts these cases. | -| Oxlint parser and existing rules | Duplicate parameters in ESM; independent `no-redeclare` catches duplicates in CommonJS plugin files; `no-shadow` catches catch-binding shadowing | Parser behavior depends on source type, and the existing rules are not proven equivalent for every legacy case. | -| Oxlint CLI | Unused disable comments fail full lint and the PR lint job | Per-project targets do not all pass the reporting flag. Pairing, blanket disables, and other directive policies remain separate gaps. | -| Prettier | Indentation/alignment of supported JSDoc blocks | Does not enforce missing asterisks, tag-column alignment, comment spacing, directive padding, or blank lines between class members. | -| TSDoc parser | Malformed TSDoc syntax | Does not validate parameter names against signatures, resolve documentation types, or check return/throw/yield consistency. | - -The original `consistent-return`, `import-x/no-unresolved`, -`import-x/no-extraneous-dependencies`, and Node deprecated/unsupported API rules -were enabled only for JavaScript, not TypeScript. TypeScript coverage must not be -credited as a complete replacement for those JavaScript checks. `noImplicitReturns` -and `checkJs` are not enabled in the shared TypeScript configuration. Also, the -original `strict` rule forbade explicit directives; TypeScript's strict mode does -not replace that style policy. - -TypeDoc generation exists for the documentation deployment, but it is not a PR -lint gate or a replacement for the removed JSDoc policies. Nx task execution, -workspace dependency-version checks, and unit tests likewise do not establish -coverage of missing graph-boundary or API-metadata rules. - -The review used the installed Knip 5.88.1, TypeScript 5.9.3, Prettier 3.8.4, -Oxlint 1.75.0, and TSDoc 0.16.0. Temporary-file probes confirmed both detections -and counterexamples: Knip reported missing modules, unlisted packages and unused -exports; formatting fixed JSDoc indentation but retained missing asterisks and -comment/class-spacing gaps; TypeScript accepted inconsistent inferred returns, -async read-modify-write operations, deprecated calls and mismatched JSDoc names. -These examples support the inventory, not exhaustive equivalence claims. - -Tool references: [Knip issue types](https://knip.dev/reference/issue-types), +| Knip | Unresolved imports, unlisted dependencies, unused exports/types/files | Excludes the plugin and e2e workspaces and selected generated files. Retains public entry exports; ancestor-workspace dependencies can satisfy imports. | +| TypeScript and esbuild | Module resolution in checked or bundled inputs | Some JavaScript and external bundle imports are outside their scope. Neither checks dependency declarations or rejects deprecated APIs. | +| TypeScript, Prettier, and Oxlint parsers | Invalid syntax, including octal literals and escapes in TypeScript or strict ES modules | CommonJS JavaScript permits some of these forms. | +| Prettier | Source formatting and supported JSDoc indentation | Does not enforce JSDoc semantics, directive policies, or all comment and class-spacing conventions. | +| TSDoc | Documentation syntax | Does not compare parameter names with signatures, resolve documentation types, or check return/throw/yield consistency. | + +`checkJs` and `noImplicitReturns` are disabled in the shared TypeScript config. +TypeDoc generation is not a PR check. Nx task execution and workspace version +checks do not validate dependency cycles or API deprecations. + +See [Knip issue types](https://knip.dev/reference/issue-types), [TypeScript options](https://www.typescriptlang.org/tsconfig/), and [Prettier comment handling](https://prettier.io/docs/rationale.html#comments). -## Remaining gaps +## Unchecked policies -The complete rule-by-rule mapping and limitations are in -[`configurations/oxlint-rule-mapping.json`](../../configurations/oxlint-rule-mapping.json). - -| Family | Remaining checks | +| Family | Limits | | --- | --- | -| Import analysis | Deprecated imports, redundant path segments, and ambiguous default-import checks; resolution, dependency, and unused-export coverage outside Knip/compiler scopes | +| Imports | Deprecated imports, redundant path segments, ambiguous default imports, and imports outside Knip/compiler scopes | | JSDoc | Advanced tag/type validation, parameter path matching, return/throw/yield consistency, layout beyond Prettier | | Control flow and assertions | Consistent returns, atomic updates, early-return conventions, redundant type assertions | | Node APIs | Deprecated or unsupported APIs, callback conventions, promise API preferences, executable/shebang checks | | Shopify conventions | Image imports, context menus, module-scope constants, Twine, singular enum names | -| Style and directives | Camel case in JavaScript, line-comment placement, statement padding, class sorting, explicit strict-directive policy, directive conventions beyond unused suppressions | - -Oxlint still checks unused disable directives. Generated GraphQL files keep their -original consistent-type-definition exemption; array style, naming, and project -boundaries remain checked. Public JSDoc checks preserve the original file exclusions, -including public CLI entry points and theme helpers. +| Style and directives | JavaScript camel case, line-comment placement, statement padding, class sorting, explicit strict directives, disable policies beyond unused directives | -## Audit +The native `typescript/no-unnecessary-type-assertion`, `import/no-named-as-default`, +and `import/no-named-as-default-member` rules are disabled. -```sh -node bin/audit-oxlint-coverage.js -``` +## Configuration audit -The audit needs no ESLint dependency. It compares current rule scopes against -frozen effective configurations captured from the original revision in +Run `node bin/audit-oxlint-coverage.js` to compare configured rules, severities, +options, file scopes, and formatting inputs against [`configurations/oxlint-baseline.json`](../../configurations/oxlint-baseline.json). -It checks 1,633 surviving files, with four deleted compatibility files recorded -separately. Every original rule has an explicit replacement or documented gap. -The audit also checks formatting coverage and severity, and reports option differences. -It compares lint configuration coverage, not exhaustive behavioral equivalence. -The supplementary tool inventory is manually verified and records scope limits; -the audit does not execute Knip, TypeScript, Prettier, or the probe examples. - -Focused tests exercise the independent rules, native-compatible directives, and -project boundaries. An integration test rejects attempts to load ESLint or upstream -ESLint plugins while running Oxlint. +The snapshot's `baselineCommit` field identifies its source. Deleted files are reported +separately. Files added after the snapshot are outside this comparison. + +[`configurations/oxlint-rule-mapping.json`](../../configurations/oxlint-rule-mapping.json) +records rule mappings, partial implementations, unsupported policies, and tool +overlap. The audit compares configuration coverage; it does not prove behavioral +equivalence or run the other tools. Plugin tests exercise rule behavior and reject +ESLint imports while running Oxlint. + +## Public ESLint plugin + +`@shopify/eslint-plugin-cli` exports 14 custom rules, including `command-json-output`. +Its `configs.config` entry point enables CLI rules and a test exemption. Consumers +must configure their own TypeScript parser, shared rule sets, globals, and ignores. diff --git a/packages/eslint-plugin-cli/oxlint-compat-names.js b/packages/eslint-plugin-cli/oxlint-compat-names.js index a92402e8ff4..95bc65067fe 100644 --- a/packages/eslint-plugin-cli/oxlint-compat-names.js +++ b/packages/eslint-plugin-cli/oxlint-compat-names.js @@ -1,6 +1,5 @@ const {rules} = require('./oxlint') -// Keep existing disable comments valid while using independent implementations. module.exports = { meta: {name: '@shopify/cli-compat'}, rules: { diff --git a/packages/eslint-plugin-cli/oxlint-no-catch-all.js b/packages/eslint-plugin-cli/oxlint-no-catch-all.js index 1d5f51779a9..7f7558777cd 100644 --- a/packages/eslint-plugin-cli/oxlint-no-catch-all.js +++ b/packages/eslint-plugin-cli/oxlint-no-catch-all.js @@ -1,6 +1,5 @@ const {rules} = require('./oxlint') -// Keep existing disable comments valid while using independent implementations. module.exports = { meta: {name: '@shopify/cli-no-catch-all'}, rules: { diff --git a/packages/eslint-plugin-cli/oxlint-rules/naming-convention.js b/packages/eslint-plugin-cli/oxlint-rules/naming-convention.js index 0b7ed45f670..fc1401c7903 100644 --- a/packages/eslint-plugin-cli/oxlint-rules/naming-convention.js +++ b/packages/eslint-plugin-cli/oxlint-rules/naming-convention.js @@ -95,7 +95,7 @@ module.exports = { check(node.id, 'enum') }, TSTypeParameter(node) { - // Preserve existing infer bindings accepted by the previous lint setup. + // Inferred type bindings are exempt from type-parameter naming requirements. if (node.parent.type === 'TSInferType') return check(node.name, 'typeParameter') }, diff --git a/packages/eslint-plugin-cli/oxlint-tsdoc.js b/packages/eslint-plugin-cli/oxlint-tsdoc.js index 36dbe096d18..8a9f01cb0c5 100644 --- a/packages/eslint-plugin-cli/oxlint-tsdoc.js +++ b/packages/eslint-plugin-cli/oxlint-tsdoc.js @@ -1,6 +1,5 @@ const {rules} = require('./oxlint') -// Keep existing disable comments valid while using independent implementations. module.exports = { meta: {name: '@shopify/cli-tsdoc'}, rules: { diff --git a/packages/eslint-plugin-cli/oxlint.test.js b/packages/eslint-plugin-cli/oxlint.test.js index 03dda2345ec..ca12bcbb558 100644 --- a/packages/eslint-plugin-cli/oxlint.test.js +++ b/packages/eslint-plugin-cli/oxlint.test.js @@ -223,7 +223,7 @@ tester.run('commonjs-redeclarations', rules['no-redeclare'], { ], }) -test('runs independent rules and legacy suppressions without ESLint', () => { +test('runs custom rules and named suppressions without ESLint', () => { const {mkdtempSync, mkdirSync, writeFileSync, rmSync} = require('node:fs') const {tmpdir} = require('node:os') const {join, resolve, dirname} = require('node:path') @@ -257,13 +257,13 @@ test('runs independent rules and legacy suppressions without ESLint', () => { : 'export function read() { return 1 }', ) } - const legacyFile = join(workspace, 'packages', 'app', 'src', 'legacy.ts') - const legacySource = `/** @param value Description. */ + const suppressedFile = join(workspace, 'packages', 'app', 'src', 'suppressed.ts') + const source = `/** @param value Description. */ function read(value) { try { run() } catch (error) { log(error) } } interface widget {}` writeFileSync( - legacyFile, - `/* eslint-disable compat/typescript-eslint-naming-convention, no-catch-all/no-catch-all, tsdoc/syntax */\n${legacySource}`, + suppressedFile, + `/* eslint-disable compat/typescript-eslint-naming-convention, no-catch-all/no-catch-all, tsdoc/syntax */\n${source}`, ) writeFileSync( join(workspace, 'oxlint.json'), @@ -306,7 +306,7 @@ interface widget {}` expect(JSON.parse(result.stdout).diagnostics.map((diagnostic) => diagnostic.code)).toEqual([ 'cli(module-boundaries)', ]) - writeFileSync(legacyFile, legacySource) + writeFileSync(suppressedFile, source) const unsuppressed = spawnSync( process.execPath, [ From e1facc193658342c22b87be3163fc63d45a2673e Mon Sep 17 00:00:00 2001 From: Gonzalo Riestra Date: Fri, 9 Oct 2026 13:04:49 +0200 Subject: [PATCH 06/10] Keep rebased upgrade tests and e2e lint compatible with Oxlint --- .../cli-kit/src/public/node/upgrade.test.ts | 1 + packages/e2e/package.json | 18 ------------------ packages/e2e/project.json | 4 ++-- 3 files changed, 3 insertions(+), 20 deletions(-) diff --git a/packages/cli-kit/src/public/node/upgrade.test.ts b/packages/cli-kit/src/public/node/upgrade.test.ts index 8d93a458583..edd7cad4ddf 100644 --- a/packages/cli-kit/src/public/node/upgrade.test.ts +++ b/packages/cli-kit/src/public/node/upgrade.test.ts @@ -7,6 +7,7 @@ import { getPackageManager, usesWorkspaces, packageManagerFromUserAgent, + PackageManager, } from './node-package-manager.js' import {exec, isCI} from './system.js' import { diff --git a/packages/e2e/package.json b/packages/e2e/package.json index 119246f80ee..e5b9903a47a 100644 --- a/packages/e2e/package.json +++ b/packages/e2e/package.json @@ -10,24 +10,6 @@ "lint:fix": "nx lint:fix", "type-check": "nx type-check" }, - "eslintConfig": { - "extends": [ - "../../.eslintrc.cjs" - ], - "ignorePatterns": [ - "scripts/" - ], - "rules": { - "no-console": "off", - "import/extensions": [ - "error", - "never", - { - "ignorePackages": true - } - ] - } - }, "devDependencies": { "@iarna/toml": "2.2.5", "@playwright/test": "^1.61.1", diff --git a/packages/e2e/project.json b/packages/e2e/project.json index cc050bd29ac..9ed86b98119 100644 --- a/packages/e2e/project.json +++ b/packages/e2e/project.json @@ -17,14 +17,14 @@ "lint": { "executor": "nx:run-commands", "options": { - "command": "pnpm eslint \"setup/**/*.ts\" \"helpers/**/*.ts\" \"tests/**/*.ts\" \"*.ts\"", + "command": "pnpm oxlint --config ../../oxlint.json --deny-warnings .", "cwd": "packages/e2e" } }, "lint:fix": { "executor": "nx:run-commands", "options": { - "command": "pnpm eslint 'setup/**/*.ts' 'helpers/**/*.ts' 'tests/**/*.ts' '*.ts' --fix", + "command": "pnpm oxlint --config ../../oxlint.json --deny-warnings . --fix", "cwd": "packages/e2e" } }, From fe54c89544d25357dd46d4fab5c56c09cee549c0 Mon Sep 17 00:00:00 2001 From: Gonzalo Riestra Date: Fri, 9 Oct 2026 13:09:05 +0200 Subject: [PATCH 07/10] Remove obsolete console suppressions with independent rules --- .../app/subscription-migrations/result-presenter-output.test.ts | 1 - packages/cli/src/cli/commands/upgrade-output.test.ts | 1 - 2 files changed, 2 deletions(-) diff --git a/packages/app/src/cli/commands/app/subscription-migrations/result-presenter-output.test.ts b/packages/app/src/cli/commands/app/subscription-migrations/result-presenter-output.test.ts index dd290ad5525..64471907b24 100644 --- a/packages/app/src/cli/commands/app/subscription-migrations/result-presenter-output.test.ts +++ b/packages/app/src/cli/commands/app/subscription-migrations/result-presenter-output.test.ts @@ -9,7 +9,6 @@ import {watchMigrationOperations} from '../../../services/subscription-migration import {AbortError} from '@shopify/cli-kit/node/error' import {runWithCommandEventsForCommand} from '@shopify/cli-kit/node/command-events' import {beforeEach, describe, expect, test, vi} from 'vitest' -// eslint-disable-next-line compat/n-prefer-global-console import {Console} from 'node:console' import type {MigrationCancellationResult} from '../../../services/subscription-migrations/types.js' diff --git a/packages/cli/src/cli/commands/upgrade-output.test.ts b/packages/cli/src/cli/commands/upgrade-output.test.ts index 6a6790d2688..1141756bf10 100644 --- a/packages/cli/src/cli/commands/upgrade-output.test.ts +++ b/packages/cli/src/cli/commands/upgrade-output.test.ts @@ -12,7 +12,6 @@ import {upgradeJsonOutputSchema} from '@shopify/cli-kit/node/upgrade/types' import {commandEventOutputSchema} from '@shopify/cli-kit/node/command-events' import {beforeEach, afterEach, expect, onTestFinished, test, vi} from 'vitest' // Vitest intercepts console.warn; exercise the real stderr writer. -// eslint-disable-next-line compat/n-prefer-global-console import {Console} from 'node:console' // eslint-disable-next-line no-restricted-imports -- Verify native filesystem paths in JSON output. import {resolve} from 'node:path' From 30f87466ea972b43d49820e0e025b94b9d0287ae Mon Sep 17 00:00:00 2001 From: Gonzalo Riestra Date: Fri, 9 Oct 2026 13:54:18 +0200 Subject: [PATCH 08/10] Apply cli-kit lint overrides from the workspace root --- oxlint.json | 9 +-- .../node/ui/components/AutocompletePrompt.tsx | 4 +- .../node/ui/components/SelectInput.tsx | 8 +-- .../node/ui/components/SelectPrompt.tsx | 4 +- .../node/ui/components/Table/Table.tsx | 2 +- .../src/private/node/ui/components/Tasks.tsx | 4 +- .../cli-kit/src/public/node/base-command.ts | 2 +- packages/cli-kit/src/public/node/cli.ts | 5 +- .../cli-kit/src/public/node/error-handler.ts | 2 +- packages/cli-kit/src/public/node/ui.tsx | 9 +++ packages/eslint-plugin-cli/oxlint.test.js | 66 +++++++++++++++++++ 11 files changed, 97 insertions(+), 18 deletions(-) diff --git a/oxlint.json b/oxlint.json index 847b420434c..7b656ccff55 100644 --- a/oxlint.json +++ b/oxlint.json @@ -836,13 +836,14 @@ } }, { - "files": ["src/public/**/*.ts"], + "files": ["packages/cli-kit/src/public/**/*.ts"], + "excludeFiles": ["packages/cli-kit/src/public/node/themes/**"], "rules": { "typescript/explicit-module-boundary-types": "error" } }, { - "files": ["src/private/node/ui/components/**/*.tsx"], + "files": ["packages/cli-kit/src/private/node/ui/components/**/*.tsx"], "rules": { "react/function-component-definition": [ "error", @@ -879,7 +880,7 @@ "plugins": ["react", "jsdoc"] }, { - "files": ["src/public/node/ui.tsx"], + "files": ["packages/cli-kit/src/public/node/ui.tsx"], "rules": { "max-params": ["error", 1] } @@ -1257,7 +1258,7 @@ } }, { - "files": ["src/private/node/ui/components/**/*.tsx"], + "files": ["packages/cli-kit/src/private/node/ui/components/**/*.tsx"], "rules": { "compat/typescript-eslint-naming-convention": [ "error", diff --git a/packages/cli-kit/src/private/node/ui/components/AutocompletePrompt.tsx b/packages/cli-kit/src/private/node/ui/components/AutocompletePrompt.tsx index 500d66a3f12..93b956502c7 100644 --- a/packages/cli-kit/src/private/node/ui/components/AutocompletePrompt.tsx +++ b/packages/cli-kit/src/private/node/ui/components/AutocompletePrompt.tsx @@ -40,7 +40,7 @@ export interface AutocompletePromptProps { const MIN_NUMBER_OF_ITEMS_FOR_SEARCH = 5 const DEFAULT_SEARCH_DEBOUNCE_MS = 400 -function AutocompletePrompt({ +const AutocompletePrompt = ({ message, choices, infoTable, @@ -51,7 +51,7 @@ function AutocompletePrompt({ infoMessage, groupOrder, searchDebounceMs = DEFAULT_SEARCH_DEBOUNCE_MS, -}: React.PropsWithChildren>): ReactElement | null { +}: React.PropsWithChildren>): ReactElement | null => { const complete = useComplete() const [searchTerm, setSearchTerm] = useState('') const [searchResults, setSearchResults] = useState[]>(choices) diff --git a/packages/cli-kit/src/private/node/ui/components/SelectInput.tsx b/packages/cli-kit/src/private/node/ui/components/SelectInput.tsx index e23e8d1dae5..d71ee63b074 100644 --- a/packages/cli-kit/src/private/node/ui/components/SelectInput.tsx +++ b/packages/cli-kit/src/private/node/ui/components/SelectInput.tsx @@ -76,7 +76,7 @@ interface ItemProps { index: number } -function Item({ +const Item = ({ item, previousItem, isSelected, @@ -85,7 +85,7 @@ function Item({ items, hasAnyGroup, index, -}: ItemProps): React.ReactElement { +}: ItemProps): React.ReactElement => { const label = highlightedLabel(item.label, highlightedTerm) let title: string | undefined let labelColor @@ -127,7 +127,7 @@ function Item({ const MAX_AVAILABLE_LINES = 25 -function SelectInput({ +const SelectInput = ({ items: rawItems, initialItems = rawItems, onChange, @@ -145,7 +145,7 @@ function SelectInput({ inputFixedAreaRef, ref, groupOrder, -}: SelectInputProps): React.ReactElement | null { +}: SelectInputProps): React.ReactElement | null => { let noItems = false if (rawItems.length === 0) { diff --git a/packages/cli-kit/src/private/node/ui/components/SelectPrompt.tsx b/packages/cli-kit/src/private/node/ui/components/SelectPrompt.tsx index 0794bf447c5..e7049d39549 100644 --- a/packages/cli-kit/src/private/node/ui/components/SelectPrompt.tsx +++ b/packages/cli-kit/src/private/node/ui/components/SelectPrompt.tsx @@ -19,7 +19,7 @@ export interface SelectPromptProps { groupOrder?: string[] } -function SelectPrompt({ +const SelectPrompt = ({ message, choices, infoTable, @@ -28,7 +28,7 @@ function SelectPrompt({ defaultValue, abortSignal, groupOrder, -}: React.PropsWithChildren>): ReactElement | null { +}: React.PropsWithChildren>): ReactElement | null => { if (choices.length === 0) { throw new Error('SelectPrompt requires at least one choice') } diff --git a/packages/cli-kit/src/private/node/ui/components/Table/Table.tsx b/packages/cli-kit/src/private/node/ui/components/Table/Table.tsx index aa3764258d7..abc3ee8557f 100644 --- a/packages/cli-kit/src/private/node/ui/components/Table/Table.tsx +++ b/packages/cli-kit/src/private/node/ui/components/Table/Table.tsx @@ -14,7 +14,7 @@ export interface TableProps { columns: TableColumn } -function Table({rows, columns: columnsConfiguration}: TableProps) { +const Table = ({rows, columns: columnsConfiguration}: TableProps) => { const columns = Object.entries(columnsConfiguration).map(([key, {header, color}]) => { const headerWidth = String(header ?? key).length const columnWidths = rows.map((row) => { diff --git a/packages/cli-kit/src/private/node/ui/components/Tasks.tsx b/packages/cli-kit/src/private/node/ui/components/Tasks.tsx index 62dddeec038..bc3639f4618 100644 --- a/packages/cli-kit/src/private/node/ui/components/Tasks.tsx +++ b/packages/cli-kit/src/private/node/ui/components/Tasks.tsx @@ -27,14 +27,14 @@ enum TasksState { const noop = () => {} -function Tasks({ +const Tasks = ({ tasks, silent = isUnitTest(), onComplete = noop, abortSignal, noColor, noProgressBar = false, -}: React.PropsWithChildren>) { +}: React.PropsWithChildren>) => { const [currentTask, setCurrentTask] = useState>(tasks[0]!) const [state, setState] = useState(TasksState.Loading) diff --git a/packages/cli-kit/src/public/node/base-command.ts b/packages/cli-kit/src/public/node/base-command.ts index 3b921e5cbd6..5bc9ab31447 100644 --- a/packages/cli-kit/src/public/node/base-command.ts +++ b/packages/cli-kit/src/public/node/base-command.ts @@ -122,7 +122,7 @@ abstract class BaseCommand extends Command { } } - protected exitWithTimestampWhenEnvVariablePresent() { + protected exitWithTimestampWhenEnvVariablePresent(): void { if (isTruthy(process.env.SHOPIFY_CLI_ENV_STARTUP_PERFORMANCE_RUN)) { outputResult(` SHOPIFY_CLI_TIMESTAMP_START diff --git a/packages/cli-kit/src/public/node/cli.ts b/packages/cli-kit/src/public/node/cli.ts index 513f0137de3..c32beed9881 100644 --- a/packages/cli-kit/src/public/node/cli.ts +++ b/packages/cli-kit/src/public/node/cli.ts @@ -3,6 +3,7 @@ import {noInputFlag} from './no-input.js' import {launchCLI as defaultLaunchCli} from './cli-launcher.js' import {environmentVariables} from '../../private/node/constants.js' import {Flags} from '@oclif/core' +import type {OptionFlag} from '@oclif/core/interfaces' import type {LazyCommandLoader} from './custom-oclif-loader.js' /** @@ -170,7 +171,9 @@ export const authAliasFlag = { * @param options - Optional overrides for the flag's description, environment variable, and visibility. * @returns An oclif integer flag constrained to the valid port range. */ -export const portFlag = (options: {description?: string; env?: string; hidden?: boolean} = {}) => { +export const portFlag = ( + options: {description?: string; env?: string; hidden?: boolean} = {}, +): OptionFlag => { const description = [options.description, 'Must be between 1 and 65535.'].filter(Boolean).join(' ') return Flags.integer({min: 1, max: 65535, ...options, description}) } diff --git a/packages/cli-kit/src/public/node/error-handler.ts b/packages/cli-kit/src/public/node/error-handler.ts index 706249ed1d4..ca1207937c0 100644 --- a/packages/cli-kit/src/public/node/error-handler.ts +++ b/packages/cli-kit/src/public/node/error-handler.ts @@ -265,7 +265,7 @@ export async function registerCleanBugsnagErrorsFromWithinPlugins(config: Interf }) } -// eslint-disable-next-line @typescript-eslint/no-explicit-any +// eslint-disable-next-line @typescript-eslint/no-explicit-any, typescript/explicit-module-boundary-types -- Retain the public metadata helper's permissive event parameter. export async function addBugsnagMetadata(event: any, config: Interfaces.Config): Promise { const publicData = metadata.getAllPublicMetadata() const {commandStartOptions} = metadata.getAllSensitiveMetadata() diff --git a/packages/cli-kit/src/public/node/ui.tsx b/packages/cli-kit/src/public/node/ui.tsx index 6f65e8152e5..14a451101be 100644 --- a/packages/cli-kit/src/public/node/ui.tsx +++ b/packages/cli-kit/src/public/node/ui.tsx @@ -249,6 +249,7 @@ interface RenderFatalErrorOptions { * */ +// eslint-disable-next-line max-params -- Preserve the public positional options argument. export function renderFatalError(error: Fatal, {renderOptions}: RenderFatalErrorOptions = {}) { return renderOnce(, {logLevel: 'error', renderOptions}) } @@ -290,6 +291,7 @@ export interface RenderSelectPromptOptions extends Omit, * */ +// eslint-disable-next-line max-params -- Preserve the public positional options argument. export async function renderSelectPrompt( {renderOptions, isConfirmationPrompt, ...props}: RenderSelectPromptOptions, uiDebugOptions: UIDebugOptions = defaultUIDebugOptions, @@ -425,6 +427,7 @@ export interface RenderAutocompleteOptions extends PartialBy< * */ +// eslint-disable-next-line max-params -- Preserve the public positional options argument. export async function renderAutocompletePrompt( {renderOptions, ...props}: RenderAutocompleteOptions, uiDebugOptions: UIDebugOptions = defaultUIDebugOptions, @@ -503,6 +506,7 @@ interface RenderTasksOptions { * Installing dependencies ... */ +// eslint-disable-next-line max-params -- Preserve the public positional options argument. export async function renderTasks( tasks: Task[], {renderOptions, noProgressBar}: RenderTasksOptions = {}, @@ -662,6 +666,7 @@ export interface RenderTextPromptOptions extends Omit { throwInNonTTY({message: 'Press any key'}, uiDebugOptions) return runWithTimer('cmd_all_timing_prompts_ms')(() => { + // eslint-disable-next-line max-params -- Promise executors receive resolve and reject callbacks. return new Promise((resolve, reject) => { const handler = (buffer: Buffer) => { stdin.setRawMode(false) @@ -785,6 +793,7 @@ interface ThrowInNonTTYOptions { stdin?: NodeJS.ReadStream } +// eslint-disable-next-line max-params -- Keep the shared prompt check aligned with the public debug options argument. function throwInNonTTY({message, stdin = undefined}: ThrowInNonTTYOptions, uiDebugOptions: UIDebugOptions) { if (isTTY({stdin, uiDebugOptions})) return diff --git a/packages/eslint-plugin-cli/oxlint.test.js b/packages/eslint-plugin-cli/oxlint.test.js index ca12bcbb558..46e0dbfee91 100644 --- a/packages/eslint-plugin-cli/oxlint.test.js +++ b/packages/eslint-plugin-cli/oxlint.test.js @@ -223,6 +223,72 @@ tester.run('commonjs-redeclarations', rules['no-redeclare'], { ], }) +test('applies cli-kit rules from the workspace root', () => { + const {mkdtempSync, mkdirSync, readFileSync, writeFileSync, rmSync} = require('node:fs') + const {tmpdir} = require('node:os') + const {join, resolve, dirname} = require('node:path') + const {spawnSync} = require('node:child_process') + const workspace = mkdtempSync(join(tmpdir(), 'cli-kit oxlint-')) + try { + const root = resolve(__dirname, '../..') + const config = JSON.parse(readFileSync(join(root, 'oxlint.json'), 'utf8')) + config.options.typeAware = false + config.jsPlugins = config.jsPlugins.map((plugin) => ({...plugin, specifier: resolve(root, plugin.specifier)})) + writeFileSync(join(workspace, 'oxlint.json'), JSON.stringify(config)) + const fixtures = [ + { + path: 'packages/cli-kit/src/public/example.ts', + code: 'export function read(value: number) { return value }', + rule: 'typescript(explicit-module-boundary-types)', + }, + { + path: 'packages/cli-kit/src/private/node/ui/components/Example.tsx', + code: 'const Example = () => ', + rule: 'react(jsx-boolean-value)', + }, + { + path: 'packages/cli-kit/src/private/node/ui/components/props.tsx', + code: 'interface PropsExample { value: string }', + rule: 'compat(typescript-eslint-naming-convention)', + }, + { + path: 'packages/cli-kit/src/public/node/ui.tsx', + code: 'export function read(first: number, second: number) { return first + second }', + rule: 'eslint(max-params)', + }, + ] + for (const fixture of fixtures) { + const path = join(workspace, fixture.path) + mkdirSync(dirname(path), {recursive: true}) + writeFileSync(path, fixture.code) + } + const result = spawnSync( + process.execPath, + [ + join(dirname(require.resolve('oxlint/package.json')), 'bin/oxlint'), + '--config', + 'oxlint.json', + '--format', + 'json', + 'packages/cli-kit/src', + ], + {cwd: workspace, encoding: 'utf8'}, + ) + expect(result.status, result.stdout + result.stderr).toBe(1) + const diagnostics = JSON.parse(result.stdout).diagnostics.map((diagnostic) => ({ + ...diagnostic, + filename: diagnostic.filename.replaceAll('\\', '/'), + })) + for (const fixture of fixtures) { + expect(diagnostics).toEqual( + expect.arrayContaining([expect.objectContaining({filename: fixture.path, code: fixture.rule})]), + ) + } + } finally { + rmSync(workspace, {recursive: true, force: true, maxRetries: 2}) + } +}) + test('runs custom rules and named suppressions without ESLint', () => { const {mkdtempSync, mkdirSync, writeFileSync, rmSync} = require('node:fs') const {tmpdir} = require('node:os') From fe2a6f2bf3d5577b3064672d23846fb98e0c2ed2 Mon Sep 17 00:00:00 2001 From: Gonzalo Riestra Date: Thu, 15 Oct 2026 16:20:18 +0200 Subject: [PATCH 09/10] Lint CLI entry scripts in package targets --- packages/cli/project.json | 4 +-- packages/eslint-plugin-cli/oxlint.test.js | 30 +++++++++++++++++++++++ 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/packages/cli/project.json b/packages/cli/project.json index 58113824f1b..84e20f5dad8 100644 --- a/packages/cli/project.json +++ b/packages/cli/project.json @@ -36,14 +36,14 @@ "lint": { "executor": "nx:run-commands", "options": { - "command": "pnpm oxlint --config ../../oxlint.json --deny-warnings src 'bin/*.js'", + "command": "pnpm oxlint --config ../../oxlint.json --deny-warnings src bin", "cwd": "packages/cli" } }, "lint:fix": { "executor": "nx:run-commands", "options": { - "command": "pnpm oxlint --config ../../oxlint.json --fix src 'bin/*.js'", + "command": "pnpm oxlint --config ../../oxlint.json --fix src bin", "cwd": "packages/cli" } }, diff --git a/packages/eslint-plugin-cli/oxlint.test.js b/packages/eslint-plugin-cli/oxlint.test.js index 46e0dbfee91..fed088b9314 100644 --- a/packages/eslint-plugin-cli/oxlint.test.js +++ b/packages/eslint-plugin-cli/oxlint.test.js @@ -405,3 +405,33 @@ interface widget {}` rmSync(workspace, {recursive: true, force: true, maxRetries: 2}) } }) + +test.each(['lint', 'lint:fix'])('CLI %s checks entry scripts in bin', (targetName) => { + const {mkdtempSync, mkdirSync, writeFileSync, readFileSync, rmSync} = require('node:fs') + const {tmpdir} = require('node:os') + const {join, dirname} = require('node:path') + const {spawnSync} = require('node:child_process') + const {targets} = JSON.parse(readFileSync(join(__dirname, '../cli/project.json'), 'utf8')) + const workspace = mkdtempSync(join(tmpdir(), 'cli lint bin-')) + try { + const target = targets[targetName].options + const directory = join(workspace, target.cwd) + mkdirSync(join(directory, 'src'), {recursive: true}) + mkdirSync(join(directory, 'bin'), {recursive: true}) + writeFileSync(join(directory, 'src', 'index.ts'), 'export const value = 1\n') + writeFileSync(join(directory, 'bin', 'dev.js'), 'debugger\n') + writeFileSync( + join(workspace, 'oxlint.json'), + JSON.stringify({categories: {correctness: 'off'}, rules: {'no-debugger': 'error'}}), + ) + const binary = join(dirname(require.resolve('oxlint/package.json')), 'bin/oxlint') + const command = target.command.replace('pnpm oxlint', `"${process.execPath}" "${binary}" --format json`) + const result = spawnSync(command, {cwd: directory, shell: true, encoding: 'utf8'}) + expect(result.status, result.stdout + result.stderr).toBe(1) + const {diagnostics} = JSON.parse(result.stdout) + expect(diagnostics.map((diagnostic) => diagnostic.code)).toEqual(['eslint(no-debugger)']) + expect(diagnostics[0].filename.replaceAll('\\', '/')).toBe('bin/dev.js') + } finally { + rmSync(workspace, {recursive: true, force: true, maxRetries: 2}) + } +}) From 030ff58a28a39ba3568729166480b6a05cd79237 Mon Sep 17 00:00:00 2001 From: Gonzalo Riestra Date: Thu, 15 Oct 2026 16:20:18 +0200 Subject: [PATCH 10/10] Align rebased test suppressions with active lint rules --- packages/app/src/cli/commands/app/execute.test.ts | 2 +- packages/app/src/cli/commands/app/generate/extension.test.ts | 1 - .../src/cli/commands/app/import/custom-data-definitions.test.ts | 1 - 3 files changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/app/src/cli/commands/app/execute.test.ts b/packages/app/src/cli/commands/app/execute.test.ts index a3d24580ee7..7b1141e1c42 100644 --- a/packages/app/src/cli/commands/app/execute.test.ts +++ b/packages/app/src/cli/commands/app/execute.test.ts @@ -11,7 +11,7 @@ import { import {Config} from '@oclif/core' import {afterEach, beforeEach, expect, test, vi} from 'vitest' import {ClientError} from 'graphql-request' -// eslint-disable-next-line compat/shopify-typescript-prefer-build-client-schema -- Local execution fixture without an introspection response. +// eslint-disable-next-line @shopify/cli/prefer-build-client-schema -- Local execution fixture without an introspection response. import {GraphQLError, buildSchema, graphql} from 'graphql' import {adminRequestDoc} from '@shopify/cli-kit/node/api/admin' import {runWithCommandEventsForCommand} from '@shopify/cli-kit/node/command-events' diff --git a/packages/app/src/cli/commands/app/generate/extension.test.ts b/packages/app/src/cli/commands/app/generate/extension.test.ts index c92fba4d69b..27a776d5185 100644 --- a/packages/app/src/cli/commands/app/generate/extension.test.ts +++ b/packages/app/src/cli/commands/app/generate/extension.test.ts @@ -24,7 +24,6 @@ import {outputInfo, unstyled} from '@shopify/cli-kit/node/output' import {cwd, joinPath, relativePath} from '@shopify/cli-kit/node/path' import {withCapturedStandardStreams} from '@shopify/cli-kit/node/testing/output' import {TomlFile} from '@shopify/cli-kit/node/toml/toml-file' -// eslint-disable-next-line compat/n-prefer-global-console import {Console} from 'node:console' vi.mock('../../../services/generate.js') diff --git a/packages/app/src/cli/commands/app/import/custom-data-definitions.test.ts b/packages/app/src/cli/commands/app/import/custom-data-definitions.test.ts index f71f9881276..244b8f409ab 100644 --- a/packages/app/src/cli/commands/app/import/custom-data-definitions.test.ts +++ b/packages/app/src/cli/commands/app/import/custom-data-definitions.test.ts @@ -14,7 +14,6 @@ import {runWithCommandEventsForCommand} from '@shopify/cli-kit/node/command-even import {ensureAuthenticatedAdminAsApp} from '@shopify/cli-kit/node/session' import {unstyled} from '@shopify/cli-kit/node/output' import {AbortError, handler} from '@shopify/cli-kit/node/error' -// eslint-disable-next-line compat/n-prefer-global-console import {Console} from 'node:console' vi.mock('../../../services/app-context.js')