_includes/resources/page/PageModels.ts (31 lines of code) (raw):

import { Static, Type } from "@sinclair/typebox"; import { getThumbnailPath, Resource, ResourceFrontmatter, } from "../../../src/ResourceModels"; import { EleventyPage } from "../../../src/models"; import { ThumbnailField } from "../commonModels"; import { PAGE_RESOURCE_TYPE } from "../../../src/resourceType"; export const PageFrontmatter = Type.Intersect([ ResourceFrontmatter, ThumbnailField, ]); export type PageFrontmatter = Static<typeof PageFrontmatter>; export class Page extends Resource<PAGE_RESOURCE_TYPE> implements PageFrontmatter { thumbnail: PageFrontmatter["thumbnail"]; static frontmatterSchema = PageFrontmatter; constructor({ data, page }: { data: PageFrontmatter; page: EleventyPage }) { super({ data, page, }); this.thumbnail = getThumbnailPath(data.thumbnail, page.url); } getThumbnail(): string { return this.thumbnail; } }