UNPKG

3.91 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6
7var _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"); } }; }();
8
9var _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; }; }();
10
11var _recast = require('recast');
12
13var _recast2 = _interopRequireDefault(_recast);
14
15var _Parser = require('./Parser');
16
17var _Parser2 = _interopRequireDefault(_Parser);
18
19var _Logger = require('./Logger');
20
21var _Logger2 = _interopRequireDefault(_Logger);
22
23function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
24
25function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
26
27/**
28 * Runs transforms on code.
29 */
30var Transformer = function () {
31 /**
32 * @param {Function[]} transforms List of transforms to perform
33 */
34 function Transformer() {
35 var transforms = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
36
37 _classCallCheck(this, Transformer);
38
39 this.transforms = transforms;
40 }
41
42 /**
43 * Tranforms code using all configured transforms.
44 *
45 * @param {String} code Input ES5 code
46 * @return {Object} Output ES6 code
47 */
48
49
50 _createClass(Transformer, [{
51 key: 'run',
52 value: function run(code) {
53 var logger = new _Logger2.default();
54
55 return {
56 code: this.applyAllTransforms(code, logger),
57 warnings: logger.getWarnings()
58 };
59 }
60 }, {
61 key: 'applyAllTransforms',
62 value: function applyAllTransforms(code, logger) {
63 var _this = this;
64
65 return this.ignoringHashBangComment(code, function (js) {
66 var ast = _recast2.default.parse(js, { parser: _Parser2.default });
67
68 _this.transforms.forEach(function (transformer) {
69 transformer(ast.program, logger);
70 });
71
72 return _recast2.default.print(ast, {
73 lineTerminator: _this.detectLineTerminator(code),
74 objectCurlySpacing: false
75 }).code;
76 });
77 }
78
79 // strips hashBang comment,
80 // invokes callback with normal js,
81 // then re-adds the hashBang comment back
82
83 }, {
84 key: 'ignoringHashBangComment',
85 value: function ignoringHashBangComment(code, callback) {
86 var _code$match = code.match(/^(\s*#!.*?\r?\n|)([\s\S]*)$/),
87 _code$match2 = _slicedToArray(_code$match, 3),
88 /* all */hashBang = _code$match2[1],
89 js = _code$match2[2];
90
91 return hashBang + callback(js);
92 }
93 }, {
94 key: 'detectLineTerminator',
95 value: function detectLineTerminator(code) {
96 var hasCRLF = /\r\n/.test(code);
97 var hasLF = /[^\r]\n/.test(code);
98
99 return hasCRLF && !hasLF ? '\r\n' : '\n';
100 }
101 }]);
102
103 return Transformer;
104}();
105
106exports.default = Transformer;
107module.exports = exports['default'];
\No newline at end of file