relution-sdk
Version:
Relution Software Development Kit for TypeScript and JavaScript
77 lines • 7.34 kB
JavaScript
/*
* @file query/JsonPath.ts
* Relution SDK
*
* Created by Thomas Beckmann on 22.06.2015
* Copyright 2016 M-Way Solutions GmbH
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/**
* @module query
*/
/** */
;
/**
* external evaluation function of JSONPath library.
*
* @see https://libraries.io/bower/JSONPath
*/
var jsonPath = require('JSONPath');
/**
* compiled JSON path expression.
*
* @see http://goessner.net/articles/JsonPath/
* @see https://libraries.io/bower/JSONPath
*/
var JsonPath = (function () {
/**
* constructs a compiled expression.
*
* @param expression to compile.
*/
function JsonPath(expression) {
this.expression = jsonPath.eval(null, expression, {
resultType: 'PATH'
}) || expression;
this.simple = /^\w+$/.test(this.expression);
}
/**
* evaluates the expression on a target object.
*
* @param obj to evaluate expression on.
* @param arg options object.
* @return{any} result of evaluating expression on object.
*/
JsonPath.prototype.evaluate = function (obj, arg) {
if (!arg && this.simple) {
// fastpath
return obj && obj[this.expression];
}
var result = jsonPath.eval(obj, this.expression, arg || {
wrap: false
});
// when result is false it might indicate a missing value,
// we differentiate by requesting the path here
if (arg || result !== false || jsonPath.eval(obj, this.expression, {
resultType: 'PATH',
wrap: false
})) {
return result;
}
// intentionally we do not return a value here...
};
return JsonPath;
}());
exports.JsonPath = JsonPath;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSnNvblBhdGguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcXVlcnkvSnNvblBhdGgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtCRztBQUNIOztHQUVHO0FBQ0gsTUFBTTs7QUFFTjs7OztHQUlHO0FBQ0gsSUFBTSxRQUFRLEdBVVYsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBRXhCOzs7OztHQUtHO0FBQ0g7SUFXRTs7OztPQUlHO0lBQ0gsa0JBQVksVUFBa0I7UUFDNUIsSUFBSSxDQUFDLFVBQVUsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUU7WUFDaEQsVUFBVSxFQUFFLE1BQU07U0FDbkIsQ0FBQyxJQUFJLFVBQVUsQ0FBQztRQUNqQixJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCwyQkFBUSxHQUFSLFVBQVMsR0FBUSxFQUFFLEdBQVE7UUFDekIsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDeEIsV0FBVztZQUNYLE1BQU0sQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNyQyxDQUFDO1FBRUQsSUFBSSxNQUFNLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxHQUFHLElBQUk7WUFDdEQsSUFBSSxFQUFFLEtBQUs7U0FDWixDQUFDLENBQUM7UUFDSCwwREFBMEQ7UUFDMUQsK0NBQStDO1FBQy9DLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxNQUFNLEtBQUssS0FBSyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDL0QsVUFBVSxFQUFFLE1BQU07WUFDbEIsSUFBSSxFQUFFLEtBQUs7U0FDWixDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ0wsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUNoQixDQUFDO1FBQ0QsaURBQWlEO0lBQ25ELENBQUM7SUFDSCxlQUFDO0FBQUQsQ0FBQyxBQWpERCxJQWlEQztBQWpEWSxnQkFBUSxXQWlEcEIsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBAZmlsZSBxdWVyeS9Kc29uUGF0aC50c1xuICogUmVsdXRpb24gU0RLXG4gKlxuICogQ3JlYXRlZCBieSBUaG9tYXMgQmVja21hbm4gb24gMjIuMDYuMjAxNVxuICogQ29weXJpZ2h0IDIwMTYgTS1XYXkgU29sdXRpb25zIEdtYkhcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuLyoqXG4gKiBAbW9kdWxlIHF1ZXJ5XG4gKi9cbi8qKiAqL1xuXG4vKipcbiAqIGV4dGVybmFsIGV2YWx1YXRpb24gZnVuY3Rpb24gb2YgSlNPTlBhdGggbGlicmFyeS5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vbGlicmFyaWVzLmlvL2Jvd2VyL0pTT05QYXRoXG4gKi9cbmNvbnN0IGpzb25QYXRoOiB7XG4gIC8qKlxuICAgKiBldmFsdWF0ZXMgYSBKU09OUGF0aCBleHByZXNzaW9uLlxuICAgKlxuICAgKiBAcGFyYW0gb2JqIHRvIGV2YWx1YXRlIGV4cHJlc3Npb24gb24uXG4gICAqIEBwYXJhbSBleHByIHRvIGV2YWx1YXRlIG9uIG9iamVjdC5cbiAgICogQHBhcmFtIGFyZyBvcHRpb25zIG9iamVjdC5cbiAgICogQHJldHVybnthbnl9IHJlc3VsdCBvZiBldmFsdWF0aW5nIGV4cHJlc3Npb24gb24gb2JqZWN0LlxuICAgKi9cbiAgZXZhbDogKG9iajogYW55LCBleHByOiBzdHJpbmcsIGFyZz86IHt9KSA9PiBhbnk7XG59ID0gcmVxdWlyZSgnSlNPTlBhdGgnKTtcblxuLyoqXG4gKiBjb21waWxlZCBKU09OIHBhdGggZXhwcmVzc2lvbi5cbiAqXG4gKiBAc2VlIGh0dHA6Ly9nb2Vzc25lci5uZXQvYXJ0aWNsZXMvSnNvblBhdGgvXG4gKiBAc2VlIGh0dHBzOi8vbGlicmFyaWVzLmlvL2Jvd2VyL0pTT05QYXRoXG4gKi9cbmV4cG9ydCBjbGFzcyBKc29uUGF0aCB7XG4gIC8qKlxuICAgKiBub3JtYWxpemVkIEpTT04gcGF0aCBleHByZXNzaW9uLlxuICAgKi9cbiAgcHJpdmF0ZSBleHByZXNzaW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIHdoZXRoZXIgdGhlIGV4cHJlc3Npb24gaXMgYSBzaW1wbGUgcHJvcGVydHkgYWNjZXNzLlxuICAgKi9cbiAgcHJpdmF0ZSBzaW1wbGU6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIGNvbnN0cnVjdHMgYSBjb21waWxlZCBleHByZXNzaW9uLlxuICAgKlxuICAgKiBAcGFyYW0gZXhwcmVzc2lvbiB0byBjb21waWxlLlxuICAgKi9cbiAgY29uc3RydWN0b3IoZXhwcmVzc2lvbjogc3RyaW5nKSB7XG4gICAgdGhpcy5leHByZXNzaW9uID0ganNvblBhdGguZXZhbChudWxsLCBleHByZXNzaW9uLCB7XG4gICAgICByZXN1bHRUeXBlOiAnUEFUSCdcbiAgICB9KSB8fCBleHByZXNzaW9uO1xuICAgIHRoaXMuc2ltcGxlID0gL15cXHcrJC8udGVzdCh0aGlzLmV4cHJlc3Npb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIGV2YWx1YXRlcyB0aGUgZXhwcmVzc2lvbiBvbiBhIHRhcmdldCBvYmplY3QuXG4gICAqXG4gICAqIEBwYXJhbSBvYmogdG8gZXZhbHVhdGUgZXhwcmVzc2lvbiBvbi5cbiAgICogQHBhcmFtIGFyZyBvcHRpb25zIG9iamVjdC5cbiAgICogQHJldHVybnthbnl9IHJlc3VsdCBvZiBldmFsdWF0aW5nIGV4cHJlc3Npb24gb24gb2JqZWN0LlxuICAgKi9cbiAgZXZhbHVhdGUob2JqOiBhbnksIGFyZz86IHt9KTogYW55IHtcbiAgICBpZiAoIWFyZyAmJiB0aGlzLnNpbXBsZSkge1xuICAgICAgLy8gZmFzdHBhdGhcbiAgICAgIHJldHVybiBvYmogJiYgb2JqW3RoaXMuZXhwcmVzc2lvbl07XG4gICAgfVxuXG4gICAgdmFyIHJlc3VsdCA9IGpzb25QYXRoLmV2YWwob2JqLCB0aGlzLmV4cHJlc3Npb24sIGFyZyB8fCB7XG4gICAgICB3cmFwOiBmYWxzZVxuICAgIH0pO1xuICAgIC8vIHdoZW4gcmVzdWx0IGlzIGZhbHNlIGl0IG1pZ2h0IGluZGljYXRlIGEgbWlzc2luZyB2YWx1ZSxcbiAgICAvLyB3ZSBkaWZmZXJlbnRpYXRlIGJ5IHJlcXVlc3RpbmcgdGhlIHBhdGggaGVyZVxuICAgIGlmIChhcmcgfHwgcmVzdWx0ICE9PSBmYWxzZSB8fCBqc29uUGF0aC5ldmFsKG9iaiwgdGhpcy5leHByZXNzaW9uLCB7XG4gICAgICAgIHJlc3VsdFR5cGU6ICdQQVRIJyxcbiAgICAgICAgd3JhcDogZmFsc2VcbiAgICAgIH0pKSB7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICAvLyBpbnRlbnRpb25hbGx5IHdlIGRvIG5vdCByZXR1cm4gYSB2YWx1ZSBoZXJlLi4uXG4gIH1cbn1cbiJdfQ==