module.exports = function()

in packages/babel-preset-app/index.js [1:99]


module.exports = function() {

	const env = process.env.BABEL_ENV || process.env.NODE_ENV || 'development';
	const isTest = env === 'test';
	const isDevelopment = env === 'development';
	const isProduction = env === 'production';

	if (!isTest && !isDevelopment && !isProduction) {
		throw new Error(`Please specify BABEL_ENV or NODE_ENV to either "test", "development" or "production". Received "${JSON.stringify(env)}".`);
	}

	return {

		presets: [
			isTest && [
				require('@babel/preset-env').default,
				{
					targets: {
						node: 'current',
					},
				},
			],
			!isTest && [
				require('@babel/preset-env').default,
				{
					// Lets not transform modules to commons js
					modules: false,
					// replaces the statement import "core-js" or require("core-js")
					// with individual requires for core-js based on browser environment.
					useBuiltIns: 'usage',
					// Set the corejs version we are using to avoid warnings in console
					corejs: 3,
				},
			],
		].filter(Boolean),

		plugins: [
			// destrucuring plugin is required until https://github.com/babel/babel/issues/7215 is resolved
			// then we can deprecate in favour for env
			require('@babel/plugin-transform-destructuring').default,

			// enable class properties transform
			[
				require('@babel/plugin-proposal-class-properties').default,
				{
					// Use assignment expression instead of Object.defineProperty to develop against spec.
					// when env targets "latest chrome version"
					loose: true,
				},
			],

			// Transform rest spreads plugin
			// This assumes Object.assign is available
			[
				require('@babel/plugin-proposal-object-rest-spread').default,
				{
					useBuiltIns: true,
				},
			],

			// Polyfills the runtime needed for async/await and generators
			// This assumes Object.assign is available
			[
				require('@babel/plugin-transform-runtime').default,
				{
					corejs: false,
					helpers: false,
					regenerator: true,
					// https://babeljs.io/docs/en/babel-plugin-transform-runtime#useesmodules
					// We should turn this on once the lowest version of Node LTS
					// supports ES Modules.
					useESModules: false,
				},
			],

			// Adds syntax support for import()
			require('@babel/plugin-syntax-dynamic-import').default,

			// Transform generator functions
			// however async functions are converted to generators by @babel/preset-env
			[
				require('@babel/plugin-transform-regenerator').default,
				{
					async: false,
				},
			],

			isTest &&
				// Transform dynamic import to require
				require('babel-plugin-dynamic-import-node'),

			// This fixes a var duplicate issue with variable hoisting
			// We should remove this once this issue is resolved
			// https://github.com/babel/babel/issues/8525
			isTest &&
				require('@babel/plugin-transform-block-scoping'),
		].filter(Boolean),
	};
};