UNPKG

akasharender

Version:

Rendering support for generating static HTML websites or EPUB eBooks

418 lines 15.9 kB
/** * * Copyright 2014-2025 David Herron * * This file is part of AkashaCMS (http://akashacms.com/). * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import { dirToMount, VPathData } from './cache/vfstack.js'; export type { dirToMount, VPathData } from './cache/vfstack.js'; export { isDirToMount } from './cache/vfstack.js'; import * as Renderers from '@akashacms/renderers'; export * as Renderers from '@akashacms/renderers'; import { Renderer } from '@akashacms/renderers'; export { Renderer } from '@akashacms/renderers'; import * as mahabhuta from 'mahabhuta'; export * as mahabhuta from 'mahabhuta'; import * as cheerio from 'cheerio'; export * from './mahafuncs.js'; export * as relative from 'relative'; export { Plugin } from './Plugin.js'; import type { TagDescription } from './types.js'; export type { TagDescription } from './types.js'; export { validTagDescription } from './types.js'; export { render, render2, renderDocument, renderDocument2, renderContent } from './render.js'; export { SitemapValidator, type SitemapEntry, type EntryValidation, type XMLValidation, type ValidationResult } from './sitemap-validator.js'; import * as filecache from './cache/cache-sqlite.js'; export { newSQ3DataStore } from './sqdb.js'; /** * Performs setup of things so that AkashaRender can function. * The correct initialization of AkashaRender is to * 1. Generate the Configuration object * 2. Call config.prepare * 3. Call akasharender.setup * * This function ensures all objects that initialize asynchronously * are correctly setup. * * @param {*} config */ export declare function setup(config: any): Promise<void>; export declare function cacheSetup(config: any): Promise<void>; export declare function closeCaches(): Promise<void>; export declare function fileCachesReady(config: any): Promise<void>; export declare function renderPath(config: any, path2r: any): Promise<string>; export declare function renderPath2(config: any, path2r: any): Promise<import("./render.js").RenderingResults>; /** * Reads a file from the rendering directory. It is primarily to be * used in test cases, where we'll run a build then read the individual * files to make sure they've rendered correctly. * * @param {*} config * @param {*} fpath * @returns */ export declare function readRenderedFile(config: any, fpath: any): Promise<{ html: string; $: cheerio.CheerioAPI; }>; /** * Renders a partial template using the supplied metadata. This version * allows for asynchronous execution, and every bit of code it * executes is allowed to be async. * * @param {*} config AkashaRender Configuration object * @param {*} fname Path within the filecache.partials cache * @param {*} metadata Object containing metadata * @returns Promise that resolves to a string containing the rendered stuff */ export declare function partial(config: any, fname: any, metadata: any): Promise<any>; /** * Renders a partial template using the supplied metadata. This version * allows for synchronous execution, and every bit of code it * executes is synchronous functions. * * @param {*} config AkashaRender Configuration object * @param {*} fname Path within the filecache.partials cache * @param {*} metadata Object containing metadata * @returns String containing the rendered stuff */ export declare function partialSync(config: any, fname: any, metadata: any): any; export type indexChainItem = { title: string; vpath: string; foundPath: string; foundDir: string; filename: string; }; /** * Starting from a virtual path in the documents, searches upwards to * the root of the documents file-space, finding files that * render to "index.html". The "index.html" files are index files, * as the name suggests. * * @param {*} config * @param {*} fname * @returns */ export declare function indexChain(config: any, fname: any): Promise<indexChainItem[]>; /** * Manipulate the rel= attributes on a link returned from Mahabhuta. * * @params {$link} The link to manipulate * @params {attr} The attribute name * @params {doattr} Boolean flag whether to set (true) or remove (false) the attribute * */ export declare function linkRelSetAttr($link: any, attr: any, doattr: any): void; /** * Compute an absolute vpath from a relative path reference. * * This function resolves a relative path (like "../file.html" or "./file.html") * to an absolute vpath in the virtual filesystem, based on the vpath of the * current document. * * If the input path is already absolute (starts with '/'), it is returned * as-is after normalization. * * @param baseVpath The vpath of the document making the reference (e.g., metadata.document.path) * @param relativePath The path to resolve (can be relative or absolute) * @returns The absolute vpath in the virtual filesystem * * @example * // From document at 'hier/dir1/page.html.md' referencing '../sibling/file.html' * resolveVpath('hier/dir1/page.html.md', '../sibling/file.html') * // Returns: '/hier/sibling/file.html' * * @example * // Already absolute path * resolveVpath('hier/dir1/page.html.md', '/absolute/path.html') * // Returns: '/absolute/path.html' */ export declare function resolveVpath(baseVpath: string, relativePath: string): string; export declare function generateRSS(config: any, configrss: any, feedData: any, items: any, renderTo: any): Promise<void>; /** * The AkashaRender project configuration object. * One instantiates a Configuration object, then fills it * with settings and plugins. * * @see module:Configuration */ /** * Data type describing items in the * javaScriptTop and javaScriptBottom arrays. * The fields correspond to the attributes * of the <script> tag which can be used * either in the top or bottom of * an HTML file. */ export type javaScriptItem = { href?: string; script?: string; lang?: string; }; export type stylesheetItem = { href?: string; media?: string; }; /** * Defines the structure for directory * mount specification in the Configuration. * * The simple 'string' form says to mount * the named fspath on the root of the * virtual filespace. * * The object form allows us to mount * an fspath into a different location * in the virtual filespace, to ignore * files based on GLOB patterns, and to * include metadata for every file in * a directory tree. * * In the file-cache module, this is * converted to the dirToWatch structure * used by StackedDirs. */ /** * Configuration of an AkashaRender project, including the input directories, * output directory, plugins, and various settings. * * USAGE: * * const akasha = require('akasharender'); * const config = new akasha.Configuration(); */ export declare class Configuration { #private; constructor(modulepath: any); /** * Initialize default configuration values for anything which has not * already been configured. Some built-in defaults have been decided * ahead of time. For each configuration setting, if nothing has been * declared, then the default is substituted. * * It is expected this function will be called last in the config file. * * This function installs the `built-in` plugin. It needs to be last on * the plugin chain so that its stylesheets and partials and whatnot * can be overridden by other plugins. * * @returns {Configuration} */ prepare(): this; /** * Record the configuration directory so that we can correctly interpolate * the pathnames we're provided. */ set configDir(cfgdir: string); get configDir(): string; set cacheDir(dirnm: string); get cacheDir(): string; set verbose(val: boolean); get verbose(): boolean; set perfDataDir(storeDir: string); get perfDataDir(): string; get akasha(): any; documentsCache(): Promise<filecache.DocumentsCache>; assetsCache(): Promise<filecache.AssetsCache>; layoutsCache(): Promise<filecache.LayoutsCache>; partialsCache(): Promise<filecache.PartialsCache>; /** * Add a directory to the documentDirs configuration array * @param {string | dirToMount} dir The pathname to use or dirToMount object */ addDocumentsDir(dir: string | dirToMount): this; get documentDirs(): dirToMount[]; /** * Look up the document directory information for a given document directory. * @param {string} dirname The document directory to search for */ documentDirInfo(dirname: string): dirToMount; /** * Add a directory to the layoutDirs configurtion array * @param {string | dirToMount} dir The pathname to use or dirToMount object */ addLayoutsDir(dir: string | dirToMount): this; get layoutDirs(): dirToMount[]; /** * Add a directory to the partialDirs configurtion array * @param {string | dirToMount} dir The pathname to use or dirToMount object * @returns {Configuration} */ addPartialsDir(dir: string | dirToMount): this; get partialsDirs(): dirToMount[]; /** * Add a directory to the assetDirs configurtion array * @param {string | dirToMount} dir The pathname to use or dirToMount object * @returns {Configuration} */ addAssetsDir(dir: string | dirToMount): this; get assetDirs(): dirToMount[]; /** * Add an array of Mahabhuta functions * @param {Array} mahafuncs * @returns {Configuration} */ addMahabhuta(mahafuncs: mahabhuta.MahafuncArray | mahabhuta.MahafuncType): this; get mahafuncs(): any; /** * Define the directory into which the project is rendered. * @param {string} dir The pathname to use * @returns {Configuration} */ setRenderDestination(dir: string): this; /** Fetch the declared destination for rendering the project. */ get renderDestination(): string; get renderTo(): string; /** * Add a value to the project metadata. The metadata is combined with * the document metadata and used during rendering. * @param {string} index The key to store the value. * @param value The value to store in the metadata. * @returns {Configuration} */ addMetadata(index: string, value: any): this; get metadata(): any; /** * Add tag descriptions to the database. The purpose * is for example a tag index page can give a * description at the top of the page. * * NOTE: Potential bug - This function replaces the entire #descriptions * array rather than merging with existing descriptions. If called multiple * times, earlier descriptions will be lost. Current assumption is this * function is only called once from the configuration file. A future * enhancement would be to merge descriptions instead of replacing. * * @param tagdescs */ addTagDescriptions(tagdescs: TagDescription[]): Promise<void>; /** * Document the URL for a website project. * @param {string} root_url * @returns {Configuration} */ rootURL(root_url: string): this; get root_url(): string; /** * Set how many documents to render concurrently. * @param {number} concurrency * @returns {Configuration} */ setConcurrency(concurrency: number): this; get concurrency(): number; /** * Set the time, in miliseconds, to honor * the SearchCache in the search function. * * Default is 60000 (1 minute). * * Set to 0 to disable caching. * @param timeout */ setCachingTimeout(timeout: number): void; get cachingTimeout(): number; /** * Declare JavaScript to add within the head tag of rendered pages. * @param script * @returns {Configuration} */ addHeaderJavaScript(script: javaScriptItem): this; get scripts(): { stylesheets?: stylesheetItem[]; javaScriptTop?: javaScriptItem[]; javaScriptBottom?: javaScriptItem[]; }; /** * Declare JavaScript to add at the bottom of rendered pages. * @param script * @returns {Configuration} */ addFooterJavaScript(script: javaScriptItem): this; /** * Declare a CSS Stylesheet to add within the head tag of rendered pages. * @param script * @returns {Configuration} */ addStylesheet(css: stylesheetItem): this; setMahabhutaConfig(cheerio?: cheerio.CheerioOptions): void; get mahabhutaConfig(): cheerio.CheerioOptions; /** * Copy the contents of all directories in assetDirs to the render destination. */ copyAssets(): Promise<void>; /** * Call the beforeSiteRendered function of any plugin which has that function. */ hookBeforeSiteRendered(): Promise<void>; /** * Call the onSiteRendered function of any plugin which has that function. */ hookSiteRendered(): Promise<void>; hookFileAdded(collection: string, vpinfo: VPathData): Promise<void>; hookFileChanged(collection: string, vpinfo: VPathData): Promise<void>; hookFileUnlinked(collection: string, vpinfo: VPathData): Promise<void>; hookFileCacheSetup(collectionnm: string, collection: any): Promise<void>; hookPluginCacheSetup(): Promise<void>; /** * use - go through plugins array, adding each to the plugins array in * the config file, then calling the config function of each plugin. * @param PluginObj The plugin name or object to add * @returns {Configuration} */ use(PluginObj: any, options: any): this; get plugins(): any; /** * Iterate over the installed plugins, calling the function passed in `iterator` * for each plugin, then calling the function passed in `final`. * * @param iterator The function to call for each plugin. Signature: `function(plugin, next)` The `next` parameter is a function used to indicate error -- `next(err)` -- or success -- next() * @param final The function to call after all iterator calls have been made. Signature: `function(err)` */ eachPlugin(iterator: any, final: any): void; /** * Look for a plugin, returning its module reference. * @param {string} name * @returns {Plugin} */ plugin(name: string): any; /** * Retrieve the pluginData object for the named plugin. * @param {string} name * @returns {Object} */ pluginData(name: string): any; askPluginsLegitLocalHref(href: any): boolean; registerRenderer(renderer: Renderer): void; /** * Allow an application to override one of the built-in renderers * that are initialized below. The inspiration is epubtools that * must write HTML files with an .xhtml extension. Therefore it * can subclass EJSRenderer etc with implementations that force the * file name to be .xhtml. We're not checking if the renderer name * is already there in case epubtools must use the same renderer name. */ registerOverrideRenderer(renderer: Renderer): void; findRendererName(name: string): Renderer; findRendererPath(_path: string): Renderer; get renderers(): Renderers.Configuration; /** * Find a Renderer by its extension. */ findRenderer(name: string): Renderers.Renderer; } declare const module_exports: any; export default module_exports; //# sourceMappingURL=index.d.ts.map