Skip to content

Commit e77ab55

Browse files
feat(sv): include typeConfig in file (#1016)
Co-authored-by: jycouet <jycouet@gmail.com>
1 parent 08efcd9 commit e77ab55

File tree

4 files changed

+20
-26
lines changed

4 files changed

+20
-26
lines changed

packages/sv/src/addons/better-auth.ts

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,9 @@ export default defineAddon({
4141
runsAfter('tailwindcss');
4242
},
4343
run: ({ sv, language, options, directory, dependencyVersion, file }) => {
44+
const svelte5 = !!dependencyVersion('svelte')?.startsWith('5');
45+
const [ts, s5] = createPrinter(language === 'ts', svelte5);
46+
4447
const demoPassword = options.demo.includes('password');
4548
const demoGithub = options.demo.includes('github');
4649
const hasDemo = demoPassword || demoGithub;
@@ -135,9 +138,9 @@ export default defineAddon({
135138
plugins: [
136139
sveltekitCookies(getRequestEvent) // make sure this is the last plugin in the array
137140
],
138-
}${language === 'ts' ? ' satisfies Omit<Parameters<typeof betterAuth>[0], "database">' : ''};
141+
}${ts(' satisfies Omit<Parameters<typeof betterAuth>[0], "database">')};
139142
140-
export const createAuth = (d1${language === 'ts' ? ': D1Database' : ''}) => betterAuth({
143+
export const createAuth = (d1${ts(': D1Database')}) => betterAuth({
141144
...authConfig,
142145
database: drizzleAdapter(getDb(d1), { provider: '${provider}' }),
143146
});
@@ -148,7 +151,7 @@ export default defineAddon({
148151
* This instance is used by the \`better-auth\` CLI for schema generation ONLY.
149152
* To access \`auth\` at runtime, use \`event.locals.auth\`.
150153
*/
151-
export const auth = createAuth(${language === 'ts' ? 'null!' : 'null'});`;
154+
export const auth = createAuth(null${ts('!')});`;
152155
} else {
153156
authConfig = dedent`
154157
export const auth = betterAuth({
@@ -297,8 +300,6 @@ export default defineAddon({
297300
return false;
298301
}
299302

300-
const [ts] = createPrinter(language === 'ts');
301-
302303
const d1AuthLine = d1 ? '\n\t\t\t\t\t\t\tconst { auth } = event.locals;\n' : '';
303304

304305
const signInEmailAction = demoPassword
@@ -409,9 +410,6 @@ export default defineAddon({
409410
? ' class="bg-blue-600 text-white px-4 py-2 rounded-md hover:bg-blue-700 transition"'
410411
: '';
411412

412-
const svelte5 = !!dependencyVersion('svelte')?.startsWith('5');
413-
const [ts, s5] = createPrinter(language === 'ts', svelte5);
414-
415413
const passwordForm = demoPassword
416414
? `
417415
<form method="post" action="?/signInEmail" use:enhance>
@@ -465,7 +463,6 @@ export default defineAddon({
465463
return false;
466464
}
467465

468-
const [ts] = createPrinter(language === 'ts');
469466
const d1AuthLine = d1 ? '\n\t\t\t\t\t\t\tconst { auth } = event.locals;\n' : '';
470467
return dedent`
471468
import { redirect } from '@sveltejs/kit';
@@ -502,8 +499,6 @@ export default defineAddon({
502499
const twBtnClasses =
503500
'class="bg-blue-600 text-white px-4 py-2 rounded-md hover:bg-blue-700 transition"';
504501

505-
const svelte5 = !!dependencyVersion('svelte')?.startsWith('5');
506-
const [ts, s5] = createPrinter(language === 'ts', svelte5);
507502
return dedent`
508503
<script ${ts("lang='ts'")}>
509504
import { enhance } from '$app/forms';

packages/sv/src/addons/drizzle.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@ import {
44
type TransformFn,
55
transforms,
66
resolveCommand,
7-
fileExists
7+
fileExists,
8+
createPrinter
89
} from '@sveltejs/sv-utils';
910
import crypto from 'node:crypto';
1011
import fs from 'node:fs';
@@ -93,7 +94,7 @@ export default defineAddon({
9394
return cancel('Cloudflare D1 requires @sveltejs/adapter-cloudflare - add the adapter first');
9495
}
9596

96-
const typescript = language === 'ts';
97+
const [ts] = createPrinter(language === 'ts');
9798
const baseDBPath = path.resolve(cwd, directory.lib, 'server', 'db');
9899
const paths = {
99100
'drizzle config': path.resolve(cwd, `drizzle.config.${language}`),
@@ -349,7 +350,7 @@ export default defineAddon({
349350
js.imports.addNamed(ast, { from: 'drizzle-orm/d1', imports: ['drizzle'] });
350351

351352
const getDbFn = js.common.parseStatement(
352-
`export const getDb = (d1${typescript ? ': D1Database' : ''}) => drizzle(d1, { schema });`
353+
`export const getDb = (d1${ts(': D1Database')} => drizzle(d1, { schema });`
353354
);
354355

355356
ast.body.push(getDbFn);

packages/sv/src/addons/sveltekit-adapter.ts

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,7 @@ import {
55
transforms,
66
fileExists,
77
getPackageJson,
8-
sanitizeName,
9-
commonFilePaths
8+
sanitizeName
109
} from '@sveltejs/sv-utils';
1110
import { defineAddon, defineAddonOptions } from '../core/config.ts';
1211

@@ -47,7 +46,7 @@ export default defineAddon({
4746
setup: ({ isKit, unsupported }) => {
4847
if (!isKit) unsupported('Requires SvelteKit');
4948
},
50-
run: ({ sv, options, file, cwd, language }) => {
49+
run: ({ sv, options, file, cwd }) => {
5150
const adapter = adapters.find((a) => a.id === options.adapter)!;
5251

5352
// removes previously installed adapters
@@ -178,10 +177,7 @@ export default defineAddon({
178177
: transforms.json(({ data }) => applyWranglerConfig(data))
179178
);
180179

181-
const jsconfig = fileExists(cwd, commonFilePaths.jsconfig);
182-
const typeChecked = language === 'ts' || jsconfig;
183-
184-
if (typeChecked) {
180+
if (file.typeConfig) {
185181
sv.file(
186182
file.gitignore,
187183
transforms.text(({ content }) => {
@@ -200,9 +196,9 @@ export default defineAddon({
200196
})
201197
);
202198

203-
// Add Cloudflare generated types to tsconfig
199+
// Add Cloudflare generated types to jsconfig/tsconfig
204200
sv.file(
205-
jsconfig ? commonFilePaths.jsconfig : commonFilePaths.tsconfig,
201+
file.typeConfig,
206202
transforms.json(({ data }) => {
207203
data.compilerOptions ??= {};
208204
data.compilerOptions.types ??= [];

packages/sv/src/core/workspace.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ export type Workspace = {
3131
file: {
3232
viteConfig: 'vite.config.js' | 'vite.config.ts';
3333
svelteConfig: 'svelte.config.js' | 'svelte.config.ts';
34+
typeConfig: 'jsconfig.json' | 'tsconfig.json' | undefined;
3435
/** `${directory.routes}/layout.css` or `src/app.css` */
3536
stylesheet: `${string}/layout.css` | 'src/app.css';
3637
package: 'package.json';
@@ -75,9 +76,9 @@ export async function createWorkspace({
7576
const resolvedCwd = path.resolve(cwd);
7677

7778
// Will go up and prioritize jsconfig.json as it's first in the array
78-
const jtsConfigPath = find.any([commonFilePaths.jsconfig, commonFilePaths.tsconfig], { cwd });
79-
const typescript = jtsConfigPath?.endsWith(commonFilePaths.tsconfig) ?? false;
80-
79+
const typeConfigOptions = [commonFilePaths.jsconfig, commonFilePaths.tsconfig];
80+
const typeConfig = find.any(typeConfigOptions, { cwd }) as Workspace['file']['typeConfig'];
81+
const typescript = typeConfig?.endsWith(commonFilePaths.tsconfig) ?? false;
8182
// This is not linked with typescript detection
8283
const viteConfigPath = path.join(resolvedCwd, commonFilePaths.viteConfigTS);
8384
const viteConfig = fs.existsSync(viteConfigPath)
@@ -137,6 +138,7 @@ export async function createWorkspace({
137138
file: {
138139
viteConfig,
139140
svelteConfig,
141+
typeConfig,
140142
stylesheet,
141143
package: 'package.json',
142144
gitignore: '.gitignore',

0 commit comments

Comments
 (0)