diff --git a/scripts/check-setup-needed.js b/scripts/check-setup-needed.js index d6929f045..154d6afe1 100644 --- a/scripts/check-setup-needed.js +++ b/scripts/check-setup-needed.js @@ -8,10 +8,11 @@ import path from 'path' import dotenv from 'dotenv' import { execSync } from 'child_process' import { L10N_CAGE_DIR, MARKDOWN_L10NS } from '../src/lib/l10n.ts' +import { importRuntimeWithoutVite } from './l10n/utils.ts' dotenv.config() -const runtimeModule = await import('../src/lib/paraglide/runtime.js') +const runtimeModule = await importRuntimeWithoutVite() let activeLocales = Array.from(runtimeModule.locales) let setupNeeded = false let reason = '' diff --git a/scripts/inlang-settings.ts b/scripts/inlang-settings.ts index 7aad0d6fc..326f67e0a 100644 --- a/scripts/inlang-settings.ts +++ b/scripts/inlang-settings.ts @@ -133,7 +133,7 @@ function regenerateSettings(verbose = false): void { strategy: ['url', 'cookie', 'preferredLanguage', 'baseLocale'], // Fix for Netlify Edge Functions (Deno runtime) disableAsyncLocalStorage: true, - isServer: "typeof window === 'undefined' || 'Deno' in globalThis" + isServer: 'import.meta.env.SSR' } // Only set urlPatterns for prefix-all-locales strategy diff --git a/scripts/l10n/run.ts b/scripts/l10n/run.ts index e41f4ff20..e5b5dc388 100644 --- a/scripts/l10n/run.ts +++ b/scripts/l10n/run.ts @@ -35,6 +35,7 @@ import { MESSAGE_L10NS, MESSAGE_SOURCE } from '../../src/lib/l10n.ts' +import { importRuntimeWithoutVite } from './utils.ts' // Load environment variables first dotenv.config() @@ -63,12 +64,12 @@ if (unknownArgs.length > 0) { } // Ensure inlang settings are current before importing runtime -execSync('tsx scripts/inlang-settings.ts', { stdio: 'ignore' }) +execSync('tsx scripts/inlang-settings.ts', { stdio: 'inherit' }) // This let / try / catch lets the ESM scan succeed in the absence of a runtime let locales: readonly string[] try { - const runtime = await import('../../src/lib/paraglide/runtime.js') + const runtime = await importRuntimeWithoutVite() locales = runtime.locales if (runtime.baseLocale !== 'en') throw new Error( diff --git a/scripts/l10n/utils.ts b/scripts/l10n/utils.ts index f8422fe73..4eebf4ef8 100644 --- a/scripts/l10n/utils.ts +++ b/scripts/l10n/utils.ts @@ -259,6 +259,20 @@ export function cullCommentary(filePath: string, verbose = false) { if (verbose) console.log(`✅ Culled LLM commentary in ${filePath}`) } catch (error) { - console.error(`Error cleaning up file ${filePath}:`, error.message) + console.error( + `Error cleaning up file ${filePath}:`, + error instanceof Error ? error.message : String(error) + ) } } + +export async function importRuntimeWithoutVite(): Promise< + typeof import('../../src/lib/paraglide/runtime.js') +> { + const runtimeString = await fs.readFile('src/lib/paraglide/runtime.js', 'utf-8') + const patchedRuntime = runtimeString.replace('import.meta.env.SSR', 'true') + const runtime = await import( + 'data:text/javascript;base64,' + Buffer.from(patchedRuntime).toString('base64') + ) + return runtime +} diff --git a/scripts/l10ntamer.ts b/scripts/l10ntamer.ts index 9ea8fccf2..ca7cdaecd 100644 --- a/scripts/l10ntamer.ts +++ b/scripts/l10ntamer.ts @@ -11,7 +11,9 @@ import fs from 'fs' import path from 'path' -import { locales, localizeHref } from '../src/lib/paraglide/runtime.js' +import { importRuntimeWithoutVite } from './l10n/utils.js' + +const { locales, localizeHref } = await importRuntimeWithoutVite() if (localizeHref('/test', { locale: 'en' }) === '/test') { console.log('⏭️ Skipping l10ntamer - English routes not prefixed') diff --git a/src/routes/api/simple-delay/+server.ts b/src/routes/api/simple-delay/+server.ts index 974867c5f..6897236ab 100644 --- a/src/routes/api/simple-delay/+server.ts +++ b/src/routes/api/simple-delay/+server.ts @@ -19,7 +19,7 @@ export async function GET({ url }) { } catch (error) { return new Response( JSON.stringify({ - error: error.message, + error: error instanceof Error ? error.message : String(error), elapsedMs: Date.now() - start }), { diff --git a/src/routes/api/test-timeout/+server.ts b/src/routes/api/test-timeout/+server.ts index a9e76b880..9e4205cf4 100644 --- a/src/routes/api/test-timeout/+server.ts +++ b/src/routes/api/test-timeout/+server.ts @@ -22,7 +22,7 @@ export async function GET({ url }) { index: i, success: false, elapsed: Date.now() - reqStart, - error: error.message + error: error instanceof Error ? error.message : String(error) }) break // Stop on first error } diff --git a/svelte.config.js b/svelte.config.js index 9d56365f1..704b11d0b 100644 --- a/svelte.config.js +++ b/svelte.config.js @@ -9,7 +9,7 @@ import remarkToc from 'remark-toc' import remarkHeadingId from 'remark-heading-id' import rehypeSlug from 'rehype-slug' -import { locales } from './src/lib/paraglide/runtime.js' +import settings from './project.inlang/settings.json' with { type: 'json' } // Export configuration flags for use in build scripts export const USE_EDGE_FUNCTIONS = true @@ -62,7 +62,7 @@ const config = { prerender: { // Allows dead links to be rendered handleHttpError: 'warn', - entries: ['*'].concat(locales.map((locale) => '/' + locale)) + entries: ['*'].concat(settings.locales.map((locale) => '/' + locale)) } } } diff --git a/vite.config.ts b/vite.config.ts index c240c4abc..4ddb306a3 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -6,7 +6,9 @@ import path from 'path' import { defineConfig } from 'vite' import { isDev } from './src/lib/env' import { MARKDOWN_L10NS } from './src/lib/l10n' -import { locales as compiledLocales } from './src/lib/paraglide/runtime' +import { importRuntimeWithoutVite } from './scripts/l10n/utils' + +const { locales: compiledLocales } = await importRuntimeWithoutVite() function getLocaleExcludePatterns(): RegExp[] { const md = path.resolve(MARKDOWN_L10NS)