Skip to content

Commit

Permalink
feat(core): 新增题库配置的字段解析器功能
Browse files Browse the repository at this point in the history
  • Loading branch information
enncy committed Dec 4, 2023
1 parent 7d4f660 commit f596488
Showing 1 changed file with 21 additions and 3 deletions.
24 changes: 21 additions & 3 deletions packages/core/src/core/answer-wrapper/answer.wrapper.handler.ts
Original file line number Diff line number Diff line change
Expand Up @@ -84,8 +84,21 @@ export async function defaultAnswerWrapperHandler(
const data: Record<string, string> = Object.create({});
/** 构造一个请求数据 */
Object.keys(wrapperData).forEach((key) => {
// 解析data数据
Reflect.set(data, key, resolvePlaceHolder(wrapperData[key]));
// 如果存在字段解析器
if (typeof (wrapperData as any)[key] === 'object' && Reflect.has((wrapperData as any)[key], 'handler')) {
// eslint-disable-next-line no-new-func
const handler = Function(Reflect.get((wrapperData as any)[key], 'handler'))();
if (typeof handler !== 'function') {
throw new Error('data 字段解析器必须返回一个函数');
}
const result = handler(env);
if (result) {
Reflect.set(data, key, handler(env));
}
} else {
// 解析data数据
Reflect.set(data, key, resolvePlaceHolder(wrapperData[key]));
}
});

requestData = data;
Expand All @@ -112,7 +125,11 @@ export async function defaultAnswerWrapperHandler(
/** 从 handler 获取搜索到的题目和回答 */

// eslint-disable-next-line no-new-func
const info = Function(handler)()(responseData);
const responseHandler = Function(handler)();
if (typeof responseHandler !== 'function') {
throw new Error('handler 响应处理器必须返回一个函数');
}
const info = responseHandler(responseData);
if (info && Array.isArray(info)) {
/** 如果返回一个二维数组 */
if (info.every((item: any) => Array.isArray(item))) {
Expand All @@ -139,6 +156,7 @@ export async function defaultAnswerWrapperHandler(
data: requestData
});
} catch (error) {
console.error(error);
searchInfos.push({
url: wrapper.url,
name,
Expand Down

0 comments on commit f596488

Please sign in to comment.