Latest Threat Research:Malicious dYdX Packages Published to npm and PyPI After Maintainer Compromise.Details
Socket
Book a DemoInstallSign in
Socket

json-api-query

Package Overview
Dependencies
Maintainers
1
Versions
30
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install
Package version was removed
This package version has been unpublished, mostly likely due to security reasons

json-api-query

A query builder for JSONAPIDotNetCore

unpublished
Source
npmnpm
Version
2.0.1-next.2
Version published
Weekly downloads
33
175%
Maintainers
1
Weekly downloads
 
Created
Source

JSON-API-QUERY

A javascript client helper for APIs built with https://www.jsonapi.net/

NOTE: this is not an API client - it's a query builder for you to use in your client code.

The design / inspiration of this API was lifted quite heavily from https://github.com/typeorm/typeorm - though it is not meant to match it.

Examples:

The query builder supports all of the terms found in the [since v4.0] docs found here: https://www.jsonapi.net/usage/reading/filtering.html

Legacy syntax is not supported, there is some consideration in the code to add this later (as well as supporting evolved syntax later on) but I am not sure how worthwhile that would be

Basic filtering:

new QueryBuilder<TestClass>()
    .find({
        where: {
            numProp: 1,
        },
    })
    .build()

Generates the following:

?filter=equals(numProp,'1')

Filtering using ANY:

new QueryBuilder<TestClass>()
    .find({
        where: {
            numProp: Any([1, 2, 3]),
        },
    })
    .build()

Generates the following:

?filter=any(numProp,1,2,3)

Filtering using CONTAINS:

new QueryBuilder<TestClass>()
    .find({
        where: {
            numProp: Contains('lol'),
        },
    })
    .build()

Generates the following:

?filter=contains(prop12,'lol')

Filtering using NEGATION:

new QueryBuilder<TestClass>()
    .find({
        where: {
            numProp: Not(Equals(1)),
        },
    })
    .build()

Generates the following:

?filter=not(equals(numProp,'1'))

Filtering using OR:

new QueryBuilder<TestClass>()
    .find({
        where: {
            numProp: Or([Has([1, 2, 3]), Equals(1)]),
        },
    })
    .build()

Generates the following:

?filter=or(has(numProp,1,2,3),equals(numProp,'1'))

Filtering using implicit OR:

new QueryBuilder<TestClass>()
    .find({
        where: [
            {
                numProp: Has([1, 2, 3]),
            },
            {
                numProp: Equals(1),
            },
        ],
    })
    .build()

Generates the following:

?filter=or(has(numProp,1,2,3),equals(numProp,'1'))

Filtering using nested properties:

new QueryBuilder<TestClass>()
    .find({
        where: {
            nested: {
                property1Nested: Equals('test'),
            },
        },
    })
    .build()

Generates the following:

?filter[nested]=equals(property1Nested,'test')

Including relationships:

new QueryBuilder<TestClass>()
    .find({
        relations: {
            nested: {
                nestedAgain: true,
            },
        },
    })
    .build()

Generates the following:

?include=nested.nestedAgain

Sparse fieldsets:

new QueryBuilder<TestClass>()
    .find({
        fields: {
            property2: true,
        },
    })
    .build()

Generates the following:

?fields=property2

Ordering:

new QueryBuilder<TestClass>()
    .find({
        order: {
            property2: 'ASC',
            nested: {
                property1Nested: 'DESC',
                property2Nested: {
                    direction: 'ASC',
                },
            },
        },
    })
    .build()

Generates the following:

?sort=property2&sort[nested]=property1Nested,-property2Nested

Putting it all together:

new QueryBuilder<TestClass>()
    .find({
        where: {
            a: Contains('lol'),
            not1: Not(Equals('not5')),
            nested: {
                property2Nested: true,
                property1Nested: Has(['one', 'two']),
                nestedAgain: {
                    property1Nested: EndsWith('wot'),
                },
            },
        },
        relations: {
            nested: true,
        },
        fields: {
            firstName: true,
            lastName: true,
            nested: {
                property2Nested: true,
            },
        },
        number: 10,
        size: 0,
        order: {
            property2: 'ASC',
            nested: {
                property1Nested: 'DESC',
            },
        },
    })
    .build()

Generates the following:

?sort=property2
    &sort[nested]=property1Nested
    &filter=and(contains(a,'lol'),not(equals(not1,'not5')))
    &include=nested
    &fields=firstName,lastName
    &fields[nested]=property2Nested
    &page[size]=0
    &page[number]=10
    &filter[nested]=and(equals(property2Nested,'true'),has(property1Nested,one,two))
    &filter[nestedAgain]=endsWith(property1Nested,'wot')

FAQs

Package last updated on 20 May 2022

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts