aboutsummaryrefslogtreecommitdiff
path: root/node_modules/pkg-conf/index.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/pkg-conf/index.js')
-rw-r--r--node_modules/pkg-conf/index.js64
1 files changed, 64 insertions, 0 deletions
diff --git a/node_modules/pkg-conf/index.js b/node_modules/pkg-conf/index.js
new file mode 100644
index 000000000..dff982790
--- /dev/null
+++ b/node_modules/pkg-conf/index.js
@@ -0,0 +1,64 @@
+'use strict';
+const path = require('path');
+const findUp = require('find-up');
+const loadJsonFile = require('load-json-file');
+
+const filepaths = new WeakMap();
+const filepath = conf => filepaths.get(conf);
+const findNextCwd = pkgPath => path.resolve(path.dirname(pkgPath), '..');
+
+const addFp = (obj, fp) => {
+ filepaths.set(obj, fp);
+ return obj;
+};
+
+const pkgConf = (namespace, opts) => {
+ if (!namespace) {
+ return Promise.reject(new TypeError('Expected a namespace'));
+ }
+
+ opts = opts || {};
+
+ return findUp('package.json', opts.cwd ? {cwd: opts.cwd} : {})
+ .then(fp => {
+ if (!fp) {
+ return addFp(Object.assign({}, opts.defaults), fp);
+ }
+
+ return loadJsonFile(fp).then(pkg => {
+ if (opts.skipOnFalse && pkg[namespace] === false) {
+ const newOpts = Object.assign({}, opts, {cwd: findNextCwd(fp)});
+ return pkgConf(namespace, newOpts);
+ }
+
+ return addFp(Object.assign({}, opts.defaults, pkg[namespace]), fp);
+ });
+ });
+};
+
+const sync = (namespace, opts) => {
+ if (!namespace) {
+ throw new TypeError('Expected a namespace');
+ }
+
+ opts = opts || {};
+
+ const fp = findUp.sync('package.json', opts.cwd ? {cwd: opts.cwd} : {});
+
+ if (!fp) {
+ return addFp(Object.assign({}, opts.defaults), fp);
+ }
+
+ const pkg = loadJsonFile.sync(fp);
+
+ if (opts.skipOnFalse && pkg[namespace] === false) {
+ const newOpts = Object.assign({}, opts, {cwd: findNextCwd(fp)});
+ return sync(namespace, newOpts);
+ }
+
+ return addFp(Object.assign({}, opts.defaults, pkg[namespace]), fp);
+};
+
+module.exports = pkgConf;
+module.exports.filepath = filepath;
+module.exports.sync = sync;