aboutsummaryrefslogtreecommitdiff
path: root/src/fields/ScriptField.ts
diff options
context:
space:
mode:
authorbobzel <zzzman@gmail.com>2022-08-30 12:11:49 -0400
committerbobzel <zzzman@gmail.com>2022-08-30 12:11:49 -0400
commit5dcf35a986bb1d9dbe6c26d0a7056ac43ceed007 (patch)
tree2eedf69b3a7e52a5d60fee09b4694113ba470264 /src/fields/ScriptField.ts
parent505fa1fe53b2ffc75231f2ee8a66da4be92c76c4 (diff)
made script caching more robust to avoid compiles and speed up startup.
Diffstat (limited to 'src/fields/ScriptField.ts')
-rw-r--r--src/fields/ScriptField.ts12
1 files changed, 5 insertions, 7 deletions
diff --git a/src/fields/ScriptField.ts b/src/fields/ScriptField.ts
index d38a019b3..3cb50a4c0 100644
--- a/src/fields/ScriptField.ts
+++ b/src/fields/ScriptField.ts
@@ -9,7 +9,7 @@ import { Doc, Field, Opt } from './Doc';
import { Copy, Id, ToScriptString, ToString } from './FieldSymbols';
import { List } from './List';
import { ObjectField } from './ObjectField';
-import { Cast, NumCast, StrCast } from './Types';
+import { Cast, StrCast } from './Types';
import { Plugins } from './util';
function optional(propSchema: PropSchema) {
@@ -43,12 +43,11 @@ const scriptSchema = createSimpleSchema({
originalScript: true,
});
-function finalizeScript(script: ScriptField, captures: boolean) {
+function finalizeScript(script: ScriptField) {
const comp = CompileScript(script.script.originalScript, script.script.options);
if (!comp.compiled) {
throw new Error("Couldn't compile loaded script");
}
- !captures && ScriptField._scriptFieldCache.set(script.script.originalScript, comp);
if (script.setterscript) {
const compset = CompileScript(script.setterscript?.originalScript, script.setterscript.options);
if (!compset.compiled) {
@@ -72,9 +71,9 @@ async function deserializeScript(script: ScriptField) {
else if (!isNaN(Number(val))) captured[key] = Number(val);
else captured[key] = val;
})
- ).then(() => ((script as any).script = finalizeScript(script, true)));
+ ).then(() => ((script as any).script = finalizeScript(script)));
} else {
- (script as any).script = ScriptField.GetScriptFieldCache(script.script.originalScript) ?? finalizeScript(script, false);
+ (script as any).script = ScriptField.GetScriptFieldCache(script.script.originalScript) ?? finalizeScript(script);
}
}
@@ -143,7 +142,7 @@ export class ScriptField extends ObjectField {
return this.script.originalScript;
}
public static CompileScript(script: string, params: object = {}, addReturn = false, capturedVariables?: { [name: string]: Doc | string | number | boolean }) {
- const compiled = CompileScript(script, {
+ return CompileScript(script, {
params: {
this: Doc?.name || 'Doc', // this is the doc that executes the script
self: Doc?.name || 'Doc', // self is the root doc of the doc that executes the script
@@ -156,7 +155,6 @@ export class ScriptField extends ObjectField {
addReturn: addReturn,
capturedVariables,
});
- return compiled;
}
public static MakeFunction(script: string, params: object = {}, capturedVariables?: { [name: string]: Doc | string | number | boolean }) {
const compiled = ScriptField.CompileScript(script, params, true, capturedVariables);