Michael Wiencek f6980c5008 MBS-13799: Resolve "TypeError: Object.hasOwn is not a function" ()
Per https://babel.dev/docs/babel-preset-env

"It is recommended to specify the minor version otherwise "3" will be
interpreted as "3.0" which may not include polyfills for the latest features."

That would appear to be the case for `Object.hasOwn` at the very least, as
specifying the corejs version causes its polyfill to be injected (in addition
to other polyfills that weren't being included -- although `Object.hasOwn` is
the only one which I see errors on Sentry for).
2024-11-12 22:18:30 -06:00

69 lines
1.6 KiB
JavaScript

/* eslint-disable import/no-commonjs */
// Note: This file is CommonJS because ESLint doesn't support async parsers.
const ignore = require('./webpack/babel-ignored.cjs');
const BROWSER_TARGETS = {
chrome: '49',
edge: '14',
firefox: '52',
safari: '9.0',
};
const MODERN_BROWSER_TARGETS = {
chrome: '106',
firefox: '105',
safari: '15.0',
};
const NODE_TARGETS = {
node: process.versions.node,
};
module.exports = function (api) {
api.cache.using(() => process.env.NODE_ENV);
api.cache.using(() => process.env.MODERN_BROWSERS === '1');
const presets = [
['@babel/preset-env', {
corejs: 3.38,
targets: api.caller(caller => caller && caller.target === 'node')
? NODE_TARGETS
: (process.env.MODERN_BROWSERS === '1'
? MODERN_BROWSER_TARGETS
: BROWSER_TARGETS),
useBuiltIns: 'usage',
}],
];
const plugins = [
'babel-plugin-syntax-hermes-parser',
'@babel/plugin-transform-flow-strip-types',
['@babel/plugin-transform-react-jsx', {
runtime: 'automatic',
}],
['@babel/plugin-transform-runtime', {
corejs: false,
helpers: true,
regenerator: true,
useESModules: false,
}],
'@babel/plugin-proposal-class-properties',
'@babel/plugin-syntax-dynamic-import',
'@babel/plugin-proposal-optional-chaining',
'@babel/plugin-proposal-nullish-coalescing-operator',
];
if (process.env.NODE_ENV === 'test') {
plugins.push('babel-plugin-istanbul');
}
return {
ignore,
plugins,
presets,
sourceType: 'unambiguous',
};
};