From 5bfa3daac525b30668d7bd4bb631f8ae98e074e1 Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Wed, 27 Jul 2022 14:25:59 +0200 Subject: [PATCH] Improve TypeScript 4.7 `NodeNext` compatibility (#1721) * update script to mass-update import/export statements * rewrite imports on .d.ts files * add idempotency comment --- scripts/build.sh | 1 + scripts/rewrite-imports.js | 10 +++++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/scripts/build.sh b/scripts/build.sh index f820242..4e26a45 100755 --- a/scripts/build.sh +++ b/scripts/build.sh @@ -46,6 +46,7 @@ wait # Rewrite ESM imports 😤 $rewriteImports "$DST" '/**/*.js' +$rewriteImports "$DST" '/**/*.d.ts' # Remove test related files rm -rf `$resolver "$DST" '/**/*.{test,__mocks__,}.*'` diff --git a/scripts/rewrite-imports.js b/scripts/rewrite-imports.js index 5eea337..4f0fa9b 100755 --- a/scripts/rewrite-imports.js +++ b/scripts/rewrite-imports.js @@ -8,7 +8,15 @@ console.time('Rewrote imports in') fastGlob.sync([process.argv.slice(2).join('')]).forEach((file) => { file = path.resolve(process.cwd(), file) let content = fs.readFileSync(file, 'utf8') - let result = content.replace(/(import|export)([^"']*?)(["'])\.(.*?)\3;/g, '$1$2".$4.js";') + let result = content.replace(/(import|export)([^"']*?)(["'])\.(.*?)\3/g, (full, a, b, _, d) => { + // For idempotency reasons, if `.js` already exists, then we can skip this. This allows us to + // run this script over and over again without adding .js files every time. + if (d.endsWith('.js')) { + return full + } + + return `${a}${b}'.${d}.js'` + }) if (result !== content) { fs.writeFileSync(file, result, 'utf8') }