aboutsummaryrefslogtreecommitdiff
path: root/node_modules/configstore
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/configstore')
-rw-r--r--node_modules/configstore/index.js106
-rw-r--r--node_modules/configstore/license25
-rw-r--r--node_modules/configstore/package.json47
-rw-r--r--node_modules/configstore/readme.md132
4 files changed, 310 insertions, 0 deletions
diff --git a/node_modules/configstore/index.js b/node_modules/configstore/index.js
new file mode 100644
index 0000000..cd8f19f
--- /dev/null
+++ b/node_modules/configstore/index.js
@@ -0,0 +1,106 @@
+'use strict';
+const path = require('path');
+const os = require('os');
+const fs = require('graceful-fs');
+const makeDir = require('make-dir');
+const xdgBasedir = require('xdg-basedir');
+const writeFileAtomic = require('write-file-atomic');
+const dotProp = require('dot-prop');
+const uniqueString = require('unique-string');
+
+const configDir = xdgBasedir.config || path.join(os.tmpdir(), uniqueString());
+const permissionError = 'You don\'t have access to this file.';
+const makeDirOptions = {mode: 0o0700};
+const writeFileOptions = {mode: 0o0600};
+
+class Configstore {
+ constructor(id, defaults, options = {}) {
+ const pathPrefix = options.globalConfigPath ?
+ path.join(id, 'config.json') :
+ path.join('configstore', `${id}.json`);
+
+ this.path = options.configPath || path.join(configDir, pathPrefix);
+
+ if (defaults) {
+ this.all = Object.assign({}, defaults, this.all);
+ }
+ }
+
+ get all() {
+ try {
+ return JSON.parse(fs.readFileSync(this.path, 'utf8'));
+ } catch (error) {
+ // Create directory if it doesn't exist
+ if (error.code === 'ENOENT') {
+ return {};
+ }
+
+ // Improve the message of permission errors
+ if (error.code === 'EACCES') {
+ error.message = `${error.message}\n${permissionError}\n`;
+ }
+
+ // Empty the file if it encounters invalid JSON
+ if (error.name === 'SyntaxError') {
+ writeFileAtomic.sync(this.path, '', writeFileOptions);
+ return {};
+ }
+
+ throw error;
+ }
+ }
+
+ set all(value) {
+ try {
+ // Make sure the folder exists as it could have been deleted in the meantime
+ makeDir.sync(path.dirname(this.path), makeDirOptions);
+
+ writeFileAtomic.sync(this.path, JSON.stringify(value, null, '\t'), writeFileOptions);
+ } catch (error) {
+ // Improve the message of permission errors
+ if (error.code === 'EACCES') {
+ error.message = `${error.message}\n${permissionError}\n`;
+ }
+
+ throw error;
+ }
+ }
+
+ get size() {
+ return Object.keys(this.all || {}).length;
+ }
+
+ get(key) {
+ return dotProp.get(this.all, key);
+ }
+
+ set(key, value) {
+ const config = this.all;
+
+ if (arguments.length === 1) {
+ for (const k of Object.keys(key)) {
+ dotProp.set(config, k, key[k]);
+ }
+ } else {
+ dotProp.set(config, key, value);
+ }
+
+ this.all = config;
+ }
+
+ has(key) {
+ return dotProp.has(this.all, key);
+ }
+
+ delete(key) {
+ const config = this.all;
+ dotProp.delete(config, key);
+ this.all = config;
+ }
+
+ clear() {
+ this.all = {};
+ }
+}
+
+module.exports = Configstore;
diff --git a/node_modules/configstore/license b/node_modules/configstore/license
new file mode 100644
index 0000000..1043c8b
--- /dev/null
+++ b/node_modules/configstore/license
@@ -0,0 +1,25 @@
+BSD 2-Clause License
+
+Copyright (c) Google
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+
+* Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/node_modules/configstore/package.json b/node_modules/configstore/package.json
new file mode 100644
index 0000000..d14913f
--- /dev/null
+++ b/node_modules/configstore/package.json
@@ -0,0 +1,47 @@
+{
+ "name": "configstore",
+ "version": "4.0.0",
+ "description": "Easily load and save config without having to think about where and how",
+ "license": "BSD-2-Clause",
+ "repository": "yeoman/configstore",
+ "author": {
+ "name": "Sindre Sorhus",
+ "email": "sindresorhus@gmail.com",
+ "url": "sindresorhus.com"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "scripts": {
+ "test": "xo && ava"
+ },
+ "files": [
+ "index.js"
+ ],
+ "keywords": [
+ "config",
+ "store",
+ "storage",
+ "conf",
+ "configuration",
+ "settings",
+ "preferences",
+ "json",
+ "data",
+ "persist",
+ "persistent",
+ "save"
+ ],
+ "dependencies": {
+ "dot-prop": "^4.1.0",
+ "graceful-fs": "^4.1.2",
+ "make-dir": "^1.0.0",
+ "unique-string": "^1.0.0",
+ "write-file-atomic": "^2.0.0",
+ "xdg-basedir": "^3.0.0"
+ },
+ "devDependencies": {
+ "ava": "*",
+ "xo": "*"
+ }
+}
diff --git a/node_modules/configstore/readme.md b/node_modules/configstore/readme.md
new file mode 100644
index 0000000..797d6a0
--- /dev/null
+++ b/node_modules/configstore/readme.md
@@ -0,0 +1,132 @@
+# configstore [![Build Status](https://travis-ci.org/yeoman/configstore.svg?branch=master)](https://travis-ci.org/yeoman/configstore)
+
+> Easily load and persist config without having to think about where and how
+
+Config is stored in a JSON file located in `$XDG_CONFIG_HOME` or `~/.config`.<br>
+Example: `~/.config/configstore/some-id.json`
+
+*If you need this for Electron, check out [`electron-store`](https://github.com/sindresorhus/electron-store) instead.*
+
+
+## Install
+
+```
+$ npm install configstore
+```
+
+
+## Usage
+
+```js
+const Configstore = require('configstore');
+const pkg = require('./package.json');
+
+// create a Configstore instance with an unique ID e.g.
+// Package name and optionally some default values
+const conf = new Configstore(pkg.name, {foo: 'bar'});
+
+console.log(conf.get('foo'));
+//=> 'bar'
+
+conf.set('awesome', true);
+console.log(conf.get('awesome'));
+//=> true
+
+// Use dot-notation to access nested properties
+conf.set('bar.baz', true);
+console.log(conf.get('bar'));
+//=> {baz: true}
+
+conf.delete('awesome');
+console.log(conf.get('awesome'));
+//=> undefined
+```
+
+
+## API
+
+### Configstore(packageName, [defaults], [options])
+
+Returns a new instance.
+
+#### packageName
+
+Type: `string`
+
+Name of your package.
+
+#### defaults
+
+Type: `Object`
+
+Default config.
+
+#### options
+
+##### globalConfigPath
+
+Type: `boolean`<br>
+Default: `false`
+
+Store the config at `$CONFIG/package-name/config.json` instead of the default `$CONFIG/configstore/package-name.json`. This is not recommended as you might end up conflicting with other tools, rendering the "without having to think" idea moot.
+
+##### configPath
+
+Type: `string`<br>
+Default: Automatic
+
+**Please don't use this option unless absolutely necessary and you know what you're doing.**
+
+Set the path of the config file. Overrides the `packageName` and `globalConfigPath` options.
+
+### Instance
+
+You can use [dot-notation](https://github.com/sindresorhus/dot-prop) in a `key` to access nested properties.
+
+### .set(key, value)
+
+Set an item.
+
+### .set(object)
+
+Set multiple items at once.
+
+### .get(key)
+
+Get an item.
+
+### .has(key)
+
+Check if an item exists.
+
+### .delete(key)
+
+Delete an item.
+
+### .clear()
+
+Delete all items.
+
+### .size
+
+Get the item count.
+
+### .path
+
+Get the path to the config file. Can be used to show the user where the config file is located or even better open it for them.
+
+### .all
+
+Get all the config as an object or replace the current config with an object:
+
+```js
+conf.all = {
+ hello: 'world'
+};
+```
+
+
+## License
+
+[BSD license](http://opensource.org/licenses/bsd-license.php)<br>
+Copyright Google