UNPKG

forto-sorter

Version:

Fast and powerful array sorting. Sort by any property in any direction with easy to read syntax.

2 lines (1 loc) 4.89 kB
!function(r,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports):"function"==typeof define&&define.amd?define(["exports"],n):n((r="undefined"!=typeof globalThis?globalThis:r||self)["forto-sorter"]={})}(this,function(r){"use strict";function n(r,n,t){return null==r?t:null==n?-t:r<n?-1:r===n?0:1}function a(o){return function(r,n,t){return o(r,n,t)*t}}var u=function(r,n){if(r)throw Error("Invalid sort config: "+n)},d=function(r){var n=r||{},t=n.asc,o=n.desc,e=t?1:-1,i=t||o;return u(!i,"Expected `asc` or `desc` property"),u(t&&o,"Ambiguous object with `asc` and `desc` config properties"),{order:e,sortBy:i,comparer:r.comparer&&a(r.comparer)}},c=function(p){return function r(n,t,o,e,i,a,u){var c,f;if("string"==typeof n)c=a[n],f=u[n];else{if("function"!=typeof n){var s=d(n);return r(s.sortBy,t,o,s.order,s.comparer||p,a,u)}c=n(a),f=n(u)}var l=i(c,f,e);return(0===l||null==c&&null==f)&&t.length>o?r(t[o],t,o+1,e,i,a,u):l}};function e(r,n,t,o){return Array.isArray(n)?(Array.isArray(t)&&t.length<2&&(t=t[0]),n.sort(function r(t,o,e){if(void 0===t||!0===t)return function(r,n){return o(r,n,e)};if("string"==typeof t)return u(t.includes("."),"String syntax not allowed for nested properties."),function(r,n){return o(r[t],n[t],e)};if("function"==typeof t)return function(r,n){return o(t(r),t(n),e)};if(Array.isArray(t)){var i=c(o);return function(r,n){return i(t[0],t,1,e,o,r,n)}}var n=d(t);return r(n.sortBy,n.comparer||o,n.order)}(t,o,r))):n}function o(r,n,t){void 0===t&&(t=function(r,n){return n<r?1:-1});var o=n.list;if(!Array.isArray(o))throw new Error("Sort: invalid array");if("function"!=typeof t)throw new Error('Sort: "compare" must be a function');return r(n,{shouldSwap:function(r,n){return 0<t(o[r],o[n])},swap:function(r,n){var t=o[n];o[n]=o[r],o[r]=t},compare:t})}function i(r,n){for(var t=r.list,o=n.shouldSwap,e=n.swap,i=t.length-1;0<i;){for(var a=0,u=0;u<i;u+=1)o(u,u+1)&&(e(u,u+1),a=u);i=a}return t}function f(r,n){for(var t=r.list,o=n.shouldSwap,e=n.swap,i=1;i<t.length;i+=1)for(var a=i,u=i-1;0<=u;--u)o(u,a)&&(e(u,a),a=u);return t}function s(r,n){for(var t=r.list,o=n.shouldSwap,e=n.swap,i=0;i<t.length-1;i+=1){for(var a=i,u=i+1;u<t.length;u+=1)o(a,u)&&(a=u);a!==i&&e(a,i)}return t}function l(r){var t=r.list,n=r.order,o=void 0===n?"asc":n,e=r.getNumber,u=void 0===e?function(r){return r}:e;if(o&&!["asc","desc"].includes(o))throw new Error('radix sort: order is either "asc" or "desc"');if(u&&"function"!=typeof u)throw new Error("radix sort: invalid getNumber callback");for(var i=function(r,n){for(var i=[[],[],[],[],[],[],[],[],[],[]],a=r,t=function(r){for(var n=0;n<a.length;n+=1){var t=Math.abs(u(a[n])).toString(),o=t[t.length-1-r]||0;i[o].push(a[n])}var e=[];i.forEach(function(r,n){e=e.concat(r),i[n]=[]}),a=e},o=0;o<(""+n).length;o+=1)t(o);return a},a=[],c=[],f=-1/0,s=1/0,l=0;l<t.length;l+=1){var p=u(t[l]);if(Number.isNaN(+p))throw new Error("radix sort: invalid numeric value: "+p);0<=p?(a.push(t[l]),f<p&&(f=p)):(c.push(t[l]),p<s&&(s=p))}for(var d=i(a,f),h=i(c,-s),v=[],g="asc"===o?h:d,y="asc"===o?d:h,l=g.length-1;0<=l;--l)v.push(g[l]);for(l=0;l<y.length;l+=1)v.push(y[l]);return v.forEach(function(r,n){t[n]=r}),t}function p(r,n){function o(r){return Math.floor((r-1)/2)}function c(r,n){return 0<=r&&0<=n&&r<i.length&&n<i.length&&0<a(i[n],i[r])}function t(r){for(var n=r,t=o(n);c(t,n);)f(t,n),t=o(n=t)}function e(r){for(var n,t,o,e,i=0,a=1,u=2;a<r;)t=r,n=c(o=a,e=u)&&e<t?e:o,c(i,n)&&f(i,n),a=2*(i=n)+1,u=2*i+2}var i=r.list,a=n.compare,f=n.swap;!function(){for(var r=0;r<i.length;r+=1)t(r)}();for(var u=i.length-1;0<u;--u)f(0,u),e(u);return i}function h(r,n){var i=r.list,a=n.shouldSwap,u=n.swap,c=function(r,n){void 0===r&&(r=0),void 0===n&&(n=i.length-1);for(var t=r,o=r,e=n;o<=e;){for(;a(t,o)&&o<n;)o+=1;for(;!a(t,e)&&r<e;)--e;o<=e&&(u(o,e),o+=1,--e)}return r<e&&c(r,e),o<n&&c(o,n),i};return c()}function v(r,n){var g=r.list,y=n.shouldSwap,w=function(r,n){if(void 0===r&&(r=0),void 0===n&&(n=g.length-1),n-r<=0)return[r,r+1];for(var t,o,e=(o=n,(t=r)+Math.floor((o-t)/2)),i=w(r,e),a=w(e+1,n),u=i[0],c=i[1],f=a[0],s=a[1],l=[],p=u,d=f;p<c||d<s;)d!==s&&(p===c||y(p,d))?(l.push(g[d]),d+=1):(l.push(g[p]),p+=1);for(var h=0,v=u;v<s;v+=1)g[v]=l[h],h+=1;return[u,s]};return w(),g}function t(t){var o=a(t.comparer);return function(r){var n=Array.isArray(r)&&!t.inPlaceSorting?r.slice():r;return{asc:function(r){return e(1,n,r,o)},desc:function(r){return e(-1,n,r,o)},by:function(r){return e(1,n,r,o)}}}}var g=t({comparer:n}),y=t({comparer:n,inPlaceSorting:!0});r.createNewSortInstance=t,r.inPlaceSort=y,r.sort=g,r.sortByAlgorithm=function(r,n,t){switch(r){case"bubble":o(i,{list:n},t);break;case"insertion":o(f,{list:n},t);break;case"selection":o(s,{list:n},t);break;case"radix":o(l,{list:n},t);break;case"heap":o(p,{list:n},t);break;case"quick":o(h,{list:n},t);break;case"merge":o(v,{list:n},t)}},Object.defineProperty(r,"__esModule",{value:!0})});