Merge pull request #4566 from loganfsmyth/fix-3695
Allow presets to be ES6 default exports.
This commit is contained in:
commit
66a4aec1f9
@ -281,6 +281,9 @@ export default class OptionManager {
|
||||
val = require(presetLoc);
|
||||
}
|
||||
|
||||
// If the imported preset is a transpiled ES2015 module, grab the default export.
|
||||
if (typeof val === "object" && val.__esModule) val = val.default;
|
||||
|
||||
// For compatibility with babel-core < 6.13.x, allow presets to export an object with a
|
||||
// a 'buildPreset' function that will return the preset itself, while still exporting a
|
||||
// simple object (rather than a function), for supporting old Babel versions.
|
||||
|
||||
@ -1,29 +1,37 @@
|
||||
/**
|
||||
* This file is a bit of a mess. If you're looking at it as a reference for how to write a preset,
|
||||
* I'd recommend looking only at `function preset(){}` and ignoring the rest, unless your new preset
|
||||
* really needs to work on babel-core < 6.13.x, which is unlikely.
|
||||
* This file is not the canonical way of writing a Babel preset since it strives for
|
||||
* backward compatibility with babel-core < v6.13.x. If you're looking at it as a
|
||||
* reference for how to write a preset, it's probably best to look at the other presets
|
||||
* such as babel-preset-es2016 & babel-preset-latest noting that the former example
|
||||
* exports via a default object and the latter via a default function.
|
||||
*/
|
||||
|
||||
/**
|
||||
* This preset was originally an object, before function-based configurable presets were introduced.
|
||||
* For backward-compatibility with anything that may have been loading this preset and expecting
|
||||
* it to be a simple Babel config object, we maintain the old config here.
|
||||
*/
|
||||
module.exports = preset({});
|
||||
import transformES2015TemplateLiterals from "babel-plugin-transform-es2015-template-literals";
|
||||
import transformES2015Literals from "babel-plugin-transform-es2015-literals";
|
||||
import transformES2015FunctionName from "babel-plugin-transform-es2015-function-name";
|
||||
import transformES2015ArrowFunctions from "babel-plugin-transform-es2015-arrow-functions";
|
||||
import transformES2015BlockScopedFunctions from "babel-plugin-transform-es2015-block-scoped-functions";
|
||||
import transformES2015Classes from "babel-plugin-transform-es2015-classes";
|
||||
import transformES2015ObjectSuper from "babel-plugin-transform-es2015-object-super";
|
||||
import transformES2015ShorthandProperties from "babel-plugin-transform-es2015-shorthand-properties";
|
||||
import transformES2015DuplicateKeys from "babel-plugin-transform-es2015-duplicate-keys";
|
||||
import transformES2015ComputedProperties from "babel-plugin-transform-es2015-computed-properties";
|
||||
import transformES2015ForOf from "babel-plugin-transform-es2015-for-of";
|
||||
import transformES2015StickyRegex from "babel-plugin-transform-es2015-sticky-regex";
|
||||
import transformES2015UnicodeRegex from "babel-plugin-transform-es2015-unicode-regex";
|
||||
import checkES2015Constants from "babel-plugin-check-es2015-constants";
|
||||
import transformES2015Spread from "babel-plugin-transform-es2015-spread";
|
||||
import transformES2015Parameters from "babel-plugin-transform-es2015-parameters";
|
||||
import transformES2015Destructuring from "babel-plugin-transform-es2015-destructuring";
|
||||
import transformES2015BlockScoping from "babel-plugin-transform-es2015-block-scoping";
|
||||
import transformES2015TypeofSymbol from "babel-plugin-transform-es2015-typeof-symbol";
|
||||
import transformES2015ModulesCommonJS from "babel-plugin-transform-es2015-modules-commonjs";
|
||||
import transformES2015ModulesSystemJS from "babel-plugin-transform-es2015-modules-systemjs";
|
||||
import transformES2015ModulesAMD from "babel-plugin-transform-es2015-modules-amd";
|
||||
import transformES2015ModulesUMD from "babel-plugin-transform-es2015-modules-umd";
|
||||
import transformRegenerator from "babel-plugin-transform-regenerator";
|
||||
|
||||
// For backward compatibility with babel-core < v6.13.x, we use the 'buildPreset' property
|
||||
// of the preset object for the preset creation function.
|
||||
Object.defineProperty(module.exports, "buildPreset", {
|
||||
configurable: true,
|
||||
writable: true,
|
||||
// We make this non-enumerable so old versions of babel-core won't see it as an unknown property,
|
||||
// while allowing new versions to see it as a preset builder function.
|
||||
enumerable: false,
|
||||
value: preset,
|
||||
});
|
||||
|
||||
|
||||
function preset(context, opts) {
|
||||
function preset(context, opts = {}) {
|
||||
const moduleTypes = ["commonjs", "amd", "umd", "systemjs"];
|
||||
let loose = false;
|
||||
let modules = "commonjs";
|
||||
@ -42,34 +50,56 @@ function preset(context, opts) {
|
||||
"or a module type which be be one of: 'commonjs' (default), 'amd', 'umd', 'systemjs'");
|
||||
}
|
||||
|
||||
// be DRY
|
||||
const optsLoose = { loose };
|
||||
|
||||
return {
|
||||
plugins: [
|
||||
[require("babel-plugin-transform-es2015-template-literals"), { loose, spec }],
|
||||
require("babel-plugin-transform-es2015-literals"),
|
||||
require("babel-plugin-transform-es2015-function-name"),
|
||||
[require("babel-plugin-transform-es2015-arrow-functions"), { spec }],
|
||||
require("babel-plugin-transform-es2015-block-scoped-functions"),
|
||||
[require("babel-plugin-transform-es2015-classes"), { loose }],
|
||||
require("babel-plugin-transform-es2015-object-super"),
|
||||
require("babel-plugin-transform-es2015-shorthand-properties"),
|
||||
require("babel-plugin-transform-es2015-duplicate-keys"),
|
||||
[require("babel-plugin-transform-es2015-computed-properties"), { loose }],
|
||||
[require("babel-plugin-transform-es2015-for-of"), { loose }],
|
||||
require("babel-plugin-transform-es2015-sticky-regex"),
|
||||
require("babel-plugin-transform-es2015-unicode-regex"),
|
||||
require("babel-plugin-check-es2015-constants"),
|
||||
[require("babel-plugin-transform-es2015-spread"), { loose }],
|
||||
require("babel-plugin-transform-es2015-parameters"),
|
||||
[require("babel-plugin-transform-es2015-destructuring"), { loose }],
|
||||
require("babel-plugin-transform-es2015-block-scoping"),
|
||||
require("babel-plugin-transform-es2015-typeof-symbol"),
|
||||
modules === "commonjs" && [require("babel-plugin-transform-es2015-modules-commonjs"), { loose }],
|
||||
modules === "systemjs" && [require("babel-plugin-transform-es2015-modules-systemjs"), { loose }],
|
||||
modules === "amd" && [require("babel-plugin-transform-es2015-modules-amd"), { loose }],
|
||||
modules === "umd" && [require("babel-plugin-transform-es2015-modules-umd"), { loose }],
|
||||
[require("babel-plugin-transform-regenerator"), { async: false, asyncGenerators: false }]
|
||||
// filter out falsy values
|
||||
].filter(Boolean)
|
||||
[transformES2015TemplateLiterals, { loose, spec }],
|
||||
transformES2015Literals,
|
||||
transformES2015FunctionName,
|
||||
[transformES2015ArrowFunctions, { spec }],
|
||||
transformES2015BlockScopedFunctions,
|
||||
[transformES2015Classes, optsLoose],
|
||||
transformES2015ObjectSuper,
|
||||
transformES2015ShorthandProperties,
|
||||
transformES2015DuplicateKeys,
|
||||
[transformES2015ComputedProperties, optsLoose],
|
||||
[transformES2015ForOf, optsLoose],
|
||||
transformES2015StickyRegex,
|
||||
transformES2015UnicodeRegex,
|
||||
checkES2015Constants,
|
||||
[transformES2015Spread, optsLoose],
|
||||
transformES2015Parameters,
|
||||
[transformES2015Destructuring, optsLoose],
|
||||
transformES2015BlockScoping,
|
||||
transformES2015TypeofSymbol,
|
||||
modules === "commonjs" && [transformES2015ModulesCommonJS, optsLoose],
|
||||
modules === "systemjs" && [transformES2015ModulesSystemJS, optsLoose],
|
||||
modules === "amd" && [transformES2015ModulesAMD, optsLoose],
|
||||
modules === "umd" && [transformES2015ModulesUMD, optsLoose],
|
||||
[transformRegenerator, { async: false, asyncGenerators: false }]
|
||||
].filter(Boolean) // filter out falsy values
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* This preset was originally an object, before function-based configurable presets were introduced.
|
||||
* For backward-compatibility with anything that may have been loading this preset and expecting
|
||||
* it to be a simple Babel config object, we export the old config here via default object.
|
||||
*/
|
||||
const oldConfig = preset({});
|
||||
|
||||
export default oldConfig;
|
||||
|
||||
// However, for backward compatibility with babel-core < v6.13.x, we use the 'buildPreset'
|
||||
// property of the preset object for the preset creation function with the enumerability
|
||||
// caveat mentioned below.
|
||||
Object.defineProperty(oldConfig, "buildPreset", {
|
||||
configurable: true,
|
||||
writable: true,
|
||||
// We make this non-enumerable so old versions of babel-core won't see it as an unknown property,
|
||||
// while allowing new versions to see it as a preset builder function.
|
||||
enumerable: false,
|
||||
value: preset,
|
||||
});
|
||||
|
||||
@ -1,5 +0,0 @@
|
||||
module.exports = {
|
||||
plugins: [
|
||||
require("babel-plugin-transform-exponentiation-operator"),
|
||||
]
|
||||
};
|
||||
@ -6,7 +6,7 @@
|
||||
"homepage": "https://babeljs.io/",
|
||||
"license": "MIT",
|
||||
"repository": "https://github.com/babel/babel/tree/master/packages/babel-preset-es2016",
|
||||
"main": "index.js",
|
||||
"main": "lib/index.js",
|
||||
"dependencies": {
|
||||
"babel-plugin-transform-exponentiation-operator": "^6.3.13"
|
||||
}
|
||||
|
||||
7
packages/babel-preset-es2016/src/index.js
Normal file
7
packages/babel-preset-es2016/src/index.js
Normal file
@ -0,0 +1,7 @@
|
||||
import transformExponentiationOperator from "babel-plugin-transform-exponentiation-operator";
|
||||
|
||||
export default {
|
||||
plugins: [
|
||||
transformExponentiationOperator
|
||||
]
|
||||
};
|
||||
@ -1,6 +0,0 @@
|
||||
module.exports = {
|
||||
plugins: [
|
||||
require("babel-plugin-syntax-trailing-function-commas"),
|
||||
require("babel-plugin-transform-async-to-generator")
|
||||
]
|
||||
};
|
||||
@ -6,7 +6,7 @@
|
||||
"homepage": "https://babeljs.io/",
|
||||
"license": "MIT",
|
||||
"repository": "https://github.com/babel/babel/tree/master/packages/babel-preset-es2017",
|
||||
"main": "index.js",
|
||||
"main": "lib/index.js",
|
||||
"dependencies": {
|
||||
"babel-plugin-syntax-trailing-function-commas": "^6.8.0",
|
||||
"babel-plugin-transform-async-to-generator": "^6.8.0"
|
||||
|
||||
9
packages/babel-preset-es2017/src/index.js
Normal file
9
packages/babel-preset-es2017/src/index.js
Normal file
@ -0,0 +1,9 @@
|
||||
import syntaxTrailingFunctionCommas from "babel-plugin-syntax-trailing-function-commas";
|
||||
import transformAsyncToGenerator from "babel-plugin-transform-async-to-generator";
|
||||
|
||||
export default {
|
||||
plugins: [
|
||||
syntaxTrailingFunctionCommas,
|
||||
transformAsyncToGenerator
|
||||
]
|
||||
};
|
||||
@ -1,11 +1,16 @@
|
||||
const { buildPreset } = require("babel-preset-es2015");
|
||||
import presetES2015 from "babel-preset-es2015";
|
||||
import presetES2016 from "babel-preset-es2016";
|
||||
import presetES2017 from "babel-preset-es2017";
|
||||
|
||||
module.exports = function preset(context, opts = {}) {
|
||||
// Rather than exporting a default object to represent the preset, we can
|
||||
// also export a default function instead, as this preset demonstrates.
|
||||
// This allows one to further configure a preset by way of specific options.
|
||||
export default function (context, opts = {}) {
|
||||
return {
|
||||
presets: [
|
||||
opts.es2015 !== false && [buildPreset, opts.es2015],
|
||||
opts.es2016 !== false && require("babel-preset-es2016"),
|
||||
opts.es2017 !== false && require("babel-preset-es2017")
|
||||
].filter(Boolean)
|
||||
opts.es2015 !== false && [presetES2015.buildPreset, opts.es2015],
|
||||
opts.es2016 !== false && presetES2016,
|
||||
opts.es2017 !== false && presetES2017
|
||||
].filter(Boolean) // filter out falsy values
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
@ -1,17 +0,0 @@
|
||||
module.exports = {
|
||||
plugins: [
|
||||
require("babel-plugin-transform-react-jsx"),
|
||||
require("babel-plugin-transform-flow-strip-types"),
|
||||
require("babel-plugin-syntax-flow"),
|
||||
require("babel-plugin-syntax-jsx"),
|
||||
require("babel-plugin-transform-react-display-name"),
|
||||
],
|
||||
env: {
|
||||
development: {
|
||||
plugins: [
|
||||
// require("babel-plugin-transform-react-jsx-source"),
|
||||
// require("babel-plugin-transform-react-jsx-self")
|
||||
]
|
||||
}
|
||||
}
|
||||
};
|
||||
@ -6,7 +6,7 @@
|
||||
"homepage": "https://babeljs.io/",
|
||||
"license": "MIT",
|
||||
"repository": "https://github.com/babel/babel/tree/master/packages/babel-preset-react",
|
||||
"main": "index.js",
|
||||
"main": "lib/index.js",
|
||||
"dependencies": {
|
||||
"babel-plugin-syntax-flow": "^6.3.13",
|
||||
"babel-plugin-syntax-jsx": "^6.3.13",
|
||||
|
||||
27
packages/babel-preset-react/src/index.js
Normal file
27
packages/babel-preset-react/src/index.js
Normal file
@ -0,0 +1,27 @@
|
||||
import transformReactJSX from "babel-plugin-transform-react-jsx";
|
||||
import transformFlowStripTypes from "babel-plugin-transform-flow-strip-types";
|
||||
import transformSyntaxFlow from "babel-plugin-syntax-flow";
|
||||
import transformSyntaxJSX from "babel-plugin-syntax-jsx";
|
||||
import transformReactDisplayName from "babel-plugin-transform-react-display-name";
|
||||
|
||||
// These imports not yet used...
|
||||
// import transformReactJSXSource from "babel-plugin-transform-react-jsx-source";
|
||||
// import transformReactJSXSelf from "babel-plugin-transform-react-jsx-self";
|
||||
|
||||
export default {
|
||||
plugins: [
|
||||
transformReactJSX,
|
||||
transformFlowStripTypes,
|
||||
transformSyntaxFlow,
|
||||
transformSyntaxJSX,
|
||||
transformReactDisplayName
|
||||
],
|
||||
env: {
|
||||
development: {
|
||||
plugins: [
|
||||
// transformReactJSXSource,
|
||||
// transformReactJSXSelf
|
||||
]
|
||||
}
|
||||
}
|
||||
};
|
||||
@ -1,9 +0,0 @@
|
||||
module.exports = {
|
||||
presets: [
|
||||
require("babel-preset-stage-1")
|
||||
],
|
||||
plugins: [
|
||||
require("babel-plugin-transform-do-expressions"),
|
||||
require("babel-plugin-transform-function-bind")
|
||||
]
|
||||
};
|
||||
@ -6,7 +6,7 @@
|
||||
"homepage": "https://babeljs.io/",
|
||||
"license": "MIT",
|
||||
"repository": "https://github.com/babel/babel/tree/master/packages/babel-preset-stage-0",
|
||||
"main": "index.js",
|
||||
"main": "lib/index.js",
|
||||
"dependencies": {
|
||||
"babel-plugin-transform-do-expressions": "^6.3.13",
|
||||
"babel-plugin-transform-function-bind": "^6.3.13",
|
||||
|
||||
14
packages/babel-preset-stage-0/src/index.js
Normal file
14
packages/babel-preset-stage-0/src/index.js
Normal file
@ -0,0 +1,14 @@
|
||||
import presetStage1 from "babel-preset-stage-1";
|
||||
|
||||
import transformDoExpressions from "babel-plugin-transform-do-expressions";
|
||||
import transformFunctionBind from "babel-plugin-transform-function-bind";
|
||||
|
||||
export default {
|
||||
presets: [
|
||||
presetStage1
|
||||
],
|
||||
plugins: [
|
||||
transformDoExpressions,
|
||||
transformFunctionBind
|
||||
]
|
||||
};
|
||||
@ -1,9 +0,0 @@
|
||||
module.exports = {
|
||||
presets: [
|
||||
require("babel-preset-stage-2")
|
||||
],
|
||||
plugins: [
|
||||
require("babel-plugin-transform-class-constructor-call"),
|
||||
require("babel-plugin-transform-export-extensions")
|
||||
]
|
||||
};
|
||||
@ -6,7 +6,7 @@
|
||||
"homepage": "https://babeljs.io/",
|
||||
"license": "MIT",
|
||||
"repository": "https://github.com/babel/babel/tree/master/packages/babel-preset-stage-1",
|
||||
"main": "index.js",
|
||||
"main": "lib/index.js",
|
||||
"dependencies": {
|
||||
"babel-plugin-transform-class-constructor-call": "^6.3.13",
|
||||
"babel-plugin-transform-export-extensions": "^6.3.13",
|
||||
|
||||
14
packages/babel-preset-stage-1/src/index.js
Normal file
14
packages/babel-preset-stage-1/src/index.js
Normal file
@ -0,0 +1,14 @@
|
||||
import presetStage2 from "babel-preset-stage-2";
|
||||
|
||||
import transformClassConstructorCall from "babel-plugin-transform-class-constructor-call";
|
||||
import transformExportExtensions from "babel-plugin-transform-export-extensions";
|
||||
|
||||
export default {
|
||||
presets: [
|
||||
presetStage2
|
||||
],
|
||||
plugins: [
|
||||
transformClassConstructorCall,
|
||||
transformExportExtensions
|
||||
]
|
||||
};
|
||||
@ -1,10 +0,0 @@
|
||||
module.exports = {
|
||||
presets: [
|
||||
require("babel-preset-stage-3")
|
||||
],
|
||||
plugins: [
|
||||
require("babel-plugin-transform-class-properties"),
|
||||
require("babel-plugin-transform-object-rest-spread"),
|
||||
require("babel-plugin-transform-decorators")
|
||||
]
|
||||
};
|
||||
@ -6,7 +6,7 @@
|
||||
"homepage": "https://babeljs.io/",
|
||||
"license": "MIT",
|
||||
"repository": "https://github.com/babel/babel/tree/master/packages/babel-preset-stage-2",
|
||||
"main": "index.js",
|
||||
"main": "lib/index.js",
|
||||
"dependencies": {
|
||||
"babel-plugin-transform-class-properties": "^6.3.13",
|
||||
"babel-plugin-transform-decorators": "^6.13.0",
|
||||
|
||||
16
packages/babel-preset-stage-2/src/index.js
Normal file
16
packages/babel-preset-stage-2/src/index.js
Normal file
@ -0,0 +1,16 @@
|
||||
import presetStage3 from "babel-preset-stage-3";
|
||||
|
||||
import transformClassProperties from "babel-plugin-transform-class-properties";
|
||||
import transformObjectRestSpread from "babel-plugin-transform-object-rest-spread";
|
||||
import transformDecorators from "babel-plugin-transform-decorators";
|
||||
|
||||
export default {
|
||||
presets: [
|
||||
presetStage3
|
||||
],
|
||||
plugins: [
|
||||
transformClassProperties,
|
||||
transformObjectRestSpread,
|
||||
transformDecorators
|
||||
]
|
||||
};
|
||||
@ -1,7 +0,0 @@
|
||||
module.exports = {
|
||||
plugins: [
|
||||
require("babel-plugin-syntax-trailing-function-commas"),
|
||||
require("babel-plugin-transform-async-to-generator"),
|
||||
require("babel-plugin-transform-exponentiation-operator")
|
||||
]
|
||||
};
|
||||
@ -6,7 +6,7 @@
|
||||
"homepage": "https://babeljs.io/",
|
||||
"license": "MIT",
|
||||
"repository": "https://github.com/babel/babel/tree/master/packages/babel-preset-stage-3",
|
||||
"main": "index.js",
|
||||
"main": "lib/index.js",
|
||||
"dependencies": {
|
||||
"babel-plugin-syntax-trailing-function-commas": "^6.3.13",
|
||||
"babel-plugin-transform-async-to-generator": "^6.3.13",
|
||||
|
||||
11
packages/babel-preset-stage-3/src/index.js
Normal file
11
packages/babel-preset-stage-3/src/index.js
Normal file
@ -0,0 +1,11 @@
|
||||
import syntaxTrailingFunctionCommas from "babel-plugin-syntax-trailing-function-commas";
|
||||
import transformAsyncToGenerator from "babel-plugin-transform-async-to-generator";
|
||||
import transformExponentiationOperator from "babel-plugin-transform-exponentiation-operator";
|
||||
|
||||
export default {
|
||||
plugins: [
|
||||
syntaxTrailingFunctionCommas,
|
||||
transformAsyncToGenerator,
|
||||
transformExponentiationOperator
|
||||
]
|
||||
};
|
||||
Loading…
x
Reference in New Issue
Block a user