import { types as t } from "@marko/compiler"; import { type AccessorPrefix, AccessorProp } from "../../common/types"; import { type Opt } from "./optional"; import { type Binding, type Getter, type ReferencedBindings } from "./references"; import { type Section } from "./sections"; export interface Signal { identifier: t.Identifier; referencedBindings: ReferencedBindings; section: Section; build: undefined | (() => t.Expression | undefined); register?: boolean; values: Array<{ signal: Signal; value: t.Expression; }>; intersection: Opt; render: t.Statement[]; renderReferencedBindings: ReferencedBindings; effect: t.Statement[]; effectReferencedBindings: ReferencedBindings; hasDynamicSubscribers: boolean; hasSideEffect: boolean; export: boolean; extraArgs: t.Expression[] | undefined; prependStatements: t.Statement[] | undefined; buildAssignment: ((valueSection: Section, value: t.Expression) => t.Expression | undefined) | undefined; } type closureSignalBuilder = (closure: Binding, render: t.Expression) => t.Expression; export declare function setClosureSignalBuilder(tag: t.NodePath, builder: closureSignalBuilder): void; export declare const getTryHasPlaceholder: (section: Section) => true | undefined, setTryHasPlaceholder: (section: Section, value: true | undefined) => void; export declare function setSectionSerializedValue(section: Section, prop: AccessorProp, expression: t.Expression): void; export declare function setBindingSerializedValue(section: Section, binding: Binding, expression: t.Expression, prefix?: AccessorPrefix): void; export declare function setSerializedValue(section: Section, key: string, expression: t.Expression): void; export declare function addWriteScopeBuilder(section: Section, builder: (writeCall: t.Expression) => t.Expression): void; export declare const getHTMLSectionStatements: (section: Section) => t.Statement[]; export declare function getBindingGetterIdentifier(binding: Binding, getterSection: Getter["hoisted"]): t.Identifier; export declare function getSignal(section: Section, referencedBindings: ReferencedBindings, name?: string): Signal; export declare function initValue(binding: Binding, isLet?: boolean): Signal; export declare function signalHasStatements(signal: Signal): boolean; export declare function getSignalFn(signal: Signal): t.Expression; export declare function getSignalValueIdentifier(signal: Signal): t.Identifier; export declare function replaceNullishAndEmptyFunctionsWith0(args: (t.Expression | undefined | false)[]): t.Expression[]; export declare function addStatement(type: "render" | "effect", targetSection: Section, referencedBindings: ReferencedBindings, statement: t.Statement | t.Statement[], usedReferences?: ReferencedBindings[] | false, isPure?: boolean): void; export declare function addValue(targetSection: Section, referencedBindings: ReferencedBindings, signal: Signal, value: t.Expression): void; export declare function getResumeRegisterId(section: Section, referencedBindings: string | ReferencedBindings, type?: string): string; export declare function writeSignals(section: Section): Set; export declare function writeRegisteredFns(): void; export declare function addHTMLEffectCall(section: Section, referencedBindings?: ReferencedBindings): void; export declare function writeHTMLResumeStatements(path: t.NodePath): void; export declare function getSetup(section: Section): Signal | undefined; export declare function replaceRegisteredFunctionNode(node: t.Node): t.CallExpression | t.ClassPrivateProperty | t.ClassProperty | t.Identifier | t.ObjectProperty | t.VariableDeclaration | undefined; export {};