Open
Description
I've been making some moves on TypeScript typings for KQL queries. It's early days, but I am able to derive response types from queries pretty well already.
I'm testing and developing it in my current project, and I'm keen for anyone else to give it a try or contribute (In particular, the models.ts
file is incomplete and needs filling out with the types of all Kirby's built-in stuff).
https://github.com/benwest/kql-ts
import { createClient } from "./kql/client";
import { KQLQueryData } from "./kql/query";
const query = {
query: "site",
select: {
title: true,
logo: {
query: "site.logo.toFile",
select: {
srcset: true,
width: true,
height: true,
placeholder: "file.resize(5).url",
},
},
pages: {
query: "site.children",
select: {
title: true,
tags: `page.tags.split(',')`,
},
},
},
} as const; // <- important
type Content = KQLQueryData<typeof query>;
/* ^^^^^^^
{
readonly title: string;
readonly logo: {
readonly srcset: string;
readonly width: number;
readonly height: number;
readonly placeholder: string;
} | null;
readonly pages: {
readonly title: string;
readonly tags: string[];
}[];
} */
const kql = createClient({
user: KQL_USER,
password: KQL_PASSWORD,
url: KQL_URL,
});
const response = await kql(query);
if (response.status === "ok") {
const data = response.result; // strongly typed!
}
Metadata
Metadata
Assignees
Labels
No labels