aboutsummaryrefslogtreecommitdiff
path: root/node_modules/espower-location-detector/lib/source-adjuster.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/espower-location-detector/lib/source-adjuster.js')
-rw-r--r--node_modules/espower-location-detector/lib/source-adjuster.js63
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;