import * as t from '@babel/types'; import { NodePath } from '@babel/traverse'; import { JSXNode } from './types'; /** * 从 JSXElement 中取出 Host Component 的名称 * 必须已经确定是 JSXElement 属于 Host Component * 可以通过 isHostComponent 判断 */ export declare function getHostComponentName(node: t.JSXElement, path: NodePath): any; /** * 判断 JSXElement 是否是 Host Component */ export declare function isHostComponentElement(node: t.JSXElement | t.JSXFragment, path: NodePath): boolean; /** * 判断是否是 expression block */ export declare function isExpressionBlock(path: any): boolean; /** * 判断是否是 或 <> */ export declare function isReactFragment(node: t.JSXElement | t.JSXFragment, path: NodePath): boolean; /** * 通过名称查找属性 * * @export * @param {string} name * @param {t.JSXOpeningElement['attributes']} attributes * @returns */ export declare function getAttributeByName(name: string, attributes: t.JSXOpeningElement['attributes']): t.JSXAttribute | t.JSXSpreadAttribute | undefined; /** * 从 attributes 中获取 leaf 属性 * * @export * @param {t.JSXOpeningElement} element * @returns */ export declare function getLeafAttribute(element: t.JSXOpeningElement): t.JSXAttribute | undefined; /** * 从 attributes 中获取 template id * * @export * @param {t.JSXOpeningElement} element * @returns */ export declare function getTemplateID(element: t.JSXOpeningElement): any; /** * 判断是否是 Leaf 节点 * 组件标记了 leaf 属性时,说明其子节点是单节点 * 目前只有 plain text 文本情况 */ export declare function isPlainTextLeaf(node: t.Node, path: NodePath): false | t.JSXAttribute | undefined; /** * 用标签包裹当前 node */ export declare function wrappedByElement(name: string, node: JSXNode, path: NodePath): void; /** * 用 标签包裹,用于处理无法静态化的标签和表达式 * */ export declare function wrappedByExpressionBlock(node: JSXNode, path: NodePath): void; /** * 将标签替换成 JSXFragment */ export declare function replacedWithJSXFragment(node: t.JSXElement, path: NodePath): void; /** * 将标签替换为 */ export declare function replacedWithStubBlock(path: NodePath): void; /** * 判断是否是空的 JSXText * 空的含义是,只包含空格,换行符,空字符串的 JSXText * * @export * @param node * @returns */ export declare function isEmptyText(node: JSXNode): boolean; /** * 格式化 literal * 由于在 JSX 中,任何换行都会被处理成 JSXText 的内容,因此需要对 JSXText 的内容做格式化 * 如: * * text1 * text2 * * 在上例中, * case A: 由开标签 到第二行的 'text1' 前的这部分换行+空格组成的字符串需要剔除 * case B: 由第二行 'text1' 结尾到第三行的 'text2'前的这部分换行+空格组成的字符串需要处理成一个空格 ' ' * case C: 由第三行 'text2' 结尾到第四行的闭标签 前的这部分换行+空格组成的字符串需要剔除 * * @export * @param {string} literal * @returns */ export declare function normalizeLiteral(literal: string): string;