{"id":24612718,"url":"https://github.com/altnext/iql","last_synced_at":"2025-05-06T21:48:09.183Z","repository":{"id":37024676,"uuid":"282945381","full_name":"AltNext/iql","owner":"AltNext","description":"Open source inline query language","archived":false,"fork":false,"pushed_at":"2025-05-04T02:10:46.000Z","size":654,"stargazers_count":1,"open_issues_count":33,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-05-04T03:20:56.241Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","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/AltNext.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2020-07-27T15:53:54.000Z","updated_at":"2022-10-23T03:19:12.000Z","dependencies_parsed_at":"2024-05-28T15:45:43.865Z","dependency_job_id":"145d0735-5a19-462e-a4d0-dfe89ed6d18f","html_url":"https://github.com/AltNext/iql","commit_stats":null,"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AltNext%2Fiql","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AltNext%2Fiql/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AltNext%2Fiql/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AltNext%2Fiql/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AltNext","download_url":"https://codeload.github.com/AltNext/iql/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252776477,"owners_count":21802461,"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","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":[],"created_at":"2025-01-24T20:25:12.224Z","updated_at":"2025-05-06T21:48:09.121Z","avatar_url":"https://github.com/AltNext.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# IQL\n\nInline Query Language\n\nThis package aims to make SQL-like queries type safe and easy to build dynamically with an expressive API\n\n[![Test Status](https://github.com/altnext/iql/actions/workflows/test.yml/badge.svg?branch=main)](https://github.com/AltNext/iql/actions/workflows/test.yml?query=branch%3Amain)\n[![Coverage Status](https://coveralls.io/repos/github/AltNext/iql/badge.svg?branch=main)](https://coveralls.io/github/AltNext/iql?branch=main)\n\n[![Bugs](https://sonarcloud.io/api/project_badges/measure?project=AltNext_iql\u0026metric=bugs)](https://sonarcloud.io/dashboard?id=AltNext_iql)\n[![Code Smells](https://sonarcloud.io/api/project_badges/measure?project=AltNext_iql\u0026metric=code_smells)](https://sonarcloud.io/dashboard?id=AltNext_iql)\n[![Maintainability Rating](https://sonarcloud.io/api/project_badges/measure?project=AltNext_iql\u0026metric=sqale_rating)](https://sonarcloud.io/dashboard?id=AltNext_iql)\n[![Reliability Rating](https://sonarcloud.io/api/project_badges/measure?project=AltNext_iql\u0026metric=reliability_rating)](https://sonarcloud.io/dashboard?id=AltNext_iql)\n[![Security Rating](https://sonarcloud.io/api/project_badges/measure?project=AltNext_iql\u0026metric=security_rating)](https://sonarcloud.io/dashboard?id=AltNext_iql)\n[![Technical Debt](https://sonarcloud.io/api/project_badges/measure?project=AltNext_iql\u0026metric=sqale_index)](https://sonarcloud.io/dashboard?id=AltNext_iql)\n[![Vulnerabilities](https://sonarcloud.io/api/project_badges/measure?project=AltNext_iql\u0026metric=vulnerabilities)](https://sonarcloud.io/dashboard?id=AltNext_iql)\n\n[![Snyk Vulnerabilities for GitHub Repo](https://img.shields.io/snyk/vulnerabilities/github/altnext/iql)](https://app.snyk.io/org/altnext/project/https://app.snyk.io/org/altnext/project/615eb00b-5713-4b96-b95b-634bf66f43db)\n\n[![npm](https://img.shields.io/npm/v/iql)](https://www.npmjs.com/package/iql)\n[![NPM](https://img.shields.io/npm/l/iql)](https://www.npmjs.com/package/iql)\n[![npm](https://img.shields.io/npm/dm/iql)](https://www.npmjs.com/package/iql)\n[![npm bundle size](https://img.shields.io/bundlephobia/minzip/iql)](https://www.npmjs.com/package/iql)\n\n[![GitHub issues](https://img.shields.io/github/issues-raw/altnext/iql)](https://www.github.com/altnext/iql)\n[![GitHub pull requests](https://img.shields.io/github/issues-pr-raw/altnext/iql)](https://www.github.com/altnext/iql)\n[![GitHub code size in bytes](https://img.shields.io/github/languages/code-size/altnext/iql)](https://www.github.com/altnext/iql)\n[![Lines of code](https://img.shields.io/tokei/lines/github/altnext/iql)](https://www.github.com/altnext/iql)\n[![GitHub top language](https://img.shields.io/github/languages/top/altnext/iql)](https://www.github.com/altnext/iql)\n\n```typescript\nimport { Client } from 'pg';\nimport { query } from 'iql';\nimport type { QueryResult } from 'iql';\n\ninterface IRawUser {\n id: string;\n name: string;\n}\n\ninterface IUserParams {\n id: string;\n ids: string[];\n}\n\nconst findA = query\u003cIRawUser, IUserParams\u003e`\nSELECT id, name FROM public.users\n  WHERE id = ${'id'}\n-- WHERE id = $1\n  OR id = ${(agg) =\u003e agg.key('id')}\n-- OR id = $1\n  OR id = ${(agg, { id }) =\u003e agg.value(id)} -- This creates a new parameter each time it is called\n-- OR id = $2\n  OR id IN (${(agg, { ids }) =\u003e agg.values(ids)}); -- Creates parameters for each member of passed value, each time it is called.\n  OR id IN (${(agg) =\u003e agg.values('ids')}); -- Same as above\n-- OR id IN ($3, $4, ..., $N);\n`;\n\nconst pg = new Client();\n\nconst result = await pg.query\u003cQueryResult\u003ctypeof findA\u003e\u003e(findA.compile({ id: '6', ids: ['a', 'b', '5'] }));\n\n// row is of type IRawUser\nresult.rows.forEach((row) =\u003e {});\n```\n\n### Supported query executors\n\n| Component | Query executors | Notes |\n| :------ | :------ | :------ |\n| `pg` | `pg` | Used as input to the `{Pool,Client}#query` method. Also exported as `query` for backwards compatibility. |\n| `bq` | `@google-cloud/bigquery` | Used as input to the `BigQuery#createQueryJob` method. |\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faltnext%2Fiql","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faltnext%2Fiql","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faltnext%2Fiql/lists"}