Is a small utility which helps you parse and cast the query (or search) params of the url:
import { queryCast, Types } from 'query-cast';
const schema = {
foo: Types.FLOAT,
bar: Types.BOOLEAN,
baz: Types.STRING
};
const cast = queryCast(schema);
cast('?foo=12.15&bar=false&baz=baaaz'); // {foo: 12.15, bar: false, baz: 'baaaz'}You may ask, why do you need to create a cast function first? Because in this case you can combine as many cast functions as you want using combineQueryCasts method:
import { combineQueryCasts, squeryCast, Types } from 'query-cast';
const foo = queryCast({
foo: Types.FLOAT
});
const barBaz = queryCast({
bar: Types.BOOLEAN,
baz: Types.STRING
});
const cast = combineQueryCasts({
foo,
barBaz
});
cast('?foo=12.15&bar=false&baz=baaaz'); // {foo: {foo: 12.15}, barBaz: {bar: false, baz: 'baaaz'}}You may think of it as a reducers from redux library. So, you split these parsers into small peacies and use them separately or combine when you need some of them at the same time.
query-cast is based on typeable.js. So, schema definition is the same as for typeable library.
Create cast function based upon schema.
-
schema: {[key: string]: Types | [Types] | { type: Types | [Types], default?: any }}– describe the shape of the output. You should use the types fromTypes-enum from the lib while defining it. List of supported types below:Types.STRING– string value will left as isTypes.BOOLEAN– convert to boolean. Any number which is greater than 0,Infinity,'1','yes','+'will be cast totrue.Types.INTEGER– convert to integerTypes.FLOAT– convert to floatTypes.NUMBER– alias ofTypes.FLOATTypes.DATE– convert toDate-objectTypes.ANY– the same asTypes.STRING
You can also specify a default value for a param by passing an object with
typeand optionaldefault:const cast = queryCast({ page: { type: Types.INTEGER, default: 1 }, search: { type: Types.STRING, default: '' }, // Simple syntax still works filter: Types.STRING }); cast('?page=2'); // { page: 2, search: '', filter: undefined } cast(''); // { page: 1, search: '', filter: undefined }
When a param is missing from the query and a
defaultis specified, the default value is used. If no default is specified, the param is omitted from the result. Provided query values always override the default.
Create a new cast function based upon the object, whose params are different cast functions and gather the result into a single object, whose keys correspond to the keys of the passed cast functions.
casts: {[key: string]: queryCast}– An object whose values correspond to different cast functions that need to be combined into one.