Skip to content

🪄 A declarative JavaScript library for search params orchestration.

License

Notifications You must be signed in to change notification settings

maxprilutskiy/filterion

Repository files navigation

Filterion

A zero-dependency, immutable data structure for search params management.

TypeScript codecov Release

📦 Install

Install filterion using npm:

npm i filterion

🔨 Usage

Require it into any module and use natively:

import { Filterion } from 'filterion';

const filter = new Filterion()
  .add('device', 'iPhone')
  .add('price', 649);

console.log(filter.getPayload());

/*
{
  device: { '=': [ 'iPhone' ] },
  price: { '=': [ 649 ] }
}
*/

Or leverage the query string API:

import { Filterion } from 'filterion';

const newQuery = new Filterion()
  .fromQueryString('device=iPhone&price=649')
  .remove('price')
  .add('year', 2007)
  .toQueryString();

console.log(newQuery);

/*
device=iPhone&year=2007
*/

Typescript

Filterion can be used in a type-safe context:

import { Filterion } from 'filterion';

// Good
const filterion = new Filterion<{ price: string }>()
  .add('price', 649);

// Bad
const filterion = new Filterion<{ name: string }>()
  .add('price', 649);

/*
error TS2345: Argument of type '"price"' is not assignable to parameter of type '"name"'.
*/

Inspired by immutable.js, an immutable collections library for JavaScript.

License

MIT