From eadbd40ab1f0b12befc4b2eefa11758cb2267966 Mon Sep 17 00:00:00 2001 From: Johann Schopplich Date: Thu, 22 Sep 2022 17:21:41 +0200 Subject: [PATCH] feat: `KirbyQuerySchema` for typed nested query requests --- README.md | 1 + index.test-d.ts | 27 ++++++++++++++++++++++++++- src/kql.d.ts | 9 +++++++-- 3 files changed, 34 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index d995463..a1c45d8 100644 --- a/README.md +++ b/README.md @@ -44,6 +44,7 @@ Click the type names for complete docs. ### KQL +- [`KirbyQuerySchema`](./src/kql.d.ts) - Matches a [KQL query schema](https://github.com/getkirby/kql). - [`KirbyQueryRequest`](./src/kql.d.ts) - Matches any [KQL request](https://github.com/getkirby/kql). - [`KirbyQueryResponse`](./src/kql.d.ts) - Matches any [KQL response](https://github.com/getkirby/kql). diff --git a/index.test-d.ts b/index.test-d.ts index 505a47d..7850e4e 100644 --- a/index.test-d.ts +++ b/index.test-d.ts @@ -43,12 +43,37 @@ expectAssignable({ query: "site", select: { title: true, + }, +}); +expectAssignable({ + query: "site", + select: { + children: { + query: "site.children", + select: ["id", "title", "isListed"], + }, + }, +}); +expectAssignable({ + query: "site", + select: { children: { query: "site.children", select: { id: true, title: true, - isListed: true, + isListed: "page.isListed", + }, + }, + }, +}); +expectNotAssignable({ + query: "site", + select: { + children: { + query: "site.children", + select: { + id: null, }, }, }, diff --git a/src/kql.d.ts b/src/kql.d.ts index 3ad2194..a8f9836 100644 --- a/src/kql.d.ts +++ b/src/kql.d.ts @@ -1,8 +1,13 @@ import type { KirbyQuery } from "./query"; -export interface KirbyQueryRequest { +export interface KirbyQuerySchema { query: KirbyQuery; - select?: Record | string[]; + select?: + | string[] + | Record; +} + +export interface KirbyQueryRequest extends KirbyQuerySchema { pagination?: { /** @default 100 */ limit?: number;