alinea
Version:
Headless git-based CMS
20 lines (19 loc) • 722 B
TypeScript
import type { FieldsDefinition, Type } from './Type.js';
export interface PageData {
type: Type;
fields: Record<string, any>;
}
export type Page<Children extends Record<string, Page> = Record<string, never>> = Children & {
[Page.Data]: PageData;
};
export declare namespace Page {
const Data: unique symbol;
function data(page: Page): PageData;
function isPage(page: any): page is Page;
}
export interface PageConfig<Definition, Children> {
type: Type<Definition>;
fields?: Partial<Type.Infer<Definition>>;
children?: Children;
}
export declare function page<Fields extends FieldsDefinition, Children extends Record<string, Page>>(config: PageConfig<Fields, Children>): Page<Children>;