1 | 'use strict';
|
2 |
|
3 | Object.defineProperty(exports, "__esModule", {
|
4 | value: true
|
5 | });
|
6 |
|
7 | var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
|
8 |
|
9 | var _commander = require('commander');
|
10 |
|
11 | var _package = require('../package.json');
|
12 |
|
13 | var _package2 = _interopRequireDefault(_package);
|
14 |
|
15 | var _fs = require('fs');
|
16 |
|
17 | var _fs2 = _interopRequireDefault(_fs);
|
18 |
|
19 | var _path = require('path');
|
20 |
|
21 | var _path2 = _interopRequireDefault(_path);
|
22 |
|
23 | var _builtinTransforms = require('./builtinTransforms');
|
24 |
|
25 | var _builtinTransforms2 = _interopRequireDefault(_builtinTransforms);
|
26 |
|
27 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
28 |
|
29 | function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
30 |
|
31 | var transformsDocs = '\n Safe transforms:\n\n + arrow .......... callback to arrow function\n + arrow-return ... drop return statements in arrow functions\n + for-of ......... for loop to for-of loop\n + for-each ....... for loop to Array.forEach()\n + arg-rest ....... use of arguments to function(...args)\n + arg-spread ..... use of apply() to spread operator\n + obj-method ..... function values in objects to methods\n + obj-shorthand .. {foo: foo} to {foo}\n + no-strict ...... remove "use strict" directives\n + exponent ....... Math.pow() to ** operator (ES7)\n + multi-var ...... single var x,y; declaration to var x; var y; (refactor)\n\n Unsafe transforms:\n\n + let ............ var to let/const\n + class .......... prototype assignments to class declaration\n + commonjs ....... CommonJS module loading to import/export\n + template ....... string concatenation to template string\n + default-param .. use of || to default parameters\n + destruct-param . use destructuring for objects in function parameters\n + includes ....... indexOf() != -1 to includes() (ES7)\n';
|
32 |
|
33 |
|
34 |
|
35 |
|
36 |
|
37 | var OptionParser = function () {
|
38 | function OptionParser() {
|
39 | _classCallCheck(this, OptionParser);
|
40 |
|
41 | this.program = new _commander.Command();
|
42 | this.program.usage('-t <transform> <file>');
|
43 | this.program.description(_package2.default.description + '\n' + transformsDocs);
|
44 | this.program.version(_package2.default.version);
|
45 | this.program.option('-o, --out-file <file>', 'write output to a file');
|
46 | this.program.option('--replace <dir>', 'in-place transform all *.js files in a directory\n <dir> can also be a single file or a glob pattern');
|
47 | this.program.option('-t, --transform <a,b,c>', 'one or more transformations to perform', function (v) {
|
48 | return v.split(',');
|
49 | });
|
50 | }
|
51 |
|
52 | |
53 |
|
54 |
|
55 |
|
56 |
|
57 |
|
58 |
|
59 |
|
60 |
|
61 |
|
62 |
|
63 | _createClass(OptionParser, [{
|
64 | key: 'parse',
|
65 | value: function parse(argv) {
|
66 | this.program.parse(argv);
|
67 |
|
68 | return {
|
69 | inFile: this.getInputFile(),
|
70 | outFile: this.program.outFile,
|
71 | replace: this.getReplace(),
|
72 | transforms: this.getTransforms()
|
73 | };
|
74 | }
|
75 | }, {
|
76 | key: 'getInputFile',
|
77 | value: function getInputFile() {
|
78 | if (this.program.args.length > 1) {
|
79 | throw 'Only one input file allowed, but ' + this.program.args.length + ' given instead.';
|
80 | }
|
81 | if (this.program.args[0] && !_fs2.default.existsSync(this.program.args[0])) {
|
82 | throw 'File ' + this.program.args[0] + ' does not exist.';
|
83 | }
|
84 | return this.program.args[0];
|
85 | }
|
86 | }, {
|
87 | key: 'getReplace',
|
88 | value: function getReplace() {
|
89 | if (!this.program.replace) {
|
90 | return undefined;
|
91 | }
|
92 | if (this.program.outFile) {
|
93 | throw 'The --replace and --out-file options cannot be used together.';
|
94 | }
|
95 | if (this.program.args[0]) {
|
96 | throw 'The --replace and plain input file options cannot be used together.\n' + 'Did you forget to quote the --replace parameter?';
|
97 | }
|
98 | if (_fs2.default.existsSync(this.program.replace) && _fs2.default.statSync(this.program.replace).isDirectory()) {
|
99 | return _path2.default.join(this.program.replace, '/**/*.js');
|
100 | }
|
101 | return this.program.replace;
|
102 | }
|
103 | }, {
|
104 | key: 'getTransforms',
|
105 | value: function getTransforms() {
|
106 | if (!this.program.transform || this.program.transform.length === 0) {
|
107 | throw 'No transforms specified :(\n\n Use --transform option to pick one of the following:\n ' + transformsDocs;
|
108 | }
|
109 |
|
110 |
|
111 | this.validateTransforms(this.program.transform);
|
112 |
|
113 | return this.program.transform;
|
114 | }
|
115 | }, {
|
116 | key: 'validateTransforms',
|
117 | value: function validateTransforms(transformNames) {
|
118 | transformNames.forEach(function (name) {
|
119 | if (!_builtinTransforms2.default.get(name)) {
|
120 | throw 'Unknown transform "' + name + '".';
|
121 | }
|
122 | });
|
123 | }
|
124 | }]);
|
125 |
|
126 | return OptionParser;
|
127 | }();
|
128 |
|
129 | exports.default = OptionParser;
|
130 | module.exports = exports['default']; |
\ | No newline at end of file |