| 'use strict'; | ||
| var os = require('os'); | ||
| // adapted from https://github.com/sindresorhus/os-homedir/blob/11e089f4754db38bb535e5a8416320c4446e8cfd/index.js | ||
| module.exports = os.homedir || function homedir() { | ||
| var home = process.env.HOME; | ||
| var user = process.env.LOGNAME || process.env.USER || process.env.LNAME || process.env.USERNAME; | ||
| if (process.platform === 'win32') { | ||
| return process.env.USERPROFILE || process.env.HOMEDRIVE + process.env.HOMEPATH || home || null; | ||
| } | ||
| if (process.platform === 'darwin') { | ||
| return home || (user ? '/Users/' + user : null); | ||
| } | ||
| if (process.platform === 'linux') { | ||
| return home || (process.getuid() === 0 ? '/root' : (user ? '/home/' + user : null)); // eslint-disable-line no-extra-parens | ||
| } | ||
| return home || null; | ||
| }; |
| 'use strict'; | ||
| var fs = require('fs'); | ||
| var homedir = require('../lib/homedir'); | ||
| var path = require('path'); | ||
| var test = require('tape'); | ||
| var mkdirp = require('mkdirp'); | ||
| var rimraf = require('rimraf'); | ||
| var mv = require('mv'); | ||
| var copyDir = require('copy-dir'); | ||
| var tmp = require('tmp'); | ||
| var HOME = homedir(); | ||
| var hnm = path.join(HOME, '.node_modules'); | ||
| var hnl = path.join(HOME, '.node_libraries'); | ||
| var resolve = require('../sync'); | ||
| function makeDir(t, dir, cb) { | ||
| mkdirp(dir, function (err) { | ||
| if (err) { | ||
| cb(err); | ||
| } else { | ||
| t.teardown(function cleanup() { | ||
| rimraf.sync(dir); | ||
| }); | ||
| cb(); | ||
| } | ||
| }); | ||
| } | ||
| function makeTempDir(t, dir, cb) { | ||
| if (fs.existsSync(dir)) { | ||
| var tmpResult = tmp.dirSync(); | ||
| t.teardown(tmpResult.removeCallback); | ||
| var backup = path.join(tmpResult.name, path.basename(dir)); | ||
| mv(dir, backup, function (err) { | ||
| if (err) { | ||
| cb(err); | ||
| } else { | ||
| t.teardown(function () { | ||
| mv(backup, dir, cb); | ||
| }); | ||
| makeDir(t, dir, cb); | ||
| } | ||
| }); | ||
| } else { | ||
| makeDir(t, dir, cb); | ||
| } | ||
| } | ||
| test('homedir module paths', function (t) { | ||
| t.plan(7); | ||
| makeTempDir(t, hnm, function (err) { | ||
| t.error(err, 'no error with HNM temp dir'); | ||
| if (err) { | ||
| return t.end(); | ||
| } | ||
| var bazHNMDir = path.join(hnm, 'baz'); | ||
| var dotMainDir = path.join(hnm, 'dot_main'); | ||
| copyDir.sync(path.join(__dirname, 'resolver/baz'), bazHNMDir); | ||
| copyDir.sync(path.join(__dirname, 'resolver/dot_main'), dotMainDir); | ||
| var bazHNMmain = path.join(bazHNMDir, 'quux.js'); | ||
| t.equal(require.resolve('baz'), bazHNMmain, 'sanity check: require.resolve finds HNM `baz`'); | ||
| var dotMainMain = path.join(dotMainDir, 'index.js'); | ||
| t.equal(require.resolve('dot_main'), dotMainMain, 'sanity check: require.resolve finds `dot_main`'); | ||
| makeTempDir(t, hnl, function (err) { | ||
| t.error(err, 'no error with HNL temp dir'); | ||
| if (err) { | ||
| return t.end(); | ||
| } | ||
| var bazHNLDir = path.join(hnl, 'baz'); | ||
| copyDir.sync(path.join(__dirname, 'resolver/baz'), bazHNLDir); | ||
| var dotSlashMainDir = path.join(hnl, 'dot_slash_main'); | ||
| var dotSlashMainMain = path.join(dotSlashMainDir, 'index.js'); | ||
| copyDir.sync(path.join(__dirname, 'resolver/dot_slash_main'), dotSlashMainDir); | ||
| t.equal(require.resolve('baz'), bazHNMmain, 'sanity check: require.resolve finds HNM `baz`'); | ||
| t.equal(require.resolve('dot_slash_main'), dotSlashMainMain, 'sanity check: require.resolve finds HNL `dot_slash_main`'); | ||
| t.test('with temp dirs', function (st) { | ||
| st.plan(3); | ||
| st.test('just in `$HOME/.node_modules`', function (s2t) { | ||
| s2t.plan(1); | ||
| var res = resolve('dot_main'); | ||
| s2t.equal(res, dotMainMain, '`dot_main` resolves in `$HOME/.node_modules`'); | ||
| }); | ||
| st.test('just in `$HOME/.node_libraries`', function (s2t) { | ||
| s2t.plan(1); | ||
| var res = resolve('dot_slash_main'); | ||
| s2t.equal(res, dotSlashMainMain, '`dot_slash_main` resolves in `$HOME/.node_libraries`'); | ||
| }); | ||
| st.test('in `$HOME/.node_libraries` and `$HOME/.node_modules`', function (s2t) { | ||
| s2t.plan(1); | ||
| var res = resolve('baz'); | ||
| s2t.equal(res, bazHNMmain, '`baz` resolves in `$HOME/.node_modules` when in both'); | ||
| }); | ||
| }); | ||
| }); | ||
| }); | ||
| }); |
| 'use strict'; | ||
| var fs = require('fs'); | ||
| var homedir = require('../lib/homedir'); | ||
| var path = require('path'); | ||
| var test = require('tape'); | ||
| var mkdirp = require('mkdirp'); | ||
| var rimraf = require('rimraf'); | ||
| var mv = require('mv'); | ||
| var copyDir = require('copy-dir'); | ||
| var tmp = require('tmp'); | ||
| var HOME = homedir(); | ||
| var hnm = path.join(HOME, '.node_modules'); | ||
| var hnl = path.join(HOME, '.node_libraries'); | ||
| var resolve = require('../async'); | ||
| function makeDir(t, dir, cb) { | ||
| mkdirp(dir, function (err) { | ||
| if (err) { | ||
| cb(err); | ||
| } else { | ||
| t.teardown(function cleanup() { | ||
| rimraf.sync(dir); | ||
| }); | ||
| cb(); | ||
| } | ||
| }); | ||
| } | ||
| function makeTempDir(t, dir, cb) { | ||
| if (fs.existsSync(dir)) { | ||
| var tmpResult = tmp.dirSync(); | ||
| t.teardown(tmpResult.removeCallback); | ||
| var backup = path.join(tmpResult.name, path.basename(dir)); | ||
| mv(dir, backup, function (err) { | ||
| if (err) { | ||
| cb(err); | ||
| } else { | ||
| t.teardown(function () { | ||
| mv(backup, dir, cb); | ||
| }); | ||
| makeDir(t, dir, cb); | ||
| } | ||
| }); | ||
| } else { | ||
| makeDir(t, dir, cb); | ||
| } | ||
| } | ||
| test('homedir module paths', function (t) { | ||
| t.plan(7); | ||
| makeTempDir(t, hnm, function (err) { | ||
| t.error(err, 'no error with HNM temp dir'); | ||
| if (err) { | ||
| return t.end(); | ||
| } | ||
| var bazHNMDir = path.join(hnm, 'baz'); | ||
| var dotMainDir = path.join(hnm, 'dot_main'); | ||
| copyDir.sync(path.join(__dirname, 'resolver/baz'), bazHNMDir); | ||
| copyDir.sync(path.join(__dirname, 'resolver/dot_main'), dotMainDir); | ||
| var bazPkg = { name: 'baz', main: 'quux.js' }; | ||
| var dotMainPkg = { main: 'index' }; | ||
| var bazHNMmain = path.join(bazHNMDir, 'quux.js'); | ||
| t.equal(require.resolve('baz'), bazHNMmain, 'sanity check: require.resolve finds HNM `baz`'); | ||
| var dotMainMain = path.join(dotMainDir, 'index.js'); | ||
| t.equal(require.resolve('dot_main'), dotMainMain, 'sanity check: require.resolve finds `dot_main`'); | ||
| makeTempDir(t, hnl, function (err) { | ||
| t.error(err, 'no error with HNL temp dir'); | ||
| if (err) { | ||
| return t.end(); | ||
| } | ||
| var bazHNLDir = path.join(hnl, 'baz'); | ||
| copyDir.sync(path.join(__dirname, 'resolver/baz'), bazHNLDir); | ||
| var dotSlashMainDir = path.join(hnl, 'dot_slash_main'); | ||
| var dotSlashMainMain = path.join(dotSlashMainDir, 'index.js'); | ||
| var dotSlashMainPkg = { main: 'index' }; | ||
| copyDir.sync(path.join(__dirname, 'resolver/dot_slash_main'), dotSlashMainDir); | ||
| t.equal(require.resolve('baz'), bazHNMmain, 'sanity check: require.resolve finds HNM `baz`'); | ||
| t.equal(require.resolve('dot_slash_main'), dotSlashMainMain, 'sanity check: require.resolve finds HNL `dot_slash_main`'); | ||
| t.test('with temp dirs', function (st) { | ||
| st.plan(3); | ||
| st.test('just in `$HOME/.node_modules`', function (s2t) { | ||
| s2t.plan(3); | ||
| resolve('dot_main', function (err, res, pkg) { | ||
| s2t.error(err, 'no error resolving `dot_main`'); | ||
| s2t.equal(res, dotMainMain, '`dot_main` resolves in `$HOME/.node_modules`'); | ||
| s2t.deepEqual(pkg, dotMainPkg); | ||
| }); | ||
| }); | ||
| st.test('just in `$HOME/.node_libraries`', function (s2t) { | ||
| s2t.plan(3); | ||
| resolve('dot_slash_main', function (err, res, pkg) { | ||
| s2t.error(err, 'no error resolving `dot_slash_main`'); | ||
| s2t.equal(res, dotSlashMainMain, '`dot_slash_main` resolves in `$HOME/.node_libraries`'); | ||
| s2t.deepEqual(pkg, dotSlashMainPkg); | ||
| }); | ||
| }); | ||
| st.test('in `$HOME/.node_libraries` and `$HOME/.node_modules`', function (s2t) { | ||
| s2t.plan(3); | ||
| resolve('baz', function (err, res, pkg) { | ||
| s2t.error(err, 'no error resolving `baz`'); | ||
| s2t.equal(res, bazHNMmain, '`baz` resolves in `$HOME/.node_modules` when in both'); | ||
| s2t.deepEqual(pkg, bazPkg); | ||
| }); | ||
| }); | ||
| }); | ||
| }); | ||
| }); | ||
| }); |
+1
-0
@@ -17,2 +17,3 @@ { | ||
| "id-length": [2, { "min": 1, "max": 30 }], | ||
| "max-lines": [2, 350], | ||
| "max-lines-per-function": 0, | ||
@@ -19,0 +20,0 @@ "max-nested-callbacks": 0, |
+10
-1
| var fs = require('fs'); | ||
| var getHomedir = require('./homedir'); | ||
| var path = require('path'); | ||
@@ -10,2 +11,10 @@ var caller = require('./caller'); | ||
| var homedir = getHomedir(); | ||
| var defaultPaths = function () { | ||
| return [ | ||
| path.join(homedir, '.node_modules'), | ||
| path.join(homedir, '.node_libraries') | ||
| ]; | ||
| }; | ||
| var defaultIsFile = function isFile(file, cb) { | ||
@@ -102,3 +111,3 @@ fs.stat(file, function (err, stat) { | ||
| opts.paths = opts.paths || []; | ||
| opts.paths = opts.paths || defaultPaths(); | ||
@@ -105,0 +114,0 @@ // ensure that `basedir` is an absolute path at this point, resolving against the process' current working directory |
+5
-5
@@ -8,3 +8,3 @@ { | ||
| "node:async_hooks": [">= 14.18 && < 15", ">= 16"], | ||
| "buffer_ieee754": "< 0.9.7", | ||
| "buffer_ieee754": ">= 0.5 && < 0.9.7", | ||
| "buffer": true, | ||
@@ -14,3 +14,3 @@ "node:buffer": [">= 14.18 && < 15", ">= 16"], | ||
| "node:child_process": [">= 14.18 && < 15", ">= 16"], | ||
| "cluster": true, | ||
| "cluster": ">= 0.5", | ||
| "node:cluster": [">= 14.18 && < 15", ">= 16"], | ||
@@ -82,3 +82,3 @@ "console": true, | ||
| "node:process": [">= 14.18 && < 15", ">= 16"], | ||
| "punycode": true, | ||
| "punycode": ">= 0.5", | ||
| "node:punycode": [">= 14.18 && < 15", ">= 16"], | ||
@@ -116,3 +116,3 @@ "querystring": true, | ||
| "node:string_decoder": [">= 14.18 && < 15", ">= 16"], | ||
| "sys": [">= 0.6 && < 0.7", ">= 0.8"], | ||
| "sys": [">= 0.4 && < 0.7", ">= 0.8"], | ||
| "node:sys": [">= 14.18 && < 15", ">= 16"], | ||
@@ -154,4 +154,4 @@ "timers": true, | ||
| "node:worker_threads": [">= 14.18 && < 15", ">= 16"], | ||
| "zlib": true, | ||
| "zlib": ">= 0.5", | ||
| "node:zlib": [">= 14.18 && < 15", ">= 16"] | ||
| } |
+10
-1
| var isCore = require('is-core-module'); | ||
| var fs = require('fs'); | ||
| var path = require('path'); | ||
| var getHomedir = require('./homedir'); | ||
| var caller = require('./caller'); | ||
@@ -10,2 +11,10 @@ var nodeModulesPaths = require('./node-modules-paths'); | ||
| var homedir = getHomedir(); | ||
| var defaultPaths = function () { | ||
| return [ | ||
| path.join(homedir, '.node_modules'), | ||
| path.join(homedir, '.node_libraries') | ||
| ]; | ||
| }; | ||
| var defaultIsFile = function isFile(file) { | ||
@@ -86,3 +95,3 @@ try { | ||
| opts.paths = opts.paths || []; | ||
| opts.paths = opts.paths || defaultPaths(); | ||
@@ -89,0 +98,0 @@ // ensure that `basedir` is an absolute path at this point, resolving against the process' current working directory |
+8
-3
| { | ||
| "name": "resolve", | ||
| "description": "resolve like require.resolve() on behalf of files asynchronously and synchronously", | ||
| "version": "1.21.1", | ||
| "version": "1.22.0", | ||
| "repository": { | ||
@@ -35,9 +35,14 @@ "type": "git", | ||
| "aud": "^2.0.0", | ||
| "copy-dir": "^1.3.0", | ||
| "eclint": "^2.8.1", | ||
| "eslint": "^8.7.0", | ||
| "in-publish": "^2.0.1", | ||
| "mkdirp": "^0.5.5", | ||
| "mv": "^2.1.1", | ||
| "object-keys": "^1.1.1", | ||
| "rimraf": "^2.7.1", | ||
| "safe-publish-latest": "^2.0.0", | ||
| "tap": "0.4.13", | ||
| "tape": "^5.4.1" | ||
| "tape": "^5.4.1", | ||
| "tmp": "^0.0.31" | ||
| }, | ||
@@ -54,3 +59,3 @@ "license": "MIT", | ||
| "dependencies": { | ||
| "is-core-module": "^2.8.0", | ||
| "is-core-module": "^2.8.1", | ||
| "path-parse": "^1.0.7", | ||
@@ -57,0 +62,0 @@ "supports-preserve-symlinks-flag": "^1.0.0" |
Debug access
Supply chain riskUses debug, reflection and dynamic code execution features.
Found 2 instances in 1 package
Dynamic require
Supply chain riskDynamic require can indicate the package is performing dangerous or unsafe dynamic code execution.
Found 1 instance in 1 package
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 8 instances in 1 package
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Found 1 instance in 1 package
Debug access
Supply chain riskUses debug, reflection and dynamic code execution features.
Found 2 instances in 1 package
Dynamic require
Supply chain riskDynamic require can indicate the package is performing dangerous or unsafe dynamic code execution.
Found 1 instance in 1 package
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Found 1 instance in 1 package
143964
7.21%98
3.16%3197
7.79%15
50%22
83.33%Updated