diff options
author | bob <bcz@cs.brown.edu> | 2019-02-06 16:11:42 -0500 |
---|---|---|
committer | bob <bcz@cs.brown.edu> | 2019-02-06 16:11:42 -0500 |
commit | 59d5992f2a101eff7743328c3fdefe6a0006ada9 (patch) | |
tree | b28dbb2e06f1fffeafcd2b43845072f9f3f6f1fc /src/util/Scripting.ts | |
parent | 7598b88bbad9690c59f8b164144aa0d02a0a211f (diff) | |
parent | 84eea14a86265ce0585342d9f3a3c4107c02df17 (diff) |
woring db stub.
Diffstat (limited to 'src/util/Scripting.ts')
-rw-r--r-- | src/util/Scripting.ts | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/src/util/Scripting.ts b/src/util/Scripting.ts new file mode 100644 index 000000000..804c67bc5 --- /dev/null +++ b/src/util/Scripting.ts @@ -0,0 +1,47 @@ +// import * as ts from "typescript" +let ts = (window as any).ts; +import { Opt, Field, FieldWaiting } from "../fields/Field"; +import { Document as DocumentImport } from "../fields/Document"; +import { NumberField as NumberFieldImport } from "../fields/NumberField"; +import { TextField as TextFieldImport } from "../fields/TextField"; +import { RichTextField as RichTextFieldImport } from "../fields/RichTextField"; +import { KeyStore as KeyStoreImport } from "../fields/Key"; + +export interface ExecutableScript { + (): any; + + compiled: boolean; +} + +function ExecScript(script: string, diagnostics: Opt<any[]>): ExecutableScript { + const compiled = !(diagnostics && diagnostics != FieldWaiting && diagnostics.some(diag => diag.category == ts.DiagnosticCategory.Error)); + + let func: () => Opt<Field>; + if (compiled) { + func = function (): Opt<Field> { + let KeyStore = KeyStoreImport; + let Document = DocumentImport; + let NumberField = NumberFieldImport; + let TextField = TextFieldImport; + let RichTextField = RichTextFieldImport; + let window = undefined; + let document = undefined; + let retVal = eval(script); + + return retVal; + }; + } else { + func = () => undefined; + } + + return Object.assign(func, + { + compiled + }); +} + +export function CompileScript(script: string): ExecutableScript { + let result = (window as any).ts.transpileModule(script, {}) + + return ExecScript(result.outputText, result.diagnostics); +}
\ No newline at end of file |