|
1 | | -import MagicString from 'magic-string'; |
2 | 1 | import { colors, defineAddon, defineAddonOptions, log } from '@sveltejs/cli-core'; |
3 | 2 | import { common, imports, variables, exports, kit as kitJs, vite } from '@sveltejs/cli-core/js'; |
4 | 3 | import * as html from '@sveltejs/cli-core/html'; |
| 4 | +import * as svelte from '@sveltejs/cli-core/svelte'; |
5 | 5 | import { parseHtml, parseJson, parseScript, parseSvelte } from '@sveltejs/cli-core/parsers'; |
6 | 6 | import { addToDemoPage } from '../common.ts'; |
7 | 7 |
|
@@ -183,35 +183,34 @@ export default defineAddon({ |
183 | 183 |
|
184 | 184 | // add usage example |
185 | 185 | 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'] }); |
| 186 | + const { ast, generateCode } = parseSvelte(content); |
| 187 | + const scriptAst = svelte.ensureScript(ast, { langTs: typescript }); |
191 | 188 |
|
192 | | - const scriptCode = new MagicString(script.generateCode()); |
193 | | - |
194 | | - const templateCode = new MagicString(template.source); |
| 189 | + imports.addNamed(scriptAst, { imports: { m: 'm' }, from: '$lib/paraglide/messages.js' }); |
| 190 | + imports.addNamed(scriptAst, { |
| 191 | + imports: { |
| 192 | + setLocale: 'setLocale' |
| 193 | + }, |
| 194 | + from: '$lib/paraglide/runtime' |
| 195 | + }); |
195 | 196 |
|
196 | 197 | // add localized message |
197 | | - templateCode.append("\n\n<h1>{m.hello_world({ name: 'SvelteKit User' })}</h1>\n"); |
| 198 | + let templateCode = "<h1>{m.hello_world({ name: 'SvelteKit User' })}</h1>"; |
198 | 199 |
|
199 | 200 | // add links to other localized pages, the first one is the default |
200 | 201 | // language, thus it does not require any localized route |
201 | 202 | const { validLanguageTags } = parseLanguageTagInput(options.languageTags); |
202 | 203 | 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 | | - ); |
| 204 | + .map((x) => `<button onclick={() => setLocale('${x}')}>${x}</button>`) |
| 205 | + .join(''); |
| 206 | + templateCode += `<div>${links}</div>`; |
| 207 | + |
| 208 | + templateCode += |
| 209 | + '<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>'; |
213 | 210 |
|
214 | | - return generateCode({ script: scriptCode.toString(), template: templateCode.toString() }); |
| 211 | + ast.fragment.nodes.push(...svelte.toFragment(templateCode)); |
| 212 | + |
| 213 | + return generateCode(); |
215 | 214 | }); |
216 | 215 | } |
217 | 216 |
|
|
0 commit comments