12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.formatSort = void 0;
- const error_1 = require("./error");
- /** @internal */
- function prepareDirection(direction = 1) {
- const value = `${direction}`.toLowerCase();
- if (isMeta(direction))
- return direction;
- switch (value) {
- case 'ascending':
- case 'asc':
- case '1':
- return 1;
- case 'descending':
- case 'desc':
- case '-1':
- return -1;
- default:
- throw new error_1.MongoInvalidArgumentError(`Invalid sort direction: ${JSON.stringify(direction)}`);
- }
- }
- /** @internal */
- function isMeta(t) {
- return typeof t === 'object' && t != null && '$meta' in t && typeof t.$meta === 'string';
- }
- /** @internal */
- function isPair(t) {
- if (Array.isArray(t) && t.length === 2) {
- try {
- prepareDirection(t[1]);
- return true;
- }
- catch (e) {
- return false;
- }
- }
- return false;
- }
- function isDeep(t) {
- return Array.isArray(t) && Array.isArray(t[0]);
- }
- function isMap(t) {
- return t instanceof Map && t.size > 0;
- }
- /** @internal */
- function pairToMap(v) {
- return new Map([[`${v[0]}`, prepareDirection([v[1]])]]);
- }
- /** @internal */
- function deepToMap(t) {
- const sortEntries = t.map(([k, v]) => [`${k}`, prepareDirection(v)]);
- return new Map(sortEntries);
- }
- /** @internal */
- function stringsToMap(t) {
- const sortEntries = t.map(key => [`${key}`, 1]);
- return new Map(sortEntries);
- }
- /** @internal */
- function objectToMap(t) {
- const sortEntries = Object.entries(t).map(([k, v]) => [
- `${k}`,
- prepareDirection(v)
- ]);
- return new Map(sortEntries);
- }
- /** @internal */
- function mapToMap(t) {
- const sortEntries = Array.from(t).map(([k, v]) => [
- `${k}`,
- prepareDirection(v)
- ]);
- return new Map(sortEntries);
- }
- /** converts a Sort type into a type that is valid for the server (SortForCmd) */
- function formatSort(sort, direction) {
- if (sort == null)
- return undefined;
- if (typeof sort === 'string')
- return new Map([[sort, prepareDirection(direction)]]);
- if (typeof sort !== 'object') {
- throw new error_1.MongoInvalidArgumentError(`Invalid sort format: ${JSON.stringify(sort)} Sort must be a valid object`);
- }
- if (!Array.isArray(sort)) {
- return isMap(sort) ? mapToMap(sort) : Object.keys(sort).length ? objectToMap(sort) : undefined;
- }
- if (!sort.length)
- return undefined;
- if (isDeep(sort))
- return deepToMap(sort);
- if (isPair(sort))
- return pairToMap(sort);
- return stringsToMap(sort);
- }
- exports.formatSort = formatSort;
- //# sourceMappingURL=sort.js.map
|