marko
Version:
Optimized runtime for Marko templates.
48 lines (47 loc) • 1.42 kB
TypeScript
import type { $Global, Template } from "../common/types";
import { type ServerRenderer } from "./template";
declare const kAssets: unique symbol;
declare const kBlockIndex: unique symbol;
declare const kDeferIndex: unique symbol;
export interface VisibleTrigger {
type: "visible";
selector: string;
options?: {
rootMargin?: string;
};
}
export interface IdleTrigger {
type: "idle";
selector?: never;
options?: {
timeout?: number;
};
}
export interface MediaTrigger {
type: "media";
selector: string;
options?: never;
}
export interface EventTrigger {
type: `on-${string}`;
selector: string;
options?: never;
}
export type LoadTrigger = VisibleTrigger | IdleTrigger | MediaTrigger | EventTrigger;
type Trigger = LoadTrigger;
interface Asset {
id: string;
triggers?: Trigger[];
}
declare module "../common/types" {
interface $Global {
[kAssets]?: Asset[];
[kBlockIndex]?: number;
[kDeferIndex]?: number;
}
}
type AssetFlush = (g: $Global, type: "block" | "defer", asset: string) => string;
export declare function withLoadAssets(renderer: ServerRenderer, assetId: string, triggers?: Trigger[]): ServerRenderer;
export declare function withPageAssets(template: ServerRenderer & Template, runtime: AssetFlush, assetId: string, runtimeId?: string): Template;
export declare function _flush_head(): string;
export {};