static-cms/babel.config.js

138 lines
4.1 KiB
JavaScript

const path = require('path');
const appVersion = require('./packages/netlify-cms-app/package.json').version;
const coreVersion = require('./packages/netlify-cms-core/package.json').version;
const isProduction = process.env.NODE_ENV === 'production';
const isTest = process.env.NODE_ENV === 'test';
const isESM = process.env.NODE_ENV === 'esm';
console.log('Build Package:', path.basename(process.cwd()));
const defaultPlugins = [
'lodash',
[
'babel-plugin-transform-builtin-extend',
{
globals: ['Error'],
},
],
'transform-export-extensions',
'@babel/plugin-proposal-class-properties',
'@babel/plugin-proposal-object-rest-spread',
'@babel/plugin-proposal-export-default-from',
'@babel/plugin-proposal-nullish-coalescing-operator',
'@babel/plugin-proposal-optional-chaining',
'@babel/plugin-syntax-dynamic-import',
'babel-plugin-inline-json-import',
[
'module-resolver',
isESM
? {
root: ['./src'],
alias: {
coreSrc: './src',
Actions: './src/actions',
App: './src/components/App',
Collection: './src/components/Collection',
Constants: './src/constants',
Editor: './src/components/Editor',
EditorWidgets: './src/components/EditorWidgets',
Formats: './src/formats',
Integrations: './src/integrations',
Lib: './src/lib',
MediaLibrary: './src/components/MediaLibrary',
Reducers: './src/reducers',
Selectors: './src/selectors',
ReduxStore: './src/redux',
Routing: './src/routing',
UI: './src/components/UI',
Workflow: './src/components/Workflow',
ValueObjects: './src/valueObjects',
localforage: 'localforage',
redux: 'redux',
},
extensions: ['.js', '.jsx', '.es', '.es6', '.mjs', '.ts', '.tsx'],
}
: {
root: path.join(__dirname, 'packages/netlify-cms-core/src/components'),
alias: {
coreSrc: path.join(__dirname, 'packages/netlify-cms-core/src'),
Actions: path.join(__dirname, 'packages/netlify-cms-core/src/actions/'),
Constants: path.join(__dirname, 'packages/netlify-cms-core/src/constants/'),
Formats: path.join(__dirname, 'packages/netlify-cms-core/src/formats/'),
Integrations: path.join(__dirname, 'packages/netlify-cms-core/src/integrations/'),
Lib: path.join(__dirname, 'packages/netlify-cms-core/src/lib/'),
Reducers: path.join(__dirname, 'packages/netlify-cms-core/src/reducers/'),
Selectors: path.join(__dirname, 'packages/netlify-cms-core/src/selectors/'),
ReduxStore: path.join(__dirname, 'packages/netlify-cms-core/src/redux/'),
Routing: path.join(__dirname, 'packages/netlify-cms-core/src/routing/'),
ValueObjects: path.join(__dirname, 'packages/netlify-cms-core/src/valueObjects/'),
localforage: 'localforage',
redux: 'redux',
},
extensions: ['.js', '.jsx', '.es', '.es6', '.mjs', '.ts', '.tsx'],
},
],
];
function presets() {
return [
'@babel/preset-react',
'@babel/preset-env',
[
'@emotion/babel-preset-css-prop',
{
autoLabel: true,
},
],
'@babel/typescript',
];
}
function plugins() {
if (isESM) {
return [
...defaultPlugins,
[
'transform-define',
{
NETLIFY_CMS_APP_VERSION: `${appVersion}`,
NETLIFY_CMS_CORE_VERSION: `${coreVersion}`,
},
],
[
'inline-react-svg',
{
svgo: {
plugins: [{ removeViewBox: false }],
},
},
],
];
}
if (isTest) {
return [
...defaultPlugins,
[
'inline-react-svg',
{
svgo: {
plugins: [{ removeViewBox: false }],
},
},
],
];
}
if (!isProduction) {
return [...defaultPlugins, 'react-hot-loader/babel'];
}
return defaultPlugins;
}
module.exports = {
presets: presets(),
plugins: plugins(),
};