aboutsummaryrefslogtreecommitdiff
path: root/sandbox/testAppNevena/Front/node_modules/@npmcli/installed-package-contents
diff options
context:
space:
mode:
Diffstat (limited to 'sandbox/testAppNevena/Front/node_modules/@npmcli/installed-package-contents')
-rw-r--r--sandbox/testAppNevena/Front/node_modules/@npmcli/installed-package-contents/LICENSE15
-rw-r--r--sandbox/testAppNevena/Front/node_modules/@npmcli/installed-package-contents/README.md109
-rw-r--r--sandbox/testAppNevena/Front/node_modules/@npmcli/installed-package-contents/index.js237
-rw-r--r--sandbox/testAppNevena/Front/node_modules/@npmcli/installed-package-contents/package.json37
4 files changed, 398 insertions, 0 deletions
diff --git a/sandbox/testAppNevena/Front/node_modules/@npmcli/installed-package-contents/LICENSE b/sandbox/testAppNevena/Front/node_modules/@npmcli/installed-package-contents/LICENSE
new file mode 100644
index 00000000..19cec97b
--- /dev/null
+++ b/sandbox/testAppNevena/Front/node_modules/@npmcli/installed-package-contents/LICENSE
@@ -0,0 +1,15 @@
+The ISC License
+
+Copyright (c) npm, Inc.
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/sandbox/testAppNevena/Front/node_modules/@npmcli/installed-package-contents/README.md b/sandbox/testAppNevena/Front/node_modules/@npmcli/installed-package-contents/README.md
new file mode 100644
index 00000000..edd23bd2
--- /dev/null
+++ b/sandbox/testAppNevena/Front/node_modules/@npmcli/installed-package-contents/README.md
@@ -0,0 +1,109 @@
+# @npmcli/installed-package-contents
+
+Get the list of files installed in a package in node_modules, including
+bundled dependencies.
+
+This is useful if you want to remove a package node from the tree _without_
+removing its child nodes, for example to extract a new version of the
+dependency into place safely.
+
+It's sort of the reflection of [npm-packlist](http://npm.im/npm-packlist),
+but for listing out the _installed_ files rather than the files that _will_
+be installed. This is of course a much simpler operation, because we don't
+have to handle ignore files or package.json `files` lists.
+
+## USAGE
+
+```js
+// programmatic usage
+const pkgContents = require('@npmcli/installed-package-contents')
+
+pkgContents({ path: 'node_modules/foo', depth: 1 }).then(files => {
+ // files is an array of items that need to be passed to
+ // rimraf or moved out of the way to make the folder empty
+ // if foo bundled dependencies, those will be included.
+ // It will not traverse into child directories, because we set
+ // depth:1 in the options.
+ // If the folder doesn't exist, this returns an empty array.
+})
+
+pkgContents({ path: 'node_modules/foo', depth: Infinity }).then(files => {
+ // setting depth:Infinity tells it to keep walking forever
+ // until it hits something that isn't a directory, so we'll
+ // just get the list of all files, but not their containing
+ // directories.
+})
+```
+
+As a CLI:
+
+```bash
+$ installed-package-contents node_modules/bundle-some -d1
+node_modules/.bin/some
+node_modules/bundle-some/package.json
+node_modules/bundle-some/node_modules/@scope/baz
+node_modules/bundle-some/node_modules/.bin/foo
+node_modules/bundle-some/node_modules/foo
+```
+
+CLI options:
+
+```
+Usage:
+ installed-package-contents <path> [-d<n> --depth=<n>]
+
+Lists the files installed for a package specified by <path>.
+
+Options:
+ -d<n> --depth=<n> Provide a numeric value ("Infinity" is allowed)
+ to specify how deep in the file tree to traverse.
+ Default=1
+ -h --help Show this usage information
+```
+
+## OPTIONS
+
+* `depth` Number, default `1`. How deep to traverse through folders to get
+ contents. Typically you'd want to set this to either `1` (to get the
+ surface files and folders) or `Infinity` (to get all files), but any
+ other positive number is supported as well. If set to `0` or a
+ negative number, returns the path provided and (if it is a package) its
+ set of linked bins.
+* `path` Required. Path to the package in `node_modules` where traversal
+ should begin.
+
+## RETURN VALUE
+
+A Promise that resolves to an array of fully-resolved files and folders
+matching the criteria. This includes all bundled dependencies in
+`node_modules`, and any linked executables in `node_modules/.bin` that the
+package caused to be installed.
+
+An empty or missing package folder will return an empty array. Empty
+directories _within_ package contents are listed, even if the `depth`
+argument would cause them to be traversed into.
+
+## CAVEAT
+
+If using this module to generate a list of files that should be recursively
+removed to clear away the package, note that this will leave empty
+directories behind in certain cases:
+
+- If all child packages are bundled dependencies, then the
+ `node_modules` folder will remain.
+- If all child packages within a given scope were bundled dependencies,
+ then the `node_modules/@scope` folder will remain.
+- If all linked bin scripts were removed, then an empty `node_modules/.bin`
+ folder will remain.
+
+In the interest of speed and algorithmic complexity, this module does _not_
+do a subsequent readdir to see if it would remove all directory entries,
+though it would be easier to look at if it returned `node_modules` or
+`.bin` in that case rather than the contents. However, if the intent is to
+pass these arguments to `rimraf`, it hardly makes sense to do _two_
+`readdir` calls just so that we can have the luxury of having to make a
+third.
+
+Since the primary use case is to delete a package's contents so that they
+can be re-filled with a new version of that package, this caveat does not
+pose a problem. Empty directories are already ignored by both npm and git.
diff --git a/sandbox/testAppNevena/Front/node_modules/@npmcli/installed-package-contents/index.js b/sandbox/testAppNevena/Front/node_modules/@npmcli/installed-package-contents/index.js
new file mode 100644
index 00000000..30427fe2
--- /dev/null
+++ b/sandbox/testAppNevena/Front/node_modules/@npmcli/installed-package-contents/index.js
@@ -0,0 +1,237 @@
+// to GET CONTENTS for folder at PATH (which may be a PACKAGE):
+// - if PACKAGE, read path/package.json
+// - if bins in ../node_modules/.bin, add those to result
+// - if depth >= maxDepth, add PATH to result, and finish
+// - readdir(PATH, with file types)
+// - add all FILEs in PATH to result
+// - if PARENT:
+// - if depth < maxDepth, add GET CONTENTS of all DIRs in PATH
+// - else, add all DIRs in PATH
+// - if no parent
+// - if no bundled deps,
+// - if depth < maxDepth, add GET CONTENTS of DIRs in path except
+// node_modules
+// - else, add all DIRs in path other than node_modules
+// - if has bundled deps,
+// - get list of bundled deps
+// - add GET CONTENTS of bundled deps, PACKAGE=true, depth + 1
+
+const bundled = require('npm-bundled')
+const {promisify} = require('util')
+const fs = require('fs')
+const readFile = promisify(fs.readFile)
+const readdir = promisify(fs.readdir)
+const stat = promisify(fs.stat)
+const lstat = promisify(fs.lstat)
+const {relative, resolve, basename, dirname} = require('path')
+const normalizePackageBin = require('npm-normalize-package-bin')
+
+const readPackage = ({ path, packageJsonCache }) =>
+ packageJsonCache.has(path) ? Promise.resolve(packageJsonCache.get(path))
+ : readFile(path).then(json => {
+ const pkg = normalizePackageBin(JSON.parse(json))
+ packageJsonCache.set(path, pkg)
+ return pkg
+ })
+ .catch(er => null)
+
+// just normalize bundle deps and bin, that's all we care about here.
+const normalized = Symbol('package data has been normalized')
+const rpj = ({ path, packageJsonCache }) =>
+ readPackage({path, packageJsonCache})
+ .then(pkg => {
+ if (!pkg || pkg[normalized])
+ return pkg
+ if (pkg.bundledDependencies && !pkg.bundleDependencies) {
+ pkg.bundleDependencies = pkg.bundledDependencies
+ delete pkg.bundledDependencies
+ }
+ const bd = pkg.bundleDependencies
+ if (bd === true) {
+ pkg.bundleDependencies = [
+ ...Object.keys(pkg.dependencies || {}),
+ ...Object.keys(pkg.optionalDependencies || {}),
+ ]
+ }
+ if (typeof bd === 'object' && !Array.isArray(bd)) {
+ pkg.bundleDependencies = Object.keys(bd)
+ }
+ pkg[normalized] = true
+ return pkg
+ })
+
+
+const pkgContents = async ({
+ path,
+ depth,
+ currentDepth = 0,
+ pkg = null,
+ result = null,
+ packageJsonCache = null,
+}) => {
+ if (!result)
+ result = new Set()
+
+ if (!packageJsonCache)
+ packageJsonCache = new Map()
+
+ if (pkg === true) {
+ return rpj({ path: path + '/package.json', packageJsonCache })
+ .then(pkg => pkgContents({
+ path,
+ depth,
+ currentDepth,
+ pkg,
+ result,
+ packageJsonCache,
+ }))
+ }
+
+ if (pkg) {
+ // add all bins to result if they exist
+ if (pkg.bin) {
+ const dir = dirname(path)
+ const base = basename(path)
+ const scope = basename(dir)
+ const nm = /^@.+/.test(scope) ? dirname(dir) : dir
+
+ const binFiles = []
+ Object.keys(pkg.bin).forEach(b => {
+ const base = resolve(nm, '.bin', b)
+ binFiles.push(base, base + '.cmd', base + '.ps1')
+ })
+
+ const bins = await Promise.all(
+ binFiles.map(b => stat(b).then(() => b).catch((er) => null))
+ )
+ bins.filter(b => b).forEach(b => result.add(b))
+ }
+ }
+
+ if (currentDepth >= depth) {
+ result.add(path)
+ return result
+ }
+
+ // we'll need bundle list later, so get that now in parallel
+ const [dirEntries, bundleDeps] = await Promise.all([
+ readdir(path, { withFileTypes: true }),
+ currentDepth === 0 && pkg && pkg.bundleDependencies
+ ? bundled({ path, packageJsonCache }) : null,
+ ]).catch(() => [])
+
+ // not a thing, probably a missing folder
+ if (!dirEntries)
+ return result
+
+ // empty folder, just add the folder itself to the result
+ if (!dirEntries.length && !bundleDeps && currentDepth !== 0) {
+ result.add(path)
+ return result
+ }
+
+ const recursePromises = []
+
+ // if we didn't get withFileTypes support, tack that on
+ if (typeof dirEntries[0] === 'string') {
+ // use a map so we can return a promise, but we mutate dirEntries in place
+ // this is much slower than getting the entries from the readdir call,
+ // but polyfills support for node versions before 10.10
+ await Promise.all(dirEntries.map(async (name, index) => {
+ const p = resolve(path, name)
+ const st = await lstat(p)
+ dirEntries[index] = Object.assign(st, {name})
+ }))
+ }
+
+ for (const entry of dirEntries) {
+ const p = resolve(path, entry.name)
+ if (entry.isDirectory() === false) {
+ result.add(p)
+ continue
+ }
+
+ if (currentDepth !== 0 || entry.name !== 'node_modules') {
+ if (currentDepth < depth - 1) {
+ recursePromises.push(pkgContents({
+ path: p,
+ packageJsonCache,
+ depth,
+ currentDepth: currentDepth + 1,
+ result,
+ }))
+ } else {
+ result.add(p)
+ }
+ continue
+ }
+ }
+
+ if (bundleDeps) {
+ // bundle deps are all folders
+ // we always recurse to get pkg bins, but if currentDepth is too high,
+ // it'll return early before walking their contents.
+ recursePromises.push(...bundleDeps.map(dep => {
+ const p = resolve(path, 'node_modules', dep)
+ return pkgContents({
+ path: p,
+ packageJsonCache,
+ pkg: true,
+ depth,
+ currentDepth: currentDepth + 1,
+ result,
+ })
+ }))
+ }
+
+ if (recursePromises.length)
+ await Promise.all(recursePromises)
+
+ return result
+}
+
+module.exports = ({path, depth = 1, packageJsonCache}) => pkgContents({
+ path: resolve(path),
+ depth,
+ pkg: true,
+ packageJsonCache,
+}).then(results => [...results])
+
+
+if (require.main === module) {
+ const options = { path: null, depth: 1 }
+ const usage = `Usage:
+ installed-package-contents <path> [-d<n> --depth=<n>]
+
+Lists the files installed for a package specified by <path>.
+
+Options:
+ -d<n> --depth=<n> Provide a numeric value ("Infinity" is allowed)
+ to specify how deep in the file tree to traverse.
+ Default=1
+ -h --help Show this usage information`
+
+ process.argv.slice(2).forEach(arg => {
+ let match
+ if ((match = arg.match(/^--depth=([0-9]+|Infinity)/)) ||
+ (match = arg.match(/^-d([0-9]+|Infinity)/)))
+ options.depth = +match[1]
+ else if (arg === '-h' || arg === '--help') {
+ console.log(usage)
+ process.exit(0)
+ } else
+ options.path = arg
+ })
+ if (!options.path) {
+ console.error('ERROR: no path provided')
+ console.error(usage)
+ process.exit(1)
+ }
+ const cwd = process.cwd()
+ module.exports(options)
+ .then(list => list.sort().forEach(p => console.log(relative(cwd, p))))
+ .catch(/* istanbul ignore next - pretty unusual */ er => {
+ console.error(er)
+ process.exit(1)
+ })
+}
diff --git a/sandbox/testAppNevena/Front/node_modules/@npmcli/installed-package-contents/package.json b/sandbox/testAppNevena/Front/node_modules/@npmcli/installed-package-contents/package.json
new file mode 100644
index 00000000..13916308
--- /dev/null
+++ b/sandbox/testAppNevena/Front/node_modules/@npmcli/installed-package-contents/package.json
@@ -0,0 +1,37 @@
+{
+ "name": "@npmcli/installed-package-contents",
+ "version": "1.0.7",
+ "description": "Get the list of files installed in a package in node_modules, including bundled dependencies",
+ "author": "Isaac Z. Schlueter <i@izs.me> (https://izs.me)",
+ "main": "index.js",
+ "bin": {
+ "installed-package-contents": "index.js"
+ },
+ "license": "ISC",
+ "scripts": {
+ "test": "tap",
+ "snap": "tap",
+ "preversion": "npm test",
+ "postversion": "npm publish",
+ "postpublish": "git push origin --follow-tags"
+ },
+ "tap": {
+ "check-coverage": true,
+ "color": true
+ },
+ "devDependencies": {
+ "require-inject": "^1.4.4",
+ "tap": "^14.11.0"
+ },
+ "dependencies": {
+ "npm-bundled": "^1.1.1",
+ "npm-normalize-package-bin": "^1.0.1"
+ },
+ "repository": "git+https://github.com/npm/installed-package-contents",
+ "files": [
+ "index.js"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+}