aboutsummaryrefslogtreecommitdiff
path: root/deps/node/deps/npm/node_modules/libnpx/get-prefix.js
diff options
context:
space:
mode:
Diffstat (limited to 'deps/node/deps/npm/node_modules/libnpx/get-prefix.js')
-rw-r--r--deps/node/deps/npm/node_modules/libnpx/get-prefix.js54
1 files changed, 54 insertions, 0 deletions
diff --git a/deps/node/deps/npm/node_modules/libnpx/get-prefix.js b/deps/node/deps/npm/node_modules/libnpx/get-prefix.js
new file mode 100644
index 00000000..3fef7f7e
--- /dev/null
+++ b/deps/node/deps/npm/node_modules/libnpx/get-prefix.js
@@ -0,0 +1,54 @@
+'use strict'
+
+const promisify = require('./util.js').promisify
+
+const path = require('path')
+const statAsync = promisify(require('fs').stat)
+
+module.exports = getPrefix
+function getPrefix (root) {
+ const original = root = path.resolve(root)
+ while (path.basename(root) === 'node_modules') {
+ root = path.dirname(root)
+ }
+ if (original !== root) {
+ return Promise.resolve(root)
+ } else {
+ return Promise.resolve(getPrefixFromTree(root))
+ }
+}
+
+function getPrefixFromTree (current) {
+ if (isRootPath(current, process.platform)) {
+ return false
+ } else {
+ return Promise.all([
+ fileExists(path.join(current, 'package.json')),
+ fileExists(path.join(current, 'node_modules'))
+ ]).then(args => {
+ const hasPkg = args[0]
+ const hasModules = args[1]
+ if (hasPkg || hasModules) {
+ return current
+ } else {
+ return getPrefixFromTree(path.dirname(current))
+ }
+ })
+ }
+}
+
+module.exports._fileExists = fileExists
+function fileExists (f) {
+ return statAsync(f).catch(err => {
+ if (err.code !== 'ENOENT') {
+ throw err
+ }
+ })
+}
+
+module.exports._isRootPath = isRootPath
+function isRootPath (p, platform) {
+ return platform === 'win32'
+ ? p.match(/^[a-z]+:[/\\]?$/i)
+ : p === '/'
+}