import { Stream } from '../data/Stream'; import { TaskDescription } from '../task'; import { DefaultDeploymentValue } from '../source/DefaultDeploymentValue'; import { LayoutVisual } from '../layout/Visual'; import { Module, ModulePath } from './Module'; /** * The {@link Template} describing an end-to-end solution. * * @category Template */ export type Template = { /** the collection of {@link Stream}s in the solution */ streams?: Record | undefined; /** the collection of {@link DefaultDeploymentValue}s in the solution */ defaults?: Record | undefined; /** the collection of {@link TaskDescription}s in the solution */ tasks?: Record | undefined; /** the collection of {@link LayoutVisual}s in the solution */ layouts?: Record | undefined; /** the collection of {@link Module}s in the solution */ modules?: Record | undefined; }; /** @internal */ export declare abstract class Builder { protected name: string; protected module: ModulePath; constructor(name: string, module: ModulePath); abstract toTemplate(): Template; toStreams(): Stream[]; toTasks(): TaskDescription[]; } /** * Merge multiple {@link Template} or {@link Builder} objects together. * * @param inputs the {@link Template} or {@link Builder} objects to merge * @returns a merged {@link Template} * * @category Template * * @example * ```typescript * const clock = new SourceBuilder("Hourly") * .clock({ cron: "0 * * * *" }) * * const pipeline = new PipelineBuilder("BasicAuth") * .from(clock.outputStream()) * .transform((value) => StringJoin`The value is ${value}`) * * // create a resulting template * const template = Template( * clock, * pipeline, * ) * ``` */ export declare function Template(...inputs: (Template | Builder)[]): Template; /** * Check that a template is a valid DAG. * * @param template the {@link Template} or {@link Builder} objects to merge * * @category Template * */ export declare function checkTemplate(template: Template): void; export type TemplateUpdate = { insertions: Template; deletions: Template; }; /** * Calculate the difference between two templates. * * @param first the {@link Template} to difference * @param second the {@link Template} to difference * @returns a {@link TemplateUpdate} * * @category Template * */ export declare function TemplateDifference(first: Template, second: Template): TemplateUpdate; /** * Apply a difference to a Template. * * @param template the {@link Template} to apply the difference to * @param update the {@link Template} difference * @returns a updated {@link Template} * * @category Template * */ export declare function applyTemplateUpdate(template: Template, update: TemplateUpdate): Template; export declare function templateLinks(template: Template): { source_links: Map>; task_inputs: Map>; task_outputs: Map>; };