unmarshaller
v1.2.2
Published
Toolbox for configuration
Downloads
19
Readme
Unmarshaller
Toolbox for configuration
Motivations
- A declarative way for defining configuration
- Reusability and composability
- Flexible and generic
Installation
npm install --save unmarshaller
Example
import {builder, unmarshal} from 'unmarshaller';
const unmarshaller = {
editor: builder.string('EDITOR'),
browser: builder.string('BROWSER'),
};
const lookupFn = (key) => process.env[key];
const config = unmarshal(lookupFn, unmarshaller);
console.log(config);
Basics
Lookup function
You need to provide to the unmarshal
function a way to lookup from keys in configuration.
The example above returns the value found in the process's environment:
const lookupFn = (key) => process.env[key];
Unmarshaller
Just an object which represents your configuration.
Builder
Helper functions to build the unmarshaller object.
Default types
| type | |---------| | string | | boolean | | number | | object | | holder | | or |
Default options
|name|type|description|
|----|----|-----------|
|defaultValue|string|fallback value if the lookup returned undefined
or null
|
|of|array|provide an enumeration of possible values| fallbacks to defaultValue
and null
.|
|parser|function|provide an custom parser function (usually when you want your own types)|
Or
const unmarshaller = {
foo: builder.or(
builder.string('foo_a'),
builder.string('foo_b'),
)
};
The unmarshalling process will call the lookup function until a value (not undefined or null) is returned.
Extending an existing holder
import {extend, builder} from 'unmarshaller';
const holder = builder.holder({
editor: builder.string('EDITOR'),
browser: builder.string('BROWSER'),
});
const extendedHolder = extend(holder, {
version: builder.string('VERSION'),
});
Extending the default builder
The builder is a regular JavaScript object.
Customizing the builder gives you the possiblity to use your own data converters.
The following example use a custom type: color
(which in my use case parses a string into a structure).
import {builder as defaultBuilder} from 'unmarshaller';
export const builder = {
...defaultBuilder,
color: (name, options) => ({
name,
parser: parseColor,
type: 'color',
...options
}),
};
You need to provide a custom parser function (parseColor
in the example above).
The definition is: function(value: string): string
.