import { CallExpression, Program, Class, ObjectExpression } from 'acorn'; import { JSComponentInfo } from '../models/component-info'; import { JSSanSourceFile } from '../models/san-source-file'; import { strongParseSanSourceFileOptions } from '../compilers/renderer-options'; /** * 组件定义可能的 node 类型 */ export type ComponentDefinition = CallExpression | Class | ObjectExpression; /** * 子组件(components 属性中)可能的 node 类型 */ export type ChildComponentDefinition = ObjectExpression; /** * 把包含 San 组件定义的 JavaScript 源码,通过静态分析(AST),得到组件信息。 */ export declare class JavaScriptSanParser { private readonly filePath; root: Program; componentInfos: JSComponentInfo[]; entryComponentInfo?: JSComponentInfo; private defineTemplateComponentIdentifier; private defaultExport?; private imports; private exports; private componentIDs; private defaultPlaceholderComponent?; private id; private sanReferenceInfo; constructor(filePath: string, options: strongParseSanSourceFileOptions, fileContent?: string, sourceType?: 'module' | 'script'); parse(): JSSanSourceFile; parseComponents(): [JSComponentInfo[], JSComponentInfo | undefined]; wireChildComponents(): void; private deleteChildComponentRequires; private createChildComponentReference; private parseComponentFromNode; /** * 解析文件中出现的名字:找到重要的类名、方法名以及它们的来源 */ parseNames(): void; parseImportedNames(): Generator<[string, string, string]>; createComponent(node: ComponentDefinition, name?: string, isDefault?: boolean): JSComponentInfo; private getOrCreateDefaultLoaderComponent; private deletePropertiesFromComponentDecalration; private getPropertiesFromComponentDeclaration; private isComponent; private getComponentType; private isDefineComponentCall; private isCreateComponentLoaderCall; private isComponentClass; private isImportedFromSanWithName; private isImportedFrom; private stringify; }