From d361d39707b053ed6affe976963db9608fd45a93 Mon Sep 17 00:00:00 2001 From: yosuke ota Date: Thu, 28 Nov 2024 10:19:08 +0900 Subject: [PATCH 01/10] feat!: change the plugin into an ESM-only package --- .env-cmdrc.js | 22 --- .env-cmdrc.json | 14 ++ packages/eslint-plugin-svelte/.env-cmdrc.js | 16 --- packages/eslint-plugin-svelte/.env-cmdrc.json | 14 ++ .../{babel.config.js => babel.config.cjs} | 0 packages/eslint-plugin-svelte/package.json | 8 +- .../{postcss.config.js => postcss.config.cjs} | 0 .../eslint-plugin-svelte/src/configs/all.ts | 20 --- .../eslint-plugin-svelte/src/configs/base.ts | 25 ---- .../src/configs/flat/all.ts | 4 +- .../src/configs/flat/base.ts | 11 +- .../src/configs/flat/prettier.ts | 2 +- .../src/configs/flat/recommended.ts | 2 +- .../src/configs/prettier.ts | 26 ---- .../src/configs/recommended.ts | 28 ---- packages/eslint-plugin-svelte/src/index.ts | 52 +++---- .../src/processor/index.ts | 6 +- .../no-unnecessary-condition.ts | 8 +- .../src/rules/block-lang.ts | 6 +- .../src/rules/button-has-type.ts | 4 +- .../src/rules/comment-directive.ts | 8 +- .../rules/derived-has-same-inputs-outputs.ts | 6 +- .../rules/experimental-require-slot-types.ts | 4 +- .../experimental-require-strict-events.ts | 4 +- .../src/rules/first-attribute-linebreak.ts | 4 +- .../rules/html-closing-bracket-new-line.ts | 8 +- .../src/rules/html-closing-bracket-spacing.ts | 2 +- .../src/rules/html-quotes.ts | 10 +- .../src/rules/html-self-closing.ts | 6 +- .../src/rules/indent-helpers/commons.ts | 6 +- .../src/rules/indent-helpers/es.ts | 8 +- .../src/rules/indent-helpers/index.ts | 18 +-- .../rules/indent-helpers/offset-context.ts | 10 +- .../src/rules/indent-helpers/svelte.ts | 14 +- .../src/rules/indent-helpers/ts.ts | 8 +- .../eslint-plugin-svelte/src/rules/indent.ts | 4 +- .../src/rules/infinite-reactive-loop.ts | 8 +- .../src/rules/max-attributes-per-line.ts | 4 +- .../src/rules/mustache-spacing.ts | 6 +- .../src/rules/no-at-debug-tags.ts | 2 +- .../src/rules/no-at-html-tags.ts | 2 +- .../no-deprecated-raw-special-elements.ts | 2 +- .../src/rules/no-dom-manipulating.ts | 4 +- .../src/rules/no-dupe-else-if-blocks.ts | 6 +- .../src/rules/no-dupe-on-directives.ts | 6 +- .../src/rules/no-dupe-style-properties.ts | 6 +- .../src/rules/no-dupe-use-directives.ts | 6 +- .../src/rules/no-dynamic-slot-name.ts | 6 +- ...port-load-in-svelte-module-in-kit-pages.ts | 4 +- .../src/rules/no-extra-reactive-curlies.ts | 4 +- .../src/rules/no-goto-without-base.ts | 8 +- .../src/rules/no-ignored-unsubscribe.ts | 2 +- .../rules/no-immutable-reactive-statements.ts | 6 +- .../src/rules/no-inline-styles.ts | 2 +- .../src/rules/no-inner-declarations.ts | 4 +- .../src/rules/no-inspect.ts | 2 +- .../src/rules/no-not-function-handler.ts | 4 +- .../src/rules/no-object-in-text-mustaches.ts | 2 +- .../src/rules/no-reactive-functions.ts | 4 +- .../src/rules/no-reactive-literals.ts | 4 +- .../src/rules/no-reactive-reassign.ts | 4 +- .../src/rules/no-restricted-html-elements.ts | 2 +- .../no-shorthand-style-property-overrides.ts | 6 +- ...-spaces-around-equal-signs-in-attribute.ts | 2 +- .../src/rules/no-store-async.ts | 4 +- .../src/rules/no-svelte-internal.ts | 2 +- .../src/rules/no-target-blank.ts | 4 +- .../src/rules/no-trailing-spaces.ts | 4 +- .../no-unknown-style-directive-property.ts | 6 +- .../src/rules/no-unused-class-name.ts | 4 +- .../src/rules/no-unused-svelte-ignore.ts | 10 +- .../src/rules/no-useless-mustaches.ts | 4 +- .../src/rules/prefer-class-directive.ts | 6 +- .../rules/prefer-destructured-store-props.ts | 8 +- .../src/rules/prefer-style-directive.ts | 12 +- .../rules/reference-helpers/svelte-store.ts | 10 +- .../src/rules/require-each-key.ts | 2 +- .../rules/require-event-dispatcher-types.ts | 6 +- .../require-optimized-style-attribute.ts | 4 +- .../require-store-callbacks-use-set-param.ts | 4 +- .../rules/require-store-reactive-access.ts | 6 +- .../src/rules/require-stores-init.ts | 4 +- .../src/rules/shorthand-attribute.ts | 6 +- .../src/rules/shorthand-directive.ts | 6 +- .../src/rules/sort-attributes.ts | 8 +- .../src/rules/spaced-html-comment.ts | 2 +- .../eslint-plugin-svelte/src/rules/system.ts | 8 +- .../src/rules/valid-compile.ts | 8 +- .../src/rules/valid-each-key.ts | 4 +- .../rules/valid-prop-names-in-kit-pages.ts | 4 +- .../eslint-plugin-svelte/src/shared/index.ts | 2 +- .../extract-leading-comments.ts | 6 +- .../svelte-compile-warns/ignore-comment.ts | 4 +- .../src/shared/svelte-compile-warns/index.ts | 28 ++-- .../svelte-compile-warns/transform/babel.ts | 8 +- .../svelte-compile-warns/transform/less.ts | 8 +- .../svelte-compile-warns/transform/postcss.ts | 6 +- .../svelte-compile-warns/transform/sass.ts | 6 +- .../svelte-compile-warns/transform/stylus.ts | 8 +- .../transform/typescript.ts | 8 +- .../@eslint-community/eslint-utils.d.ts | 91 ++++++++++++ .../postcss-safe-parser/lib/safe-parser.d.ts | 19 +++ .../src/type-defs/postcss/lib/tokenize.d.ts | 11 ++ packages/eslint-plugin-svelte/src/types.ts | 2 +- .../src/utils/ast-utils.ts | 6 +- .../eslint-plugin-svelte/src/utils/compat.ts | 2 +- .../src/utils/css-utils/index.ts | 6 +- .../src/utils/css-utils/style-attribute.ts | 8 +- .../utils/css-utils/template-safe-parser.ts | 2 +- .../src/utils/eslint-core.ts | 5 +- .../src/utils/get-package-json.ts | 2 +- .../eslint-plugin-svelte/src/utils/index.ts | 2 +- .../src/utils/load-module.ts | 4 +- .../eslint-plugin-svelte/src/utils/rules.ts | 134 +++++++++--------- .../src/utils/svelte-kit.ts | 6 +- .../src/utils/ts-utils/index.ts | 6 +- .../{_config.js => _config.cjs} | 0 .../{_config.js => _config.cjs} | 0 .../{_config.js => _config.cjs} | 0 .../tests/src/configs/all.ts | 33 +---- .../tests/src/configs/base.ts | 39 +---- .../tests/src/configs/recommended.ts | 33 +---- .../tests/src/integration/no-unused-vars.ts | 7 +- .../eslint-plugin-svelte/tests/src/meta.ts | 2 +- .../no-unnecessary-condition.ts | 6 +- .../no-unnecessary-condition.ts | 9 +- .../tests/src/rules/block-lang.ts | 6 +- .../tests/src/rules/button-has-type.ts | 6 +- .../tests/src/rules/comment-directive.ts | 15 +- .../rules/derived-has-same-inputs-outputs.ts | 6 +- .../rules/experimental-require-slot-types.ts | 6 +- .../experimental-require-strict-events.ts | 6 +- .../src/rules/first-attribute-linebreak.ts | 6 +- .../rules/html-closing-bracket-new-line.ts | 12 +- .../src/rules/html-closing-bracket-spacing.ts | 6 +- .../tests/src/rules/html-quotes.ts | 6 +- .../tests/src/rules/html-self-closing.ts | 6 +- .../tests/src/rules/indent.ts | 6 +- .../tests/src/rules/infinite-reactive-loop.ts | 6 +- .../src/rules/max-attributes-per-line.ts | 6 +- .../tests/src/rules/mustache-spacing.ts | 6 +- .../tests/src/rules/no-at-debug-tags.ts | 6 +- .../tests/src/rules/no-at-html-tags.ts | 6 +- .../no-deprecated-raw-special-elements.ts | 12 +- .../tests/src/rules/no-dom-manipulating.ts | 6 +- .../tests/src/rules/no-dupe-else-if-blocks.ts | 6 +- .../tests/src/rules/no-dupe-on-directives.ts | 6 +- .../src/rules/no-dupe-style-properties.ts | 6 +- .../tests/src/rules/no-dupe-use-directives.ts | 6 +- .../tests/src/rules/no-dynamic-slot-name.ts | 6 +- ...port-load-in-svelte-module-in-kit-pages.ts | 6 +- .../src/rules/no-extra-reactive-curlies.ts | 6 +- .../tests/src/rules/no-goto-without-base.ts | 6 +- .../tests/src/rules/no-ignored-unsubscribe.ts | 6 +- .../rules/no-immutable-reactive-statements.ts | 6 +- .../tests/src/rules/no-inline-styles.ts | 6 +- .../tests/src/rules/no-inner-declarations.ts | 6 +- .../tests/src/rules/no-inspect.ts | 6 +- .../src/rules/no-not-function-handler.ts | 6 +- .../src/rules/no-object-in-text-mustaches.ts | 6 +- .../tests/src/rules/no-reactive-functions.ts | 6 +- .../tests/src/rules/no-reactive-literals.ts | 6 +- .../tests/src/rules/no-reactive-reassign.ts | 6 +- .../src/rules/no-restricted-html-elements.ts | 6 +- .../no-shorthand-style-property-overrides.ts | 6 +- ...-spaces-around-equal-signs-in-attribute.ts | 6 +- .../tests/src/rules/no-store-async.ts | 6 +- .../tests/src/rules/no-svelte-internal.ts | 6 +- .../tests/src/rules/no-target-blank.ts | 6 +- .../tests/src/rules/no-trailing-spaces.ts | 6 +- .../no-unknown-style-directive-property.ts | 6 +- .../tests/src/rules/no-unused-class-name.ts | 6 +- .../src/rules/no-unused-svelte-ignore.ts | 6 +- .../tests/src/rules/no-useless-mustaches.ts | 6 +- .../tests/src/rules/prefer-class-directive.ts | 6 +- .../rules/prefer-destructured-store-props.ts | 6 +- .../tests/src/rules/prefer-style-directive.ts | 6 +- .../tests/src/rules/require-each-key.ts | 6 +- .../rules/require-event-dispatcher-types.ts | 6 +- .../require-optimized-style-attribute.ts | 6 +- .../require-store-callbacks-use-set-param.ts | 6 +- .../rules/require-store-reactive-access.ts | 6 +- .../tests/src/rules/require-stores-init.ts | 6 +- .../tests/src/rules/shorthand-attribute.ts | 6 +- .../tests/src/rules/shorthand-directive.ts | 6 +- .../tests/src/rules/sort-attributes.ts | 6 +- .../tests/src/rules/spaced-html-comment.ts | 6 +- .../tests/src/rules/valid-compile.ts | 6 +- .../tests/src/rules/valid-each-key.ts | 6 +- .../rules/valid-prop-names-in-kit-pages.ts | 6 +- .../tests/src/settings/ignore-warnings.ts | 17 +-- .../eslint-plugin-svelte/tests/utils/utils.ts | 33 +++-- .../tools/lib/load-rules.ts | 11 +- .../eslint-plugin-svelte/tools/new-rule.ts | 8 +- .../tools/render-rules.ts | 4 +- .../tools/update-docs-rules-index.ts | 6 +- .../eslint-plugin-svelte/tools/update-docs.ts | 10 +- .../eslint-plugin-svelte/tools/update-meta.ts | 5 +- .../tools/update-readme.ts | 6 +- .../tools/update-rule-types.ts | 4 +- .../tools/update-rules.ts | 10 +- .../tools/update-rulesets.ts | 121 ++-------------- .../tools/update-types-for-node.ts | 4 +- .../@eslint-community/eslint-utils/index.d.ts | 89 ------------ .../lib/safe-parser/index.d.ts | 17 --- .../typings/postcss/lib/tokenize/index.d.ts | 9 -- prettier.config.js => prettier.config.cjs | 0 207 files changed, 835 insertions(+), 1095 deletions(-) delete mode 100644 .env-cmdrc.js create mode 100644 .env-cmdrc.json delete mode 100644 packages/eslint-plugin-svelte/.env-cmdrc.js create mode 100644 packages/eslint-plugin-svelte/.env-cmdrc.json rename packages/eslint-plugin-svelte/{babel.config.js => babel.config.cjs} (100%) rename packages/eslint-plugin-svelte/{postcss.config.js => postcss.config.cjs} (100%) delete mode 100644 packages/eslint-plugin-svelte/src/configs/all.ts delete mode 100644 packages/eslint-plugin-svelte/src/configs/base.ts delete mode 100644 packages/eslint-plugin-svelte/src/configs/prettier.ts delete mode 100644 packages/eslint-plugin-svelte/src/configs/recommended.ts create mode 100644 packages/eslint-plugin-svelte/src/type-defs/@eslint-community/eslint-utils.d.ts create mode 100644 packages/eslint-plugin-svelte/src/type-defs/postcss-safe-parser/lib/safe-parser.d.ts create mode 100644 packages/eslint-plugin-svelte/src/type-defs/postcss/lib/tokenize.d.ts rename packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-custom-warn/{_config.js => _config.cjs} (100%) rename packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-ignore/{_config.js => _config.cjs} (100%) rename packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/svelte-config-ignore/{_config.js => _config.cjs} (100%) delete mode 100644 packages/eslint-plugin-svelte/typings/@eslint-community/eslint-utils/index.d.ts delete mode 100644 packages/eslint-plugin-svelte/typings/postcss-safe-parser/lib/safe-parser/index.d.ts delete mode 100644 packages/eslint-plugin-svelte/typings/postcss/lib/tokenize/index.d.ts rename prettier.config.js => prettier.config.cjs (100%) diff --git a/.env-cmdrc.js b/.env-cmdrc.js deleted file mode 100644 index 3261880a7..000000000 --- a/.env-cmdrc.js +++ /dev/null @@ -1,22 +0,0 @@ -'use strict'; - -module.exports = { - version: { - IN_VERSION_SCRIPT: 'true' - }, - 'version-ci': { - IN_VERSION_CI_SCRIPT: 'true' - }, - debug: { - DEBUG: 'eslint-plugin-svelte*' - }, - 'update-fixtures': { - UPDATE_FIXTURES: 'true' - }, - sveltekit: { - NODE_OPTIONS: `--import ./svelte-kit-import.mjs ${ - // eslint-disable-next-line no-process-env -- ignore - process.env.NODE_OPTIONS || '' - }` - } -}; diff --git a/.env-cmdrc.json b/.env-cmdrc.json new file mode 100644 index 000000000..b860db924 --- /dev/null +++ b/.env-cmdrc.json @@ -0,0 +1,14 @@ +{ + "version": { + "IN_VERSION_SCRIPT": "true" + }, + "version-ci": { + "IN_VERSION_CI_SCRIPT": "true" + }, + "debug": { + "DEBUG": "eslint-plugin-svelte*" + }, + "update-fixtures": { + "UPDATE_FIXTURES": "true" + } +} diff --git a/packages/eslint-plugin-svelte/.env-cmdrc.js b/packages/eslint-plugin-svelte/.env-cmdrc.js deleted file mode 100644 index bd20dc380..000000000 --- a/packages/eslint-plugin-svelte/.env-cmdrc.js +++ /dev/null @@ -1,16 +0,0 @@ -'use strict'; - -module.exports = { - version: { - IN_VERSION_SCRIPT: 'true' - }, - 'version-ci': { - IN_VERSION_CI_SCRIPT: 'true' - }, - debug: { - DEBUG: 'eslint-plugin-svelte*' - }, - 'update-fixtures': { - UPDATE_FIXTURES: 'true' - } -}; diff --git a/packages/eslint-plugin-svelte/.env-cmdrc.json b/packages/eslint-plugin-svelte/.env-cmdrc.json new file mode 100644 index 000000000..b860db924 --- /dev/null +++ b/packages/eslint-plugin-svelte/.env-cmdrc.json @@ -0,0 +1,14 @@ +{ + "version": { + "IN_VERSION_SCRIPT": "true" + }, + "version-ci": { + "IN_VERSION_CI_SCRIPT": "true" + }, + "debug": { + "DEBUG": "eslint-plugin-svelte*" + }, + "update-fixtures": { + "UPDATE_FIXTURES": "true" + } +} diff --git a/packages/eslint-plugin-svelte/babel.config.js b/packages/eslint-plugin-svelte/babel.config.cjs similarity index 100% rename from packages/eslint-plugin-svelte/babel.config.js rename to packages/eslint-plugin-svelte/babel.config.cjs diff --git a/packages/eslint-plugin-svelte/package.json b/packages/eslint-plugin-svelte/package.json index cf7378c42..b16ba6a8b 100644 --- a/packages/eslint-plugin-svelte/package.json +++ b/packages/eslint-plugin-svelte/package.json @@ -10,7 +10,7 @@ "engines": { "node": "^18.20.4 || ^20.18.0 || >=22.10.0" }, - "type": "commonjs", + "type": "module", "main": "lib/index.js", "files": [ "lib" @@ -40,7 +40,7 @@ "test": "pnpm run mocha \"tests/src/**/*.ts\" --reporter dot --timeout 60000", "test:debug": "env-cmd -e debug pnpm run test", "test:update-fixtures": "env-cmd -e update-fixtures pnpm run test", - "ts": "node -r esbuild-register", + "ts": "node --import tsx/esm", "typecov": "type-coverage", "update": "pnpm run ts ./tools/update.ts", "version": "env-cmd -e version pnpm run update", @@ -63,7 +63,7 @@ "known-css-properties": "^0.35.0", "postcss": "^8.4.49", "postcss-load-config": "^3.1.4", - "postcss-safe-parser": "^7.0.0", + "postcss-safe-parser": "^6.0.0", "postcss-selector-parser": "^7.0.0", "semver": "^7.6.3", "svelte-eslint-parser": "^1.0.0-next.1" @@ -86,7 +86,6 @@ "acorn": "^8.14.0", "assert": "^2.1.0", "esbuild": "^0.24.0", - "esbuild-register": "^3.6.0", "eslint-scope": "^8.2.0", "eslint-typegen": "^0.3.2", "eslint-visitor-keys": "^4.2.0", @@ -100,6 +99,7 @@ "stylus": "^0.64.0", "svelte": "^5.2.9", "svelte-i18n": "^4.0.1", + "tsx": "^4.19.2", "type-coverage": "^2.29.7", "yaml": "^2.6.1" }, diff --git a/packages/eslint-plugin-svelte/postcss.config.js b/packages/eslint-plugin-svelte/postcss.config.cjs similarity index 100% rename from packages/eslint-plugin-svelte/postcss.config.js rename to packages/eslint-plugin-svelte/postcss.config.cjs diff --git a/packages/eslint-plugin-svelte/src/configs/all.ts b/packages/eslint-plugin-svelte/src/configs/all.ts deleted file mode 100644 index 44b943f91..000000000 --- a/packages/eslint-plugin-svelte/src/configs/all.ts +++ /dev/null @@ -1,20 +0,0 @@ -import type { Linter } from 'eslint'; -import path from 'node:path'; -import { rules } from '../utils/rules'; -const base = require.resolve('./base'); -const baseExtend = path.extname(`${base}`) === '.ts' ? 'plugin:svelte/base' : base; -const config: Linter.LegacyConfig = { - extends: [baseExtend], - rules: Object.fromEntries( - rules - .map((rule) => [`svelte/${rule.meta.docs.ruleName}`, 'error']) - .filter( - ([ruleName]) => - ![ - // Does not work without options. - 'svelte/no-restricted-html-elements' - ].includes(ruleName) - ) - ) -}; -export = config; diff --git a/packages/eslint-plugin-svelte/src/configs/base.ts b/packages/eslint-plugin-svelte/src/configs/base.ts deleted file mode 100644 index 21114065d..000000000 --- a/packages/eslint-plugin-svelte/src/configs/base.ts +++ /dev/null @@ -1,25 +0,0 @@ -// IMPORTANT! -// This file has been automatically generated, -// in order to update its content execute "pnpm run update" -import type { Linter } from 'eslint'; -const config: Linter.LegacyConfig = { - plugins: ['svelte'], - overrides: [ - { - files: ['*.svelte'], - parser: require.resolve('svelte-eslint-parser'), - rules: { - // ESLint core rules known to cause problems with `.svelte`. - 'no-inner-declarations': 'off', // The AST generated by svelte-eslint-parser will false positives in it rule because the root node of the script is not the `Program`. - // "no-irregular-whitespace": "off", - // Self assign is one of way to update reactive value in Svelte. - 'no-self-assign': 'off', - - // eslint-plugin-svelte rules - 'svelte/comment-directive': 'error', - 'svelte/system': 'error' - } - } - ] -}; -export = config; diff --git a/packages/eslint-plugin-svelte/src/configs/flat/all.ts b/packages/eslint-plugin-svelte/src/configs/flat/all.ts index 8f179ed36..1ac3534a8 100644 --- a/packages/eslint-plugin-svelte/src/configs/flat/all.ts +++ b/packages/eslint-plugin-svelte/src/configs/flat/all.ts @@ -1,6 +1,6 @@ import type { Linter } from 'eslint'; -import { rules } from '../../utils/rules'; -import base from './base'; +import { rules } from '../../utils/rules.js'; +import base from './base.js'; const config: Linter.Config[] = [ ...base, { diff --git a/packages/eslint-plugin-svelte/src/configs/flat/base.ts b/packages/eslint-plugin-svelte/src/configs/flat/base.ts index 9882b43fc..7c74ffb74 100644 --- a/packages/eslint-plugin-svelte/src/configs/flat/base.ts +++ b/packages/eslint-plugin-svelte/src/configs/flat/base.ts @@ -2,13 +2,17 @@ // This file has been automatically generated, // in order to update its content execute "pnpm run update" import type { ESLint, Linter } from 'eslint'; +import * as parser from 'svelte-eslint-parser'; +let pluginObject: ESLint.Plugin | null = null; +export function setPluginObject(plugin: ESLint.Plugin): void { + pluginObject = plugin; +} const config: Linter.Config[] = [ { name: 'svelte:base:setup-plugin', plugins: { get svelte(): ESLint.Plugin { - // eslint-disable-next-line @typescript-eslint/no-require-imports -- ignore - return require('../../index'); + return pluginObject!; } } }, @@ -16,8 +20,7 @@ const config: Linter.Config[] = [ name: 'svelte:base:setup-for-svelte', files: ['*.svelte', '**/*.svelte'], languageOptions: { - // eslint-disable-next-line @typescript-eslint/no-require-imports -- ignore - parser: require('svelte-eslint-parser') + parser }, rules: { // ESLint core rules known to cause problems with `.svelte`. diff --git a/packages/eslint-plugin-svelte/src/configs/flat/prettier.ts b/packages/eslint-plugin-svelte/src/configs/flat/prettier.ts index a97e410c5..c89d58934 100644 --- a/packages/eslint-plugin-svelte/src/configs/flat/prettier.ts +++ b/packages/eslint-plugin-svelte/src/configs/flat/prettier.ts @@ -2,7 +2,7 @@ // This file has been automatically generated, // in order to update its content execute "pnpm run update" import type { Linter } from 'eslint'; -import base from './base'; +import base from './base.js'; const config: Linter.Config[] = [ ...base, { diff --git a/packages/eslint-plugin-svelte/src/configs/flat/recommended.ts b/packages/eslint-plugin-svelte/src/configs/flat/recommended.ts index f948fd083..5e3110e24 100644 --- a/packages/eslint-plugin-svelte/src/configs/flat/recommended.ts +++ b/packages/eslint-plugin-svelte/src/configs/flat/recommended.ts @@ -2,7 +2,7 @@ // This file has been automatically generated, // in order to update its content execute "pnpm run update" import type { Linter } from 'eslint'; -import base from './base'; +import base from './base.js'; const config: Linter.Config[] = [ ...base, { diff --git a/packages/eslint-plugin-svelte/src/configs/prettier.ts b/packages/eslint-plugin-svelte/src/configs/prettier.ts deleted file mode 100644 index 6b4faf299..000000000 --- a/packages/eslint-plugin-svelte/src/configs/prettier.ts +++ /dev/null @@ -1,26 +0,0 @@ -// IMPORTANT! -// This file has been automatically generated, -// in order to update its content execute "pnpm run update" -import type { Linter } from 'eslint'; -import path from 'node:path'; -const base = require.resolve('./base'); -const baseExtend = path.extname(`${base}`) === '.ts' ? 'plugin:svelte/base' : base; -const config: Linter.LegacyConfig = { - extends: [baseExtend], - rules: { - // eslint-plugin-svelte rules - 'svelte/first-attribute-linebreak': 'off', - 'svelte/html-closing-bracket-new-line': 'off', - 'svelte/html-closing-bracket-spacing': 'off', - 'svelte/html-quotes': 'off', - 'svelte/html-self-closing': 'off', - 'svelte/indent': 'off', - 'svelte/max-attributes-per-line': 'off', - 'svelte/mustache-spacing': 'off', - 'svelte/no-spaces-around-equal-signs-in-attribute': 'off', - 'svelte/no-trailing-spaces': 'off', - 'svelte/shorthand-attribute': 'off', - 'svelte/shorthand-directive': 'off' - } -}; -export = config; diff --git a/packages/eslint-plugin-svelte/src/configs/recommended.ts b/packages/eslint-plugin-svelte/src/configs/recommended.ts deleted file mode 100644 index 683ab215e..000000000 --- a/packages/eslint-plugin-svelte/src/configs/recommended.ts +++ /dev/null @@ -1,28 +0,0 @@ -// IMPORTANT! -// This file has been automatically generated, -// in order to update its content execute "pnpm run update" -import type { Linter } from 'eslint'; -import path from 'node:path'; -const base = require.resolve('./base'); -const baseExtend = path.extname(`${base}`) === '.ts' ? 'plugin:svelte/base' : base; -const config: Linter.LegacyConfig = { - extends: [baseExtend], - rules: { - // eslint-plugin-svelte rules - 'svelte/comment-directive': 'error', - 'svelte/no-at-debug-tags': 'warn', - 'svelte/no-at-html-tags': 'error', - 'svelte/no-dupe-else-if-blocks': 'error', - 'svelte/no-dupe-style-properties': 'error', - 'svelte/no-dynamic-slot-name': 'error', - 'svelte/no-inner-declarations': 'error', - 'svelte/no-not-function-handler': 'error', - 'svelte/no-object-in-text-mustaches': 'error', - 'svelte/no-shorthand-style-property-overrides': 'error', - 'svelte/no-unknown-style-directive-property': 'error', - 'svelte/no-unused-svelte-ignore': 'error', - 'svelte/system': 'error', - 'svelte/valid-compile': 'error' - } -}; -export = config; diff --git a/packages/eslint-plugin-svelte/src/index.ts b/packages/eslint-plugin-svelte/src/index.ts index 826a7b8d2..4d4ec8429 100644 --- a/packages/eslint-plugin-svelte/src/index.ts +++ b/packages/eslint-plugin-svelte/src/index.ts @@ -1,29 +1,26 @@ import './rule-types'; -import type { RuleModule } from './types'; -import { rules as ruleList } from './utils/rules'; -import base from './configs/base'; -import recommended from './configs/recommended'; -import prettier from './configs/prettier'; -import all from './configs/all'; -import flatBase from './configs/flat/base'; -import flatRecommended from './configs/flat/recommended'; -import flatPrettier from './configs/flat/prettier'; -import flatAll from './configs/flat/all'; -import * as processor from './processor'; -import * as meta from './meta'; +import type { RuleModule } from './types.js'; +import { rules as ruleList } from './utils/rules.js'; +import base, { setPluginObject } from './configs/flat/base.js'; +import recommended from './configs/flat/recommended.js'; +import prettier from './configs/flat/prettier.js'; +import all from './configs/flat/all.js'; +import * as processor from './processor/index.js'; +import * as meta from './meta.js'; -const configs = { +export const configs = { base, recommended, prettier, all, - 'flat/base': flatBase, - 'flat/recommended': flatRecommended, - 'flat/prettier': flatPrettier, - 'flat/all': flatAll + // For backward compatibility + 'flat/base': base, + 'flat/recommended': recommended, + 'flat/prettier': prettier, + 'flat/all': all }; -const rules = ruleList.reduce( +export const rules = ruleList.reduce( (obj, r) => { obj[r.meta.docs.ruleName] = r; return obj; @@ -31,12 +28,17 @@ const rules = ruleList.reduce( {} as { [key: string]: RuleModule } ); -export = { - meta, - configs, +export { meta }; +export const processors = { + '.svelte': processor, + svelte: processor +}; + +const plugin = { rules, - processors: { - '.svelte': processor, - svelte: processor - } + configs, + meta, + processors }; +setPluginObject(plugin as never); +export default plugin; diff --git a/packages/eslint-plugin-svelte/src/processor/index.ts b/packages/eslint-plugin-svelte/src/processor/index.ts index fa0dd2688..268ae2238 100644 --- a/packages/eslint-plugin-svelte/src/processor/index.ts +++ b/packages/eslint-plugin-svelte/src/processor/index.ts @@ -1,7 +1,7 @@ import type { Linter } from 'eslint'; -import type { Shared } from '../shared'; -import { beginShared, terminateShared } from '../shared'; -export * as meta from '../meta'; +import type { Shared } from '../shared/index.js'; +import { beginShared, terminateShared } from '../shared/index.js'; +export * as meta from '../meta.js'; /** preprocess */ export function preprocess(code: string, filename: string): string[] { diff --git a/packages/eslint-plugin-svelte/src/rules/@typescript-eslint/no-unnecessary-condition.ts b/packages/eslint-plugin-svelte/src/rules/@typescript-eslint/no-unnecessary-condition.ts index eb3123b2c..ff7c6b475 100644 --- a/packages/eslint-plugin-svelte/src/rules/@typescript-eslint/no-unnecessary-condition.ts +++ b/packages/eslint-plugin-svelte/src/rules/@typescript-eslint/no-unnecessary-condition.ts @@ -3,7 +3,7 @@ // https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/src/rules/no-unnecessary-condition.ts import type { TSESTree } from '@typescript-eslint/types'; import type { AST } from 'svelte-eslint-parser'; -import { createRule } from '../../utils'; +import { createRule } from '../../utils/index.js'; import { isFalsyType, getConstrainedTypeAtLocation, @@ -20,9 +20,9 @@ import { getTypeOfPropertyOfType, getTypeName, isTupleType -} from '../../utils/ts-utils'; -import type { TS, TSTools } from '../../utils/ts-utils'; -import { getSourceCode } from '../../utils/compat'; +} from '../../utils/ts-utils/index.js'; +import type { TS, TSTools } from '../../utils/ts-utils/index.js'; +import { getSourceCode } from '../../utils/compat.js'; /** * Returns all types of a union type or an array containing `type` itself if it's no union type. diff --git a/packages/eslint-plugin-svelte/src/rules/block-lang.ts b/packages/eslint-plugin-svelte/src/rules/block-lang.ts index 1beb94e80..67b32ff84 100644 --- a/packages/eslint-plugin-svelte/src/rules/block-lang.ts +++ b/packages/eslint-plugin-svelte/src/rules/block-lang.ts @@ -1,7 +1,7 @@ -import { createRule } from '../utils'; -import { getLangValue } from '../utils/ast-utils'; +import { createRule } from '../utils/index.js'; +import { getLangValue } from '../utils/ast-utils.js'; import type { SvelteScriptElement, SvelteStyleElement } from 'svelte-eslint-parser/lib/ast'; -import { getSourceCode } from '../utils/compat'; +import { getSourceCode } from '../utils/compat.js'; export default createRule('block-lang', { meta: { diff --git a/packages/eslint-plugin-svelte/src/rules/button-has-type.ts b/packages/eslint-plugin-svelte/src/rules/button-has-type.ts index a6f29aa6f..f76a3244b 100644 --- a/packages/eslint-plugin-svelte/src/rules/button-has-type.ts +++ b/packages/eslint-plugin-svelte/src/rules/button-has-type.ts @@ -1,11 +1,11 @@ import type { AST } from 'svelte-eslint-parser'; -import { createRule } from '../utils'; +import { createRule } from '../utils/index.js'; import { findAttribute, findShorthandAttribute, findBindDirective, getStaticAttributeValue -} from '../utils/ast-utils'; +} from '../utils/ast-utils.js'; type Options = { button: boolean; diff --git a/packages/eslint-plugin-svelte/src/rules/comment-directive.ts b/packages/eslint-plugin-svelte/src/rules/comment-directive.ts index 4e5f2e89f..862705113 100644 --- a/packages/eslint-plugin-svelte/src/rules/comment-directive.ts +++ b/packages/eslint-plugin-svelte/src/rules/comment-directive.ts @@ -1,8 +1,8 @@ import type { AST } from 'svelte-eslint-parser'; -import { getShared } from '../shared'; -import type { CommentDirectives } from '../shared/comment-directives'; -import { createRule } from '../utils'; -import { getFilename, getSourceCode } from '../utils/compat'; +import { getShared } from '../shared/index.js'; +import type { CommentDirectives } from '../shared/comment-directives.js'; +import { createRule } from '../utils/index.js'; +import { getFilename, getSourceCode } from '../utils/compat.js'; type RuleAndLocation = { ruleId: string; diff --git a/packages/eslint-plugin-svelte/src/rules/derived-has-same-inputs-outputs.ts b/packages/eslint-plugin-svelte/src/rules/derived-has-same-inputs-outputs.ts index 197be0285..3ea90c277 100644 --- a/packages/eslint-plugin-svelte/src/rules/derived-has-same-inputs-outputs.ts +++ b/packages/eslint-plugin-svelte/src/rules/derived-has-same-inputs-outputs.ts @@ -1,7 +1,7 @@ import type { TSESTree } from '@typescript-eslint/types'; -import { createRule } from '../utils'; -import type { RuleContext } from '../types'; -import { extractStoreReferences } from './reference-helpers/svelte-store'; +import { createRule } from '../utils/index.js'; +import type { RuleContext } from '../types.js'; +import { extractStoreReferences } from './reference-helpers/svelte-store.js'; export default createRule('derived-has-same-inputs-outputs', { meta: { diff --git a/packages/eslint-plugin-svelte/src/rules/experimental-require-slot-types.ts b/packages/eslint-plugin-svelte/src/rules/experimental-require-slot-types.ts index cf6700f08..498fc9568 100644 --- a/packages/eslint-plugin-svelte/src/rules/experimental-require-slot-types.ts +++ b/packages/eslint-plugin-svelte/src/rules/experimental-require-slot-types.ts @@ -1,5 +1,5 @@ -import { createRule } from '../utils'; -import { getLangValue } from '../utils/ast-utils'; +import { createRule } from '../utils/index.js'; +import { getLangValue } from '../utils/ast-utils.js'; const SLOTS_TYPE_NAME = '$$Slots'; diff --git a/packages/eslint-plugin-svelte/src/rules/experimental-require-strict-events.ts b/packages/eslint-plugin-svelte/src/rules/experimental-require-strict-events.ts index a790de3c1..bb8cb2eb6 100644 --- a/packages/eslint-plugin-svelte/src/rules/experimental-require-strict-events.ts +++ b/packages/eslint-plugin-svelte/src/rules/experimental-require-strict-events.ts @@ -1,7 +1,7 @@ import type { AST } from 'svelte-eslint-parser'; -import { createRule } from '../utils'; -import { findAttribute, getLangValue } from '../utils/ast-utils'; +import { createRule } from '../utils/index.js'; +import { findAttribute, getLangValue } from '../utils/ast-utils.js'; const EVENTS_TYPE_NAME = '$$Events'; diff --git a/packages/eslint-plugin-svelte/src/rules/first-attribute-linebreak.ts b/packages/eslint-plugin-svelte/src/rules/first-attribute-linebreak.ts index 8e24ea0cd..38379b33c 100644 --- a/packages/eslint-plugin-svelte/src/rules/first-attribute-linebreak.ts +++ b/packages/eslint-plugin-svelte/src/rules/first-attribute-linebreak.ts @@ -1,6 +1,6 @@ import type { AST } from 'svelte-eslint-parser'; -import { createRule } from '../utils'; -import { getSourceCode } from '../utils/compat'; +import { createRule } from '../utils/index.js'; +import { getSourceCode } from '../utils/compat.js'; export default createRule('first-attribute-linebreak', { meta: { diff --git a/packages/eslint-plugin-svelte/src/rules/html-closing-bracket-new-line.ts b/packages/eslint-plugin-svelte/src/rules/html-closing-bracket-new-line.ts index 20902d7ed..5bff88a58 100644 --- a/packages/eslint-plugin-svelte/src/rules/html-closing-bracket-new-line.ts +++ b/packages/eslint-plugin-svelte/src/rules/html-closing-bracket-new-line.ts @@ -1,7 +1,7 @@ import type { AST } from 'svelte-eslint-parser'; -import { createRule } from '../utils'; -import { getSourceCode } from '../utils/compat'; -import type { SourceCode } from '../types'; +import { createRule } from '../utils/index.js'; +import { getSourceCode } from '../utils/compat.js'; +import type { SourceCode } from '../types.js'; type ExpectedNode = AST.SvelteStartTag | AST.SvelteEndTag; type OptionValue = 'always' | 'never'; @@ -119,7 +119,7 @@ export default createRule('html-closing-bracket-new-line', { type: 'suggestion' }, create(context) { - const options: RuleOptions = context.options[0] ?? {}; + const options: RuleOptions = { ...(context.options[0] ?? {}) }; options.singleline ??= 'never'; options.multiline ??= 'always'; diff --git a/packages/eslint-plugin-svelte/src/rules/html-closing-bracket-spacing.ts b/packages/eslint-plugin-svelte/src/rules/html-closing-bracket-spacing.ts index 20c6daea9..784a9af2c 100644 --- a/packages/eslint-plugin-svelte/src/rules/html-closing-bracket-spacing.ts +++ b/packages/eslint-plugin-svelte/src/rules/html-closing-bracket-spacing.ts @@ -1,4 +1,4 @@ -import { createRule } from '../utils'; +import { createRule } from '../utils/index.js'; import type { AST } from 'svelte-eslint-parser'; export default createRule('html-closing-bracket-spacing', { diff --git a/packages/eslint-plugin-svelte/src/rules/html-quotes.ts b/packages/eslint-plugin-svelte/src/rules/html-quotes.ts index 8935e3da5..67ad8dd02 100644 --- a/packages/eslint-plugin-svelte/src/rules/html-quotes.ts +++ b/packages/eslint-plugin-svelte/src/rules/html-quotes.ts @@ -1,9 +1,9 @@ import type { AST } from 'svelte-eslint-parser'; -import { createRule } from '../utils'; -import type { QuoteAndRange } from '../utils/ast-utils'; -import { getMustacheTokens } from '../utils/ast-utils'; -import { getAttributeValueQuoteAndRange } from '../utils/ast-utils'; -import { getSourceCode } from '../utils/compat'; +import { createRule } from '../utils/index.js'; +import type { QuoteAndRange } from '../utils/ast-utils.js'; +import { getMustacheTokens } from '../utils/ast-utils.js'; +import { getAttributeValueQuoteAndRange } from '../utils/ast-utils.js'; +import { getSourceCode } from '../utils/compat.js'; const QUOTE_CHARS = { double: '"', diff --git a/packages/eslint-plugin-svelte/src/rules/html-self-closing.ts b/packages/eslint-plugin-svelte/src/rules/html-self-closing.ts index a929bdd12..7e3d3ff98 100644 --- a/packages/eslint-plugin-svelte/src/rules/html-self-closing.ts +++ b/packages/eslint-plugin-svelte/src/rules/html-self-closing.ts @@ -1,7 +1,7 @@ import type { AST } from 'svelte-eslint-parser'; -import { createRule } from '../utils'; -import { getNodeName, isVoidHtmlElement, isForeignElement } from '../utils/ast-utils'; -import { getSourceCode } from '../utils/compat'; +import { createRule } from '../utils/index.js'; +import { getNodeName, isVoidHtmlElement, isForeignElement } from '../utils/ast-utils.js'; +import { getSourceCode } from '../utils/compat.js'; const TYPE_MESSAGES = { normal: 'HTML elements', diff --git a/packages/eslint-plugin-svelte/src/rules/indent-helpers/commons.ts b/packages/eslint-plugin-svelte/src/rules/indent-helpers/commons.ts index 4ea95089a..b7d0b65d1 100644 --- a/packages/eslint-plugin-svelte/src/rules/indent-helpers/commons.ts +++ b/packages/eslint-plugin-svelte/src/rules/indent-helpers/commons.ts @@ -1,8 +1,8 @@ -import type { ASTNode, SourceCode } from '../../types'; +import type { ASTNode, SourceCode } from '../../types.js'; import type { AST } from 'svelte-eslint-parser'; import { isOpeningParenToken, isClosingParenToken } from '@eslint-community/eslint-utils'; -import { isNotWhitespace, isWhitespace } from './ast'; -import type { OffsetContext } from './offset-context'; +import { isNotWhitespace, isWhitespace } from './ast.js'; +import type { OffsetContext } from './offset-context.js'; export type AnyToken = AST.Token | AST.Comment; export type MaybeNode = { diff --git a/packages/eslint-plugin-svelte/src/rules/indent-helpers/es.ts b/packages/eslint-plugin-svelte/src/rules/indent-helpers/es.ts index 3e30ed77a..0cd04f964 100644 --- a/packages/eslint-plugin-svelte/src/rules/indent-helpers/es.ts +++ b/packages/eslint-plugin-svelte/src/rules/indent-helpers/es.ts @@ -1,7 +1,7 @@ import type { AST } from 'svelte-eslint-parser'; import type { TSESTree } from '@typescript-eslint/types'; -import type { IndentContext } from './commons'; -import { getFirstAndLastTokens } from './commons'; +import type { IndentContext } from './commons.js'; +import { getFirstAndLastTokens } from './commons.js'; import { isArrowToken, isClosingBraceToken, @@ -15,8 +15,8 @@ import { isOpeningParenToken, isSemicolonToken } from '@eslint-community/eslint-utils'; -import type { ESNodeListener } from '../../types-for-node'; -import { getParent } from '../../utils/ast-utils'; +import type { ESNodeListener } from '../../types-for-node.js'; +import { getParent } from '../../utils/ast-utils.js'; type NodeListener = ESNodeListener; diff --git a/packages/eslint-plugin-svelte/src/rules/indent-helpers/index.ts b/packages/eslint-plugin-svelte/src/rules/indent-helpers/index.ts index 969c6c83f..9dabbb7b9 100644 --- a/packages/eslint-plugin-svelte/src/rules/indent-helpers/index.ts +++ b/packages/eslint-plugin-svelte/src/rules/indent-helpers/index.ts @@ -1,15 +1,15 @@ import type { AST } from 'svelte-eslint-parser'; import type { TSESTree } from '@typescript-eslint/types'; -import type { ASTNode, RuleContext, RuleListener } from '../../types'; -import * as SV from './svelte'; -import * as ES from './es'; -import * as TS from './ts'; -import { isNotWhitespace } from './ast'; +import type { ASTNode, RuleContext, RuleListener } from '../../types.js'; +import * as SV from './svelte.js'; +import * as ES from './es.js'; +import * as TS from './ts.js'; +import { isNotWhitespace } from './ast.js'; import { isCommentToken } from '@eslint-community/eslint-utils'; -import type { AnyToken, IndentOptions } from './commons'; -import type { OffsetCalculator } from './offset-context'; -import { OffsetContext } from './offset-context'; -import { getFilename, getSourceCode } from '../../utils/compat'; +import type { AnyToken, IndentOptions } from './commons.js'; +import type { OffsetCalculator } from './offset-context.js'; +import { OffsetContext } from './offset-context.js'; +import { getFilename, getSourceCode } from '../../utils/compat.js'; type IndentUserOptions = { indent?: number | 'tab'; diff --git a/packages/eslint-plugin-svelte/src/rules/indent-helpers/offset-context.ts b/packages/eslint-plugin-svelte/src/rules/indent-helpers/offset-context.ts index ec890d92f..29515f866 100644 --- a/packages/eslint-plugin-svelte/src/rules/indent-helpers/offset-context.ts +++ b/packages/eslint-plugin-svelte/src/rules/indent-helpers/offset-context.ts @@ -1,8 +1,8 @@ -import type { ASTNode, SourceCode } from '../../types'; -import { isNotWhitespace } from './ast'; -import type { AnyToken, IndentOptions, MaybeNode } from './commons'; -import { isBeginningOfLine } from './commons'; -import { getFirstAndLastTokens } from './commons'; +import type { ASTNode, SourceCode } from '../../types.js'; +import { isNotWhitespace } from './ast.js'; +import type { AnyToken, IndentOptions, MaybeNode } from './commons.js'; +import { isBeginningOfLine } from './commons.js'; +import { getFirstAndLastTokens } from './commons.js'; const enum OffsetDataType { normal, align, diff --git a/packages/eslint-plugin-svelte/src/rules/indent-helpers/svelte.ts b/packages/eslint-plugin-svelte/src/rules/indent-helpers/svelte.ts index 29f9a75a5..1265e9e58 100644 --- a/packages/eslint-plugin-svelte/src/rules/indent-helpers/svelte.ts +++ b/packages/eslint-plugin-svelte/src/rules/indent-helpers/svelte.ts @@ -1,11 +1,11 @@ import type { AST } from 'svelte-eslint-parser'; -import type { ASTNode } from '../../types'; -import type { SvelteNodeListener } from '../../types-for-node'; -import { isNotWhitespace } from './ast'; -import type { IndentContext } from './commons'; -import { isBeginningOfElement } from './commons'; -import { isBeginningOfLine } from './commons'; -import { getFirstAndLastTokens } from './commons'; +import type { ASTNode } from '../../types.js'; +import type { SvelteNodeListener } from '../../types-for-node.js'; +import { isNotWhitespace } from './ast.js'; +import type { IndentContext } from './commons.js'; +import { isBeginningOfElement } from './commons.js'; +import { isBeginningOfLine } from './commons.js'; +import { getFirstAndLastTokens } from './commons.js'; import { isClosingParenToken, isOpeningParenToken } from '@eslint-community/eslint-utils'; type NodeListener = SvelteNodeListener; diff --git a/packages/eslint-plugin-svelte/src/rules/indent-helpers/ts.ts b/packages/eslint-plugin-svelte/src/rules/indent-helpers/ts.ts index c75d031ee..23794f0b0 100644 --- a/packages/eslint-plugin-svelte/src/rules/indent-helpers/ts.ts +++ b/packages/eslint-plugin-svelte/src/rules/indent-helpers/ts.ts @@ -10,10 +10,10 @@ import { isOpeningParenToken, isSemicolonToken } from '@eslint-community/eslint-utils'; -import type { AnyToken, IndentContext } from './commons'; -import { isBeginningOfLine } from './commons'; -import { getFirstAndLastTokens } from './commons'; -import type { TSNodeListener } from '../../types-for-node'; +import type { AnyToken, IndentContext } from './commons.js'; +import { isBeginningOfLine } from './commons.js'; +import { getFirstAndLastTokens } from './commons.js'; +import type { TSNodeListener } from '../../types-for-node.js'; type NodeListener = TSNodeListener; diff --git a/packages/eslint-plugin-svelte/src/rules/indent.ts b/packages/eslint-plugin-svelte/src/rules/indent.ts index 2daa138c8..e1e5162a2 100644 --- a/packages/eslint-plugin-svelte/src/rules/indent.ts +++ b/packages/eslint-plugin-svelte/src/rules/indent.ts @@ -1,5 +1,5 @@ -import { createRule } from '../utils'; -import { defineVisitor } from './indent-helpers'; +import { createRule } from '../utils/index.js'; +import { defineVisitor } from './indent-helpers/index.js'; export default createRule('indent', { meta: { diff --git a/packages/eslint-plugin-svelte/src/rules/infinite-reactive-loop.ts b/packages/eslint-plugin-svelte/src/rules/infinite-reactive-loop.ts index 910709b42..7f777a9e6 100644 --- a/packages/eslint-plugin-svelte/src/rules/infinite-reactive-loop.ts +++ b/packages/eslint-plugin-svelte/src/rules/infinite-reactive-loop.ts @@ -1,11 +1,11 @@ import type { TSESTree } from '@typescript-eslint/types'; import type { AST } from 'svelte-eslint-parser'; import { ReferenceTracker } from '@eslint-community/eslint-utils'; -import { createRule } from '../utils'; -import type { RuleContext } from '../types'; -import { findVariable } from '../utils/ast-utils'; +import { createRule } from '../utils/index.js'; +import type { RuleContext } from '../types.js'; +import { findVariable } from '../utils/ast-utils.js'; import { traverseNodes } from 'svelte-eslint-parser'; -import { getSourceCode } from '../utils/compat'; +import { getSourceCode } from '../utils/compat.js'; /** * Get usage of `tick` diff --git a/packages/eslint-plugin-svelte/src/rules/max-attributes-per-line.ts b/packages/eslint-plugin-svelte/src/rules/max-attributes-per-line.ts index 63001ac53..9c9263864 100644 --- a/packages/eslint-plugin-svelte/src/rules/max-attributes-per-line.ts +++ b/packages/eslint-plugin-svelte/src/rules/max-attributes-per-line.ts @@ -1,6 +1,6 @@ import type { AST } from 'svelte-eslint-parser'; -import { createRule } from '../utils'; -import { getSourceCode } from '../utils/compat'; +import { createRule } from '../utils/index.js'; +import { getSourceCode } from '../utils/compat.js'; /** * Check whether the component is declared in a single line or not. diff --git a/packages/eslint-plugin-svelte/src/rules/mustache-spacing.ts b/packages/eslint-plugin-svelte/src/rules/mustache-spacing.ts index 33ab8a0d9..973cb4cad 100644 --- a/packages/eslint-plugin-svelte/src/rules/mustache-spacing.ts +++ b/packages/eslint-plugin-svelte/src/rules/mustache-spacing.ts @@ -1,8 +1,8 @@ import type { AST } from 'svelte-eslint-parser'; import { isClosingBraceToken, isOpeningBraceToken } from '@eslint-community/eslint-utils'; -import { createRule } from '../utils'; -import { getMustacheTokens } from '../utils/ast-utils'; -import { getSourceCode } from '../utils/compat'; +import { createRule } from '../utils/index.js'; +import { getMustacheTokens } from '../utils/ast-utils.js'; +import { getSourceCode } from '../utils/compat.js'; type DeepPartial = { [P in keyof T]?: DeepPartial; }; diff --git a/packages/eslint-plugin-svelte/src/rules/no-at-debug-tags.ts b/packages/eslint-plugin-svelte/src/rules/no-at-debug-tags.ts index d4d1254e7..13e3de616 100644 --- a/packages/eslint-plugin-svelte/src/rules/no-at-debug-tags.ts +++ b/packages/eslint-plugin-svelte/src/rules/no-at-debug-tags.ts @@ -1,4 +1,4 @@ -import { createRule } from '../utils'; +import { createRule } from '../utils/index.js'; export default createRule('no-at-debug-tags', { meta: { diff --git a/packages/eslint-plugin-svelte/src/rules/no-at-html-tags.ts b/packages/eslint-plugin-svelte/src/rules/no-at-html-tags.ts index 6a2ff541f..499645aed 100644 --- a/packages/eslint-plugin-svelte/src/rules/no-at-html-tags.ts +++ b/packages/eslint-plugin-svelte/src/rules/no-at-html-tags.ts @@ -1,5 +1,5 @@ import type { AST } from 'svelte-eslint-parser'; -import { createRule } from '../utils'; +import { createRule } from '../utils/index.js'; export default createRule('no-at-html-tags', { meta: { diff --git a/packages/eslint-plugin-svelte/src/rules/no-deprecated-raw-special-elements.ts b/packages/eslint-plugin-svelte/src/rules/no-deprecated-raw-special-elements.ts index d47ef72e1..6d4d7bd67 100644 --- a/packages/eslint-plugin-svelte/src/rules/no-deprecated-raw-special-elements.ts +++ b/packages/eslint-plugin-svelte/src/rules/no-deprecated-raw-special-elements.ts @@ -1,5 +1,5 @@ import type { AST } from 'svelte-eslint-parser'; -import { createRule } from '../utils'; +import { createRule } from '../utils/index.js'; const INVALID_HTML_ELEMENTS = ['head', 'body', 'window', 'document', 'element', 'options']; const VALID_PREFIX = 'svelte:'; diff --git a/packages/eslint-plugin-svelte/src/rules/no-dom-manipulating.ts b/packages/eslint-plugin-svelte/src/rules/no-dom-manipulating.ts index 01ae45e8d..0b5e7b7e2 100644 --- a/packages/eslint-plugin-svelte/src/rules/no-dom-manipulating.ts +++ b/packages/eslint-plugin-svelte/src/rules/no-dom-manipulating.ts @@ -1,7 +1,7 @@ import type { AST } from 'svelte-eslint-parser'; import type { TSESTree } from '@typescript-eslint/types'; -import { createRule } from '../utils'; -import { findVariable, getNodeName } from '../utils/ast-utils'; +import { createRule } from '../utils/index.js'; +import { findVariable, getNodeName } from '../utils/ast-utils.js'; import type { Variable } from '@typescript-eslint/scope-manager'; import { getPropertyName } from '@eslint-community/eslint-utils'; diff --git a/packages/eslint-plugin-svelte/src/rules/no-dupe-else-if-blocks.ts b/packages/eslint-plugin-svelte/src/rules/no-dupe-else-if-blocks.ts index 9ec431492..4021252ec 100644 --- a/packages/eslint-plugin-svelte/src/rules/no-dupe-else-if-blocks.ts +++ b/packages/eslint-plugin-svelte/src/rules/no-dupe-else-if-blocks.ts @@ -1,8 +1,8 @@ import type { AST } from 'svelte-eslint-parser'; import type { TSESTree } from '@typescript-eslint/types'; -import { createRule } from '../utils'; -import { equalTokens } from '../utils/ast-utils'; -import { getSourceCode } from '../utils/compat'; +import { createRule } from '../utils/index.js'; +import { equalTokens } from '../utils/ast-utils.js'; +import { getSourceCode } from '../utils/compat.js'; // ------------------------------------------------------------------------------ // Helpers diff --git a/packages/eslint-plugin-svelte/src/rules/no-dupe-on-directives.ts b/packages/eslint-plugin-svelte/src/rules/no-dupe-on-directives.ts index a90451273..9762567be 100644 --- a/packages/eslint-plugin-svelte/src/rules/no-dupe-on-directives.ts +++ b/packages/eslint-plugin-svelte/src/rules/no-dupe-on-directives.ts @@ -1,8 +1,8 @@ import type { AST } from 'svelte-eslint-parser'; import type { TSESTree } from '@typescript-eslint/types'; -import { createRule } from '../utils'; -import { equalTokens } from '../utils/ast-utils'; -import { getSourceCode } from '../utils/compat'; +import { createRule } from '../utils/index.js'; +import { equalTokens } from '../utils/ast-utils.js'; +import { getSourceCode } from '../utils/compat.js'; export default createRule('no-dupe-on-directives', { meta: { diff --git a/packages/eslint-plugin-svelte/src/rules/no-dupe-style-properties.ts b/packages/eslint-plugin-svelte/src/rules/no-dupe-style-properties.ts index 96bebc7ea..c78ad03ff 100644 --- a/packages/eslint-plugin-svelte/src/rules/no-dupe-style-properties.ts +++ b/packages/eslint-plugin-svelte/src/rules/no-dupe-style-properties.ts @@ -1,7 +1,7 @@ import type { AST } from 'svelte-eslint-parser'; -import { createRule } from '../utils'; -import type { SvelteStyleInterpolation, SvelteStyleRoot } from '../utils/css-utils'; -import { parseStyleAttributeValue } from '../utils/css-utils'; +import { createRule } from '../utils/index.js'; +import type { SvelteStyleInterpolation, SvelteStyleRoot } from '../utils/css-utils/index.js'; +import { parseStyleAttributeValue } from '../utils/css-utils/index.js'; export default createRule('no-dupe-style-properties', { meta: { diff --git a/packages/eslint-plugin-svelte/src/rules/no-dupe-use-directives.ts b/packages/eslint-plugin-svelte/src/rules/no-dupe-use-directives.ts index e7830e685..09f6ef357 100644 --- a/packages/eslint-plugin-svelte/src/rules/no-dupe-use-directives.ts +++ b/packages/eslint-plugin-svelte/src/rules/no-dupe-use-directives.ts @@ -1,8 +1,8 @@ import type { AST } from 'svelte-eslint-parser'; import type { TSESTree } from '@typescript-eslint/types'; -import { createRule } from '../utils'; -import { equalTokens, getAttributeKeyText } from '../utils/ast-utils'; -import { getSourceCode } from '../utils/compat'; +import { createRule } from '../utils/index.js'; +import { equalTokens, getAttributeKeyText } from '../utils/ast-utils.js'; +import { getSourceCode } from '../utils/compat.js'; export default createRule('no-dupe-use-directives', { meta: { diff --git a/packages/eslint-plugin-svelte/src/rules/no-dynamic-slot-name.ts b/packages/eslint-plugin-svelte/src/rules/no-dynamic-slot-name.ts index 6b6c6ada3..7b266bef9 100644 --- a/packages/eslint-plugin-svelte/src/rules/no-dynamic-slot-name.ts +++ b/packages/eslint-plugin-svelte/src/rules/no-dynamic-slot-name.ts @@ -1,12 +1,12 @@ import type { AST } from 'svelte-eslint-parser'; import type { TSESTree } from '@typescript-eslint/types'; -import { createRule } from '../utils'; +import { createRule } from '../utils/index.js'; import { findVariable, getAttributeValueQuoteAndRange, getStringIfConstant -} from '../utils/ast-utils'; -import { getSourceCode } from '../utils/compat'; +} from '../utils/ast-utils.js'; +import { getSourceCode } from '../utils/compat.js'; export default createRule('no-dynamic-slot-name', { meta: { diff --git a/packages/eslint-plugin-svelte/src/rules/no-export-load-in-svelte-module-in-kit-pages.ts b/packages/eslint-plugin-svelte/src/rules/no-export-load-in-svelte-module-in-kit-pages.ts index 3ef264bd4..00871a9f9 100644 --- a/packages/eslint-plugin-svelte/src/rules/no-export-load-in-svelte-module-in-kit-pages.ts +++ b/packages/eslint-plugin-svelte/src/rules/no-export-load-in-svelte-module-in-kit-pages.ts @@ -1,6 +1,6 @@ import type { TSESTree } from '@typescript-eslint/types'; -import { createRule } from '../utils'; -import { isKitPageComponent } from '../utils/svelte-kit'; +import { createRule } from '../utils/index.js'; +import { isKitPageComponent } from '../utils/svelte-kit.js'; export default createRule('no-export-load-in-svelte-module-in-kit-pages', { meta: { diff --git a/packages/eslint-plugin-svelte/src/rules/no-extra-reactive-curlies.ts b/packages/eslint-plugin-svelte/src/rules/no-extra-reactive-curlies.ts index 489cd2483..9efce0af2 100644 --- a/packages/eslint-plugin-svelte/src/rules/no-extra-reactive-curlies.ts +++ b/packages/eslint-plugin-svelte/src/rules/no-extra-reactive-curlies.ts @@ -1,6 +1,6 @@ import type { TSESTree } from '@typescript-eslint/types'; -import { createRule } from '../utils'; -import { getSourceCode } from '../utils/compat'; +import { createRule } from '../utils/index.js'; +import { getSourceCode } from '../utils/compat.js'; export default createRule('no-extra-reactive-curlies', { meta: { diff --git a/packages/eslint-plugin-svelte/src/rules/no-goto-without-base.ts b/packages/eslint-plugin-svelte/src/rules/no-goto-without-base.ts index 9154dc264..5145a7082 100644 --- a/packages/eslint-plugin-svelte/src/rules/no-goto-without-base.ts +++ b/packages/eslint-plugin-svelte/src/rules/no-goto-without-base.ts @@ -1,9 +1,9 @@ import type { TSESTree } from '@typescript-eslint/types'; -import { createRule } from '../utils'; +import { createRule } from '../utils/index.js'; import { ReferenceTracker } from '@eslint-community/eslint-utils'; -import { getSourceCode } from '../utils/compat'; -import { findVariable } from '../utils/ast-utils'; -import type { RuleContext } from '../types'; +import { getSourceCode } from '../utils/compat.js'; +import { findVariable } from '../utils/ast-utils.js'; +import type { RuleContext } from '../types.js'; export default createRule('no-goto-without-base', { meta: { diff --git a/packages/eslint-plugin-svelte/src/rules/no-ignored-unsubscribe.ts b/packages/eslint-plugin-svelte/src/rules/no-ignored-unsubscribe.ts index 471f38a36..7b28a7607 100644 --- a/packages/eslint-plugin-svelte/src/rules/no-ignored-unsubscribe.ts +++ b/packages/eslint-plugin-svelte/src/rules/no-ignored-unsubscribe.ts @@ -1,5 +1,5 @@ import type { TSESTree } from '@typescript-eslint/types'; -import { createRule } from '../utils'; +import { createRule } from '../utils/index.js'; export default createRule('no-ignored-unsubscribe', { meta: { diff --git a/packages/eslint-plugin-svelte/src/rules/no-immutable-reactive-statements.ts b/packages/eslint-plugin-svelte/src/rules/no-immutable-reactive-statements.ts index a36a20c6f..09144c4e1 100644 --- a/packages/eslint-plugin-svelte/src/rules/no-immutable-reactive-statements.ts +++ b/packages/eslint-plugin-svelte/src/rules/no-immutable-reactive-statements.ts @@ -1,9 +1,9 @@ import type { AST } from 'svelte-eslint-parser'; -import { createRule } from '../utils'; +import { createRule } from '../utils/index.js'; import type { Scope, Variable, Reference, Definition } from '@typescript-eslint/scope-manager'; import type { TSESTree } from '@typescript-eslint/types'; -import { findVariable, iterateIdentifiers } from '../utils/ast-utils'; -import { getSourceCode } from '../utils/compat'; +import { findVariable, iterateIdentifiers } from '../utils/ast-utils.js'; +import { getSourceCode } from '../utils/compat.js'; export default createRule('no-immutable-reactive-statements', { meta: { diff --git a/packages/eslint-plugin-svelte/src/rules/no-inline-styles.ts b/packages/eslint-plugin-svelte/src/rules/no-inline-styles.ts index 1e19525a1..aff1cdf26 100644 --- a/packages/eslint-plugin-svelte/src/rules/no-inline-styles.ts +++ b/packages/eslint-plugin-svelte/src/rules/no-inline-styles.ts @@ -1,4 +1,4 @@ -import { createRule } from '../utils'; +import { createRule } from '../utils/index.js'; export default createRule('no-inline-styles', { meta: { diff --git a/packages/eslint-plugin-svelte/src/rules/no-inner-declarations.ts b/packages/eslint-plugin-svelte/src/rules/no-inner-declarations.ts index 42e5d469a..6f9ed64e7 100644 --- a/packages/eslint-plugin-svelte/src/rules/no-inner-declarations.ts +++ b/packages/eslint-plugin-svelte/src/rules/no-inner-declarations.ts @@ -1,10 +1,10 @@ -import { createRule } from '../utils'; +import { createRule } from '../utils/index.js'; import { buildProxyListener, defineWrapperListener, getCoreRule, getProxyNode -} from '../utils/eslint-core'; +} from '../utils/eslint-core.js'; const coreRule = getCoreRule('no-inner-declarations'); diff --git a/packages/eslint-plugin-svelte/src/rules/no-inspect.ts b/packages/eslint-plugin-svelte/src/rules/no-inspect.ts index 22e30ce99..1a46a3232 100644 --- a/packages/eslint-plugin-svelte/src/rules/no-inspect.ts +++ b/packages/eslint-plugin-svelte/src/rules/no-inspect.ts @@ -1,6 +1,6 @@ import type { TSESTree } from '@typescript-eslint/types'; -import { createRule } from '../utils'; +import { createRule } from '../utils/index.js'; export default createRule('no-inspect', { meta: { diff --git a/packages/eslint-plugin-svelte/src/rules/no-not-function-handler.ts b/packages/eslint-plugin-svelte/src/rules/no-not-function-handler.ts index 66e72f42e..7b46c3d80 100644 --- a/packages/eslint-plugin-svelte/src/rules/no-not-function-handler.ts +++ b/packages/eslint-plugin-svelte/src/rules/no-not-function-handler.ts @@ -1,7 +1,7 @@ import type { AST } from 'svelte-eslint-parser'; import type { TSESTree } from '@typescript-eslint/types'; -import { createRule } from '../utils'; -import { findVariable } from '../utils/ast-utils'; +import { createRule } from '../utils/index.js'; +import { findVariable } from '../utils/ast-utils.js'; const PHRASES = { ObjectExpression: 'object', diff --git a/packages/eslint-plugin-svelte/src/rules/no-object-in-text-mustaches.ts b/packages/eslint-plugin-svelte/src/rules/no-object-in-text-mustaches.ts index 95c961d3c..473afc931 100644 --- a/packages/eslint-plugin-svelte/src/rules/no-object-in-text-mustaches.ts +++ b/packages/eslint-plugin-svelte/src/rules/no-object-in-text-mustaches.ts @@ -1,4 +1,4 @@ -import { createRule } from '../utils'; +import { createRule } from '../utils/index.js'; const PHRASES = { ObjectExpression: 'object', diff --git a/packages/eslint-plugin-svelte/src/rules/no-reactive-functions.ts b/packages/eslint-plugin-svelte/src/rules/no-reactive-functions.ts index c6ebe9e9a..c4a2b7ccf 100644 --- a/packages/eslint-plugin-svelte/src/rules/no-reactive-functions.ts +++ b/packages/eslint-plugin-svelte/src/rules/no-reactive-functions.ts @@ -1,7 +1,7 @@ import type { TSESTree } from '@typescript-eslint/types'; import type { AST } from 'svelte-eslint-parser'; -import { createRule } from '../utils'; -import { getSourceCode } from '../utils/compat'; +import { createRule } from '../utils/index.js'; +import { getSourceCode } from '../utils/compat.js'; export default createRule('no-reactive-functions', { meta: { diff --git a/packages/eslint-plugin-svelte/src/rules/no-reactive-literals.ts b/packages/eslint-plugin-svelte/src/rules/no-reactive-literals.ts index e27f09596..54da5729f 100644 --- a/packages/eslint-plugin-svelte/src/rules/no-reactive-literals.ts +++ b/packages/eslint-plugin-svelte/src/rules/no-reactive-literals.ts @@ -1,6 +1,6 @@ import type { TSESTree } from '@typescript-eslint/types'; -import { createRule } from '../utils'; -import { getSourceCode } from '../utils/compat'; +import { createRule } from '../utils/index.js'; +import { getSourceCode } from '../utils/compat.js'; export default createRule('no-reactive-literals', { meta: { diff --git a/packages/eslint-plugin-svelte/src/rules/no-reactive-reassign.ts b/packages/eslint-plugin-svelte/src/rules/no-reactive-reassign.ts index 0e41f2069..f1da8a2ea 100644 --- a/packages/eslint-plugin-svelte/src/rules/no-reactive-reassign.ts +++ b/packages/eslint-plugin-svelte/src/rules/no-reactive-reassign.ts @@ -1,8 +1,8 @@ import type { TSESTree } from '@typescript-eslint/types'; import type { AST } from 'svelte-eslint-parser'; -import { createRule } from '../utils'; +import { createRule } from '../utils/index.js'; import { getPropertyName } from '@eslint-community/eslint-utils'; -import { getSourceCode } from '../utils/compat'; +import { getSourceCode } from '../utils/compat.js'; export default createRule('no-reactive-reassign', { meta: { diff --git a/packages/eslint-plugin-svelte/src/rules/no-restricted-html-elements.ts b/packages/eslint-plugin-svelte/src/rules/no-restricted-html-elements.ts index 024a88aea..dac157163 100644 --- a/packages/eslint-plugin-svelte/src/rules/no-restricted-html-elements.ts +++ b/packages/eslint-plugin-svelte/src/rules/no-restricted-html-elements.ts @@ -1,4 +1,4 @@ -import { createRule } from '../utils'; +import { createRule } from '../utils/index.js'; export default createRule('no-restricted-html-elements', { meta: { diff --git a/packages/eslint-plugin-svelte/src/rules/no-shorthand-style-property-overrides.ts b/packages/eslint-plugin-svelte/src/rules/no-shorthand-style-property-overrides.ts index 1b84335e5..667a3486b 100644 --- a/packages/eslint-plugin-svelte/src/rules/no-shorthand-style-property-overrides.ts +++ b/packages/eslint-plugin-svelte/src/rules/no-shorthand-style-property-overrides.ts @@ -1,12 +1,12 @@ import type { AST } from 'svelte-eslint-parser'; -import { createRule } from '../utils'; -import type { SvelteStyleInterpolation, SvelteStyleRoot } from '../utils/css-utils'; +import { createRule } from '../utils/index.js'; +import type { SvelteStyleInterpolation, SvelteStyleRoot } from '../utils/css-utils/index.js'; import { getVendorPrefix, stripVendorPrefix, parseStyleAttributeValue, SHORTHAND_PROPERTIES -} from '../utils/css-utils'; +} from '../utils/css-utils/index.js'; export default createRule('no-shorthand-style-property-overrides', { meta: { diff --git a/packages/eslint-plugin-svelte/src/rules/no-spaces-around-equal-signs-in-attribute.ts b/packages/eslint-plugin-svelte/src/rules/no-spaces-around-equal-signs-in-attribute.ts index bbbb4dae4..63b9d00a6 100644 --- a/packages/eslint-plugin-svelte/src/rules/no-spaces-around-equal-signs-in-attribute.ts +++ b/packages/eslint-plugin-svelte/src/rules/no-spaces-around-equal-signs-in-attribute.ts @@ -1,4 +1,4 @@ -import { createRule } from '../utils'; +import { createRule } from '../utils/index.js'; import type { AST } from 'svelte-eslint-parser'; export default createRule('no-spaces-around-equal-signs-in-attribute', { diff --git a/packages/eslint-plugin-svelte/src/rules/no-store-async.ts b/packages/eslint-plugin-svelte/src/rules/no-store-async.ts index fef314d1c..aee2e1fb1 100644 --- a/packages/eslint-plugin-svelte/src/rules/no-store-async.ts +++ b/packages/eslint-plugin-svelte/src/rules/no-store-async.ts @@ -1,5 +1,5 @@ -import { createRule } from '../utils'; -import { extractStoreReferences } from './reference-helpers/svelte-store'; +import { createRule } from '../utils/index.js'; +import { extractStoreReferences } from './reference-helpers/svelte-store.js'; export default createRule('no-store-async', { meta: { diff --git a/packages/eslint-plugin-svelte/src/rules/no-svelte-internal.ts b/packages/eslint-plugin-svelte/src/rules/no-svelte-internal.ts index 114496e62..de3b67dc9 100644 --- a/packages/eslint-plugin-svelte/src/rules/no-svelte-internal.ts +++ b/packages/eslint-plugin-svelte/src/rules/no-svelte-internal.ts @@ -1,4 +1,4 @@ -import { createRule } from '../utils'; +import { createRule } from '../utils/index.js'; import type { TSESTree } from '@typescript-eslint/types'; export default createRule('no-svelte-internal', { diff --git a/packages/eslint-plugin-svelte/src/rules/no-target-blank.ts b/packages/eslint-plugin-svelte/src/rules/no-target-blank.ts index 72fecf9c4..457115cb6 100644 --- a/packages/eslint-plugin-svelte/src/rules/no-target-blank.ts +++ b/packages/eslint-plugin-svelte/src/rules/no-target-blank.ts @@ -1,11 +1,11 @@ import type { AST } from 'svelte-eslint-parser'; -import { createRule } from '../utils'; +import { createRule } from '../utils/index.js'; import { findAttribute, findBindDirective, findShorthandAttribute, getStaticAttributeValue -} from '../utils/ast-utils'; +} from '../utils/ast-utils.js'; /** Checks wether the given attr node is target="_blank" */ function isTargetBlank(node: AST.SvelteAttribute) { diff --git a/packages/eslint-plugin-svelte/src/rules/no-trailing-spaces.ts b/packages/eslint-plugin-svelte/src/rules/no-trailing-spaces.ts index 33b5c72c1..e80dcff93 100644 --- a/packages/eslint-plugin-svelte/src/rules/no-trailing-spaces.ts +++ b/packages/eslint-plugin-svelte/src/rules/no-trailing-spaces.ts @@ -1,6 +1,6 @@ import type { AST } from 'svelte-eslint-parser'; -import { createRule } from '../utils'; -import { getSourceCode } from '../utils/compat'; +import { createRule } from '../utils/index.js'; +import { getSourceCode } from '../utils/compat.js'; export default createRule('no-trailing-spaces', { meta: { diff --git a/packages/eslint-plugin-svelte/src/rules/no-unknown-style-directive-property.ts b/packages/eslint-plugin-svelte/src/rules/no-unknown-style-directive-property.ts index 6472221bf..46e909cb9 100644 --- a/packages/eslint-plugin-svelte/src/rules/no-unknown-style-directive-property.ts +++ b/packages/eslint-plugin-svelte/src/rules/no-unknown-style-directive-property.ts @@ -1,7 +1,7 @@ -import { createRule } from '../utils'; +import { createRule } from '../utils/index.js'; import { all as allKnownCSSProperties } from 'known-css-properties'; -import { toRegExp } from '../utils/regexp'; -import { hasVendorPrefix } from '../utils/css-utils'; +import { toRegExp } from '../utils/regexp.js'; +import { hasVendorPrefix } from '../utils/css-utils/index.js'; export default createRule('no-unknown-style-directive-property', { meta: { diff --git a/packages/eslint-plugin-svelte/src/rules/no-unused-class-name.ts b/packages/eslint-plugin-svelte/src/rules/no-unused-class-name.ts index 9d183c850..21e8888ad 100644 --- a/packages/eslint-plugin-svelte/src/rules/no-unused-class-name.ts +++ b/packages/eslint-plugin-svelte/src/rules/no-unused-class-name.ts @@ -1,4 +1,4 @@ -import { createRule } from '../utils'; +import { createRule } from '../utils/index.js'; import type { SourceLocation, SvelteAttribute, @@ -11,7 +11,7 @@ import type { } from 'svelte-eslint-parser/lib/ast'; import type { AnyNode } from 'postcss'; import { default as selectorParser, type Node as SelectorNode } from 'postcss-selector-parser'; -import { getSourceCode } from '../utils/compat'; +import { getSourceCode } from '../utils/compat.js'; export default createRule('no-unused-class-name', { meta: { diff --git a/packages/eslint-plugin-svelte/src/rules/no-unused-svelte-ignore.ts b/packages/eslint-plugin-svelte/src/rules/no-unused-svelte-ignore.ts index 434021935..a4f6a288f 100644 --- a/packages/eslint-plugin-svelte/src/rules/no-unused-svelte-ignore.ts +++ b/packages/eslint-plugin-svelte/src/rules/no-unused-svelte-ignore.ts @@ -1,8 +1,8 @@ -import { getSvelteCompileWarnings } from '../shared/svelte-compile-warns'; -import { createRule } from '../utils'; -import type { IgnoreItem } from '../shared/svelte-compile-warns/ignore-comment'; -import { getSvelteIgnoreItems } from '../shared/svelte-compile-warns/ignore-comment'; -import { getSourceCode } from '../utils/compat'; +import { getSvelteCompileWarnings } from '../shared/svelte-compile-warns/index.js'; +import { createRule } from '../utils/index.js'; +import type { IgnoreItem } from '../shared/svelte-compile-warns/ignore-comment.js'; +import { getSvelteIgnoreItems } from '../shared/svelte-compile-warns/ignore-comment.js'; +import { getSourceCode } from '../utils/compat.js'; export default createRule('no-unused-svelte-ignore', { meta: { diff --git a/packages/eslint-plugin-svelte/src/rules/no-useless-mustaches.ts b/packages/eslint-plugin-svelte/src/rules/no-useless-mustaches.ts index 0eab8ad27..56c80c382 100644 --- a/packages/eslint-plugin-svelte/src/rules/no-useless-mustaches.ts +++ b/packages/eslint-plugin-svelte/src/rules/no-useless-mustaches.ts @@ -1,6 +1,6 @@ import type { AST } from 'svelte-eslint-parser'; -import { createRule } from '../utils'; -import { getSourceCode } from '../utils/compat'; +import { createRule } from '../utils/index.js'; +import { getSourceCode } from '../utils/compat.js'; /** * Strip quotes string diff --git a/packages/eslint-plugin-svelte/src/rules/prefer-class-directive.ts b/packages/eslint-plugin-svelte/src/rules/prefer-class-directive.ts index fb3f76152..8db3e407b 100644 --- a/packages/eslint-plugin-svelte/src/rules/prefer-class-directive.ts +++ b/packages/eslint-plugin-svelte/src/rules/prefer-class-directive.ts @@ -1,9 +1,9 @@ import type { AST } from 'svelte-eslint-parser'; import type { TSESTree } from '@typescript-eslint/types'; -import { createRule } from '../utils'; -import { getStringIfConstant, isHTMLElementLike, needParentheses } from '../utils/ast-utils'; +import { createRule } from '../utils/index.js'; +import { getStringIfConstant, isHTMLElementLike, needParentheses } from '../utils/ast-utils.js'; import type { Rule } from 'eslint'; -import { getSourceCode } from '../utils/compat'; +import { getSourceCode } from '../utils/compat.js'; export default createRule('prefer-class-directive', { meta: { diff --git a/packages/eslint-plugin-svelte/src/rules/prefer-destructured-store-props.ts b/packages/eslint-plugin-svelte/src/rules/prefer-destructured-store-props.ts index b9f766cbf..241e64ec6 100644 --- a/packages/eslint-plugin-svelte/src/rules/prefer-destructured-store-props.ts +++ b/packages/eslint-plugin-svelte/src/rules/prefer-destructured-store-props.ts @@ -2,10 +2,10 @@ import type { TSESTree } from '@typescript-eslint/types'; import { getPropertyName } from '@eslint-community/eslint-utils'; import type { AST } from 'svelte-eslint-parser'; import { keyword } from 'esutils'; -import type { SuggestionReportDescriptor } from '../types'; -import { createRule } from '../utils'; -import { findAttribute, isExpressionIdentifier, findVariable } from '../utils/ast-utils'; -import { getSourceCode } from '../utils/compat'; +import type { SuggestionReportDescriptor } from '../types.js'; +import { createRule } from '../utils/index.js'; +import { findAttribute, isExpressionIdentifier, findVariable } from '../utils/ast-utils.js'; +import { getSourceCode } from '../utils/compat.js'; type StoreMemberExpression = TSESTree.MemberExpression & { object: TSESTree.Identifier & { name: string }; diff --git a/packages/eslint-plugin-svelte/src/rules/prefer-style-directive.ts b/packages/eslint-plugin-svelte/src/rules/prefer-style-directive.ts index a706d1185..20df5a9dd 100644 --- a/packages/eslint-plugin-svelte/src/rules/prefer-style-directive.ts +++ b/packages/eslint-plugin-svelte/src/rules/prefer-style-directive.ts @@ -1,15 +1,15 @@ import type { AST } from 'svelte-eslint-parser'; import type { TSESTree } from '@typescript-eslint/types'; -import { createRule } from '../utils'; +import { createRule } from '../utils/index.js'; import type { SvelteStyleDeclaration, SvelteStyleInline, SvelteStyleRoot -} from '../utils/css-utils'; -import { parseStyleAttributeValue } from '../utils/css-utils'; -import type { RuleFixer } from '../types'; -import { isHTMLElementLike } from '../utils/ast-utils'; -import { getSourceCode } from '../utils/compat'; +} from '../utils/css-utils/index.js'; +import { parseStyleAttributeValue } from '../utils/css-utils/index.js'; +import type { RuleFixer } from '../types.js'; +import { isHTMLElementLike } from '../utils/ast-utils.js'; +import { getSourceCode } from '../utils/compat.js'; /** Checks wether the given node is string literal or not */ function isStringLiteral(node: TSESTree.Expression): node is TSESTree.StringLiteral { diff --git a/packages/eslint-plugin-svelte/src/rules/reference-helpers/svelte-store.ts b/packages/eslint-plugin-svelte/src/rules/reference-helpers/svelte-store.ts index 50bff723d..4b9d2c275 100644 --- a/packages/eslint-plugin-svelte/src/rules/reference-helpers/svelte-store.ts +++ b/packages/eslint-plugin-svelte/src/rules/reference-helpers/svelte-store.ts @@ -1,11 +1,11 @@ import type { TSESTree } from '@typescript-eslint/types'; import type { Variable } from '@typescript-eslint/scope-manager'; import { ReferenceTracker } from '@eslint-community/eslint-utils'; -import type { RuleContext } from '../../types'; -import type { TS, TSTools } from '../../utils/ts-utils'; -import { getTypeScriptTools } from '../../utils/ts-utils'; -import { findVariable, getParent } from '../../utils/ast-utils'; -import { getSourceCode } from '../../utils/compat'; +import type { RuleContext } from '../../types.js'; +import type { TS, TSTools } from '../../utils/ts-utils/index.js'; +import { getTypeScriptTools } from '../../utils/ts-utils/index.js'; +import { findVariable, getParent } from '../../utils/ast-utils.js'; +import { getSourceCode } from '../../utils/compat.js'; type StoreName = 'writable' | 'readable' | 'derived'; diff --git a/packages/eslint-plugin-svelte/src/rules/require-each-key.ts b/packages/eslint-plugin-svelte/src/rules/require-each-key.ts index c5ce6fe01..00a34f5f8 100644 --- a/packages/eslint-plugin-svelte/src/rules/require-each-key.ts +++ b/packages/eslint-plugin-svelte/src/rules/require-each-key.ts @@ -1,5 +1,5 @@ import type { AST } from 'svelte-eslint-parser'; -import { createRule } from '../utils'; +import { createRule } from '../utils/index.js'; export default createRule('require-each-key', { meta: { diff --git a/packages/eslint-plugin-svelte/src/rules/require-event-dispatcher-types.ts b/packages/eslint-plugin-svelte/src/rules/require-event-dispatcher-types.ts index 50567410d..1217a9e2b 100644 --- a/packages/eslint-plugin-svelte/src/rules/require-event-dispatcher-types.ts +++ b/packages/eslint-plugin-svelte/src/rules/require-event-dispatcher-types.ts @@ -1,8 +1,8 @@ import { ReferenceTracker } from '@eslint-community/eslint-utils'; -import { createRule } from '../utils'; -import { getLangValue } from '../utils/ast-utils'; +import { createRule } from '../utils/index.js'; +import { getLangValue } from '../utils/ast-utils.js'; import type { TSESTree } from '@typescript-eslint/types'; -import { getSourceCode } from '../utils/compat'; +import { getSourceCode } from '../utils/compat.js'; export default createRule('require-event-dispatcher-types', { meta: { diff --git a/packages/eslint-plugin-svelte/src/rules/require-optimized-style-attribute.ts b/packages/eslint-plugin-svelte/src/rules/require-optimized-style-attribute.ts index 8851b741d..b01270e20 100644 --- a/packages/eslint-plugin-svelte/src/rules/require-optimized-style-attribute.ts +++ b/packages/eslint-plugin-svelte/src/rules/require-optimized-style-attribute.ts @@ -1,5 +1,5 @@ -import { createRule } from '../utils'; -import { parseStyleAttributeValue } from '../utils/css-utils'; +import { createRule } from '../utils/index.js'; +import { parseStyleAttributeValue } from '../utils/css-utils/index.js'; export default createRule('require-optimized-style-attribute', { meta: { diff --git a/packages/eslint-plugin-svelte/src/rules/require-store-callbacks-use-set-param.ts b/packages/eslint-plugin-svelte/src/rules/require-store-callbacks-use-set-param.ts index ebbe1dca2..fc12fdfee 100644 --- a/packages/eslint-plugin-svelte/src/rules/require-store-callbacks-use-set-param.ts +++ b/packages/eslint-plugin-svelte/src/rules/require-store-callbacks-use-set-param.ts @@ -1,5 +1,5 @@ -import { createRule } from '../utils'; -import { extractStoreReferences } from './reference-helpers/svelte-store'; +import { createRule } from '../utils/index.js'; +import { extractStoreReferences } from './reference-helpers/svelte-store.js'; export default createRule('require-store-callbacks-use-set-param', { meta: { diff --git a/packages/eslint-plugin-svelte/src/rules/require-store-reactive-access.ts b/packages/eslint-plugin-svelte/src/rules/require-store-reactive-access.ts index 95c11582f..616825059 100644 --- a/packages/eslint-plugin-svelte/src/rules/require-store-reactive-access.ts +++ b/packages/eslint-plugin-svelte/src/rules/require-store-reactive-access.ts @@ -1,8 +1,8 @@ import type { TSESTree } from '@typescript-eslint/types'; import type { AST } from 'svelte-eslint-parser'; -import { createRule } from '../utils'; -import { createStoreChecker } from './reference-helpers/svelte-store'; -import { getSourceCode } from '../utils/compat'; +import { createRule } from '../utils/index.js'; +import { createStoreChecker } from './reference-helpers/svelte-store.js'; +import { getSourceCode } from '../utils/compat.js'; export default createRule('require-store-reactive-access', { meta: { diff --git a/packages/eslint-plugin-svelte/src/rules/require-stores-init.ts b/packages/eslint-plugin-svelte/src/rules/require-stores-init.ts index be08f7cf6..38113046a 100644 --- a/packages/eslint-plugin-svelte/src/rules/require-stores-init.ts +++ b/packages/eslint-plugin-svelte/src/rules/require-stores-init.ts @@ -1,5 +1,5 @@ -import { createRule } from '../utils'; -import { extractStoreReferences } from './reference-helpers/svelte-store'; +import { createRule } from '../utils/index.js'; +import { extractStoreReferences } from './reference-helpers/svelte-store.js'; export default createRule('require-stores-init', { meta: { diff --git a/packages/eslint-plugin-svelte/src/rules/shorthand-attribute.ts b/packages/eslint-plugin-svelte/src/rules/shorthand-attribute.ts index bdc4f6096..992cc55f2 100644 --- a/packages/eslint-plugin-svelte/src/rules/shorthand-attribute.ts +++ b/packages/eslint-plugin-svelte/src/rules/shorthand-attribute.ts @@ -1,6 +1,6 @@ -import { createRule } from '../utils'; -import { getAttributeValueQuoteAndRange } from '../utils/ast-utils'; -import { getSourceCode } from '../utils/compat'; +import { createRule } from '../utils/index.js'; +import { getAttributeValueQuoteAndRange } from '../utils/ast-utils.js'; +import { getSourceCode } from '../utils/compat.js'; export default createRule('shorthand-attribute', { meta: { diff --git a/packages/eslint-plugin-svelte/src/rules/shorthand-directive.ts b/packages/eslint-plugin-svelte/src/rules/shorthand-directive.ts index a4e314169..2cc378db7 100644 --- a/packages/eslint-plugin-svelte/src/rules/shorthand-directive.ts +++ b/packages/eslint-plugin-svelte/src/rules/shorthand-directive.ts @@ -1,7 +1,7 @@ import type { AST } from 'svelte-eslint-parser'; -import { createRule } from '../utils'; -import { getAttributeValueQuoteAndRange } from '../utils/ast-utils'; -import { getSourceCode } from '../utils/compat'; +import { createRule } from '../utils/index.js'; +import { getAttributeValueQuoteAndRange } from '../utils/ast-utils.js'; +import { getSourceCode } from '../utils/compat.js'; export default createRule('shorthand-directive', { meta: { diff --git a/packages/eslint-plugin-svelte/src/rules/sort-attributes.ts b/packages/eslint-plugin-svelte/src/rules/sort-attributes.ts index dae17d14a..ae0780196 100644 --- a/packages/eslint-plugin-svelte/src/rules/sort-attributes.ts +++ b/packages/eslint-plugin-svelte/src/rules/sort-attributes.ts @@ -1,8 +1,8 @@ import type { AST } from 'svelte-eslint-parser'; -import { createRule } from '../utils'; -import { getAttributeKeyText } from '../utils/ast-utils'; -import { toRegExp } from '../utils/regexp'; -import { getSourceCode } from '../utils/compat'; +import { createRule } from '../utils/index.js'; +import { getAttributeKeyText } from '../utils/ast-utils.js'; +import { toRegExp } from '../utils/regexp.js'; +import { getSourceCode } from '../utils/compat.js'; type UserOrderObjectOption = { match: string | string[]; diff --git a/packages/eslint-plugin-svelte/src/rules/spaced-html-comment.ts b/packages/eslint-plugin-svelte/src/rules/spaced-html-comment.ts index f3871b94c..b2ab994dd 100644 --- a/packages/eslint-plugin-svelte/src/rules/spaced-html-comment.ts +++ b/packages/eslint-plugin-svelte/src/rules/spaced-html-comment.ts @@ -1,4 +1,4 @@ -import { createRule } from '../utils'; +import { createRule } from '../utils/index.js'; export default createRule('spaced-html-comment', { meta: { diff --git a/packages/eslint-plugin-svelte/src/rules/system.ts b/packages/eslint-plugin-svelte/src/rules/system.ts index e44365368..d9d91f201 100644 --- a/packages/eslint-plugin-svelte/src/rules/system.ts +++ b/packages/eslint-plugin-svelte/src/rules/system.ts @@ -1,7 +1,7 @@ -import { getShared } from '../shared'; -import { createRule } from '../utils'; -import { getFilename } from '../utils/compat'; -import { isRegExp, toRegExp } from '../utils/regexp'; +import { getShared } from '../shared/index.js'; +import { createRule } from '../utils/index.js'; +import { getFilename } from '../utils/compat.js'; +import { isRegExp, toRegExp } from '../utils/regexp.js'; export default createRule('system', { meta: { diff --git a/packages/eslint-plugin-svelte/src/rules/valid-compile.ts b/packages/eslint-plugin-svelte/src/rules/valid-compile.ts index e202164f3..74da07972 100644 --- a/packages/eslint-plugin-svelte/src/rules/valid-compile.ts +++ b/packages/eslint-plugin-svelte/src/rules/valid-compile.ts @@ -1,7 +1,7 @@ -import { createRule } from '../utils'; -import type { SvelteCompileWarnings, Warning } from '../shared/svelte-compile-warns'; -import { getSvelteCompileWarnings } from '../shared/svelte-compile-warns'; -import { getSourceCode } from '../utils/compat'; +import { createRule } from '../utils/index.js'; +import type { SvelteCompileWarnings, Warning } from '../shared/svelte-compile-warns/index.js'; +import { getSvelteCompileWarnings } from '../shared/svelte-compile-warns/index.js'; +import { getSourceCode } from '../utils/compat.js'; export default createRule('valid-compile', { meta: { diff --git a/packages/eslint-plugin-svelte/src/rules/valid-each-key.ts b/packages/eslint-plugin-svelte/src/rules/valid-each-key.ts index f3d7ee829..6a8afd230 100644 --- a/packages/eslint-plugin-svelte/src/rules/valid-each-key.ts +++ b/packages/eslint-plugin-svelte/src/rules/valid-each-key.ts @@ -1,6 +1,6 @@ import type { AST } from 'svelte-eslint-parser'; -import { createRule } from '../utils'; -import { getScope } from '../utils/ast-utils'; +import { createRule } from '../utils/index.js'; +import { getScope } from '../utils/ast-utils.js'; export default createRule('valid-each-key', { meta: { diff --git a/packages/eslint-plugin-svelte/src/rules/valid-prop-names-in-kit-pages.ts b/packages/eslint-plugin-svelte/src/rules/valid-prop-names-in-kit-pages.ts index 307566698..77b3e98da 100644 --- a/packages/eslint-plugin-svelte/src/rules/valid-prop-names-in-kit-pages.ts +++ b/packages/eslint-plugin-svelte/src/rules/valid-prop-names-in-kit-pages.ts @@ -1,7 +1,7 @@ import type { AST } from 'svelte-eslint-parser'; import type { TSESTree } from '@typescript-eslint/types'; -import { createRule } from '../utils'; -import { isKitPageComponent } from '../utils/svelte-kit'; +import { createRule } from '../utils/index.js'; +import { isKitPageComponent } from '../utils/svelte-kit.js'; const EXPECTED_PROP_NAMES = ['data', 'errors', 'form', 'snapshot']; diff --git a/packages/eslint-plugin-svelte/src/shared/index.ts b/packages/eslint-plugin-svelte/src/shared/index.ts index eb198f2ed..c2b47984b 100644 --- a/packages/eslint-plugin-svelte/src/shared/index.ts +++ b/packages/eslint-plugin-svelte/src/shared/index.ts @@ -1,4 +1,4 @@ -import { CommentDirectives } from './comment-directives'; +import { CommentDirectives } from './comment-directives.js'; export class Shared { public readonly commentDirectives: CommentDirectives[] = []; diff --git a/packages/eslint-plugin-svelte/src/shared/svelte-compile-warns/extract-leading-comments.ts b/packages/eslint-plugin-svelte/src/shared/svelte-compile-warns/extract-leading-comments.ts index b34ae2b64..ab3c68f6e 100644 --- a/packages/eslint-plugin-svelte/src/shared/svelte-compile-warns/extract-leading-comments.ts +++ b/packages/eslint-plugin-svelte/src/shared/svelte-compile-warns/extract-leading-comments.ts @@ -1,8 +1,8 @@ import { isOpeningParenToken } from '@eslint-community/eslint-utils'; import type { AST } from 'svelte-eslint-parser'; -import type { RuleContext } from '../../types'; -import type { ASTNodeWithParent } from '../../types-for-node'; -import { getSourceCode } from '../../utils/compat'; +import type { RuleContext } from '../../types.js'; +import type { ASTNodeWithParent } from '../../types-for-node.js'; +import { getSourceCode } from '../../utils/compat.js'; /** Extract comments */ export function extractLeadingComments( diff --git a/packages/eslint-plugin-svelte/src/shared/svelte-compile-warns/ignore-comment.ts b/packages/eslint-plugin-svelte/src/shared/svelte-compile-warns/ignore-comment.ts index 623909ab1..2b7c8b84d 100644 --- a/packages/eslint-plugin-svelte/src/shared/svelte-compile-warns/ignore-comment.ts +++ b/packages/eslint-plugin-svelte/src/shared/svelte-compile-warns/ignore-comment.ts @@ -1,6 +1,6 @@ import type { AST } from 'svelte-eslint-parser'; -import type { RuleContext } from '../../types'; -import { getSourceCode } from '../../utils/compat'; +import type { RuleContext } from '../../types.js'; +import { getSourceCode } from '../../utils/compat.js'; const SVELTE_IGNORE_PATTERN = /^\s*svelte-ignore/m; diff --git a/packages/eslint-plugin-svelte/src/shared/svelte-compile-warns/index.ts b/packages/eslint-plugin-svelte/src/shared/svelte-compile-warns/index.ts index 01cc5449b..accc4727c 100644 --- a/packages/eslint-plugin-svelte/src/shared/svelte-compile-warns/index.ts +++ b/packages/eslint-plugin-svelte/src/shared/svelte-compile-warns/index.ts @@ -2,23 +2,23 @@ import type { AST } from 'svelte-eslint-parser'; import * as compiler from 'svelte/compiler'; import type { SourceMapMappings } from '@jridgewell/sourcemap-codec'; import { decode } from '@jridgewell/sourcemap-codec'; -import type { ASTNodeWithParent, RuleContext } from '../../types'; -import { LinesAndColumns } from '../../utils/lines-and-columns'; -import type { TransformResult } from './transform/types'; -import { hasTypeScript, transform as transformWithTypescript } from './transform/typescript'; -import { transform as transformWithBabel } from './transform/babel'; -import { transform as transformWithPostCSS } from './transform/postcss'; -import { transform as transformWithSass } from './transform/sass'; -import { transform as transformWithLess } from './transform/less'; -import { transform as transformWithStylus } from './transform/stylus'; -import type { IgnoreItem } from './ignore-comment'; -import { getSvelteIgnoreItems } from './ignore-comment'; -import { extractLeadingComments } from './extract-leading-comments'; -import { findAttribute, getLangValue } from '../../utils/ast-utils'; +import type { ASTNodeWithParent, RuleContext } from '../../types.js'; +import { LinesAndColumns } from '../../utils/lines-and-columns.js'; +import type { TransformResult } from './transform/types.js'; +import { hasTypeScript, transform as transformWithTypescript } from './transform/typescript.js'; +import { transform as transformWithBabel } from './transform/babel.js'; +import { transform as transformWithPostCSS } from './transform/postcss.js'; +import { transform as transformWithSass } from './transform/sass.js'; +import { transform as transformWithLess } from './transform/less.js'; +import { transform as transformWithStylus } from './transform/stylus.js'; +import type { IgnoreItem } from './ignore-comment.js'; +import { getSvelteIgnoreItems } from './ignore-comment.js'; +import { extractLeadingComments } from './extract-leading-comments.js'; +import { findAttribute, getLangValue } from '../../utils/ast-utils.js'; import path from 'path'; import fs from 'fs'; import semver from 'semver'; -import { getSourceCode } from '../../utils/compat'; +import { getSourceCode } from '../../utils/compat.js'; type WarningTargetNode = | (AST.SvelteProgram & ASTNodeWithParent) diff --git a/packages/eslint-plugin-svelte/src/shared/svelte-compile-warns/transform/babel.ts b/packages/eslint-plugin-svelte/src/shared/svelte-compile-warns/transform/babel.ts index 93a6d168d..55c41edfa 100644 --- a/packages/eslint-plugin-svelte/src/shared/svelte-compile-warns/transform/babel.ts +++ b/packages/eslint-plugin-svelte/src/shared/svelte-compile-warns/transform/babel.ts @@ -1,9 +1,9 @@ import type { AST } from 'svelte-eslint-parser'; import type babelCore from '@babel/core'; -import type { RuleContext } from '../../../types'; -import type { TransformResult } from './types'; -import { loadModule } from '../../../utils/load-module'; -import { getCwd } from '../../../utils/compat'; +import type { RuleContext } from '../../../types.js'; +import type { TransformResult } from './types.js'; +import { loadModule } from '../../../utils/load-module.js'; +import { getCwd } from '../../../utils/compat.js'; type BabelCore = typeof babelCore; /** diff --git a/packages/eslint-plugin-svelte/src/shared/svelte-compile-warns/transform/less.ts b/packages/eslint-plugin-svelte/src/shared/svelte-compile-warns/transform/less.ts index b846a92bd..618290dd1 100644 --- a/packages/eslint-plugin-svelte/src/shared/svelte-compile-warns/transform/less.ts +++ b/packages/eslint-plugin-svelte/src/shared/svelte-compile-warns/transform/less.ts @@ -1,9 +1,9 @@ import type { AST } from 'svelte-eslint-parser'; import type less from 'less'; -import type { RuleContext } from '../../../types'; -import type { TransformResult } from './types'; -import { loadModule } from '../../../utils/load-module'; -import { getFilename } from '../../../utils/compat'; +import type { RuleContext } from '../../../types.js'; +import type { TransformResult } from './types.js'; +import { loadModule } from '../../../utils/load-module.js'; +import { getFilename } from '../../../utils/compat.js'; type Less = typeof less; /** diff --git a/packages/eslint-plugin-svelte/src/shared/svelte-compile-warns/transform/postcss.ts b/packages/eslint-plugin-svelte/src/shared/svelte-compile-warns/transform/postcss.ts index c47fe3e92..95fd9af4d 100644 --- a/packages/eslint-plugin-svelte/src/shared/svelte-compile-warns/transform/postcss.ts +++ b/packages/eslint-plugin-svelte/src/shared/svelte-compile-warns/transform/postcss.ts @@ -1,9 +1,9 @@ import type { AST } from 'svelte-eslint-parser'; import postcss from 'postcss'; import postcssLoadConfig from 'postcss-load-config'; -import type { RuleContext } from '../../../types'; -import type { TransformResult } from './types'; -import { getCwd, getFilename } from '../../../utils/compat'; +import type { RuleContext } from '../../../types.js'; +import type { TransformResult } from './types.js'; +import { getCwd, getFilename } from '../../../utils/compat.js'; /** * Transform with postcss diff --git a/packages/eslint-plugin-svelte/src/shared/svelte-compile-warns/transform/sass.ts b/packages/eslint-plugin-svelte/src/shared/svelte-compile-warns/transform/sass.ts index a6504f423..5b33bc47e 100644 --- a/packages/eslint-plugin-svelte/src/shared/svelte-compile-warns/transform/sass.ts +++ b/packages/eslint-plugin-svelte/src/shared/svelte-compile-warns/transform/sass.ts @@ -1,8 +1,8 @@ import type { AST } from 'svelte-eslint-parser'; import type sass from 'sass'; -import type { RuleContext } from '../../../types'; -import type { TransformResult } from './types'; -import { loadModule } from '../../../utils/load-module'; +import type { RuleContext } from '../../../types.js'; +import type { TransformResult } from './types.js'; +import { loadModule } from '../../../utils/load-module.js'; type Sass = typeof sass; /** diff --git a/packages/eslint-plugin-svelte/src/shared/svelte-compile-warns/transform/stylus.ts b/packages/eslint-plugin-svelte/src/shared/svelte-compile-warns/transform/stylus.ts index 0a92e5b0e..44e7bc29c 100644 --- a/packages/eslint-plugin-svelte/src/shared/svelte-compile-warns/transform/stylus.ts +++ b/packages/eslint-plugin-svelte/src/shared/svelte-compile-warns/transform/stylus.ts @@ -1,10 +1,10 @@ import type { AST } from 'svelte-eslint-parser'; import type stylus from 'stylus'; import type { RawSourceMap } from 'source-map-js'; -import type { RuleContext } from '../../../types'; -import type { TransformResult } from './types'; -import { loadModule } from '../../../utils/load-module'; -import { getFilename } from '../../../utils/compat'; +import type { RuleContext } from '../../../types.js'; +import type { TransformResult } from './types.js'; +import { loadModule } from '../../../utils/load-module.js'; +import { getFilename } from '../../../utils/compat.js'; type Stylus = typeof stylus; /** diff --git a/packages/eslint-plugin-svelte/src/shared/svelte-compile-warns/transform/typescript.ts b/packages/eslint-plugin-svelte/src/shared/svelte-compile-warns/transform/typescript.ts index 248fd1d8c..e2c360a74 100644 --- a/packages/eslint-plugin-svelte/src/shared/svelte-compile-warns/transform/typescript.ts +++ b/packages/eslint-plugin-svelte/src/shared/svelte-compile-warns/transform/typescript.ts @@ -1,9 +1,9 @@ import type { AST } from 'svelte-eslint-parser'; import type typescript from 'typescript'; -import type { RuleContext } from '../../../types'; -import type { TransformResult } from './types'; -import { loadModule } from '../../../utils/load-module'; -import { getSourceCode } from '../../../utils/compat'; +import type { RuleContext } from '../../../types.js'; +import type { TransformResult } from './types.js'; +import { loadModule } from '../../../utils/load-module.js'; +import { getSourceCode } from '../../../utils/compat.js'; type TS = typeof typescript; /** diff --git a/packages/eslint-plugin-svelte/src/type-defs/@eslint-community/eslint-utils.d.ts b/packages/eslint-plugin-svelte/src/type-defs/@eslint-community/eslint-utils.d.ts new file mode 100644 index 000000000..474538df0 --- /dev/null +++ b/packages/eslint-plugin-svelte/src/type-defs/@eslint-community/eslint-utils.d.ts @@ -0,0 +1,91 @@ +declare module '@eslint-community/eslint-utils' { + import type { AST } from 'svelte-eslint-parser'; + import type { TSESTree } from '@typescript-eslint/types'; + import type { Scope } from '@typescript-eslint/scope-manager'; + import type { + CALL, + CONSTRUCT, + ESM, + READ, + TraceMap + } from '@eslint-community/eslint-utils/referenceTracker'; + export { ReferenceTracker, TrackedReferences } from '../../../node_modules/@types/eslint-utils'; + type Token = { type: string; value: string }; + export function isArrowToken(token: Token): boolean; + export function isCommaToken(token: Token): boolean; + export function isSemicolonToken(token: Token): boolean; + export function isColonToken(token: Token): boolean; + export function isOpeningParenToken(token: Token): boolean; + export function isClosingParenToken(token: Token): boolean; + export function isOpeningBracketToken(token: Token): boolean; + export function isClosingBracketToken(token: Token): boolean; + export function isOpeningBraceToken(token: Token): boolean; + export function isClosingBraceToken(token: Token): boolean; + export function isCommentToken(token: Token): token is AST.Comment; + export function isNotArrowToken(token: Token): boolean; + export function isNotCommaToken(token: Token): boolean; + export function isNotSemicolonToken(token: Token): boolean; + export function isNotColonToken(token: Token): boolean; + export function isNotOpeningParenToken(token: Token): boolean; + export function isNotClosingParenToken(token: Token): boolean; + export function isNotOpeningBracketToken(token: Token): boolean; + export function isNotClosingBracketToken(token: Token): boolean; + export function isNotOpeningBraceToken(token: Token): boolean; + export function isNotClosingBraceToken(token: Token): boolean; + export function isNotCommentToken(token: Token): boolean; + + export function findVariable( + initialScope: Scope, + nameOrNode: TSESTree.Identifier | string + ): Scope.Variable; + + /** + * Get the property name from a MemberExpression node or a Property node. + */ + export function getPropertyName( + node: + | TSESTree.MemberExpression + | TSESTree.MethodDefinition + | TSESTree.Property + | TSESTree.PropertyDefinition, + initialScope?: Scope + ): string | null; + + /** + * Get the innermost scope which contains a given location. + */ + export function getInnermostScope(initialScope: Scope, node: TSESTree.Node): Scope; + + export class ReferenceTracker { + public static readonly CALL: typeof CALL; + + public static readonly CONSTRUCT: typeof CONSTRUCT; + + public static readonly ESM: typeof ESM; + + public static readonly READ: typeof READ; + + public constructor(globalScope: Scope, options?: ReferenceTrackerOptions); + + /** + * Iterate the references of CommonJS modules. + */ + public iterateCjsReferences( + traceMap: TraceMap + ): IterableIterator>; + + /** + * Iterate the references of ES modules. + */ + public iterateEsmReferences( + traceMap: TraceMap + ): IterableIterator>; + + /** + * Iterate the references of global variables. + */ + public iterateGlobalReferences( + traceMap: TraceMap + ): IterableIterator>; + } +} diff --git a/packages/eslint-plugin-svelte/src/type-defs/postcss-safe-parser/lib/safe-parser.d.ts b/packages/eslint-plugin-svelte/src/type-defs/postcss-safe-parser/lib/safe-parser.d.ts new file mode 100644 index 000000000..d6cb08a59 --- /dev/null +++ b/packages/eslint-plugin-svelte/src/type-defs/postcss-safe-parser/lib/safe-parser.d.ts @@ -0,0 +1,19 @@ +declare module 'postcss-safe-parser/lib/safe-parser' { + import type { Tokenizer } from 'postcss/lib/tokenize'; + import type { Root, Input } from 'postcss'; + + declare class Parser { + protected input: Input; + + public root: Root; + + protected tokenizer: Tokenizer; + + public constructor(input: Input); + + public parse(): void; + + protected createTokenizer(): void; + } + export default Parser; +} diff --git a/packages/eslint-plugin-svelte/src/type-defs/postcss/lib/tokenize.d.ts b/packages/eslint-plugin-svelte/src/type-defs/postcss/lib/tokenize.d.ts new file mode 100644 index 000000000..b881f26ce --- /dev/null +++ b/packages/eslint-plugin-svelte/src/type-defs/postcss/lib/tokenize.d.ts @@ -0,0 +1,11 @@ +declare module 'postcss/lib/tokenize' { + import type { Input } from 'postcss'; + export type Token = [string, string, number?, number?]; + export type Tokenizer = { + back: (token: Token) => void; + nextToken: (opts?: { ignoreUnclosed?: boolean }) => Token | undefined; + endOfFile: () => boolean; + position: () => number; + }; + export default function tokenizer(input: Input, options?: { ignoreErrors?: boolean }): Tokenizer; +} diff --git a/packages/eslint-plugin-svelte/src/types.ts b/packages/eslint-plugin-svelte/src/types.ts index a04eb81f8..7b6452b52 100644 --- a/packages/eslint-plugin-svelte/src/types.ts +++ b/packages/eslint-plugin-svelte/src/types.ts @@ -3,7 +3,7 @@ import type { Linter, Rule, SourceCode as ESLintSourceCode } from 'eslint'; import type { AST, StyleContext, SvelteConfig } from 'svelte-eslint-parser'; import type { TSESTree } from '@typescript-eslint/types'; import type { ScopeManager, Scope, Variable } from '@typescript-eslint/scope-manager'; -import type { ASTNode, ASTNodeWithParent, ASTNodeListener } from './types-for-node'; +import type { ASTNode, ASTNodeWithParent, ASTNodeListener } from './types-for-node.js'; import type * as TS from 'typescript'; export type { ASTNode, ASTNodeWithParent, ASTNodeListener }; diff --git a/packages/eslint-plugin-svelte/src/utils/ast-utils.ts b/packages/eslint-plugin-svelte/src/utils/ast-utils.ts index 212e91038..d12e56e88 100644 --- a/packages/eslint-plugin-svelte/src/utils/ast-utils.ts +++ b/packages/eslint-plugin-svelte/src/utils/ast-utils.ts @@ -1,10 +1,10 @@ -import type { ASTNode, RuleContext, SourceCode } from '../types'; +import type { ASTNode, RuleContext, SourceCode } from '../types.js'; import type { TSESTree } from '@typescript-eslint/types'; import type { Scope, Variable } from '@typescript-eslint/scope-manager'; import type { AST as SvAST } from 'svelte-eslint-parser'; import * as eslintUtils from '@eslint-community/eslint-utils'; -import { voidElements, svgElements, mathmlElements } from './element-types'; -import { getSourceCode } from './compat'; +import { voidElements, svgElements, mathmlElements } from './element-types.js'; +import { getSourceCode } from './compat.js'; /** * Checks whether or not the tokens of two given nodes are same. diff --git a/packages/eslint-plugin-svelte/src/utils/compat.ts b/packages/eslint-plugin-svelte/src/utils/compat.ts index 701b1da39..0fc9dff18 100644 --- a/packages/eslint-plugin-svelte/src/utils/compat.ts +++ b/packages/eslint-plugin-svelte/src/utils/compat.ts @@ -4,7 +4,7 @@ import { getPhysicalFilename as getPhysicalFilenameBase, getCwd as getCwdBase } from 'eslint-compat-utils'; -import type { RuleContext, SourceCode } from '../types'; +import type { RuleContext, SourceCode } from '../types.js'; // export function getSourceCode(context: RuleContext): SourceCode; // export function getSourceCode(context: Rule.RuleContext): ESLintSourceCode; diff --git a/packages/eslint-plugin-svelte/src/utils/css-utils/index.ts b/packages/eslint-plugin-svelte/src/utils/css-utils/index.ts index 50fd8ab62..3e5fc7334 100644 --- a/packages/eslint-plugin-svelte/src/utils/css-utils/index.ts +++ b/packages/eslint-plugin-svelte/src/utils/css-utils/index.ts @@ -1,3 +1,3 @@ -export * from './style-attribute'; -export * from './resource'; -export * from './utils'; +export * from './style-attribute.js'; +export * from './resource.js'; +export * from './utils.js'; diff --git a/packages/eslint-plugin-svelte/src/utils/css-utils/style-attribute.ts b/packages/eslint-plugin-svelte/src/utils/css-utils/style-attribute.ts index b7fa497ed..1046d7d47 100644 --- a/packages/eslint-plugin-svelte/src/utils/css-utils/style-attribute.ts +++ b/packages/eslint-plugin-svelte/src/utils/css-utils/style-attribute.ts @@ -1,19 +1,17 @@ import type { AST } from 'svelte-eslint-parser'; -import type { RuleContext } from '../../types'; -import Parser from './template-safe-parser'; +import type { RuleContext } from '../../types.js'; +import Parser from './template-safe-parser.js'; import type { Root, ChildNode, AnyNode } from 'postcss'; import { Input } from 'postcss'; import type { TSESTree } from '@typescript-eslint/types'; -import { getSourceCode } from '../compat'; +import { getSourceCode } from '../compat.js'; /** Parse for CSS */ function safeParseCss(css: string): Root | null { try { const input = new Input(css); - const parser = new Parser(input); parser.parse(); - return parser.root; } catch { return null; diff --git a/packages/eslint-plugin-svelte/src/utils/css-utils/template-safe-parser.ts b/packages/eslint-plugin-svelte/src/utils/css-utils/template-safe-parser.ts index 30f3b5cb6..cf2fb0d3d 100644 --- a/packages/eslint-plugin-svelte/src/utils/css-utils/template-safe-parser.ts +++ b/packages/eslint-plugin-svelte/src/utils/css-utils/template-safe-parser.ts @@ -1,5 +1,5 @@ import SafeParser from 'postcss-safe-parser/lib/safe-parser'; -import templateTokenize from './template-tokenize'; +import templateTokenize from './template-tokenize.js'; class TemplateSafeParser extends SafeParser { protected createTokenizer(): void { this.tokenizer = templateTokenize(this.input, { ignoreErrors: true }); diff --git a/packages/eslint-plugin-svelte/src/utils/eslint-core.ts b/packages/eslint-plugin-svelte/src/utils/eslint-core.ts index 82f131165..c803f912b 100644 --- a/packages/eslint-plugin-svelte/src/utils/eslint-core.ts +++ b/packages/eslint-plugin-svelte/src/utils/eslint-core.ts @@ -1,9 +1,11 @@ /* eslint @typescript-eslint/no-explicit-any: off -- util */ -import type { RuleListener, RuleContext, RuleModule } from '../types'; +import type { RuleListener, RuleContext, RuleModule } from '../types.js'; import type { TSESTree } from '@typescript-eslint/types'; import type { AST as SvAST } from 'svelte-eslint-parser'; import { Linter } from 'eslint'; +import { Module } from 'module'; +const require = Module.createRequire(import.meta.url); /** * Define the wrapped core rule. */ @@ -85,7 +87,6 @@ export function getCoreRule(ruleName: string): RuleModule { // getRules() is no longer available in flat config. } - // eslint-disable-next-line @typescript-eslint/no-require-imports , @typescript-eslint/no-var-requires -- Ignore const { builtinRules } = require('eslint/use-at-your-own-risk'); ruleMap = builtinRules; return builtinRules.get(ruleName) || null; diff --git a/packages/eslint-plugin-svelte/src/utils/get-package-json.ts b/packages/eslint-plugin-svelte/src/utils/get-package-json.ts index 9017256d2..15d9b620e 100644 --- a/packages/eslint-plugin-svelte/src/utils/get-package-json.ts +++ b/packages/eslint-plugin-svelte/src/utils/get-package-json.ts @@ -4,7 +4,7 @@ import fs from 'fs'; import path from 'path'; -import { createCache } from './cache'; +import { createCache } from './cache.js'; type PackageJson = { name?: unknown; diff --git a/packages/eslint-plugin-svelte/src/utils/index.ts b/packages/eslint-plugin-svelte/src/utils/index.ts index f0ca59910..89bbede8a 100644 --- a/packages/eslint-plugin-svelte/src/utils/index.ts +++ b/packages/eslint-plugin-svelte/src/utils/index.ts @@ -1,4 +1,4 @@ -import type { RuleModule, PartialRuleModule } from '../types'; +import type { RuleModule, PartialRuleModule } from '../types.js'; /** * Define the rule. diff --git a/packages/eslint-plugin-svelte/src/utils/load-module.ts b/packages/eslint-plugin-svelte/src/utils/load-module.ts index 1676ee4a3..04cae3751 100644 --- a/packages/eslint-plugin-svelte/src/utils/load-module.ts +++ b/packages/eslint-plugin-svelte/src/utils/load-module.ts @@ -1,8 +1,8 @@ import type { AST } from 'svelte-eslint-parser'; import Module from 'module'; import path from 'path'; -import type { RuleContext } from '../types'; -import { getCwd, getFilename, getPhysicalFilename, getSourceCode } from './compat'; +import type { RuleContext } from '../types.js'; +import { getCwd, getFilename, getPhysicalFilename, getSourceCode } from './compat.js'; const cache = new WeakMap>(); const cache4b = new Map(); /** diff --git a/packages/eslint-plugin-svelte/src/utils/rules.ts b/packages/eslint-plugin-svelte/src/utils/rules.ts index 862db8b99..296a7700d 100644 --- a/packages/eslint-plugin-svelte/src/utils/rules.ts +++ b/packages/eslint-plugin-svelte/src/utils/rules.ts @@ -1,73 +1,73 @@ // IMPORTANT! // This file has been automatically generated, // in order to update its content execute "pnpm run update" -import type { RuleModule } from '../types'; -import typescriptEslintNoUnnecessaryCondition from '../rules/@typescript-eslint/no-unnecessary-condition'; -import blockLang from '../rules/block-lang'; -import buttonHasType from '../rules/button-has-type'; -import commentDirective from '../rules/comment-directive'; -import derivedHasSameInputsOutputs from '../rules/derived-has-same-inputs-outputs'; -import experimentalRequireSlotTypes from '../rules/experimental-require-slot-types'; -import experimentalRequireStrictEvents from '../rules/experimental-require-strict-events'; -import firstAttributeLinebreak from '../rules/first-attribute-linebreak'; -import htmlClosingBracketNewLine from '../rules/html-closing-bracket-new-line'; -import htmlClosingBracketSpacing from '../rules/html-closing-bracket-spacing'; -import htmlQuotes from '../rules/html-quotes'; -import htmlSelfClosing from '../rules/html-self-closing'; -import indent from '../rules/indent'; -import infiniteReactiveLoop from '../rules/infinite-reactive-loop'; -import maxAttributesPerLine from '../rules/max-attributes-per-line'; -import mustacheSpacing from '../rules/mustache-spacing'; -import noAtDebugTags from '../rules/no-at-debug-tags'; -import noAtHtmlTags from '../rules/no-at-html-tags'; -import noDeprecatedRawSpecialElements from '../rules/no-deprecated-raw-special-elements'; -import noDomManipulating from '../rules/no-dom-manipulating'; -import noDupeElseIfBlocks from '../rules/no-dupe-else-if-blocks'; -import noDupeOnDirectives from '../rules/no-dupe-on-directives'; -import noDupeStyleProperties from '../rules/no-dupe-style-properties'; -import noDupeUseDirectives from '../rules/no-dupe-use-directives'; -import noDynamicSlotName from '../rules/no-dynamic-slot-name'; -import noExportLoadInSvelteModuleInKitPages from '../rules/no-export-load-in-svelte-module-in-kit-pages'; -import noExtraReactiveCurlies from '../rules/no-extra-reactive-curlies'; -import noGotoWithoutBase from '../rules/no-goto-without-base'; -import noIgnoredUnsubscribe from '../rules/no-ignored-unsubscribe'; -import noImmutableReactiveStatements from '../rules/no-immutable-reactive-statements'; -import noInlineStyles from '../rules/no-inline-styles'; -import noInnerDeclarations from '../rules/no-inner-declarations'; -import noInspect from '../rules/no-inspect'; -import noNotFunctionHandler from '../rules/no-not-function-handler'; -import noObjectInTextMustaches from '../rules/no-object-in-text-mustaches'; -import noReactiveFunctions from '../rules/no-reactive-functions'; -import noReactiveLiterals from '../rules/no-reactive-literals'; -import noReactiveReassign from '../rules/no-reactive-reassign'; -import noRestrictedHtmlElements from '../rules/no-restricted-html-elements'; -import noShorthandStylePropertyOverrides from '../rules/no-shorthand-style-property-overrides'; -import noSpacesAroundEqualSignsInAttribute from '../rules/no-spaces-around-equal-signs-in-attribute'; -import noStoreAsync from '../rules/no-store-async'; -import noSvelteInternal from '../rules/no-svelte-internal'; -import noTargetBlank from '../rules/no-target-blank'; -import noTrailingSpaces from '../rules/no-trailing-spaces'; -import noUnknownStyleDirectiveProperty from '../rules/no-unknown-style-directive-property'; -import noUnusedClassName from '../rules/no-unused-class-name'; -import noUnusedSvelteIgnore from '../rules/no-unused-svelte-ignore'; -import noUselessMustaches from '../rules/no-useless-mustaches'; -import preferClassDirective from '../rules/prefer-class-directive'; -import preferDestructuredStoreProps from '../rules/prefer-destructured-store-props'; -import preferStyleDirective from '../rules/prefer-style-directive'; -import requireEachKey from '../rules/require-each-key'; -import requireEventDispatcherTypes from '../rules/require-event-dispatcher-types'; -import requireOptimizedStyleAttribute from '../rules/require-optimized-style-attribute'; -import requireStoreCallbacksUseSetParam from '../rules/require-store-callbacks-use-set-param'; -import requireStoreReactiveAccess from '../rules/require-store-reactive-access'; -import requireStoresInit from '../rules/require-stores-init'; -import shorthandAttribute from '../rules/shorthand-attribute'; -import shorthandDirective from '../rules/shorthand-directive'; -import sortAttributes from '../rules/sort-attributes'; -import spacedHtmlComment from '../rules/spaced-html-comment'; -import system from '../rules/system'; -import validCompile from '../rules/valid-compile'; -import validEachKey from '../rules/valid-each-key'; -import validPropNamesInKitPages from '../rules/valid-prop-names-in-kit-pages'; +import type { RuleModule } from '../types.js'; +import typescriptEslintNoUnnecessaryCondition from '../rules/@typescript-eslint/no-unnecessary-condition.js'; +import blockLang from '../rules/block-lang.js'; +import buttonHasType from '../rules/button-has-type.js'; +import commentDirective from '../rules/comment-directive.js'; +import derivedHasSameInputsOutputs from '../rules/derived-has-same-inputs-outputs.js'; +import experimentalRequireSlotTypes from '../rules/experimental-require-slot-types.js'; +import experimentalRequireStrictEvents from '../rules/experimental-require-strict-events.js'; +import firstAttributeLinebreak from '../rules/first-attribute-linebreak.js'; +import htmlClosingBracketNewLine from '../rules/html-closing-bracket-new-line.js'; +import htmlClosingBracketSpacing from '../rules/html-closing-bracket-spacing.js'; +import htmlQuotes from '../rules/html-quotes.js'; +import htmlSelfClosing from '../rules/html-self-closing.js'; +import indent from '../rules/indent.js'; +import infiniteReactiveLoop from '../rules/infinite-reactive-loop.js'; +import maxAttributesPerLine from '../rules/max-attributes-per-line.js'; +import mustacheSpacing from '../rules/mustache-spacing.js'; +import noAtDebugTags from '../rules/no-at-debug-tags.js'; +import noAtHtmlTags from '../rules/no-at-html-tags.js'; +import noDeprecatedRawSpecialElements from '../rules/no-deprecated-raw-special-elements.js'; +import noDomManipulating from '../rules/no-dom-manipulating.js'; +import noDupeElseIfBlocks from '../rules/no-dupe-else-if-blocks.js'; +import noDupeOnDirectives from '../rules/no-dupe-on-directives.js'; +import noDupeStyleProperties from '../rules/no-dupe-style-properties.js'; +import noDupeUseDirectives from '../rules/no-dupe-use-directives.js'; +import noDynamicSlotName from '../rules/no-dynamic-slot-name.js'; +import noExportLoadInSvelteModuleInKitPages from '../rules/no-export-load-in-svelte-module-in-kit-pages.js'; +import noExtraReactiveCurlies from '../rules/no-extra-reactive-curlies.js'; +import noGotoWithoutBase from '../rules/no-goto-without-base.js'; +import noIgnoredUnsubscribe from '../rules/no-ignored-unsubscribe.js'; +import noImmutableReactiveStatements from '../rules/no-immutable-reactive-statements.js'; +import noInlineStyles from '../rules/no-inline-styles.js'; +import noInnerDeclarations from '../rules/no-inner-declarations.js'; +import noInspect from '../rules/no-inspect.js'; +import noNotFunctionHandler from '../rules/no-not-function-handler.js'; +import noObjectInTextMustaches from '../rules/no-object-in-text-mustaches.js'; +import noReactiveFunctions from '../rules/no-reactive-functions.js'; +import noReactiveLiterals from '../rules/no-reactive-literals.js'; +import noReactiveReassign from '../rules/no-reactive-reassign.js'; +import noRestrictedHtmlElements from '../rules/no-restricted-html-elements.js'; +import noShorthandStylePropertyOverrides from '../rules/no-shorthand-style-property-overrides.js'; +import noSpacesAroundEqualSignsInAttribute from '../rules/no-spaces-around-equal-signs-in-attribute.js'; +import noStoreAsync from '../rules/no-store-async.js'; +import noSvelteInternal from '../rules/no-svelte-internal.js'; +import noTargetBlank from '../rules/no-target-blank.js'; +import noTrailingSpaces from '../rules/no-trailing-spaces.js'; +import noUnknownStyleDirectiveProperty from '../rules/no-unknown-style-directive-property.js'; +import noUnusedClassName from '../rules/no-unused-class-name.js'; +import noUnusedSvelteIgnore from '../rules/no-unused-svelte-ignore.js'; +import noUselessMustaches from '../rules/no-useless-mustaches.js'; +import preferClassDirective from '../rules/prefer-class-directive.js'; +import preferDestructuredStoreProps from '../rules/prefer-destructured-store-props.js'; +import preferStyleDirective from '../rules/prefer-style-directive.js'; +import requireEachKey from '../rules/require-each-key.js'; +import requireEventDispatcherTypes from '../rules/require-event-dispatcher-types.js'; +import requireOptimizedStyleAttribute from '../rules/require-optimized-style-attribute.js'; +import requireStoreCallbacksUseSetParam from '../rules/require-store-callbacks-use-set-param.js'; +import requireStoreReactiveAccess from '../rules/require-store-reactive-access.js'; +import requireStoresInit from '../rules/require-stores-init.js'; +import shorthandAttribute from '../rules/shorthand-attribute.js'; +import shorthandDirective from '../rules/shorthand-directive.js'; +import sortAttributes from '../rules/sort-attributes.js'; +import spacedHtmlComment from '../rules/spaced-html-comment.js'; +import system from '../rules/system.js'; +import validCompile from '../rules/valid-compile.js'; +import validEachKey from '../rules/valid-each-key.js'; +import validPropNamesInKitPages from '../rules/valid-prop-names-in-kit-pages.js'; export const rules = [ typescriptEslintNoUnnecessaryCondition, diff --git a/packages/eslint-plugin-svelte/src/utils/svelte-kit.ts b/packages/eslint-plugin-svelte/src/utils/svelte-kit.ts index 93f0236ae..80a9099ba 100644 --- a/packages/eslint-plugin-svelte/src/utils/svelte-kit.ts +++ b/packages/eslint-plugin-svelte/src/utils/svelte-kit.ts @@ -2,11 +2,11 @@ * refer: https://github.com/mysticatea/eslint-plugin-node/blob/f45c6149be7235c0f7422d1179c25726afeecd83/lib/util/get-package-json.js */ -import type { RuleContext } from '../types'; +import type { RuleContext } from '../types.js'; import fs from 'fs'; import path from 'path'; -import { getPackageJson } from './get-package-json'; -import { getFilename, getSourceCode } from './compat'; +import { getPackageJson } from './get-package-json.js'; +import { getFilename, getSourceCode } from './compat.js'; const isRunOnBrowser = !fs.readFileSync; diff --git a/packages/eslint-plugin-svelte/src/utils/ts-utils/index.ts b/packages/eslint-plugin-svelte/src/utils/ts-utils/index.ts index 8f341fa81..cbe430c99 100644 --- a/packages/eslint-plugin-svelte/src/utils/ts-utils/index.ts +++ b/packages/eslint-plugin-svelte/src/utils/ts-utils/index.ts @@ -1,7 +1,7 @@ -import type { RuleContext, ASTNode } from '../../types'; +import type { RuleContext, ASTNode } from '../../types.js'; import type * as TS from 'typescript'; -import { loadModule } from '../load-module'; -import { getSourceCode } from '../compat'; +import { loadModule } from '../load-module.js'; +import { getSourceCode } from '../compat.js'; export type TypeScript = typeof TS; export type { TS }; diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-custom-warn/_config.js b/packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-custom-warn/_config.cjs similarity index 100% rename from packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-custom-warn/_config.js rename to packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-custom-warn/_config.cjs diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-ignore/_config.js b/packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-ignore/_config.cjs similarity index 100% rename from packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-ignore/_config.js rename to packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/invalid/svelte-config-ignore/_config.cjs diff --git a/packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/svelte-config-ignore/_config.js b/packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/svelte-config-ignore/_config.cjs similarity index 100% rename from packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/svelte-config-ignore/_config.js rename to packages/eslint-plugin-svelte/tests/fixtures/rules/valid-compile/valid/svelte-config-ignore/_config.cjs diff --git a/packages/eslint-plugin-svelte/tests/src/configs/all.ts b/packages/eslint-plugin-svelte/tests/src/configs/all.ts index 40f3d3968..3ad9a2a30 100644 --- a/packages/eslint-plugin-svelte/tests/src/configs/all.ts +++ b/packages/eslint-plugin-svelte/tests/src/configs/all.ts @@ -1,38 +1,9 @@ import assert from 'assert'; import semver from 'semver'; -import plugin from '../../../src/index'; -import { LegacyESLint, ESLint } from '../../utils/eslint-compat'; +import plugin from '../../../src/index.js'; +import { ESLint } from '../../utils/eslint-compat.js'; describe('`all` config', () => { - it('legacy `all` config should work. ', async () => { - const code = `{@html a+b}`; - - const linter = new LegacyESLint({ - plugins: { - svelte: plugin as never - }, - baseConfig: { - parserOptions: { - ecmaVersion: 2020 - }, - extends: ['plugin:svelte/all'] - }, - useEslintrc: false - }); - const result = await linter.lintText(code, { filePath: 'test.svelte' }); - const messages = result[0].messages; - - assert.deepStrictEqual( - messages.map((m) => ({ ruleId: m.ruleId, line: m.line, message: m.message })), - [ - { - ruleId: 'svelte/no-at-html-tags', - message: '`{@html}` can lead to XSS attack.', - line: 1 - } - ] - ); - }); it('`all` config should work. ', async () => { if (semver.satisfies(ESLint.version, '<8.0.0')) return; const code = `{@html a+b}`; diff --git a/packages/eslint-plugin-svelte/tests/src/configs/base.ts b/packages/eslint-plugin-svelte/tests/src/configs/base.ts index 5bdc838d5..ac070c0fc 100644 --- a/packages/eslint-plugin-svelte/tests/src/configs/base.ts +++ b/packages/eslint-plugin-svelte/tests/src/configs/base.ts @@ -1,44 +1,9 @@ import assert from 'assert'; import semver from 'semver'; -import plugin from '../../../src/index'; -import { LegacyESLint, ESLint } from '../../utils/eslint-compat'; +import plugin from '../../../src/index.js'; +import { ESLint } from '../../utils/eslint-compat.js'; describe('`base` config', () => { - it('legacy `base` config should work. ', async () => { - const code = ` - -{@html a+b} -{@html a+b}`; - - const linter = new LegacyESLint({ - plugins: { - svelte: plugin as never - }, - baseConfig: { - parserOptions: { - ecmaVersion: 2020 - }, - extends: ['plugin:svelte/base'], - rules: { - 'svelte/no-at-html-tags': 'error' - } - }, - useEslintrc: false - }); - const result = await linter.lintText(code, { filePath: 'test.svelte' }); - const messages = result[0].messages; - - assert.deepStrictEqual( - messages.map((m) => ({ ruleId: m.ruleId, line: m.line, message: m.message })), - [ - { - ruleId: 'svelte/no-at-html-tags', - message: '`{@html}` can lead to XSS attack.', - line: 4 - } - ] - ); - }); it('`base` config should work. ', async () => { if (semver.satisfies(ESLint.version, '<8.0.0')) return; const code = ` diff --git a/packages/eslint-plugin-svelte/tests/src/configs/recommended.ts b/packages/eslint-plugin-svelte/tests/src/configs/recommended.ts index afb028fa8..c284e275d 100644 --- a/packages/eslint-plugin-svelte/tests/src/configs/recommended.ts +++ b/packages/eslint-plugin-svelte/tests/src/configs/recommended.ts @@ -1,38 +1,9 @@ import assert from 'assert'; import semver from 'semver'; -import plugin from '../../../src/index'; -import { LegacyESLint, ESLint } from '../../utils/eslint-compat'; +import plugin from '../../../src/index.js'; +import { ESLint } from '../../utils/eslint-compat.js'; describe('`recommended` config', () => { - it('legacy `recommended` config should work. ', async () => { - const code = `{@html a+b}`; - - const linter = new LegacyESLint({ - plugins: { - svelte: plugin as never - }, - baseConfig: { - parserOptions: { - ecmaVersion: 2020 - }, - extends: ['plugin:svelte/recommended'] - }, - useEslintrc: false - }); - const result = await linter.lintText(code, { filePath: 'test.svelte' }); - const messages = result[0].messages; - - assert.deepStrictEqual( - messages.map((m) => ({ ruleId: m.ruleId, line: m.line, message: m.message })), - [ - { - ruleId: 'svelte/no-at-html-tags', - message: '`{@html}` can lead to XSS attack.', - line: 1 - } - ] - ); - }); it('`recommended` config should work. ', async () => { if (semver.satisfies(ESLint.version, '<8.0.0')) return; const code = `{@html a+b}`; diff --git a/packages/eslint-plugin-svelte/tests/src/integration/no-unused-vars.ts b/packages/eslint-plugin-svelte/tests/src/integration/no-unused-vars.ts index d84a0bb9a..95031e5c4 100644 --- a/packages/eslint-plugin-svelte/tests/src/integration/no-unused-vars.ts +++ b/packages/eslint-plugin-svelte/tests/src/integration/no-unused-vars.ts @@ -1,12 +1,13 @@ import type { Rule } from 'eslint'; -import { getCoreRule } from '../../../src/utils/eslint-core'; -import { RuleTester } from '../../utils/eslint-compat'; +import { getCoreRule } from '../../../src/utils/eslint-core.js'; +import { RuleTester } from '../../utils/eslint-compat.js'; +import * as parser from 'svelte-eslint-parser'; describe('Integration test for no-unused-vars', () => { const ruleNoUnusedVars = getCoreRule('no-unused-vars') as unknown as Rule.RuleModule; const tester = new RuleTester({ languageOptions: { - parser: require('svelte-eslint-parser'), + parser: parser, ecmaVersion: 2020, sourceType: 'module' } diff --git a/packages/eslint-plugin-svelte/tests/src/meta.ts b/packages/eslint-plugin-svelte/tests/src/meta.ts index 8cb39bf5d..0710aa00a 100644 --- a/packages/eslint-plugin-svelte/tests/src/meta.ts +++ b/packages/eslint-plugin-svelte/tests/src/meta.ts @@ -1,5 +1,5 @@ import assert from 'assert'; -import plugin from '../../src'; +import plugin from '../../src/index.js'; import { version } from '../../package.json'; const expectedMeta = { name: 'eslint-plugin-svelte', diff --git a/packages/eslint-plugin-svelte/tests/src/rules/@typescript-eslint/no-unnecessary-condition.ts b/packages/eslint-plugin-svelte/tests/src/rules/@typescript-eslint/no-unnecessary-condition.ts index 3ebabcea4..c61fc0888 100644 --- a/packages/eslint-plugin-svelte/tests/src/rules/@typescript-eslint/no-unnecessary-condition.ts +++ b/packages/eslint-plugin-svelte/tests/src/rules/@typescript-eslint/no-unnecessary-condition.ts @@ -1,6 +1,6 @@ -import { RuleTester } from '../../../utils/eslint-compat'; -import rule from '../../../../src/rules/@typescript-eslint/no-unnecessary-condition'; -import { loadTestCases, RULES_PROJECT } from '../../../utils/utils'; +import { RuleTester } from '../../../utils/eslint-compat.js'; +import rule from '../../../../src/rules/@typescript-eslint/no-unnecessary-condition.js'; +import { loadTestCases, RULES_PROJECT } from '../../../utils/utils.js'; const tester = new RuleTester({ languageOptions: { diff --git a/packages/eslint-plugin-svelte/tests/src/rules/@typescript-eslint/original-tests/no-unnecessary-condition.ts b/packages/eslint-plugin-svelte/tests/src/rules/@typescript-eslint/original-tests/no-unnecessary-condition.ts index 2d92bcb05..39cf721c2 100644 --- a/packages/eslint-plugin-svelte/tests/src/rules/@typescript-eslint/original-tests/no-unnecessary-condition.ts +++ b/packages/eslint-plugin-svelte/tests/src/rules/@typescript-eslint/original-tests/no-unnecessary-condition.ts @@ -2,10 +2,13 @@ // https://github.com/typescript-eslint/typescript-eslint/blob/78467fc1bde9bd2db1e08b3d19f151f4adaff8a9/packages/eslint-plugin/tests/rules/no-unnecessary-condition.test.ts /* eslint func-style: off, eslint-plugin/consistent-output: off -- respect original */ import * as path from 'path'; -import { RuleTester } from '../../../../utils/eslint-compat'; +import { RuleTester } from '../../../../utils/eslint-compat.js'; import type * as eslint from 'eslint'; +import * as typescriptParser from '@typescript-eslint/parser'; -import rule from '../../../../../src/rules/@typescript-eslint/no-unnecessary-condition'; +import rule from '../../../../../src/rules/@typescript-eslint/no-unnecessary-condition.js'; + +const __dirname = path.dirname(new URL(import.meta.url).pathname); function getFixturesRootDir(): string { return path.join(__dirname, 'fixtures'); @@ -15,7 +18,7 @@ const rootPath = getFixturesRootDir(); const ruleTester = new RuleTester({ languageOptions: { - parser: require('@typescript-eslint/parser'), + parser: typescriptParser, parserOptions: { tsconfigRootDir: rootPath, project: './tsconfig.json', diff --git a/packages/eslint-plugin-svelte/tests/src/rules/block-lang.ts b/packages/eslint-plugin-svelte/tests/src/rules/block-lang.ts index fb32f4901..848e0bcb5 100644 --- a/packages/eslint-plugin-svelte/tests/src/rules/block-lang.ts +++ b/packages/eslint-plugin-svelte/tests/src/rules/block-lang.ts @@ -1,6 +1,6 @@ -import { RuleTester } from '../../utils/eslint-compat'; -import rule from '../../../src/rules/block-lang'; -import { loadTestCases } from '../../utils/utils'; +import { RuleTester } from '../../utils/eslint-compat.js'; +import rule from '../../../src/rules/block-lang.js'; +import { loadTestCases } from '../../utils/utils.js'; const tester = new RuleTester({ languageOptions: { diff --git a/packages/eslint-plugin-svelte/tests/src/rules/button-has-type.ts b/packages/eslint-plugin-svelte/tests/src/rules/button-has-type.ts index 099d8aea6..998ed1c8c 100644 --- a/packages/eslint-plugin-svelte/tests/src/rules/button-has-type.ts +++ b/packages/eslint-plugin-svelte/tests/src/rules/button-has-type.ts @@ -1,6 +1,6 @@ -import { RuleTester } from '../../utils/eslint-compat'; -import rule from '../../../src/rules/button-has-type'; -import { loadTestCases } from '../../utils/utils'; +import { RuleTester } from '../../utils/eslint-compat.js'; +import rule from '../../../src/rules/button-has-type.js'; +import { loadTestCases } from '../../utils/utils.js'; const tester = new RuleTester({ languageOptions: { diff --git a/packages/eslint-plugin-svelte/tests/src/rules/comment-directive.ts b/packages/eslint-plugin-svelte/tests/src/rules/comment-directive.ts index 91c17de43..65efc02bb 100644 --- a/packages/eslint-plugin-svelte/tests/src/rules/comment-directive.ts +++ b/packages/eslint-plugin-svelte/tests/src/rules/comment-directive.ts @@ -1,6 +1,7 @@ import assert from 'assert'; -import plugin from '../../../src/index'; -import { ESLint } from '../../utils/eslint-compat'; +import plugin from '../../../src/index.js'; +import { ESLint } from '../../utils/eslint-compat.js'; +import * as svelteParser from 'svelte-eslint-parser'; // ----------------------------------------------------------------------------- // Tests @@ -8,13 +9,13 @@ import { ESLint } from '../../utils/eslint-compat'; // Initialize linter. const linter = new ESLint({ + // @ts-expect-error -- Type error? baseConfig: { languageOptions: { - parser: require('svelte-eslint-parser'), + parser: svelteParser, ecmaVersion: 2020 }, plugins: { - // @ts-expect-error -- Type error for eslint v9 svelte: plugin }, rules: { @@ -26,7 +27,6 @@ const linter = new ESLint({ processor: 'svelte/svelte', files: ['**'] }, - // @ts-expect-error -- Type error for eslint v9 overrideConfigFile: true }); @@ -352,13 +352,13 @@ describe('comment-directive', () => { describe('reportUnusedDisableDirectives', () => { const linter = new ESLint({ + // @ts-expect-error -- Type error? baseConfig: { languageOptions: { - parser: require('svelte-eslint-parser'), + parser: svelteParser, ecmaVersion: 2020 }, plugins: { - // @ts-expect-error -- Type error for eslint v9 svelte: plugin }, rules: { @@ -370,7 +370,6 @@ describe('comment-directive', () => { files: ['**'], processor: 'svelte/svelte' }, - // @ts-expect-error -- Type error for eslint v9 overrideConfigFile: true }); it('report unused ', async () => { diff --git a/packages/eslint-plugin-svelte/tests/src/rules/derived-has-same-inputs-outputs.ts b/packages/eslint-plugin-svelte/tests/src/rules/derived-has-same-inputs-outputs.ts index 59b67718f..5fac10c7a 100644 --- a/packages/eslint-plugin-svelte/tests/src/rules/derived-has-same-inputs-outputs.ts +++ b/packages/eslint-plugin-svelte/tests/src/rules/derived-has-same-inputs-outputs.ts @@ -1,6 +1,6 @@ -import { RuleTester } from '../../utils/eslint-compat'; -import rule from '../../../src/rules/derived-has-same-inputs-outputs'; -import { loadTestCases } from '../../utils/utils'; +import { RuleTester } from '../../utils/eslint-compat.js'; +import rule from '../../../src/rules/derived-has-same-inputs-outputs.js'; +import { loadTestCases } from '../../utils/utils.js'; const tester = new RuleTester({ languageOptions: { diff --git a/packages/eslint-plugin-svelte/tests/src/rules/experimental-require-slot-types.ts b/packages/eslint-plugin-svelte/tests/src/rules/experimental-require-slot-types.ts index 6c4bdab9d..bd9e9d0b5 100644 --- a/packages/eslint-plugin-svelte/tests/src/rules/experimental-require-slot-types.ts +++ b/packages/eslint-plugin-svelte/tests/src/rules/experimental-require-slot-types.ts @@ -1,6 +1,6 @@ -import { RuleTester } from '../../utils/eslint-compat'; -import rule from '../../../src/rules/experimental-require-slot-types'; -import { loadTestCases } from '../../utils/utils'; +import { RuleTester } from '../../utils/eslint-compat.js'; +import rule from '../../../src/rules/experimental-require-slot-types.js'; +import { loadTestCases } from '../../utils/utils.js'; const tester = new RuleTester({ languageOptions: { diff --git a/packages/eslint-plugin-svelte/tests/src/rules/experimental-require-strict-events.ts b/packages/eslint-plugin-svelte/tests/src/rules/experimental-require-strict-events.ts index 83ac9d1f4..fc79393da 100644 --- a/packages/eslint-plugin-svelte/tests/src/rules/experimental-require-strict-events.ts +++ b/packages/eslint-plugin-svelte/tests/src/rules/experimental-require-strict-events.ts @@ -1,6 +1,6 @@ -import { RuleTester } from '../../utils/eslint-compat'; -import rule from '../../../src/rules/experimental-require-strict-events'; -import { loadTestCases } from '../../utils/utils'; +import { RuleTester } from '../../utils/eslint-compat.js'; +import rule from '../../../src/rules/experimental-require-strict-events.js'; +import { loadTestCases } from '../../utils/utils.js'; const tester = new RuleTester({ languageOptions: { diff --git a/packages/eslint-plugin-svelte/tests/src/rules/first-attribute-linebreak.ts b/packages/eslint-plugin-svelte/tests/src/rules/first-attribute-linebreak.ts index ca40292a1..475ce2617 100644 --- a/packages/eslint-plugin-svelte/tests/src/rules/first-attribute-linebreak.ts +++ b/packages/eslint-plugin-svelte/tests/src/rules/first-attribute-linebreak.ts @@ -1,6 +1,6 @@ -import { RuleTester } from '../../utils/eslint-compat'; -import rule from '../../../src/rules/first-attribute-linebreak'; -import { loadTestCases } from '../../utils/utils'; +import { RuleTester } from '../../utils/eslint-compat.js'; +import rule from '../../../src/rules/first-attribute-linebreak.js'; +import { loadTestCases } from '../../utils/utils.js'; const tester = new RuleTester({ languageOptions: { diff --git a/packages/eslint-plugin-svelte/tests/src/rules/html-closing-bracket-new-line.ts b/packages/eslint-plugin-svelte/tests/src/rules/html-closing-bracket-new-line.ts index dfeba140c..3ed74ff41 100644 --- a/packages/eslint-plugin-svelte/tests/src/rules/html-closing-bracket-new-line.ts +++ b/packages/eslint-plugin-svelte/tests/src/rules/html-closing-bracket-new-line.ts @@ -1,6 +1,6 @@ -import { RuleTester } from '../../utils/eslint-compat'; -import rule from '../../../src/rules/html-closing-bracket-new-line'; -import { loadTestCases } from '../../utils/utils'; +import { RuleTester } from '../../utils/eslint-compat.js'; +import rule from '../../../src/rules/html-closing-bracket-new-line.js'; +import { loadTestCases } from '../../utils/utils.js'; const tester = new RuleTester({ languageOptions: { @@ -9,4 +9,8 @@ const tester = new RuleTester({ } }); -tester.run('html-closing-bracket-new-line', rule as any, loadTestCases('html-closing-bracket-new-line')); +tester.run( + 'html-closing-bracket-new-line', + rule as any, + loadTestCases('html-closing-bracket-new-line') +); diff --git a/packages/eslint-plugin-svelte/tests/src/rules/html-closing-bracket-spacing.ts b/packages/eslint-plugin-svelte/tests/src/rules/html-closing-bracket-spacing.ts index 743815046..d80930d7f 100644 --- a/packages/eslint-plugin-svelte/tests/src/rules/html-closing-bracket-spacing.ts +++ b/packages/eslint-plugin-svelte/tests/src/rules/html-closing-bracket-spacing.ts @@ -1,6 +1,6 @@ -import { RuleTester } from '../../utils/eslint-compat'; -import rule from '../../../src/rules/html-closing-bracket-spacing'; -import { loadTestCases } from '../../utils/utils'; +import { RuleTester } from '../../utils/eslint-compat.js'; +import rule from '../../../src/rules/html-closing-bracket-spacing.js'; +import { loadTestCases } from '../../utils/utils.js'; const tester = new RuleTester({ languageOptions: { diff --git a/packages/eslint-plugin-svelte/tests/src/rules/html-quotes.ts b/packages/eslint-plugin-svelte/tests/src/rules/html-quotes.ts index b85d60d6d..e58c57e49 100644 --- a/packages/eslint-plugin-svelte/tests/src/rules/html-quotes.ts +++ b/packages/eslint-plugin-svelte/tests/src/rules/html-quotes.ts @@ -1,6 +1,6 @@ -import { RuleTester } from '../../utils/eslint-compat'; -import rule from '../../../src/rules/html-quotes'; -import { loadTestCases } from '../../utils/utils'; +import { RuleTester } from '../../utils/eslint-compat.js'; +import rule from '../../../src/rules/html-quotes.js'; +import { loadTestCases } from '../../utils/utils.js'; const tester = new RuleTester({ languageOptions: { diff --git a/packages/eslint-plugin-svelte/tests/src/rules/html-self-closing.ts b/packages/eslint-plugin-svelte/tests/src/rules/html-self-closing.ts index f6990dfca..a71a62af0 100644 --- a/packages/eslint-plugin-svelte/tests/src/rules/html-self-closing.ts +++ b/packages/eslint-plugin-svelte/tests/src/rules/html-self-closing.ts @@ -1,6 +1,6 @@ -import { RuleTester } from '../../utils/eslint-compat'; -import rule from '../../../src/rules/html-self-closing'; -import { loadTestCases } from '../../utils/utils'; +import { RuleTester } from '../../utils/eslint-compat.js'; +import rule from '../../../src/rules/html-self-closing.js'; +import { loadTestCases } from '../../utils/utils.js'; const tester = new RuleTester({ languageOptions: { diff --git a/packages/eslint-plugin-svelte/tests/src/rules/indent.ts b/packages/eslint-plugin-svelte/tests/src/rules/indent.ts index 755121a08..f1df1cea5 100644 --- a/packages/eslint-plugin-svelte/tests/src/rules/indent.ts +++ b/packages/eslint-plugin-svelte/tests/src/rules/indent.ts @@ -1,6 +1,6 @@ -import { RuleTester } from '../../utils/eslint-compat'; -import rule from '../../../src/rules/indent'; -import { loadTestCases } from '../../utils/utils'; +import { RuleTester } from '../../utils/eslint-compat.js'; +import rule from '../../../src/rules/indent.js'; +import { loadTestCases } from '../../utils/utils.js'; const tester = new RuleTester({ languageOptions: { diff --git a/packages/eslint-plugin-svelte/tests/src/rules/infinite-reactive-loop.ts b/packages/eslint-plugin-svelte/tests/src/rules/infinite-reactive-loop.ts index 14872ef54..c19874112 100644 --- a/packages/eslint-plugin-svelte/tests/src/rules/infinite-reactive-loop.ts +++ b/packages/eslint-plugin-svelte/tests/src/rules/infinite-reactive-loop.ts @@ -1,6 +1,6 @@ -import { RuleTester } from '../../utils/eslint-compat'; -import rule from '../../../src/rules/infinite-reactive-loop'; -import { loadTestCases } from '../../utils/utils'; +import { RuleTester } from '../../utils/eslint-compat.js'; +import rule from '../../../src/rules/infinite-reactive-loop.js'; +import { loadTestCases } from '../../utils/utils.js'; const tester = new RuleTester({ languageOptions: { diff --git a/packages/eslint-plugin-svelte/tests/src/rules/max-attributes-per-line.ts b/packages/eslint-plugin-svelte/tests/src/rules/max-attributes-per-line.ts index 683d7fd66..c40a909ed 100644 --- a/packages/eslint-plugin-svelte/tests/src/rules/max-attributes-per-line.ts +++ b/packages/eslint-plugin-svelte/tests/src/rules/max-attributes-per-line.ts @@ -1,6 +1,6 @@ -import { RuleTester } from '../../utils/eslint-compat'; -import rule from '../../../src/rules/max-attributes-per-line'; -import { loadTestCases } from '../../utils/utils'; +import { RuleTester } from '../../utils/eslint-compat.js'; +import rule from '../../../src/rules/max-attributes-per-line.js'; +import { loadTestCases } from '../../utils/utils.js'; const tester = new RuleTester({ languageOptions: { diff --git a/packages/eslint-plugin-svelte/tests/src/rules/mustache-spacing.ts b/packages/eslint-plugin-svelte/tests/src/rules/mustache-spacing.ts index 51d6941ca..24fd9a776 100644 --- a/packages/eslint-plugin-svelte/tests/src/rules/mustache-spacing.ts +++ b/packages/eslint-plugin-svelte/tests/src/rules/mustache-spacing.ts @@ -1,6 +1,6 @@ -import { RuleTester } from '../../utils/eslint-compat'; -import rule from '../../../src/rules/mustache-spacing'; -import { loadTestCases } from '../../utils/utils'; +import { RuleTester } from '../../utils/eslint-compat.js'; +import rule from '../../../src/rules/mustache-spacing.js'; +import { loadTestCases } from '../../utils/utils.js'; const tester = new RuleTester({ languageOptions: { diff --git a/packages/eslint-plugin-svelte/tests/src/rules/no-at-debug-tags.ts b/packages/eslint-plugin-svelte/tests/src/rules/no-at-debug-tags.ts index c7530044a..400bbabd3 100644 --- a/packages/eslint-plugin-svelte/tests/src/rules/no-at-debug-tags.ts +++ b/packages/eslint-plugin-svelte/tests/src/rules/no-at-debug-tags.ts @@ -1,6 +1,6 @@ -import { RuleTester } from '../../utils/eslint-compat'; -import rule from '../../../src/rules/no-at-debug-tags'; -import { loadTestCases } from '../../utils/utils'; +import { RuleTester } from '../../utils/eslint-compat.js'; +import rule from '../../../src/rules/no-at-debug-tags.js'; +import { loadTestCases } from '../../utils/utils.js'; const tester = new RuleTester({ languageOptions: { diff --git a/packages/eslint-plugin-svelte/tests/src/rules/no-at-html-tags.ts b/packages/eslint-plugin-svelte/tests/src/rules/no-at-html-tags.ts index 308df8458..fc30b0053 100644 --- a/packages/eslint-plugin-svelte/tests/src/rules/no-at-html-tags.ts +++ b/packages/eslint-plugin-svelte/tests/src/rules/no-at-html-tags.ts @@ -1,6 +1,6 @@ -import { RuleTester } from '../../utils/eslint-compat'; -import rule from '../../../src/rules/no-at-html-tags'; -import { loadTestCases } from '../../utils/utils'; +import { RuleTester } from '../../utils/eslint-compat.js'; +import rule from '../../../src/rules/no-at-html-tags.js'; +import { loadTestCases } from '../../utils/utils.js'; const tester = new RuleTester({ languageOptions: { diff --git a/packages/eslint-plugin-svelte/tests/src/rules/no-deprecated-raw-special-elements.ts b/packages/eslint-plugin-svelte/tests/src/rules/no-deprecated-raw-special-elements.ts index dbe2fe152..172cc28fd 100644 --- a/packages/eslint-plugin-svelte/tests/src/rules/no-deprecated-raw-special-elements.ts +++ b/packages/eslint-plugin-svelte/tests/src/rules/no-deprecated-raw-special-elements.ts @@ -1,6 +1,6 @@ -import { RuleTester } from '../../utils/eslint-compat'; -import rule from '../../../src/rules/no-deprecated-raw-special-elements'; -import { loadTestCases } from '../../utils/utils'; +import { RuleTester } from '../../utils/eslint-compat.js'; +import rule from '../../../src/rules/no-deprecated-raw-special-elements.js'; +import { loadTestCases } from '../../utils/utils.js'; const tester = new RuleTester({ languageOptions: { @@ -9,4 +9,8 @@ const tester = new RuleTester({ } }); -tester.run('no-deprecated-raw-special-elements', rule as any, loadTestCases('no-deprecated-raw-special-elements')); +tester.run( + 'no-deprecated-raw-special-elements', + rule as any, + loadTestCases('no-deprecated-raw-special-elements') +); diff --git a/packages/eslint-plugin-svelte/tests/src/rules/no-dom-manipulating.ts b/packages/eslint-plugin-svelte/tests/src/rules/no-dom-manipulating.ts index 9b307ad75..af3fac4c2 100644 --- a/packages/eslint-plugin-svelte/tests/src/rules/no-dom-manipulating.ts +++ b/packages/eslint-plugin-svelte/tests/src/rules/no-dom-manipulating.ts @@ -1,6 +1,6 @@ -import { RuleTester } from '../../utils/eslint-compat'; -import rule from '../../../src/rules/no-dom-manipulating'; -import { loadTestCases } from '../../utils/utils'; +import { RuleTester } from '../../utils/eslint-compat.js'; +import rule from '../../../src/rules/no-dom-manipulating.js'; +import { loadTestCases } from '../../utils/utils.js'; const tester = new RuleTester({ languageOptions: { diff --git a/packages/eslint-plugin-svelte/tests/src/rules/no-dupe-else-if-blocks.ts b/packages/eslint-plugin-svelte/tests/src/rules/no-dupe-else-if-blocks.ts index df69710d0..eae136571 100644 --- a/packages/eslint-plugin-svelte/tests/src/rules/no-dupe-else-if-blocks.ts +++ b/packages/eslint-plugin-svelte/tests/src/rules/no-dupe-else-if-blocks.ts @@ -1,6 +1,6 @@ -import { RuleTester } from '../../utils/eslint-compat'; -import rule from '../../../src/rules/no-dupe-else-if-blocks'; -import { loadTestCases } from '../../utils/utils'; +import { RuleTester } from '../../utils/eslint-compat.js'; +import rule from '../../../src/rules/no-dupe-else-if-blocks.js'; +import { loadTestCases } from '../../utils/utils.js'; const tester = new RuleTester({ languageOptions: { diff --git a/packages/eslint-plugin-svelte/tests/src/rules/no-dupe-on-directives.ts b/packages/eslint-plugin-svelte/tests/src/rules/no-dupe-on-directives.ts index cd6ccf632..6b7676e3c 100644 --- a/packages/eslint-plugin-svelte/tests/src/rules/no-dupe-on-directives.ts +++ b/packages/eslint-plugin-svelte/tests/src/rules/no-dupe-on-directives.ts @@ -1,6 +1,6 @@ -import { RuleTester } from '../../utils/eslint-compat'; -import rule from '../../../src/rules/no-dupe-on-directives'; -import { loadTestCases } from '../../utils/utils'; +import { RuleTester } from '../../utils/eslint-compat.js'; +import rule from '../../../src/rules/no-dupe-on-directives.js'; +import { loadTestCases } from '../../utils/utils.js'; const tester = new RuleTester({ languageOptions: { diff --git a/packages/eslint-plugin-svelte/tests/src/rules/no-dupe-style-properties.ts b/packages/eslint-plugin-svelte/tests/src/rules/no-dupe-style-properties.ts index 7a7b1ae1c..c0dbaf901 100644 --- a/packages/eslint-plugin-svelte/tests/src/rules/no-dupe-style-properties.ts +++ b/packages/eslint-plugin-svelte/tests/src/rules/no-dupe-style-properties.ts @@ -1,6 +1,6 @@ -import { RuleTester } from '../../utils/eslint-compat'; -import rule from '../../../src/rules/no-dupe-style-properties'; -import { loadTestCases } from '../../utils/utils'; +import { RuleTester } from '../../utils/eslint-compat.js'; +import rule from '../../../src/rules/no-dupe-style-properties.js'; +import { loadTestCases } from '../../utils/utils.js'; const tester = new RuleTester({ languageOptions: { diff --git a/packages/eslint-plugin-svelte/tests/src/rules/no-dupe-use-directives.ts b/packages/eslint-plugin-svelte/tests/src/rules/no-dupe-use-directives.ts index 047371778..41de350eb 100644 --- a/packages/eslint-plugin-svelte/tests/src/rules/no-dupe-use-directives.ts +++ b/packages/eslint-plugin-svelte/tests/src/rules/no-dupe-use-directives.ts @@ -1,6 +1,6 @@ -import { RuleTester } from '../../utils/eslint-compat'; -import rule from '../../../src/rules/no-dupe-use-directives'; -import { loadTestCases } from '../../utils/utils'; +import { RuleTester } from '../../utils/eslint-compat.js'; +import rule from '../../../src/rules/no-dupe-use-directives.js'; +import { loadTestCases } from '../../utils/utils.js'; const tester = new RuleTester({ languageOptions: { diff --git a/packages/eslint-plugin-svelte/tests/src/rules/no-dynamic-slot-name.ts b/packages/eslint-plugin-svelte/tests/src/rules/no-dynamic-slot-name.ts index 0612e657f..dfe6d0842 100644 --- a/packages/eslint-plugin-svelte/tests/src/rules/no-dynamic-slot-name.ts +++ b/packages/eslint-plugin-svelte/tests/src/rules/no-dynamic-slot-name.ts @@ -1,6 +1,6 @@ -import { RuleTester } from '../../utils/eslint-compat'; -import rule from '../../../src/rules/no-dynamic-slot-name'; -import { loadTestCases } from '../../utils/utils'; +import { RuleTester } from '../../utils/eslint-compat.js'; +import rule from '../../../src/rules/no-dynamic-slot-name.js'; +import { loadTestCases } from '../../utils/utils.js'; const tester = new RuleTester({ languageOptions: { diff --git a/packages/eslint-plugin-svelte/tests/src/rules/no-export-load-in-svelte-module-in-kit-pages.ts b/packages/eslint-plugin-svelte/tests/src/rules/no-export-load-in-svelte-module-in-kit-pages.ts index a5ff796d5..074149043 100644 --- a/packages/eslint-plugin-svelte/tests/src/rules/no-export-load-in-svelte-module-in-kit-pages.ts +++ b/packages/eslint-plugin-svelte/tests/src/rules/no-export-load-in-svelte-module-in-kit-pages.ts @@ -1,6 +1,6 @@ -import { RuleTester } from '../../utils/eslint-compat'; -import rule from '../../../src/rules/no-export-load-in-svelte-module-in-kit-pages'; -import { loadTestCases } from '../../utils/utils'; +import { RuleTester } from '../../utils/eslint-compat.js'; +import rule from '../../../src/rules/no-export-load-in-svelte-module-in-kit-pages.js'; +import { loadTestCases } from '../../utils/utils.js'; const tester = new RuleTester({ languageOptions: { diff --git a/packages/eslint-plugin-svelte/tests/src/rules/no-extra-reactive-curlies.ts b/packages/eslint-plugin-svelte/tests/src/rules/no-extra-reactive-curlies.ts index ea5278c7c..0763445b3 100644 --- a/packages/eslint-plugin-svelte/tests/src/rules/no-extra-reactive-curlies.ts +++ b/packages/eslint-plugin-svelte/tests/src/rules/no-extra-reactive-curlies.ts @@ -1,6 +1,6 @@ -import { RuleTester } from '../../utils/eslint-compat'; -import rule from '../../../src/rules/no-extra-reactive-curlies'; -import { loadTestCases } from '../../utils/utils'; +import { RuleTester } from '../../utils/eslint-compat.js'; +import rule from '../../../src/rules/no-extra-reactive-curlies.js'; +import { loadTestCases } from '../../utils/utils.js'; const tester = new RuleTester({ languageOptions: { diff --git a/packages/eslint-plugin-svelte/tests/src/rules/no-goto-without-base.ts b/packages/eslint-plugin-svelte/tests/src/rules/no-goto-without-base.ts index 1fadf4174..953427e61 100644 --- a/packages/eslint-plugin-svelte/tests/src/rules/no-goto-without-base.ts +++ b/packages/eslint-plugin-svelte/tests/src/rules/no-goto-without-base.ts @@ -1,6 +1,6 @@ -import { RuleTester } from '../../utils/eslint-compat'; -import rule from '../../../src/rules/no-goto-without-base'; -import { loadTestCases } from '../../utils/utils'; +import { RuleTester } from '../../utils/eslint-compat.js'; +import rule from '../../../src/rules/no-goto-without-base.js'; +import { loadTestCases } from '../../utils/utils.js'; const tester = new RuleTester({ languageOptions: { diff --git a/packages/eslint-plugin-svelte/tests/src/rules/no-ignored-unsubscribe.ts b/packages/eslint-plugin-svelte/tests/src/rules/no-ignored-unsubscribe.ts index 8334d44f6..2428fd58d 100644 --- a/packages/eslint-plugin-svelte/tests/src/rules/no-ignored-unsubscribe.ts +++ b/packages/eslint-plugin-svelte/tests/src/rules/no-ignored-unsubscribe.ts @@ -1,6 +1,6 @@ -import { RuleTester } from '../../utils/eslint-compat'; -import rule from '../../../src/rules/no-ignored-unsubscribe'; -import { loadTestCases } from '../../utils/utils'; +import { RuleTester } from '../../utils/eslint-compat.js'; +import rule from '../../../src/rules/no-ignored-unsubscribe.js'; +import { loadTestCases } from '../../utils/utils.js'; const tester = new RuleTester({ languageOptions: { diff --git a/packages/eslint-plugin-svelte/tests/src/rules/no-immutable-reactive-statements.ts b/packages/eslint-plugin-svelte/tests/src/rules/no-immutable-reactive-statements.ts index e6fbe3fed..97c3abd2d 100644 --- a/packages/eslint-plugin-svelte/tests/src/rules/no-immutable-reactive-statements.ts +++ b/packages/eslint-plugin-svelte/tests/src/rules/no-immutable-reactive-statements.ts @@ -1,6 +1,6 @@ -import { RuleTester } from '../../utils/eslint-compat'; -import rule from '../../../src/rules/no-immutable-reactive-statements'; -import { loadTestCases } from '../../utils/utils'; +import { RuleTester } from '../../utils/eslint-compat.js'; +import rule from '../../../src/rules/no-immutable-reactive-statements.js'; +import { loadTestCases } from '../../utils/utils.js'; const tester = new RuleTester({ languageOptions: { diff --git a/packages/eslint-plugin-svelte/tests/src/rules/no-inline-styles.ts b/packages/eslint-plugin-svelte/tests/src/rules/no-inline-styles.ts index 19f8356c3..c9e1381b0 100644 --- a/packages/eslint-plugin-svelte/tests/src/rules/no-inline-styles.ts +++ b/packages/eslint-plugin-svelte/tests/src/rules/no-inline-styles.ts @@ -1,6 +1,6 @@ -import { RuleTester } from '../../utils/eslint-compat'; -import rule from '../../../src/rules/no-inline-styles'; -import { loadTestCases } from '../../utils/utils'; +import { RuleTester } from '../../utils/eslint-compat.js'; +import rule from '../../../src/rules/no-inline-styles.js'; +import { loadTestCases } from '../../utils/utils.js'; const tester = new RuleTester({ languageOptions: { diff --git a/packages/eslint-plugin-svelte/tests/src/rules/no-inner-declarations.ts b/packages/eslint-plugin-svelte/tests/src/rules/no-inner-declarations.ts index 19d2f80be..8eea888c8 100644 --- a/packages/eslint-plugin-svelte/tests/src/rules/no-inner-declarations.ts +++ b/packages/eslint-plugin-svelte/tests/src/rules/no-inner-declarations.ts @@ -1,6 +1,6 @@ -import { RuleTester } from '../../utils/eslint-compat'; -import rule from '../../../src/rules/no-inner-declarations'; -import { loadTestCases } from '../../utils/utils'; +import { RuleTester } from '../../utils/eslint-compat.js'; +import rule from '../../../src/rules/no-inner-declarations.js'; +import { loadTestCases } from '../../utils/utils.js'; const tester = new RuleTester({ languageOptions: { diff --git a/packages/eslint-plugin-svelte/tests/src/rules/no-inspect.ts b/packages/eslint-plugin-svelte/tests/src/rules/no-inspect.ts index cfaa54919..a906e48bc 100644 --- a/packages/eslint-plugin-svelte/tests/src/rules/no-inspect.ts +++ b/packages/eslint-plugin-svelte/tests/src/rules/no-inspect.ts @@ -1,6 +1,6 @@ -import { RuleTester } from '../../utils/eslint-compat'; -import rule from '../../../src/rules/no-inspect'; -import { loadTestCases } from '../../utils/utils'; +import { RuleTester } from '../../utils/eslint-compat.js'; +import rule from '../../../src/rules/no-inspect.js'; +import { loadTestCases } from '../../utils/utils.js'; const tester = new RuleTester({ languageOptions: { diff --git a/packages/eslint-plugin-svelte/tests/src/rules/no-not-function-handler.ts b/packages/eslint-plugin-svelte/tests/src/rules/no-not-function-handler.ts index e6d44c17a..79bce0da8 100644 --- a/packages/eslint-plugin-svelte/tests/src/rules/no-not-function-handler.ts +++ b/packages/eslint-plugin-svelte/tests/src/rules/no-not-function-handler.ts @@ -1,6 +1,6 @@ -import { RuleTester } from '../../utils/eslint-compat'; -import rule from '../../../src/rules/no-not-function-handler'; -import { loadTestCases } from '../../utils/utils'; +import { RuleTester } from '../../utils/eslint-compat.js'; +import rule from '../../../src/rules/no-not-function-handler.js'; +import { loadTestCases } from '../../utils/utils.js'; const tester = new RuleTester({ languageOptions: { diff --git a/packages/eslint-plugin-svelte/tests/src/rules/no-object-in-text-mustaches.ts b/packages/eslint-plugin-svelte/tests/src/rules/no-object-in-text-mustaches.ts index afb2f7bfd..2d91de785 100644 --- a/packages/eslint-plugin-svelte/tests/src/rules/no-object-in-text-mustaches.ts +++ b/packages/eslint-plugin-svelte/tests/src/rules/no-object-in-text-mustaches.ts @@ -1,6 +1,6 @@ -import { RuleTester } from '../../utils/eslint-compat'; -import rule from '../../../src/rules/no-object-in-text-mustaches'; -import { loadTestCases } from '../../utils/utils'; +import { RuleTester } from '../../utils/eslint-compat.js'; +import rule from '../../../src/rules/no-object-in-text-mustaches.js'; +import { loadTestCases } from '../../utils/utils.js'; const tester = new RuleTester({ languageOptions: { diff --git a/packages/eslint-plugin-svelte/tests/src/rules/no-reactive-functions.ts b/packages/eslint-plugin-svelte/tests/src/rules/no-reactive-functions.ts index 8b2e0b494..3db0c26ee 100644 --- a/packages/eslint-plugin-svelte/tests/src/rules/no-reactive-functions.ts +++ b/packages/eslint-plugin-svelte/tests/src/rules/no-reactive-functions.ts @@ -1,6 +1,6 @@ -import { RuleTester } from '../../utils/eslint-compat'; -import rule from '../../../src/rules/no-reactive-functions'; -import { loadTestCases } from '../../utils/utils'; +import { RuleTester } from '../../utils/eslint-compat.js'; +import rule from '../../../src/rules/no-reactive-functions.js'; +import { loadTestCases } from '../../utils/utils.js'; const tester = new RuleTester({ languageOptions: { diff --git a/packages/eslint-plugin-svelte/tests/src/rules/no-reactive-literals.ts b/packages/eslint-plugin-svelte/tests/src/rules/no-reactive-literals.ts index 509ccf425..96e60f44e 100644 --- a/packages/eslint-plugin-svelte/tests/src/rules/no-reactive-literals.ts +++ b/packages/eslint-plugin-svelte/tests/src/rules/no-reactive-literals.ts @@ -1,6 +1,6 @@ -import { RuleTester } from '../../utils/eslint-compat'; -import rule from '../../../src/rules/no-reactive-literals'; -import { loadTestCases } from '../../utils/utils'; +import { RuleTester } from '../../utils/eslint-compat.js'; +import rule from '../../../src/rules/no-reactive-literals.js'; +import { loadTestCases } from '../../utils/utils.js'; const tester = new RuleTester({ languageOptions: { diff --git a/packages/eslint-plugin-svelte/tests/src/rules/no-reactive-reassign.ts b/packages/eslint-plugin-svelte/tests/src/rules/no-reactive-reassign.ts index c03f73e09..2b010ae0d 100644 --- a/packages/eslint-plugin-svelte/tests/src/rules/no-reactive-reassign.ts +++ b/packages/eslint-plugin-svelte/tests/src/rules/no-reactive-reassign.ts @@ -1,6 +1,6 @@ -import { RuleTester } from '../../utils/eslint-compat'; -import rule from '../../../src/rules/no-reactive-reassign'; -import { loadTestCases } from '../../utils/utils'; +import { RuleTester } from '../../utils/eslint-compat.js'; +import rule from '../../../src/rules/no-reactive-reassign.js'; +import { loadTestCases } from '../../utils/utils.js'; const tester = new RuleTester({ languageOptions: { diff --git a/packages/eslint-plugin-svelte/tests/src/rules/no-restricted-html-elements.ts b/packages/eslint-plugin-svelte/tests/src/rules/no-restricted-html-elements.ts index f6853fc72..fc180efe3 100644 --- a/packages/eslint-plugin-svelte/tests/src/rules/no-restricted-html-elements.ts +++ b/packages/eslint-plugin-svelte/tests/src/rules/no-restricted-html-elements.ts @@ -1,6 +1,6 @@ -import { RuleTester } from '../../utils/eslint-compat'; -import rule from '../../../src/rules/no-restricted-html-elements'; -import { loadTestCases } from '../../utils/utils'; +import { RuleTester } from '../../utils/eslint-compat.js'; +import rule from '../../../src/rules/no-restricted-html-elements.js'; +import { loadTestCases } from '../../utils/utils.js'; const tester = new RuleTester({ languageOptions: { diff --git a/packages/eslint-plugin-svelte/tests/src/rules/no-shorthand-style-property-overrides.ts b/packages/eslint-plugin-svelte/tests/src/rules/no-shorthand-style-property-overrides.ts index c6c81ef4d..9f1d5f3db 100644 --- a/packages/eslint-plugin-svelte/tests/src/rules/no-shorthand-style-property-overrides.ts +++ b/packages/eslint-plugin-svelte/tests/src/rules/no-shorthand-style-property-overrides.ts @@ -1,6 +1,6 @@ -import { RuleTester } from '../../utils/eslint-compat'; -import rule from '../../../src/rules/no-shorthand-style-property-overrides'; -import { loadTestCases } from '../../utils/utils'; +import { RuleTester } from '../../utils/eslint-compat.js'; +import rule from '../../../src/rules/no-shorthand-style-property-overrides.js'; +import { loadTestCases } from '../../utils/utils.js'; const tester = new RuleTester({ languageOptions: { diff --git a/packages/eslint-plugin-svelte/tests/src/rules/no-spaces-around-equal-signs-in-attribute.ts b/packages/eslint-plugin-svelte/tests/src/rules/no-spaces-around-equal-signs-in-attribute.ts index 02a77c373..28ac5baa2 100644 --- a/packages/eslint-plugin-svelte/tests/src/rules/no-spaces-around-equal-signs-in-attribute.ts +++ b/packages/eslint-plugin-svelte/tests/src/rules/no-spaces-around-equal-signs-in-attribute.ts @@ -1,6 +1,6 @@ -import { RuleTester } from '../../utils/eslint-compat'; -import rule from '../../../src/rules/no-spaces-around-equal-signs-in-attribute'; -import { loadTestCases } from '../../utils/utils'; +import { RuleTester } from '../../utils/eslint-compat.js'; +import rule from '../../../src/rules/no-spaces-around-equal-signs-in-attribute.js'; +import { loadTestCases } from '../../utils/utils.js'; const tester = new RuleTester({ languageOptions: { diff --git a/packages/eslint-plugin-svelte/tests/src/rules/no-store-async.ts b/packages/eslint-plugin-svelte/tests/src/rules/no-store-async.ts index 9798939ed..7f0893892 100644 --- a/packages/eslint-plugin-svelte/tests/src/rules/no-store-async.ts +++ b/packages/eslint-plugin-svelte/tests/src/rules/no-store-async.ts @@ -1,6 +1,6 @@ -import { RuleTester } from '../../utils/eslint-compat'; -import rule from '../../../src/rules/no-store-async'; -import { loadTestCases } from '../../utils/utils'; +import { RuleTester } from '../../utils/eslint-compat.js'; +import rule from '../../../src/rules/no-store-async.js'; +import { loadTestCases } from '../../utils/utils.js'; const tester = new RuleTester({ languageOptions: { diff --git a/packages/eslint-plugin-svelte/tests/src/rules/no-svelte-internal.ts b/packages/eslint-plugin-svelte/tests/src/rules/no-svelte-internal.ts index 3f4e67863..aa4126324 100644 --- a/packages/eslint-plugin-svelte/tests/src/rules/no-svelte-internal.ts +++ b/packages/eslint-plugin-svelte/tests/src/rules/no-svelte-internal.ts @@ -1,6 +1,6 @@ -import { RuleTester } from '../../utils/eslint-compat'; -import rule from '../../../src/rules/no-svelte-internal'; -import { loadTestCases } from '../../utils/utils'; +import { RuleTester } from '../../utils/eslint-compat.js'; +import rule from '../../../src/rules/no-svelte-internal.js'; +import { loadTestCases } from '../../utils/utils.js'; const tester = new RuleTester({ languageOptions: { diff --git a/packages/eslint-plugin-svelte/tests/src/rules/no-target-blank.ts b/packages/eslint-plugin-svelte/tests/src/rules/no-target-blank.ts index fad79e8d9..f9eef9080 100644 --- a/packages/eslint-plugin-svelte/tests/src/rules/no-target-blank.ts +++ b/packages/eslint-plugin-svelte/tests/src/rules/no-target-blank.ts @@ -1,6 +1,6 @@ -import { RuleTester } from '../../utils/eslint-compat'; -import rule from '../../../src/rules/no-target-blank'; -import { loadTestCases } from '../../utils/utils'; +import { RuleTester } from '../../utils/eslint-compat.js'; +import rule from '../../../src/rules/no-target-blank.js'; +import { loadTestCases } from '../../utils/utils.js'; const tester = new RuleTester({ languageOptions: { diff --git a/packages/eslint-plugin-svelte/tests/src/rules/no-trailing-spaces.ts b/packages/eslint-plugin-svelte/tests/src/rules/no-trailing-spaces.ts index f4ff8e22b..77edf03fc 100644 --- a/packages/eslint-plugin-svelte/tests/src/rules/no-trailing-spaces.ts +++ b/packages/eslint-plugin-svelte/tests/src/rules/no-trailing-spaces.ts @@ -1,6 +1,6 @@ -import { RuleTester } from '../../utils/eslint-compat'; -import rule from '../../../src/rules/no-trailing-spaces'; -import { loadTestCases } from '../../utils/utils'; +import { RuleTester } from '../../utils/eslint-compat.js'; +import rule from '../../../src/rules/no-trailing-spaces.js'; +import { loadTestCases } from '../../utils/utils.js'; const tester = new RuleTester({ languageOptions: { diff --git a/packages/eslint-plugin-svelte/tests/src/rules/no-unknown-style-directive-property.ts b/packages/eslint-plugin-svelte/tests/src/rules/no-unknown-style-directive-property.ts index 933ca725e..d4fa7c8c8 100644 --- a/packages/eslint-plugin-svelte/tests/src/rules/no-unknown-style-directive-property.ts +++ b/packages/eslint-plugin-svelte/tests/src/rules/no-unknown-style-directive-property.ts @@ -1,6 +1,6 @@ -import { RuleTester } from '../../utils/eslint-compat'; -import rule from '../../../src/rules/no-unknown-style-directive-property'; -import { loadTestCases } from '../../utils/utils'; +import { RuleTester } from '../../utils/eslint-compat.js'; +import rule from '../../../src/rules/no-unknown-style-directive-property.js'; +import { loadTestCases } from '../../utils/utils.js'; const tester = new RuleTester({ languageOptions: { diff --git a/packages/eslint-plugin-svelte/tests/src/rules/no-unused-class-name.ts b/packages/eslint-plugin-svelte/tests/src/rules/no-unused-class-name.ts index 74d300c49..fcf766c33 100644 --- a/packages/eslint-plugin-svelte/tests/src/rules/no-unused-class-name.ts +++ b/packages/eslint-plugin-svelte/tests/src/rules/no-unused-class-name.ts @@ -1,6 +1,6 @@ -import { RuleTester } from '../../utils/eslint-compat'; -import rule from '../../../src/rules/no-unused-class-name'; -import { loadTestCases } from '../../utils/utils'; +import { RuleTester } from '../../utils/eslint-compat.js'; +import rule from '../../../src/rules/no-unused-class-name.js'; +import { loadTestCases } from '../../utils/utils.js'; const tester = new RuleTester({ languageOptions: { diff --git a/packages/eslint-plugin-svelte/tests/src/rules/no-unused-svelte-ignore.ts b/packages/eslint-plugin-svelte/tests/src/rules/no-unused-svelte-ignore.ts index 3dd84174d..f5d8cf3b9 100644 --- a/packages/eslint-plugin-svelte/tests/src/rules/no-unused-svelte-ignore.ts +++ b/packages/eslint-plugin-svelte/tests/src/rules/no-unused-svelte-ignore.ts @@ -1,6 +1,6 @@ -import { RuleTester } from '../../utils/eslint-compat'; -import rule from '../../../src/rules/no-unused-svelte-ignore'; -import { loadTestCases } from '../../utils/utils'; +import { RuleTester } from '../../utils/eslint-compat.js'; +import rule from '../../../src/rules/no-unused-svelte-ignore.js'; +import { loadTestCases } from '../../utils/utils.js'; const tester = new RuleTester({ languageOptions: { diff --git a/packages/eslint-plugin-svelte/tests/src/rules/no-useless-mustaches.ts b/packages/eslint-plugin-svelte/tests/src/rules/no-useless-mustaches.ts index 43d694d3d..8d4bea2db 100644 --- a/packages/eslint-plugin-svelte/tests/src/rules/no-useless-mustaches.ts +++ b/packages/eslint-plugin-svelte/tests/src/rules/no-useless-mustaches.ts @@ -1,6 +1,6 @@ -import { RuleTester } from '../../utils/eslint-compat'; -import rule from '../../../src/rules/no-useless-mustaches'; -import { loadTestCases } from '../../utils/utils'; +import { RuleTester } from '../../utils/eslint-compat.js'; +import rule from '../../../src/rules/no-useless-mustaches.js'; +import { loadTestCases } from '../../utils/utils.js'; const tester = new RuleTester({ languageOptions: { diff --git a/packages/eslint-plugin-svelte/tests/src/rules/prefer-class-directive.ts b/packages/eslint-plugin-svelte/tests/src/rules/prefer-class-directive.ts index 04396297e..330bb7384 100644 --- a/packages/eslint-plugin-svelte/tests/src/rules/prefer-class-directive.ts +++ b/packages/eslint-plugin-svelte/tests/src/rules/prefer-class-directive.ts @@ -1,6 +1,6 @@ -import { RuleTester } from '../../utils/eslint-compat'; -import rule from '../../../src/rules/prefer-class-directive'; -import { loadTestCases } from '../../utils/utils'; +import { RuleTester } from '../../utils/eslint-compat.js'; +import rule from '../../../src/rules/prefer-class-directive.js'; +import { loadTestCases } from '../../utils/utils.js'; const tester = new RuleTester({ languageOptions: { diff --git a/packages/eslint-plugin-svelte/tests/src/rules/prefer-destructured-store-props.ts b/packages/eslint-plugin-svelte/tests/src/rules/prefer-destructured-store-props.ts index 9c48dd52f..a466c0d5d 100644 --- a/packages/eslint-plugin-svelte/tests/src/rules/prefer-destructured-store-props.ts +++ b/packages/eslint-plugin-svelte/tests/src/rules/prefer-destructured-store-props.ts @@ -1,6 +1,6 @@ -import { RuleTester } from '../../utils/eslint-compat'; -import rule from '../../../src/rules/prefer-destructured-store-props'; -import { loadTestCases } from '../../utils/utils'; +import { RuleTester } from '../../utils/eslint-compat.js'; +import rule from '../../../src/rules/prefer-destructured-store-props.js'; +import { loadTestCases } from '../../utils/utils.js'; const tester = new RuleTester({ languageOptions: { diff --git a/packages/eslint-plugin-svelte/tests/src/rules/prefer-style-directive.ts b/packages/eslint-plugin-svelte/tests/src/rules/prefer-style-directive.ts index c6a8fea60..298759b05 100644 --- a/packages/eslint-plugin-svelte/tests/src/rules/prefer-style-directive.ts +++ b/packages/eslint-plugin-svelte/tests/src/rules/prefer-style-directive.ts @@ -1,6 +1,6 @@ -import { RuleTester } from '../../utils/eslint-compat'; -import rule from '../../../src/rules/prefer-style-directive'; -import { loadTestCases } from '../../utils/utils'; +import { RuleTester } from '../../utils/eslint-compat.js'; +import rule from '../../../src/rules/prefer-style-directive.js'; +import { loadTestCases } from '../../utils/utils.js'; const tester = new RuleTester({ languageOptions: { diff --git a/packages/eslint-plugin-svelte/tests/src/rules/require-each-key.ts b/packages/eslint-plugin-svelte/tests/src/rules/require-each-key.ts index 05c10009d..0339379ed 100644 --- a/packages/eslint-plugin-svelte/tests/src/rules/require-each-key.ts +++ b/packages/eslint-plugin-svelte/tests/src/rules/require-each-key.ts @@ -1,6 +1,6 @@ -import { RuleTester } from '../../utils/eslint-compat'; -import rule from '../../../src/rules/require-each-key'; -import { loadTestCases } from '../../utils/utils'; +import { RuleTester } from '../../utils/eslint-compat.js'; +import rule from '../../../src/rules/require-each-key.js'; +import { loadTestCases } from '../../utils/utils.js'; const tester = new RuleTester({ languageOptions: { diff --git a/packages/eslint-plugin-svelte/tests/src/rules/require-event-dispatcher-types.ts b/packages/eslint-plugin-svelte/tests/src/rules/require-event-dispatcher-types.ts index 7e11ea5c5..8cb676d3e 100644 --- a/packages/eslint-plugin-svelte/tests/src/rules/require-event-dispatcher-types.ts +++ b/packages/eslint-plugin-svelte/tests/src/rules/require-event-dispatcher-types.ts @@ -1,6 +1,6 @@ -import { RuleTester } from '../../utils/eslint-compat'; -import rule from '../../../src/rules/require-event-dispatcher-types'; -import { loadTestCases } from '../../utils/utils'; +import { RuleTester } from '../../utils/eslint-compat.js'; +import rule from '../../../src/rules/require-event-dispatcher-types.js'; +import { loadTestCases } from '../../utils/utils.js'; const tester = new RuleTester({ languageOptions: { diff --git a/packages/eslint-plugin-svelte/tests/src/rules/require-optimized-style-attribute.ts b/packages/eslint-plugin-svelte/tests/src/rules/require-optimized-style-attribute.ts index 6edd26be4..fdf3fb307 100644 --- a/packages/eslint-plugin-svelte/tests/src/rules/require-optimized-style-attribute.ts +++ b/packages/eslint-plugin-svelte/tests/src/rules/require-optimized-style-attribute.ts @@ -1,6 +1,6 @@ -import { RuleTester } from '../../utils/eslint-compat'; -import rule from '../../../src/rules/require-optimized-style-attribute'; -import { loadTestCases } from '../../utils/utils'; +import { RuleTester } from '../../utils/eslint-compat.js'; +import rule from '../../../src/rules/require-optimized-style-attribute.js'; +import { loadTestCases } from '../../utils/utils.js'; const tester = new RuleTester({ languageOptions: { diff --git a/packages/eslint-plugin-svelte/tests/src/rules/require-store-callbacks-use-set-param.ts b/packages/eslint-plugin-svelte/tests/src/rules/require-store-callbacks-use-set-param.ts index f79c1eeee..91c1ed5fe 100644 --- a/packages/eslint-plugin-svelte/tests/src/rules/require-store-callbacks-use-set-param.ts +++ b/packages/eslint-plugin-svelte/tests/src/rules/require-store-callbacks-use-set-param.ts @@ -1,6 +1,6 @@ -import { RuleTester } from '../../utils/eslint-compat'; -import rule from '../../../src/rules/require-store-callbacks-use-set-param'; -import { loadTestCases } from '../../utils/utils'; +import { RuleTester } from '../../utils/eslint-compat.js'; +import rule from '../../../src/rules/require-store-callbacks-use-set-param.js'; +import { loadTestCases } from '../../utils/utils.js'; const tester = new RuleTester({ languageOptions: { diff --git a/packages/eslint-plugin-svelte/tests/src/rules/require-store-reactive-access.ts b/packages/eslint-plugin-svelte/tests/src/rules/require-store-reactive-access.ts index be250ac63..b9fc9cd7c 100644 --- a/packages/eslint-plugin-svelte/tests/src/rules/require-store-reactive-access.ts +++ b/packages/eslint-plugin-svelte/tests/src/rules/require-store-reactive-access.ts @@ -1,6 +1,6 @@ -import { RuleTester } from '../../utils/eslint-compat'; -import rule from '../../../src/rules/require-store-reactive-access'; -import { loadTestCases } from '../../utils/utils'; +import { RuleTester } from '../../utils/eslint-compat.js'; +import rule from '../../../src/rules/require-store-reactive-access.js'; +import { loadTestCases } from '../../utils/utils.js'; const tester = new RuleTester({ languageOptions: { diff --git a/packages/eslint-plugin-svelte/tests/src/rules/require-stores-init.ts b/packages/eslint-plugin-svelte/tests/src/rules/require-stores-init.ts index ee31ee1dc..532a637b7 100644 --- a/packages/eslint-plugin-svelte/tests/src/rules/require-stores-init.ts +++ b/packages/eslint-plugin-svelte/tests/src/rules/require-stores-init.ts @@ -1,6 +1,6 @@ -import { RuleTester } from '../../utils/eslint-compat'; -import rule from '../../../src/rules/require-stores-init'; -import { loadTestCases } from '../../utils/utils'; +import { RuleTester } from '../../utils/eslint-compat.js'; +import rule from '../../../src/rules/require-stores-init.js'; +import { loadTestCases } from '../../utils/utils.js'; const tester = new RuleTester({ languageOptions: { diff --git a/packages/eslint-plugin-svelte/tests/src/rules/shorthand-attribute.ts b/packages/eslint-plugin-svelte/tests/src/rules/shorthand-attribute.ts index 62507651b..2eddd05ef 100644 --- a/packages/eslint-plugin-svelte/tests/src/rules/shorthand-attribute.ts +++ b/packages/eslint-plugin-svelte/tests/src/rules/shorthand-attribute.ts @@ -1,6 +1,6 @@ -import { RuleTester } from '../../utils/eslint-compat'; -import rule from '../../../src/rules/shorthand-attribute'; -import { loadTestCases } from '../../utils/utils'; +import { RuleTester } from '../../utils/eslint-compat.js'; +import rule from '../../../src/rules/shorthand-attribute.js'; +import { loadTestCases } from '../../utils/utils.js'; const tester = new RuleTester({ languageOptions: { diff --git a/packages/eslint-plugin-svelte/tests/src/rules/shorthand-directive.ts b/packages/eslint-plugin-svelte/tests/src/rules/shorthand-directive.ts index 580c99731..5816f6d8a 100644 --- a/packages/eslint-plugin-svelte/tests/src/rules/shorthand-directive.ts +++ b/packages/eslint-plugin-svelte/tests/src/rules/shorthand-directive.ts @@ -1,6 +1,6 @@ -import { RuleTester } from '../../utils/eslint-compat'; -import rule from '../../../src/rules/shorthand-directive'; -import { loadTestCases } from '../../utils/utils'; +import { RuleTester } from '../../utils/eslint-compat.js'; +import rule from '../../../src/rules/shorthand-directive.js'; +import { loadTestCases } from '../../utils/utils.js'; const tester = new RuleTester({ languageOptions: { diff --git a/packages/eslint-plugin-svelte/tests/src/rules/sort-attributes.ts b/packages/eslint-plugin-svelte/tests/src/rules/sort-attributes.ts index 5b07319e5..f780ee80c 100644 --- a/packages/eslint-plugin-svelte/tests/src/rules/sort-attributes.ts +++ b/packages/eslint-plugin-svelte/tests/src/rules/sort-attributes.ts @@ -1,6 +1,6 @@ -import { RuleTester } from '../../utils/eslint-compat'; -import rule from '../../../src/rules/sort-attributes'; -import { loadTestCases } from '../../utils/utils'; +import { RuleTester } from '../../utils/eslint-compat.js'; +import rule from '../../../src/rules/sort-attributes.js'; +import { loadTestCases } from '../../utils/utils.js'; const tester = new RuleTester({ languageOptions: { diff --git a/packages/eslint-plugin-svelte/tests/src/rules/spaced-html-comment.ts b/packages/eslint-plugin-svelte/tests/src/rules/spaced-html-comment.ts index a4a724627..d3c66ddd2 100644 --- a/packages/eslint-plugin-svelte/tests/src/rules/spaced-html-comment.ts +++ b/packages/eslint-plugin-svelte/tests/src/rules/spaced-html-comment.ts @@ -1,6 +1,6 @@ -import { RuleTester } from '../../utils/eslint-compat'; -import rule from '../../../src/rules/spaced-html-comment'; -import { loadTestCases } from '../../utils/utils'; +import { RuleTester } from '../../utils/eslint-compat.js'; +import rule from '../../../src/rules/spaced-html-comment.js'; +import { loadTestCases } from '../../utils/utils.js'; const tester = new RuleTester({ languageOptions: { diff --git a/packages/eslint-plugin-svelte/tests/src/rules/valid-compile.ts b/packages/eslint-plugin-svelte/tests/src/rules/valid-compile.ts index 0a6be1c0c..f2325da17 100644 --- a/packages/eslint-plugin-svelte/tests/src/rules/valid-compile.ts +++ b/packages/eslint-plugin-svelte/tests/src/rules/valid-compile.ts @@ -1,6 +1,6 @@ -import { RuleTester } from '../../utils/eslint-compat'; -import rule from '../../../src/rules/valid-compile'; -import { loadTestCases } from '../../utils/utils'; +import { RuleTester } from '../../utils/eslint-compat.js'; +import rule from '../../../src/rules/valid-compile.js'; +import { loadTestCases } from '../../utils/utils.js'; const tester = new RuleTester({ languageOptions: { diff --git a/packages/eslint-plugin-svelte/tests/src/rules/valid-each-key.ts b/packages/eslint-plugin-svelte/tests/src/rules/valid-each-key.ts index 2a2c4ae5e..7c4a2f1d0 100644 --- a/packages/eslint-plugin-svelte/tests/src/rules/valid-each-key.ts +++ b/packages/eslint-plugin-svelte/tests/src/rules/valid-each-key.ts @@ -1,6 +1,6 @@ -import { RuleTester } from '../../utils/eslint-compat'; -import rule from '../../../src/rules/valid-each-key'; -import { loadTestCases } from '../../utils/utils'; +import { RuleTester } from '../../utils/eslint-compat.js'; +import rule from '../../../src/rules/valid-each-key.js'; +import { loadTestCases } from '../../utils/utils.js'; const tester = new RuleTester({ languageOptions: { diff --git a/packages/eslint-plugin-svelte/tests/src/rules/valid-prop-names-in-kit-pages.ts b/packages/eslint-plugin-svelte/tests/src/rules/valid-prop-names-in-kit-pages.ts index 63c36cb7a..f7d602d8d 100644 --- a/packages/eslint-plugin-svelte/tests/src/rules/valid-prop-names-in-kit-pages.ts +++ b/packages/eslint-plugin-svelte/tests/src/rules/valid-prop-names-in-kit-pages.ts @@ -1,6 +1,6 @@ -import { RuleTester } from '../../utils/eslint-compat'; -import rule from '../../../src/rules/valid-prop-names-in-kit-pages'; -import { loadTestCases } from '../../utils/utils'; +import { RuleTester } from '../../utils/eslint-compat.js'; +import rule from '../../../src/rules/valid-prop-names-in-kit-pages.js'; +import { loadTestCases } from '../../utils/utils.js'; const tester = new RuleTester({ languageOptions: { diff --git a/packages/eslint-plugin-svelte/tests/src/settings/ignore-warnings.ts b/packages/eslint-plugin-svelte/tests/src/settings/ignore-warnings.ts index 23dcabd75..e6223dcb6 100644 --- a/packages/eslint-plugin-svelte/tests/src/settings/ignore-warnings.ts +++ b/packages/eslint-plugin-svelte/tests/src/settings/ignore-warnings.ts @@ -1,6 +1,7 @@ import assert from 'assert'; -import plugin from '../../../src/index'; -import { ESLint } from '../../utils/eslint-compat'; +import plugin from '../../../src/index.js'; +import { ESLint } from '../../utils/eslint-compat.js'; +import * as svelteParser from 'svelte-eslint-parser'; describe('ignore-warnings', () => { it('disable rules if ignoreWarnings: [ruleName]', async () => { @@ -18,11 +19,10 @@ describe('ignore-warnings', () => { baseConfig: { files: ['**'], languageOptions: { - parser: require('svelte-eslint-parser'), + parser: svelteParser, ecmaVersion: 2020 }, plugins: { - // @ts-expect-error -- Type error for eslint v9 svelte: plugin as never }, rules: { @@ -39,7 +39,6 @@ describe('ignore-warnings', () => { }, processor: 'svelte/svelte' }, - // @ts-expect-error -- Type error for eslint v9 overrideConfigFile: true }); const result = await linter.lintText(code, { filePath: 'test.svelte' }); @@ -86,11 +85,10 @@ describe('ignore-warnings', () => { baseConfig: { files: ['**'], languageOptions: { - parser: require('svelte-eslint-parser'), + parser: svelteParser, ecmaVersion: 2020 }, plugins: { - // @ts-expect-error -- Type error for eslint v9 svelte: plugin as never }, rules: { @@ -107,7 +105,6 @@ describe('ignore-warnings', () => { }, processor: 'svelte/svelte' }, - // @ts-expect-error -- Type error for eslint v9 overrideConfigFile: true }); const result = await linter.lintText(code, { filePath: 'test.svelte' }); @@ -155,11 +152,10 @@ describe('ignore-warnings', () => { baseConfig: { files: ['**'], languageOptions: { - parser: require('svelte-eslint-parser'), + parser: svelteParser, ecmaVersion: 2020 }, plugins: { - // @ts-expect-error -- Type error for eslint v9 svelte: plugin as never }, rules: { @@ -167,7 +163,6 @@ describe('ignore-warnings', () => { }, processor: 'svelte/svelte' }, - // @ts-expect-error -- Type error for eslint v9 overrideConfigFile: true }); const result = await linter.lintText(code, { filePath: 'test.svelte' }); diff --git a/packages/eslint-plugin-svelte/tests/utils/utils.ts b/packages/eslint-plugin-svelte/tests/utils/utils.ts index 91663b2d3..f076bcf7d 100644 --- a/packages/eslint-plugin-svelte/tests/utils/utils.ts +++ b/packages/eslint-plugin-svelte/tests/utils/utils.ts @@ -2,12 +2,18 @@ import fs from 'fs'; import path from 'path'; import type { RuleTester } from 'eslint'; import type { Linter as LinterType } from 'eslint'; -import plugin from '../../src/index'; -import { applyFixes } from './source-code-fixer'; +import plugin from '../../src/index.js'; +import { applyFixes } from './source-code-fixer.js'; import { parse as parseYaml, stringify as stringifyYaml } from 'yaml'; import semver from 'semver'; -import { writeAndFormat } from '../../tools/lib/write'; -import { Linter } from './eslint-compat'; +import { writeAndFormat } from '../../tools/lib/write.js'; +import { Linter } from './eslint-compat.js'; +import * as svelteParser from 'svelte-eslint-parser'; +import * as typescriptParser from '@typescript-eslint/parser'; +import { Module } from 'module'; + +const __dirname = path.dirname(new URL(import.meta.url).pathname); +const require = Module.createRequire(import.meta.url); const globals = { console: 'readonly', @@ -215,9 +221,9 @@ function writeFixtures(ruleName: string, inputFile: string, { force }: { force?: const parser = path.extname(inputFile) === '.svelte' - ? require('svelte-eslint-parser') + ? svelteParser : path.extname(inputFile) === '.ts' - ? require('@typescript-eslint/parser') + ? typescriptParser : undefined; const { code, filename, options, ...verifyConfig } = config; const resolvedParser = verifyConfig.languageOptions?.parser ?? parser; @@ -293,18 +299,21 @@ function getConfig(ruleName: string, inputFile: string) { inputFile.replace(/input\.[a-z]+$/u, 'config.json'), path.join(path.dirname(inputFile), '_config.json'), inputFile.replace(/input\.[a-z]+$/u, 'config.js'), - path.join(path.dirname(inputFile), '_config.js') + path.join(path.dirname(inputFile), '_config.js'), + inputFile.replace(/input\.[a-z]+$/u, 'config.cjs'), + path.join(path.dirname(inputFile), '_config.cjs') ].find((f) => fs.existsSync(f)); if (configFile) { - config = configFile.endsWith('.js') - ? require(configFile) - : JSON.parse(fs.readFileSync(configFile, 'utf8')); + config = + configFile.endsWith('.js') || configFile.endsWith('.cjs') + ? require(configFile) + : JSON.parse(fs.readFileSync(configFile, 'utf8')); } const parser = path.extname(filename) === '.svelte' - ? require('svelte-eslint-parser') + ? svelteParser : path.extname(inputFile) === '.ts' - ? require('@typescript-eslint/parser') + ? typescriptParser : undefined; const resolvedParser = config?.languageOptions?.parser diff --git a/packages/eslint-plugin-svelte/tools/lib/load-rules.ts b/packages/eslint-plugin-svelte/tools/lib/load-rules.ts index 834e97c27..b6ecdeff4 100644 --- a/packages/eslint-plugin-svelte/tools/lib/load-rules.ts +++ b/packages/eslint-plugin-svelte/tools/lib/load-rules.ts @@ -1,17 +1,18 @@ import path from 'path'; import fs from 'fs'; -import type { RuleModule } from '../../src/types'; +import type { RuleModule } from '../../src/types.js'; + +const __dirname = path.dirname(new URL(import.meta.url).pathname); /** * Get the all rules * @returns {Array} The all rules */ -function readRules() { +async function readRules() { const rulesLibRoot = path.resolve(__dirname, '../../src/rules'); const rules: RuleModule[] = []; for (const name of iterateTsFiles()) { - // eslint-disable-next-line @typescript-eslint/no-var-requires, @typescript-eslint/no-require-imports -- ignore - const module = require(path.join(rulesLibRoot, name)); + const module = await import(path.join(rulesLibRoot, name)); const rule: RuleModule = module && module.default; if (!rule || typeof rule.create !== 'function') { continue; @@ -22,7 +23,7 @@ function readRules() { return rules; } -export const rules = readRules(); +export const rules = await readRules(); /** Iterate ts files */ function* iterateTsFiles() { diff --git a/packages/eslint-plugin-svelte/tools/new-rule.ts b/packages/eslint-plugin-svelte/tools/new-rule.ts index e1a93318e..7352ca7cf 100644 --- a/packages/eslint-plugin-svelte/tools/new-rule.ts +++ b/packages/eslint-plugin-svelte/tools/new-rule.ts @@ -1,7 +1,7 @@ import path from 'path'; import fs from 'fs'; import cp from 'child_process'; -import { writeAndFormat } from './lib/write'; +import { writeAndFormat } from './lib/write.js'; const logger = console; // main @@ -16,7 +16,7 @@ void (async ([ruleId, ...args]) => { process.exitCode = 1; return; } - const utilsPath = path.resolve(__dirname, `../src/utils`); + const utilsPath = path.resolve(__dirname, `../src/utils/index.ts`); const testUtilsPath = path.resolve(__dirname, `../tests/utils/utils.ts`); const ruleFile = path.resolve(__dirname, `../src/rules/${ruleId}.ts`); @@ -70,7 +70,7 @@ export default createRule('${ruleId}', { ); await writeAndFormat( testFile, - `import { RuleTester } from '../../utils/eslint-compat'; + `import { RuleTester } from '../../utils/eslint-compat.js'; import rule from '${getModulePath(testFile, ruleFile)}'; import { loadTestCases } from '${getModulePath(testFile, testUtilsPath)}'; @@ -144,7 +144,7 @@ This rule reports ???. /** Get module path */ function getModulePath(from: string, module: string): string { - return path.relative(path.dirname(from), module).replace(/.ts$/u, ''); + return path.relative(path.dirname(from), module).replace(/.ts$/u, '.js'); } /** Argument parsing */ diff --git a/packages/eslint-plugin-svelte/tools/render-rules.ts b/packages/eslint-plugin-svelte/tools/render-rules.ts index 8e8466bd7..31ee0f016 100644 --- a/packages/eslint-plugin-svelte/tools/render-rules.ts +++ b/packages/eslint-plugin-svelte/tools/render-rules.ts @@ -1,5 +1,5 @@ -import type { RuleModule } from '../src/types'; -import { rules } from '../src/utils/rules'; +import type { RuleModule } from '../src/types.js'; +import { rules } from '../src/utils/rules.js'; const categories = [ 'Possible Errors', diff --git a/packages/eslint-plugin-svelte/tools/update-docs-rules-index.ts b/packages/eslint-plugin-svelte/tools/update-docs-rules-index.ts index 49ececf09..e0c9a420a 100644 --- a/packages/eslint-plugin-svelte/tools/update-docs-rules-index.ts +++ b/packages/eslint-plugin-svelte/tools/update-docs-rules-index.ts @@ -1,6 +1,8 @@ import path from 'path'; -import renderRulesTableContent from './render-rules'; -import { writeAndFormat } from './lib/write'; +import renderRulesTableContent from './render-rules.js'; +import { writeAndFormat } from './lib/write.js'; + +const __dirname = path.dirname(new URL(import.meta.url).pathname); // ----------------------------------------------------------------------------- const readmeFilePath = path.resolve(__dirname, '../../../docs/rules.md'); diff --git a/packages/eslint-plugin-svelte/tools/update-docs.ts b/packages/eslint-plugin-svelte/tools/update-docs.ts index 4702f5273..1f0e52e3a 100644 --- a/packages/eslint-plugin-svelte/tools/update-docs.ts +++ b/packages/eslint-plugin-svelte/tools/update-docs.ts @@ -1,9 +1,11 @@ import path from 'path'; import fs from 'fs'; -import { rules } from '../src/utils/rules'; -import type { RuleModule } from '../src/types'; -import { getNewVersion } from './lib/changesets-util'; -import { writeAndFormat } from './lib/write'; +import { rules } from '../src/utils/rules.js'; +import type { RuleModule } from '../src/types.js'; +import { getNewVersion } from './lib/changesets-util.js'; +import { writeAndFormat } from './lib/write.js'; + +const __dirname = path.dirname(new URL(import.meta.url).pathname); function formatItems(items: string[]) { if (items.length <= 2) { diff --git a/packages/eslint-plugin-svelte/tools/update-meta.ts b/packages/eslint-plugin-svelte/tools/update-meta.ts index 88b0e47fd..761ba2d0e 100644 --- a/packages/eslint-plugin-svelte/tools/update-meta.ts +++ b/packages/eslint-plugin-svelte/tools/update-meta.ts @@ -1,8 +1,9 @@ import path from 'path'; import { name, version } from '../package.json'; -import { getNewVersion } from './lib/changesets-util'; -import { writeAndFormat } from './lib/write'; +import { getNewVersion } from './lib/changesets-util.js'; +import { writeAndFormat } from './lib/write.js'; +const __dirname = path.dirname(new URL(import.meta.url).pathname); const META_PATH = path.join(__dirname, '../src/meta.ts'); void main(); diff --git a/packages/eslint-plugin-svelte/tools/update-readme.ts b/packages/eslint-plugin-svelte/tools/update-readme.ts index 4a10e6f90..48e844061 100644 --- a/packages/eslint-plugin-svelte/tools/update-readme.ts +++ b/packages/eslint-plugin-svelte/tools/update-readme.ts @@ -1,7 +1,9 @@ import path from 'path'; import fs from 'fs'; -import renderRulesTableContent from './render-rules'; -import { writeAndFormat } from './lib/write'; +import renderRulesTableContent from './render-rules.js'; +import { writeAndFormat } from './lib/write.js'; + +const __dirname = path.dirname(new URL(import.meta.url).pathname); const insertText = `\n${renderRulesTableContent( (name) => `https://sveltejs.github.io/eslint-plugin-svelte/rules/${name}/` diff --git a/packages/eslint-plugin-svelte/tools/update-rule-types.ts b/packages/eslint-plugin-svelte/tools/update-rule-types.ts index 885acc427..c360a2eb0 100644 --- a/packages/eslint-plugin-svelte/tools/update-rule-types.ts +++ b/packages/eslint-plugin-svelte/tools/update-rule-types.ts @@ -1,6 +1,8 @@ import fs from 'fs'; import path from 'path'; -import plugin from '../src/index'; +import plugin from '../src/index.js'; + +const __dirname = path.dirname(new URL(import.meta.url).pathname); void main(); diff --git a/packages/eslint-plugin-svelte/tools/update-rules.ts b/packages/eslint-plugin-svelte/tools/update-rules.ts index 4d6632e6a..1aa9c7fbb 100644 --- a/packages/eslint-plugin-svelte/tools/update-rules.ts +++ b/packages/eslint-plugin-svelte/tools/update-rules.ts @@ -1,7 +1,9 @@ import path from 'path'; // import eslint from "eslint" -import { rules } from './lib/load-rules'; -import { writeAndFormat } from './lib/write'; +import { rules } from './lib/load-rules.js'; +import { writeAndFormat } from './lib/write.js'; + +const __dirname = path.dirname(new URL(import.meta.url).pathname); /** * Convert text to camelCase @@ -26,11 +28,11 @@ const content = `/* * This file has been automatically generated, * in order to update its content execute "pnpm run update" */ -import type { RuleModule } from "../types" +import type { RuleModule } from "../types.js" ${rules .map( (rule) => - `import ${toIdentifier(rule.meta.docs.ruleName)} from "../rules/${rule.meta.docs.ruleName}"` + `import ${toIdentifier(rule.meta.docs.ruleName)} from "../rules/${rule.meta.docs.ruleName}.js"` ) .join('\n')} diff --git a/packages/eslint-plugin-svelte/tools/update-rulesets.ts b/packages/eslint-plugin-svelte/tools/update-rulesets.ts index e1a21b4b6..1431662af 100644 --- a/packages/eslint-plugin-svelte/tools/update-rulesets.ts +++ b/packages/eslint-plugin-svelte/tools/update-rulesets.ts @@ -1,108 +1,8 @@ import path from 'path'; -import { rules } from './lib/load-rules'; -import { writeAndFormat } from './lib/write'; +import { rules } from './lib/load-rules.js'; +import { writeAndFormat } from './lib/write.js'; -// ------------------ -// Legacy Config -// ------------------ - -const legacyBaseContent = `/* - * IMPORTANT! - * This file has been automatically generated, - * in order to update its content execute "pnpm run update" - */ -import type { Linter } from 'eslint' -const config: Linter.LegacyConfig = { - plugins: ["svelte"], - overrides: [ - { - files: ["*.svelte"], - parser: require.resolve("svelte-eslint-parser"), - rules: { - // ESLint core rules known to cause problems with \`.svelte\`. - "no-inner-declarations": "off", // The AST generated by svelte-eslint-parser will false positives in it rule because the root node of the script is not the \`Program\`. - // "no-irregular-whitespace": "off", - // Self assign is one of way to update reactive value in Svelte. - "no-self-assign": "off", - - // eslint-plugin-svelte rules - ${rules - .filter((rule) => rule.meta.docs.recommended === 'base' && !rule.meta.deprecated) - .map((rule) => { - const conf = rule.meta.docs.default || 'error'; - return `"${rule.meta.docs.ruleId}": "${conf}"`; - }) - .join(',\n ')}, - }, - }, - ], -} -export = config -`; - -const legacyBaseFilePath = path.resolve(__dirname, '../src/configs/base.ts'); - -// Update file. -void writeAndFormat(legacyBaseFilePath, legacyBaseContent); - -const legacyRecommendedContent = `/* - * IMPORTANT! - * This file has been automatically generated, - * in order to update its content execute "pnpm run update" - */ -import type { Linter } from 'eslint' -import path from "node:path" -const base = require.resolve("./base") -const baseExtend = - path.extname(\`\${base}\`) === ".ts" ? "plugin:svelte/base" : base -const config: Linter.LegacyConfig = { - extends: [baseExtend], - rules: { - // eslint-plugin-svelte rules - ${rules - .filter((rule) => rule.meta.docs.recommended && !rule.meta.deprecated) - .map((rule) => { - const conf = rule.meta.docs.default || 'error'; - return `"${rule.meta.docs.ruleId}": "${conf}"`; - }) - .join(',\n ')}, - }, -} -export = config -`; - -const legacyRecommendedFilePath = path.resolve(__dirname, '../src/configs/recommended.ts'); - -// Update file. -void writeAndFormat(legacyRecommendedFilePath, legacyRecommendedContent); - -const legacyPrettierContent = `/* - * IMPORTANT! - * This file has been automatically generated, - * in order to update its content execute "pnpm run update" - */ -import type { Linter } from 'eslint' -import path from "node:path" -const base = require.resolve("./base") -const baseExtend = - path.extname(\`\${base}\`) === ".ts" ? "plugin:svelte/base" : base -const config: Linter.LegacyConfig = { - extends: [baseExtend], - rules: { - // eslint-plugin-svelte rules - ${rules - .filter((rule) => rule.meta.docs.conflictWithPrettier) - .map((rule) => `"${rule.meta.docs.ruleId}": "off"`) - .join(',\n ')}, - }, -} -export = config -`; - -const legacyPrettierFilePath = path.resolve(__dirname, '../src/configs/prettier.ts'); - -// Update file. -void writeAndFormat(legacyPrettierFilePath, legacyPrettierContent); +const __dirname = path.dirname(new URL(import.meta.url).pathname); // ------------------ // Flat Config @@ -114,13 +14,17 @@ const baseContent = `/* * in order to update its content execute "pnpm run update" */ import type { ESLint, Linter } from 'eslint'; +import * as parser from 'svelte-eslint-parser'; +let pluginObject: ESLint.Plugin | null = null; +export function setPluginObject(plugin: ESLint.Plugin): void { + pluginObject = plugin; +} const config: Linter.Config[] = [ { name: 'svelte:base:setup-plugin', plugins: { get svelte(): ESLint.Plugin { - // eslint-disable-next-line @typescript-eslint/no-require-imports -- ignore - return require("../../index") + return pluginObject!; } }, }, @@ -128,8 +32,7 @@ const config: Linter.Config[] = [ name: 'svelte:base:setup-for-svelte', files: ["*.svelte", "**/*.svelte"], languageOptions: { - // eslint-disable-next-line @typescript-eslint/no-require-imports -- ignore - parser: require('svelte-eslint-parser'), + parser: parser, }, rules: { // ESLint core rules known to cause problems with \`.svelte\`. @@ -164,7 +67,7 @@ const recommendedContent = `/* * in order to update its content execute "pnpm run update" */ import type { Linter } from 'eslint'; -import base from "./base" +import base from "./base.js" const config: Linter.Config[] = [ ...base, { @@ -195,7 +98,7 @@ const prettierContent = `/* * in order to update its content execute "pnpm run update" */ import type { Linter } from 'eslint'; -import base from "./base" +import base from "./base.js" const config: Linter.Config[] = [ ...base, { diff --git a/packages/eslint-plugin-svelte/tools/update-types-for-node.ts b/packages/eslint-plugin-svelte/tools/update-types-for-node.ts index 7dcd97196..39b1b2bd1 100644 --- a/packages/eslint-plugin-svelte/tools/update-types-for-node.ts +++ b/packages/eslint-plugin-svelte/tools/update-types-for-node.ts @@ -1,7 +1,9 @@ import { AST_NODE_TYPES } from '@typescript-eslint/types'; import { parseForESLint } from 'svelte-eslint-parser'; import path from 'path'; -import { writeAndFormat } from './lib/write'; +import { writeAndFormat } from './lib/write.js'; + +const __dirname = path.dirname(new URL(import.meta.url).pathname); // import { fileURLToPath } from "url" // const filename = fileURLToPath(import.meta.url) diff --git a/packages/eslint-plugin-svelte/typings/@eslint-community/eslint-utils/index.d.ts b/packages/eslint-plugin-svelte/typings/@eslint-community/eslint-utils/index.d.ts deleted file mode 100644 index 45432fcf7..000000000 --- a/packages/eslint-plugin-svelte/typings/@eslint-community/eslint-utils/index.d.ts +++ /dev/null @@ -1,89 +0,0 @@ -import type { AST } from 'svelte-eslint-parser'; -import type { TSESTree } from '@typescript-eslint/types'; -import type { Scope } from '@typescript-eslint/scope-manager'; -import type { - CALL, - CONSTRUCT, - ESM, - READ, - TraceMap -} from '@eslint-community/eslint-utils/referenceTracker'; -export { ReferenceTracker, TrackedReferences } from '../../../node_modules/@types/eslint-utils'; -type Token = { type: string; value: string }; -export function isArrowToken(token: Token): boolean; -export function isCommaToken(token: Token): boolean; -export function isSemicolonToken(token: Token): boolean; -export function isColonToken(token: Token): boolean; -export function isOpeningParenToken(token: Token): boolean; -export function isClosingParenToken(token: Token): boolean; -export function isOpeningBracketToken(token: Token): boolean; -export function isClosingBracketToken(token: Token): boolean; -export function isOpeningBraceToken(token: Token): boolean; -export function isClosingBraceToken(token: Token): boolean; -export function isCommentToken(token: Token): token is AST.Comment; -export function isNotArrowToken(token: Token): boolean; -export function isNotCommaToken(token: Token): boolean; -export function isNotSemicolonToken(token: Token): boolean; -export function isNotColonToken(token: Token): boolean; -export function isNotOpeningParenToken(token: Token): boolean; -export function isNotClosingParenToken(token: Token): boolean; -export function isNotOpeningBracketToken(token: Token): boolean; -export function isNotClosingBracketToken(token: Token): boolean; -export function isNotOpeningBraceToken(token: Token): boolean; -export function isNotClosingBraceToken(token: Token): boolean; -export function isNotCommentToken(token: Token): boolean; - -export function findVariable( - initialScope: Scope, - nameOrNode: TSESTree.Identifier | string -): Scope.Variable; - -/** - * Get the property name from a MemberExpression node or a Property node. - */ -export function getPropertyName( - node: - | TSESTree.MemberExpression - | TSESTree.MethodDefinition - | TSESTree.Property - | TSESTree.PropertyDefinition, - initialScope?: Scope -): string | null; - -/** - * Get the innermost scope which contains a given location. - */ -export function getInnermostScope(initialScope: Scope, node: TSESTree.Node): Scope; - -export class ReferenceTracker { - public static readonly CALL: typeof CALL; - - public static readonly CONSTRUCT: typeof CONSTRUCT; - - public static readonly ESM: typeof ESM; - - public static readonly READ: typeof READ; - - public constructor(globalScope: Scope, options?: ReferenceTrackerOptions); - - /** - * Iterate the references of CommonJS modules. - */ - public iterateCjsReferences( - traceMap: TraceMap - ): IterableIterator>; - - /** - * Iterate the references of ES modules. - */ - public iterateEsmReferences( - traceMap: TraceMap - ): IterableIterator>; - - /** - * Iterate the references of global variables. - */ - public iterateGlobalReferences( - traceMap: TraceMap - ): IterableIterator>; -} diff --git a/packages/eslint-plugin-svelte/typings/postcss-safe-parser/lib/safe-parser/index.d.ts b/packages/eslint-plugin-svelte/typings/postcss-safe-parser/lib/safe-parser/index.d.ts deleted file mode 100644 index d8e605e50..000000000 --- a/packages/eslint-plugin-svelte/typings/postcss-safe-parser/lib/safe-parser/index.d.ts +++ /dev/null @@ -1,17 +0,0 @@ -import type { Tokenizer } from 'postcss/lib/tokenize'; -import type { Root, Input } from 'postcss'; - -declare class Parser { - protected input: Input; - - public root: Root; - - protected tokenizer: Tokenizer; - - public constructor(input: Input); - - public parse(): void; - - protected createTokenizer(): void; -} -export default Parser; diff --git a/packages/eslint-plugin-svelte/typings/postcss/lib/tokenize/index.d.ts b/packages/eslint-plugin-svelte/typings/postcss/lib/tokenize/index.d.ts deleted file mode 100644 index 83573b5c4..000000000 --- a/packages/eslint-plugin-svelte/typings/postcss/lib/tokenize/index.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -import type { Input } from 'postcss'; -export type Token = [string, string, number?, number?]; -export type Tokenizer = { - back: (token: Token) => void; - nextToken: (opts?: { ignoreUnclosed?: boolean }) => Token | undefined; - endOfFile: () => boolean; - position: () => number; -}; -export default function tokenizer(input: Input, options?: { ignoreErrors?: boolean }): Tokenizer; diff --git a/prettier.config.js b/prettier.config.cjs similarity index 100% rename from prettier.config.js rename to prettier.config.cjs From a7bdd2ca6cb6a69851a5a224bfaada54cc12e38c Mon Sep 17 00:00:00 2001 From: Yosuke Ota Date: Thu, 28 Nov 2024 10:22:06 +0900 Subject: [PATCH 02/10] Create thick-items-retire.md --- .changeset/thick-items-retire.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/thick-items-retire.md diff --git a/.changeset/thick-items-retire.md b/.changeset/thick-items-retire.md new file mode 100644 index 000000000..534550cd2 --- /dev/null +++ b/.changeset/thick-items-retire.md @@ -0,0 +1,5 @@ +--- +"eslint-plugin-svelte": major +--- + +feat!: change the plugin to an ESM-only package From 69fe46ad0a0c64091cb77dbe73bb5f90e7ed5766 Mon Sep 17 00:00:00 2001 From: yosuke ota Date: Thu, 28 Nov 2024 10:34:56 +0900 Subject: [PATCH 03/10] update --- packages/eslint-plugin-svelte/src/utils/eslint-core.ts | 2 +- packages/eslint-plugin-svelte/tests/utils/utils.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/eslint-plugin-svelte/src/utils/eslint-core.ts b/packages/eslint-plugin-svelte/src/utils/eslint-core.ts index c803f912b..d78f293e7 100644 --- a/packages/eslint-plugin-svelte/src/utils/eslint-core.ts +++ b/packages/eslint-plugin-svelte/src/utils/eslint-core.ts @@ -3,7 +3,7 @@ import type { RuleListener, RuleContext, RuleModule } from '../types.js'; import type { TSESTree } from '@typescript-eslint/types'; import type { AST as SvAST } from 'svelte-eslint-parser'; import { Linter } from 'eslint'; -import { Module } from 'module'; +import Module from 'module'; const require = Module.createRequire(import.meta.url); /** diff --git a/packages/eslint-plugin-svelte/tests/utils/utils.ts b/packages/eslint-plugin-svelte/tests/utils/utils.ts index f076bcf7d..7cb97eda5 100644 --- a/packages/eslint-plugin-svelte/tests/utils/utils.ts +++ b/packages/eslint-plugin-svelte/tests/utils/utils.ts @@ -10,7 +10,7 @@ import { writeAndFormat } from '../../tools/lib/write.js'; import { Linter } from './eslint-compat.js'; import * as svelteParser from 'svelte-eslint-parser'; import * as typescriptParser from '@typescript-eslint/parser'; -import { Module } from 'module'; +import Module from 'module'; const __dirname = path.dirname(new URL(import.meta.url).pathname); const require = Module.createRequire(import.meta.url); From 55717d446436c5148f981d7b70b5ff2cc6ee99f8 Mon Sep 17 00:00:00 2001 From: yosuke ota Date: Thu, 28 Nov 2024 12:12:23 +0900 Subject: [PATCH 04/10] fix --- docs-svelte-kit/package.json | 40 +++++++++---------- package.json | 2 +- packages/eslint-plugin-svelte/src/index.ts | 2 +- .../postcss-safe-parser/lib/safe-parser.d.ts | 2 +- .../utils/css-utils/template-safe-parser.ts | 2 +- 5 files changed, 24 insertions(+), 24 deletions(-) diff --git a/docs-svelte-kit/package.json b/docs-svelte-kit/package.json index 179c9424a..9d86cdbd6 100644 --- a/docs-svelte-kit/package.json +++ b/docs-svelte-kit/package.json @@ -12,55 +12,55 @@ "svelte-kit": "vite" }, "devDependencies": { - "@babel/core": "^7.25.8", - "@babel/types": "^7.25.8", + "@babel/core": "^7.26.0", + "@babel/types": "^7.26.0", "@fontsource/fira-mono": "^5.1.0", - "@ota-meshi/eslint-plugin": "^0.17.5", + "@ota-meshi/eslint-plugin": "^0.17.6", "@shikijs/markdown-it": "^1.24.0", "@shikijs/twoslash": "^1.24.0", "@sindresorhus/slugify": "^2.2.1", - "@sveltejs/adapter-static": "^3.0.5", - "@sveltejs/kit": "^2.7.2", - "@sveltejs/vite-plugin-svelte": "^5.0.0", + "@sveltejs/adapter-static": "^3.0.6", + "@sveltejs/kit": "^2.8.5", + "@sveltejs/vite-plugin-svelte": "^5.0.1", "@types/babel__core": "^7.20.5", "@types/cross-spawn": "^6.0.6", "@types/escape-html": "^1.0.4", "@types/eslint-scope": "^3.7.7", - "@types/eslint-visitor-keys": "^3.3.0", - "@types/less": "^3.0.6", + "@types/eslint-visitor-keys": "^3.3.2", + "@types/less": "^3.0.7", "@types/markdown-it": "^14.1.2", "@types/markdown-it-container": "^2.0.10", "@types/markdown-it-emoji": "^3.0.1", - "@types/node": "^22.0.0", - "@types/prismjs": "^1.26.4", + "@types/node": "^22.10.0", + "@types/prismjs": "^1.26.5", "@types/stylus": "^0.48.43", "@typescript/vfs": "^1.6.0", - "acorn": "^8.13.0", + "acorn": "^8.14.0", "assert": "^2.1.0", - "cross-spawn": "^7.0.3", + "cross-spawn": "^7.0.6", "env-cmd": "^10.1.0", "esbuild": "^0.24.0", "escape-html": "^1.0.3", "eslint-plugin-svelte": "workspace:^", - "eslint-scope": "^8.1.0", - "eslint-visitor-keys": "^4.1.0", - "espree": "^10.2.0", - "globals": "^15.11.0", + "eslint-scope": "^8.2.0", + "eslint-visitor-keys": "^4.2.0", + "espree": "^10.3.0", + "globals": "^15.12.0", "markdown-it-anchor": "^9.2.0", "markdown-it-container": "^4.0.0", "markdown-it-emoji": "^3.0.0", "pako": "^2.1.0", - "postcss-nested": "^7.0.0", + "postcss-nested": "^7.0.2", "prism-svelte": "^0.5.0", "prismjs": "^1.29.0", - "sass": "^1.80.3", + "sass": "^1.81.0", "source-map-js": "^1.2.1", "stylus": "^0.64.0", - "svelte": "^5.0.3", + "svelte": "^5.2.10", "svelte-adapter-ghpages": "0.2.2", "twoslash-eslint": "^0.2.12", "util": "^0.12.5", - "vite": "^6.0.0", + "vite": "^6.0.1", "vite-plugin-svelte-md": "^0.1.7" } } diff --git a/package.json b/package.json index e7788f6b5..87baa842f 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,7 @@ "@changesets/cli": "^2.27.10", "@changesets/get-release-plan": "^4.0.5", "@eslint-community/eslint-plugin-eslint-comments": "^4.4.1", - "@ota-meshi/eslint-plugin": "^0.17.5", + "@ota-meshi/eslint-plugin": "^0.17.6", "@types/eslint": "^9.6.1", "@typescript-eslint/eslint-plugin": "^8.16.0", "@typescript-eslint/parser": "^8.16.0", diff --git a/packages/eslint-plugin-svelte/src/index.ts b/packages/eslint-plugin-svelte/src/index.ts index 4d4ec8429..ee7730921 100644 --- a/packages/eslint-plugin-svelte/src/index.ts +++ b/packages/eslint-plugin-svelte/src/index.ts @@ -1,4 +1,4 @@ -import './rule-types'; +import './rule-types.js'; import type { RuleModule } from './types.js'; import { rules as ruleList } from './utils/rules.js'; import base, { setPluginObject } from './configs/flat/base.js'; diff --git a/packages/eslint-plugin-svelte/src/type-defs/postcss-safe-parser/lib/safe-parser.d.ts b/packages/eslint-plugin-svelte/src/type-defs/postcss-safe-parser/lib/safe-parser.d.ts index d6cb08a59..4c4948277 100644 --- a/packages/eslint-plugin-svelte/src/type-defs/postcss-safe-parser/lib/safe-parser.d.ts +++ b/packages/eslint-plugin-svelte/src/type-defs/postcss-safe-parser/lib/safe-parser.d.ts @@ -1,4 +1,4 @@ -declare module 'postcss-safe-parser/lib/safe-parser' { +declare module 'postcss-safe-parser/lib/safe-parser.js' { import type { Tokenizer } from 'postcss/lib/tokenize'; import type { Root, Input } from 'postcss'; diff --git a/packages/eslint-plugin-svelte/src/utils/css-utils/template-safe-parser.ts b/packages/eslint-plugin-svelte/src/utils/css-utils/template-safe-parser.ts index cf2fb0d3d..9ec101f68 100644 --- a/packages/eslint-plugin-svelte/src/utils/css-utils/template-safe-parser.ts +++ b/packages/eslint-plugin-svelte/src/utils/css-utils/template-safe-parser.ts @@ -1,4 +1,4 @@ -import SafeParser from 'postcss-safe-parser/lib/safe-parser'; +import SafeParser from 'postcss-safe-parser/lib/safe-parser.js'; import templateTokenize from './template-tokenize.js'; class TemplateSafeParser extends SafeParser { protected createTokenizer(): void { From dfd5c3cc47053bea1a087e12f6ac92865051d2ff Mon Sep 17 00:00:00 2001 From: yosuke ota Date: Thu, 28 Nov 2024 13:25:50 +0900 Subject: [PATCH 05/10] fix --- packages/eslint-plugin-svelte/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/eslint-plugin-svelte/package.json b/packages/eslint-plugin-svelte/package.json index b16ba6a8b..7961a18e8 100644 --- a/packages/eslint-plugin-svelte/package.json +++ b/packages/eslint-plugin-svelte/package.json @@ -58,7 +58,7 @@ "dependencies": { "@eslint-community/eslint-utils": "^4.4.1", "@jridgewell/sourcemap-codec": "^1.5.0", - "eslint-compat-utils": "^0.6.3", + "eslint-compat-utils": "^0.6.4", "esutils": "^2.0.3", "known-css-properties": "^0.35.0", "postcss": "^8.4.49", From 122d6af47670b4388e9d688997ff9c9a5dc5b688 Mon Sep 17 00:00:00 2001 From: yosuke ota Date: Thu, 28 Nov 2024 15:46:23 +0900 Subject: [PATCH 06/10] update docs --- README.md | 209 ++++++++++++++++----------------------------- docs/README.md | 6 ++ docs/user-guide.md | 209 +++++++++++++++------------------------------ 3 files changed, 149 insertions(+), 275 deletions(-) diff --git a/README.md b/README.md index 2ec47c7fa..eb1cbbc86 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,12 @@ It provides many unique check rules by using the template AST. You can check on the [Online DEMO](https://eslint-online-playground.netlify.app/#eslint-plugin-svelte%20with%20typescript). +> [!NOTE] +> This README is in development.\ +> Please refer to the README for the version you are using.\ +> For example, +> and + **_We are working on experimental support for Svelte v5, but may break with new versions of Svelte v5._** [![NPM license](https://img.shields.io/npm/l/eslint-plugin-svelte.svg)](https://www.npmjs.com/package/eslint-plugin-svelte) @@ -68,8 +74,6 @@ npm install --save-dev eslint eslint-plugin-svelte svelte ### Configuration -#### New Config (`eslint.config.js`) - Use `eslint.config.js` file to configure rules. See also: . Example **eslint.config.js**: @@ -79,7 +83,7 @@ import eslintPluginSvelte from 'eslint-plugin-svelte'; export default [ // add more generic rule sets here, such as: // js.configs.recommended, - ...eslintPluginSvelte.configs['flat/recommended'], + ...eslintPluginSvelte.configs.recommended, { rules: { // override/add rules settings here, such as: @@ -91,129 +95,67 @@ export default [ This plugin provides configs: -- `eslintPluginSvelte.configs['flat/base']` ... Configuration to enable correct Svelte parsing. -- `eslintPluginSvelte.configs['flat/recommended']` ... Above, plus rules to prevent errors or unintended behavior. -- `eslintPluginSvelte.configs['flat/prettier']` ... Turns off rules that may conflict with [Prettier](https://prettier.io/) (You still need to configure prettier to work with svelte yourself, for example by using [prettier-plugin-svelte](https://github.com/sveltejs/prettier-plugin-svelte).). -- `eslintPluginSvelte.configs['flat/all']` ... All rules. This configuration is not recommended for production use because it changes with every minor and major version of `eslint-plugin-svelte`. Use it at your own risk. - -See [the rule list](https://sveltejs.github.io/eslint-plugin-svelte/rules/) to get the `rules` that this plugin provides. - -#### Legacy Config (`.eslintrc`) - -Use `.eslintrc.*` file to configure rules. See also: . - -Example **.eslintrc.js**: - -```js -module.exports = { - extends: [ - // add more generic rule sets here, such as: - // 'eslint:recommended', - 'plugin:svelte/recommended' - ], - rules: { - // override/add rules settings here, such as: - // 'svelte/rule-name': 'error' - } -}; -``` - -This plugin provides configs: - -- `plugin:svelte/base` ... Configuration to enable correct Svelte parsing. -- `plugin:svelte/recommended` ... Above, plus rules to prevent errors or unintended behavior. -- `plugin:svelte/prettier` ... Turns off rules that may conflict with [Prettier](https://prettier.io/) (You still need to configure prettier to work with svelte yourself, for example by using [prettier-plugin-svelte](https://github.com/sveltejs/prettier-plugin-svelte).). -- `plugin:svelte/all` ... All rules. This configuration is not recommended for production use because it changes with every minor and major version of `eslint-plugin-svelte`. Use it at your own risk. +- `eslintPluginSvelte.configs.base` ... Configuration to enable correct Svelte parsing. +- `eslintPluginSvelte.configs.recommended` ... Above, plus rules to prevent errors or unintended behavior. +- `eslintPluginSvelte.configs.prettier` ... Turns off rules that may conflict with [Prettier](https://prettier.io/) (You still need to configure prettier to work with svelte yourself, for example by using [prettier-plugin-svelte](https://github.com/sveltejs/prettier-plugin-svelte).). +- `eslintPluginSvelte.configs.all` ... All rules. This configuration is not recommended for production use because it changes with every minor and major version of `eslint-plugin-svelte`. Use it at your own risk. See [the rule list](https://sveltejs.github.io/eslint-plugin-svelte/rules/) to get the `rules` that this plugin provides. -::: warning ❗ Attention - -The `eslint-plugin-svelte` can not be used with the [eslint-plugin-svelte3]. -If you are using [eslint-plugin-svelte3] you need to remove it. - -```diff - "plugins": [ -- "svelte3" - ] -``` - -::: - #### Parser Configuration If you have specified a parser, you need to configure a parser for `.svelte`. -For example, if you are using the `"@babel/eslint-parser"`, configure it as follows: - -```js -module.exports = { - // ... - extends: ['plugin:svelte/recommended'], - // ... - parser: '@babel/eslint-parser', - // Add an `overrides` section to add a parser configuration for svelte. - overrides: [ - { - files: ['*.svelte'], - parser: 'svelte-eslint-parser' - } - // ... - ] - // ... -}; -``` - For example, if you are using the `"@typescript-eslint/parser"`, and if you want to use TypeScript in `