diff --git a/packages/sv/src/addons/better-auth.ts b/packages/sv/src/addons/better-auth.ts index db0e813fa..406e46130 100644 --- a/packages/sv/src/addons/better-auth.ts +++ b/packages/sv/src/addons/better-auth.ts @@ -354,8 +354,8 @@ const addon: Addon, 'better-auth'> = defineAddon ? ` signInEmail: async (event) => {${d1AuthLine} const formData = await event.request.formData(); - const email = formData.get('email')?.toString() ?? ''; - const password = formData.get('password')?.toString() ?? ''; + const email = parseEntry(formData.get('email')); + const password = parseEntry(formData.get('password')); try { await auth.api.signInEmail({ @@ -376,9 +376,9 @@ const addon: Addon, 'better-auth'> = defineAddon }, signUpEmail: async (event) => {${d1AuthLine} const formData = await event.request.formData(); - const email = formData.get('email')?.toString() ?? ''; - const password = formData.get('password')?.toString() ?? ''; - const name = formData.get('name')?.toString() ?? ''; + const email = parseEntry(formData.get('email')); + const password = parseEntry(formData.get('password')); + const name = parseEntry(formData.get('name')); try { await auth.api.signUpEmail({ @@ -404,8 +404,8 @@ const addon: Addon, 'better-auth'> = defineAddon ? ` signInSocial: async (event) => {${d1AuthLine} const formData = await event.request.formData(); - const provider = formData.get('provider')?.toString() ?? 'github'; - const callbackURL = formData.get('callbackURL')?.toString() ?? '/demo/better-auth'; + const provider = parseEntry(formData.get('provider')) || 'github'; + const callbackURL = parseEntry(formData.get('callbackURL')) || '/demo/better-auth'; const result = await auth.api.signInSocial({ body: { @@ -430,6 +430,9 @@ const addon: Addon, 'better-auth'> = defineAddon ${!d1 ? `import { auth } from '${lib}/server/auth.${language}';` : ''} ${needsAPIError ? "import { APIError } from 'better-auth/api';" : ''} + const parseEntry = (input${ts(' : FormDataEntryValue | null')}): string => + input instanceof File ? input.name : (input ?? ''); + export const load${ts(': PageServerLoad')} = (event) => { if (event.locals.user) { return redirect(302, '/demo/better-auth'); diff --git a/packages/sv/src/addons/eslint.ts b/packages/sv/src/addons/eslint.ts index 7f1b8b0ac..a4db484d4 100644 --- a/packages/sv/src/addons/eslint.ts +++ b/packages/sv/src/addons/eslint.ts @@ -56,7 +56,7 @@ export default defineAddon({ eslintConfigs.push(jsConfig); if (typescript) { - const tsConfig = js.common.parseExpression('ts.configs.recommended'); + const tsConfig = js.common.parseExpression('ts.configs.recommendedTypeChecked'); eslintConfigs.push(tsConfig); } @@ -83,8 +83,10 @@ export default defineAddon({ ' see: https://typescript-eslint.io/troubleshooting/faqs/eslint/#i-get-errors-from-the-no-undef-rule-about-global-variables-not-being-defined-even-though-there-are-no-typescript-errors' }); + const tsOptions = { projectService: { allowDefaultProject: ['*.js'] } }; const globalsConfig = js.object.create({ languageOptions: { + parserOptions: typescript ? tsOptions : undefined, globals: globalsObjLiteral }, rules: typescript ? rules : undefined diff --git a/packages/sv/src/cli/tests/snapshots/create-experimental/src/routes/demo/better-auth/login/+page.server.ts b/packages/sv/src/cli/tests/snapshots/create-experimental/src/routes/demo/better-auth/login/+page.server.ts index babb9e0fe..72696a357 100644 --- a/packages/sv/src/cli/tests/snapshots/create-experimental/src/routes/demo/better-auth/login/+page.server.ts +++ b/packages/sv/src/cli/tests/snapshots/create-experimental/src/routes/demo/better-auth/login/+page.server.ts @@ -4,6 +4,9 @@ import type { PageServerLoad } from './$types'; import { auth } from '#lib/server/auth.ts'; import { APIError } from 'better-auth/api'; +const parseEntry = (input : FormDataEntryValue | null): string => + input instanceof File ? input.name : (input ?? ''); + export const load: PageServerLoad = (event) => { if (event.locals.user) { return redirect(302, '/demo/better-auth'); @@ -14,8 +17,8 @@ export const load: PageServerLoad = (event) => { export const actions: Actions = { signInEmail: async (event) => { const formData = await event.request.formData(); - const email = formData.get('email')?.toString() ?? ''; - const password = formData.get('password')?.toString() ?? ''; + const email = parseEntry(formData.get('email')); + const password = parseEntry(formData.get('password')); try { await auth.api.signInEmail({ @@ -36,9 +39,9 @@ export const actions: Actions = { }, signUpEmail: async (event) => { const formData = await event.request.formData(); - const email = formData.get('email')?.toString() ?? ''; - const password = formData.get('password')?.toString() ?? ''; - const name = formData.get('name')?.toString() ?? ''; + const email = parseEntry(formData.get('email')); + const password = parseEntry(formData.get('password')); + const name = parseEntry(formData.get('name')); try { await auth.api.signUpEmail({ @@ -60,8 +63,8 @@ export const actions: Actions = { }, signInSocial: async (event) => { const formData = await event.request.formData(); - const provider = formData.get('provider')?.toString() ?? 'github'; - const callbackURL = formData.get('callbackURL')?.toString() ?? '/demo/better-auth'; + const provider = parseEntry(formData.get('provider')) || 'github'; + const callbackURL = parseEntry(formData.get('callbackURL')) || '/demo/better-auth'; const result = await auth.api.signInSocial({ body: { 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 e46c5b535..6cd9d5f90 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 @@ -11,12 +11,15 @@ const gitignorePath = path.resolve(import.meta.dirname, '.gitignore'); export default defineConfig( includeIgnoreFile(gitignorePath), js.configs.recommended, - ts.configs.recommended, + ts.configs.recommendedTypeChecked, svelte.configs.recommended, prettier, svelte.configs.prettier, { - languageOptions: { globals: { ...globals.browser, ...globals.node } }, + languageOptions: { + parserOptions: { projectService: { allowDefaultProject: ['*.js'] } }, + globals: { ...globals.browser, ...globals.node } + }, rules: { // typescript-eslint strongly recommend that you do not use the no-undef lint rule on TypeScript projects. // see: https://typescript-eslint.io/troubleshooting/faqs/eslint/#i-get-errors-from-the-no-undef-rule-about-global-variables-not-being-defined-even-though-there-are-no-typescript-errors diff --git a/packages/sv/src/cli/tests/snapshots/create-with-all-addons/src/routes/demo/better-auth/login/+page.server.ts b/packages/sv/src/cli/tests/snapshots/create-with-all-addons/src/routes/demo/better-auth/login/+page.server.ts index babb9e0fe..72696a357 100644 --- a/packages/sv/src/cli/tests/snapshots/create-with-all-addons/src/routes/demo/better-auth/login/+page.server.ts +++ b/packages/sv/src/cli/tests/snapshots/create-with-all-addons/src/routes/demo/better-auth/login/+page.server.ts @@ -4,6 +4,9 @@ import type { PageServerLoad } from './$types'; import { auth } from '#lib/server/auth.ts'; import { APIError } from 'better-auth/api'; +const parseEntry = (input : FormDataEntryValue | null): string => + input instanceof File ? input.name : (input ?? ''); + export const load: PageServerLoad = (event) => { if (event.locals.user) { return redirect(302, '/demo/better-auth'); @@ -14,8 +17,8 @@ export const load: PageServerLoad = (event) => { export const actions: Actions = { signInEmail: async (event) => { const formData = await event.request.formData(); - const email = formData.get('email')?.toString() ?? ''; - const password = formData.get('password')?.toString() ?? ''; + const email = parseEntry(formData.get('email')); + const password = parseEntry(formData.get('password')); try { await auth.api.signInEmail({ @@ -36,9 +39,9 @@ export const actions: Actions = { }, signUpEmail: async (event) => { const formData = await event.request.formData(); - const email = formData.get('email')?.toString() ?? ''; - const password = formData.get('password')?.toString() ?? ''; - const name = formData.get('name')?.toString() ?? ''; + const email = parseEntry(formData.get('email')); + const password = parseEntry(formData.get('password')); + const name = parseEntry(formData.get('name')); try { await auth.api.signUpEmail({ @@ -60,8 +63,8 @@ export const actions: Actions = { }, signInSocial: async (event) => { const formData = await event.request.formData(); - const provider = formData.get('provider')?.toString() ?? 'github'; - const callbackURL = formData.get('callbackURL')?.toString() ?? '/demo/better-auth'; + const provider = parseEntry(formData.get('provider')) || 'github'; + const callbackURL = parseEntry(formData.get('callbackURL')) || '/demo/better-auth'; const result = await auth.api.signInSocial({ body: { diff --git a/packages/sv/src/create/templates/demo/src/routes/sverdle/+page.svelte b/packages/sv/src/create/templates/demo/src/routes/sverdle/+page.svelte index d38265b24..927ffe68a 100644 --- a/packages/sv/src/create/templates/demo/src/routes/sverdle/+page.svelte +++ b/packages/sv/src/create/templates/demo/src/routes/sverdle/+page.svelte @@ -105,9 +105,9 @@ action="?/enter" use:enhance={() => { // prevent default callback from resetting the form - return ({ result, update }) => { + return async ({ result, update }) => { shake = result.type === 'failure'; - update({ reset: false }); + await update({ reset: false }); }; }} >