diff --git a/apps/svelte.dev/package.json b/apps/svelte.dev/package.json index 1efb1c4ad2..cdfe44c6fc 100644 --- a/apps/svelte.dev/package.json +++ b/apps/svelte.dev/package.json @@ -57,6 +57,7 @@ "@sveltejs/enhanced-img": "^0.10.3", "@sveltejs/kit": "^2.53.2", "@sveltejs/site-kit": "workspace:*", + "@sveltejs/sv-utils": "^0.0.3", "@sveltejs/vite-plugin-svelte": "^7.0.0", "@types/node": "^20.19.33", "browserslist": "^4.28.1", @@ -73,7 +74,7 @@ "prettier-plugin-svelte": "^3.5.0", "satori": "^0.19.2", "satori-html": "^0.3.2", - "sv": "^0.12.2", + "sv": "^0.12.8", "svelte": "^5.53.5", "svelte-check": "^4.4.3", "svelte-preprocess": "^6.0.3", diff --git a/apps/svelte.dev/scripts/sync-docs/index.ts b/apps/svelte.dev/scripts/sync-docs/index.ts index c41eefc6a0..e6524d6110 100644 --- a/apps/svelte.dev/scripts/sync-docs/index.ts +++ b/apps/svelte.dev/scripts/sync-docs/index.ts @@ -9,7 +9,7 @@ import ts from 'typescript'; import glob from 'tiny-glob/sync.js'; import chokidar from 'chokidar'; import { fileURLToPath } from 'node:url'; -import { clone_repo, migrate_meta_json } from './utils.ts'; +import { clone_repo, invoke, migrate_meta_json } from './utils.ts'; import { get_types, read_d_ts_file, read_types } from './types.ts'; import type { Modules } from '@sveltejs/site-kit/markdown'; import { generate_crosslinks } from './crosslinks.ts'; @@ -24,6 +24,7 @@ interface Package { docs: string; types: string | null; process_modules?: (modules: Modules, pkg: Package) => Promise; + post_clone?: (dir: string) => Promise; } const get_trigger = (pkg: Package) => pkg.trigger ?? pkg.name; @@ -79,6 +80,26 @@ const get_downstream_repo = (name: string) => { return `${owner}/${downstream}`; }; +function patch_node_modules( + cloned_dir: string, + pkg_subdir: string, + npm_name: string, + onlyDirs?: string[] +) { + const source = path.join(cloned_dir, pkg_subdir); + const target = path.join(dirname, '../../node_modules', npm_name); + if (onlyDirs) { + for (const dir of onlyDirs) { + const t = path.join(target, dir); + fs.rmSync(t, { recursive: true, force: true }); + fs.cpSync(path.join(source, dir), t, { recursive: true }); + } + } else { + fs.rmSync(target, { force: true }); + fs.symlinkSync(source, target); + } +} + const packages: Package[] = [ { name: 'svelte', @@ -87,6 +108,9 @@ const packages: Package[] = [ pkg: 'packages/svelte', docs: 'documentation/docs', types: 'types', + post_clone: async (dir) => { + patch_node_modules(dir, 'packages/svelte', 'svelte', ['types']); + }, process_modules: async (modules: Modules) => { // Remove $$_attributes from ActionReturn const module_with_ActionReturn = modules.find((m) => @@ -111,6 +135,9 @@ const packages: Package[] = [ pkg: 'packages/kit', docs: 'documentation/docs', types: 'types', + post_clone: async (dir) => { + patch_node_modules(dir, 'packages/kit', '@sveltejs/kit', ['types']); + }, process_modules: async (modules, pkg) => { const kit_base = `${REPOS}/${pkg.name}/${pkg.pkg}/`; @@ -170,7 +197,14 @@ const packages: Package[] = [ branch: branches['cli']?.branch ?? 'main', pkg: 'packages/sv', docs: 'documentation/docs', - types: null + types: null, + post_clone: async (dir) => { + await invoke('npx', ['pnpm@10', 'install'], { cwd: dir }); + await invoke('npx', ['pnpm@10', 'build'], { cwd: dir }); + + patch_node_modules(dir, 'packages/sv', 'sv'); + patch_node_modules(dir, 'packages/sv-utils', '@sveltejs/sv-utils'); + } }, { name: 'ai', @@ -213,6 +247,9 @@ if (parsed.values.pull) { for (const pkg of filtered) { await clone_repo(`https://github.com/${pkg.repo}.git`, pkg.name, pkg.branch, REPOS); + if (pkg.post_clone) { + await pkg.post_clone(`${REPOS}/${pkg.name}`); + } } } diff --git a/packages/site-kit/src/lib/markdown/renderer.ts b/packages/site-kit/src/lib/markdown/renderer.ts index 9b4a46db80..b8188aed85 100644 --- a/packages/site-kit/src/lib/markdown/renderer.ts +++ b/packages/site-kit/src/lib/markdown/renderer.ts @@ -1113,7 +1113,7 @@ async function syntax_highlight({ compilerOptions: { allowJs: true, checkJs: true, - types: ['svelte', '@sveltejs/kit', 'sv'] + types: ['svelte', '@sveltejs/kit', 'sv', '@sveltejs/sv-utils'] } }, // by default, twoslash does not run on .js files, change that through this option diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index da8f2c673c..0414be3207 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -129,6 +129,9 @@ importers: '@sveltejs/site-kit': specifier: workspace:* version: link:../../packages/site-kit + '@sveltejs/sv-utils': + specifier: ^0.0.3 + version: 0.0.3 '@sveltejs/vite-plugin-svelte': specifier: ^7.0.0 version: 7.0.0(svelte@5.53.5)(vite@8.0.0-beta.15(@types/node@20.19.33)(esbuild@0.27.3)(tsx@4.21.0)) @@ -178,8 +181,8 @@ importers: specifier: ^0.3.2 version: 0.3.2 sv: - specifier: ^0.12.2 - version: 0.12.2 + specifier: ^0.12.8 + version: 0.12.8 svelte: specifier: ^5.53.5 version: 5.53.5 @@ -1742,6 +1745,9 @@ packages: peerDependencies: svelte: ^3.44.0 || ^4.0.0 || ^5.0.0-next.1 + '@sveltejs/sv-utils@0.0.3': + resolution: {integrity: sha512-rILMrx0zQMR0OlFXR/peTu+9z6x/5iOsEiWJelkI670WPWdAunikKLQrIE7zN8U/8DjN5WBvIWu0OAyEuZ4ohA==} + '@sveltejs/svelte-json-tree@2.2.1': resolution: {integrity: sha512-M8l23/R3y1fI2+RaOzfUzmkysTWWsw/NClUgGpvydl9vXRonPN1/btQQievaNyeWNfUj12tjPfh5yTrXWpaKkg==} engines: {pnpm: ^9.0.0} @@ -3160,8 +3166,8 @@ packages: style-mod@4.1.3: resolution: {integrity: sha512-i/n8VsZydrugj3Iuzll8+x/00GH2vnYsk1eomD8QiRrSAeW6ItbCQDtfXCeJHd0iwiNagqjQkvpvREEPtW3IoQ==} - sv@0.12.2: - resolution: {integrity: sha512-W1jn3pjIjVDOjM04JBY5jACsvotE198ahRQm8zuv5hMY6UHrB5ucpwIbPIYEeoXSPjirrLr1rcQ46S+tvFb3vw==} + sv@0.12.8: + resolution: {integrity: sha512-sTe/Lbc5HsT8rCoUhvwi8zFi+d819/pdI5z9JDObISuhhG0j4tFNNcyaJ0AoZwKVCfo3JYroz8ECCtoMz+2Ncw==} hasBin: true svelte-check@4.4.3: @@ -4881,6 +4887,8 @@ snapshots: transitivePeerDependencies: - typescript + '@sveltejs/sv-utils@0.0.3': {} + '@sveltejs/svelte-json-tree@2.2.1(svelte@5.53.5)': dependencies: svelte: 5.53.5 @@ -6436,7 +6444,9 @@ snapshots: style-mod@4.1.3: {} - sv@0.12.2: {} + sv@0.12.8: + dependencies: + '@sveltejs/sv-utils': 0.0.3 svelte-check@4.4.3(picomatch@4.0.3)(svelte@5.53.5)(typescript@5.9.3): dependencies: