Zero dependency container/config library.
npm install continu




Continu is a powerful tool for managing key-value pairs in an application.
Its simple and lightweight design makes it easy to use.
Besides, defining default values it is also possible to execute transformations & validations before setting any value.
Table of Contents
- Installation
- Usage
- Basic
- Defaults
- Transformation
- Validation
- Nesting
- Getters
- Contributing
- License
``bash`
npm install continu --save
On the basic level, this library can be used as container for arbitrary key value pairs.
`typescript
import { Continu } from 'continu';
type Options = {
foo: string
}
const continu = new Continu
console.log(continu.has('foo'));
// false
console.log(continu.get('foo'));
// undefined
continu.set('foo', 'bar');
console.log(continu.has('foo'));
// true
console.log(continu.get('foo'));
// bar
continu.reset('foo');
console.log(continu.has('foo'));
// false
`
`typescript
import { Continu } from 'continu';
type Options = {
foo: string
}
const continu = new Continu
defaults: {
foo: 'bar'
}
});
console.log(continu.has('foo'));
// false
console.log(continu.get('foo'));
// 'bar'
continu.set('foo', 'baz');
console.log(continu.has('foo'));
// true
console.log(continu.get('foo'));
// 'baz'
`
Transformers can be used to accept multiple input formats.
The data can than be converted to the appropriate format before setting.
Therefore, the setRaw method must be used.
`typescript
import { Continu } from 'continu';
type Options = {
foo: string
}
const continu = new Continu
transformers: {
foo: (value) => {
if(typeof value === 'number') {
return ${value};
}
if(typeof value === 'string') {
return value;
}
throw new Error('Option could not be transformed.')
}
}
});
continu.set('foo', '123');
console.log(continu.get('foo'));
// '123'
continu.set('foo', 456);
console.log(continu.get('foo'));
// '456'
continu.set('foo', {bar: 'baz'});
// this statement will throw an error!
`
Validators can be useful for defining constraints and prevent values from being set,
if they don't match specific criteria.
`typescript
import { Continu } from 'continu';
type Options = {
foo: string
}
const continu = new Continu
validators: {
foo: (value) => typeof value === 'string' && value.length > 3,
}
});
continu.set('foo', 'bar');
console.log(continu.get('foo'));
// undefined
continu.set('foo', 'bar-baz');
console.log(continu.get('foo'));
// 'bar-baz'
`
When using nested object types, it is also possible to use key paths (separated by .) to
access properties in depth.
`typescript
import { Continu } from 'continu';
type Options = {
nested: {
foo: string
}
}
const continu = new Continu
console.log(continu.has('nested.foo'));
// false
console.log(continu.get('nested.foo'));
// undefined
continu.set('nested.foo', 'bar');
console.log(continu.has('nested.foo'));
// true
console.log(continu.get('nested.foo'));
// 'bar'
console.log(continu.has('nested'));
// true;
console.log(continu.get('nested'));
// { foo: 'bar' }
`
It is also possible to define dynamic getters for specific key (paths).
`typescript
import { Continu } from 'continu';
type Options = {
foo: string,
nested: {
baz: string
}
}
const continu = new Continu
defaults: {
foo: 'bar'
},
getters: {
nested: (context) => {
return {
baz: context.getDefault('foo')
}
}
}
});
// always evaluates to false,
// since a key path may not be accessible until a getter has been evaluated.
console.log(continu.has('nested'));
console.log(continu.get('nested'));
// { foo: 'bar' }
console.log(continu.get('nested.baz'));
// 'bar'
``
Before starting to work on a pull request, it is important to review the guidelines for
contributing and the code of conduct.
These guidelines will help to ensure that contributions are made effectively and are accepted.
Made with 💚
Published under MIT License.