From 4016920c9b745ec66a02c305080548bcf120d79c Mon Sep 17 00:00:00 2001 From: Rene Haas Date: Sun, 21 Aug 2022 10:32:20 +0200 Subject: [PATCH] improve rollup build --- local/rollup/src/bundle/plugins.js | 7 +- .../createPlaywrightRollupConfig.js | 6 +- .../additionalWatchFiles.js} | 0 local/rollup/src/plugins/esbuild.js | 46 +++++++++++ .../rollup.pluginHtml.js => plugins/html.js} | 0 .../istanbul.js} | 0 package-lock.json | 76 +------------------ package.json | 3 +- 8 files changed, 54 insertions(+), 84 deletions(-) rename local/rollup/src/{playwright/rollup.pluginAdditionalWatchFiles.js => plugins/additionalWatchFiles.js} (100%) create mode 100644 local/rollup/src/plugins/esbuild.js rename local/rollup/src/{playwright/rollup.pluginHtml.js => plugins/html.js} (100%) rename local/rollup/src/{playwright/rollup.pluginIstanbul.js => plugins/istanbul.js} (100%) diff --git a/local/rollup/src/bundle/plugins.js b/local/rollup/src/bundle/plugins.js index 99438f2..9155f06 100644 --- a/local/rollup/src/bundle/plugins.js +++ b/local/rollup/src/bundle/plugins.js @@ -10,8 +10,8 @@ const rollupPluginIgnoreImport = require('rollup-plugin-ignore-import'); const rollupPluginCommonjs = require('@rollup/plugin-commonjs'); const rollupPluginAlias = require('@rollup/plugin-alias'); const rollupPluginTs = require('rollup-plugin-typescript2'); -const { default: rollupPluginEsBuild } = require('rollup-plugin-esbuild'); const rollupPluginLicense = require('rollup-plugin-license'); +const rollupPluginEsBuild = require('../plugins/esbuild'); const babelConfigEs5 = require('./babel.config.es5'); const babelConfigEs6 = require('./babel.config.es2015'); @@ -59,10 +59,9 @@ module.exports = { }); } }, - rollupEsBuild: (sourceMap) => + rollupEsBuild: (sourcemap) => rollupPluginEsBuild({ - sourceMap, - include: /\.[jt]sx?$/, + sourcemap, target: 'es6', }), rollupBabel: (resolve, es6) => diff --git a/local/rollup/src/playwright/createPlaywrightRollupConfig.js b/local/rollup/src/playwright/createPlaywrightRollupConfig.js index 3fe3c50..e595224 100644 --- a/local/rollup/src/playwright/createPlaywrightRollupConfig.js +++ b/local/rollup/src/playwright/createPlaywrightRollupConfig.js @@ -7,10 +7,10 @@ const rollupPluginServe = require('rollup-plugin-serve'); const rollupPluginLivereload = require('rollup-plugin-livereload'); const resolve = require('@~local/config/resolve'); -const rollupPluginHtml = require('./rollup.pluginHtml'); +const rollupPluginHtml = require('../plugins/html'); +const rollupAdditionalWatchFiles = require('../plugins/additionalWatchFiles'); +const rollupIstanbul = require('../plugins/istanbul'); const createRollupConfig = require('../createRollupConfig'); -const rollupAdditionalWatchFiles = require('./rollup.pluginAdditionalWatchFiles'); -const rollupIstanbul = require('./rollup.pluginIstanbul'); const portRange = { min: 20000, diff --git a/local/rollup/src/playwright/rollup.pluginAdditionalWatchFiles.js b/local/rollup/src/plugins/additionalWatchFiles.js similarity index 100% rename from local/rollup/src/playwright/rollup.pluginAdditionalWatchFiles.js rename to local/rollup/src/plugins/additionalWatchFiles.js diff --git a/local/rollup/src/plugins/esbuild.js b/local/rollup/src/plugins/esbuild.js new file mode 100644 index 0000000..29ef437 --- /dev/null +++ b/local/rollup/src/plugins/esbuild.js @@ -0,0 +1,46 @@ +const { extname } = require('path'); +const { transform } = require('esbuild'); +const { createFilter } = require('@rollup/pluginutils'); + +const defaultLoader = { + '.js': 'js', + '.jsx': 'jsx', + '.ts': 'ts', + '.tsx': 'tsx', +}; + +module.exports = ({ include, exclude, ...esbuildOptions } = {}) => { + const extensions = Object.keys(defaultLoader); + const INCLUDE_REGEXP = new RegExp(`\\.(${extensions.map((ext) => ext.slice(1)).join('|')})$`); + const EXCLUDE_REGEXP = /node_modules/; + const filter = createFilter(include || INCLUDE_REGEXP, exclude || EXCLUDE_REGEXP); + + return { + name: 'esbuild', + async transform(code, id) { + if (!filter(id)) { + return null; + } + + const ext = extname(id); + const loader = defaultLoader[ext]; + + if (!loader) { + return null; + } + + const result = await transform(code, { + sourcefile: id, + loader, + ...esbuildOptions, + }); + + return ( + result.code && { + code: result.code, + map: result.map || null, + } + ); + }, + }; +}; diff --git a/local/rollup/src/playwright/rollup.pluginHtml.js b/local/rollup/src/plugins/html.js similarity index 100% rename from local/rollup/src/playwright/rollup.pluginHtml.js rename to local/rollup/src/plugins/html.js diff --git a/local/rollup/src/playwright/rollup.pluginIstanbul.js b/local/rollup/src/plugins/istanbul.js similarity index 100% rename from local/rollup/src/playwright/rollup.pluginIstanbul.js rename to local/rollup/src/plugins/istanbul.js diff --git a/package-lock.json b/package-lock.json index dcf33b9..4d2ec8a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -44,6 +44,7 @@ "eslint-plugin-react": "^7.30.0", "eslint-plugin-react-hooks": "^4.6.0", "glob": "^7.1.6", + "istanbul-lib-instrument": "^5.2.0", "jest": "^28.1.3", "jest-environment-jsdom": "^28.1.3", "nyc": "^15.1.0", @@ -56,7 +57,6 @@ "prettier": "^2.6.2", "rollup": "^2.75.5", "rollup-plugin-dts": "^4.2.2", - "rollup-plugin-esbuild": "^4.9.1", "rollup-plugin-ignore-import": "^1.3.2", "rollup-plugin-license": "^2.8.1", "rollup-plugin-livereload": "^2.0.0", @@ -70,7 +70,6 @@ "should": "^13.2.3", "tslib": "^2.4.0", "typescript": "^4.7.4", - "v8-to-istanbul": "^9.0.1", "webpack": "^5.74.0" } }, @@ -7974,15 +7973,6 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/joycon": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz", - "integrity": "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -10154,39 +10144,6 @@ "node": ">=12" } }, - "node_modules/rollup-plugin-esbuild": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/rollup-plugin-esbuild/-/rollup-plugin-esbuild-4.9.1.tgz", - "integrity": "sha512-qn/x7Wz9p3Xnva99qcb+nopH0d2VJwVnsxJTGEg+Sh2Z3tqQl33MhOwzekVo1YTKgv+yAmosjcBRJygMfGrtLw==", - "dev": true, - "dependencies": { - "@rollup/pluginutils": "^4.1.1", - "debug": "^4.3.3", - "es-module-lexer": "^0.9.3", - "joycon": "^3.0.1", - "jsonc-parser": "^3.0.0" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "esbuild": ">=0.10.1", - "rollup": "^1.20.0 || ^2.0.0" - } - }, - "node_modules/rollup-plugin-esbuild/node_modules/@rollup/pluginutils": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", - "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==", - "dev": true, - "dependencies": { - "estree-walker": "^2.0.1", - "picomatch": "^2.2.2" - }, - "engines": { - "node": ">= 8.0.0" - } - }, "node_modules/rollup-plugin-ignore-import": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/rollup-plugin-ignore-import/-/rollup-plugin-ignore-import-1.3.2.tgz", @@ -17557,12 +17514,6 @@ } } }, - "joycon": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz", - "integrity": "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==", - "dev": true - }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -19107,31 +19058,6 @@ } } }, - "rollup-plugin-esbuild": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/rollup-plugin-esbuild/-/rollup-plugin-esbuild-4.9.1.tgz", - "integrity": "sha512-qn/x7Wz9p3Xnva99qcb+nopH0d2VJwVnsxJTGEg+Sh2Z3tqQl33MhOwzekVo1YTKgv+yAmosjcBRJygMfGrtLw==", - "dev": true, - "requires": { - "@rollup/pluginutils": "^4.1.1", - "debug": "^4.3.3", - "es-module-lexer": "^0.9.3", - "joycon": "^3.0.1", - "jsonc-parser": "^3.0.0" - }, - "dependencies": { - "@rollup/pluginutils": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", - "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==", - "dev": true, - "requires": { - "estree-walker": "^2.0.1", - "picomatch": "^2.2.2" - } - } - } - }, "rollup-plugin-ignore-import": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/rollup-plugin-ignore-import/-/rollup-plugin-ignore-import-1.3.2.tgz", diff --git a/package.json b/package.json index af0743a..d518e4d 100644 --- a/package.json +++ b/package.json @@ -40,6 +40,7 @@ "eslint-plugin-react": "^7.30.0", "eslint-plugin-react-hooks": "^4.6.0", "glob": "^7.1.6", + "istanbul-lib-instrument": "^5.2.0", "jest": "^28.1.3", "jest-environment-jsdom": "^28.1.3", "nyc": "^15.1.0", @@ -52,7 +53,6 @@ "prettier": "^2.6.2", "rollup": "^2.75.5", "rollup-plugin-dts": "^4.2.2", - "rollup-plugin-esbuild": "^4.9.1", "rollup-plugin-ignore-import": "^1.3.2", "rollup-plugin-license": "^2.8.1", "rollup-plugin-livereload": "^2.0.0", @@ -66,7 +66,6 @@ "should": "^13.2.3", "tslib": "^2.4.0", "typescript": "^4.7.4", - "v8-to-istanbul": "^9.0.1", "webpack": "^5.74.0" }, "scripts": {