aboutsummaryrefslogtreecommitdiff
path: root/src/fields/ScriptField.ts
diff options
context:
space:
mode:
authortschicke-brown <tyler_schicke@brown.edu>2019-06-24 13:57:02 -0400
committerGitHub <noreply@github.com>2019-06-24 13:57:02 -0400
commitaddf0e443f64951a437701f0d5a087c1d5968faf (patch)
treea97d85738f3173896aeffa04a22368b70b9dcdc3 /src/fields/ScriptField.ts
parentc9f77d5aab98e6e7865cdcad957d5c937631775d (diff)
parentd01039b10f0ebd328224c0b1a190b0f884a7c727 (diff)
Merge pull request #167 from browngraphicslab/schema_fixes
Schema and scripting fixes
Diffstat (limited to 'src/fields/ScriptField.ts')
-rw-r--r--src/fields/ScriptField.ts98
1 files changed, 0 insertions, 98 deletions
diff --git a/src/fields/ScriptField.ts b/src/fields/ScriptField.ts
deleted file mode 100644
index dbca74720..000000000
--- a/src/fields/ScriptField.ts
+++ /dev/null
@@ -1,98 +0,0 @@
-import { ObjectField } from "../new_fields/ObjectField";
-import { CompiledScript, CompileScript } from "../client/util/Scripting";
-import { Copy, ToScriptString, Parent, SelfProxy } from "../new_fields/FieldSymbols";
-import { serializable, createSimpleSchema, map, primitive, object, deserialize, PropSchema, custom, SKIP } from "serializr";
-import { Deserializable } from "../client/util/SerializationHelper";
-import { Doc } from "../new_fields/Doc";
-
-function optional(propSchema: PropSchema) {
- return custom(value => {
- if (value !== undefined) {
- return propSchema.serializer(value);
- }
- return SKIP;
- }, (jsonValue: any, context: any, oldValue: any, callback: (err: any, result: any) => void) => {
- if (jsonValue !== undefined) {
- return propSchema.deserializer(jsonValue, callback, context, oldValue);
- }
- return SKIP;
- });
-}
-
-const optionsSchema = createSimpleSchema({
- requiredType: true,
- addReturn: true,
- typecheck: true,
- readonly: true,
- params: optional(map(primitive()))
-});
-
-function deserializeScript(script: ScriptField) {
- const comp = CompileScript(script.scriptString, script.options);
- if (!comp.compiled) {
- throw new Error("Couldn't compile loaded script");
- }
- (script as any)._script = comp;
-}
-
-@Deserializable("script", deserializeScript)
-export class ScriptField extends ObjectField {
- protected readonly _script: CompiledScript;
-
- constructor(script: CompiledScript) {
- super();
-
- this._script = script;
- }
-
- @serializable(custom(object(optionsSchema).serializer, () => SKIP))
- get options() {
- return this._script && this._script.options;
- }
-
- @serializable(custom(primitive().serializer, () => SKIP))
- get scriptString(): string {
- return this._script && this._script.originalScript;
- }
-
- // init(callback: (res: Field) => any) {
- // const options = this.options!;
- // const keys = Object.keys(options.options.capturedIds);
- // Server.GetFields(keys).then(fields => {
- // let captured: { [name: string]: Field } = {};
- // keys.forEach(key => captured[options.options.capturedIds[key]] = fields[key]);
- // const opts: ScriptOptions = {
- // addReturn: options.options.addReturn,
- // params: options.options.params,
- // requiredType: options.options.requiredType,
- // capturedVariables: captured
- // };
- // const script = CompileScript(options.script, opts);
- // if (!script.compiled) {
- // throw new Error("Can't compile script");
- // }
- // this._script = script;
- // callback(this);
- // });
- // }
-
- [Copy](): ObjectField {
- return new ScriptField(this._script);
- }
-
- [ToScriptString]() {
- return "script field";
- }
-}
-
-@Deserializable("computed", deserializeScript)
-export class ComputedField extends ScriptField {
- //TODO maybe add an observable cache based on what is passed in for doc, considering there shouldn't really be that many possible values for doc
- value(doc: Doc) {
- const val = this._script.run({ this: doc });
- if (val.success) {
- return val.result;
- }
- return undefined;
- }
-} \ No newline at end of file