import mingo from 'mingo'
export default class Expression {
/**
* Create an Expression.
*
* @class
* @param {object} expression - Mingo Object.
*/
constructor (expression) {
// Create internal object.
this._expression = {}
// Create the internal expression.
this.change(expression)
}
/**
* Get internal expression.
*
* @readonly
* @type {object}
*/
get expression () {
return this._expression
}
/**
* Allow for changing the internal expression.
*
* @function change
* @param {object} o - Expression to change
*/
change (o) {
if (typeof o === 'object' && o !== null) {
this._expression = o
} else {
throw new Error('Expressions can only be objects!')
}
}
/**
* Check if expression is valid, given a state.
*
* @function check
* @param {State} s - State to used to check expressions
* @returns {boolean} If the expression is valid or not
*/
check (s) {
let result = false
let query = null
try {
query = new mingo.Query(this._expression)
result = query.test(s.keys)
} catch (error) {
result = false
}
return result
}
}