@jeje-devs/jeje-ql
TypeScript icon, indicating that this package has built-in type declarations

1.6.1 • Public • Published

JejeQL

Table of contents

General info

JejeQL is a tool that can translate a query into a predicate and filter data.

Example:

import { tryGetArrayFilteredByQuery } from '@jeje-devs/jeje-ql';

const countries = [
    { name: 'Colombia', capital: 'Bogota', language: 'ES' },
    { name: 'Venezuela', capital: 'Caracas', language: 'ES' },
    { name: 'Ecuador', capital: 'Quito', language: 'ES' },
    { name: 'Guyana', capital: 'Georgetown', language: 'EN' },
    { name: 'Brazil', capital: 'Brasilia', language: 'PT' },
    { name: 'Uruguay', capital: 'Montevideo', language: 'ES' },
    { name: 'Argentina', capital: 'Buenos Aires', language: 'ES' },
    { name: 'Chile', capital: 'Santiago', language: 'ES' }
];

const query = `name = 'Argentina' | language = 'ES' & capital =* 'm' ¦ capital *= 'go'`;
/*
Using typescript, the query would look like:
const predicate = country =>
    country.name === 'Argentina' ||
    country.language === 'ES' &&
    (country.capital.toLower().startsWith('m') || country.capital.toLower().endsWith('go'));
*/

const { success, result } = tryGetArrayFilteredByQuery(countries, query);

/*
What gives the 'result' variable:
[
    { name: 'Uruguay', capital: 'Montevideo', language: 'ES' },
    { name: 'Argentina', capital: 'Buenos Aires', language: 'ES' },
    { name: 'Chile', capital: 'Santiago', language: 'ES' }
]
*/

Technologies

  • Node.js
  • Typescript

Setup

npm install @jeje-devs/jeje-ql

Usage

Comparison operators:

= Equals

name = 'Harry Potter'

=* Starts with

name =* 'Har'

*= Ends with

name *= 'tter'

*=* Contains

name *=* 'Pot'

> Higher

population > 15000000

< Lower

population < 70000000

>= Higher or equal

atomicNumber >= 2

<= Lower or equal

atomicNumber <= 6

Negation

! Negation character

Is not equal

name != 'James Bond'

Does not end with

name !*= 'ond'

Does not start with

name !=* 'Jam'

Logical operators:

| OR

id = 3 | id = 4

& AND

firstName = 'John' & lastName = 'Doe'

¦ OR (highest priority)

rooms < 3 ¦ rooms > 6

Property names

The properties in the query must have the name of the properties of the JS/TS object:

const array = [{ aPropertyWithALongName: 5 }, { aPropertyWithALongName: 3 }];
const query = `aPropertyWithALongName >= 4`;

Comparison values

The comparison values can have 3 types of values:

string The value must be written between single quotes:

name = 'Mendeleev'

number The value must be written without quotes:

sheepCount > 25

boolean The value can be either 'true' or 'false', without quotes:

hasACat = true

Get predicate:

You can use the method getPredicatesFromQuery which gives you an object containing predicates. The first level contains OR conditions, the second AND conditions and the third OR (highest priority) conditions.

import { getPredicatesFromQuery } from '@jeje-devs/jeje-ql';

const predicate = getPredicatesFromQuery(`name =* 'J'`);

You can also use the method tryGetPredicatesFromQuery which returns a result value showing if the method worked.

Get filtered array

To get the filtered array, simply use the method getArrayFilteredByQuery. It filters the array with the query. If the query is not valid (syntax error), the array remains unfiltered:

import { getArrayFilteredByQuery } from '@jeje-devs/jeje-ql';

const unfiltered = [{ id: 1, name: 'Foo' }, { id: 2, name: 'Bar' }];
const filtered = getArrayFilteredByQuery(unfiltered, `name = 'Foo'`);

You can also use the method tryGetArrayFilteredByQuery which returns a result value showing if the method worked.

Contributors

Links

Readme

Keywords

none

Package Sidebar

Install

npm i @jeje-devs/jeje-ql

Weekly Downloads

0

Version

1.6.1

License

ISC

Unpacked Size

29.3 kB

Total Files

17

Last publish

Collaborators

  • jeremieprimas