1 | 'use strict';
|
2 |
|
3 | Object.defineProperty(exports, '__esModule', {
|
4 | value: true
|
5 | });
|
6 |
|
7 | 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'); } }; })();
|
8 |
|
9 | var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
|
10 |
|
11 | 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; }; })();
|
12 |
|
13 | var _get = function get(_x4, _x5, _x6) { var _again = true; _function: while (_again) { var object = _x4, property = _x5, receiver = _x6; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x4 = parent; _x5 = property; _x6 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };
|
14 |
|
15 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
|
16 |
|
17 | function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
|
18 |
|
19 | function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
|
20 |
|
21 | var _istanbul = require('istanbul');
|
22 |
|
23 | var _istanbul2 = _interopRequireDefault(_istanbul);
|
24 |
|
25 | var _babelCore = require('babel-core');
|
26 |
|
27 | var _esprima = require('esprima');
|
28 |
|
29 | var _esprima2 = _interopRequireDefault(_esprima);
|
30 |
|
31 | var _escodegen = require('escodegen');
|
32 |
|
33 | var _escodegen2 = _interopRequireDefault(_escodegen);
|
34 |
|
35 | var _sourceMap = require('source-map');
|
36 |
|
37 | var POSITIONS = ['start', 'end'];
|
38 |
|
39 | var Instrumenter = (function (_istanbul$Instrumenter) {
|
40 | _inherits(Instrumenter, _istanbul$Instrumenter);
|
41 |
|
42 | function Instrumenter() {
|
43 | var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];
|
44 |
|
45 | _classCallCheck(this, Instrumenter);
|
46 |
|
47 | _get(Object.getPrototypeOf(Instrumenter.prototype), 'constructor', this).call(this);
|
48 |
|
49 | _istanbul2['default'].Instrumenter.call(this, options);
|
50 |
|
51 | this.babelOptions = _extends({
|
52 | sourceMap: true
|
53 | }, options && options.babel || {});
|
54 | }
|
55 |
|
56 | _createClass(Instrumenter, [{
|
57 | key: 'instrumentSync',
|
58 | value: function instrumentSync(code, fileName) {
|
59 |
|
60 | var result = this._r = (0, _babelCore.transform)(code, _extends({}, this.babelOptions, { filename: fileName }));
|
61 | this._babelMap = new _sourceMap.SourceMapConsumer(result.map);
|
62 |
|
63 |
|
64 | var program = _esprima2['default'].parse(result.code, {
|
65 | loc: true,
|
66 | range: true,
|
67 | tokens: this.opts.preserveComments,
|
68 | comment: true
|
69 | });
|
70 |
|
71 | if (this.opts.preserveComments) {
|
72 | program = _escodegen2['default'].attachComments(program, program.comments, program.tokens);
|
73 | }
|
74 |
|
75 | return this.instrumentASTSync(program, fileName, code);
|
76 | }
|
77 | }, {
|
78 | key: 'getPreamble',
|
79 | value: function getPreamble(sourceCode, emitUseStrict) {
|
80 | var _this = this;
|
81 |
|
82 | [['s', 'statementMap'], ['f', 'fnMap'], ['b', 'branchMap']].forEach(function (_ref) {
|
83 | var _ref2 = _slicedToArray(_ref, 2);
|
84 |
|
85 | var metricName = _ref2[0];
|
86 | var metricMapName = _ref2[1];
|
87 | var metrics = _this.coverState[metricName];
|
88 | var metricMap = _this.coverState[metricMapName];
|
89 |
|
90 | var transformFctName = '_' + metricMapName + 'Transformer';
|
91 | var transformedMetricMap = _this[transformFctName](metricMap, metrics);
|
92 | _this.coverState[metricMapName] = transformedMetricMap;
|
93 | });
|
94 |
|
95 | return _get(Object.getPrototypeOf(Instrumenter.prototype), 'getPreamble', this).call(this, sourceCode, emitUseStrict);
|
96 | }
|
97 |
|
98 |
|
99 |
|
100 | }, {
|
101 | key: '_statementMapTransformer',
|
102 | value: function _statementMapTransformer(metrics) {
|
103 | var _this2 = this;
|
104 |
|
105 | return Object.keys(metrics).map(function (index) {
|
106 | return metrics[index];
|
107 | }).map(function (statementMeta) {
|
108 | var _getMetricOriginalLocations2 = _this2._getMetricOriginalLocations([statementMeta]);
|
109 |
|
110 | var _getMetricOriginalLocations22 = _slicedToArray(_getMetricOriginalLocations2, 1);
|
111 |
|
112 | var location = _getMetricOriginalLocations22[0];
|
113 |
|
114 | return location;
|
115 | }).reduce(this._arrayToArrayLikeObject, {});
|
116 | }
|
117 | }, {
|
118 | key: '_fnMapTransformer',
|
119 | value: function _fnMapTransformer(metrics) {
|
120 | var _this3 = this;
|
121 |
|
122 | return Object.keys(metrics).map(function (index) {
|
123 | return metrics[index];
|
124 | }).map(function (fnMeta) {
|
125 | var _getMetricOriginalLocations3 = _this3._getMetricOriginalLocations([fnMeta.loc]);
|
126 |
|
127 | var _getMetricOriginalLocations32 = _slicedToArray(_getMetricOriginalLocations3, 1);
|
128 |
|
129 | var loc = _getMetricOriginalLocations32[0];
|
130 |
|
131 |
|
132 | if (fnMeta.skip === undefined) {
|
133 | delete fnMeta.skip;
|
134 | if (loc.skip !== undefined) {
|
135 | fnMeta.skip = loc.skip;
|
136 | }
|
137 | }
|
138 |
|
139 | return _extends({}, fnMeta, { loc: loc });
|
140 | }).reduce(this._arrayToArrayLikeObject, {});
|
141 | }
|
142 | }, {
|
143 | key: '_branchMapTransformer',
|
144 | value: function _branchMapTransformer(metrics) {
|
145 | var _this4 = this;
|
146 |
|
147 | return Object.keys(metrics).map(function (index) {
|
148 | return metrics[index];
|
149 | }).map(function (branchMeta) {
|
150 | return _extends({}, branchMeta, {
|
151 | locations: _this4._getMetricOriginalLocations(branchMeta.locations)
|
152 | });
|
153 | }).reduce(this._arrayToArrayLikeObject, {});
|
154 | }
|
155 |
|
156 |
|
157 |
|
158 | }, {
|
159 | key: '_getMetricOriginalLocations',
|
160 | value: function _getMetricOriginalLocations() {
|
161 | var _this5 = this;
|
162 |
|
163 | var metricLocations = arguments.length <= 0 || arguments[0] === undefined ? [] : arguments[0];
|
164 |
|
165 | var o = { line: 0, column: 0 };
|
166 |
|
167 | return metricLocations.map(function (generatedPositions) {
|
168 | return [_this5._getOriginalPositionsFor(generatedPositions), generatedPositions];
|
169 | }).map(function (_ref3) {
|
170 | var _ref32 = _slicedToArray(_ref3, 2);
|
171 |
|
172 | var _ref32$0 = _ref32[0];
|
173 | var start = _ref32$0.start;
|
174 | var end = _ref32$0.end;
|
175 | var generatedPosition = _ref32[1];
|
176 |
|
177 | var postitions = [start.line, start.column, end.line, end.column];
|
178 | var isValid = postitions.every(function (n) {
|
179 | return n !== null;
|
180 | });
|
181 |
|
182 |
|
183 | if (generatedPosition.skip === undefined) {
|
184 | delete generatedPosition.skip;
|
185 | }
|
186 |
|
187 | return isValid ? _extends({}, generatedPosition, { start: start, end: end }) : { start: o, end: o, skip: true };
|
188 | });
|
189 | }
|
190 | }, {
|
191 | key: '_getOriginalPositionsFor',
|
192 | value: function _getOriginalPositionsFor() {
|
193 | var _this6 = this;
|
194 |
|
195 | var generatedPositions = arguments.length <= 0 || arguments[0] === undefined ? { start: {}, end: {} } : arguments[0];
|
196 |
|
197 | return POSITIONS.map(function (position) {
|
198 | return [generatedPositions[position], position];
|
199 | }).reduce(function (originalPositions, _ref4) {
|
200 | var _ref42 = _slicedToArray(_ref4, 2);
|
201 |
|
202 | var generatedPosition = _ref42[0];
|
203 | var position = _ref42[1];
|
204 |
|
205 | var originalPosition = _this6._babelMap.originalPositionFor(generatedPosition);
|
206 |
|
207 | delete originalPosition.name;
|
208 | delete originalPosition.source;
|
209 | originalPositions[position] = originalPosition;
|
210 | return originalPositions;
|
211 | }, {});
|
212 | }
|
213 | }, {
|
214 | key: '_arrayToArrayLikeObject',
|
215 | value: function _arrayToArrayLikeObject(arrayLikeObject, item, index) {
|
216 | arrayLikeObject[index + 1] = item;
|
217 | return arrayLikeObject;
|
218 | }
|
219 | }]);
|
220 |
|
221 | return Instrumenter;
|
222 | })(_istanbul2['default'].Instrumenter);
|
223 |
|
224 | exports.Instrumenter = Instrumenter; |
\ | No newline at end of file |