props-check
Check your props and give a helpful error if you've mis-typed.
Installation
npm install props-check
Requiring the module
const PropsCheck = require('props-check')
PropsCheck
PropsCheck checks props against the spec and returns a map with list of possible corrections.
const spec = {
read: 'Function'
, sanitize: '[Function]'
, validate: '[Function]'
, normalize: '[Function]'
};
const test = {
raed: () => null
, santize: [ () => null ]
, alvidate: [ () => null ]
, normalize: [ () => null ]
, format: [ () => null ]
};
const result = PropsCheck(spec, test);
result:
{ raed: [ 'read' ]
, santize: [ 'sanitize' ]
, alvidate: [ 'validate' ]
, normalize: []
, format: []
}
PropsCheck
returns null
if spec and test have the exact same props.
PropsCheck.custom
PropsCheck.custom
takes a custom comparator and returns a function that is similar to PropsCheck.
const comparator = (a, b) => a < b;
const result = PropsCheck.custom(comparator)(spec, test);
PropsCheck.human
PropsCheck.human
accepts the same arguments as PropsCheck but returns a more helpful error message.
const result = PropsCheck.human(spec, test);
result:
You gave me this:
{
raed: …,
santize: …,
alvidate: …,
normalize: …
}
I wasn't expecting:
{ raed: …, santize: …, alvidate: … }
You didn't give me:
{ read: …, sanitize: …, validate: … }
Here's how to fix it:
raed <-> read
santize <-> sanitize
alvidate <-> validate
I have no idea what this mean:
{ format: …, }
PropsCheck.customHuman
PropsCheck.customHuman
takes a custom message map and returns a function that is similar to PropsCheck.human.
const customMessages = {
given: [ "This is what I got:", … ]
, unexpected: [ "Something is not right..", … ]
, missing: [ "I'm looking for this:", … ]
, conclusion: [ "I suggest the following changes:", … ]
, clueless: [ "I have no idea what these are:", … ]
};
const result = PropsCheck.customHuman(customMessages)(spec, test);
Custom messages will be used randomly if more than 1 message is provided in the list. If a property of the customMessages is misspelled or if a list is empty, default messages will be used instead.
Misc things
- If you use
PropsCheck.custom
and provide your own comparator, make sure that the comparator accepts 2 arguments and returns either 0
on equal, 1
on similar, or -1
on mismatch. - All functions are curried. Meaning that the following:
PropsCheck(spec)(test);
PropsCheck.custom(comparator)(spec)(test);
PropsCheck.human(spec)(test);
PropsCheck.customHuman(customMessages)(spec)(test);
are the same as:
PropsCheck(spec, test);
PropsCheck.custom(comparator)(spec, test);
PropsCheck.human(spec, test);
PropsCheck.customHuman(customMessages)(spec, test);