aboutsummaryrefslogtreecommitdiff
path: root/sandbox/testAppNevena/Front/node_modules/infer-owner
diff options
context:
space:
mode:
Diffstat (limited to 'sandbox/testAppNevena/Front/node_modules/infer-owner')
-rw-r--r--sandbox/testAppNevena/Front/node_modules/infer-owner/LICENSE15
-rw-r--r--sandbox/testAppNevena/Front/node_modules/infer-owner/README.md41
-rw-r--r--sandbox/testAppNevena/Front/node_modules/infer-owner/index.js71
-rw-r--r--sandbox/testAppNevena/Front/node_modules/infer-owner/package.json26
4 files changed, 153 insertions, 0 deletions
diff --git a/sandbox/testAppNevena/Front/node_modules/infer-owner/LICENSE b/sandbox/testAppNevena/Front/node_modules/infer-owner/LICENSE
new file mode 100644
index 00000000..20a47625
--- /dev/null
+++ b/sandbox/testAppNevena/Front/node_modules/infer-owner/LICENSE
@@ -0,0 +1,15 @@
+The ISC License
+
+Copyright (c) npm, Inc. and Contributors
+
+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/infer-owner/README.md b/sandbox/testAppNevena/Front/node_modules/infer-owner/README.md
new file mode 100644
index 00000000..146caf7b
--- /dev/null
+++ b/sandbox/testAppNevena/Front/node_modules/infer-owner/README.md
@@ -0,0 +1,41 @@
+# infer-owner
+
+Infer the owner of a path based on the owner of its nearest existing parent
+
+## USAGE
+
+```js
+const inferOwner = require('infer-owner')
+
+inferOwner('/some/cache/folder/file').then(owner => {
+ // owner is {uid, gid} that should be attached to
+ // the /some/cache/folder/file, based on ownership
+ // of /some/cache/folder, /some/cache, /some, or /,
+ // whichever is the first to exist
+})
+
+// same, but not async
+const owner = inferOwner.sync('/some/cache/folder/file')
+
+// results are cached! to reset the cache (eg, to change
+// permissions for whatever reason), do this:
+inferOwner.clearCache()
+```
+
+This module endeavors to be as performant as possible. Parallel requests
+for ownership of the same path will only stat the directories one time.
+
+## API
+
+* `inferOwner(path) -> Promise<{ uid, gid }>`
+
+ If the path exists, return its uid and gid. If it does not, look to
+ its parent, then its grandparent, and so on.
+
+* `inferOwner(path) -> { uid, gid }`
+
+ Sync form of `inferOwner(path)`.
+
+* `inferOwner.clearCache()`
+
+ Delete all cached ownership information and in-flight tracking.
diff --git a/sandbox/testAppNevena/Front/node_modules/infer-owner/index.js b/sandbox/testAppNevena/Front/node_modules/infer-owner/index.js
new file mode 100644
index 00000000..a7bddcbd
--- /dev/null
+++ b/sandbox/testAppNevena/Front/node_modules/infer-owner/index.js
@@ -0,0 +1,71 @@
+const cache = new Map()
+const fs = require('fs')
+const { dirname, resolve } = require('path')
+
+
+const lstat = path => new Promise((res, rej) =>
+ fs.lstat(path, (er, st) => er ? rej(er) : res(st)))
+
+const inferOwner = path => {
+ path = resolve(path)
+ if (cache.has(path))
+ return Promise.resolve(cache.get(path))
+
+ const statThen = st => {
+ const { uid, gid } = st
+ cache.set(path, { uid, gid })
+ return { uid, gid }
+ }
+ const parent = dirname(path)
+ const parentTrap = parent === path ? null : er => {
+ return inferOwner(parent).then((owner) => {
+ cache.set(path, owner)
+ return owner
+ })
+ }
+ return lstat(path).then(statThen, parentTrap)
+}
+
+const inferOwnerSync = path => {
+ path = resolve(path)
+ if (cache.has(path))
+ return cache.get(path)
+
+ const parent = dirname(path)
+
+ // avoid obscuring call site by re-throwing
+ // "catch" the error by returning from a finally,
+ // only if we're not at the root, and the parent call works.
+ let threw = true
+ try {
+ const st = fs.lstatSync(path)
+ threw = false
+ const { uid, gid } = st
+ cache.set(path, { uid, gid })
+ return { uid, gid }
+ } finally {
+ if (threw && parent !== path) {
+ const owner = inferOwnerSync(parent)
+ cache.set(path, owner)
+ return owner // eslint-disable-line no-unsafe-finally
+ }
+ }
+}
+
+const inflight = new Map()
+module.exports = path => {
+ path = resolve(path)
+ if (inflight.has(path))
+ return Promise.resolve(inflight.get(path))
+ const p = inferOwner(path).then(owner => {
+ inflight.delete(path)
+ return owner
+ })
+ inflight.set(path, p)
+ return p
+}
+module.exports.sync = inferOwnerSync
+module.exports.clearCache = () => {
+ cache.clear()
+ inflight.clear()
+}
diff --git a/sandbox/testAppNevena/Front/node_modules/infer-owner/package.json b/sandbox/testAppNevena/Front/node_modules/infer-owner/package.json
new file mode 100644
index 00000000..c4b2b6e6
--- /dev/null
+++ b/sandbox/testAppNevena/Front/node_modules/infer-owner/package.json
@@ -0,0 +1,26 @@
+{
+ "name": "infer-owner",
+ "version": "1.0.4",
+ "description": "Infer the owner of a path based on the owner of its nearest existing parent",
+ "author": "Isaac Z. Schlueter <i@izs.me> (https://izs.me)",
+ "license": "ISC",
+ "scripts": {
+ "test": "tap -J test/*.js --100",
+ "snap": "TAP_SNAPSHOT=1 tap -J test/*.js --100",
+ "preversion": "npm test",
+ "postversion": "npm publish",
+ "postpublish": "git push origin --follow-tags"
+ },
+ "devDependencies": {
+ "mutate-fs": "^2.1.1",
+ "tap": "^12.4.2"
+ },
+ "main": "index.js",
+ "repository": "https://github.com/npm/infer-owner",
+ "publishConfig": {
+ "access": "public"
+ },
+ "files": [
+ "index.js"
+ ]
+}