UNPKG

@mdfriday/foundry

Version:

The core engine of MDFriday. Convert Markdown and shortcodes into fully themed static sites – Hugo-style, powered by TypeScript.

84 lines (83 loc) 2.81 kB
import { MediaType } from '@pkg/media/type'; import { Fs } from '@internal/domain/fs/type'; import { Readable } from 'stream'; export interface ReadSeekCloser extends Readable { seek(offset: number, whence: number): Promise<number>; close(): Promise<void>; } export type OpenReadSeekCloser = () => Promise<ReadSeekCloser>; export interface Workspace extends ResourceFs, URLConfig, TemplateSvc { } export interface ResourceFs { assetsFs(): Fs; publishFs(): Fs; } export interface URLConfig { baseUrl(): string; } export interface TemplateSvc { executeTemplate(templateName: string, rawContent: string, data: any): Promise<string>; } export interface ResourceTransformer { transform(...transformations: ResourceTransformation[]): Promise<Resource>; } export interface ResourceTransformation { key(): ResourceTransformationKey; transform(ctx: ResourceTransformationContext): Promise<void>; } export interface ResourceTransformationKey { name: string; value(): string; } export interface ResourceTransformationContext { source: { from: NodeJS.ReadableStream; inPath: string; inMediaType: MediaType; }; target: { to: NodeJS.WritableStream; }; data: Record<string, any>; addOutPathIdentifier(identifier: string): void; updateBuffer(): void; updateSource(): void; close(): void; } export interface Resources { getResource(pathname: string): Promise<Resource | null>; getResourceWithOpener(pathname: string, opener: OpenReadSeekCloser): Promise<Resource | null>; executeAsTemplate(resource: Resource, targetPath: string, data: any): Promise<Resource>; minify(resource: Resource): Promise<Resource>; fingerprint(resource: Resource): Promise<Resource>; getMinifierClient(): MinifierClient; getIntegrityClient(): IntegrityClient; setTemplateClient(client: TemplateClient): void; } export interface Resource extends ResourceTransformer { name(): string; readSeekCloser(): Promise<ReadSeekCloser>; targetPath(): string; content(ctx?: any): Promise<any>; data(): any; resourceType(): string; mediaType(): MediaType; cloneTo(targetPath: string): Resource; key(): string; permalink(): string; relPermalink(): string; } export interface ResourceCopier { cloneTo(targetPath: string): Resource; } export interface MinifierClient { minify(resource: Resource): Promise<Resource>; getMinifier(mediaType: string): ((content: string) => Promise<string>) | null; } export interface IntegrityClient { fingerprint(resource: Resource): Promise<Resource>; generateIntegrity(content: string): string; } export interface TemplateClient { executeAsTemplate(resource: Resource, targetPath: string, data: any): Promise<Resource>; }