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
			| 
											3 years ago
										 | "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
 |