56 lines
1.7 KiB
JavaScript
56 lines
1.7 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.genWxsCallMethodsCode = exports.parseWxsCallMethods = void 0;
|
|
const types_1 = require("@babel/types");
|
|
const estree_walker_1 = require("estree-walker");
|
|
const ast_1 = require("./ast");
|
|
function parseWxsCallMethods(code) {
|
|
if (!code.includes('callMethod')) {
|
|
return [];
|
|
}
|
|
const ast = (0, ast_1.parseProgram)(code, '', {});
|
|
const wxsCallMethods = new Set();
|
|
estree_walker_1.walk(ast, {
|
|
enter(child) {
|
|
if (!(0, types_1.isCallExpression)(child)) {
|
|
return;
|
|
}
|
|
const { callee } = child;
|
|
// .callMethod
|
|
if (!(0, types_1.isMemberExpression)(callee) ||
|
|
!(0, types_1.isIdentifier)(callee.property) ||
|
|
callee.property.name !== 'callMethod') {
|
|
return;
|
|
}
|
|
// .callMethod('test',...)
|
|
const args = child.arguments;
|
|
if (!args.length) {
|
|
return;
|
|
}
|
|
const [name] = args;
|
|
if (!(0, types_1.isStringLiteral)(name)) {
|
|
return;
|
|
}
|
|
wxsCallMethods.add(name.value);
|
|
},
|
|
});
|
|
return [...wxsCallMethods];
|
|
}
|
|
exports.parseWxsCallMethods = parseWxsCallMethods;
|
|
function genWxsCallMethodsCode(code) {
|
|
const wxsCallMethods = parseWxsCallMethods(code);
|
|
if (!wxsCallMethods.length) {
|
|
return `export default {}`;
|
|
}
|
|
return `export default (Component) => {
|
|
if(!Component.wxsCallMethods){
|
|
Component.wxsCallMethods = []
|
|
}
|
|
Component.wxsCallMethods.push(${wxsCallMethods
|
|
.map((m) => `'${m}'`)
|
|
.join(', ')})
|
|
}
|
|
`;
|
|
}
|
|
exports.genWxsCallMethodsCode = genWxsCallMethodsCode;
|