1 |
|
2 |
|
3 | 'use strict';
|
4 |
|
5 | const validTargetOption = [6, 6.5, 7, 7.6, 'current'];
|
6 |
|
7 | module.exports = function (context, opts) {
|
8 |
|
9 | opts = opts || {};
|
10 |
|
11 | if (opts.target && validTargetOption.indexOf(opts.target) !== -1) {
|
12 | throw new Error(`Preset latest-node 'target' option must one of ${validTargetOption.join(', ')}.`);
|
13 | }
|
14 |
|
15 | const target = opts.target !== 'current' ? Number(opts.target) : parseFloat(process.versions.node);
|
16 |
|
17 | const loose = opts.loose !== undefined ? opts.loose : false;
|
18 | const modules = opts.modules !== undefined ? opts.modules : 'commonjs';
|
19 | const es2016 = opts.es2016 !== undefined ? opts.es2016 : true;
|
20 | const es2017 = opts.es2017 !== undefined ? opts.es2017 : true;
|
21 |
|
22 | if (modules !== false && modules !== 'commonjs') {
|
23 | throw new Error("Preset es2015 'modules' option must be 'false' to indicate no modules\n" +
|
24 | "or 'commonjs' (default)");
|
25 | }
|
26 | if (typeof loose !== 'boolean') throw new Error("Preset modern-browsers 'loose' option must be a boolean.");
|
27 |
|
28 | const optsLoose = { loose };
|
29 |
|
30 | return {
|
31 | plugins: [
|
32 |
|
33 | require('babel-plugin-check-es2015-constants'),
|
34 |
|
35 | modules === 'commonjs' && [require('babel-plugin-transform-es2015-modules-commonjs'), optsLoose],
|
36 |
|
37 | target < 6.5 && require('babel-plugin-transform-es2015-arrow-functions'),
|
38 | target < 6.5 && require('babel-plugin-transform-es2015-function-name'),
|
39 |
|
40 |
|
41 | es2016 && target < 7 && require('babel-plugin-transform-exponentiation-operator'),
|
42 |
|
43 |
|
44 | es2017 && require('babel-plugin-syntax-trailing-function-commas'),
|
45 | es2017 && target < 7.6 && require('babel-plugin-transform-async-to-generator'),
|
46 | ].filter(Boolean),
|
47 | };
|
48 | };
|