Move ts sourcefile stuff to compile-types

pull/8452/head
Puru Vijay 3 years ago
parent ea0cfafbed
commit 33a86145fc

@ -11,7 +11,7 @@ get_bundled_types();
export async function get_bundled_types() { export async function get_bundled_types() {
const dtsSources = fs.readdirSync(new URL('./dts-sources', import.meta.url)); const dtsSources = fs.readdirSync(new URL('./dts-sources', import.meta.url));
/** @type {Map<string, string>} */ /** @type {Map<string, {code: string, ts_source_file: ts.SourceFile}>} */
const codes = new Map(); const codes = new Map();
for (const file of dtsSources) { 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 moduleName = (file === 'index.d.ts' ? 'svelte' : `svelte/${file}`).replace('.d.ts', '');
const code = await bundle.generate({ format: 'esm' }).then(({ output }) => output[0].code); 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 // !IMPORTANT: This is for debugging purposes only.
// !are stable during v4/v5 // !Do not remove until Svelte d.ts files are stable during v4/v5
write_to_node_modules('before', file, code); 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; return codes;
@ -37,6 +37,7 @@ export async function get_bundled_types() {
/** /**
* @param {string} str * @param {string} str
* @returns {[string, ts.SourceFile]}
*/ */
function useExportDeclarations(str) { function useExportDeclarations(str) {
const magicStr = new MagicString(str); const magicStr = new MagicString(str);
@ -54,7 +55,7 @@ function useExportDeclarations(str) {
ts.isExportDeclaration(statement) 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` // @ts-ignore Why does TS not identify `elements`
const exportedSymbols = exportDeclaration?.exportClause?.elements.map( 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 // In case it is export declare VERSION = '__VERSION__', replace it with svelte's real version
magicStr.replace('__VERSION__', 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
)
];
} }
/** /**

@ -118,7 +118,7 @@ function munge_type_element(member, depth = 1) {
// @ts-ignore // @ts-ignore
const doc = member.jsDoc?.[0]; const doc = member.jsDoc?.[0];
/** @type {string} */ /** @type {string[]} */
const children = []; const children = [];
const name = member.name?.escapedText; const name = member.name?.escapedText;
@ -206,117 +206,109 @@ function read_d_ts_file(str) {
const bundled_types = await get_bundled_types(); const bundled_types = await get_bundled_types();
{ {
const code = bundled_types.get('svelte/compiler') ?? ''; const module = bundled_types.get('svelte/compiler');
// console.log(code);
const node = ts.createSourceFile('compiler/index.d.ts', code, ts.ScriptTarget.Latest, true); if (!module) throw new Error('Could not find svelte/compiler');
modules.push({ modules.push({
name: 'svelte/compiler', name: 'svelte/compiler',
comment: '', comment: '',
...get_types(code, node.statements) ...get_types(module.code, module.ts_source_file.statements)
}); });
} }
{ {
const code = bundled_types.get('svelte/runtime') ?? ''; const module = bundled_types.get('svelte/runtime');
const node = ts.createSourceFile('runtime/index.d.ts', code, ts.ScriptTarget.Latest, true);
if (!module) throw new Error('Could not find svelte/runtime');
modules.push({ modules.push({
name: 'svelte', name: 'svelte/runtime',
comment: '', comment: '',
...get_types(code, node.statements) ...get_types(module.code, module.ts_source_file.statements)
}); });
} }
{ {
const code = bundled_types.get('svelte/action') ?? ''; const module = bundled_types.get('svelte/action');
const node = ts.createSourceFile('runtime/action/index.d.ts', code, ts.ScriptTarget.Latest, true);
if (!module) throw new Error('Could not find svelte/action');
modules.push({ modules.push({
name: 'svelte/action', name: 'svelte/action',
comment: '', comment: '',
...get_types(code, node.statements) ...get_types(module.code, module.ts_source_file.statements)
}); });
} }
{ {
const code = bundled_types.get('svelte/animate') ?? ''; const module = bundled_types.get('svelte/animate');
const node = ts.createSourceFile(
'runtime/animate/index.d.ts', if (!module) throw new Error('Could not find svelte/animate');
code,
ts.ScriptTarget.Latest,
true
);
modules.push({ modules.push({
name: 'svelte/animate', name: 'svelte/animate',
comment: '', comment: '',
...get_types(code, node.statements) ...get_types(module.code, module.ts_source_file.statements)
}); });
} }
{ {
const code = bundled_types.get('svelte/easing') ?? ''; const module = bundled_types.get('svelte/easing');
const node = ts.createSourceFile('runtime/easing/index.d.ts', code, ts.ScriptTarget.Latest, true);
if (!module) throw new Error('Could not find svelte/easing');
modules.push({ modules.push({
name: 'svelte/easing', name: 'svelte/easing',
comment: '', comment: '',
...get_types(code, node.statements) ...get_types(module.code, module.ts_source_file.statements)
}); });
} }
{ {
const code = bundled_types.get('svelte/motion') ?? ''; const module = bundled_types.get('svelte/motion');
const node = ts.createSourceFile('runtime/motion/index.d.ts', code, ts.ScriptTarget.Latest, true);
if (!module) throw new Error('Could not find svelte/motion');
modules.push({ modules.push({
name: 'svelte/motion', name: 'svelte/motion',
comment: '', comment: '',
...get_types(code, node.statements) ...get_types(module.code, module.ts_source_file.statements)
}); });
} }
{ {
const code = bundled_types.get('svelte/store') ?? ''; const module = bundled_types.get('svelte/store');
const node = ts.createSourceFile('runtime/store/index.d.ts', code, ts.ScriptTarget.Latest, true);
if (!module) throw new Error('Could not find svelte/store');
modules.push({ modules.push({
name: 'svelte/store', name: 'svelte/store',
comment: '', comment: '',
...get_types(code, node.statements) ...get_types(module.code, module.ts_source_file.statements)
}); });
} }
{ {
const code = bundled_types.get('svelte/transition') ?? ''; const module = bundled_types.get('svelte/transition');
const node = ts.createSourceFile(
'runtime/transition/index.d.ts', if (!module) throw new Error('Could not find svelte/transition');
code,
ts.ScriptTarget.Latest,
true
);
modules.push({ modules.push({
name: 'svelte/transition', name: 'svelte/transition',
comment: '', comment: '',
...get_types(code, node.statements) ...get_types(module.code, module.ts_source_file.statements)
}); });
} }
{ {
const code = bundled_types.get('svelte/internal') ?? ''; const module = bundled_types.get('svelte/internal');
const node = ts.createSourceFile(
'runtime/internal/index.d.ts', if (!module) throw new Error('Could not find svelte/internal');
code,
ts.ScriptTarget.Latest,
true
);
modules.push({ modules.push({
name: 'svelte/internal', name: 'svelte/internal',
comment: '', comment: '',
...get_types(code, node.statements) ...get_types(module.code, module.ts_source_file.statements)
}); });
} }

Loading…
Cancel
Save