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
 |