UNPKG

@barchart/common-node-js

Version:

Common classes, utilities, and functions for building Node.js servers

78 lines (58 loc) 1.98 kB
const log4js = require('log4js'); const attributes = require('@barchart/common-js/lang/attributes'), is = require('@barchart/common-js/lang/is'); const QueryProvider = require('./../QueryProvider'); module.exports = (() => { 'use strict'; const logger = log4js.getLogger('data/providers/ContextQueryProvider'); class ContextQueryProvider extends QueryProvider { constructor(configuration) { super(configuration); } _runQuery(criteria) { const configuration = this._getConfiguration(); let returnRef; if (is.array(configuration.properties)) { returnRef = configuration.properties.reduce((map, property) => { if (attributes.has(criteria, property)) { attributes.write(map, property, attributes.read(criteria, property)); } return map; }, { }); } else if (is.string(configuration.property)) { returnRef = attributes.read(criteria, configuration.property); } else { returnRef = criteria; } return returnRef; } _getCriteriaIsValid(criteria) { const configuration = this._getConfiguration(); let conditions; if (is.object(configuration.condition)) { conditions = [ configuration.condition ]; } else if (is.array(configuration.condition)) { conditions = configuration.conditions; } else { conditions = null; } return conditions === null || conditions.every((condition) => { const propertyName = condition.propertyName; const propertyValue = condition.propertyValue; const exists = attributes.has(criteria, propertyName); const inverse = is.boolean(condition.inverse) && condition.inverse; let match; if (condition.greater) { match = exists && attributes.read(criteria, propertyName) > propertyValue; } else { match = exists && attributes.read(criteria, propertyName) === propertyValue; } return match ^ inverse; }); } toString() { return '[ContextQueryProvider]'; } } return ContextQueryProvider; })();