react-native-decompiler
Version:
react native decompile apk and ipa(soon)
68 lines • 7.69 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const types_1 = require("@babel/types");
const plugin_1 = require("../../plugin");
class JSXConverter extends plugin_1.Plugin {
constructor() {
super(...arguments);
this.pass = 3;
this.name = 'JSXConverter';
}
getVisitor() {
return {
CallExpression: (path) => {
if (!types_1.isMemberExpression(path.node.callee) || !types_1.isIdentifier(path.node.callee.object) || !types_1.isIdentifier(path.node.callee.property))
return;
if (path.node.callee.object.name !== 'React' || path.node.callee.property.name !== 'createElement')
return;
path.replaceWith(this.parseJsx(path.node));
this.module.tags.push('jsx');
},
};
}
parseJsx(node) {
if (types_1.isStringLiteral(node)) {
return types_1.jsxText(node.value);
}
if (types_1.isCallExpression(node)) {
const args = node.arguments;
let name;
if (types_1.isIdentifier(args[0]) || types_1.isStringLiteral(args[0])) {
name = types_1.jsxIdentifier(types_1.isIdentifier(args[0]) ? args[0].name : args[0].value);
}
else if (types_1.isMemberExpression(args[0]) && types_1.isIdentifier(args[0].object) && types_1.isIdentifier(args[0].property)) {
name = types_1.jsxMemberExpression(types_1.jsxIdentifier(args[0].object.name), types_1.jsxIdentifier(args[0].property.name));
}
else {
this.debugLog(`fail to parse component ${args[0].type} inside callExpression`);
return types_1.jsxExpressionContainer(node);
}
let props = [];
if (types_1.isObjectExpression(args[1])) {
props = args[1].properties.map((prop) => {
if (!types_1.isObjectProperty(prop) || !types_1.isIdentifier(prop.key))
return null;
if (types_1.isStringLiteral(prop.value)) {
return types_1.jsxAttribute(types_1.jsxIdentifier(prop.key.name), prop.value);
}
if (types_1.isBooleanLiteral(prop.value) && prop.value.value) {
return types_1.jsxAttribute(types_1.jsxIdentifier(prop.key.name), null);
}
if (types_1.isExpression(prop.value)) {
return types_1.jsxAttribute(types_1.jsxIdentifier(prop.key.name), types_1.jsxExpressionContainer(prop.value));
}
return null;
}).filter((e) => e != null);
}
const children = args.slice(2).map((e) => (types_1.isExpression(e) ? this.parseJsx(e) : null)).filter((e) => e != null);
if (children.length) {
return types_1.jsxElement(types_1.jsxOpeningElement(name, props), types_1.jsxClosingElement(name), children);
}
return types_1.jsxElement(types_1.jsxOpeningElement(name, props, true), null, []);
}
this.debugLog(`fail to parse component ${node.type}`);
return types_1.jsxExpressionContainer(node);
}
}
exports.default = JSXConverter;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianN4Q29udmVydGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2RlY29tcGlsZXJzL3JlYWN0L2pzeENvbnZlcnRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQWdCQSx3Q0EwQnNCO0FBQ3RCLHlDQUFzQztBQUt0QyxNQUFxQixZQUFhLFNBQVEsZUFBTTtJQUFoRDs7UUFDVyxTQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLFNBQUksR0FBRyxjQUFjLENBQUM7SUE0RHhCLENBQUM7SUExREMsVUFBVTtRQUNSLE9BQU87WUFDTCxjQUFjLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQkFDdkIsSUFBSSxDQUFDLDBCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxvQkFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsb0JBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUM7b0JBQUUsT0FBTztnQkFDeEksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLE9BQU8sSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLGVBQWU7b0JBQUUsT0FBTztnQkFFM0csSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUMzQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDL0IsQ0FBQztTQUNGLENBQUM7SUFDSixDQUFDO0lBRU8sUUFBUSxDQUFDLElBQWdCO1FBQy9CLElBQUksdUJBQWUsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN6QixPQUFPLGVBQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDNUI7UUFDRCxJQUFJLHdCQUFnQixDQUFDLElBQUksQ0FBQyxFQUFFO1lBQzFCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7WUFFNUIsSUFBSSxJQUFxRCxDQUFDO1lBQzFELElBQUksb0JBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSx1QkFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUNyRCxJQUFJLEdBQUcscUJBQWEsQ0FBQyxvQkFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDNUU7aUJBQU0sSUFBSSwwQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxvQkFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxvQkFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDeEcsSUFBSSxHQUFHLDJCQUFtQixDQUFDLHFCQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxxQkFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQzthQUN0RztpQkFBTTtnQkFDTCxJQUFJLENBQUMsUUFBUSxDQUFDLDJCQUEyQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSx3QkFBd0IsQ0FBQyxDQUFDO2dCQUMvRSxPQUFPLDhCQUFzQixDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ3JDO1lBRUQsSUFBSSxLQUFLLEdBQW1CLEVBQUUsQ0FBQztZQUMvQixJQUFJLDBCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUMvQixLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtvQkFDdEMsSUFBSSxDQUFDLHdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO3dCQUFFLE9BQU8sSUFBSSxDQUFDO29CQUNwRSxJQUFJLHVCQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO3dCQUMvQixPQUFPLG9CQUFZLENBQUMscUJBQWEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztxQkFDL0Q7b0JBQ0QsSUFBSSx3QkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUU7d0JBQ3BELE9BQU8sb0JBQVksQ0FBQyxxQkFBYSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7cUJBQ3pEO29CQUNELElBQUksb0JBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7d0JBQzVCLE9BQU8sb0JBQVksQ0FBQyxxQkFBYSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsOEJBQXNCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7cUJBQ3ZGO29CQUNELE9BQU8sSUFBSSxDQUFDO2dCQUNkLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBcUIsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQzthQUNoRDtZQUVELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLG9CQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFtQixFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDO1lBRWpJLElBQUksUUFBUSxDQUFDLE1BQU0sRUFBRTtnQkFDbkIsT0FBTyxrQkFBVSxDQUFDLHlCQUFpQixDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRSx5QkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQzthQUN0RjtZQUVELE9BQU8sa0JBQVUsQ0FBQyx5QkFBaUIsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztTQUNuRTtRQUVELElBQUksQ0FBQyxRQUFRLENBQUMsMkJBQTJCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3RELE9BQU8sOEJBQXNCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdEMsQ0FBQztDQUNGO0FBOURELCtCQThEQyJ9