summaryrefslogtreecommitdiffstats
path: root/node_modules/true-case-path/index.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/true-case-path/index.js')
-rw-r--r--node_modules/true-case-path/index.js32
1 files changed, 32 insertions, 0 deletions
diff --git a/node_modules/true-case-path/index.js b/node_modules/true-case-path/index.js
new file mode 100644
index 0000000..e550a87
--- /dev/null
+++ b/node_modules/true-case-path/index.js
@@ -0,0 +1,32 @@
+'use strict'
+
+var glob = require('glob')
+var path = require('path')
+
+function trueCasePathSync(fsPath) {
+
+ // Normalize the path so as to resolve . and .. components.
+ // !! As of Node v4.1.1, a path starting with ../ is NOT resolved relative
+ // !! to the current dir, and glob.sync() below then fails.
+ // !! When in doubt, resolve with fs.realPathSync() *beforehand*.
+ var fsPathNormalized = path.normalize(fsPath)
+
+ // OSX: HFS+ stores filenames in NFD (decomposed normal form) Unicode format,
+ // so we must ensure that the input path is in that format first.
+ if (process.platform === 'darwin') fsPathNormalized = fsPathNormalized.normalize('NFD')
+
+ // !! Windows: Curiously, the drive component mustn't be part of a glob,
+ // !! otherwise glob.sync() will invariably match nothing.
+ // !! Thus, we remove the drive component and instead pass it in as the 'cwd'
+ // !! (working dir.) property below.
+ var pathRoot = path.parse(fsPathNormalized).root
+ var noDrivePath = fsPathNormalized.slice(Math.max(pathRoot.length - 1, 0))
+
+ // Perform case-insensitive globbing (on Windows, relative to the drive /
+ // network share) and return the 1st match, if any.
+ // Fortunately, glob() with nocase case-corrects the input even if it is
+ // a *literal* path.
+ return glob.sync(noDrivePath, { nocase: true, cwd: pathRoot })[0]
+}
+
+module.exports = trueCasePathSync