1 | 'use strict';
|
2 |
|
3 | Object.defineProperty(exports, "__esModule", {
|
4 | value: true
|
5 | });
|
6 | exports.defaultFlags = exports.validFlags = undefined;
|
7 |
|
8 | var _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 |
|
10 | var explode = function () {
|
11 | var _ref2 = _asyncToGenerator( 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 |
|
126 | var _commander = require('commander');
|
127 |
|
128 | var _file = require('../util/file');
|
129 |
|
130 | var _pkginfo = require('pkginfo');
|
131 |
|
132 | var _pkginfo2 = _interopRequireDefault(_pkginfo);
|
133 |
|
134 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
135 |
|
136 | function _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 |
|
138 | function _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 |
|
140 | var keys = Object.keys;
|
141 |
|
142 | exports.default = function () {
|
143 | var _ref = _asyncToGenerator( 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', `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 |
|
246 | var 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 |
|
252 | var defaultFlags = exports.defaultFlags = { 'modules': 'umd' };
|
253 |
|
254 | function 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 |
|
278 | function 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 |
|
301 | function setOptimization(level) {
|
302 | return Math.max(level | 0, 0);
|
303 | }
|
304 |
|
305 | function concatGlobs(val, list) {
|
306 | var prep = val.replace(/,([^,:]+:)/g, "\0$1");
|
307 | return list.concat(prep.split('\0'));
|
308 | }
|
309 |
|
310 | function concatFlags(val, list) {
|
311 | return list.concat(val.split(/\s*,\s*/));
|
312 | }
|
313 |
|
\ | No newline at end of file |