diff --git a/.changeset/thirty-shrimps-fry.md b/.changeset/thirty-shrimps-fry.md new file mode 100644 index 00000000..d29b11b9 --- /dev/null +++ b/.changeset/thirty-shrimps-fry.md @@ -0,0 +1,5 @@ +--- +'sv': patch +--- + +feat(cli): workspace now gives `files` object with `viteConfig` and `svelteConfig` paths to be used in add-ons diff --git a/packages/addons/devtools-json/index.ts b/packages/addons/devtools-json/index.ts index 625497d6..246ed815 100644 --- a/packages/addons/devtools-json/index.ts +++ b/packages/addons/devtools-json/index.ts @@ -8,11 +8,11 @@ export default defineAddon({ homepage: 'https://github.com/ChromeDevTools/vite-plugin-devtools-json', options: {}, - run: ({ sv, viteConfigFile }) => { + run: ({ sv, files }) => { sv.devDependency('vite-plugin-devtools-json', '^1.0.0'); // add the vite plugin - sv.file(viteConfigFile, (content) => { + sv.file(files.viteConfig, (content) => { const { ast, generateCode } = parseScript(content); const vitePluginName = 'devtoolsJson'; diff --git a/packages/addons/mdsvex/index.ts b/packages/addons/mdsvex/index.ts index b82ad81f..a497005a 100644 --- a/packages/addons/mdsvex/index.ts +++ b/packages/addons/mdsvex/index.ts @@ -7,10 +7,10 @@ export default defineAddon({ shortDescription: 'svelte + markdown', homepage: 'https://mdsvex.pngwn.io', options: {}, - run: ({ sv }) => { + run: ({ sv, files }) => { sv.devDependency('mdsvex', '^0.12.6'); - sv.file('svelte.config.js', (content) => { + sv.file(files.svelteConfig, (content) => { const { ast, generateCode } = parseScript(content); imports.addNamed(ast, { from: 'mdsvex', imports: ['mdsvex'] }); diff --git a/packages/addons/paraglide/index.ts b/packages/addons/paraglide/index.ts index 02663e04..86532e77 100644 --- a/packages/addons/paraglide/index.ts +++ b/packages/addons/paraglide/index.ts @@ -55,7 +55,7 @@ export default defineAddon({ setup: ({ kit, unsupported }) => { if (!kit) unsupported('Requires SvelteKit'); }, - run: ({ sv, options, viteConfigFile, typescript, kit }) => { + run: ({ sv, options, files, typescript, kit }) => { const ext = typescript ? 'ts' : 'js'; if (!kit) throw new Error('SvelteKit is required'); @@ -81,7 +81,7 @@ export default defineAddon({ }); // add the vite plugin - sv.file(viteConfigFile, (content) => { + sv.file(files.viteConfig, (content) => { const { ast, generateCode } = parseScript(content); const vitePluginName = 'paraglideVitePlugin'; diff --git a/packages/addons/sveltekit-adapter/index.ts b/packages/addons/sveltekit-adapter/index.ts index 7c12859b..f7f09fa6 100644 --- a/packages/addons/sveltekit-adapter/index.ts +++ b/packages/addons/sveltekit-adapter/index.ts @@ -29,7 +29,7 @@ export default defineAddon({ setup: ({ kit, unsupported }) => { if (!kit) unsupported('Requires SvelteKit'); }, - run: ({ sv, options }) => { + run: ({ sv, options, files }) => { const adapter = adapters.find((a) => a.id === options.adapter)!; // removes previously installed adapters @@ -48,7 +48,7 @@ export default defineAddon({ sv.devDependency(adapter.package, adapter.version); - sv.file('svelte.config.js', (content) => { + sv.file(files.svelteConfig, (content) => { const { ast, generateCode } = parseScript(content); // finds any existing adapter's import declaration diff --git a/packages/addons/tailwindcss/index.ts b/packages/addons/tailwindcss/index.ts index 795ed2f6..667f1cf5 100644 --- a/packages/addons/tailwindcss/index.ts +++ b/packages/addons/tailwindcss/index.ts @@ -32,7 +32,7 @@ export default defineAddon({ shortDescription: 'css framework', homepage: 'https://tailwindcss.com', options, - run: ({ sv, options, viteConfigFile, typescript, kit, dependencyVersion }) => { + run: ({ sv, options, files, typescript, kit, dependencyVersion }) => { const prettierInstalled = Boolean(dependencyVersion('prettier')); sv.devDependency('tailwindcss', '^4.1.14'); @@ -48,7 +48,7 @@ export default defineAddon({ } // add the vite plugin - sv.file(viteConfigFile, (content) => { + sv.file(files.viteConfig, (content) => { const { ast, generateCode } = parseScript(content); const vitePluginName = 'tailwindcss'; diff --git a/packages/addons/vitest-addon/index.ts b/packages/addons/vitest-addon/index.ts index 229c2ac2..a352ecac 100644 --- a/packages/addons/vitest-addon/index.ts +++ b/packages/addons/vitest-addon/index.ts @@ -20,7 +20,7 @@ export default defineAddon({ shortDescription: 'unit testing', homepage: 'https://vitest.dev', options, - run: ({ sv, viteConfigFile, typescript, kit, options }) => { + run: ({ sv, files, typescript, kit, options }) => { const ext = typescript ? 'ts' : 'js'; const unitTesting = options.usages.includes('unit'); const componentTesting = options.usages.includes('component'); @@ -97,11 +97,11 @@ export default defineAddon({ }); } - sv.file(viteConfigFile, (content) => { + sv.file(files.viteConfig, (content) => { const { ast, generateCode } = parseScript(content); const clientObjectExpression = object.create({ - extends: `./${viteConfigFile}`, + extends: `./${files.viteConfig}`, test: { name: 'client', environment: 'browser', @@ -117,7 +117,7 @@ export default defineAddon({ }); const serverObjectExpression = object.create({ - extends: `./${viteConfigFile}`, + extends: `./${files.viteConfig}`, test: { name: 'server', environment: 'node', diff --git a/packages/cli/commands/add/utils.ts b/packages/cli/commands/add/utils.ts index 5a36dab0..76f4e1de 100644 --- a/packages/cli/commands/add/utils.ts +++ b/packages/cli/commands/add/utils.ts @@ -110,6 +110,7 @@ export function fileExists(cwd: string, filePath: string): boolean { export const commonFilePaths = { packageJson: 'package.json', svelteConfig: 'svelte.config.js', + svelteConfigTS: 'svelte.config.ts', jsconfig: 'jsconfig.json', tsconfig: 'tsconfig.json', viteConfig: 'vite.config.js', diff --git a/packages/cli/commands/add/workspace.ts b/packages/cli/commands/add/workspace.ts index a4a0578a..38529379 100644 --- a/packages/cli/commands/add/workspace.ts +++ b/packages/cli/commands/add/workspace.ts @@ -27,9 +27,13 @@ export async function createWorkspace({ // This is not linked with typescript detection const viteConfigPath = path.join(resolvedCwd, commonFilePaths.viteConfigTS); - const viteConfigFile = fs.existsSync(viteConfigPath) + const viteConfig = fs.existsSync(viteConfigPath) ? commonFilePaths.viteConfigTS : commonFilePaths.viteConfig; + const sveteConfigPath = path.join(resolvedCwd, commonFilePaths.svelteConfigTS); + const svelteConfig = fs.existsSync(sveteConfigPath) + ? commonFilePaths.svelteConfigTS + : commonFilePaths.svelteConfig; let dependencies: Record = {}; let directory = resolvedCwd; @@ -62,7 +66,7 @@ export async function createWorkspace({ options, packageManager: packageManager ?? (await detect({ cwd }))?.name ?? getUserAgent() ?? 'npm', typescript: usesTypescript, - viteConfigFile, + files: { viteConfig, svelteConfig }, kit: dependencies['@sveltejs/kit'] ? parseKitOptions(resolvedCwd) : undefined, dependencyVersion: (pkg) => dependencies[pkg] }; diff --git a/packages/core/addon/workspace.ts b/packages/core/addon/workspace.ts index 4fa43ffb..824a34e4 100644 --- a/packages/core/addon/workspace.ts +++ b/packages/core/addon/workspace.ts @@ -13,7 +13,10 @@ export type Workspace = { */ dependencyVersion: (pkg: string) => string | undefined; typescript: boolean; - viteConfigFile: string; + files: { + viteConfig: string; + svelteConfig: string; + }; kit: { libDirectory: string; routesDirectory: string } | undefined; packageManager: PackageManager; };