From 33a86145fcf506a2db8f8874315d7a509bd67a28 Mon Sep 17 00:00:00 2001 From: Puru Vijay Date: Wed, 12 Apr 2023 15:52:34 +0530 Subject: [PATCH] Move ts sourcefile stuff to compile-types --- .../scripts/type-gen/compile-types.js | 26 ++++-- sites/svelte.dev/scripts/type-gen/index.js | 84 +++++++++---------- 2 files changed, 56 insertions(+), 54 deletions(-) diff --git a/sites/svelte.dev/scripts/type-gen/compile-types.js b/sites/svelte.dev/scripts/type-gen/compile-types.js index d40d402d45..ca9374fb42 100644 --- a/sites/svelte.dev/scripts/type-gen/compile-types.js +++ b/sites/svelte.dev/scripts/type-gen/compile-types.js @@ -11,7 +11,7 @@ get_bundled_types(); export async function get_bundled_types() { const dtsSources = fs.readdirSync(new URL('./dts-sources', import.meta.url)); - /** @type {Map} */ + /** @type {Map} */ const codes = new Map(); for (const file of dtsSources) { @@ -22,14 +22,14 @@ export async function get_bundled_types() { const moduleName = (file === 'index.d.ts' ? 'svelte' : `svelte/${file}`).replace('.d.ts', ''); const code = await bundle.generate({ format: 'esm' }).then(({ output }) => output[0].code); - const inlinedExportDeclarationCode = useExportDeclarations(code); + const [inlined_export_declaration_code, ts_source_file] = useExportDeclarations(code); - codes.set(moduleName, inlinedExportDeclarationCode); + codes.set(moduleName, { code: inlined_export_declaration_code, ts_source_file }); - // !IMPORTANT: This is for debugging purposes only. Do not remove until Svelte d.ts files - // !are stable during v4/v5 + // !IMPORTANT: This is for debugging purposes only. + // !Do not remove until Svelte d.ts files are stable during v4/v5 write_to_node_modules('before', file, code); - write_to_node_modules('after', file, inlinedExportDeclarationCode); + write_to_node_modules('after', file, inlined_export_declaration_code); } return codes; @@ -37,6 +37,7 @@ export async function get_bundled_types() { /** * @param {string} str + * @returns {[string, ts.SourceFile]} */ function useExportDeclarations(str) { const magicStr = new MagicString(str); @@ -54,7 +55,7 @@ function useExportDeclarations(str) { ts.isExportDeclaration(statement) ); - if (exportDeclaration && !ts.isExportDeclaration(exportDeclaration)) return str; + if (exportDeclaration && !ts.isExportDeclaration(exportDeclaration)) return [str, sourceFile]; // @ts-ignore Why does TS not identify `elements` const exportedSymbols = exportDeclaration?.exportClause?.elements.map( @@ -89,7 +90,16 @@ function useExportDeclarations(str) { // In case it is export declare VERSION = '__VERSION__', replace it with svelte's real version magicStr.replace('__VERSION__', VERSION); - return magicStr.toString() ?? str; + return [ + magicStr.toString() ?? str, + ts.createSourceFile( + 'index.d.ts', + magicStr.toString() ?? str, + ts.ScriptTarget.ESNext, + true, + ts.ScriptKind.TS + ) + ]; } /** diff --git a/sites/svelte.dev/scripts/type-gen/index.js b/sites/svelte.dev/scripts/type-gen/index.js index e23833c9dc..bfb47fe779 100644 --- a/sites/svelte.dev/scripts/type-gen/index.js +++ b/sites/svelte.dev/scripts/type-gen/index.js @@ -118,7 +118,7 @@ function munge_type_element(member, depth = 1) { // @ts-ignore const doc = member.jsDoc?.[0]; - /** @type {string} */ + /** @type {string[]} */ const children = []; const name = member.name?.escapedText; @@ -206,117 +206,109 @@ function read_d_ts_file(str) { const bundled_types = await get_bundled_types(); { - const code = bundled_types.get('svelte/compiler') ?? ''; - // console.log(code); - const node = ts.createSourceFile('compiler/index.d.ts', code, ts.ScriptTarget.Latest, true); + const module = bundled_types.get('svelte/compiler'); + + if (!module) throw new Error('Could not find svelte/compiler'); modules.push({ name: 'svelte/compiler', comment: '', - ...get_types(code, node.statements) + ...get_types(module.code, module.ts_source_file.statements) }); } { - const code = bundled_types.get('svelte/runtime') ?? ''; - const node = ts.createSourceFile('runtime/index.d.ts', code, ts.ScriptTarget.Latest, true); + const module = bundled_types.get('svelte/runtime'); + + if (!module) throw new Error('Could not find svelte/runtime'); modules.push({ - name: 'svelte', + name: 'svelte/runtime', comment: '', - ...get_types(code, node.statements) + ...get_types(module.code, module.ts_source_file.statements) }); } - { - const code = bundled_types.get('svelte/action') ?? ''; - const node = ts.createSourceFile('runtime/action/index.d.ts', code, ts.ScriptTarget.Latest, true); + const module = bundled_types.get('svelte/action'); + + if (!module) throw new Error('Could not find svelte/action'); modules.push({ name: 'svelte/action', comment: '', - ...get_types(code, node.statements) + ...get_types(module.code, module.ts_source_file.statements) }); } { - const code = bundled_types.get('svelte/animate') ?? ''; - const node = ts.createSourceFile( - 'runtime/animate/index.d.ts', - code, - ts.ScriptTarget.Latest, - true - ); + const module = bundled_types.get('svelte/animate'); + + if (!module) throw new Error('Could not find svelte/animate'); modules.push({ name: 'svelte/animate', comment: '', - ...get_types(code, node.statements) + ...get_types(module.code, module.ts_source_file.statements) }); } { - const code = bundled_types.get('svelte/easing') ?? ''; - const node = ts.createSourceFile('runtime/easing/index.d.ts', code, ts.ScriptTarget.Latest, true); + const module = bundled_types.get('svelte/easing'); + + if (!module) throw new Error('Could not find svelte/easing'); modules.push({ name: 'svelte/easing', comment: '', - ...get_types(code, node.statements) + ...get_types(module.code, module.ts_source_file.statements) }); } { - const code = bundled_types.get('svelte/motion') ?? ''; - const node = ts.createSourceFile('runtime/motion/index.d.ts', code, ts.ScriptTarget.Latest, true); + const module = bundled_types.get('svelte/motion'); + + if (!module) throw new Error('Could not find svelte/motion'); modules.push({ name: 'svelte/motion', comment: '', - ...get_types(code, node.statements) + ...get_types(module.code, module.ts_source_file.statements) }); } { - const code = bundled_types.get('svelte/store') ?? ''; - const node = ts.createSourceFile('runtime/store/index.d.ts', code, ts.ScriptTarget.Latest, true); + const module = bundled_types.get('svelte/store'); + + if (!module) throw new Error('Could not find svelte/store'); modules.push({ name: 'svelte/store', comment: '', - ...get_types(code, node.statements) + ...get_types(module.code, module.ts_source_file.statements) }); } { - const code = bundled_types.get('svelte/transition') ?? ''; - const node = ts.createSourceFile( - 'runtime/transition/index.d.ts', - code, - ts.ScriptTarget.Latest, - true - ); + const module = bundled_types.get('svelte/transition'); + + if (!module) throw new Error('Could not find svelte/transition'); modules.push({ name: 'svelte/transition', comment: '', - ...get_types(code, node.statements) + ...get_types(module.code, module.ts_source_file.statements) }); } { - const code = bundled_types.get('svelte/internal') ?? ''; - const node = ts.createSourceFile( - 'runtime/internal/index.d.ts', - code, - ts.ScriptTarget.Latest, - true - ); + const module = bundled_types.get('svelte/internal'); + + if (!module) throw new Error('Could not find svelte/internal'); modules.push({ name: 'svelte/internal', comment: '', - ...get_types(code, node.statements) + ...get_types(module.code, module.ts_source_file.statements) }); }