Closed SureshUnnikrishnanFL closed 5 years ago
Hi Suresh!
Date objects can be passed in the context and used the same as any other context value. For example:
jexl.evalSync('a > b', { a: new Date('2019-01-01T00:00:00Z'), b: new Date('2019-02-01T00:00:00Z') })
// false
jexl.evalSync('b > a', { a: new Date('2019-01-01T00:00:00Z'), b: new Date('2019-02-01T00:00:00Z') })
// true
If you need to manipulate date objects on a deeper level, transforms are great for that. Jexl's most important design point is that expressions be completely execution-safe with stock functionality, so it does not let you (or anyone with access to expressions that might be run, whether they're external users or a bad actor who has gained access to your database of expressions) to run member functions of objects in your context. But you can define transforms for date values and allow those to be called. For example:
jexl.addTransform('addSeconds', (input, seconds) => new Date(input.getTime() + seconds * 1000))
jexl.evalSync('a|addSeconds(30)', { a: new Date('2019-01-01T00:00:00Z') })
// 2019-01-01T00:00:30.000Z
Does this answer your question?
Hi Suresh!
Date objects can be passed in the context and used the same as any other context value. For example:
jexl.evalSync('a > b', { a: new Date('2019-01-01T00:00:00Z'), b: new Date('2019-02-01T00:00:00Z') }) // false jexl.evalSync('b > a', { a: new Date('2019-01-01T00:00:00Z'), b: new Date('2019-02-01T00:00:00Z') }) // true
If you need to manipulate date objects on a deeper level, transforms are great for that. Jexl's most important design point is that expressions be completely execution-safe with stock functionality, so it does not let you (or anyone with access to expressions that might be run, whether they're external users or a bad actor who has gained access to your database of expressions) to run member functions of objects in your context. But you can define transforms for date values and allow those to be called. For example:
jexl.addTransform('addSeconds', (input, seconds) => new Date(input.getTime() + seconds * 1000)) jexl.evalSync('a|addSeconds(30)', { a: new Date('2019-01-01T00:00:00Z') }) // 2019-01-01T00:00:30.000Z
Does this answer your question?
This answers my question. Thanks for the quick response and an excellent library.
How do we use Date objects in Jexl?