UNPKG

1.84 kBJavaScriptView Raw
1/* eslint-disable strict, global-require */
2
3'use strict';
4
5const validTargetOption = [6, 6.5, 7, 7.6, 'current'];
6
7module.exports = function (context, opts) {
8 // `|| {}` to support node 4
9 opts = opts || {};
10 // use indexOf to support node 4
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 /* es2015 */
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'), // needed for function-name
38 target < 6.5 && require('babel-plugin-transform-es2015-function-name'),
39
40 /* es2016 */
41 es2016 && target < 7 && require('babel-plugin-transform-exponentiation-operator'),
42
43 /* es2017 */
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};