diff options
author | Florian Dold <florian.dold@gmail.com> | 2017-05-28 00:38:50 +0200 |
---|---|---|
committer | Florian Dold <florian.dold@gmail.com> | 2017-05-28 00:40:43 +0200 |
commit | 7fff4499fd915bcea3fa93b1aa8b35f4fe7a6027 (patch) | |
tree | 6de9a1aebd150a23b7f8c273ec657a5d0a18fe3e /node_modules/espower-location-detector/lib/source-adjuster.js | |
parent | 963b7a41feb29cc4be090a2446bdfe0c1f1bcd81 (diff) |
add linting (and some initial fixes)
Diffstat (limited to 'node_modules/espower-location-detector/lib/source-adjuster.js')
-rw-r--r-- | node_modules/espower-location-detector/lib/source-adjuster.js | 63 |
1 files changed, 63 insertions, 0 deletions
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; |