/**
* Result of the markup transform pass.
*
* @example
* ```ts
* const result: MarkupTransformResult = {
* code: "
{__SER___value}
",
* has_yield: true,
* };
* ```
*
* @since 2.0.0
*/
export interface MarkupTransformResult {
/** The transformed source code. */
code: string;
/** Whether any yield* expressions were found and lowered. */
has_yield: boolean;
/** Source map from transformed markup back to the original component. */
map?: Record;
/** Offset ranges that preserve hoverable source spans inside lowered code. */
relocations?: MarkupRelocation[];
}
/**
* Runtime environment that controls how markup effect reads are lowered.
*
* @example
* ```ts
* const target: MarkupTransformTarget = "client";
* ```
*
* @since 2.5.0
*/
export type MarkupTransformTarget = "client" | "server" | "editor";
/**
* Options accepted by the markup transform.
*
* @example
* ```ts
* const options: MarkupTransformOptions = { target: "server" };
* ```
*
* @since 2.5.0
*/
export interface MarkupTransformOptions {
/** Legacy emission target retained for compatibility with older callers. */
target?: MarkupTransformTarget;
}
export interface MarkupRelocation {
/** Start offset in the original source. */
originalStart: number;
/** End offset in the original source. */
originalEnd: number;
/** Start offset in the transformed source. */
generatedStart: number;
/** End offset in the transformed source. */
generatedEnd: number;
}
export interface MarkupCandidate {
/** The placeholder identifier injected into the sanitized markup. */
placeholder: string;
/** Start offset of the expression in the original source. */
start: number;
/** End offset of the expression in the original source. */
end: number;
/** The expression text (without surrounding braces). */
expr_text: string;
/** Source filename used to keep generated cache ids component-scoped. */
filename: string;
/** Whether this expression is a key context (each/promise/render key). */
key: TagKind;
}
export type TagKind = "plain" | "each" | "await" | "event" | "html" | "render" | "render_argument";
export interface Replacement {
start: number;
end: number;
text: string;
helpers?: HelperDeclaration[];
relocation?: PendingRelocation;
}
export interface HelperDeclaration {
text: string;
relocation?: PendingRelocation;
}
export interface PendingRelocation {
originalStart: number;
originalEnd: number;
generatedStartInReplacement: number;
generatedEndInReplacement: number;
}
export interface Insertion {
start: number;
text: string;
/** Additional insertions applied elsewhere in the file that shift offsets. */
extra_insertions?: readonly {
start: number;
text: string;
}[];
relocations?: PendingRelocation[];
}
export interface MarkupHelperBindings {
codes: string;
dispatcher: string;
yieldable: string;
/** The component scope binding shared with the script transform. */
scope: string;
}
/**
* Reserved names for the scope holder the markup transform injects when no
* `