import { Expression, ClassDeclaration, FunctionExpression, ObjectExpression, BlockStatement, Program } from 'acorn'; import type { ANode } from 'san'; export interface MethodFunction extends FunctionExpression { /** * - property: defineComponent 中的方法类型 * - method: class 中的方法类型 * - prototype-method: class.prototype.method = function () {} 中的方法类型 */ _methodType: 'property' | 'method' | 'prototype-method'; } interface BaseComponentInfo { templateAst?: ANode; methods: Record; computed?: ObjectExpression; filters?: ObjectExpression; template?: Expression; /** * 是否动态组件,即无法静态分析的组件 * class A{} A.prototype[abc] = ... * defineComponent({ [abc]: function () {} }) */ isDynamic: boolean; } interface ClassComponentInfo extends BaseComponentInfo { type: 'class'; componentName: string; componentRoot: ClassDeclaration; /** 设置 blockRoot 用于移除 prototype 中的方法 */ blockRoot?: Program | BlockStatement; } interface DefineComponentInfo extends BaseComponentInfo { type: 'defineComponent'; componentName?: string; componentRoot: ObjectExpression; } export type ComponentInfo = ClassComponentInfo | DefineComponentInfo; export declare class DataTransformer { private component; /** * 组件中是否存在动态 this 访问(this[xxx], var self = this) */ private hasDymamicThis; /** * 存在 ssr 调用的 方法 * */ private calledMethods; /** computed, filters 中调用的方法 */ private computedFiltersCalledMethods; /** computed 字段名 */ private computedNames; /** 转换计数,包含转换 this.d, this.data, 移除 method 等 */ private transformedCount; constructor(component: T); private transformFunction; private transformComputed; private transformMethodCalls; private removeMethods; private cleanupDiscardedMembers; private setDynamicThisFlag; transform(): void; minifyMethods(): void; getTransformedCount(): number; } export {};