@kontent-ai/model-generator
Version:
This utility generates strongly-typed models for Delivery JS SDK, Migration toolkit or just general scripting to improve the experience when referencing Kontent.ai related objects.
50 lines (46 loc) • 1.88 kB
text/typescript
import type { ClientTypes, IContentItem, ItemsFeedQuery } from "@kontent-ai/delivery-sdk";
import { createDeliveryClient } from "@kontent-ai/delivery-sdk";
import chalk from "chalk";
import { HttpService } from "coreSdkLegacy";
import { coreConfig } from "../config.js";
import type { DeliveryApiMode, GeneratorDeliveryClient } from "../core/core.models.js";
import { sortAlphabetically } from "../core/core.utils.js";
export function getDeliveryKontentFetcher(config: {
readonly environmentId: string;
readonly deliveryApiKey: string | undefined;
readonly baseUrl?: string;
readonly apiMode: DeliveryApiMode;
}) {
const client: GeneratorDeliveryClient = createDeliveryClient({
environmentId: config.environmentId,
defaultQueryConfig: {
usePreviewMode: config.apiMode === "preview",
useSecuredMode: config.apiMode === "secure",
customHeaders: [
{
header: coreConfig.kontentTrackingHeaderName,
value: coreConfig.kontentTrackingHeaderValue,
},
],
},
secureApiKey: config.apiMode === "secure" ? config.deliveryApiKey : undefined,
previewApiKey: config.apiMode === "preview" ? config.deliveryApiKey : undefined,
proxy: {
baseUrl: config.baseUrl,
},
httpService: new HttpService({ logErrorsToConsole: false }),
});
const getItemsQuery = (filterByTypeCodenames: readonly string[]): ItemsFeedQuery<ClientTypes> => {
return filterByTypeCodenames.length > 0 ? client.itemsFeed().types(filterByTypeCodenames.map((m) => m)) : client.itemsFeed();
};
return {
async getItemsAsync(filterByTypeCodenames: readonly string[]): Promise<readonly Readonly<IContentItem>[]> {
const items = sortAlphabetically(
(await getItemsQuery(filterByTypeCodenames).toAllPromise()).data.items,
(m) => m.system.codename,
);
console.log(`Fetched '${chalk.yellow(items.length.toString())}' content items`);
return items;
},
};
}