Sto osservando l'alternativa che può sostituire l'uso delle tecniche eval()
e new Function()
javascript. Sto sviluppando una soluzione build con javascript e la piattaforma su cui è stata costruita (Salesforce) ha recentemente annunciato che stanno introducendo CSP (Content Security Policy) che bloccherà l'utilizzo di eval()
e altre funzioni non sicure.
La mia soluzione utilizza la funzione eval per valutare le espressioni di stringa e fare altre cose magiche. Sto cercando un'alternativa, idealmente senza scrivere il mio parser.
Come ho già detto, io uso eval per valutare le espressioni. Le espressioni che dovrebbero essere supportate sono solitamente come:
- Confronto stringa
eval("'something' == 'something'") // return true
- Calcoli
eval("2 + 2 * 3)" // return 8
-
&&
e||
supportoeval("1 == 1 && 'cat' == 'dog'") // return false
- Operatori condizionali,
- almeno ternario
eval("(1 == 2 ? 'dog' : 'cat')") // return "cat"
- full
if-else
sarebbe davvero eccezionale:eval("if(1 == 2) { 'dog' } else if (1 == 3) { 'dog' } else { 'nothing' }") // return "nothing"
- almeno ternario
- Alcuni metodi di classe
Math
di base, ad esempioeval("Math.ceil(12.313)"); // return 13
Capacità che sarebbe davvero grandiosa avere
- Inject variable
new Function("var item = this; item.number = 10;", item); // item is variable defined outside of eval and I want to dynamically modify it within eval()
- Inietta la definizione della funzione
eval("invert('123')") // return 321, invert() is a function defined somewhere else
Sto cercando qualcosa che sia:
- Relativamente vicino alla sintassi di Javascript (ma accetterei se sarebbe una lingua diversa che può essere interpretata da qualche libreria js compatibile con CSP)
- Non troppo dipendente da altre librerie
- Può essere caricato senza node.js ecc. (libreria js standalone)