UNPKG

sort-by-property

Version:

Type-safe array sorting method with support for deeply nested properties and Typescript autocompletion.

3 lines (2 loc) 1.63 kB
"use strict";function r(r){return r instanceof Date&&"function"==typeof r.getMonth}function t(r){return"string"==typeof r}function n(r){return"number"==typeof r&&!Number.isNaN(r)}const e=r=>Array.isArray(r);function o(r){return null==r}function i(r){return"bigint"==typeof r}function a(r){return"symbol"==typeof r}function u(r,t){return r.reduce(((r,t)=>r[t]),t)}function f(r){return"boolean"==typeof r}function l(u,s){return(c,p)=>{if("asc"===u){if(n(c)&&n(p))return c-p;if(t(c)&&t(p))return isNaN(c)||isNaN(p)?c.localeCompare(p,s?.locale):parseFloat(c)-parseFloat(p);if(r(c)&&r(p))return+c-+p;if(e(c)&&e(p))return c.sort(l(u,s)).toString().localeCompare(p.sort(l(u,s)).toString(),s?.locale);if(i(c)&&i(p))return c<p?-1:c>p?1:0;if(a(c)&&a(p))return c.toString().localeCompare(p.toString(),s?.locale);if(f(c)&&f(p))return c?-1:p?1:0}if(n(c)&&n(p))return p-c;if(t(c)&&t(p))return isNaN(c)||isNaN(p)?p.localeCompare(c,s?.locale):parseFloat(p)-parseFloat(c);if(r(c)&&r(p))return+p-+c;if(e(c)&&e(p))return p.sort(l(u,s)).toString().localeCompare(c.sort(l(u,s)).toString(),s?.locale);if(i(c)&&i(p))return c<p?1:c>p?-1:0;if(a(c)&&a(p))return p.toString().localeCompare(c.toString(),s?.locale);if(f(c)&&f(p))return p?-1:c?1:0;if(o(c)&&p)return 1;if(c&&o(p))return-1;throw new Error(`Can't sort, typeof a (${typeof c}: ${JSON.stringify(c)}) and typeof b (${typeof p}: ${JSON.stringify(p)}) are not handled by any sorting logic.`)}}exports.sortBy=l,exports.sortByProperty=function(r,t,n){const e=r.split(".");return(r,o)=>{let i=r[e[0]],a=o[e[0]];return e.length>1&&(i=u(e,r),a=u(e,o)),l(t,n)(i,a)}}; //# sourceMappingURL=index.js.map