From f075bc5a7e8c440e62a86b60ba065101b82a83b2 Mon Sep 17 00:00:00 2001 From: Sindre Sorhus Date: Thu, 28 Mar 2019 17:09:56 +0700 Subject: [PATCH] Meta tweaks --- index.js | 4 +- package.json | 7 ++- readme.md | 31 +++++------- test.js | 132 ++++++++++++++++++++++++++------------------------- 4 files changed, 85 insertions(+), 89 deletions(-) diff --git a/index.js b/index.js index cd8f19f..8a030f0 100644 --- a/index.js +++ b/index.js @@ -8,7 +8,7 @@ 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 configDirectory = 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}; @@ -19,7 +19,7 @@ class Configstore { path.join(id, 'config.json') : path.join('configstore', `${id}.json`); - this.path = options.configPath || path.join(configDir, pathPrefix); + this.path = options.configPath || path.join(configDirectory, pathPrefix); if (defaults) { this.all = Object.assign({}, defaults, this.all); diff --git a/package.json b/package.json index d14913f..8dc4154 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,6 @@ "config", "store", "storage", - "conf", "configuration", "settings", "preferences", @@ -35,13 +34,13 @@ "dependencies": { "dot-prop": "^4.1.0", "graceful-fs": "^4.1.2", - "make-dir": "^1.0.0", + "make-dir": "^2.1.0", "unique-string": "^1.0.0", "write-file-atomic": "^2.0.0", "xdg-basedir": "^3.0.0" }, "devDependencies": { - "ava": "*", - "xo": "*" + "ava": "^1.3.1", + "xo": "^0.24.0" } } diff --git a/readme.md b/readme.md index 13298a3..e615328 100644 --- a/readme.md +++ b/readme.md @@ -2,7 +2,7 @@ > 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`.
+The 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.*
@@ -20,26 +20,25 @@ $ npm install configstore ```js const Configstore = require('configstore'); -const pkg = require('./package.json'); +const packageJson = 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'}); +// Create a Configstore instance +const config = new Configstore(packageJson.name, {foo: 'bar'}); -console.log(conf.get('foo')); +console.log(config.get('foo')); //=> 'bar' -conf.set('awesome', true); -console.log(conf.get('awesome')); +config.set('awesome', true); +console.log(config.get('awesome')); //=> true // Use dot-notation to access nested properties -conf.set('bar.baz', true); -console.log(conf.get('bar')); +config.set('bar.baz', true); +console.log(config.get('bar')); //=> {baz: true} -conf.delete('awesome'); -console.log(conf.get('awesome')); +config.delete('awesome'); +console.log(config.get('awesome')); //=> undefined ``` @@ -135,7 +134,7 @@ Get the path to the config file. Can be used to show the user where the config f Get all the config as an object or replace the current config with an object: ```js -conf.all = { +config.all = { hello: 'world' }; ``` @@ -144,9 +143,3 @@ conf.all = { ## Security To report a security vulnerability, please use the [Tidelift security contact](https://tidelift.com/security). Tidelift will coordinate the fix and disclosure. - - -## License - -[BSD license](http://opensource.org/licenses/bsd-license.php)
-Copyright Google diff --git a/test.js b/test.js index 5f9fe65..9e443c2 100644 --- a/test.js +++ b/test.js @@ -14,20 +14,20 @@ const cleanUpFile = () => { test.beforeEach(t => { cleanUpFile(); - t.context.conf = new Configstore('configstore-test'); + t.context.config = new Configstore('configstore-test'); }); test('.set() and .get()', t => { - const {conf} = t.context; - conf.set('foo', 'bar'); - conf.set('baz.boo', true); - t.is(conf.get('foo'), 'bar'); - t.is(conf.get('baz.boo'), true); + const {config} = t.context; + config.set('foo', 'bar'); + config.set('baz.boo', true); + t.is(config.get('foo'), 'bar'); + t.is(config.get('baz.boo'), true); }); test('.set() with object and .get()', t => { - const {conf} = t.context; - conf.set({ + const {config} = t.context; + config.set({ foo1: 'bar1', foo2: 'bar2', baz: { @@ -37,101 +37,105 @@ test('.set() with object and .get()', t => { } } }); - t.is(conf.get('foo1'), 'bar1'); - t.is(conf.get('foo2'), 'bar2'); - t.deepEqual(conf.get('baz'), { + t.is(config.get('foo1'), 'bar1'); + t.is(config.get('foo2'), 'bar2'); + t.deepEqual(config.get('baz'), { boo: 'foo', foo: { bar: 'baz' } }); - t.is(conf.get('baz.boo'), 'foo'); - t.deepEqual(conf.get('baz.foo'), {bar: 'baz'}); - t.is(conf.get('baz.foo.bar'), 'baz'); + t.is(config.get('baz.boo'), 'foo'); + t.deepEqual(config.get('baz.foo'), {bar: 'baz'}); + t.is(config.get('baz.foo.bar'), 'baz'); }); test('.has()', t => { - const {conf} = t.context; - conf.set('foo', '🦄'); - conf.set('baz.boo', '🦄'); - t.true(conf.has('foo')); - t.true(conf.has('baz.boo')); - t.false(conf.has('missing')); + const {config} = t.context; + config.set('foo', '🦄'); + config.set('baz.boo', '🦄'); + t.true(config.has('foo')); + t.true(config.has('baz.boo')); + t.false(config.has('missing')); }); test('.delete()', t => { - const {conf} = t.context; - conf.set('foo', 'bar'); - conf.set('baz.boo', true); - conf.set('baz.foo.bar', 'baz'); - conf.delete('foo'); - t.not(conf.get('foo'), 'bar'); - conf.delete('baz.boo'); - t.not(conf.get('baz.boo'), true); - conf.delete('baz.foo'); - t.not(conf.get('baz.foo'), {bar: 'baz'}); - conf.set('foo.bar.baz', {awesome: 'icecream'}); - conf.set('foo.bar.zoo', {awesome: 'redpanda'}); - conf.delete('foo.bar.baz'); - t.is(conf.get('foo.bar.zoo.awesome'), 'redpanda'); + const {config} = t.context; + config.set('foo', 'bar'); + config.set('baz.boo', true); + config.set('baz.foo.bar', 'baz'); + config.delete('foo'); + t.not(config.get('foo'), 'bar'); + config.delete('baz.boo'); + t.not(config.get('baz.boo'), true); + config.delete('baz.foo'); + t.not(config.get('baz.foo'), {bar: 'baz'}); + config.set('foo.bar.baz', {awesome: 'icecream'}); + config.set('foo.bar.zoo', {awesome: 'redpanda'}); + config.delete('foo.bar.baz'); + t.is(config.get('foo.bar.zoo.awesome'), 'redpanda'); }); test('.clear()', t => { - const {conf} = t.context; - conf.set('foo', 'bar'); - conf.set('foo1', 'bar1'); - conf.set('baz.boo', true); - conf.clear(); - t.is(conf.size, 0); + const {config} = t.context; + config.set('foo', 'bar'); + config.set('foo1', 'bar1'); + config.set('baz.boo', true); + config.clear(); + t.is(config.size, 0); }); test('.all', t => { - const {conf} = t.context; - conf.set('foo', 'bar'); - conf.set('baz.boo', true); - t.is(conf.all.foo, 'bar'); - t.deepEqual(conf.all.baz, {boo: true}); + const {config} = t.context; + config.set('foo', 'bar'); + config.set('baz.boo', true); + t.is(config.all.foo, 'bar'); + t.deepEqual(config.all.baz, {boo: true}); }); test('.size', t => { - const {conf} = t.context; - conf.set('foo', 'bar'); - t.is(conf.size, 1); + const {config} = t.context; + config.set('foo', 'bar'); + t.is(config.size, 1); }); test('.path', t => { - const {conf} = t.context; - conf.set('foo', 'bar'); - t.true(fs.existsSync(conf.path)); + const {config} = t.context; + config.set('foo', 'bar'); + t.true(fs.existsSync(config.path)); }); test('use default value', t => { - const conf = new Configstore('configstore-test', {foo: 'bar'}); - t.is(conf.get('foo'), 'bar'); + const config = new Configstore('configstore-test', {foo: 'bar'}); + t.is(config.get('foo'), 'bar'); }); test('support `globalConfigPath` option', t => { - const conf = new Configstore('configstore-test', {}, {globalConfigPath: true}); - const regex = /configstore-test(\/|\\)config.json$/; - t.true(regex.test(conf.path)); + const config = new Configstore('configstore-test', {}, {globalConfigPath: true}); + t.regex(config.path, /configstore-test(\/|\\)config.json$/); }); test('support `configPath` option', t => { const customPath = path.join(os.tmpdir(), 'configstore-custom-path', 'foo.json'); - const conf = new Configstore('ignored-namespace', {}, {globalConfigPath: true, configPath: customPath}); - const regex = /configstore-custom-path(\/|\\)foo.json$/; - t.true(regex.test(conf.path)); + const config = new Configstore('ignored-namespace', {}, { + globalConfigPath: true, + configPath: customPath + }); + t.regex(config.path, /configstore-custom-path(\/|\\)foo.json$/); }); test('ensure `.all` is always an object', t => { cleanUpFile(); - t.notThrows(() => t.context.conf.get('foo')); + + t.notThrows(() => { + t.context.config.get('foo'); + }); }); test('the store is NOT created until write', t => { cleanUpFile(); - const conf = new Configstore('configstore-test'); - t.false(fs.existsSync(conf.path)); - conf.set('foo', 'bar'); - t.true(fs.existsSync(conf.path)); + const config = new Configstore('configstore-test'); + t.false(fs.existsSync(config.path)); + config.set('foo', 'bar'); + t.true(fs.existsSync(config.path)); });