更新
This commit is contained in:
+55
@@ -0,0 +1,55 @@
|
||||
"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;
|
||||
Reference in New Issue
Block a user