diff --git a/.github/actions/ai-generated-release-notes/check-first-comment.js b/.github/actions/ai-generated-release-notes/check-first-comment.js index 70eb7d9b8f..36a9023ba3 100755 --- a/.github/actions/ai-generated-release-notes/check-first-comment.js +++ b/.github/actions/ai-generated-release-notes/check-first-comment.js @@ -1,8 +1,9 @@ #!/usr/bin/env node -import { Octokit } from '@octokit/rest'; import fs from 'fs'; +import { Octokit } from '@octokit/rest'; + const token = process.env.GITHUB_TOKEN; const repo = process.env.GITHUB_REPOSITORY; const issueNumber = process.env.GITHUB_EVENT_ISSUE_NUMBER; diff --git a/.github/actions/ai-generated-release-notes/check-release-notes-exists.js b/.github/actions/ai-generated-release-notes/check-release-notes-exists.js index 2f42bd367c..977ec25f97 100755 --- a/.github/actions/ai-generated-release-notes/check-release-notes-exists.js +++ b/.github/actions/ai-generated-release-notes/check-release-notes-exists.js @@ -1,8 +1,9 @@ #!/usr/bin/env node -import { Octokit } from '@octokit/rest'; import fs from 'fs'; +import { Octokit } from '@octokit/rest'; + const token = process.env.GITHUB_TOKEN; const repo = process.env.GITHUB_REPOSITORY; const issueNumber = process.env.GITHUB_EVENT_ISSUE_NUMBER; diff --git a/.github/actions/ai-generated-release-notes/determine-category.js b/.github/actions/ai-generated-release-notes/determine-category.js index cca4037580..9ee8eb97bd 100755 --- a/.github/actions/ai-generated-release-notes/determine-category.js +++ b/.github/actions/ai-generated-release-notes/determine-category.js @@ -1,7 +1,7 @@ #!/usr/bin/env node -const https = require('https'); const fs = require('fs'); +const https = require('https'); const commentBody = process.env.GITHUB_EVENT_COMMENT_BODY; const prDetailsJson = process.env.PR_DETAILS; diff --git a/.github/actions/ai-generated-release-notes/generate-summary.js b/.github/actions/ai-generated-release-notes/generate-summary.js index d05bcc6c58..244d0b2f45 100755 --- a/.github/actions/ai-generated-release-notes/generate-summary.js +++ b/.github/actions/ai-generated-release-notes/generate-summary.js @@ -1,7 +1,7 @@ #!/usr/bin/env node -const https = require('https'); const fs = require('fs'); +const https = require('https'); const commentBody = process.env.GITHUB_EVENT_COMMENT_BODY; const prDetailsJson = process.env.PR_DETAILS; diff --git a/.github/actions/ai-generated-release-notes/pr-details.js b/.github/actions/ai-generated-release-notes/pr-details.js index 1708d595ae..555e635da6 100755 --- a/.github/actions/ai-generated-release-notes/pr-details.js +++ b/.github/actions/ai-generated-release-notes/pr-details.js @@ -1,8 +1,9 @@ #!/usr/bin/env node -import { Octokit } from '@octokit/rest'; import fs from 'fs'; +import { Octokit } from '@octokit/rest'; + const token = process.env.GITHUB_TOKEN; const repo = process.env.GITHUB_REPOSITORY; const issueNumber = process.env.GITHUB_EVENT_ISSUE_NUMBER; diff --git a/.github/actions/check-migrations.js b/.github/actions/check-migrations.js index e6954960dd..f590372ee6 100644 --- a/.github/actions/check-migrations.js +++ b/.github/actions/check-migrations.js @@ -4,8 +4,8 @@ // 1. Identify the migrations in packages/loot-core/migrations/* on `master` and HEAD // 2. Make sure that any new migrations on HEAD are dated after the latest migration on `master`. -const path = require('path'); const { spawnSync } = require('child_process'); +const path = require('path'); const migrationsDir = path.join( __dirname, diff --git a/.oxlintrc.json b/.oxlintrc.json index cab3adb82e..2488a0bb4b 100644 --- a/.oxlintrc.json +++ b/.oxlintrc.json @@ -1,7 +1,11 @@ { "$schema": "./node_modules/oxlint/configuration_schema.json", "plugins": ["react", "typescript", "import", "jsx-a11y"], - "jsPlugins": ["./packages/eslint-plugin-actual/lib/index.js"], + "jsPlugins": [ + "./packages/eslint-plugin-actual/lib/index.js", + "eslint-plugin-typescript-paths", + "eslint-plugin-perfectionist" + ], "env": { "browser": true, "node": true, @@ -19,6 +23,39 @@ "jsx-a11y/prefer-tag-over-role": "off", "jsx-a11y/tabindex-no-positive": "off", + // Import sorting + // TODO replace once oxfmt supports this: https://github.com/oxc-project/oxc/issues/17076 + "perfectionist/sort-imports": [ + "warn", + { + "groups": [ + "react", + "builtin", + "external", + "loot-core", + "parent", + "sibling", + "index", + "desktop-client" + ], + "customGroups": [ + { + "groupName": "react", + "elementNamePattern": "^react(-.*)?$" + }, + { + "groupName": "loot-core", + "elementNamePattern": "^loot-core" + }, + { + "groupName": "desktop-client", + "elementNamePattern": "^@desktop-client" + } + ], + "newlinesBetween": "always" + } + ], + // Actual rules "actual/typography": "warn", "actual/no-untranslated-strings": "error", @@ -420,6 +457,16 @@ "actual/no-anchor-tag": "off" } }, + { + "files": ["packages/desktop-client/**/*.{js,ts,jsx,tsx}"], + "rules": { + "typescript-paths/absolute-parent-import": [ + "error", + { "preferPathOverBaseUrl": true } + ], + "typescript-paths/absolute-import": ["error", { "enableAlias": false }] + } + }, // TODO: enable these { "files": [ diff --git a/eslint.config.mjs b/eslint.config.mjs deleted file mode 100644 index cae81dc329..0000000000 --- a/eslint.config.mjs +++ /dev/null @@ -1,96 +0,0 @@ -import tsparser from '@typescript-eslint/parser'; -import pluginPerfectionist from 'eslint-plugin-perfectionist'; -import pluginTypescriptPaths from 'eslint-plugin-typescript-paths'; -import { defineConfig } from 'eslint/config'; - -export default defineConfig( - { - ignores: [ - 'packages/api/app/bundle.api.js', - 'packages/api/app/stats.json', - 'packages/api/@types', - 'packages/api/migrations', - 'packages/crdt/src/proto/sync_pb.js', - 'packages/component-library/src/icons/**/*', - 'packages/desktop-client/bundle.browser.js', - 'packages/desktop-client/dev-dist/', - 'packages/desktop-client/service-worker/*', - 'packages/desktop-client/build-electron/', - 'packages/desktop-client/build-stats/', - 'packages/desktop-client/public/kcab/', - 'packages/desktop-client/public/data/', - 'packages/desktop-client/test-results/', - 'packages/desktop-client/playwright-report/', - 'packages/desktop-electron/client-build/', - 'packages/loot-core/**/lib-dist/*', - 'packages/loot-core/**/proto/*', - 'packages/sync-server/coverage/', - 'packages/sync-server/user-files/', - 'packages/sync-server/server-files/', - '.yarn/*', - '.github/*', - '**/build/', - '**/dist/', - '**/node_modules/', - ], - }, - { - linterOptions: { - reportUnusedDisableDirectives: true, - }, - languageOptions: { - parser: tsparser, - }, - }, - { - plugins: { - perfectionist: pluginPerfectionist, - }, - rules: { - // TODO: https://github.com/oxc-project/oxc/issues/17076 - 'perfectionist/sort-imports': [ - 'warn', - { - groups: [ - 'react', - 'builtin', - 'external', - 'loot-core', - 'parent', - 'sibling', - 'index', - 'desktop-client', - ], - customGroups: [ - { - groupName: 'react', - elementNamePattern: '^react(-.*)?$', - }, - { - groupName: 'loot-core', - elementNamePattern: '^loot-core', - }, - { - groupName: 'desktop-client', - elementNamePattern: '^@desktop-client', - }, - ], - newlinesBetween: 'always', - }, - ], - }, - }, - { - files: ['packages/desktop-client/**/*.{js,ts,jsx,tsx}'], - plugins: { - 'typescript-paths': pluginTypescriptPaths, - }, - rules: { - 'typescript-paths/absolute-parent-import': [ - 'error', - { preferPathOverBaseUrl: true }, - ], - 'typescript-paths/absolute-import': ['error', { enableAlias: false }], - }, - }, -); diff --git a/package.json b/package.json index dad9aa844b..df84757703 100644 --- a/package.json +++ b/package.json @@ -52,8 +52,8 @@ "vrt:docker": "./bin/run-vrt", "rebuild-electron": "./node_modules/.bin/electron-rebuild -m ./packages/loot-core", "rebuild-node": "yarn workspace loot-core rebuild", - "lint": "oxfmt --check . && oxlint --deny-warnings && eslint . --max-warnings 0", - "lint:fix": "oxfmt . && oxlint --deny-warnings --fix && eslint . --max-warnings 0 --fix", + "lint": "oxfmt --check . && oxlint --deny-warnings", + "lint:fix": "oxfmt . && oxlint --deny-warnings --fix", "install:server": "yarn workspaces focus @actual-app/sync-server --production", "typecheck": "yarn tsc --incremental && tsc-strict", "jq": "./node_modules/node-jq/bin/jq", @@ -63,7 +63,6 @@ "@octokit/rest": "^22.0.1", "@types/node": "^22.19.1", "@types/prompts": "^2.4.9", - "@typescript-eslint/parser": "^8.50.0", "cross-env": "^10.1.0", "eslint": "^9.39.2", "eslint-plugin-perfectionist": "^4.15.1", @@ -93,8 +92,7 @@ "oxfmt --no-error-on-unmatched-pattern" ], "*.{js,mjs,jsx,ts,tsx}": [ - "oxlint --deny-warnings --fix", - "eslint --max-warnings 0 --fix --no-warn-ignored" + "oxlint --deny-warnings --fix" ] }, "browserslist": [ diff --git a/packages/desktop-client/src/browser-preload.browser.js b/packages/desktop-client/src/browser-preload.browser.js index 81258756bf..384927717a 100644 --- a/packages/desktop-client/src/browser-preload.browser.js +++ b/packages/desktop-client/src/browser-preload.browser.js @@ -3,7 +3,7 @@ import { registerSW } from 'virtual:pwa-register'; import * as Platform from 'loot-core/shared/platform'; -// eslint-disable-next-line typescript-paths/absolute-parent-import +// oxlint-disable-next-line typescript-paths/absolute-parent-import import packageJson from '../package.json'; const backendWorkerUrl = new URL('./browser-server.js', import.meta.url); diff --git a/packages/eslint-plugin-actual/package.json b/packages/eslint-plugin-actual/package.json index 33c8a6d7fb..926ac9dfb6 100644 --- a/packages/eslint-plugin-actual/package.json +++ b/packages/eslint-plugin-actual/package.json @@ -11,16 +11,10 @@ "requireindex": "^1.2.0" }, "devDependencies": { - "eslint": "^9.39.2", - "eslint-plugin-eslint-plugin": "^7.2.0", - "eslint-plugin-node": "^11.1.0", "eslint-vitest-rule-tester": "^3.0.1", "loupe": "^3.2.1", "strip-literal": "^3.1.0", "tinyspy": "^4.0.4", "vitest": "^4.0.9" - }, - "peerDependencies": { - "eslint": ">=7" } } diff --git a/packages/loot-core/src/platform/server/connection/index.electron.ts b/packages/loot-core/src/platform/server/connection/index.electron.ts index 3f2186ef99..3dd466cd97 100644 --- a/packages/loot-core/src/platform/server/connection/index.electron.ts +++ b/packages/loot-core/src/platform/server/connection/index.electron.ts @@ -1,9 +1,8 @@ // @ts-strict-ignore import { APIError } from '../../../server/errors'; -import { logger } from '../log'; - import { runHandler, isMutating } from '../../../server/mutators'; import { captureException } from '../../exceptions'; +import { logger } from '../log'; import type * as T from './index-types'; diff --git a/packages/loot-core/src/platform/server/connection/index.ts b/packages/loot-core/src/platform/server/connection/index.ts index bbfe3fb717..c67683f567 100644 --- a/packages/loot-core/src/platform/server/connection/index.ts +++ b/packages/loot-core/src/platform/server/connection/index.ts @@ -1,9 +1,8 @@ // @ts-strict-ignore import { APIError } from '../../../server/errors'; -import { logger } from '../log'; - import { runHandler, isMutating } from '../../../server/mutators'; import { captureException } from '../../exceptions'; +import { logger } from '../log'; import type * as T from './index-types'; diff --git a/packages/loot-core/src/platform/server/fs/index.electron.ts b/packages/loot-core/src/platform/server/fs/index.electron.ts index 16fc729797..4d4486cadf 100644 --- a/packages/loot-core/src/platform/server/fs/index.electron.ts +++ b/packages/loot-core/src/platform/server/fs/index.electron.ts @@ -1,11 +1,11 @@ // @ts-strict-ignore import * as fs from 'fs'; -import { logger } from '../log'; - import * as path from 'path'; import promiseRetry from 'promise-retry'; +import { logger } from '../log'; + import type * as T from '.'; export { getDocumentDir, getBudgetDir, _setDocumentDir } from './shared'; diff --git a/packages/loot-core/src/platform/server/fs/index.web.ts b/packages/loot-core/src/platform/server/fs/index.web.ts index 50be62f348..e84d86044f 100644 --- a/packages/loot-core/src/platform/server/fs/index.web.ts +++ b/packages/loot-core/src/platform/server/fs/index.web.ts @@ -1,11 +1,10 @@ // @ts-strict-ignore import { SQLiteFS } from 'absurd-sql'; -import { logger } from '../log'; - import IndexedDBBackend from 'absurd-sql/dist/indexeddb-backend'; import * as connection from '../connection'; import * as idb from '../indexeddb'; +import { logger } from '../log'; import { _getModule, type SqlJsModule } from '../sqlite'; import { join } from './path-join'; diff --git a/packages/loot-core/src/platform/server/sqlite/index.electron.ts b/packages/loot-core/src/platform/server/sqlite/index.electron.ts index 53252ac7ed..29adbb41ed 100644 --- a/packages/loot-core/src/platform/server/sqlite/index.electron.ts +++ b/packages/loot-core/src/platform/server/sqlite/index.electron.ts @@ -1,10 +1,9 @@ // @ts-strict-ignore import SQL from 'better-sqlite3'; -import { logger } from '../log'; - import { v4 as uuidv4 } from 'uuid'; import { removeFile, readFile } from '../fs'; +import { logger } from '../log'; import { normalise } from './normalise'; import { unicodeLike } from './unicodeLike'; diff --git a/packages/loot-core/src/platform/server/sqlite/index.web.ts b/packages/loot-core/src/platform/server/sqlite/index.web.ts index 212a84c4ac..6d328a2dc9 100644 --- a/packages/loot-core/src/platform/server/sqlite/index.web.ts +++ b/packages/loot-core/src/platform/server/sqlite/index.web.ts @@ -1,5 +1,6 @@ // @ts-strict-ignore import initSqlJS, { type Database } from '@jlongster/sql.js'; + import { logger } from '../log'; import { normalise } from './normalise'; diff --git a/packages/loot-core/src/shared/transactions.ts b/packages/loot-core/src/shared/transactions.ts index 699d1001c2..4b9d1b54d3 100644 --- a/packages/loot-core/src/shared/transactions.ts +++ b/packages/loot-core/src/shared/transactions.ts @@ -1,6 +1,6 @@ import { v4 as uuidv4 } from 'uuid'; -import { logger } from '../platform/server/log'; +import { logger } from '../platform/server/log'; import { type TransactionEntity } from '../types/models'; import { last, diffItems, applyChanges } from './util'; diff --git a/upcoming-release-notes/6584.md b/upcoming-release-notes/6584.md new file mode 100644 index 0000000000..e9b522fa43 --- /dev/null +++ b/upcoming-release-notes/6584.md @@ -0,0 +1,6 @@ +--- +category: Maintenance +authors: [MatissJanis] +--- + +Remove ESLint, migrate to oxlint, and enforce new import sorting rules across files. diff --git a/yarn.lock b/yarn.lock index 4289609cac..74827dccc7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3819,7 +3819,7 @@ __metadata: languageName: node linkType: hard -"@eslint-community/eslint-utils@npm:^4.4.0, @eslint-community/eslint-utils@npm:^4.7.0, @eslint-community/eslint-utils@npm:^4.8.0": +"@eslint-community/eslint-utils@npm:^4.7.0": version: 4.9.0 resolution: "@eslint-community/eslint-utils@npm:4.9.0" dependencies: @@ -3830,10 +3830,21 @@ __metadata: languageName: node linkType: hard +"@eslint-community/eslint-utils@npm:^4.8.0": + version: 4.9.1 + resolution: "@eslint-community/eslint-utils@npm:4.9.1" + dependencies: + eslint-visitor-keys: "npm:^3.4.3" + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + checksum: 10/863b5467868551c9ae34d03eefe634633d08f623fc7b19d860f8f26eb6f303c1a5934253124163bee96181e45ed22bf27473dccc295937c3078493a4a8c9eddd + languageName: node + linkType: hard + "@eslint-community/regexpp@npm:^4.12.1": - version: 4.12.1 - resolution: "@eslint-community/regexpp@npm:4.12.1" - checksum: 10/c08f1dd7dd18fbb60bdd0d85820656d1374dd898af9be7f82cb00451313402a22d5e30569c150315b4385907cdbca78c22389b2a72ab78883b3173be317620cc + version: 4.12.2 + resolution: "@eslint-community/regexpp@npm:4.12.2" + checksum: 10/049b280fddf71dd325514e0a520024969431dc3a8b02fa77476e6820e9122f28ab4c9168c11821f91a27982d2453bcd7a66193356ea84e84fb7c8d793be1ba0c languageName: node linkType: hard @@ -3867,8 +3878,8 @@ __metadata: linkType: hard "@eslint/eslintrc@npm:^3.3.1": - version: 3.3.1 - resolution: "@eslint/eslintrc@npm:3.3.1" + version: 3.3.3 + resolution: "@eslint/eslintrc@npm:3.3.3" dependencies: ajv: "npm:^6.12.4" debug: "npm:^4.3.2" @@ -3876,10 +3887,10 @@ __metadata: globals: "npm:^14.0.0" ignore: "npm:^5.2.0" import-fresh: "npm:^3.2.1" - js-yaml: "npm:^4.1.0" + js-yaml: "npm:^4.1.1" minimatch: "npm:^3.1.2" strip-json-comments: "npm:^3.1.1" - checksum: 10/cc240addbab3c5fceaa65b2c8d5d4fd77ddbbf472c2f74f0270b9d33263dc9116840b6099c46b64c9680301146250439b044ed79278a1bcc557da412a4e3c1bb + checksum: 10/b586a364ff15ce1b68993aefc051ca330b1fece15fb5baf4a708d00113f9a14895cffd84a5f24c5a97bd4b4321130ab2314f90aa462a250f6b859c2da2cba1f3 languageName: node linkType: hard @@ -9256,22 +9267,6 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/parser@npm:^8.50.0": - version: 8.50.0 - resolution: "@typescript-eslint/parser@npm:8.50.0" - dependencies: - "@typescript-eslint/scope-manager": "npm:8.50.0" - "@typescript-eslint/types": "npm:8.50.0" - "@typescript-eslint/typescript-estree": "npm:8.50.0" - "@typescript-eslint/visitor-keys": "npm:8.50.0" - debug: "npm:^4.3.4" - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: ">=4.8.4 <6.0.0" - checksum: 10/4c3a1011f9122def7b184cdbbc93f2be4167adda787085edb9cee9493957625b0611c0000b8e6d9c6003a0ad2945f2e7db56b31649f03e4c58a59c4d310234b6 - languageName: node - linkType: hard - "@typescript-eslint/project-service@npm:8.46.4": version: 8.46.4 resolution: "@typescript-eslint/project-service@npm:8.46.4" @@ -9879,7 +9874,6 @@ __metadata: "@octokit/rest": "npm:^22.0.1" "@types/node": "npm:^22.19.1" "@types/prompts": "npm:^2.4.9" - "@typescript-eslint/parser": "npm:^8.50.0" cross-env: "npm:^10.1.0" eslint: "npm:^9.39.2" eslint-plugin-perfectionist: "npm:^4.15.1" @@ -14442,60 +14436,15 @@ __metadata: version: 0.0.0-use.local resolution: "eslint-plugin-actual@workspace:packages/eslint-plugin-actual" dependencies: - eslint: "npm:^9.39.2" - eslint-plugin-eslint-plugin: "npm:^7.2.0" - eslint-plugin-node: "npm:^11.1.0" eslint-vitest-rule-tester: "npm:^3.0.1" loupe: "npm:^3.2.1" requireindex: "npm:^1.2.0" strip-literal: "npm:^3.1.0" tinyspy: "npm:^4.0.4" vitest: "npm:^4.0.9" - peerDependencies: - eslint: ">=7" languageName: unknown linkType: soft -"eslint-plugin-es@npm:^3.0.0": - version: 3.0.1 - resolution: "eslint-plugin-es@npm:3.0.1" - dependencies: - eslint-utils: "npm:^2.0.0" - regexpp: "npm:^3.0.0" - peerDependencies: - eslint: ">=4.19.1" - checksum: 10/9814e6305183edfdff7d99cbc0f95f0aed1446045cbd1d4f28e7be0903d0013880f0aaf04486a27de96bfb2f5a746bea97cbb238f9b0035cb378d48d179a0a1b - languageName: node - linkType: hard - -"eslint-plugin-eslint-plugin@npm:^7.2.0": - version: 7.2.0 - resolution: "eslint-plugin-eslint-plugin@npm:7.2.0" - dependencies: - "@eslint-community/eslint-utils": "npm:^4.4.0" - estraverse: "npm:^5.3.0" - peerDependencies: - eslint: ">=9.0.0" - checksum: 10/dce814041aa1486c2f3073f44c01effa93122667c20ce303b8ba8e394d836141c7ff8a25cbb46802e4871e5472178824adda64483c5c489acfbb3d9920332f25 - languageName: node - linkType: hard - -"eslint-plugin-node@npm:^11.1.0": - version: 11.1.0 - resolution: "eslint-plugin-node@npm:11.1.0" - dependencies: - eslint-plugin-es: "npm:^3.0.0" - eslint-utils: "npm:^2.0.0" - ignore: "npm:^5.1.1" - minimatch: "npm:^3.0.4" - resolve: "npm:^1.10.1" - semver: "npm:^6.1.0" - peerDependencies: - eslint: ">=5.16.0" - checksum: 10/bda540f390a84d835989f21f56743f3aa8f41fd9b53359d635c116632c86af92d70d8e6449ddd18860e6241f9cef04fc90c37eb192a9047c3c3a46de6145c30c - languageName: node - linkType: hard - "eslint-plugin-perfectionist@npm:^4.15.1": version: 4.15.1 resolution: "eslint-plugin-perfectionist@npm:4.15.1" @@ -14540,22 +14489,6 @@ __metadata: languageName: node linkType: hard -"eslint-utils@npm:^2.0.0": - version: 2.1.0 - resolution: "eslint-utils@npm:2.1.0" - dependencies: - eslint-visitor-keys: "npm:^1.1.0" - checksum: 10/a7e43a5154a16a90c021cabeb160c3668cccbcf6474ccb2a7d7762698582398f3b938c5330909b858ef7c21182edfc9786dbf89ed7b294f51b7659a378bf7cec - languageName: node - linkType: hard - -"eslint-visitor-keys@npm:^1.1.0": - version: 1.3.0 - resolution: "eslint-visitor-keys@npm:1.3.0" - checksum: 10/595ab230e0fcb52f86ba0986a9a473b9fcae120f3729b43f1157f88f27f8addb1e545c4e3d444185f2980e281ca15be5ada6f65b4599eec227cf30e41233b762 - languageName: node - linkType: hard - "eslint-visitor-keys@npm:^3.4.3": version: 3.4.3 resolution: "eslint-visitor-keys@npm:3.4.3" @@ -14653,11 +14586,11 @@ __metadata: linkType: hard "esquery@npm:^1.5.0": - version: 1.6.0 - resolution: "esquery@npm:1.6.0" + version: 1.7.0 + resolution: "esquery@npm:1.7.0" dependencies: estraverse: "npm:^5.1.0" - checksum: 10/c587fb8ec9ed83f2b1bc97cf2f6854cc30bf784a79d62ba08c6e358bf22280d69aee12827521cf38e69ae9761d23fb7fde593ce315610f85655c139d99b05e5a + checksum: 10/4afaf3089367e1f5885caa116ef386dffd8bfd64da21fd3d0e56e938d2667cfb2e5400ab4a825aa70e799bb3741e5b5d63c0b94d86e2d4cf3095c9e64b2f5a15 languageName: node linkType: hard @@ -14677,7 +14610,7 @@ __metadata: languageName: node linkType: hard -"estraverse@npm:^5.1.0, estraverse@npm:^5.2.0, estraverse@npm:^5.3.0": +"estraverse@npm:^5.1.0, estraverse@npm:^5.2.0": version: 5.3.0 resolution: "estraverse@npm:5.3.0" checksum: 10/37cbe6e9a68014d34dbdc039f90d0baf72436809d02edffcc06ba3c2a12eb298048f877511353b130153e532aac8d68ba78430c0dd2f44806ebc7c014b01585e @@ -16967,7 +16900,7 @@ __metadata: languageName: node linkType: hard -"ignore@npm:^5.1.1, ignore@npm:^5.2.0, ignore@npm:^5.2.4": +"ignore@npm:^5.2.0, ignore@npm:^5.2.4": version: 5.3.2 resolution: "ignore@npm:5.3.2" checksum: 10/cceb6a457000f8f6a50e1196429750d782afce5680dd878aa4221bd79972d68b3a55b4b1458fc682be978f4d3c6a249046aa0880637367216444ab7b014cfc98 @@ -17981,6 +17914,17 @@ __metadata: languageName: node linkType: hard +"js-yaml@npm:^4.1.1": + version: 4.1.1 + resolution: "js-yaml@npm:4.1.1" + dependencies: + argparse: "npm:^2.0.1" + bin: + js-yaml: bin/js-yaml.js + checksum: 10/a52d0519f0f4ef5b4adc1cde466cb54c50d56e2b4a983b9d5c9c0f2f99462047007a6274d7e95617a21d3c91fde3ee6115536ed70991cd645ba8521058b78f77 + languageName: node + linkType: hard + "jsdom@npm:^27.2.0": version: 27.2.0 resolution: "jsdom@npm:27.2.0" @@ -23713,13 +23657,6 @@ __metadata: languageName: node linkType: hard -"regexpp@npm:^3.0.0": - version: 3.2.0 - resolution: "regexpp@npm:3.2.0" - checksum: 10/3310010895a906873262f4b494fc99bcef1e71ef6720a0532c5999ca586498cbd4a284c8e3c2423f9d1d37512fd08d6064b7564e0e59508cf938f76dd15ace84 - languageName: node - linkType: hard - "regexpu-core@npm:^6.2.0": version: 6.4.0 resolution: "regexpu-core@npm:6.4.0" @@ -24039,7 +23976,7 @@ __metadata: languageName: node linkType: hard -"resolve@npm:^1.10.0, resolve@npm:^1.10.1, resolve@npm:^1.17.0, resolve@npm:^1.19.0, resolve@npm:^1.22.1, resolve@npm:^1.22.10": +"resolve@npm:^1.10.0, resolve@npm:^1.17.0, resolve@npm:^1.19.0, resolve@npm:^1.22.1, resolve@npm:^1.22.10": version: 1.22.10 resolution: "resolve@npm:1.22.10" dependencies: @@ -24052,7 +23989,7 @@ __metadata: languageName: node linkType: hard -"resolve@patch:resolve@npm%3A^1.10.0#optional!builtin, resolve@patch:resolve@npm%3A^1.10.1#optional!builtin, resolve@patch:resolve@npm%3A^1.17.0#optional!builtin, resolve@patch:resolve@npm%3A^1.19.0#optional!builtin, resolve@patch:resolve@npm%3A^1.22.1#optional!builtin, resolve@patch:resolve@npm%3A^1.22.10#optional!builtin": +"resolve@patch:resolve@npm%3A^1.10.0#optional!builtin, resolve@patch:resolve@npm%3A^1.17.0#optional!builtin, resolve@patch:resolve@npm%3A^1.19.0#optional!builtin, resolve@patch:resolve@npm%3A^1.22.1#optional!builtin, resolve@patch:resolve@npm%3A^1.22.10#optional!builtin": version: 1.22.10 resolution: "resolve@patch:resolve@npm%3A1.22.10#optional!builtin::version=1.22.10&hash=c3c19d" dependencies: @@ -24566,7 +24503,7 @@ __metadata: languageName: node linkType: hard -"semver@npm:^6.1.0, semver@npm:^6.2.0, semver@npm:^6.3.1": +"semver@npm:^6.2.0, semver@npm:^6.3.1": version: 6.3.1 resolution: "semver@npm:6.3.1" bin: