Refactor compile-types.js

pull/8452/head
Puru Vijay 3 years ago
parent 6b95c24110
commit ea0cfafbed

@ -6,6 +6,8 @@ import dts from 'rollup-plugin-dts';
import ts from 'typescript'; import ts from 'typescript';
import { VERSION } from 'svelte/compiler'; import { VERSION } from 'svelte/compiler';
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));
@ -16,19 +18,18 @@ export async function get_bundled_types() {
const bundle = await rollup({ const bundle = await rollup({
input: new URL(`./dts-sources/${file}`, import.meta.url).pathname, input: new URL(`./dts-sources/${file}`, import.meta.url).pathname,
plugins: [dts({ respectExternal: true })] plugins: [dts({ respectExternal: true })]
// external: ['estree-walker']
}); });
try { const moduleName = (file === 'index.d.ts' ? 'svelte' : `svelte/${file}`).replace('.d.ts', '');
fs.mkdirSync(new URL(`../../node_modules/.type-gen`, import.meta.url)); const code = await bundle.generate({ format: 'esm' }).then(({ output }) => output[0].code);
} catch {} const inlinedExportDeclarationCode = useExportDeclarations(code);
codes.set( codes.set(moduleName, inlinedExportDeclarationCode);
(file === 'index.d.ts' ? 'svelte' : `svelte/${file}`).replace('.d.ts', ''),
useExportDeclarations( // !IMPORTANT: This is for debugging purposes only. Do not remove until Svelte d.ts files
await bundle.generate({ format: 'esm' }).then(({ output }) => output[0].code) // !are stable during v4/v5
) write_to_node_modules('before', file, code);
); write_to_node_modules('after', file, inlinedExportDeclarationCode);
} }
return codes; return codes;
@ -91,4 +92,17 @@ function useExportDeclarations(str) {
return magicStr.toString() ?? str; return magicStr.toString() ?? str;
} }
get_bundled_types(); /**
* @param {'before' | 'after'} label
* @param {string} filename
* @param {string} code
*/
function write_to_node_modules(label, filename, code) {
const folder = new URL(`../../node_modules/.type-gen/${label}`, import.meta.url).pathname;
try {
fs.mkdirSync(folder, { recursive: true });
} catch {}
fs.writeFileSync(`${folder}/${filename}`, code);
}

Loading…
Cancel
Save