import * as ts from 'typescript'; import { AstChange } from './ast-utils'; export interface TemplateAttr { /** Nome exato, ex.: `[scale]`, `(onCodeChange)`, `sBignumberInput`. */ name: string; /** Início do nome. */ nameStart: number; nameEnd: number; /** Intervalo do atributo inteiro (nome + valor). */ start: number; end: number; /** Valor sem aspas, quando existe. */ value?: string; /** Aspas usadas no valor (`"` ou `'`), quando existe valor com aspas. */ quote?: string; } export interface TemplateTag { name: string; start: number; end: number; attrs: TemplateAttr[]; } export interface TemplateManual { /** Posição no texto original do template. */ index: number; message: string; } /** * Varre as tags de abertura de um template, respeitando aspas nos valores (um `>` dentro de `"..."` não encerra a tag) * e ignorando comentários HTML. Só olha tags de abertura; é um scanner leve, não um parser completo. */ export declare function scanOpenTags(text: string): TemplateTag[]; /** Remove o atributo junto com o espaço que vem antes dele. */ export declare function buildRemoveAttrEdit(text: string, attr: TemplateAttr): AstChange; export interface InlineTemplateSegment { /** Início do conteúdo (depois da crase/aspas). */ start: number; end: number; /** `true` quando o literal é crase: aspas simples dentro do template não quebram o TypeScript. */ isBacktick: boolean; } /** Acha os literais usados como `template:` em arquivos TypeScript (componentes, stories, specs). */ export declare function findInlineTemplateSegments(sourceFile: ts.SourceFile): InlineTemplateSegment[]; export interface TemplateTransformResult { updated: string; manual: TemplateManual[]; } export type TemplateTransform = (text: string, options: { quotesSafe: boolean; }) => TemplateTransformResult; export interface FileTransformResult { updated: string; manual: Array<{ line: number; message: string; }>; } /** * Aplica `transform` ao conteúdo de um `.html` ou aos `template:` inline de um `.ts`. * Os avisos voltam com a linha do arquivo original. */ export declare function transformTemplates(path: string, content: string, transform: TemplateTransform): FileTransformResult;