From 0f8967b9113d698cdeb2d05ca85d2d9a80461c24 Mon Sep 17 00:00:00 2001 From: Minteck Date: Sat, 9 Apr 2022 16:39:03 +0200 Subject: Commit --- node_modules/configstore/index.js | 106 +++++++++++++++++++++++++++ node_modules/configstore/license | 25 +++++++ node_modules/configstore/package.json | 47 ++++++++++++ node_modules/configstore/readme.md | 132 ++++++++++++++++++++++++++++++++++ 4 files changed, 310 insertions(+) create mode 100644 node_modules/configstore/index.js create mode 100644 node_modules/configstore/license create mode 100644 node_modules/configstore/package.json create mode 100644 node_modules/configstore/readme.md (limited to 'node_modules/configstore') 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`.
+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`
+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`
+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)
+Copyright Google -- cgit