import moment from 'moment'; import type default_config from './hexo/default_config'; import type i18n from 'hexo-i18n'; import type Query from 'warehouse/dist/query'; import type css from './plugins/helper/css'; import type { date, date_xml, time, full_date, relative_date, time_tag, moment as _moment } from './plugins/helper/date'; import type { inspectObject, log } from './plugins/helper/debug'; import type favicon_tag from './plugins/helper/favicon_tag'; import type feed_tag from './plugins/helper/feed_tag'; import type { titlecase, word_wrap, truncate, stripHTML, escapeHTML } from './plugins/helper/format'; import type fragment_cache from './plugins/helper/fragment_cache'; import type full_url_for from './plugins/helper/full_url_for'; import type gravatar from './plugins/helper/gravatar'; import type image_tag from './plugins/helper/image_tag'; import type { current, home, home_first_page, post, page, archive, year, month, category, tag } from './plugins/helper/is'; import type js from './plugins/helper/js'; import type link_to from './plugins/helper/link_to'; import type list_archives from './plugins/helper/list_archives'; import type list_categories from './plugins/helper/list_categories'; import type list_posts from './plugins/helper/list_posts'; import type list_tags from './plugins/helper/list_tags'; import type mail_to from './plugins/helper/mail_to'; import type markdown from './plugins/helper/markdown'; import type meta_generator from './plugins/helper/meta_generator'; import type number_format from './plugins/helper/number_format'; import type open_graph from './plugins/helper/open_graph'; import type paginator from './plugins/helper/paginator'; import type relative_url from './plugins/helper/relative_url'; import type render from './plugins/helper/render'; import type search_form from './plugins/helper/search_form'; import type tag_cloud from './plugins/helper/tagcloud'; import type toc from './plugins/helper/toc'; import type url_for from './plugins/helper/url_for'; export type NodeJSLikeCallback = (err: E, result?: R) => void; export interface RenderData { engine?: string; content?: string; disableNunjucks?: boolean; markdown?: any; source?: string; titlecase?: boolean; title?: string; excerpt?: string; more?: string; } export interface TagSchema { id?: string; _id?: string; name: string; slug: string; path: string; permalink: string; posts: any; length: number; } export interface DataSchema { id?: string; data: any; } export interface CategorySchema { id?: string; _id?: string; name: string; parent?: string; slug: string; path: string; permalink: string; posts: any; length: number; } export interface PostCategorySchema { _id?: string; post_id: string; category_id: string; } export interface PostTagSchema { _id?: string; post_id: string; tag_id: string; } export interface PostAssetSchema { _id: string; slug: string; modified: boolean; post: string; renderable: boolean; path: string; source: string; } export interface BasePagePostSchema { /** * ID generated by warehouse */ _id?: string; /** * Article title */ title: string; /** * Article created date */ date: moment.Moment; /** * Article last updated date */ updated: moment.Moment; /** * Comment enabled or not */ comments: boolean; /** * Layout name */ layout: string | false; /** * The full processed content of the article */ _content: string; /** * The full processed content of the article */ content?: string; /** * The path of the source file */ source: string; /** * The URL of the article without root URL. * We usually use url_for(page.path) in theme. */ path: string; /** * The raw data of the article */ raw: string; /** * Article excerpt */ excerpt?: string; /** * Contents except article excerpt */ more?: string; /** * Full path of the source file */ full_source: string; /** * Full (encoded) URL of the article */ permalink: string; /** * The photos of the article (Used in gallery posts) */ photos?: string[]; /** * The external link of the article (Used in link posts) */ link?: string; /** * The language of the article */ lang?: string; /** * The language of the article */ language?: string; /** * Base URL */ base?: string; /** * Whether the page is a page */ __page?: boolean; /** * Whether the page is a post */ __post?: boolean; /** * Whether the page is a home page */ __index?: boolean; /** * custom variables set in front-matter. */ [key: string]: any; } export interface PostSchema extends BasePagePostSchema { /** * Post ID */ id?: string; /** * The slug of the post */ slug: string; /** * True if the post is not a draft */ published: boolean; /** * The path of the asset directory */ asset_dir: string; /** * All categories of the post */ categories: Query; /** * All tags of the post */ tags: Query; /** * Inner usage */ __permalink?: string; /** * The previous post, `null` if the post is the first post */ prev?: PostSchema | null; /** * The next post, `null` if the post is the last post */ next?: PostSchema | null; notPublished: () => boolean; setTags: (tags: string[]) => any; setCategories: (cats: (string | string[])[]) => any; } export interface PageSchema extends BasePagePostSchema { /** * Posts displayed per page, only available on home page */ per_page?: number; /** * Total number of pages, only available on home page */ total?: number; /** * Current page number, only available on home page */ current?: number; /** * The URL of current page, only available on home page */ current_url?: string; /** * Posts in this page, only available on home page */ posts?: any; /** * Previous page number. `0` if the current page is the first. only available on home page */ prev?: number; /** * The URL of previous page. `''` if the current page is the first. only available on home page */ prev_link?: string; /** * Next page number. `0` if the current page is the last. only available on home page */ next?: number; /** * The URL of next page. `''` if the current page is the last. only available on home page */ next_link?: string; /** * Equals true, only available on archive page */ archive?: boolean; /** * Archive year (4-digit), only available on archive page */ year?: number; /** * Archive month (2-digit without leading zeros), only available on archive page */ month?: number; /** * Category name, only available on category page */ category?: string; /** * Tag name, only available on tag page */ tag?: string; } export interface AssetSchema { _id?: string; path: string; modified: boolean; renderable: boolean; source: string; } export interface CacheSchema { _id: string; hash: string; modified: number; } export interface BaseGeneratorReturn { /** * Path not including the prefixing `/`. */ path: string; /** * Data */ data?: any; /** * Layout. Specify the layouts for rendering. The value can be a string or an array. * If it’s ignored then the route will return `data` directly. */ layout?: string | string[]; } export interface SiteLocals { /** * All posts */ posts: Query; /** * All pages */ pages: Query; /** * All categories */ categories: Query; /** * All tags */ tags: Query; data: any; } export interface LocalsType { /** * Page specific information and custom variables set in front-matter. */ page: BasePagePostSchema; /** * Path of current page */ path: string; /** * Full URL of current page */ url: string; /** * Site configuration. */ config: typeof default_config; /** * Theme configuration. Inherits from site configuration. */ theme: any; layout: string | boolean; /** * Environment variables */ env: any; view_dir: string; /** * Sitewide information. */ site: SiteLocals; cache?: boolean; /** * https://hexo.io/docs/internationalization#Templates */ __: ReturnType; /** * https://hexo.io/docs/internationalization#Templates */ _p: ReturnType; body?: string; filename?: string; css: typeof css; date: typeof date; date_xml: typeof date_xml; escape_html: typeof escapeHTML; favicon_tag: typeof favicon_tag; feed_tag: typeof feed_tag; fragment_cache: ReturnType; full_date: typeof full_date; full_url_for: typeof full_url_for; gravatar: typeof gravatar; image_tag: typeof image_tag; inspect: typeof inspectObject; is_archive: typeof archive; is_category: typeof category; is_current: typeof current; is_home: typeof home; is_home_first_page: typeof home_first_page; is_month: typeof month; is_page: typeof page; is_post: typeof post; is_tag: typeof tag; is_year: typeof year; js: typeof js; link_to: typeof link_to; list_archives: typeof list_archives; list_categories: typeof list_categories; list_posts: typeof list_posts; list_tags: typeof list_tags; log: typeof log; mail_to: typeof mail_to; markdown: typeof markdown; meta_generator: typeof meta_generator; moment: typeof _moment; number_format: typeof number_format; open_graph: typeof open_graph; paginator: typeof paginator; partial: ReturnType; relative_date: typeof relative_date; relative_url: typeof relative_url; render: ReturnType; search_form: typeof search_form; strip_html: typeof stripHTML; tag_cloud: typeof tag_cloud; tagcloud: typeof tag_cloud; time: typeof time; time_tag: typeof time_tag; titlecase: typeof titlecase; toc: typeof toc; trim: typeof stripHTML; truncate: typeof truncate; url_for: typeof url_for; word_wrap: typeof word_wrap; } export interface FilterOptions { context?: any; args?: any[]; }