From 59621b55a5ef0a6cd2b50d1929712e3f79f0e725 Mon Sep 17 00:00:00 2001 From: yeedle Date: Tue, 29 Sep 2020 01:31:14 -0400 Subject: [PATCH 1/8] added a safeCompile method --- inst/htmlwidgets/lib/georaster-for-leaflet/mathjs.min.js | 1 + 1 file changed, 1 insertion(+) diff --git a/inst/htmlwidgets/lib/georaster-for-leaflet/mathjs.min.js b/inst/htmlwidgets/lib/georaster-for-leaflet/mathjs.min.js index 427bff9..54f2bff 100644 --- a/inst/htmlwidgets/lib/georaster-for-leaflet/mathjs.min.js +++ b/inst/htmlwidgets/lib/georaster-for-leaflet/mathjs.min.js @@ -47,6 +47,7 @@ */ const safeEval = math.evaluate; + const safeCompile = math.compile; math.import({ 'import': function () { throw new Error('Function import is disabled') }, From cce49e99a5feededc01a8c3aaa803bc5875ad236 Mon Sep 17 00:00:00 2001 From: yeedle Date: Tue, 29 Sep 2020 01:48:20 -0400 Subject: [PATCH 2/8] added a cache to store compiled expressions --- .../lib/georaster-for-leaflet/georasterUtils.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/inst/htmlwidgets/lib/georaster-for-leaflet/georasterUtils.js b/inst/htmlwidgets/lib/georaster-for-leaflet/georasterUtils.js index ebd0ed4..86b2f47 100644 --- a/inst/htmlwidgets/lib/georaster-for-leaflet/georasterUtils.js +++ b/inst/htmlwidgets/lib/georaster-for-leaflet/georasterUtils.js @@ -81,11 +81,17 @@ function evalMath(a, values) { return Function('values', 'with(Math) return ' + a)(values); } */ +const compiledExpressions = {} function evalMath(rawExpression, values) { - return safeEval(rawExpression, {values}); + if (! rawExpression in compiledExpressions) { + compiledExpressions[rawExpression] = safeCompile(rawExpression).evaluate; + } + return compiledExpressions[rawExpression]({values}); } + + // helpers from https://stackoverflow.com/questions/5623838/rgb-to-hex-and-hex-to-rgb function componentToHex(c) { var hex = c.toString(16); From 0a0f49fda7a1aa92394d171b3ce89e3554720392 Mon Sep 17 00:00:00 2001 From: yeedle Date: Tue, 29 Sep 2020 01:51:55 -0400 Subject: [PATCH 3/8] debug logging --- inst/htmlwidgets/lib/georaster-for-leaflet/georasterUtils.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/inst/htmlwidgets/lib/georaster-for-leaflet/georasterUtils.js b/inst/htmlwidgets/lib/georaster-for-leaflet/georasterUtils.js index 86b2f47..44046c0 100644 --- a/inst/htmlwidgets/lib/georaster-for-leaflet/georasterUtils.js +++ b/inst/htmlwidgets/lib/georaster-for-leaflet/georasterUtils.js @@ -83,9 +83,12 @@ function evalMath(a, values) { const compiledExpressions = {} function evalMath(rawExpression, values) { + console.log('raw expression', rawExpression) if (! rawExpression in compiledExpressions) { + console.log('storing raw expression in compiled') compiledExpressions[rawExpression] = safeCompile(rawExpression).evaluate; } + console.log('cached expression', compiledExpressions[rawExpression]) return compiledExpressions[rawExpression]({values}); } From 9759afa45ec789c58741493053e32d10b2739780 Mon Sep 17 00:00:00 2001 From: yeedle Date: Tue, 29 Sep 2020 01:53:44 -0400 Subject: [PATCH 4/8] more debug logging --- inst/htmlwidgets/lib/georaster-for-leaflet/georasterUtils.js | 1 + 1 file changed, 1 insertion(+) diff --git a/inst/htmlwidgets/lib/georaster-for-leaflet/georasterUtils.js b/inst/htmlwidgets/lib/georaster-for-leaflet/georasterUtils.js index 44046c0..7ab70fe 100644 --- a/inst/htmlwidgets/lib/georaster-for-leaflet/georasterUtils.js +++ b/inst/htmlwidgets/lib/georaster-for-leaflet/georasterUtils.js @@ -84,6 +84,7 @@ function evalMath(a, values) { const compiledExpressions = {} function evalMath(rawExpression, values) { console.log('raw expression', rawExpression) + console.log('raw expression is in compiled expressions', rawExpression in compiledExpressions) if (! rawExpression in compiledExpressions) { console.log('storing raw expression in compiled') compiledExpressions[rawExpression] = safeCompile(rawExpression).evaluate; From 05583eb420177505be0cab6a885c0e00edcc7f18 Mon Sep 17 00:00:00 2001 From: yeedle Date: Tue, 29 Sep 2020 01:55:34 -0400 Subject: [PATCH 5/8] even more debug logging --- inst/htmlwidgets/lib/georaster-for-leaflet/georasterUtils.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/inst/htmlwidgets/lib/georaster-for-leaflet/georasterUtils.js b/inst/htmlwidgets/lib/georaster-for-leaflet/georasterUtils.js index 7ab70fe..3194470 100644 --- a/inst/htmlwidgets/lib/georaster-for-leaflet/georasterUtils.js +++ b/inst/htmlwidgets/lib/georaster-for-leaflet/georasterUtils.js @@ -84,8 +84,8 @@ function evalMath(a, values) { const compiledExpressions = {} function evalMath(rawExpression, values) { console.log('raw expression', rawExpression) - console.log('raw expression is in compiled expressions', rawExpression in compiledExpressions) - if (! rawExpression in compiledExpressions) { + console.log('raw expression is not in compiled expressions', !rawExpression in compiledExpressions) + if (!rawExpression in compiledExpressions) { console.log('storing raw expression in compiled') compiledExpressions[rawExpression] = safeCompile(rawExpression).evaluate; } From e65f2b0924f8fb19a378d39cca0cbf2860590e4c Mon Sep 17 00:00:00 2001 From: yeedle Date: Tue, 29 Sep 2020 01:56:57 -0400 Subject: [PATCH 6/8] more debug logging --- inst/htmlwidgets/lib/georaster-for-leaflet/georasterUtils.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/inst/htmlwidgets/lib/georaster-for-leaflet/georasterUtils.js b/inst/htmlwidgets/lib/georaster-for-leaflet/georasterUtils.js index 3194470..ad56614 100644 --- a/inst/htmlwidgets/lib/georaster-for-leaflet/georasterUtils.js +++ b/inst/htmlwidgets/lib/georaster-for-leaflet/georasterUtils.js @@ -84,7 +84,7 @@ function evalMath(a, values) { const compiledExpressions = {} function evalMath(rawExpression, values) { console.log('raw expression', rawExpression) - console.log('raw expression is not in compiled expressions', !rawExpression in compiledExpressions) + console.log('raw expression is not in compiledexpressions', !rawExpression in compiledExpressions) if (!rawExpression in compiledExpressions) { console.log('storing raw expression in compiled') compiledExpressions[rawExpression] = safeCompile(rawExpression).evaluate; From 991f55ce8c0a01371ccf16a67972a59cd66223b1 Mon Sep 17 00:00:00 2001 From: yeedle Date: Tue, 29 Sep 2020 01:58:47 -0400 Subject: [PATCH 7/8] debug logging --- inst/htmlwidgets/lib/georaster-for-leaflet/georasterUtils.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/inst/htmlwidgets/lib/georaster-for-leaflet/georasterUtils.js b/inst/htmlwidgets/lib/georaster-for-leaflet/georasterUtils.js index ad56614..4b20c98 100644 --- a/inst/htmlwidgets/lib/georaster-for-leaflet/georasterUtils.js +++ b/inst/htmlwidgets/lib/georaster-for-leaflet/georasterUtils.js @@ -83,7 +83,7 @@ function evalMath(a, values) { const compiledExpressions = {} function evalMath(rawExpression, values) { - console.log('raw expression', rawExpression) + console.log(`raw expression, ${JSON.stringify(rawExpression)}`) console.log('raw expression is not in compiledexpressions', !rawExpression in compiledExpressions) if (!rawExpression in compiledExpressions) { console.log('storing raw expression in compiled') From 1b92bdaeab6bcdd5ecbd67b0aa478c7d11707529 Mon Sep 17 00:00:00 2001 From: yeedle Date: Tue, 29 Sep 2020 02:01:15 -0400 Subject: [PATCH 8/8] remember order of operations in JS --- .../htmlwidgets/lib/georaster-for-leaflet/georasterUtils.js | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/inst/htmlwidgets/lib/georaster-for-leaflet/georasterUtils.js b/inst/htmlwidgets/lib/georaster-for-leaflet/georasterUtils.js index 4b20c98..d2d67b2 100644 --- a/inst/htmlwidgets/lib/georaster-for-leaflet/georasterUtils.js +++ b/inst/htmlwidgets/lib/georaster-for-leaflet/georasterUtils.js @@ -83,13 +83,9 @@ function evalMath(a, values) { const compiledExpressions = {} function evalMath(rawExpression, values) { - console.log(`raw expression, ${JSON.stringify(rawExpression)}`) - console.log('raw expression is not in compiledexpressions', !rawExpression in compiledExpressions) - if (!rawExpression in compiledExpressions) { - console.log('storing raw expression in compiled') + if (!(rawExpression in compiledExpressions)) { compiledExpressions[rawExpression] = safeCompile(rawExpression).evaluate; } - console.log('cached expression', compiledExpressions[rawExpression]) return compiledExpressions[rawExpression]({values}); }