mirror of
https://github.com/alibaba/lowcode-engine.git
synced 2025-12-15 05:36:39 +00:00
57 lines
1.2 KiB
TypeScript
57 lines
1.2 KiB
TypeScript
import { createDefer } from './create-defer';
|
|
|
|
export function evaluate(script: string) {
|
|
const scriptEl = document.createElement('script');
|
|
scriptEl.text = script;
|
|
document.head.appendChild(scriptEl);
|
|
document.head.removeChild(scriptEl);
|
|
}
|
|
|
|
export function load(url: string) {
|
|
const node: any = document.createElement('script');
|
|
|
|
// node.setAttribute('crossorigin', 'anonymous');
|
|
|
|
node.onload = onload;
|
|
node.onerror = onload;
|
|
|
|
const i = createDefer();
|
|
|
|
function onload(e: any) {
|
|
node.onload = null;
|
|
node.onerror = null;
|
|
if (e.type === 'load') {
|
|
i.resolve();
|
|
} else {
|
|
i.reject();
|
|
}
|
|
// document.head.removeChild(node);
|
|
// node = null;
|
|
}
|
|
|
|
node.src = url;
|
|
|
|
// `async=false` is required to make sure all js resources execute sequentially.
|
|
node.async = false;
|
|
|
|
document.head.appendChild(node);
|
|
|
|
return i.promise();
|
|
}
|
|
|
|
export function evaluateExpression(expr: string) {
|
|
// eslint-disable-next-line no-new-func
|
|
const fn = new Function(expr);
|
|
return fn();
|
|
}
|
|
|
|
export function newFunction(args: string, code: string) {
|
|
try {
|
|
// eslint-disable-next-line no-new-func
|
|
return new Function(args, code);
|
|
} catch (e) {
|
|
console.warn('Caught error, Cant init func');
|
|
return null;
|
|
}
|
|
}
|