From 91fb7d3b1d9e95b8de1561b3440f4e6b32cd03f9 Mon Sep 17 00:00:00 2001 From: Simon Holthausen Date: Fri, 12 May 2023 13:00:45 +0200 Subject: [PATCH] walk all types --- generate-types.mjs | 39 ++++++++++++++++++++++++--------------- 1 file changed, 24 insertions(+), 15 deletions(-) diff --git a/generate-types.mjs b/generate-types.mjs index a06de292b9..aea6eb36f7 100644 --- a/generate-types.mjs +++ b/generate-types.mjs @@ -1,7 +1,7 @@ // This script generates the TypeScript definitions import { execSync } from 'child_process'; -import { readFileSync, writeFileSync, readdirSync, existsSync, copyFileSync } from 'fs'; +import { readFileSync, writeFileSync, readdirSync, existsSync, copyFileSync, statSync } from 'fs'; execSync('tsc -p src/compiler --emitDeclarationOnly && tsc -p src/runtime --emitDeclarationOnly', { stdio: 'inherit' }); @@ -94,24 +94,33 @@ function adjust(input) { return [import_statements, ...renamed_generics].join("\n"); } -for (const dir of readdirSync('types/runtime')) { - if (dir.endsWith('.d.ts')) continue; +function walk(dir) { + const files = readdirSync(dir); + const _dir = dir.slice('types/'.length) - modify( - `types/runtime/${dir}/index.d.ts`, - content => { - // TODO adjust all d.ts files - content = adjust(content); - - if (existsSync(`src/runtime/${dir}/public.d.ts`)) { - copyFileSync(`src/runtime/${dir}/public.d.ts`, `types/runtime/${dir}/public.d.ts`); - content + "\nexport * from './public.js'"; + for (const file of files) { + const path = `${dir}/${file}`; + if (file.endsWith('.d.ts')) { + modify(path, content => { + content = adjust(content); + + if (file === 'index.d.ts' && existsSync(`src/${_dir}/public.d.ts`)) { + copyFileSync(`src/${_dir}/public.d.ts`, `${dir}/public.d.ts`); + content + "\nexport * from './public.js'"; + } + + return content; + }); + } else if (statSync(path).isDirectory()) { + if (existsSync(`src/${_dir}/private.d.ts`)) { + copyFileSync(`src/${_dir}/private.d.ts`, `${dir}/private.d.ts`); } - - return content; + walk(path); } - ); + } } +walk('types'); + copyFileSync(`src/runtime/ambient.d.ts`, `types/runtime/ambient.d.ts`); modify(`types/runtime/index.d.ts`, content => content + "\nimport './ambient.js'");