parent
66736adafa
commit
3e0a949997
@ -88,9 +88,6 @@
|
||||
"pnpm": "8.15.5"
|
||||
},
|
||||
"pnpm": {
|
||||
"neverBuiltDependencies": [
|
||||
"canvas"
|
||||
],
|
||||
"overrides": {
|
||||
"@types/node": "20.14.2",
|
||||
"antd": "5.19.1",
|
||||
|
@ -18,12 +18,15 @@
|
||||
"@types/ejs": "^3.1.1",
|
||||
"@types/file-saver": "^2.0.7",
|
||||
"@types/lodash": "^4.17.5",
|
||||
"@types/qrcode": "^1.5.5",
|
||||
"antd": "5.19.1",
|
||||
"axios": "^1.6.2",
|
||||
"canvas": "^2.11.2",
|
||||
"cron-parser": "4.4.0",
|
||||
"file-saver": "^2.0.5",
|
||||
"lodash": "4.17.21",
|
||||
"lru-cache": "8.0.5",
|
||||
"qrcode": "^1.5.3",
|
||||
"react": "~18.3.1",
|
||||
"react-i18next": "^14.1.2",
|
||||
"react-js-cron": "^3.1.0",
|
||||
|
@ -27,7 +27,7 @@ export class JSParseInstruction extends Instruction {
|
||||
type: 'string',
|
||||
title: tval('JSCode expression'),
|
||||
'x-decorator': 'FormItem',
|
||||
'x-component': 'Input.TextArea',
|
||||
'x-component': 'CodeMirror',
|
||||
required: true,
|
||||
},
|
||||
model: {
|
||||
|
@ -1,4 +1,6 @@
|
||||
import * as canvas from 'canvas';
|
||||
import _ from 'lodash';
|
||||
import qrcode from 'qrcode';
|
||||
|
||||
import { FlowNodeModel, Instruction, JOB_STATUS, Processor } from '../..';
|
||||
|
||||
@ -6,9 +8,21 @@ export class JSParseInstruction extends Instruction {
|
||||
async run(node: FlowNodeModel, input: any, processor: Processor) {
|
||||
const { source = '', JSCode = '', model } = node.config;
|
||||
const data = processor.getParsedValue(source, node.id);
|
||||
const query = evalSimulate;
|
||||
try {
|
||||
let result = query ? await query(JSCode, { scopes: data, handlers: {}, modules: {} }) : data;
|
||||
const ctx = {
|
||||
data,
|
||||
body: {},
|
||||
};
|
||||
await evalSimulate(JSCode, {
|
||||
ctx,
|
||||
lib: {
|
||||
JSON,
|
||||
canvas,
|
||||
qrcode,
|
||||
log: console.log,
|
||||
},
|
||||
});
|
||||
let result = ctx.body;
|
||||
|
||||
if (typeof result === 'object' && result && model?.length) {
|
||||
if (Array.isArray(result)) {
|
||||
@ -47,10 +61,12 @@ function mapModel(data, model) {
|
||||
return result;
|
||||
}
|
||||
|
||||
async function evalSimulate(jsCode, { scopes, handlers, modules }) {
|
||||
try {
|
||||
return new Function('$root', `with($root) { ${jsCode}; }`)({ scopes, handlers, modules });
|
||||
} catch (err) {
|
||||
console.log('err', err);
|
||||
}
|
||||
async function evalSimulate(jsCode, { ctx, lib }) {
|
||||
const AsyncFunction = async function () {}.constructor;
|
||||
return await new AsyncFunction('$root', `with($root) { ${jsCode}; }`)({
|
||||
ctx,
|
||||
// 允许用户覆盖,这个时候可以使用 _ctx
|
||||
__ctx: ctx,
|
||||
lib,
|
||||
});
|
||||
}
|
||||
|
2168
pnpm-lock.yaml
2168
pnpm-lock.yaml
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user