react-native-decompiler
Version:
react native decompile apk and ipa(soon)
87 lines • 10.7 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const types_1 = require("@babel/types");
const plugin_1 = require("../../plugin");
class ArrayDestructureEvaluator extends plugin_1.Plugin {
constructor(args, module, moduleList) {
super(args, module, moduleList);
this.pass = 2;
this.variableDeclarators = [];
const destructureDependency = moduleList.find((mod) => (mod === null || mod === void 0 ? void 0 : mod.moduleName) === '@babel/runtime/helpers/slicedToArray');
this.destructureUsed = (destructureDependency === null || destructureDependency === void 0 ? void 0 : destructureDependency.moduleId) != null && module.dependencies.includes(destructureDependency === null || destructureDependency === void 0 ? void 0 : destructureDependency.moduleId);
}
getVisitor() {
if (!this.destructureUsed)
return {};
return {
VariableDeclarator: (path) => {
var _a, _b, _c, _d, _e, _f;
if (!types_1.isIdentifier(path.node.id) || path.node.id.start == null)
return;
const variableDeclaratorData = {
path,
couldBeDestructure: false,
couldBeArrayAccess: false,
varName: path.node.id.name,
varStart: path.node.id.start,
};
if (types_1.isCallExpression(path.node.init) && types_1.isIdentifier(path.node.init.callee)
&& path.node.init.arguments.length === 2 && types_1.isIdentifier(path.node.init.arguments[0]) && types_1.isNumericLiteral(path.node.init.arguments[1])) {
variableDeclaratorData.couldBeDestructure = true;
variableDeclaratorData.destructureBindingStart = (_b = (_a = path.scope.getBindingIdentifier(path.node.init.callee.name)) === null || _a === void 0 ? void 0 : _a.start) !== null && _b !== void 0 ? _b : undefined;
variableDeclaratorData.destructureArrayBindingStart = (_d = (_c = path.scope.getBindingIdentifier(path.node.init.arguments[0].name)) === null || _c === void 0 ? void 0 : _c.start) !== null && _d !== void 0 ? _d : undefined;
}
if (types_1.isMemberExpression(path.node.init) && types_1.isIdentifier(path.node.init.object) && types_1.isNumericLiteral(path.node.init.property)) {
variableDeclaratorData.couldBeArrayAccess = true;
variableDeclaratorData.arrayAccessBindingStart = (_f = (_e = path.scope.getBindingIdentifier(path.node.init.object.name)) === null || _e === void 0 ? void 0 : _e.start) !== null && _f !== void 0 ? _f : undefined;
variableDeclaratorData.arrayAccessVal = path.node.init.property.value;
}
this.variableDeclarators.push(variableDeclaratorData);
const callExpression = path.get('init');
if (!callExpression.isCallExpression())
return;
const moduleDependency = this.getModuleDependency(callExpression);
if ((moduleDependency === null || moduleDependency === void 0 ? void 0 : moduleDependency.moduleName) === '@babel/runtime/helpers/slicedToArray') {
this.destructureFunction = path;
this.destructureFunctionStart = path.node.id.start;
}
},
};
}
afterPass() {
if (this.destructureFunctionStart == null)
return;
this.variableDeclarators.forEach((data) => {
var _a, _b;
if (!data.couldBeDestructure)
return;
if (data.destructureBindingStart !== this.destructureFunctionStart)
return;
const sourceArray = this.variableDeclarators.find((srcData) => srcData.varStart === data.destructureArrayBindingStart);
const arrayUsages = this.variableDeclarators.filter((arrData) => arrData.arrayAccessBindingStart === data.varStart);
if (!sourceArray || !arrayUsages.length)
return;
const arrayPatternElements = [];
arrayUsages.forEach((usage) => {
if (usage.arrayAccessVal == null)
throw new Error();
arrayPatternElements[usage.arrayAccessVal] = types_1.identifier(usage.varName);
});
for (let i = 0; i < arrayPatternElements.length; i += 1) {
if (arrayPatternElements[i] === undefined) {
arrayPatternElements[i] = null;
}
}
sourceArray.path.node.id = types_1.arrayPattern(arrayPatternElements);
if (!((_a = this.destructureFunction) === null || _a === void 0 ? void 0 : _a.removed)) {
(_b = this.destructureFunction) === null || _b === void 0 ? void 0 : _b.remove();
}
if (!data.path.removed) {
data.path.remove();
}
arrayUsages.forEach((usageData) => (usageData.path.removed ? null : usageData.path.remove()));
});
}
}
exports.default = ArrayDestructureEvaluator;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXlEZXN0cnVjdHVyZUV2YWx1YXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kZWNvbXBpbGVycy9ldmFsdWF0b3JzL2FycmF5RGVzdHJ1Y3R1cmVFdmFsdWF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFnQkEsd0NBU3NCO0FBQ3RCLHlDQUFzQztBQW1CdEMsTUFBcUIseUJBQTBCLFNBQVEsZUFBTTtJQVEzRCxZQUFZLElBQWEsRUFBRSxNQUFjLEVBQUUsVUFBb0I7UUFDN0QsS0FBSyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFSekIsU0FBSSxHQUFHLENBQUMsQ0FBQztRQUdELHdCQUFtQixHQUE2QixFQUFFLENBQUM7UUFPbEUsTUFBTSxxQkFBcUIsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFBLEdBQUcsYUFBSCxHQUFHLHVCQUFILEdBQUcsQ0FBRSxVQUFVLE1BQUssc0NBQXNDLENBQUMsQ0FBQztRQUNuSCxJQUFJLENBQUMsZUFBZSxHQUFHLENBQUEscUJBQXFCLGFBQXJCLHFCQUFxQix1QkFBckIscUJBQXFCLENBQUUsUUFBUSxLQUFJLElBQUksSUFBSSxNQUFNLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxxQkFBcUIsYUFBckIscUJBQXFCLHVCQUFyQixxQkFBcUIsQ0FBRSxRQUFRLENBQUMsQ0FBQztJQUNsSSxDQUFDO0lBRUQsVUFBVTtRQUNSLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZTtZQUFFLE9BQU8sRUFBRSxDQUFDO1FBRXJDLE9BQU87WUFDTCxrQkFBa0IsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFOztnQkFDM0IsSUFBSSxDQUFDLG9CQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLElBQUksSUFB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