Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/tom32i/option-resolver.js
Simple Javascript Option Resolver
https://github.com/tom32i/option-resolver.js
config configuration javascript minimalist options
Last synced: 21 days ago
JSON representation
Simple Javascript Option Resolver
- Host: GitHub
- URL: https://github.com/tom32i/option-resolver.js
- Owner: Tom32i
- License: mit
- Created: 2014-06-03T20:56:18.000Z (over 10 years ago)
- Default Branch: master
- Last Pushed: 2023-01-28T11:37:55.000Z (almost 2 years ago)
- Last Synced: 2024-10-19T10:46:42.535Z (27 days ago)
- Topics: config, configuration, javascript, minimalist, options
- Language: JavaScript
- Homepage:
- Size: 220 KB
- Stars: 1
- Watchers: 2
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
option-resolver.js
================Simple Javascript Option Resolver
## Install:
npm install option-resolver.js
### Import
HTML:
```html
```
ES modules:
```javascript
import OptionResolver from 'option-resolver.js';
```CommonJs modules:
```javascript
const OptionResolver = require('option-resolver.js');
```## Usage:
Define the format of your configuration:
```javascript
const definition = new OptionResolver()
.setTypes({
color: 'string',
length: 'number',
debug: 'boolean',
})
.setRequired(['color'])
.setDefaults({
debug: false,
});
```Resolve a config object:
```javascript
const options = definition.resolve({
color: 'red',
});
```This return the following object:
```javascript
{
color: 'red',
debug: false,
}
```## Features
### Default values
Define a default value for a property:
```javascript
// This will return `{ foo: 'bar' }`:
new OptionResolver()
.setDefault({ foo: 'bar' })
.resolve({});
```### Required properties
You can mark a property as required, to ensure it's defined:
```javascript
// This will return `{ foo: 42 }`:
new OptionResolver()
.setRequired(['foo'])
.resolve({ foo: 42 });
```If the required property is not provided, the OptionResolver will throw an exception:
```javascript
// This will throw an Error: `Option "foo" is required.`:
new OptionResolver()
.setRequired(['foo'])
.resolve({});
```### Optional properties
By default, the option resolver throws an error if provided with a property that was not declared with `setRequired`, `setDefault`, `setTypes` or `setValidators`:
```javascript
// This will throw an Error: `Unkown option "foo".`:
new OptionResolver().resolve({ foo: true });
```To allow such a property, you must define it as optional:
```javascript
// This will return `{ foo: true }`:
new OptionResolver()
.setOptional(['foo'])
.resolve({ foo: true });
```_Note:_ Alternatively, you can allow any extra property with `allowExtra()`:
```javascript
// This will return `{ foo: true }`:
new OptionResolver()
.allowExtra()
.resolve({ foo: true});
```### Property types
Validates the [type](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#primitive_values) of a property:
```javascript
// This will return `{ foo: 42 }`:
new OptionResolver()
.setTypes({ foo: 'number' })
.resolve({ foo: 42 });
```If the property type doesn't match the expected type, the OptionResolver will throw an error:
```javascript
// This will throw an Error: `Wrong value for option "foo": expected type "number", got "string".`:
new OptionResolver()
.setTypes({ foo: 'number' })
.resolve({ foo: 'test' });
```### Property validator
You can apply a validator function to constrain a value with a custom callback:
```javascript
const resolver = new OptionResolver().setValidators({
// Constain "rate" property within 0 and 100:
rate: value => Math.max(0, Math.min(100, value)),
});// This will return `{ rate: 87 }`:
resolver.resolve({ rate: 87 });// This will return `{ rate: 100 }`:
resolver.resolve({ rate: 124 });
```_Note:_ The validator will not be executed if the property is not set.
```javascript
// This will return `{}`:
new OptionResolver()
.setValidators({ name: value => value.trim() })
.resolve({});
```