|
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'; |
@@ -183,35 +182,46 @@ export default defineAddon({ |
183 | 182 |
|
184 | 183 | // add usage example |
185 | 184 | 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 | + } |
193 | 199 |
|
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 | + }); |
195 | 207 |
|
196 | 208 | // 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>"; |
198 | 210 |
|
199 | 211 | // add links to other localized pages, the first one is the default |
200 | 212 | // language, thus it does not require any localized route |
201 | 213 | const { validLanguageTags } = parseLanguageTagInput(options.languageTags); |
202 | 214 | 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>`; |
213 | 218 |
|
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(); |
215 | 225 | }); |
216 | 226 | } |
217 | 227 |
|
|
0 commit comments