diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/Main.tsx | 2 | ||||
-rw-r--r-- | src/util/Scripting.ts | 30 |
2 files changed, 29 insertions, 3 deletions
diff --git a/src/Main.tsx b/src/Main.tsx index 431a5db96..78e1a8af6 100644 --- a/src/Main.tsx +++ b/src/Main.tsx @@ -13,6 +13,7 @@ import { ListField } from './fields/ListField'; import { DocumentView } from './views/nodes/DocumentView'; import { ContextMenu } from './views/ContextMenu'; import { TextField } from './fields/TextField'; +import { CompileScript } from './util/Scripting'; configure({ enforceActions: "observed" @@ -45,6 +46,7 @@ document.addEventListener("pointerdown", action(function (e: PointerEvent) { let doc3 = Documents.ImageDocument("https://upload.wikimedia.org/wikipedia/commons/thumb/3/3a/Cat03.jpg/1200px-Cat03.jpg", { x: 450, y: 500, title: "cat 1" }); + console.log(CompileScript("function testFunc(doc: Document): any {return doc.GetNumberField(KeyStore.X, 0)} ")()); const schemaDocs = Array.from(Array(5).keys()).map(v => Documents.ImageDocument("https://upload.wikimedia.org/wikipedia/commons/thumb/3/3a/Cat03.jpg/1200px-Cat03.jpg", { x: 50 + 100 * v, y: 50, width: 100, height: 100, title: "cat" + v })); diff --git a/src/util/Scripting.ts b/src/util/Scripting.ts index bf312918e..ac7d1550a 100644 --- a/src/util/Scripting.ts +++ b/src/util/Scripting.ts @@ -1,7 +1,32 @@ import * as ts from "typescript" import { Opt, Field } from "../fields/Field"; -export class ExecutableScript extends Function { +export interface ExecutableScript { + (): any; + + compiled: boolean; +} + +function ExecScript(script: string, diagnostics: Opt<ts.Diagnostic[]>): ExecutableScript { + const compiled = !(diagnostics && diagnostics.some(diag => diag.category == ts.DiagnosticCategory.Error)); + + let func: () => Opt<Field>; + if (compiled) { + func = function (): Opt<Field> { + let window = undefined; + let document = undefined; + let retVal = eval.call(undefined, script); + + return retVal; + }; + } else { + func = () => undefined; + } + + return Object.assign(func, + { + compiled + }); } export function CompileScript(script: string): ExecutableScript { @@ -10,7 +35,6 @@ export function CompileScript(script: string): ExecutableScript { module: ts.ModuleKind.CommonJS } }) - console.log(result.outputText); - return () => { }; + return ExecScript(result.outputText, result.diagnostics); }
\ No newline at end of file |