You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							97 lines
						
					
					
						
							2.7 KiB
						
					
					
				
			
		
		
	
	
							97 lines
						
					
					
						
							2.7 KiB
						
					
					
				"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
 |