diff options
Diffstat (limited to 'config/esbuild.config.js')
-rw-r--r-- | config/esbuild.config.js | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/config/esbuild.config.js b/config/esbuild.config.js new file mode 100644 index 00000000000..e876436e864 --- /dev/null +++ b/config/esbuild.config.js @@ -0,0 +1,59 @@ +const browserslist = require('browserslist'); +const esbuild = require('esbuild'); + +const ESBUILD_SUPPORTED_TARGETS = new Set([ + 'chrome', + 'edge', + 'firefox', + 'hermes', + 'ie', + 'ios', + 'node', + 'opera', + 'rhino', + 'safari', +]); + +const parseBrowserslist = (browserslistResult) => { + return browserslistResult.map((browsers) => { + const [family, version] = browsers.split(' '); + let normalizedVersion = version; + + // browserslist can return a range: safari15.2-15.4 + if (version.indexOf('-') >= -1) { + // we take the lowest version + [normalizedVersion] = version.split('-'); + } + + return { + family, + version: normalizedVersion, + }; + }); +}; + +const mapBrowserslistToESBuildTarget = (browsersList) => { + return parseBrowserslist(browsersList) + .filter(({ family, version }) => { + if (!ESBUILD_SUPPORTED_TARGETS.has(family)) { + console.warning('Unknown ESBuild target %s, version %s', family, version); + return false; + } + + return true; + }) + .map(({ family, version }) => { + return `${family}${version}`; + }); +}; + +module.exports = { + target: mapBrowserslistToESBuildTarget(browserslist()), + supported: { + 'optional-chain': false, + 'nullish-coalescing': false, + 'class-static-field': false, + 'class-field': false, + }, + implementation: esbuild, +}; |