UNPKG

12 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.defaultFlags = exports.validFlags = undefined;
7
8var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
9
10var explode = function () {
11 var _ref2 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2(argv) {
12 var exploded, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, arg, file, fileopts;
13
14 return regeneratorRuntime.wrap(function _callee2$(_context2) {
15 while (1) {
16 switch (_context2.prev = _context2.next) {
17 case 0:
18 exploded = [];
19 _iteratorNormalCompletion = true;
20 _didIteratorError = false;
21 _iteratorError = undefined;
22 _context2.prev = 4;
23 _iterator = argv[Symbol.iterator]();
24
25 case 6:
26 if (_iteratorNormalCompletion = (_step = _iterator.next()).done) {
27 _context2.next = 31;
28 break;
29 }
30
31 arg = _step.value;
32
33 if (!arg.startsWith('@')) {
34 _context2.next = 27;
35 break;
36 }
37
38 file = arg.slice(1);
39 _context2.prev = 10;
40 _context2.next = 13;
41 return (0, _file.slurp)(file, 'utf8');
42
43 case 13:
44 fileopts = _context2.sent.split(/\s/);
45 _context2.t0 = exploded;
46 _context2.next = 17;
47 return explode(fileopts);
48
49 case 17:
50 _context2.t1 = _context2.sent;
51 exploded = _context2.t0.concat.call(_context2.t0, _context2.t1);
52 _context2.next = 25;
53 break;
54
55 case 21:
56 _context2.prev = 21;
57 _context2.t2 = _context2['catch'](10);
58
59 console.error(_context2.t2.message);
60 process.exit(1);
61
62 case 25:
63 _context2.next = 28;
64 break;
65
66 case 27:
67 if (arg) {
68 exploded.push(arg);
69 }
70
71 case 28:
72 _iteratorNormalCompletion = true;
73 _context2.next = 6;
74 break;
75
76 case 31:
77 _context2.next = 37;
78 break;
79
80 case 33:
81 _context2.prev = 33;
82 _context2.t3 = _context2['catch'](4);
83 _didIteratorError = true;
84 _iteratorError = _context2.t3;
85
86 case 37:
87 _context2.prev = 37;
88 _context2.prev = 38;
89
90 if (!_iteratorNormalCompletion && _iterator.return) {
91 _iterator.return();
92 }
93
94 case 40:
95 _context2.prev = 40;
96
97 if (!_didIteratorError) {
98 _context2.next = 43;
99 break;
100 }
101
102 throw _iteratorError;
103
104 case 43:
105 return _context2.finish(40);
106
107 case 44:
108 return _context2.finish(37);
109
110 case 45:
111 return _context2.abrupt('return', exploded);
112
113 case 46:
114 case 'end':
115 return _context2.stop();
116 }
117 }
118 }, _callee2, this, [[4, 33, 37, 45], [10, 21], [38,, 40, 44]]);
119 }));
120
121 return function explode(_x3) {
122 return _ref2.apply(this, arguments);
123 };
124}();
125
126var _commander = require('commander');
127
128var _file = require('../util/file');
129
130var _pkginfo = require('pkginfo');
131
132var _pkginfo2 = _interopRequireDefault(_pkginfo);
133
134function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
135
136function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
137
138function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { return Promise.resolve(value).then(function (value) { step("next", value); }, function (err) { step("throw", err); }); } } return step("next"); }); }; }
139
140var keys = Object.keys;
141
142exports.default = function () {
143 var _ref = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee(pkg, argv) {
144 var alwaysExclude, defaults, cli, opts, rawFlags;
145 return regeneratorRuntime.wrap(function _callee$(_context) {
146 while (1) {
147 switch (_context.prev = _context.next) {
148 case 0:
149 alwaysExclude = [`node_modules`, `package.json`, `.*`, `*-min.js`, `*-min.js.map`, `*-min.css`, `*-min.css.map`, `*-debug.log`, `optimised-modules.json`, `dependencies.json`];
150 defaults = { out: pkg.relative(`${pkg.name.split('/').pop()}-min`),
151 lib: pkg.relative(pkg.directories.lib || 'lib'),
152 src: pkg.relative(pkg.directories.src || 'src'),
153 optimize: 0,
154 copy: true,
155 debug: true,
156 interactive: false,
157 production: false,
158 include: ['js:**/*.js', 'css:**/*.css'],
159 exclude: [].concat(alwaysExclude),
160 log: 'normal',
161 flags: keys(defaultFlags).map(function (f) {
162 return `${f}:${defaultFlags[f]}`;
163 }),
164 rawArgs: [],
165 targetNode: false,
166 targetBrowsers: ['last 3 versions']
167 };
168 cli = new _commander.Command().version((0, _pkginfo2.default)(module).version).option('-i, --src <dir>', `the root directory from which all sources are relative [${defaults.src}]`, pkg.relative, defaults.src).option('-o, --out <prefix>', `write optimized output to files with the specified prefix [${defaults.out}]`, pkg.relative, defaults.out).option('-L, --lib <dir>', `write unoptimized files to the specified directory [${defaults.lib}]`, pkg.relative, defaults.lib).option('-I, --include [js|css:]<path>', `include a path or glob (relative to source root) [${defaults.include}]`, concatGlobs, []).option('-X, --exclude [js|css:]<path>', `exclude a path or glob (relative to source root) [${defaults.exclude}]`, concatGlobs, []).option('-O, --optimize <level>', `optimization level (0 = none) [${defaults.optimize}]`, setOptimization, defaults.optimize).option('--no-copy', `disable copying of non-code files to ${defaults.lib}`, Boolean, !defaults.copy).option('--no-debug', 'disable source map generation', Boolean, !defaults.debug).option('--log <normal|json>', `log output format [${defaults.log}]`, /^(json|normal)$/i, defaults.log).option('--interactive [cmd]', `watch for and recompile on changes (implies -O 0)`).option('--production', `enable production options (implies -O 1)`).option('--target-browsers <spec|false>', `define target browser environments: [${defaults.targetBrowsers}]`, concatFlags, []).option('--target-node <current|number|false>', `define target node environment: [${defaults.targetNode}]`, defaults.targetNode).option('--flags <flags>', `toggle flags [${defaults.flags}]`, concatFlags, []).option('@<path>', 'read options from the file at <path> (relative to cwd)');
169 _context.t0 = cli;
170 _context.next = 6;
171 return explode(argv);
172
173 case 6:
174 _context.t1 = _context.sent;
175 opts = _context.t0.parse.call(_context.t0, _context.t1);
176
177
178 Object.keys(opts).forEach(function (key) {
179 if (key in defaults === false) {
180 delete opts[key];
181 }
182 });
183
184 opts.rawCommand = opts.rawArgs.join(' ');
185
186 opts.include = conclude(['js', 'css'], defaults.include, opts.include);
187 opts.exclude = conclude(['js', 'css'], defaults.exclude, opts.exclude);
188
189 if (opts.targetBrowsers.length === 0) {
190 opts.targetBrowsers = defaults.targetBrowsers;
191 } else if (opts.targetBrowsers.length === 1 && opts.targetBrowsers[0] === 'false') {
192 opts.targetBrowsers = false;
193 }
194
195 if (opts.targetNode !== 'current') {
196 opts.targetNode = Number(opts.targetNode) || false;
197 }
198
199 rawFlags = flag(defaults.flags, opts.flags);
200
201
202 opts.flags = keys(rawFlags).reduce(function (flags, name) {
203 if (name in validFlags) {
204 var value = rawFlags[name];
205
206 if (validFlags[name].some(function (valid) {
207 return value === valid;
208 })) {
209 flags[name] = value;
210 } else if (defaultFlags[name]) {
211 flags[name] = defaultFlags[name];
212 }
213 }
214
215 return flags;
216 }, {});
217
218 opts.include['copy-files'] = ['**/*'];
219 opts.exclude['copy-files'] = [].concat(_toConsumableArray(opts.include.js), _toConsumableArray(opts.include.css), _toConsumableArray(opts.exclude['*']));
220
221 if (process.env.NODE_ENV === 'production' && !opts.interactive) {
222 opts.production = true;
223 }
224
225 opts.optimize = opts.production ? 1 : opts.interactive ? 0 : opts.optimize;
226
227 opts.interactive = opts.production ? false : opts.interactive;
228
229 return _context.abrupt('return', opts);
230
231 case 22:
232 case 'end':
233 return _context.stop();
234 }
235 }
236 }, _callee, this);
237 }));
238
239 function parse(_x, _x2) {
240 return _ref.apply(this, arguments);
241 }
242
243 return parse;
244}();
245
246var validFlags = exports.validFlags = { 'react': [undefined, true, false],
247 'modules': ['umd', 'amd', 'ecmascript', 'commonjs', 'systemjs'],
248 'es-stage': [0, 1, 2, 3],
249 'add-module-exports': [undefined, true, false]
250};
251
252var defaultFlags = exports.defaultFlags = { 'modules': 'umd' };
253
254function conclude(types, defaults, opts) {
255 return Object.assign([].concat(_toConsumableArray(new Set(defaults))).reduce(parse, {}), [].concat(_toConsumableArray(new Set(opts))).reduce(parse, {}));
256
257 function parse(pipe, val) {
258 var _val$split = val.split(':'),
259 _val$split2 = _slicedToArray(_val$split, 2),
260 lines = _val$split2[0],
261 pattern = _val$split2[1];
262
263 if (pattern) {
264 lines = [lines];
265 } else {
266 pattern = lines;
267 lines = ['*'].concat(_toConsumableArray(types));
268 }
269
270 lines.forEach(function (line) {
271 pipe[line] = (pipe[line] || []).concat(pattern);
272 });
273
274 return pipe;
275 }
276}
277
278function flag(defaults, opts) {
279 return Object.assign([].concat(_toConsumableArray(new Set(defaults))).reduce(parse, {}), [].concat(_toConsumableArray(new Set(opts))).reduce(parse, {}));
280
281 function parse(flags, val) {
282 var _val$split3 = val.split(':'),
283 _val$split4 = _slicedToArray(_val$split3, 2),
284 flag = _val$split4[0],
285 setting = _val$split4[1];
286
287 if (setting) {
288 try {
289 flags[flag] = JSON.parse(setting);
290 } catch (e) {
291 flags[flag] = setting;
292 }
293 } else {
294 flags[flag] = true;
295 }
296
297 return flags;
298 }
299}
300
301function setOptimization(level) {
302 return Math.max(level | 0, 0);
303}
304
305function concatGlobs(val, list) {
306 var prep = val.replace(/,([^,:]+:)/g, "\0$1");
307 return list.concat(prep.split('\0'));
308}
309
310function concatFlags(val, list) {
311 return list.concat(val.split(/\s*,\s*/));
312}
313//# sourceMappingURL=opts.js.map
\No newline at end of file