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() {
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();
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
)
];
}
/**

@ -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)
});
}

Loading…
Cancel
Save