PATH:
usr
/
local
/
lib
/
node_modules
/
npm
/
lib
/
utils
// XXX use infer-owner or gentle-fs.mkdir here const npm = require('../npm.js') const path = require('path') const chownr = require('chownr') const writeFileAtomic = require('write-file-atomic') const mkdirp = require('mkdirp') const fs = require('graceful-fs') let cache = null let cacheUid = null let cacheGid = null let needChown = typeof process.getuid === 'function' const getCacheOwner = () => { let st try { st = fs.lstatSync(cache) } catch (er) { if (er.code !== 'ENOENT') { throw er } st = fs.lstatSync(path.dirname(cache)) } cacheUid = st.uid cacheGid = st.gid needChown = st.uid !== process.getuid() || st.gid !== process.getgid() } const writeOrAppend = (method, file, data) => { if (!cache) { cache = npm.config.get('cache') } // redundant if already absolute, but prevents non-absolute files // from being written as if they're part of the cache. file = path.resolve(cache, file) if (cacheUid === null && needChown) { getCacheOwner() } const dir = path.dirname(file) const firstMade = mkdirp.sync(dir) if (!needChown) { return method(file, data) } let methodThrew = true try { method(file, data) methodThrew = false } finally { // always try to leave it in the right ownership state, even on failure // let the method error fail it instead of the chownr error, though if (!methodThrew) { chownr.sync(firstMade || file, cacheUid, cacheGid) } else { try { chownr.sync(firstMade || file, cacheUid, cacheGid) } catch (_) {} } } } exports.append = (file, data) => writeOrAppend(fs.appendFileSync, file, data) exports.write = (file, data) => writeOrAppend(writeFileAtomic.sync, file, data)
[-] umask.js
[edit]
[-] read-local-package.js
[edit]
[-] completion.sh
[edit]
[-] otplease.js
[edit]
[-] save-stack.js
[edit]
[-] escape-arg.js
[edit]
[-] temp-filename.js
[edit]
[-] lifecycle.js
[edit]
[-] git.js
[edit]
[-] pulse-till-done.js
[edit]
[-] open-url.js
[edit]
[-] usage.js
[edit]
[+]
..
[-] gently-rm.js
[edit]
[-] correct-mkdir.js
[edit]
[-] error-handler.js
[edit]
[-] read-user-info.js
[edit]
[-] ansi-trim.js
[edit]
[-] is-registry.js
[edit]
[-] output.js
[edit]
[-] pick-manifest-from-registry-metadata.js
[edit]
[-] package-id.js
[edit]
[-] metrics-launch.js
[edit]
[-] unix-format-path.js
[edit]
[-] depr-check.js
[edit]
[-] no-progress-while-running.js
[edit]
[-] warn-deprecated.js
[edit]
[-] link.js
[edit]
[-] move.js
[edit]
[-] is-windows.js
[edit]
[-] spawn.js
[edit]
[-] child-path.js
[edit]
[-] unsupported.js
[edit]
[-] metrics.js
[edit]
[-] cache-file.js
[edit]
[-] is-windows-shell.js
[edit]
[-] funding.js
[edit]
[+]
completion
[-] did-you-mean.js
[edit]
[-] lifecycle-cmd.js
[edit]
[-] gunzip-maybe.js
[edit]
[-] error-message.js
[edit]
[-] locker.js
[edit]
[-] parse-json.js
[edit]
[-] perf.js
[edit]
[-] escape-exec-path.js
[edit]
[-] module-name.js
[edit]
[-] is-windows-bash.js
[edit]
[-] deep-sort-object.js
[edit]