From 931d3d43b0ca05f51fd2d05961215e97d8f83735 Mon Sep 17 00:00:00 2001 From: Simen Bekkhus Date: Wed, 20 Sep 2023 08:45:35 +0200 Subject: [PATCH] chore: remove empty directories from `build/` --- scripts/bundleTs.mjs | 35 +++++++++++++++++++++++++++++------ 1 file changed, 29 insertions(+), 6 deletions(-) diff --git a/scripts/bundleTs.mjs b/scripts/bundleTs.mjs index 36460c8406a2..0ffeb4f5bc4c 100644 --- a/scripts/bundleTs.mjs +++ b/scripts/bundleTs.mjs @@ -14,18 +14,19 @@ import { ExtractorConfig, } from '@microsoft/api-extractor'; import chalk from 'chalk'; +import {glob} from 'glob'; import fs from 'graceful-fs'; -import {sync as pkgDir} from 'pkg-dir'; +import pkgDir from 'pkg-dir'; import prettier from 'prettier'; import {rimraf} from 'rimraf'; import {copyrightSnippet, getPackages} from './buildUtils.mjs'; -const prettierConfig = prettier.resolveConfig.sync( +const prettierConfig = await prettier.resolveConfig( fileURLToPath(import.meta.url).replace(/\.js$/, '.d.ts'), ); const require = createRequire(import.meta.url); -const typescriptCompilerFolder = pkgDir(require.resolve('typescript')); +const typescriptCompilerFolder = await pkgDir(require.resolve('typescript')); const typesNodeReferenceDirective = '/// '; @@ -156,17 +157,39 @@ await Promise.all( let definitionFile = await fs.promises.readFile(filepath, 'utf8'); - rimraf.sync(path.resolve(packageDir, 'build/**/*.d.ts'), {glob: true}); - fs.rmSync(path.resolve(packageDir, 'dist/'), { + await rimraf(path.resolve(packageDir, 'build/**/*.d.ts'), {glob: true}); + await fs.promises.rm(path.resolve(packageDir, 'dist/'), { force: true, recursive: true, }); // this is invalid now, so remove it to not confuse `tsc` - fs.rmSync(path.resolve(packageDir, 'tsconfig.tsbuildinfo'), { + await fs.promises.rm(path.resolve(packageDir, 'tsconfig.tsbuildinfo'), { force: true, recursive: true, }); + const dirsInBuild = await glob('**/', { + cwd: path.resolve(packageDir, 'build'), + }); + + await Promise.all( + dirsInBuild + .filter(dir => dir !== '.') + // reverse to delete deep directories first + .reverse() + .map(async dir => { + const dirToDelete = path.resolve(packageDir, 'build', dir); + try { + await fs.promises.rmdir(dirToDelete); + } catch (error) { + // e.g. `jest-jasmine2/build/jasmine` is not empty - ignore those errors + if (error.code !== 'ENOTEMPTY') { + throw error; + } + } + }), + ); + definitionFile = definitionFile.replace(/\r\n/g, '\n'); const hasNodeTypesReference = definitionFile.includes(