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