diff options
author | Rebecca Turner <me@re-becca.org> | 2018-04-20 18:26:37 -0700 |
---|---|---|
committer | Rebecca Turner <me@re-becca.org> | 2018-05-24 23:24:45 -0700 |
commit | 468ab4519e1b92473acefb22801497a1af6aebae (patch) | |
tree | bdac1d062cd4b094bde3a21147bab5d82c792ece /deps/npm/node_modules/figgy-pudding/index.js | |
parent | ac8226115e2192a7a46ba07789fa5136f74223e1 (diff) | |
download | android-node-v8-468ab4519e1b92473acefb22801497a1af6aebae.tar.gz android-node-v8-468ab4519e1b92473acefb22801497a1af6aebae.tar.bz2 android-node-v8-468ab4519e1b92473acefb22801497a1af6aebae.zip |
deps: upgrade npm to 6.1.0
PR-URL: https://github.com/nodejs/node/pull/20190
Reviewed-By: Rich Trott <rtrott@gmail.com>
Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
Reviewed-By: Tiancheng "Timothy" Gu <timothygu99@gmail.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
Reviewed-By: Michaƫl Zasso <targos@protonmail.com>
Diffstat (limited to 'deps/npm/node_modules/figgy-pudding/index.js')
-rw-r--r-- | deps/npm/node_modules/figgy-pudding/index.js | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/deps/npm/node_modules/figgy-pudding/index.js b/deps/npm/node_modules/figgy-pudding/index.js new file mode 100644 index 0000000000..a3c9c94ebf --- /dev/null +++ b/deps/npm/node_modules/figgy-pudding/index.js @@ -0,0 +1,101 @@ +'use strict' + +class FiggyPudding { + constructor (specs, opts, providers) { + this.__specs = specs || {} + this.__opts = opts || (() => false) + this.__providers = reverse((providers || []).filter( + x => x != null && typeof x === 'object' + )) + this.__isFiggyPudding = true + } + get (key) { + return pudGet(this, key, true) + } + concat (...moreConfig) { + return new FiggyPudding( + this.__specs, + this.__opts, + reverse(this.__providers).concat(moreConfig) + ) + } +} + +function pudGet (pud, key, validate) { + let spec = pud.__specs[key] + if (typeof spec === 'string') { + key = spec + spec = pud.__specs[key] + } + if (validate && !spec && (!pud.__opts.other || !pud.__opts.other(key))) { + throw new Error(`invalid config key requested: ${key}`) + } else { + if (!spec) { spec = {} } + let ret + for (let p of pud.__providers) { + if (p.__isFiggyPudding) { + ret = pudGet(p, key, false) + } else if (typeof p.get === 'function') { + ret = p.get(key) + } else { + ret = p[key] + } + if (ret !== undefined) { + break + } + } + if (ret === undefined && spec.default !== undefined) { + if (typeof spec.default === 'function') { + return spec.default() + } else { + return spec.default + } + } else { + return ret + } + } +} + +const proxyHandler = { + has (obj, prop) { + return pudGet(obj, prop, false) !== undefined + }, + get (obj, prop) { + if ( + prop === 'concat' || + prop === 'get' || + prop.slice(0, 2) === '__' + ) { + return obj[prop] + } + return obj.get(prop) + }, + set (obj, prop, value) { + if (prop.slice(0, 2) === '__') { + obj[prop] = value + } else { + throw new Error('figgyPudding options cannot be modified. Use .concat() instead.') + } + }, + delete () { + throw new Error('figgyPudding options cannot be deleted. Use .concat() and shadow them instead.') + } +} + +module.exports = figgyPudding +function figgyPudding (specs, opts) { + function factory (...providers) { + return new Proxy(new FiggyPudding( + specs, + opts, + providers + ), proxyHandler) + } + return factory +} + +function reverse (arr) { + const ret = [] + arr.forEach(x => ret.unshift(x)) + return ret +} |