Skip to content

Commit ccf1ab3

Browse files
committed
fix paraglide
1 parent e4af8c7 commit ccf1ab3

File tree

1 file changed

+31
-21
lines changed

1 file changed

+31
-21
lines changed

packages/addons/paraglide/index.ts

Lines changed: 31 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import MagicString from 'magic-string';
21
import { colors, defineAddon, defineAddonOptions, log } from '@sveltejs/cli-core';
32
import { common, imports, variables, exports, kit as kitJs, vite } from '@sveltejs/cli-core/js';
43
import * as html from '@sveltejs/cli-core/html';
@@ -183,35 +182,46 @@ export default defineAddon({
183182

184183
// add usage example
185184
sv.file(`${kit.routesDirectory}/demo/paraglide/+page.svelte`, (content) => {
186-
const { script, template, generateCode } = parseSvelte(content, { typescript });
187-
imports.addNamed(script.ast, { from: '$lib/paraglide/messages.js', imports: ['m'] });
188-
imports.addNamed(script.ast, { from: '$app/navigation', imports: ['goto'] });
189-
imports.addNamed(script.ast, { from: '$app/state', imports: ['page'] });
190-
imports.addNamed(script.ast, { from: '$lib/paraglide/runtime', imports: ['setLocale'] });
191-
192-
const scriptCode = new MagicString(script.generateCode());
185+
const { ast, generateCode } = parseSvelte(content);
186+
187+
let scriptAst = ast.instance?.content;
188+
if (!scriptAst) {
189+
scriptAst = parseScript('').ast;
190+
ast.instance = {
191+
type: 'Script',
192+
start: 0,
193+
end: 0,
194+
context: 'default',
195+
attributes: [],
196+
content: scriptAst
197+
};
198+
}
193199

194-
const templateCode = new MagicString(template.source);
200+
imports.addNamed(scriptAst, { imports: { m: 'm' }, from: '$lib/paraglide/messages.js' });
201+
imports.addNamed(scriptAst, {
202+
imports: {
203+
setLocale: 'setLocale'
204+
},
205+
from: '$lib/paraglide/runtime'
206+
});
195207

196208
// add localized message
197-
templateCode.append("\n\n<h1>{m.hello_world({ name: 'SvelteKit User' })}</h1>\n");
209+
let templateCode = "<h1>{m.hello_world({ name: 'SvelteKit User' })}</h1>";
198210

199211
// add links to other localized pages, the first one is the default
200212
// language, thus it does not require any localized route
201213
const { validLanguageTags } = parseLanguageTagInput(options.languageTags);
202214
const links = validLanguageTags
203-
.map(
204-
(x) =>
205-
`${templateCode.getIndentString()}<button onclick={() => setLocale('${x}')}>${x}</button>`
206-
)
207-
.join('\n');
208-
templateCode.append(`<div>\n${links}\n</div>`);
209-
210-
templateCode.append(
211-
'<p>\nIf you use VSCode, install the <a href="https://marketplace.visualstudio.com/items?itemName=inlang.vs-code-extension" target="_blank">Sherlock i18n extension</a> for a better i18n experience.\n</p>'
212-
);
215+
.map((x) => `<button onclick={() => setLocale('${x}')}>${x}</button>`)
216+
.join('');
217+
templateCode += `<div>${links}</div>`;
213218

214-
return generateCode({ script: scriptCode.toString(), template: templateCode.toString() });
219+
templateCode +=
220+
'<p>If you use VSCode, install the <a href="https://marketplace.visualstudio.com/items?itemName=inlang.vs-code-extension" target="_blank">Sherlock i18n extension</a> for a better i18n experience.</p>';
221+
222+
ast.fragment.nodes.push(...html.toSvelteFragment(templateCode));
223+
224+
return generateCode();
215225
});
216226
}
217227

0 commit comments

Comments
 (0)