@banana020/ast-plugin-system
Version:
AST插件系统 - 支持JavaScript/TypeScript代码转换,包含十六进制转换、代码清理等功能
322 lines (321 loc) • 10.3 kB
JavaScript
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
};