diff options
Diffstat (limited to 'node_modules/espower-location-detector/lib')
-rw-r--r-- | node_modules/espower-location-detector/lib/position-detector.js | 32 | ||||
-rw-r--r-- | node_modules/espower-location-detector/lib/source-adjuster.js | 63 |
2 files changed, 95 insertions, 0 deletions
diff --git a/node_modules/espower-location-detector/lib/position-detector.js b/node_modules/espower-location-detector/lib/position-detector.js new file mode 100644 index 000000000..a9ef278ab --- /dev/null +++ b/node_modules/espower-location-detector/lib/position-detector.js @@ -0,0 +1,32 @@ +'use strict'; + +var SourceMapConsumer = require('source-map').SourceMapConsumer; +var extend = require('xtend'); + +function isEmptyMapping (pos) { + return ['source', 'line', 'column', 'name'].every(function (prop) { + return pos[prop] === null; + }); +} + +function PositionDetector (sourceMap) { + if (sourceMap) { + this.sourceMapConsumer = new SourceMapConsumer(sourceMap); + } +} +PositionDetector.prototype.positionFor = function (currentNode) { + var currentPosition = { + source: currentNode.loc.source, + line: currentNode.loc.start.line, + column: currentNode.loc.start.column + }; + if (this.sourceMapConsumer) { + var found = this.sourceMapConsumer.originalPositionFor(currentPosition); + if (found && !isEmptyMapping(found)) { + return extend({ mapped: true }, found); + } + } + return extend({ mapped: false }, currentPosition); +}; + +module.exports = PositionDetector; diff --git a/node_modules/espower-location-detector/lib/source-adjuster.js b/node_modules/espower-location-detector/lib/source-adjuster.js new file mode 100644 index 000000000..973b32a0f --- /dev/null +++ b/node_modules/espower-location-detector/lib/source-adjuster.js @@ -0,0 +1,63 @@ +'use strict'; + +var _path = require('path'); +var isAbsolute = require('path-is-absolute'); +var isUrl = require('is-url'); + +function SourceAdjuster (sourceRoot, path, sourceMap) { + this.path = path; + this.sourceRoot = sourceRoot; + if (typeof sourceMap === 'string') { + this.sourceMap = JSON.parse(sourceMap.replace(/^\)\]\}'/, '')); + } else { + this.sourceMap = sourceMap; + } +} +SourceAdjuster.prototype.relativize = function (filepathOrUrl, mappedWithSourceMap) { + var filepath; + if (mappedWithSourceMap && filepathOrUrl && this.sourceMap) { + filepath = this.relativizeWithSourceMap(filepathOrUrl); + } else { + filepath = this.relativizeWithoutSourceMap(filepathOrUrl); + } + return fallbackOnBasename(filepath); +}; +SourceAdjuster.prototype.relativizeWithSourceMap = function (filepathOrUrl) { + var sourceMapRoot = this.sourceMap.sourceRoot; + if (sourceMapRoot && isUrl(sourceMapRoot)) { + return _path.relative(sourceMapRoot, filepathOrUrl); + } + if (this.sourceRoot && isAbsolute(this.sourceRoot) && isAbsolute(filepathOrUrl)) { + return _path.relative(this.sourceRoot, filepathOrUrl); + } + if (sourceMapRoot && isAbsolute(sourceMapRoot) && isAbsolute(filepathOrUrl)) { + return _path.relative(sourceMapRoot, filepathOrUrl); + } + if (isUrl(filepathOrUrl)) { + return _path.basename(filepathOrUrl); + } + return filepathOrUrl; +}; +SourceAdjuster.prototype.relativizeWithoutSourceMap = function (filepathOrUrl) { + var tmpPath = this.path || filepathOrUrl; + if (this.sourceRoot && isAbsolute(this.sourceRoot) && isAbsolute(tmpPath)) { + return _path.relative(this.sourceRoot, tmpPath); + } else { + return this.path; + } +}; + +function fallbackOnBasename (filepath) { + if (filepath) { + if (filepath.split(_path.sep).indexOf('..') !== -1) { + return _path.basename(filepath); + } else if (isUrl(filepath)) { + return _path.basename(filepath); + } else if (isAbsolute(filepath)) { + return _path.basename(filepath); + } + } + return filepath; +} + +module.exports = SourceAdjuster; |