ecto
Version:
Modern Template Consolidation Engine for EJS, Markdown, Pug, Nunjucks, Liquid, and Handlebars
267 lines (256 loc) • 9.91 kB
TypeScript
declare class EngineMap {
private readonly _mappings;
set(name: string, extensions: string[]): void;
delete(name: string): void;
deleteExtension(name: string, extension: string): void;
get(name: string): string[] | undefined;
getName(extension: string): string | undefined;
}
declare class BaseEngine {
names: string[];
opts?: any;
engine: any;
rootTemplatePath?: string;
private __extensions;
getExtensions(): string[];
setExtensions(extensions: string[]): void;
deleteExtension(name: string): void;
}
type EngineInterface = {
names: string[];
engine: any;
opts?: any;
rootTemplatePath?: string;
render(source: string, data?: Record<string, unknown>): Promise<string>;
renderSync(source: string, data?: Record<string, unknown>): string;
};
declare class Markdown extends BaseEngine implements EngineInterface {
constructor(options?: any);
render(source: string, data?: Record<string, unknown>): Promise<string>;
renderSync(source: string, data?: Record<string, unknown>): string;
}
declare class Handlebars extends BaseEngine implements EngineInterface {
partialsPath: string[];
constructor(options?: Record<string, unknown>);
render(source: string, data?: Record<string, unknown>): Promise<string>;
renderSync(source: string, data?: Record<string, unknown>): string;
initPartials(): void;
registerPartials(partialsPath: string): boolean;
}
declare class EJS extends BaseEngine implements EngineInterface {
constructor(options?: Record<string, unknown>);
render(source: string, data?: Record<string, unknown>): Promise<string>;
renderSync(source: string, data?: Record<string, unknown>): string;
}
declare class Pug extends BaseEngine implements EngineInterface {
constructor(options?: Record<string, unknown>);
render(source: string, data?: Record<string, unknown>): Promise<string>;
renderSync(source: string, data?: Record<string, unknown>): string;
}
declare class Nunjucks extends BaseEngine implements EngineInterface {
constructor(options?: Record<string, unknown>);
render(source: string, data?: Record<string, unknown>): Promise<string>;
renderSync(source: string, data?: Record<string, unknown>): string;
}
declare class Liquid extends BaseEngine implements EngineInterface {
constructor(options?: Record<string, unknown>);
render(source: string, data?: Record<string, unknown>): Promise<string>;
renderSync(source: string, data?: Record<string, unknown>): string;
}
type EctoOptions = {
/**
* The default engine to use. This can be 'ejs', 'markdown', 'pug', 'nunjucks', 'handlebars', 'liquid'
* @default 'ejs'
* @type {string}
*/
defaultEngine?: string;
/**
* The engine options to pass to each engine
* @type {Record<string, Record<string, unknown>>}
* @default {}
* @example
* {
* nunjucks: {
* autoescape: true
* },
* markdown: {
* html: true
* }
* }
*/
engineOptions?: Record<string, Record<string, unknown>>;
};
declare class Ecto {
private readonly __mapping;
private readonly __engines;
private __defaultEngine;
private readonly __ejs;
private readonly __markdown;
private readonly __pug;
private readonly __nunjucks;
private readonly __handlebars;
private readonly __liquid;
constructor(options?: EctoOptions);
/**
* Get the default engine
* @returns {string} - the engine name such as 'ejs', 'markdown', 'pug', 'nunjucks', 'handlebars', 'liquid'
*/
get defaultEngine(): string;
/**
* Set the default engine
* @param {string} value the engine name such as 'ejs', 'markdown', 'pug', 'nunjucks', 'handlebars', 'liquid'
*/
set defaultEngine(value: string);
/**
* Get the Engine Mappings. This is used to map file extensions to engines
* @returns {EngineMap}
*/
get mappings(): EngineMap;
/**
* Get the EJS Engine
* @returns {EJS}
*/
get ejs(): EJS;
/**
* Get the Markdown Engine
* @returns {Markdown}
*/
get markdown(): Markdown;
/**
* Get the Pug Engine
* @returns {Pug}
*/
get pug(): Pug;
/**
* Get the Nunjucks Engine
* @returns {Nunjucks}
*/
get nunjucks(): Nunjucks;
/**
* Get the Handlebars Engine
* @returns {Handlebars}
*/
get handlebars(): Handlebars;
/**
* Get the Liquid Engine
* @returns {Liquid}
*/
get liquid(): Liquid;
/**
* Async render the source with the data
* @param {string} source - The source to render
* @param {Record<string, unknown} data - data to render with the source
* @param {string} [engineName] - The engine to use for rendering
* @param {string} [rootTemplatePath] - The root path to the template if using includes / partials
* @param {string} [filePathOutput] - The file path to write the output
* @returns {Promise<string>}
*/
render(source: string, data?: Record<string, unknown>, engineName?: string, rootTemplatePath?: string, filePathOutput?: string): Promise<string>;
/**
* Synchronously render the source with the data
* @param {string} source - The source to render
* @param {Record<string, unknown} data - data to render with the source
* @param {string} [engineName] - The engine to use for rendering
* @param {string} [rootTemplatePath] - The root path to the template if using includes / partials
* @param {string} [filePathOutput] - The file path to write the output
* @returns {string}
*/
renderSync(source: string, data?: Record<string, unknown>, engineName?: string, rootTemplatePath?: string, filePathOutput?: string): string;
/**
* Render from a file path
* @param {string} filePath - The file path to the source
* @param {Record<string, unknown>} data - The data to render with the source
* @param {string} [rootTemplatePath] - The root path to the template if using includes / partials
* @param {string} [filePathOutput] - The file path to write the output
* @param {string} [engineName] - The engine to use for rendering
* @returns
*/
renderFromFile(filePath: string, data?: Record<string, unknown>, rootTemplatePath?: string, filePathOutput?: string, engineName?: string): Promise<string>;
/**
* Sync render from a file path
* @param {string} filePath - The file path to the source
* @param {Record<string, unknown>} data - The data to render with the source
* @param {string} [rootTemplatePath] - The root path to the template if using includes / partials
* @param {string} [filePathOutput] - The file path to write the output
* @param {string} [engineName] - The engine to use for rendering
* @returns {string}
*/
renderFromFileSync(filePath: string, data?: Record<string, unknown>, rootTemplatePath?: string, filePathOutput?: string, engineName?: string): string;
/**
* Ensure the file path exists or create it
* @param {string} path
* @returns {Promise<void>}
*/
ensureFilePath(path: string): Promise<void>;
/**
* Ensure the file path exists or create it synchronously
* @param {string} path
* @returns {void}
*/
ensureFilePathSync(path: string): void;
/**
* Get the Engine By File Path
* @param {string} filePath
* @returns {string} - will return the engine name such as 'ejs', 'markdown', 'pug', 'nunjucks', 'handlebars', 'liquid'
*/
getEngineByFilePath(filePath: string): string;
/**
* Find the template without the extension. This will look in a directory for a file that starts with the template name
* @param {string} path - the path to look for the template file
* @param {string} templateName
* @returns {Promise<string>} - the path to the template file
*/
findTemplateWithoutExtension(path: string, templateName: string): Promise<string>;
/**
* Syncronously find the template without the extension. This will look in a directory for a file that starts with the template name
* @param {string} path - the path to look for the template file
* @param {string} templateName
* @returns {string} - the path to the template file
*/
findTemplateWithoutExtensionSync(path: string, templateName: string): string;
/**
* Is it a valid engine that is registered in ecto
* @param engineName
* @returns {boolean}
*/
isValidEngine(engineName?: string): boolean;
/**
* Register the engine mappings
* @returns {void}
*/
registerEngineMappings(): void;
/**
* Get Render Engine by the engine name. Default is EJS
* @param {string} engineName
* @returns {EngineInterface}
*/
getRenderEngine(engineName: string): EngineInterface;
/**
* Checks if the source has front matter
* @param {string} source
* @returns {boolean}
*/
hasFrontMatter(source: string): boolean;
/**
* Get the Front Matter from the source
* @param {string} source
* @returns {Record<string, unknown>}
*/
getFrontMatter(source: string): Record<string, unknown>;
/**
* Will set the front matter in the source and return the source
* @param {string} source - The source to set the front matter
* @param {Record<string, unknown>} data - The front matter data
* @returns {string} - The source with the front matter
*/
setFrontMatter(source: string, data: Record<string, unknown>): string;
/**
* Remove the Front Matter from the source
* @param {string} source
* @returns {string}
*/
removeFrontMatter(source: string): string;
private writeFile;
private writeFileSync;
}
export { Ecto, type EctoOptions };