/** * JavaScript 语法树的工具 * * AST Spec: ESTree Spec: https://github.com/estree/estree * Implementation: acorn * * 方便读取和操作 ESTree 结构,本文件里提供的功能和实现逻辑是和具体 SSR 逻辑无关的,只和 ESTree 有关。 */ import { Node, MethodDefinition, ExportDefaultDeclaration, ImportDeclaration, Property, BinaryExpression, ClassExpression, ClassDeclaration, ThisExpression, ExpressionStatement, TemplateLiteral, Literal, Identifier, MemberExpression, ArrayExpression, CallExpression, ObjectExpression, Program, Pattern, VariableDeclaration, ObjectPattern, Class, AssignmentExpression, Expression, ImportSpecifier, ImportDefaultSpecifier, VariableDeclarator } from 'acorn'; export declare function filterByType(node: Node, type: 'VariableDeclaration'): VariableDeclaration[]; export declare function filterByType(node: Node, type: 'ImportDeclaration'): ImportDeclaration[]; export declare function filterByType(node: Node, type: 'MemberExpression'): MemberExpression[]; export declare function getRequireSpecifier(node: CallExpression): string; export declare function isRequireSpecifier(node: Expression, spec: string[]): boolean; export declare function isModuleExports(node: Node): boolean; export declare function isExportsMemberExpression(expr: Pattern): boolean; /** * 找到 node 下面所有的 require 语句 * * 通过迭代器返回每一个 require 的 localName、moduleName、exportName。 * 例如:let foo = require('bar').coo,会 yield ["foo", "bar", "coo"] */ export declare function findScriptRequires(node: Node): Generator<[string, string, string, VariableDeclaration]>; /** * 找到 root 下所有的 import 语句 * * 通过迭代器返回每一个 require 的 localName、moduleName、exportName。 * 例如:import { coo as foo } from 'bar',会 yield ["foo", "bar", "coo"] */ export declare function findESMImports(root: Node): Generator<[string, string, string, ImportDeclaration]>; /** * 找到每个 localName 对应的 exportName。 */ export declare function findExportNames(root: Program): [string, string][]; /** * 获得字符串数组节点的值 */ export declare function getStringArrayValue(expr: Node): any[]; /** * 从 Class 节点,获得它的所有属性的 key(字符串)和 value(AST 节点) */ export declare function getMembersFromClassDeclaration(expr: Class): Generator<[string, Node]>; export declare function getConstructor(expr: Class): undefined | MethodDefinition; /** * 给字面量的对象,添加一个字符串类型的属性 */ export declare function addStringPropertyForObject(expr: ObjectExpression, key: string, value: string): void; export declare function getPropertyFromObject(obj: ObjectExpression | ObjectPattern, propertyName: string): Node | undefined; export declare function getPropertiesFromObject(obj: ObjectExpression | ObjectPattern): Generator<[string, Node]>; export declare function isClass(node: Node): node is Class; export declare function getClassName(node: Node): string; export declare function getStringValue(node: Expression): any; /** * 获取一个字面量表达式节点的值 */ export declare function getLiteralValue(node: Node | null): any; /** * 获取整个程序里,对 objName 的属性的所有赋值 */ export declare function getMemberAssignmentsTo(program: Program, objName: string): [string, Node][]; export declare function location(node: Node): string; /** * 获取一个源码文件的默认导出,有两种形式: * 1. module.exports = foo * 2. export foo */ export declare function findDefaultExport(node: Program): undefined | Node; export declare function isProgram(node: Node): node is Program; export declare function isRequire(node: Node): node is CallExpression; export declare function isMemberExpression(expr: Node): expr is MemberExpression; export declare function isBinaryExpression(expr: Node): expr is BinaryExpression; export declare function isIdentifier(expr: Node): expr is Identifier; export declare function isTemplateLiteral(expr: Node): expr is TemplateLiteral; export declare function isLiteral(expr: Node): expr is Literal; export declare function isVariableDeclaration(expr: Node): expr is VariableDeclaration; export declare function isVariableDeclarator(expr: Node): expr is VariableDeclarator; export declare function isCallExpression(expr: Node): expr is CallExpression; export declare function isObjectPattern(expr: Node): expr is ObjectPattern; export declare function isObjectExpression(expr: Node): expr is ObjectExpression; export declare function isImportDefaultSpecifier(expr: Node): expr is ImportDefaultSpecifier; export declare function isImportSpecifier(expr: Node): expr is ImportSpecifier; export declare function isExpressionStatement(expr: Node): expr is ExpressionStatement; export declare function isAssignmentExpression(expr: Node): expr is AssignmentExpression; export declare function isThisExpression(expr: Node): expr is ThisExpression; export declare function isClassDeclaration(expr: Node): expr is ClassDeclaration; export declare function isClassExpression(expr: Node): expr is ClassExpression; export declare function isProperty(expr: Node): expr is Property; export declare function isExportDefaultDeclaration(node: Node): node is ExportDefaultDeclaration; export declare function isArrayExpression(expr: Node): expr is ArrayExpression; export declare function assertProperty(expr: Node): asserts expr is Property; export declare function assertLiteral(expr: Node): asserts expr is Literal; export declare function assertIdentifier(expr: Node): asserts expr is Identifier; export declare function assertArrayExpression(expr: Node): asserts expr is ArrayExpression; export declare function assertObjectExpression(expr: Node): asserts expr is ObjectExpression; export declare function assertVariableDeclarator(expr: Node): asserts expr is VariableDeclarator; export declare function deleteMembersFromClassDeclaration(expr: Class, name: string): void; export declare function deletePropertiesFromObject(obj: ObjectExpression | ObjectPattern, name: string): void; export declare function deleteMemberAssignmentsTo(program: Program, objName: string, name: string): void;