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