e9853262fd46e4d5ab05b2fe42de74ad602c807d427599dc1cce61d6d89c3e8eca293b6e6a27e864bb74ee449e80e96ce2788467daaefa0280a8e31524cf27 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354
  1. "use strict";
  2. exports.__esModule = true;
  3. var _from = require("babel-runtime/core-js/array/from");
  4. var _from2 = _interopRequireDefault(_from);
  5. var _extends2 = require("babel-runtime/helpers/extends");
  6. var _extends3 = _interopRequireDefault(_extends2);
  7. var _stringify = require("babel-runtime/core-js/json/stringify");
  8. var _stringify2 = _interopRequireDefault(_stringify);
  9. var _getIterator2 = require("babel-runtime/core-js/get-iterator");
  10. var _getIterator3 = _interopRequireDefault(_getIterator2);
  11. var _map = require("babel-runtime/core-js/map");
  12. var _map2 = _interopRequireDefault(_map);
  13. exports.default = mergeSourceMap;
  14. var _sourceMap = require("source-map");
  15. var _sourceMap2 = _interopRequireDefault(_sourceMap);
  16. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  17. function mergeSourceMap(inputMap, map) {
  18. var input = buildMappingData(inputMap);
  19. var output = buildMappingData(map);
  20. var mergedGenerator = new _sourceMap2.default.SourceMapGenerator();
  21. for (var _iterator = input.sources, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : (0, _getIterator3.default)(_iterator);;) {
  22. var _ref2;
  23. if (_isArray) {
  24. if (_i >= _iterator.length) break;
  25. _ref2 = _iterator[_i++];
  26. } else {
  27. _i = _iterator.next();
  28. if (_i.done) break;
  29. _ref2 = _i.value;
  30. }
  31. var _ref4 = _ref2;
  32. var _source = _ref4.source;
  33. if (typeof _source.content === "string") {
  34. mergedGenerator.setSourceContent(_source.path, _source.content);
  35. }
  36. }
  37. if (output.sources.length === 1) {
  38. var defaultSource = output.sources[0];
  39. var insertedMappings = new _map2.default();
  40. eachInputGeneratedRange(input, function (generated, original, source) {
  41. eachOverlappingGeneratedOutputRange(defaultSource, generated, function (item) {
  42. var key = makeMappingKey(item);
  43. if (insertedMappings.has(key)) return;
  44. insertedMappings.set(key, item);
  45. mergedGenerator.addMapping({
  46. source: source.path,
  47. original: {
  48. line: original.line,
  49. column: original.columnStart
  50. },
  51. generated: {
  52. line: item.line,
  53. column: item.columnStart
  54. },
  55. name: original.name
  56. });
  57. });
  58. });
  59. for (var _iterator2 = insertedMappings.values(), _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : (0, _getIterator3.default)(_iterator2);;) {
  60. var _ref3;
  61. if (_isArray2) {
  62. if (_i2 >= _iterator2.length) break;
  63. _ref3 = _iterator2[_i2++];
  64. } else {
  65. _i2 = _iterator2.next();
  66. if (_i2.done) break;
  67. _ref3 = _i2.value;
  68. }
  69. var item = _ref3;
  70. if (item.columnEnd === Infinity) {
  71. continue;
  72. }
  73. var clearItem = {
  74. line: item.line,
  75. columnStart: item.columnEnd
  76. };
  77. var key = makeMappingKey(clearItem);
  78. if (insertedMappings.has(key)) {
  79. continue;
  80. }
  81. mergedGenerator.addMapping({
  82. generated: {
  83. line: clearItem.line,
  84. column: clearItem.columnStart
  85. }
  86. });
  87. }
  88. }
  89. var result = mergedGenerator.toJSON();
  90. if (typeof input.sourceRoot === "string") {
  91. result.sourceRoot = input.sourceRoot;
  92. }
  93. return result;
  94. }
  95. function makeMappingKey(item) {
  96. return (0, _stringify2.default)([item.line, item.columnStart]);
  97. }
  98. function eachOverlappingGeneratedOutputRange(outputFile, inputGeneratedRange, callback) {
  99. var overlappingOriginal = filterApplicableOriginalRanges(outputFile, inputGeneratedRange);
  100. for (var _iterator3 = overlappingOriginal, _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : (0, _getIterator3.default)(_iterator3);;) {
  101. var _ref6;
  102. if (_isArray3) {
  103. if (_i3 >= _iterator3.length) break;
  104. _ref6 = _iterator3[_i3++];
  105. } else {
  106. _i3 = _iterator3.next();
  107. if (_i3.done) break;
  108. _ref6 = _i3.value;
  109. }
  110. var _ref7 = _ref6;
  111. var _generated = _ref7.generated;
  112. for (var _iterator4 = _generated, _isArray4 = Array.isArray(_iterator4), _i4 = 0, _iterator4 = _isArray4 ? _iterator4 : (0, _getIterator3.default)(_iterator4);;) {
  113. var _ref8;
  114. if (_isArray4) {
  115. if (_i4 >= _iterator4.length) break;
  116. _ref8 = _iterator4[_i4++];
  117. } else {
  118. _i4 = _iterator4.next();
  119. if (_i4.done) break;
  120. _ref8 = _i4.value;
  121. }
  122. var item = _ref8;
  123. callback(item);
  124. }
  125. }
  126. }
  127. function filterApplicableOriginalRanges(_ref9, _ref10) {
  128. var mappings = _ref9.mappings;
  129. var line = _ref10.line,
  130. columnStart = _ref10.columnStart,
  131. columnEnd = _ref10.columnEnd;
  132. return filterSortedArray(mappings, function (_ref11) {
  133. var outOriginal = _ref11.original;
  134. if (line > outOriginal.line) return -1;
  135. if (line < outOriginal.line) return 1;
  136. if (columnStart >= outOriginal.columnEnd) return -1;
  137. if (columnEnd <= outOriginal.columnStart) return 1;
  138. return 0;
  139. });
  140. }
  141. function eachInputGeneratedRange(map, callback) {
  142. for (var _iterator5 = map.sources, _isArray5 = Array.isArray(_iterator5), _i5 = 0, _iterator5 = _isArray5 ? _iterator5 : (0, _getIterator3.default)(_iterator5);;) {
  143. var _ref13;
  144. if (_isArray5) {
  145. if (_i5 >= _iterator5.length) break;
  146. _ref13 = _iterator5[_i5++];
  147. } else {
  148. _i5 = _iterator5.next();
  149. if (_i5.done) break;
  150. _ref13 = _i5.value;
  151. }
  152. var _ref14 = _ref13;
  153. var _source2 = _ref14.source,
  154. _mappings = _ref14.mappings;
  155. for (var _iterator6 = _mappings, _isArray6 = Array.isArray(_iterator6), _i6 = 0, _iterator6 = _isArray6 ? _iterator6 : (0, _getIterator3.default)(_iterator6);;) {
  156. var _ref16;
  157. if (_isArray6) {
  158. if (_i6 >= _iterator6.length) break;
  159. _ref16 = _iterator6[_i6++];
  160. } else {
  161. _i6 = _iterator6.next();
  162. if (_i6.done) break;
  163. _ref16 = _i6.value;
  164. }
  165. var _ref17 = _ref16;
  166. var _original = _ref17.original,
  167. _generated2 = _ref17.generated;
  168. for (var _iterator7 = _generated2, _isArray7 = Array.isArray(_iterator7), _i7 = 0, _iterator7 = _isArray7 ? _iterator7 : (0, _getIterator3.default)(_iterator7);;) {
  169. var _ref18;
  170. if (_isArray7) {
  171. if (_i7 >= _iterator7.length) break;
  172. _ref18 = _iterator7[_i7++];
  173. } else {
  174. _i7 = _iterator7.next();
  175. if (_i7.done) break;
  176. _ref18 = _i7.value;
  177. }
  178. var item = _ref18;
  179. callback(item, _original, _source2);
  180. }
  181. }
  182. }
  183. }
  184. function buildMappingData(map) {
  185. var consumer = new _sourceMap2.default.SourceMapConsumer((0, _extends3.default)({}, map, {
  186. sourceRoot: null
  187. }));
  188. var sources = new _map2.default();
  189. var mappings = new _map2.default();
  190. var last = null;
  191. consumer.computeColumnSpans();
  192. consumer.eachMapping(function (m) {
  193. if (m.originalLine === null) return;
  194. var source = sources.get(m.source);
  195. if (!source) {
  196. source = {
  197. path: m.source,
  198. content: consumer.sourceContentFor(m.source, true)
  199. };
  200. sources.set(m.source, source);
  201. }
  202. var sourceData = mappings.get(source);
  203. if (!sourceData) {
  204. sourceData = {
  205. source: source,
  206. mappings: []
  207. };
  208. mappings.set(source, sourceData);
  209. }
  210. var obj = {
  211. line: m.originalLine,
  212. columnStart: m.originalColumn,
  213. columnEnd: Infinity,
  214. name: m.name
  215. };
  216. if (last && last.source === source && last.mapping.line === m.originalLine) {
  217. last.mapping.columnEnd = m.originalColumn;
  218. }
  219. last = {
  220. source: source,
  221. mapping: obj
  222. };
  223. sourceData.mappings.push({
  224. original: obj,
  225. generated: consumer.allGeneratedPositionsFor({
  226. source: m.source,
  227. line: m.originalLine,
  228. column: m.originalColumn
  229. }).map(function (item) {
  230. return {
  231. line: item.line,
  232. columnStart: item.column,
  233. columnEnd: item.lastColumn + 1
  234. };
  235. })
  236. });
  237. }, null, _sourceMap2.default.SourceMapConsumer.ORIGINAL_ORDER);
  238. return {
  239. file: map.file,
  240. sourceRoot: map.sourceRoot,
  241. sources: (0, _from2.default)(mappings.values())
  242. };
  243. }
  244. function findInsertionLocation(array, callback) {
  245. var left = 0;
  246. var right = array.length;
  247. while (left < right) {
  248. var mid = Math.floor((left + right) / 2);
  249. var item = array[mid];
  250. var result = callback(item);
  251. if (result === 0) {
  252. left = mid;
  253. break;
  254. }
  255. if (result >= 0) {
  256. right = mid;
  257. } else {
  258. left = mid + 1;
  259. }
  260. }
  261. var i = left;
  262. if (i < array.length) {
  263. while (i > 0 && callback(array[i]) >= 0) {
  264. i--;
  265. }
  266. return i + 1;
  267. }
  268. return i;
  269. }
  270. function filterSortedArray(array, callback) {
  271. var start = findInsertionLocation(array, callback);
  272. var results = [];
  273. for (var i = start; i < array.length && callback(array[i]) === 0; i++) {
  274. results.push(array[i]);
  275. }
  276. return results;
  277. }
  278. module.exports = exports["default"];