npm.io
2.2.0 • Published 1 week ago

@rapiq/parser-mongo

Licence
MIT
Version
2.2.0
Deps
0
Size
101 kB
Vulns
0
Weekly
0
Stars
33

rapiq

@rapiq/parser-mongo

Parse MongoDB-style filter documents into a rapiq Query.
$and / $or / $nor, $gte / $in / $not / $regex, $elemMatch
for clients that submit filters as JSON.

npm version types License: MIT

Documentation · Monorepo · npm


Part of rapiq. Typed REST queries: build, transport, validate, execute. Bring a familiar MongoDB-style query document to any rapiq backend. Useful when clients submit filters as typed JSON in request bodies or saved queries.

{
    $or: [
        { name: 'John', age: { $gte: 18, $lt: 65 } },
        { 'realm.name': { $startsWith: 'mas' } },
    ],
}
  • Familiar syntax: $and / $or / $nor compounds, De Morgan $not / $nor negation, field operators ($eq, $gte, $in, $regex, $elemMatch, …) and six $contains-family rapiq extensions.
  • Typed values: JSON keeps its types ({ $gte: 18 } stays a number), no wire-string coercion.
  • Two-class failure model: grammar errors always throw FiltersParseError; field-key/allow-list failures follow the schema drop-vs-throw policy.
  • Same AST as every dialect: only filters is mongo-flavoured; fields, relations, pagination and sorts reuse @rapiq/parser-simple.

Installation

npm install @rapiq/core @rapiq/parser-simple @rapiq/parser-mongo

Usage

import { MongoParser } from '@rapiq/parser-mongo';

const parser = new MongoParser(registry);

const query = parser.parse({
    filters: { age: { $gte: 18 }, 'realm.name': 'master' },
    sorts: '-age',
    pagination: { limit: 25 },
}, { schema: 'user' });

Only the filters parameter uses the mongo dialect; fields, relations, pagination and sorts accept the same input as @rapiq/parser-simple, and the whole thing returns the same Query AST.

Grammar errors (unknown $-operators, misplaced operators, malformed operator arguments) always throw FiltersParseError; field keys that fail the schema allow-list are dropped by default and throw when throwOnFailure is set.

The rapiq family

Package Purpose
@rapiq/core Query AST, typed build layer & schema system (the shared foundation)
@rapiq/parser-simple Parse plain object/array input (the "simple" dialect)
@rapiq/parser-expression Parse filter expressions like and(eq(name,'John'), gte(age,'18'))
@rapiq/parser-mongo Parse MongoDB-style filter documents like { age: { $gte: 18 } }
@rapiq/codec-url URL query-string transport codec
@rapiq/adapter-sql Dialect-agnostic SQL fragment adapter (pg, mysql, sqlite, mssql, oracle)
@rapiq/adapter-typeorm Apply a query to a TypeORM SelectQueryBuilder
@rapiq/adapter-prisma Serialize a query into a Prisma argument object
@rapiq/adapter-drizzle Serialize a query into a Drizzle relational query config
@rapiq/adapter-memory Evaluate a query against in-memory objects & arrays

Documentation

Full guide (operator table & deviations from MongoDB): rapiq.tada5hi.net/packages/parser-mongo

License

Published under the MIT License.

Keywords