# consul-kv-parser

> Gets and parses keys from Consul KV store

Latest version **0.0.6** (published 2019-06-10) · MIT license · 0 weekly downloads

## Install

```sh
npm install consul-kv-parser
pnpm add consul-kv-parser
yarn add consul-kv-parser
bun add consul-kv-parser
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.0.6 |
| Published | 2019-06-10 |
| First published | 2016-07-25 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 2 |
| Unpacked size | 9.4 KB |
| Known vulnerabilities | 0 (+1 in 1 direct dependencies) |
| Install scripts | no |
| GitHub stars | 0 |
| Author | Vsevolod Goloviznin |
| Maintainers | vgoloviznin |
| Keywords | consul, consul-kv, parser |

## Links

- npm: https://www.npmjs.com/package/consul-kv-parser
- Repository: https://github.com/vgoloviznin/consul-kv-parser
- Homepage: https://github.com/vgoloviznin/consul-kv-parser#readme
- Issues: https://github.com/vgoloviznin/consul-kv-parser/issues
- npm.io page: https://npm.io/package/consul-kv-parser

## Dependencies (2)

- [joi](https://npm.io/package/joi.md) ^9.0.4
- [consul](https://npm.io/package/consul.md) ^0.25.0

## Alternatives

- [babylon](https://npm.io/package/babylon.md) — 5.1M weekly downloads
- [csscolorparser](https://npm.io/package/csscolorparser.md) — 3.7M weekly downloads
- [expr-eval-fork](https://npm.io/package/expr-eval-fork.md) — 1.5M weekly downloads
- [@leeoniya/ufuzzy](https://npm.io/package/@leeoniya/ufuzzy.md) — 247.7K weekly downloads
- [xml-parser](https://npm.io/package/xml-parser.md) — 78.4K weekly downloads

## Recent versions

- 0.0.6 (latest) — 2019-06-10
- 0.0.5 — 2019-06-10
- 0.0.4 — 2019-01-15
- 0.0.3 — 2016-07-25
- 0.0.2 — 2016-07-25
- 0.0.1 — 2016-07-25

## README

# consul-kv-parser

Gets provided keys from [Consul KV store](https://www.consul.io/), and puts them into an object structure, based on folders in Consul. Values can be parsed into provided types and a check for required properties is done.

```javascript
const parser = require("consul-kv-parser");
const Parser = new parser({
    parser: {
        prefix: "production"
  	},
  	consul: {
        host: "localhost",
        promisify: true
    }
});

//connects to Consul
Parser.connect();
let keys = [
  {key: "some/key", require: true},
  {key: "some/other/num", type: parser.types.number}
];

//parse returns a promise which resolves into object containing 
//parsed values
Parser.parse(key).then((values) => console.log(values));
//will result in this object
{
	some: {
    key: "some value",
    other: {
        num: 123
    }
  }    
}
```

## Installation

```
npm i --save consul-kv-parser
```

### Configuration

#### Consul configuration
`consul-kv-parser` uses (node-consul)[https://github.com/silas/node-consul] to handle conenction to Consul, so you can simply use the same configuration here: 

```javascript
const parser = require("consul-kv-parser");
const config = {
  consul: {
    host: "localhost",
    promisify: true
  }
}
const Parser = new parser(config);
//connect to consul
Parser.connect();
```

**Important note: only promise answered are supported, so if you don't provide `promisify` parameter it will be set automatically!**

#### Parser configuration

You can specify prefix that will be appended at the beginning of all keys, by providing `prefix` config parameter to `parser` object inside configuration: 

```javascript
const parser = require("consul-kv-parser");
const config = {
  parser: {
    prefix: "production"
  }
}
const Parser = new parser(config);
//all keys will be prefixed with "production/" string
```
_Resulting object won't have `prefix` as a root property_

#### Sample configuration

```javascript
const parser = require("consul-kv-parser");
const config = {
  parser: {
    prefix: "production"
  },
  consul: {
    host: "localhost",
    promisify: true
  }
}
const Parser = new parser(config);
```

### Parsing and keys configuration

They keys that you pass to `parse` method of the parser must be an array of objects of this structure:

```
let keys = [
	{
    key: "some/key", //required property
    type: parser.types().number, //optional property
    require: true //optional property
  }
];
```

#### Key property

In consul you can have folders to store values, the parse will divide the key that you provide by `/` character and put the value on the appropriate level of the object. 

So, if you provide the key `some/key/here` you will get this object: `{some: {key: {here: VALUE}}}`

#### Type property

You can specify the type of the value stored in Consul, to let parser know how to parse it, available types are: 

```javascript
const parser = require("consul-kv-parser");

parser.types.string //will return the string that is stored in consul
parser.types.number //will parse both floats and integers
parser.types.object //assumes it contains s stringified version of the object
```

_If you don't provide any type, the string parser will be used_

#### Require property

If you set `require=true` on the key object and there is no value stored in Consul for probided key, an exception will be thrown. 


## Testing
Just run `npm test` inside the repo to run the tests.

## Licence
This work is licensed under the MIT License (see the LICENSE file).

---
_Source: https://npm.io/package/consul-kv-parser · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
