import type { LegacyRoot } from "svelte/compiler" import type { BaseDirective } from "svelte/types/compiler/interfaces" export type TemplateNode = LegacyRoot["html"] export type ElementNode = { start: number end: number type: "Element" attributes: (Attribute | SpreadAttribute | BaseDirective)[] } & (Name extends "svelte:element" ? { name: "svelte:element" tag: string | Expression } : { name: Name }) type Expression = { start: number end: number } type SpreadAttribute = Extract type Attribute = Extract & { value: AttributeValue[] | boolean } export type AttributeValue = | { start: number end: number type: "Text" raw: string data: string } | { start: number end: number type: "MustacheTag" expression: { start: number end: number } } | { start: number end: number type: "AttributeShorthand" expression: { start: number end: number } }