{"id":22317140,"url":"https://github.com/oplog/dynamic-query-builder-client","last_synced_at":"2025-07-29T12:30:51.098Z","repository":{"id":54940714,"uuid":"138743116","full_name":"oplog/dynamic-query-builder-client","owner":"oplog","description":"Typescript client for Dynamic Query Builder","archived":false,"fork":false,"pushed_at":"2021-01-20T08:55:10.000Z","size":197,"stargazers_count":17,"open_issues_count":1,"forks_count":4,"subscribers_count":7,"default_branch":"master","last_synced_at":"2025-07-11T21:34:07.053Z","etag":null,"topics":["javascript","javascript-library","lightweight","linq","node","nodejs","npm-package","typescript"],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/oplog.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-06-26T13:36:15.000Z","updated_at":"2023-04-23T06:36:48.000Z","dependencies_parsed_at":"2022-08-14T07:10:21.721Z","dependency_job_id":null,"html_url":"https://github.com/oplog/dynamic-query-builder-client","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/oplog/dynamic-query-builder-client","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oplog%2Fdynamic-query-builder-client","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oplog%2Fdynamic-query-builder-client/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oplog%2Fdynamic-query-builder-client/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oplog%2Fdynamic-query-builder-client/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/oplog","download_url":"https://codeload.github.com/oplog/dynamic-query-builder-client/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oplog%2Fdynamic-query-builder-client/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":267686336,"owners_count":24127715,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-29T02:00:12.549Z","response_time":2574,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["javascript","javascript-library","lightweight","linq","node","nodejs","npm-package","typescript"],"created_at":"2024-12-03T23:08:51.236Z","updated_at":"2025-07-29T12:30:50.752Z","avatar_url":"https://github.com/oplog.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Dynamic Query Builder Client\n\n[![npm version](https://img.shields.io/npm/v/dynamic-query-builder-client.svg?style=flat)](https://www.npmjs.com/package/react) [![CircleCI](https://circleci.com/gh/oplog/dynamic-query-builder-client.svg?style=svg)](https://circleci.com/gh/oplog/dynamic-query-builder-client)\n![istanbul coverange](https://img.shields.io/badge/code%20coverange-93.04-green.svg)\n\nDynamic query builder is able to build http query string for `filtering`, `sorting`, `pagination` operations. It works with [DynamicQueryBuilder](https://github.com/oplog/DynamicQueryBuilder) library.\n\n#### NOTE: QueryBuilder is not able to perform http requests. It is only responsible to build query string.\n\n#### NOTE: To perform http requests with query string, the builded query must be url encoded\n\n## Getting Started\n\nAll query building operations are done by `QueryBuilder` class. To create a new instance. Here's the constructor parameters;\n\n```ts\nexport interface QueryBuilderParams {\n  filters: Array\u003cFilter\u003e;\n  sortBy?: Array\u003cSortField\u003e;\n  pagination?: Pagination;\n}\n```\n\nA full example would be the following;\n\n```ts\nimport { QueryBuilder } from \"@dynamic-query-builder\";\n\nexport interface User {\n  name: string;\n  age: number;\n}\n\nconst builder = new QueryBuilder({\n  filters: [\n    new NumericFilter({\n      property: \"age\",\n      value: 25,\n      op: NumericFilterOperation.GreaterThan,\n      logicalOperator: LogicalOperator.OrElse,\n    }),\n    new StringFilter({\n      property: \"name\",\n      value: \"Y\",\n      op: StringFilterOperation.StartsWith,\n    }),\n  ],\n  pagination: new Pagination({\n    offset: 0,\n    count: 10,\n  }),\n  sortBy: [\n    new SortField({\n      property: \"name\",\n      by: SortDirection.DESC,\n    }),\n  ],\n});\n\nconst query = builder.build();\n// Query will hold the following string\n// o=GreaterThan|OrElse\u0026p=age\u0026v=25\u0026o=StartsWith\u0026p=name\u0026v=Y\u0026offset=0\u0026count=10\u0026s=name,desc\n\n// Give me 10 users sorted by name descending from offset 0\n// whose age is greater than 25 AND\n// whose names starts with Y\n```\n\n## Filters\n\nThe possible filters in dynamic query builder is the following;\n\n### StringFilter\n\nString Filter is able to make string filtering;\n\n#### Possible Operations\n\n```ts\nexport enum StringFilterOperation {\n  In = \"In\",\n  Equals = \"Equals\",\n  Contains = \"Contains\",\n  NotEqual = \"NotEqual\",\n  EndsWith = \"EndsWith\",\n  StartsWith = \"StartsWith\",\n}\n\n// example\nconst filter = new StringFilter({\n  property: \"name\",\n  op: StringFilterOperation.StartsWith,\n  value: \"s\",\n});\n```\n\n### Numeric Filter\n\nNumeric Filter is able to make numeric filtering;\n\n#### Possible Operations\n\n```ts\nexport enum NumericFilterOperation {\n  In = \"In\",\n  Equals = \"Equals\",\n  NotEqual = \"NotEqual\",\n  LessThan = \"LessThan\",\n  LessThanOrEqual = \"LessThanOrEqual\",\n  GreaterThan = \"GreaterThan\",\n  GreaterThanOrEqual = \"GreaterThanOrEqual\",\n}\n\n// example\nconst filter = new NumericFilter({\n  property: \"age\",\n  op: NumericFilterOperation.GreaterThan,\n  value: 25,\n});\n```\n\n### Boolean Filter\n\nBoolean Filter is able to make boolean/option filtering;\n\n#### Possible Operations\n\n```ts\nexport enum BooleanFilterOperation {\n  Equals = \"Equals\",\n  NotEqual = \"NotEqual\",\n}\n\n// example\nconst filter = new BooleanFilter({\n  property: \"isPremium\",\n  op: BooleanFilterOperation.Equals,\n  value: true,\n});\n```\n\n### Date Filter\n\nDate Filter is able to make date filtering;\n\n#### Possible Operations\n\n```ts\nexport enum DateFilterOperation {\n  Equals = \"Equals\",\n  NotEqual = \"NotEqual\",\n  GreaterThan = \"GreaterThan\",\n  GreaterThanOrEqual = \"GreaterThanOrEqual\",\n  LessThan = \"LessThan\",\n  LessThanOrEqual = \"LessThanOrEqual\",\n}\n\n// example\nconst filter = new DateFilter({\n  property: \"birthDate\",\n  op: DateFilterOperation.GreaterThan,\n  value: moment(\"12/25/1995\", \"MM-DD-YYYY\"),\n});\n\n// NOTE: Moment library is required for dynamic query builder\n```\n\n## Sorting\n\nSorting can be done by creating `SortField` instance;\n\n```ts\nconst field = new SortField({\n  property: \"age\",\n  by: SortDirection.DESC,\n});\n// The default by parameter is Ascending\n```\n\n## Pagination\n\nPagination can be done by creating `Pagination` instance;\n\n```ts\nconst pagination = new Pagination({\n  offset: 10, // default value is 0\n  count: 25, // default value is 25\n});\n```\n\n## Best Practices\n\n- Always use `QueryBuilder` instance `build()` function for building query string.\n- Do not use `filter.build()`, `sortfield.build()` or `pagination.build()` separately\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foplog%2Fdynamic-query-builder-client","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Foplog%2Fdynamic-query-builder-client","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foplog%2Fdynamic-query-builder-client/lists"}