diff --git a/.changeset/plenty-trees-yawn.md b/.changeset/plenty-trees-yawn.md new file mode 100644 index 000000000..5c40bd591 --- /dev/null +++ b/.changeset/plenty-trees-yawn.md @@ -0,0 +1,5 @@ +--- +'sv': patch +--- + +feat(eslint): support loading config from `vite.config.*` diff --git a/packages/sv/src/addons/eslint.ts b/packages/sv/src/addons/eslint.ts index b3c6ae789..00ac2e0fa 100644 --- a/packages/sv/src/addons/eslint.ts +++ b/packages/sv/src/addons/eslint.ts @@ -16,6 +16,7 @@ export default defineAddon({ sv.devDependency('eslint-plugin-svelte', '^3.19.0'); sv.devDependency('globals', '^17.4.0'); sv.devDependency('@eslint/js', '^10.0.1'); + sv.devDependency('@sveltejs/load-config', '^0.1.1'); sv.devDependency('@types/node', getNodeTypesVersion()); if (typescript) sv.devDependency('typescript-eslint', '^8.58.1'); @@ -33,7 +34,13 @@ export default defineAddon({ 'eslint.config.js', transforms.script(({ ast, comments, js }) => { const eslintConfigs: Array = []; - js.imports.addDefault(ast, { from: './svelte.config.js', as: 'svelteConfig' }); + + js.imports.addNamed(ast, { from: '@sveltejs/load-config', imports: ['loadConfig'] }); + const svelteConfigStatement = js.common.parseStatement( + "\nconst svelteConfig = await loadConfig('./', { traverse: false })" + ); + js.common.appendStatement(ast, { statement: svelteConfigStatement }); + const gitIgnorePathStatement = js.common.parseStatement( "\nconst gitignorePath = path.resolve(import.meta.dirname, '.gitignore');" ); @@ -90,7 +97,7 @@ export default defineAddon({ projectService: true, extraFileExtensions: ['.svelte'], parser: js.variables.createIdentifier('ts.parser'), - svelteConfig: js.variables.createIdentifier('svelteConfig') + svelteConfig: js.variables.createIdentifier('svelteConfig.config') } } }); @@ -100,7 +107,7 @@ export default defineAddon({ files: ['**/*.svelte', '**/*.svelte.js'], languageOptions: { parserOptions: { - svelteConfig: js.variables.createIdentifier('svelteConfig') + svelteConfig: js.variables.createIdentifier('svelteConfig.config') } } }); diff --git a/packages/sv/src/cli/tests/snapshots/create-with-all-addons/eslint.config.js b/packages/sv/src/cli/tests/snapshots/create-with-all-addons/eslint.config.js index 3449331cb..6b26eb826 100644 --- a/packages/sv/src/cli/tests/snapshots/create-with-all-addons/eslint.config.js +++ b/packages/sv/src/cli/tests/snapshots/create-with-all-addons/eslint.config.js @@ -5,8 +5,9 @@ import svelte from 'eslint-plugin-svelte'; import { defineConfig, includeIgnoreFile } from 'eslint/config'; import globals from 'globals'; import ts from 'typescript-eslint'; -import svelteConfig from './svelte.config.js'; +import { loadConfig } from '@sveltejs/load-config'; +const svelteConfig = await loadConfig('./', { traverse: false }); const gitignorePath = path.resolve(import.meta.dirname, '.gitignore'); export default defineConfig( @@ -31,7 +32,7 @@ export default defineConfig( projectService: true, extraFileExtensions: ['.svelte'], parser: ts.parser, - svelteConfig + svelteConfig: svelteConfig.config } } }, diff --git a/packages/sv/src/cli/tests/snapshots/create-with-all-addons/package.json b/packages/sv/src/cli/tests/snapshots/create-with-all-addons/package.json index bfe34a066..dab89d0dd 100644 --- a/packages/sv/src/cli/tests/snapshots/create-with-all-addons/package.json +++ b/packages/sv/src/cli/tests/snapshots/create-with-all-addons/package.json @@ -29,6 +29,7 @@ "@playwright/test": "^1.60.0", "@sveltejs/adapter-node": "^5.5.4", "@sveltejs/kit": "^2.57.0", + "@sveltejs/load-config": "^0.1.1", "@sveltejs/vite-plugin-svelte": "^7.0.0", "@tailwindcss/forms": "^0.5.11", "@tailwindcss/typography": "^0.5.19",