|
|
@ -40,9 +40,38 @@ public class SwitchTaskUtils { |
|
|
|
|
|
|
|
|
|
|
|
private static final NashornSandbox sandbox; |
|
|
|
private static final NashornSandbox sandbox; |
|
|
|
private static final String rgex = "['\"]*\\$\\{(.*?)\\}['\"]*"; |
|
|
|
private static final String rgex = "['\"]*\\$\\{(.*?)\\}['\"]*"; |
|
|
|
|
|
|
|
public static final String NASHORN_POLYFILL_ARRAY_PROTOTYPE_INCLUDES = |
|
|
|
|
|
|
|
"if (!Array.prototype.includes) {" + |
|
|
|
|
|
|
|
" Object.defineProperty(Array.prototype, 'includes', {" + |
|
|
|
|
|
|
|
" value: function(valueToFind, fromIndex) {" + |
|
|
|
|
|
|
|
" if (this == null) {" + |
|
|
|
|
|
|
|
" throw new TypeError('\"this\" is null or not defined');" + |
|
|
|
|
|
|
|
" }" + |
|
|
|
|
|
|
|
" var o = Object(this);" + |
|
|
|
|
|
|
|
" var len = o.length >>> 0;" + |
|
|
|
|
|
|
|
" if (len === 0) { return false; }" + |
|
|
|
|
|
|
|
" var n = fromIndex | 0;" + |
|
|
|
|
|
|
|
" var k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);" + |
|
|
|
|
|
|
|
" function sameValueZero(x, y) {" + |
|
|
|
|
|
|
|
" return x === y || (typeof x === 'number' && " + |
|
|
|
|
|
|
|
" typeof y === 'number' && isNaN(x) && isNaN(y));" + |
|
|
|
|
|
|
|
" }" + |
|
|
|
|
|
|
|
" while (k < len) {" + |
|
|
|
|
|
|
|
" if (sameValueZero(o[k], valueToFind)) { return true; }" + |
|
|
|
|
|
|
|
" k++;" + |
|
|
|
|
|
|
|
" }" + |
|
|
|
|
|
|
|
" return false;" + |
|
|
|
|
|
|
|
" }" + |
|
|
|
|
|
|
|
" });" + |
|
|
|
|
|
|
|
"}"; |
|
|
|
|
|
|
|
|
|
|
|
static { |
|
|
|
static { |
|
|
|
sandbox = NashornSandboxes.create(); |
|
|
|
sandbox = NashornSandboxes.create(); |
|
|
|
|
|
|
|
try { |
|
|
|
|
|
|
|
sandbox.eval(NASHORN_POLYFILL_ARRAY_PROTOTYPE_INCLUDES); |
|
|
|
|
|
|
|
} catch (ScriptException e) { |
|
|
|
|
|
|
|
log.error("failed to load Nashorn polyfill", e); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public static boolean evaluate(String expression) throws ScriptException { |
|
|
|
public static boolean evaluate(String expression) throws ScriptException { |
|
|
|