aboutsummaryrefslogtreecommitdiff
path: root/node_modules/merge-source-map/index.js
diff options
context:
space:
mode:
authorruki <waruqi@gmail.com>2018-11-08 00:38:48 +0800
committerruki <waruqi@gmail.com>2018-11-07 21:53:09 +0800
commit26105034da4fcce7ac883c899d781f016559310d (patch)
treec459a5dc4e3aa0972d9919033ece511ce76dd129 /node_modules/merge-source-map/index.js
parent2c77f00f1a7ecb6c8192f9c16d3b2001b254a107 (diff)
downloadxmake-docs-26105034da4fcce7ac883c899d781f016559310d.tar.gz
xmake-docs-26105034da4fcce7ac883c899d781f016559310d.zip
switch to vuepress
Diffstat (limited to 'node_modules/merge-source-map/index.js')
-rw-r--r--node_modules/merge-source-map/index.js65
1 files changed, 65 insertions, 0 deletions
diff --git a/node_modules/merge-source-map/index.js b/node_modules/merge-source-map/index.js
new file mode 100644
index 00000000..2867fb7f
--- /dev/null
+++ b/node_modules/merge-source-map/index.js
@@ -0,0 +1,65 @@
+var sourceMap = require('source-map')
+var SourceMapConsumer = sourceMap.SourceMapConsumer
+var SourceMapGenerator = sourceMap.SourceMapGenerator
+
+module.exports = merge
+
+/**
+ * Merge old source map and new source map and return merged.
+ * If old or new source map value is falsy, return another one as it is.
+ *
+ * @param {object|string} [oldMap] old source map object
+ * @param {object|string} [newmap] new source map object
+ * @return {object|undefined} merged source map object, or undefined when both old and new source map are undefined
+ */
+function merge(oldMap, newMap) {
+ if (!oldMap) return newMap
+ if (!newMap) return oldMap
+
+ var oldMapConsumer = new SourceMapConsumer(oldMap)
+ var newMapConsumer = new SourceMapConsumer(newMap)
+ var mergedMapGenerator = new SourceMapGenerator()
+
+ // iterate on new map and overwrite original position of new map with one of old map
+ newMapConsumer.eachMapping(function(m) {
+ // pass when `originalLine` is null.
+ // It occurs in case that the node does not have origin in original code.
+ if (m.originalLine == null) return
+
+ var origPosInOldMap = oldMapConsumer.originalPositionFor({
+ line: m.originalLine,
+ column: m.originalColumn
+ })
+
+ if (origPosInOldMap.source == null) return
+
+ mergedMapGenerator.addMapping({
+ original: {
+ line: origPosInOldMap.line,
+ column: origPosInOldMap.column
+ },
+ generated: {
+ line: m.generatedLine,
+ column: m.generatedColumn
+ },
+ source: origPosInOldMap.source,
+ name: origPosInOldMap.name
+ })
+ })
+
+ var consumers = [oldMapConsumer, newMapConsumer]
+ consumers.forEach(function(consumer) {
+ consumer.sources.forEach(function(sourceFile) {
+ mergedMapGenerator._sources.add(sourceFile)
+ var sourceContent = consumer.sourceContentFor(sourceFile)
+ if (sourceContent != null) {
+ mergedMapGenerator.setSourceContent(sourceFile, sourceContent)
+ }
+ })
+ })
+
+ mergedMapGenerator._sourceRoot = oldMap.sourceRoot
+ mergedMapGenerator._file = oldMap.file
+
+ return JSON.parse(mergedMapGenerator.toString())
+}