query-cast

Query params parser and cast micro-library

Usage no npm install needed!

<script type="module">
  import queryCast from 'https://cdn.skypack.dev/query-cast';
</script>

README

query-cast Tests Coverage Status Dependabot badge

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.

API

query-cast is based on typeable.js. So, schema definition is the same as for typeable library.

queryCast(schema)

Create cast function based upon schema.

  • schema: {[key: string]: Types | [Types]} – describe the shape of the output. You should use the types from Types-enum from the lib while defining it. List of supported types below:

    • Types.STRING – string value will left as is
    • Types.BOOLEAN – convert to boolean. Any number which is greater than 0, Infinity, '1', 'yes', '+' will be cast to true.
    • Types.INTEGER – convert to integer
    • Types.FLOAT – convert to float
    • Types.NUMBER – alias of Types.FLOAT
    • Types.DATE – convert to Date-object
    • Types.ANY – the same as Types.STRING

combineQueryCasts(casts)

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.