From f8daa181706528a15ed32ee7a01408ed6fec026d Mon Sep 17 00:00:00 2001 From: Henning Dieterichs Date: Sun, 29 Mar 2020 18:24:11 +0200 Subject: [PATCH] Adds cache helper function. --- data-extraction/src/js/helpers/cache.ts | 31 +++++++++++++++++++++++++ data-extraction/src/js/helpers/index.ts | 1 + 2 files changed, 32 insertions(+) create mode 100644 data-extraction/src/js/helpers/cache.ts diff --git a/data-extraction/src/js/helpers/cache.ts b/data-extraction/src/js/helpers/cache.ts new file mode 100644 index 0000000..d804554 --- /dev/null +++ b/data-extraction/src/js/helpers/cache.ts @@ -0,0 +1,31 @@ +import { DataExtractorApiImpl } from "../api"; + +const cached = new Map(); + +/** + * Evaluates an expression + */ +export function cache( + expression: string | (() => T), + id: string | number | undefined = undefined +): T { + let resultFn: () => any; + let key: string; + if (typeof expression === "string") { + const evalFn = DataExtractorApiImpl.lastEvalFn!; + resultFn = () => evalFn(expression); + key = JSON.stringify({ expr: expression, id }); + } else { + resultFn = () => expression(); + key = JSON.stringify({ expr: expression.toString(), id }); + } + + if (cached.has(key)) { + return cached.get(key); + } + + const result = resultFn(); + cached.set(key, result); + + return result; +} diff --git a/data-extraction/src/js/helpers/index.ts b/data-extraction/src/js/helpers/index.ts index 23af5d4..43c5404 100644 --- a/data-extraction/src/js/helpers/index.ts +++ b/data-extraction/src/js/helpers/index.ts @@ -2,3 +2,4 @@ export * from "./createGraph"; export * from "./createGraphFromPointers"; export * from "./tryEval"; export * from "./markedGrid"; +export * from "./cache";