Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nodejs/node.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/path.js51
1 files changed, 14 insertions, 37 deletions
diff --git a/lib/path.js b/lib/path.js
index 9ac877eabca..a41787dd66f 100644
--- a/lib/path.js
+++ b/lib/path.js
@@ -1054,29 +1054,18 @@ const posix = {
if (from === to)
return '';
+ // Trim leading forward slashes.
from = posix.resolve(from);
to = posix.resolve(to);
if (from === to)
return '';
- // Trim any leading backslashes
- let fromStart = 1;
- while (fromStart < from.length &&
- from.charCodeAt(fromStart) === CHAR_FORWARD_SLASH) {
- fromStart++;
- }
+ const fromStart = 1;
const fromEnd = from.length;
- const fromLen = (fromEnd - fromStart);
-
- // Trim any leading backslashes
- let toStart = 1;
- while (toStart < to.length &&
- to.charCodeAt(toStart) === CHAR_FORWARD_SLASH) {
- toStart++;
- }
- const toEnd = to.length;
- const toLen = (toEnd - toStart);
+ const fromLen = fromEnd - fromStart;
+ const toStart = 1;
+ const toLen = to.length - toStart;
// Compare paths to find the longest common path from root
const length = (fromLen < toLen ? fromLen : toLen);
@@ -1101,38 +1090,26 @@ const posix = {
// For example: from='/'; to='/foo'
return to.slice(toStart + i);
}
- } else if (fromLen > length) {
- if (from.charCodeAt(fromStart + i) === CHAR_FORWARD_SLASH) {
- // We get here if `to` is the exact base path for `from`.
- // For example: from='/foo/bar/baz'; to='/foo/bar'
- lastCommonSep = i;
- } else if (i === 0) {
- // We get here if `to` is the root.
- // For example: from='/foo'; to='/'
- lastCommonSep = 0;
- }
+ } else if (fromLen > length &&
+ from.charCodeAt(fromStart + i) === CHAR_FORWARD_SLASH) {
+ // We get here if `to` is the exact base path for `from`.
+ // For example: from='/foo/bar/baz'; to='/foo/bar'
+ lastCommonSep = i;
}
}
- var out = '';
+ let out = '';
// Generate the relative path based on the path difference between `to`
- // and `from`
+ // and `from`.
for (i = fromStart + lastCommonSep + 1; i <= fromEnd; ++i) {
if (i === fromEnd || from.charCodeAt(i) === CHAR_FORWARD_SLASH) {
out += out.length === 0 ? '..' : '/..';
}
}
- toStart += lastCommonSep;
-
// Lastly, append the rest of the destination (`to`) path that comes after
- // the common path parts
- if (out.length > 0)
- return `${out}${to.slice(toStart)}`;
-
- if (to.charCodeAt(toStart) === CHAR_FORWARD_SLASH)
- ++toStart;
- return to.slice(toStart);
+ // the common path parts.
+ return `${out}${to.slice(toStart + lastCommonSep)}`;
},
toNamespacedPath(path) {