UNPKG

2.17 kBJavaScriptView Raw
1/* eslint-disable strict, global-require */
2
3'use strict';
4
5const validTargetOption = ['6', '6.5', '7', '7.6', '8', 'current'];
6
7module.exports = function (context, opts) {
8 // `|| {}` to support node 4
9 opts = opts || {};
10 const targetOption = String(opts.target);
11 // use indexOf to support node 4
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 /* es2015 */
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'), // needed for function-name
47 infNode6dot5 && require('babel-plugin-transform-es2015-function-name'),
48
49 /* es2016 */
50 es2016 && infNode7 && require('babel-plugin-transform-exponentiation-operator'),
51
52 /* es2017 */
53 es2017 && require('babel-plugin-syntax-trailing-function-commas'),
54 es2017 && infNode7dot6 && require('babel-plugin-transform-async-to-generator'),
55 ].filter(Boolean),
56 };
57};