{"id":25881032,"url":"https://github.com/wasabi-io/js-criteria","last_synced_at":"2025-10-04T18:58:28.114Z","repository":{"id":57282987,"uuid":"62661033","full_name":"wasabi-io/js-criteria","owner":"wasabi-io","description":null,"archived":false,"fork":false,"pushed_at":"2018-07-01T05:11:05.000Z","size":273,"stargazers_count":5,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-08-20T11:36:56.484Z","etag":null,"topics":["criteria","criteria-api","json","typescript"],"latest_commit_sha":null,"homepage":"https://wasabi-io.github.io/js-criteria/","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/wasabi-io.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":"2016-07-05T18:45:29.000Z","updated_at":"2024-05-28T18:59:01.000Z","dependencies_parsed_at":"2022-09-19T23:21:46.653Z","dependency_job_id":null,"html_url":"https://github.com/wasabi-io/js-criteria","commit_stats":null,"previous_names":["kbukum/js-criteria"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/wasabi-io/js-criteria","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wasabi-io%2Fjs-criteria","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wasabi-io%2Fjs-criteria/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wasabi-io%2Fjs-criteria/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wasabi-io%2Fjs-criteria/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/wasabi-io","download_url":"https://codeload.github.com/wasabi-io/js-criteria/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wasabi-io%2Fjs-criteria/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278358485,"owners_count":25973949,"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-10-04T02:00:05.491Z","response_time":63,"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":["criteria","criteria-api","json","typescript"],"created_at":"2025-03-02T14:30:21.417Z","updated_at":"2025-10-04T18:58:28.076Z","avatar_url":"https://github.com/wasabi-io.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"## js-criteria\n\n[![npm package](https://badge.fury.io/gh/wasabi-io%2Fjs-criteria.svg)](https://badge.fury.io/gh/wasabi-io%2Fjs-criteria.svg)\n[![Build Status](https://travis-ci.org/wasabi-io/js-criteria.svg?branch=master)](https://travis-ci.org/wasabi-io/js-criteria)\n[![codecov](https://codecov.io/gh/wasabi-io/js-criteria/branch/master/graph/badge.svg)](https://codecov.io/gh/wasabi-io/js-criteria)\n\n#### Motivation\n\nAims to be a complete solution for query on json and javascript map objects.\n\n#### [Type Docs](https://wasabi-io.github.io/js-criteria)\n\n#### Installation\n\n```bash\nnpm install --save js-criteria\n```\n\n#### Usage\n\n  - [Criteria](https://wasabi-io.github.io/js-criteria/modules/_api_criteria_.criteria.html) :\n     Provides to create criteria on json.\n  - [CriteriaResult](https://wasabi-io.github.io/js-criteria/modules/_api_criteriaresult_.criteriaresult.html) :\n     Holds criteria result.\n  - [Order](https://wasabi-io.github.io/js-criteria/modules/_api_order_.order.html) :\n     Provides to ordering on `Criteria`.\n  - [Property](https://wasabi-io.github.io/js-criteria/modules/_api_property_.property.html) :\n     Provides to select property on `Criteria`.\n  - [Restrictions](https://wasabi-io.github.io/js-criteria/modules/_api_restrictions_.restrictions.html) :\n     Provides to filter on `Criteria`.\n\n* import\n```typescript\nimport {Criteria, Order, Restrictions} from \"js-criteria\";\n```\n\n\n* operate on Criteria\n\n```typescript\n        const result = criteria\n            .setLimit(10)\n            .setOffset(0)\n            .sort(\"age\", OrderType.asc)\n            .asc(\"name\")\n            .desc(\"surname\")\n            .isTrue(\"enabled\")\n            .isFalse(\"deleted\")\n            .isNull(\"name\")\n            .isNotNull(\"name\")\n            .eq(\"name\", \"sample\")\n            .neq(\"name\", \"sample\")\n            .gt(\"age\", 18)\n            .gte(\"age\", 18)\n            .lt(\"age\", 18)\n            .lte(\"age\", 18)\n            .between(\"age\", 18, 24)\n            .like(\"name\", \"sample\")\n            .likeIn(\"name\", [\"sample\"])\n            .in(\"name\", [\"sample\"])\n            .startsWith(\"name\", \"sample\")\n            .endsWith(\"name\", \"sample\")\n            .query(\"sample\")\n            .list();\n        console.log(result.total);\n        console.log(result.data);\n```\n\n* add restriction\n\n```typescript\n\nconst data = [\n    {\n        name: \"Nami\",\n        age: 16,\n    },\n    {\n        name: \"Monkey D. Luffy\",\n        age: 16,\n    },\n    {\n        name: \"Gol D. Roger\",\n        age: 32,\n    },\n    {\n        name: \"Chopper\",\n        age: 16,\n    }\n];\n\nconst criteria = new Criteria(data);\ncriteria.add(Restrictions.eq(\"name\", \"Gol D. Roger\"));\nlet result = criteria.list();\nconsole.log(result.total);\nconsole.log(result.data);\n\ncriteria.clear();\ncriteria.add(Restrictions.eq(\"age\", 16));\nresult = criteria.list();\nconsole.log(result.total);\nconsole.log(result.data);\n\ncriteria.clear();\ncriteria.add(Restrictions.eq(\"age\", 16));\nresult = criteria.list();\nconsole.log(result.total);\nconsole.log(result.data);\n```\n\n* add order\n\n```typescript\nconst data = [\n    {\n        name: \"Nami\",\n        age: 16,\n    },\n    {\n        name: \"Monkey D. Luffy\",\n        age: 16,\n    },\n    {\n        name: \"Gol D. Roger\",\n        age: 32,\n    },\n    {\n        name: \"Chopper\",\n        age: 16,\n    },\n];\n\nconst criteria = new Criteria(data);\ncriteria.addOrder(Order.asc(\"name\"));\nlet result = criteria.list();\nconsole.log(result.total);\nconsole.log(result.data);\n\n```\n\n\n* add query\n\n```typescript\nconst data: any = [\n    {\n        name: \"Nami\",\n        age: 16,\n    },\n    {\n        name: \"Monkey D. Luffy\",\n        age: 16,\n    },\n    {\n        name: \"Gol D. Roger\",\n        age: 32,\n    },\n    {\n        name: \"Chopper\",\n        age: 16,\n    },\n];\n\nlet criteria = new Criteria(data);\ncriteria.add(Restrictions.query(\"o\"));\nlet result = criteria.list();\nconsole.log(result.total);\nconsole.log(result.data);\n\nconst data2: any = [\n    {id: 1, name: \"John\", surname: \"Doe\"},\n    {name: \"Jane\", surname: \"Roe\", id: 2},\n];\n\ncriteria2 = new Criteria(data2);\ncriteria2.addQuery(Restrictions.query(\"J\"));\nlet result2 = criteria.list();\nconsole.log(result2.total);\nconsole.log(result2.data);\n```\n\n\n* reset criteria as initial state.\n\n```typescript\n\nconst criteria = new Criteria(data);\n\ncriteria.add(Restrictions.eq(\"name\", \"Gol D. Roger\"));\ncriteria.addOrder(Order.asc(\"name\"));\n\nlet result = criteria.list();\n\nconsole.log(result.total);\nconsole.log(result.data);\n\n// reset criteria\ncriteria.clear();\n\nresult = criteria.list();\n\nconsole.log(result.total);\nconsole.log(result.data);  // show all data.\n\n```\n\n\n* All methods defined on Criteria\n\n    - `public get offset()`\n    - `public setOffset(firstResult: number): Criteria\u003cE\u003e`\n    - `public get limit()`\n    - `public setLimit(limit: number): Criteria\u003cE\u003e`\n    - `public sort(name: string, orderType: OrderType): Criteria\u003cE\u003e`\n    - `public asc(name: string): Criteria\u003cE\u003e`\n    - `public desc(name: string): Criteria\u003cE\u003e`\n    - `public isTrue(name: string): Criteria\u003cE\u003e`\n    - `public isFalse(name: string): Criteria\u003cE\u003e`\n    - `public isNull(name: string): Criteria\u003cE\u003e`\n    - `public isNotNull(name: string): Criteria\u003cE\u003e`\n    - `public eq(name: string, value: any, caseSensitive?: boolean): Criteria\u003cE\u003e`\n    - `public neq(name: string, value: any, caseSensitive?: boolean): Criteria\u003cE\u003e`\n    - `public gt(name: string, value: any): Criteria\u003cE\u003e`\n    - `public gte(name: string, value: any): Criteria\u003cE\u003e`\n    - `public lt(name: string, value: any): Criteria\u003cE\u003e`\n    - `public lte(name: string, value: any): Criteria\u003cE\u003e`\n    - `public between(name: string, leftValue: any, rightValue: any): Criteria\u003cE\u003e`\n    - `public like(name: string, value: any, caseSensitive?: boolean): Criteria\u003cE\u003e`\n    - `public likeIn(name: string, values: any[], caseSensitive?: boolean): Criteria\u003cE\u003e`\n    - `public in(name: string, values: any[], caseSensitive?: boolean): Criteria\u003cE\u003e`\n    - `public startsWith(name: string, value: any, caseSensitive?: boolean): Criteria\u003cE\u003e`\n    - `public endsWith(name: string, value: any, caseSensitive?: boolean): Criteria\u003cE\u003e`\n    - `public query(value: any, ignoreList?: string[]): Criteria\u003cE\u003e`\n    - `public addOrder(orderItem: OrderItem\u003cE\u003e): Criteria\u003cE\u003e`\n    - `public removeOrder(key: string): Criteria\u003cE\u003e`\n    - `public clearOrder(): Criteria\u003cE\u003e`\n    - `public get total(): number`\n    - `public add(restriction: RestrictionItem): Criteria\u003cE\u003e`\n    - `public removeRestrictionByKey(key: string): Criteria\u003cE\u003e`\n    - `public removeRestriction(key: string, op: string): Criteria\u003cE\u003e`\n    - `public clearRestriction(): Criteria\u003cE\u003e`\n    - `public list(): CriteriaResult\u003cE\u003e`\n    - `public clear(): Criteria\u003cE\u003e`\n\n\n#### LICENSE\n\nThe MIT License (MIT)\n\nCopyright (c) 2016 Robe\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwasabi-io%2Fjs-criteria","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwasabi-io%2Fjs-criteria","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwasabi-io%2Fjs-criteria/lists"}