poststore
Version:
PostStore can be used with NEXT.JS to create markdown-based blogs.
62 lines (61 loc) • 1.71 kB
TypeScript
import { Clone } from './helper';
import { PropList } from './prop';
import { FileNode } from './node';
import { PathList } from './path';
export declare type PageCategory = keyof PropList & keyof PathList;
export interface PageParamOption extends Partial<Clone<PageCategory, string>> {
}
export interface PerPageOption extends Partial<Omit<Clone<PageCategory, number>, 'post'>> {
}
export interface PostStore {
rootNode: FileNode;
propList: PropList;
pathList: PathList;
info: {
name: string;
postDir: string;
};
options: {
postDir: string;
perPage: PerPageOption;
pageParam: PageParamOption;
};
}
export interface PathStore extends Pick<PostStore, 'pathList'> {
}
export interface PostData extends CorePostData, ExtraPostData {
}
export interface CorePostData {
slug: string;
title: string;
tags: string[];
html: string;
date: number;
isPublished: boolean;
}
export interface PostInfo {
assets?: PostStoreAsset[];
excerpt?: string;
thumbnail?: string;
}
export interface ExtraPostData extends PostInfo {
categories: string[];
prevPost?: PostLink;
nextPost?: PostLink;
}
export interface PostStoreAsset {
sourcePath: string;
targetPath: string;
}
interface PostLink extends Pick<PostData, 'slug' | 'title'> {
}
export interface ShortPostData extends Pick<PostData, 'slug' | 'title' | 'date' | 'thumbnail' | 'excerpt' | 'categories' | 'tags'> {
}
export declare type SlugMap = Map<string, boolean>;
export interface FrontMatter {
title?: string;
date?: Date;
tags?: string[];
published?: boolean;
}
export {};