diff --git a/packages/sv/lib/cli/add/utils.ts b/packages/sv/lib/cli/add/utils.ts index d2e4e8216..95089cb1f 100644 --- a/packages/sv/lib/cli/add/utils.ts +++ b/packages/sv/lib/cli/add/utils.ts @@ -130,8 +130,8 @@ export const commonFilePaths = { packageJson: 'package.json', svelteConfig: 'svelte.config.js', svelteConfigTS: 'svelte.config.ts', - jsconfig: 'jsconfig.json', - tsconfig: 'tsconfig.json', + jsConfig: 'jsconfig.json', + tsConfig: 'tsconfig.json', viteConfig: 'vite.config.js', viteConfigTS: 'vite.config.ts' } as const; diff --git a/packages/sv/lib/cli/add/workspace.ts b/packages/sv/lib/cli/add/workspace.ts index 886ca7468..f49eec346 100644 --- a/packages/sv/lib/cli/add/workspace.ts +++ b/packages/sv/lib/cli/add/workspace.ts @@ -24,15 +24,17 @@ export async function createWorkspace({ const resolvedCwd = path.resolve(cwd); // Will go up and prioritize jsconfig.json as it's first in the array - const tjsconfig = find.any([commonFilePaths.jsconfig, commonFilePaths.tsconfig], { cwd }); - // If the file is not ending with jsconfig.json, then we are using typescript - const usesTypescript = !tjsconfig?.endsWith(commonFilePaths.jsconfig); + const jtsConfigPath = find.any([commonFilePaths.jsConfig, commonFilePaths.tsConfig], { cwd }); + const typescript = jtsConfigPath?.endsWith(commonFilePaths.tsConfig) ?? false; // This is not linked with typescript detection const viteConfigPath = path.join(resolvedCwd, commonFilePaths.viteConfigTS); const viteConfig = fs.existsSync(viteConfigPath) ? commonFilePaths.viteConfigTS : commonFilePaths.viteConfig; + + // ecosystem doesn't support `svelte.config.ts` https://github.com/sveltejs/cli/issues/816#issuecomment-3568032867 + // but the user may have opt in to it const svelteConfigPath = path.join(resolvedCwd, commonFilePaths.svelteConfigTS); const svelteConfig = fs.existsSync(svelteConfigPath) ? commonFilePaths.svelteConfigTS @@ -82,7 +84,7 @@ export async function createWorkspace({ return { cwd: resolvedCwd, packageManager: packageManager ?? (await detect({ cwd }))?.name ?? getUserAgent() ?? 'npm', - typescript: usesTypescript, + typescript, files: { viteConfig, svelteConfig, @@ -135,7 +137,7 @@ function parseKitOptions(cwd: string) { const { ast } = parseScript(configSource); const defaultExport = ast.body.find((s) => s.type === 'ExportDefaultDeclaration'); - if (!defaultExport) throw Error('Missing default export in `svelte.config.js`'); + if (!defaultExport) throw Error(`Missing default export in \`${commonFilePaths.svelteConfig}\``); let objectExpression: AstTypes.ObjectExpression | undefined; if (defaultExport.declaration.type === 'Identifier') { @@ -157,14 +159,17 @@ function parseKitOptions(cwd: string) { } if (!objectExpression) - throw Error('Unable to find svelte config object expression from `svelte.config.js`'); + throw Error( + `Unable to find svelte config object expression from \`${commonFilePaths.svelteConfig}\`` + ); } else if (defaultExport.declaration.type === 'ObjectExpression') { // e.g. `export default { ... };` objectExpression = defaultExport.declaration; } // We'll error out since we can't safely determine the config object - if (!objectExpression) throw new Error('Unexpected svelte config shape from `svelte.config.js`'); + if (!objectExpression) + throw new Error(`Unexpected svelte config shape from \`${commonFilePaths.svelteConfig}\``); const kit = object.property(objectExpression, { name: 'kit', fallback: object.create({}) }); const files = object.property(kit, { name: 'files', fallback: object.create({}) }); diff --git a/packages/sv/lib/cli/create.ts b/packages/sv/lib/cli/create.ts index e02d2eeb6..7a5b7a4fe 100644 --- a/packages/sv/lib/cli/create.ts +++ b/packages/sv/lib/cli/create.ts @@ -390,7 +390,8 @@ export async function createVirtualWorkspace({ files: { ...tentativeWorkspace.files, viteConfig: type === 'typescript' ? commonFilePaths.viteConfigTS : commonFilePaths.viteConfig, - svelteConfig: commonFilePaths.svelteConfig // currently we always use js files, never typescript files + // ecosystem doesn't support `svelte.config.ts` https://github.com/sveltejs/cli/issues/816#issuecomment-3568032867 + svelteConfig: commonFilePaths.svelteConfig } }; diff --git a/packages/sv/lib/create/index.ts b/packages/sv/lib/create/index.ts index 59b1ba8fb..89dad90b5 100644 --- a/packages/sv/lib/create/index.ts +++ b/packages/sv/lib/create/index.ts @@ -1,6 +1,7 @@ import fs from 'node:fs'; import path from 'node:path'; import { mkdirp, copy, dist, getSharedFiles } from './utils.ts'; +import { commonFilePaths } from '../cli/add/utils.ts'; export type TemplateType = (typeof templateTypes)[number]; export type LanguageType = (typeof languageTypes)[number]; @@ -68,7 +69,7 @@ function write_template_files(template: string, types: LanguageType, name: strin function write_common_files(cwd: string, options: Options, name: string) { const files = getSharedFiles(); - const pkg_file = path.join(cwd, 'package.json'); + const pkg_file = path.join(cwd, commonFilePaths.packageJson); const pkg = /** @type {any} */ JSON.parse(fs.readFileSync(pkg_file, 'utf-8')); sort_files(files).forEach((file) => { @@ -77,7 +78,7 @@ function write_common_files(cwd: string, options: Options, name: string) { if (exclude || !include) return; - if (file.name === 'package.json') { + if (file.name === commonFilePaths.packageJson) { const new_pkg = JSON.parse(file.contents); merge(pkg, new_pkg); } else { diff --git a/packages/sv/lib/create/playground.ts b/packages/sv/lib/create/playground.ts index 6ec216415..189de81a1 100644 --- a/packages/sv/lib/create/playground.ts +++ b/packages/sv/lib/create/playground.ts @@ -6,6 +6,7 @@ import { parseJson, parseScript, parseSvelte } from '../core/tooling/parsers.ts' import { isVersionUnsupportedBelow } from '../core/index.ts'; import { getSharedFiles } from './utils.ts'; import { walk } from 'zimmerframe'; +import { commonFilePaths } from '../cli/add/utils.ts'; export function validatePlaygroundUrl(link: string): boolean { try { @@ -231,7 +232,7 @@ export function setupPlaygroundProject( fs.writeFileSync(filePath, newContent, 'utf-8'); // add packages as dependencies to package.json if requested - const pkgPath = path.join(cwd, 'package.json'); + const pkgPath = path.join(cwd, commonFilePaths.packageJson); const pkgSource = fs.readFileSync(pkgPath, 'utf-8'); const pkgJson = parseJson(pkgSource); let updatePackageJson = false; @@ -245,7 +246,8 @@ export function setupPlaygroundProject( let experimentalAsyncNeeded = true; const addExperimentalAsync = () => { - const svelteConfigPath = path.join(cwd, 'svelte.config.js'); + // ecosystem doesn't support `svelte.config.ts` https://github.com/sveltejs/cli/issues/816#issuecomment-3568032867 + const svelteConfigPath = path.join(cwd, commonFilePaths.svelteConfig); const svelteConfig = fs.readFileSync(svelteConfigPath, 'utf-8'); const { ast, generateCode } = parseScript(svelteConfig); const { value: config } = js.exports.createDefault(ast, { fallback: js.object.create({}) }); @@ -253,7 +255,7 @@ export function setupPlaygroundProject( fs.writeFileSync(svelteConfigPath, generateCode(), 'utf-8'); }; - // we want to change the svelte version, even if the user decieded + // we want to change the svelte version, even if the user decided // to not install external dependencies if (playground.svelteVersion) { updatePackageJson = true; diff --git a/packages/sv/lib/create/templates/demo/src/routes/+page.svelte b/packages/sv/lib/create/templates/demo/src/routes/+page.svelte index a328ff63a..0f797fd5f 100644 --- a/packages/sv/lib/create/templates/demo/src/routes/+page.svelte +++ b/packages/sv/lib/create/templates/demo/src/routes/+page.svelte @@ -1,7 +1,7 @@ diff --git a/packages/sv/lib/create/templates/demo/src/routes/Header.svelte b/packages/sv/lib/create/templates/demo/src/routes/Header.svelte index 0e719eb08..ff378aecd 100644 --- a/packages/sv/lib/create/templates/demo/src/routes/Header.svelte +++ b/packages/sv/lib/create/templates/demo/src/routes/Header.svelte @@ -1,8 +1,8 @@
diff --git a/packages/sv/lib/create/templates/demo/src/lib/images/github.svg b/packages/sv/lib/create/templates/demo/src/routes/github.svg similarity index 100% rename from packages/sv/lib/create/templates/demo/src/lib/images/github.svg rename to packages/sv/lib/create/templates/demo/src/routes/github.svg diff --git a/packages/sv/lib/create/templates/demo/src/lib/images/svelte-logo.svg b/packages/sv/lib/create/templates/demo/src/routes/svelte-logo.svg similarity index 100% rename from packages/sv/lib/create/templates/demo/src/lib/images/svelte-logo.svg rename to packages/sv/lib/create/templates/demo/src/routes/svelte-logo.svg diff --git a/packages/sv/lib/create/templates/demo/src/lib/images/svelte-welcome.png b/packages/sv/lib/create/templates/demo/src/routes/svelte-welcome.png similarity index 100% rename from packages/sv/lib/create/templates/demo/src/lib/images/svelte-welcome.png rename to packages/sv/lib/create/templates/demo/src/routes/svelte-welcome.png diff --git a/packages/sv/lib/create/templates/demo/src/lib/images/svelte-welcome.webp b/packages/sv/lib/create/templates/demo/src/routes/svelte-welcome.webp similarity index 100% rename from packages/sv/lib/create/templates/demo/src/lib/images/svelte-welcome.webp rename to packages/sv/lib/create/templates/demo/src/routes/svelte-welcome.webp