Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download
81169 views
1
var assert = require("assert");
2
var getFieldValue = require("./types").getFieldValue;
3
var sourceMap = require("source-map");
4
var SourceMapConsumer = sourceMap.SourceMapConsumer;
5
var SourceMapGenerator = sourceMap.SourceMapGenerator;
6
var hasOwn = Object.prototype.hasOwnProperty;
7
8
function getUnionOfKeys() {
9
var result = {};
10
var argc = arguments.length;
11
for (var i = 0; i < argc; ++i) {
12
var keys = Object.keys(arguments[i]);
13
var keyCount = keys.length;
14
for (var j = 0; j < keyCount; ++j) {
15
result[keys[j]] = true;
16
}
17
}
18
return result;
19
}
20
exports.getUnionOfKeys = getUnionOfKeys;
21
22
function comparePos(pos1, pos2) {
23
return (pos1.line - pos2.line) || (pos1.column - pos2.column);
24
}
25
exports.comparePos = comparePos;
26
27
exports.composeSourceMaps = function(formerMap, latterMap) {
28
if (formerMap) {
29
if (!latterMap) {
30
return formerMap;
31
}
32
} else {
33
return latterMap || null;
34
}
35
36
var smcFormer = new SourceMapConsumer(formerMap);
37
var smcLatter = new SourceMapConsumer(latterMap);
38
var smg = new SourceMapGenerator({
39
file: latterMap.file,
40
sourceRoot: latterMap.sourceRoot
41
});
42
43
var sourcesToContents = {};
44
45
smcLatter.eachMapping(function(mapping) {
46
var origPos = smcFormer.originalPositionFor({
47
line: mapping.originalLine,
48
column: mapping.originalColumn
49
});
50
51
var sourceName = origPos.source;
52
if (sourceName === null) {
53
return;
54
}
55
56
smg.addMapping({
57
source: sourceName,
58
original: {
59
line: origPos.line,
60
column: origPos.column
61
},
62
generated: {
63
line: mapping.generatedLine,
64
column: mapping.generatedColumn
65
},
66
name: mapping.name
67
});
68
69
var sourceContent = smcFormer.sourceContentFor(sourceName);
70
if (sourceContent && !hasOwn.call(sourcesToContents, sourceName)) {
71
sourcesToContents[sourceName] = sourceContent;
72
smg.setSourceContent(sourceName, sourceContent);
73
}
74
});
75
76
return smg.toJSON();
77
};
78
79