UNPKG

@banana020/ast-plugin-system

Version:

AST插件系统 - 支持JavaScript/TypeScript代码转换,包含十六进制转换、代码清理等功能

322 lines (321 loc) 10.3 kB
import { d as delExtra } from "./del-extra-DOJZIMAt.js"; import { t as transCondition, c as conditionToIf, a as andToIf, b as conditionVarToIf, r as removeComma, d as removeVarComma, f as formatMember, e as clearBinaryIfDeadCode, g as calcBinary, h as addCatchLog, i as renameVar } from "./rename-var-BF8V_HJx.js"; const defaultConfig = { inputDir: "./input", outputDir: "./output", plugins: [ { name: "delExtra", description: "删除extra属性并转换十六进制值", version: "1.0.0", plugin: delExtra, // 可选:指定插件只作用于字符串字面量和数字字面量 nodeTypes: ["StringLiteral", "NumericLiteral"] }, { name: "transCondition", description: "条件表达式转换插件,将赋值语句中的条件表达式转换为条件表达式中的赋值语句", version: "1.0.0", plugin: transCondition, // 只处理条件表达式节点 nodeTypes: ["ConditionalExpression"] }, { name: "conditionToIf", description: "条件表达式转 if 语句插件,将条件表达式语句转换为 if-else 语句", version: "1.0.0", plugin: conditionToIf, // 只处理表达式语句节点 nodeTypes: ["ExpressionStatement"] }, { name: "andToIf", description: "逻辑AND表达式转 if 语句插件,将短路求值转换为明确的条件判断", version: "1.0.0", plugin: andToIf, // 只处理表达式语句节点 nodeTypes: ["ExpressionStatement"] }, { name: "conditionVarToIf", description: "变量声明中的条件表达式转 if 语句插件,将条件赋值分离为声明和条件赋值", version: "1.0.0", plugin: conditionVarToIf, // 只处理变量声明节点 nodeTypes: ["VariableDeclaration"] }, { name: "removeComma", description: "序列表达式分离插件,将逗号表达式分离为多个独立的表达式语句", version: "1.0.0", plugin: removeComma, // 只处理表达式语句节点 nodeTypes: ["ExpressionStatement"] }, { name: "removeVarComma", description: "变量声明分离插件,将多变量声明分离为多个独立的单变量声明语句", version: "1.0.0", plugin: removeVarComma, // 只处理变量声明节点 nodeTypes: ["VariableDeclaration"] }, { name: "formatMember", description: "成员表达式格式化插件,将计算属性访问转换为点属性访问", version: "1.0.0", plugin: formatMember, // 只处理成员表达式节点 nodeTypes: ["MemberExpression"] }, { name: "clearBinaryIfDeadCode", description: "清理 if 语句中的死代码,移除编译时可确定的常量条件分支", version: "1.0.0", plugin: clearBinaryIfDeadCode, // 只处理 if 语句节点 nodeTypes: ["IfStatement"] }, { name: "calcBinary", description: "二元表达式计算插件,计算编译时常量表达式的值并替换", version: "1.0.0", plugin: calcBinary, // 只处理二元表达式节点 nodeTypes: ["BinaryExpression"] }, { name: "addCatchLog", description: "catch 语句日志添加插件,在 catch 块开头自动添加 console.log 语句", version: "1.0.0", plugin: addCatchLog, // 只处理 catch 语句节点 nodeTypes: ["CatchClause"] }, { name: "renameVar", description: "变量重命名插件,将变量、函数和参数重命名为简短的标识符", version: "1.0.0", plugin: renameVar, // 处理程序根级别和函数节点 nodeTypes: ["Program", "FunctionDeclaration", "FunctionExpression", "ArrowFunctionExpression"] } ], include: ["**/*.js", "**/*.ts", "**/*.jsx", "**/*.tsx"], exclude: ["**/*.d.ts", "**/*.test.*", "**/*.spec.*"], preserveStructure: true }; const customConfigs = { // 仅处理JavaScript文件 jsOnly: { ...defaultConfig, include: ["**/*.js"] }, // 插件类型过滤示例 typeSpecific: { ...defaultConfig, plugins: [ { name: "delExtra", description: "删除extra属性并转换十六进制值", version: "1.0.0", plugin: delExtra, // 只处理字符串字面量 nodeTypes: ["StringLiteral"] }, { name: "delExtraNumbers", description: "删除数字中的extra属性", version: "1.0.0", plugin: delExtra, // 只处理数字字面量 nodeTypes: ["NumericLiteral"] } ] }, // 仅应用delExtra插件 delExtraOnly: { ...defaultConfig, plugins: [defaultConfig.plugins[0]] }, // 死代码清理配置 deadCodeCleanup: { ...defaultConfig, plugins: [ { name: "clearBinaryIfDeadCode", description: "清理 if 语句中的死代码,移除编译时可确定的常量条件分支", version: "1.0.0", plugin: clearBinaryIfDeadCode, nodeTypes: ["IfStatement"] } ] }, // 常量计算配置 constantCalculation: { ...defaultConfig, plugins: [ { name: "calcBinary", description: "二元表达式计算插件,计算编译时常量表达式的值并替换", version: "1.0.0", plugin: calcBinary, nodeTypes: ["BinaryExpression"] } ] }, // 代码优化套件(包含死代码清理和其他优化插件) codeOptimization: { ...defaultConfig, plugins: [ { name: "calcBinary", description: "二元表达式计算插件,计算编译时常量表达式的值并替换", version: "1.0.0", plugin: calcBinary, nodeTypes: ["BinaryExpression"] }, { name: "clearBinaryIfDeadCode", description: "清理 if 语句中的死代码,移除编译时可确定的常量条件分支", version: "1.0.0", plugin: clearBinaryIfDeadCode, nodeTypes: ["IfStatement"] }, { name: "removeComma", description: "序列表达式分离插件,将逗号表达式分离为多个独立的表达式语句", version: "1.0.0", plugin: removeComma, nodeTypes: ["ExpressionStatement"] }, { name: "removeVarComma", description: "变量声明分离插件,将多变量声明分离为多个独立的单变量声明语句", version: "1.0.0", plugin: removeVarComma, nodeTypes: ["VariableDeclaration"] } ] }, // 扁平化输出(不保持目录结构) flatten: { ...defaultConfig, preserveStructure: false }, // 错误处理增强配置 errorHandlingEnhancement: { ...defaultConfig, plugins: [ { name: "addCatchLog", description: "catch 语句日志添加插件,在 catch 块开头自动添加 console.log 语句", version: "1.0.0", plugin: addCatchLog, nodeTypes: ["CatchClause"] } ] }, // 变量重命名配置 variableRenaming: { ...defaultConfig, plugins: [ { name: "renameVar", description: "变量重命名插件,将所有变量、函数和参数重命名为简短标识符", version: "1.0.0", plugin: renameVar, nodeTypes: ["Program", "FunctionDeclaration", "FunctionExpression", "ArrowFunctionExpression"] } ] }, // 十六进制变量重命名配置(专用于去混淆) hexVariableRenaming: { ...defaultConfig, plugins: [ { name: "renameHexVar", description: "十六进制变量重命名插件,只重命名混淆的十六进制变量名", version: "1.0.0", plugin: renameVar, nodeTypes: ["Program", "FunctionDeclaration", "FunctionExpression", "ArrowFunctionExpression"], options: { hexadecimalOnly: true } } ] }, // 自定义前缀重命名配置 customPrefixRenaming: { ...defaultConfig, plugins: [ { name: "customRenameVar", description: "使用自定义前缀的变量重命名插件", version: "1.0.0", plugin: renameVar, nodeTypes: ["Program", "FunctionDeclaration", "FunctionExpression", "ArrowFunctionExpression"], options: { variablePrefix: "var_", functionPrefix: "func_", paramPrefix: "param_" } } ] }, // 完整代码去混淆套件 deobfuscation: { ...defaultConfig, plugins: [ { name: "calcBinary", description: "二元表达式计算插件,计算编译时常量表达式的值并替换", version: "1.0.0", plugin: calcBinary, nodeTypes: ["BinaryExpression"] }, { name: "clearBinaryIfDeadCode", description: "清理 if 语句中的死代码,移除编译时可确定的常量条件分支", version: "1.0.0", plugin: clearBinaryIfDeadCode, nodeTypes: ["IfStatement"] }, { name: "removeComma", description: "序列表达式分离插件,将逗号表达式分离为多个独立的表达式语句", version: "1.0.0", plugin: removeComma, nodeTypes: ["ExpressionStatement"] }, { name: "removeVarComma", description: "变量声明分离插件,将多变量声明分离为多个独立的单变量声明语句", version: "1.0.0", plugin: removeVarComma, nodeTypes: ["VariableDeclaration"] }, { name: "formatMember", description: "成员表达式格式化插件,将计算属性访问转换为点属性访问", version: "1.0.0", plugin: formatMember, nodeTypes: ["MemberExpression"] }, { name: "renameVar", description: "变量重命名插件,将混淆的变量名重命名为可读的标识符", version: "1.0.0", plugin: renameVar, nodeTypes: ["Program", "FunctionDeclaration", "FunctionExpression", "ArrowFunctionExpression"], options: { hexadecimalOnly: true } } ] } }; export { customConfigs, defaultConfig };