ts-flex-query
Version:
Flexible and type-safe data queries
31 lines • 1.39 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.SortOperator = void 0;
exports.orderBy = orderBy;
const sort_1 = require("../../expressions/sort");
const variable_1 = require("../../expressions/variable");
const object_value_selector_1 = require("../../helpers/object-value-selector");
const data_type_1 = require("../../types/data-type");
class SortOperator {
constructor(specs) {
this.specs = specs;
}
instantiate(input) {
const variableSymbol = Symbol('vSort');
const inputType = input.dataType;
const variableExpr = (0, variable_1.variable)(inputType.type === data_type_1.DataTypeType.array ? inputType.elementType : { type: data_type_1.DataTypeType.unknown }, variableSymbol);
const specs = this.specs.map((spec) => ({
value: (0, object_value_selector_1.createQueryFromObjectValueSelector)(spec.value).instantiate(variableExpr),
isAscending: spec.isAscending
}));
return new sort_1.SortExpression(input, variableSymbol, specs);
}
}
exports.SortOperator = SortOperator;
function orderBy(...elements) {
const specs = elements.map((element) => Array.isArray(element)
? { value: element[0], isAscending: element[1] === 'asc' }
: { value: element, isAscending: true });
return new SortOperator(specs);
}
//# sourceMappingURL=sort.js.map