1.0.3 • Published 4 years ago

@heviir/dequery v1.0.3

Weekly downloads
-
License
ISC
Repository
-
Last release
4 years ago

DEQUERY

WHAT IS THIS?

It's an fully typed declarative query builder with zero dependencies, mostly to be used to build queries using knex over query string.

WHAT IS THE POINT?

The point is to build complex queries using query parameters from the client side for GET requests.

FOR EXAMPLE

CLIENT SIDE

import { Filter } from 'dequery';

const filter: Filter = {
  column1__like: 'some string',
  or__column2__eq: 12,
  or: {
    column3__is: null,
    column4__not_btw: [0, 1],
    column5__not_in: ['a', 'b', 'c'],
    or__column6__in: [1, 2, 3, 4],
  },
  and: {
    column7__ilike: 'some case insensitive string',
    column8__not_is: false,
  },
  not: {
    column9__gte: 12,
  },
  or_not: {
    column10__is: false,
  },
  and_not: {
    column11__lte: 'date-string or w/e',
  },
};

const filterString = JSON.stringify(filter);

const url = `https://my.host.com/path?filter=${filterString}`;

// make a request with the url etc...

SERVER SIDE

import { filter } from 'dequery';

server.get('/path', req => {
  const queryFilter = JSON.parse(req.query.filter);
  const query = knex('table');
  filter(query, queryFilter);
  return query;
});

HOW DO I USE IT?

INSTALLING

npm i dequery knex

USAGE

import { filter } from 'dequery'

const { sql } = filter(knex("table", { column1__eq: 12, or__column2__eq: 13 }).toSQL();

sql // 'select * from "table" where "column1" = ? or "column2" = ?'

ALSO INCLUDED

PAGINATE

import { paginate } from 'dequery';

const { sql } = paginate(knex('table'), 1, 100).toSQL();

sql; // 'select * from table offset ? limit ?'

ORDER

import { order } from 'dequery';

const { sql } = order(knex('table'), 'column1__asc', 'column2__desc').toSQL();

sql; // 'select * from table order by "column1" asc, "column2" desc'

THINGS TO NOTE

  • the separator for operators is double underscore "__" , so do not use it in column names
1.0.3

4 years ago

1.0.2

4 years ago

1.0.1

4 years ago

1.0.0

4 years ago