relution-sdk
Version:
Relution Software Development Kit for TypeScript and JavaScript
135 lines • 12.8 kB
JavaScript
/*
* @file query/SortOrder.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
*/
/** */
;
var _ = require('lodash');
/**
* defines a sort order of fields.
*
* Caution, member fields eventually are shared by multiple instances! You may mutate member
* fields, but not the objects and arrays referenced by them.
*/
var SortOrder = (function () {
/**
* default/copy constructor.
*
* @param other instance to optionally initialize an independent copy of.
*/
function SortOrder(other) {
this.sortFields = other && other.sortFields;
}
/**
* parses a JSON literal such as ['-rating', '+date', 'id'] into this instance.
*
* @param json data, such as ['-rating', '+date'].
* @return {SortOrder} this instance.
*/
SortOrder.prototype.fromJSON = function (json) {
this.sortFields = new Array(json.length);
for (var i = json.length - 1; i >= 0; --i) {
this.sortFields[i] = new SortField().fromJSON(json[i]);
}
return this;
};
/**
* formats a string such as '+name,-id'.
*
* @return {string} representation of SortOrder, may be the empty string when this is empty.
*/
SortOrder.prototype.toString = function () {
var str = '';
var length = this.sortFields.length;
for (var i = 0; i < length; ++i) {
if (i > 0) {
str += ',';
}
str += this.sortFields[i].toString();
}
return str;
};
/**
* combines an other instance such that this order is maintained by priority and equivalent elements are ordered by
* the other order.
*
* You may want to optimize after merging several instances.
*
* @param other order to merge into this as secondary.
*/
SortOrder.prototype.merge = function (other) {
this.sortFields = this.sortFields.concat(other.sortFields);
};
/**
* eliminates redundant sort fields that do not affect overall order.
*/
SortOrder.prototype.optimize = function () {
this.sortFields = _.uniqBy(this.sortFields, function (sortField) {
return sortField.name;
});
};
return SortOrder;
}());
exports.SortOrder = SortOrder;
var SortField = (function () {
/**
* default/copy constructor.
*
* @param other instance to optionally initialize an independent copy of.
*/
function SortField(other) {
if (other) {
this.name = other.name;
this.ascending = other.ascending;
}
}
/**
* parses a JSON literal such as '-rating' into this instance.
*
* @param json data, such as '-rating'.
* @return {SortField} this instance.
*/
SortField.prototype.fromJSON = function (json) {
var order = json.length > 0 && json.charAt(0);
this.name = order === '+' || order === '-' ? json.substring(1) : json;
this.ascending = order !== '-';
return this;
};
/**
* formats a JSON literal such as 'name'.
*
* @return {string} JSON literal such as 'name'.
*/
SortField.prototype.toJSON = function () {
return this.ascending ? this.name : '-' + this.name;
};
/**
* formats a string such as '+name'.
*
* @return {string} such as '+name'.
*/
SortField.prototype.toString = function () {
return this.ascending ? '+' + this.name : '-' + this.name;
};
return SortField;
}());
exports.SortField = SortField;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU29ydE9yZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3F1ZXJ5L1NvcnRPcmRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JHO0FBQ0g7O0dBRUc7QUFDSCxNQUFNOztBQUVOLElBQVksQ0FBQyxXQUFNLFFBQVEsQ0FBQyxDQUFBO0FBRTVCOzs7OztHQUtHO0FBQ0g7SUFNRTs7OztPQUlHO0lBQ0gsbUJBQW1CLEtBQWlCO1FBQ2xDLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUM7SUFDOUMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksNEJBQVEsR0FBZixVQUFnQixJQUFjO1FBQzVCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxLQUFLLENBQVksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3BELEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUMxQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pELENBQUM7UUFDRCxNQUFNLENBQUMsSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOzs7O1NBSUs7SUFDRSw0QkFBUSxHQUFmO1FBQ0UsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDO1FBQ2IsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUM7UUFDcEMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUNoQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDVixHQUFHLElBQUksR0FBRyxDQUFDO1lBQ2IsQ0FBQztZQUNELEdBQUcsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3ZDLENBQUM7UUFDRCxNQUFNLENBQUMsR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSSx5QkFBSyxHQUFaLFVBQWEsS0FBZ0I7UUFDM0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVEOztPQUVHO0lBQ0ksNEJBQVEsR0FBZjtRQUNFLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLFVBQUMsU0FBb0I7WUFDL0QsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUM7UUFDeEIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBQ0gsZ0JBQUM7QUFBRCxDQUFDLEFBbEVELElBa0VDO0FBbEVZLGlCQUFTLFlBa0VyQixDQUFBO0FBRUQ7SUFVRTs7OztPQUlHO0lBQ0gsbUJBQW1CLEtBQWlCO1FBQ2xDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDVixJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7WUFDdkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDO1FBQ25DLENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSw0QkFBUSxHQUFmLFVBQWdCLElBQVk7UUFDMUIsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5QyxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssS0FBSyxHQUFHLElBQUksS0FBSyxLQUFLLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztRQUN0RSxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssS0FBSyxHQUFHLENBQUM7UUFDL0IsTUFBTSxDQUFDLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksMEJBQU0sR0FBYjtRQUNFLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDdEQsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSw0QkFBUSxHQUFmO1FBQ0UsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDNUQsQ0FBQztJQUNILGdCQUFDO0FBQUQsQ0FBQyxBQXBERCxJQW9EQztBQXBEWSxpQkFBUyxZQW9EckIsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBAZmlsZSBxdWVyeS9Tb3J0T3JkZXIudHNcbiAqIFJlbHV0aW9uIFNES1xuICpcbiAqIENyZWF0ZWQgYnkgVGhvbWFzIEJlY2ttYW5uIG9uIDIyLjA2LjIwMTVcbiAqIENvcHlyaWdodCAyMDE2IE0tV2F5IFNvbHV0aW9ucyBHbWJIXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbi8qKlxuICogQG1vZHVsZSBxdWVyeVxuICovXG4vKiogKi9cblxuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnO1xuXG4vKipcbiAqIGRlZmluZXMgYSBzb3J0IG9yZGVyIG9mIGZpZWxkcy5cbiAqXG4gKiBDYXV0aW9uLCBtZW1iZXIgZmllbGRzIGV2ZW50dWFsbHkgYXJlIHNoYXJlZCBieSBtdWx0aXBsZSBpbnN0YW5jZXMhIFlvdSBtYXkgbXV0YXRlIG1lbWJlclxuICogZmllbGRzLCBidXQgbm90IHRoZSBvYmplY3RzIGFuZCBhcnJheXMgcmVmZXJlbmNlZCBieSB0aGVtLlxuICovXG5leHBvcnQgY2xhc3MgU29ydE9yZGVyIHtcbiAgLyoqXG4gICAqIG9yZGVyZWQgbGlzdCBvZiBmaWVsZHMgdG8gc29ydCBvbi5cbiAgICovXG4gIHNvcnRGaWVsZHM6IFNvcnRGaWVsZFtdO1xuXG4gIC8qKlxuICAgKiBkZWZhdWx0L2NvcHkgY29uc3RydWN0b3IuXG4gICAqXG4gICAqIEBwYXJhbSBvdGhlciBpbnN0YW5jZSB0byBvcHRpb25hbGx5IGluaXRpYWxpemUgYW4gaW5kZXBlbmRlbnQgY29weSBvZi5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihvdGhlcj86IFNvcnRPcmRlcikge1xuICAgIHRoaXMuc29ydEZpZWxkcyA9IG90aGVyICYmIG90aGVyLnNvcnRGaWVsZHM7XG4gIH1cblxuICAvKipcbiAgICogcGFyc2VzIGEgSlNPTiBsaXRlcmFsIHN1Y2ggYXMgWyctcmF0aW5nJywgJytkYXRlJywgJ2lkJ10gaW50byB0aGlzIGluc3RhbmNlLlxuICAgKlxuICAgKiBAcGFyYW0ganNvbiBkYXRhLCBzdWNoIGFzIFsnLXJhdGluZycsICcrZGF0ZSddLlxuICAgKiBAcmV0dXJuIHtTb3J0T3JkZXJ9IHRoaXMgaW5zdGFuY2UuXG4gICAqL1xuICBwdWJsaWMgZnJvbUpTT04oanNvbjogc3RyaW5nW10pOiBTb3J0T3JkZXIge1xuICAgIHRoaXMuc29ydEZpZWxkcyA9IG5ldyBBcnJheTxTb3J0RmllbGQ+KGpzb24ubGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpID0ganNvbi5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgdGhpcy5zb3J0RmllbGRzW2ldID0gbmV3IFNvcnRGaWVsZCgpLmZyb21KU09OKGpzb25baV0pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBmb3JtYXRzIGEgc3RyaW5nIHN1Y2ggYXMgJytuYW1lLC1pZCcuXG4gICAqXG4gICAqIEByZXR1cm4ge3N0cmluZ30gcmVwcmVzZW50YXRpb24gb2YgU29ydE9yZGVyLCBtYXkgYmUgdGhlIGVtcHR5IHN0cmluZyB3aGVuIHRoaXMgaXMgZW1wdHkuXG4gICAgICovXG4gIHB1YmxpYyB0b1N0cmluZygpOiAgc3RyaW5nIHtcbiAgICB2YXIgc3RyID0gJyc7XG4gICAgdmFyIGxlbmd0aCA9IHRoaXMuc29ydEZpZWxkcy5sZW5ndGg7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgICAgaWYgKGkgPiAwKSB7XG4gICAgICAgIHN0ciArPSAnLCc7XG4gICAgICB9XG4gICAgICBzdHIgKz0gdGhpcy5zb3J0RmllbGRzW2ldLnRvU3RyaW5nKCk7XG4gICAgfVxuICAgIHJldHVybiBzdHI7XG4gIH1cblxuICAvKipcbiAgICogY29tYmluZXMgYW4gb3RoZXIgaW5zdGFuY2Ugc3VjaCB0aGF0IHRoaXMgb3JkZXIgaXMgbWFpbnRhaW5lZCBieSBwcmlvcml0eSBhbmQgZXF1aXZhbGVudCBlbGVtZW50cyBhcmUgb3JkZXJlZCBieVxuICAgKiB0aGUgb3RoZXIgb3JkZXIuXG4gICAqXG4gICAqIFlvdSBtYXkgd2FudCB0byBvcHRpbWl6ZSBhZnRlciBtZXJnaW5nIHNldmVyYWwgaW5zdGFuY2VzLlxuICAgKlxuICAgKiBAcGFyYW0gb3RoZXIgb3JkZXIgdG8gbWVyZ2UgaW50byB0aGlzIGFzIHNlY29uZGFyeS5cbiAgICovXG4gIHB1YmxpYyBtZXJnZShvdGhlcjogU29ydE9yZGVyKSB7XG4gICAgdGhpcy5zb3J0RmllbGRzID0gdGhpcy5zb3J0RmllbGRzLmNvbmNhdChvdGhlci5zb3J0RmllbGRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBlbGltaW5hdGVzIHJlZHVuZGFudCBzb3J0IGZpZWxkcyB0aGF0IGRvIG5vdCBhZmZlY3Qgb3ZlcmFsbCBvcmRlci5cbiAgICovXG4gIHB1YmxpYyBvcHRpbWl6ZSgpIHtcbiAgICB0aGlzLnNvcnRGaWVsZHMgPSBfLnVuaXFCeSh0aGlzLnNvcnRGaWVsZHMsIChzb3J0RmllbGQ6IFNvcnRGaWVsZCkgPT4ge1xuICAgICAgcmV0dXJuIHNvcnRGaWVsZC5uYW1lO1xuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTb3J0RmllbGQge1xuICAvKipcbiAgICogbmFtZS9wYXRoIG9mIGZpZWxkIHRvIHNvcnQgYnkuXG4gICAqL1xuICBuYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiB3aGV0aGVyIHRvIHNvcnQgYXNjZW5kaW5nICh0cnVlKSBvciBkZXNjZW5kaW5nIChmYWxzZSkuXG4gICAqL1xuICBhc2NlbmRpbmc6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIGRlZmF1bHQvY29weSBjb25zdHJ1Y3Rvci5cbiAgICpcbiAgICogQHBhcmFtIG90aGVyIGluc3RhbmNlIHRvIG9wdGlvbmFsbHkgaW5pdGlhbGl6ZSBhbiBpbmRlcGVuZGVudCBjb3B5IG9mLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKG90aGVyPzogU29ydEZpZWxkKSB7XG4gICAgaWYgKG90aGVyKSB7XG4gICAgICB0aGlzLm5hbWUgPSBvdGhlci5uYW1lO1xuICAgICAgdGhpcy5hc2NlbmRpbmcgPSBvdGhlci5hc2NlbmRpbmc7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIHBhcnNlcyBhIEpTT04gbGl0ZXJhbCBzdWNoIGFzICctcmF0aW5nJyBpbnRvIHRoaXMgaW5zdGFuY2UuXG4gICAqXG4gICAqIEBwYXJhbSBqc29uIGRhdGEsIHN1Y2ggYXMgJy1yYXRpbmcnLlxuICAgKiBAcmV0dXJuIHtTb3J0RmllbGR9IHRoaXMgaW5zdGFuY2UuXG4gICAqL1xuICBwdWJsaWMgZnJvbUpTT04oanNvbjogc3RyaW5nKTogU29ydEZpZWxkIHtcbiAgICB2YXIgb3JkZXIgPSBqc29uLmxlbmd0aCA+IDAgJiYganNvbi5jaGFyQXQoMCk7XG4gICAgdGhpcy5uYW1lID0gb3JkZXIgPT09ICcrJyB8fCBvcmRlciA9PT0gJy0nID8ganNvbi5zdWJzdHJpbmcoMSkgOiBqc29uO1xuICAgIHRoaXMuYXNjZW5kaW5nID0gb3JkZXIgIT09ICctJztcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBmb3JtYXRzIGEgSlNPTiBsaXRlcmFsIHN1Y2ggYXMgJ25hbWUnLlxuICAgKlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IEpTT04gbGl0ZXJhbCBzdWNoIGFzICduYW1lJy5cbiAgICovXG4gIHB1YmxpYyB0b0pTT04oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5hc2NlbmRpbmcgPyB0aGlzLm5hbWUgOiAnLScgKyB0aGlzLm5hbWU7XG4gIH1cblxuICAvKipcbiAgICogZm9ybWF0cyBhIHN0cmluZyBzdWNoIGFzICcrbmFtZScuXG4gICAqXG4gICAqIEByZXR1cm4ge3N0cmluZ30gc3VjaCBhcyAnK25hbWUnLlxuICAgKi9cbiAgcHVibGljIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuYXNjZW5kaW5nID8gJysnICsgdGhpcy5uYW1lIDogJy0nICsgdGhpcy5uYW1lO1xuICB9XG59XG4iXX0=