diff --git a/build/publish.js b/build/publish.js index c154d5e9c..1c32749d6 100644 --- a/build/publish.js +++ b/build/publish.js @@ -3,12 +3,48 @@ /* eslint-disable consistent-return */ /* eslint-disable no-await-in-loop */ /* eslint-disable import/no-dynamic-require */ +const esbuild = require('esbuild'); +const { readFileSync, writeFileSync } = require('fs'); +const major = +process.version.split('.')[0].split('v')[1]; +const minor = +process.version.split('.')[1]; + +let transformTimeUsage = 0; +let transformCount = 0; +let displayTimeout; +function transform(filename) { + const start = new Date(); + const result = esbuild.buildSync({ + entryPoints: [filename], + sourcemap: 'inline', + platform: 'node', + format: 'cjs', + target: `node${major}.${minor}`, + jsx: 'transform', + write: false, + }); + if (result.warnings.length) console.warn(result.warnings); + transformTimeUsage += new Date().getTime() - start.getTime(); + transformCount++; + if (displayTimeout) clearTimeout(displayTimeout); + displayTimeout = setTimeout(() => console.log(`Transformed ${transformCount} files. (${transformTimeUsage}ms)`), 1000); + return result.outputFiles[0].text; +} +const ESM = ['p-queue', 'p-timeout', 'latest-version']; +require.extensions['.js'] = function loader(module, filename) { + if (ESM.filter((i) => filename.includes(i)).length || major < 14) { + return module._compile(transform(filename), filename); + } + const content = readFileSync(filename, 'utf-8'); + return module._compile(content, filename); +}; +require.extensions['.ts'] = require.extensions['.tsx'] = function loader(module, filename) { + return module._compile(transform(filename), filename); +}; const { gt } = require('semver'); -const latest = require('latest-version'); +const { default: latest } = require('latest-version'); const path = require('path'); const ora = require('ora'); -const { writeFileSync } = require('fs'); const { getWorkspaces, spawnAsync } = require('./utils'); const { diff --git a/package.json b/package.json index f4048f08c..10fb6079a 100644 --- a/package.json +++ b/package.json @@ -35,6 +35,7 @@ "cac": "^6.7.3", "cross-env": "^7.0.3", "cross-spawn": "^7.0.3", + "esbuild": "^0.12.18", "eslint": "^7.32.0", "eslint-config-airbnb-typescript": "^12.3.1", "eslint-import-resolver-typescript": "^2.4.0",