@fluixi/utils 1.0.0-alpha.53
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +73 -0
- package/dist/index.cjs +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1 -0
- package/dist/index.mjs +1 -0
- package/dist/lib/array/advanced.cjs +1 -0
- package/dist/lib/array/advanced.d.ts +1116 -0
- package/dist/lib/array/advanced.d.ts.map +1 -0
- package/dist/lib/array/advanced.js +2429 -0
- package/dist/lib/array/advanced.mjs +1 -0
- package/dist/lib/array/array.cjs +1 -0
- package/dist/lib/array/array.d.ts +6 -0
- package/dist/lib/array/array.d.ts.map +1 -0
- package/dist/lib/array/array.js +31 -0
- package/dist/lib/array/array.mjs +1 -0
- package/dist/lib/array/index.cjs +1 -0
- package/dist/lib/array/index.d.ts +4 -0
- package/dist/lib/array/index.d.ts.map +1 -0
- package/dist/lib/array/index.js +3 -0
- package/dist/lib/array/index.mjs +1 -0
- package/dist/lib/array/utils.cjs +1 -0
- package/dist/lib/array/utils.d.ts +100 -0
- package/dist/lib/array/utils.d.ts.map +1 -0
- package/dist/lib/array/utils.js +165 -0
- package/dist/lib/array/utils.mjs +1 -0
- package/dist/lib/color/color.cjs +1 -0
- package/dist/lib/color/color.d.ts +366 -0
- package/dist/lib/color/color.d.ts.map +1 -0
- package/dist/lib/color/color.js +722 -0
- package/dist/lib/color/color.mjs +1 -0
- package/dist/lib/color/constants.cjs +1 -0
- package/dist/lib/color/constants.d.ts +361 -0
- package/dist/lib/color/constants.d.ts.map +1 -0
- package/dist/lib/color/constants.js +358 -0
- package/dist/lib/color/constants.mjs +1 -0
- package/dist/lib/color/conversions.cjs +1 -0
- package/dist/lib/color/conversions.d.ts +166 -0
- package/dist/lib/color/conversions.d.ts.map +1 -0
- package/dist/lib/color/conversions.js +766 -0
- package/dist/lib/color/conversions.mjs +1 -0
- package/dist/lib/color/helpers.cjs +1 -0
- package/dist/lib/color/helpers.d.ts +75 -0
- package/dist/lib/color/helpers.d.ts.map +1 -0
- package/dist/lib/color/helpers.js +419 -0
- package/dist/lib/color/helpers.mjs +1 -0
- package/dist/lib/color/index.cjs +1 -0
- package/dist/lib/color/index.d.ts +12 -0
- package/dist/lib/color/index.d.ts.map +1 -0
- package/dist/lib/color/index.js +15 -0
- package/dist/lib/color/index.mjs +1 -0
- package/dist/lib/color/types.cjs +1 -0
- package/dist/lib/color/types.d.ts +179 -0
- package/dist/lib/color/types.d.ts.map +1 -0
- package/dist/lib/color/types.js +1 -0
- package/dist/lib/color/types.mjs +0 -0
- package/dist/lib/color/utils.cjs +1 -0
- package/dist/lib/color/utils.d.ts +199 -0
- package/dist/lib/color/utils.d.ts.map +1 -0
- package/dist/lib/color/utils.js +858 -0
- package/dist/lib/color/utils.mjs +1 -0
- package/dist/lib/compare/comparators.cjs +1 -0
- package/dist/lib/compare/comparators.d.ts +65 -0
- package/dist/lib/compare/comparators.d.ts.map +1 -0
- package/dist/lib/compare/comparators.js +210 -0
- package/dist/lib/compare/comparators.mjs +1 -0
- package/dist/lib/compare/index.cjs +1 -0
- package/dist/lib/compare/index.d.ts +2 -0
- package/dist/lib/compare/index.d.ts.map +1 -0
- package/dist/lib/compare/index.js +1 -0
- package/dist/lib/compare/index.mjs +1 -0
- package/dist/lib/crypto/hash.cjs +1 -0
- package/dist/lib/crypto/hash.d.ts +6 -0
- package/dist/lib/crypto/hash.d.ts.map +1 -0
- package/dist/lib/crypto/hash.js +53 -0
- package/dist/lib/crypto/hash.mjs +1 -0
- package/dist/lib/crypto/index.cjs +1 -0
- package/dist/lib/crypto/index.d.ts +2 -0
- package/dist/lib/crypto/index.d.ts.map +1 -0
- package/dist/lib/crypto/index.js +1 -0
- package/dist/lib/crypto/index.mjs +1 -0
- package/dist/lib/dom/events.cjs +1 -0
- package/dist/lib/dom/events.d.ts +159 -0
- package/dist/lib/dom/events.d.ts.map +1 -0
- package/dist/lib/dom/events.js +50 -0
- package/dist/lib/dom/events.mjs +1 -0
- package/dist/lib/dom/index.cjs +1 -0
- package/dist/lib/dom/index.d.ts +3 -0
- package/dist/lib/dom/index.d.ts.map +1 -0
- package/dist/lib/dom/index.js +2 -0
- package/dist/lib/dom/index.mjs +1 -0
- package/dist/lib/dom/utils.cjs +1 -0
- package/dist/lib/dom/utils.d.ts +6 -0
- package/dist/lib/dom/utils.d.ts.map +1 -0
- package/dist/lib/dom/utils.js +37 -0
- package/dist/lib/dom/utils.mjs +1 -0
- package/dist/lib/functions/functions.cjs +1 -0
- package/dist/lib/functions/functions.d.ts +329 -0
- package/dist/lib/functions/functions.d.ts.map +1 -0
- package/dist/lib/functions/functions.js +585 -0
- package/dist/lib/functions/functions.mjs +1 -0
- package/dist/lib/functions/index.cjs +1 -0
- package/dist/lib/functions/index.d.ts +3 -0
- package/dist/lib/functions/index.d.ts.map +1 -0
- package/dist/lib/functions/index.js +1 -0
- package/dist/lib/functions/index.mjs +1 -0
- package/dist/lib/functions/types.cjs +1 -0
- package/dist/lib/functions/types.d.ts +2 -0
- package/dist/lib/functions/types.d.ts.map +1 -0
- package/dist/lib/functions/types.js +1 -0
- package/dist/lib/functions/types.mjs +0 -0
- package/dist/lib/helpers.cjs +1 -0
- package/dist/lib/helpers.d.ts +13 -0
- package/dist/lib/helpers.d.ts.map +1 -0
- package/dist/lib/helpers.js +66 -0
- package/dist/lib/helpers.mjs +1 -0
- package/dist/lib/index.cjs +1 -0
- package/dist/lib/index.d.ts +6 -0
- package/dist/lib/index.d.ts.map +1 -0
- package/dist/lib/index.js +8 -0
- package/dist/lib/index.mjs +1 -0
- package/dist/lib/maths/constants.cjs +1 -0
- package/dist/lib/maths/constants.d.ts +84 -0
- package/dist/lib/maths/constants.d.ts.map +1 -0
- package/dist/lib/maths/constants.js +79 -0
- package/dist/lib/maths/constants.mjs +1 -0
- package/dist/lib/maths/fn/advanced.cjs +1 -0
- package/dist/lib/maths/fn/advanced.d.ts +149 -0
- package/dist/lib/maths/fn/advanced.d.ts.map +1 -0
- package/dist/lib/maths/fn/advanced.js +264 -0
- package/dist/lib/maths/fn/advanced.mjs +1 -0
- package/dist/lib/maths/fn/basic.cjs +1 -0
- package/dist/lib/maths/fn/basic.d.ts +182 -0
- package/dist/lib/maths/fn/basic.d.ts.map +1 -0
- package/dist/lib/maths/fn/basic.js +343 -0
- package/dist/lib/maths/fn/basic.mjs +1 -0
- package/dist/lib/maths/fn/complex.cjs +1 -0
- package/dist/lib/maths/fn/complex.d.ts +153 -0
- package/dist/lib/maths/fn/complex.d.ts.map +1 -0
- package/dist/lib/maths/fn/complex.js +383 -0
- package/dist/lib/maths/fn/complex.mjs +1 -0
- package/dist/lib/maths/fn/index.cjs +1 -0
- package/dist/lib/maths/fn/index.d.ts +10 -0
- package/dist/lib/maths/fn/index.d.ts.map +1 -0
- package/dist/lib/maths/fn/index.js +9 -0
- package/dist/lib/maths/fn/index.mjs +1 -0
- package/dist/lib/maths/fn/trigo.cjs +1 -0
- package/dist/lib/maths/fn/trigo.d.ts +147 -0
- package/dist/lib/maths/fn/trigo.d.ts.map +1 -0
- package/dist/lib/maths/fn/trigo.js +227 -0
- package/dist/lib/maths/fn/trigo.mjs +1 -0
- package/dist/lib/maths/fn/vector.cjs +1 -0
- package/dist/lib/maths/fn/vector.d.ts +512 -0
- package/dist/lib/maths/fn/vector.d.ts.map +1 -0
- package/dist/lib/maths/fn/vector.js +1136 -0
- package/dist/lib/maths/fn/vector.mjs +1 -0
- package/dist/lib/maths/formatter.cjs +1 -0
- package/dist/lib/maths/formatter.d.ts +35 -0
- package/dist/lib/maths/formatter.d.ts.map +1 -0
- package/dist/lib/maths/formatter.js +56 -0
- package/dist/lib/maths/formatter.mjs +1 -0
- package/dist/lib/maths/guards.cjs +1 -0
- package/dist/lib/maths/guards.d.ts +166 -0
- package/dist/lib/maths/guards.d.ts.map +1 -0
- package/dist/lib/maths/guards.js +315 -0
- package/dist/lib/maths/guards.mjs +1 -0
- package/dist/lib/maths/index.cjs +1 -0
- package/dist/lib/maths/index.d.ts +24 -0
- package/dist/lib/maths/index.d.ts.map +1 -0
- package/dist/lib/maths/index.js +29 -0
- package/dist/lib/maths/index.mjs +1 -0
- package/dist/lib/maths/parser.cjs +1 -0
- package/dist/lib/maths/parser.d.ts +20 -0
- package/dist/lib/maths/parser.d.ts.map +1 -0
- package/dist/lib/maths/parser.js +78 -0
- package/dist/lib/maths/parser.mjs +1 -0
- package/dist/lib/maths/random.cjs +1 -0
- package/dist/lib/maths/random.d.ts +27 -0
- package/dist/lib/maths/random.d.ts.map +1 -0
- package/dist/lib/maths/random.js +49 -0
- package/dist/lib/maths/random.mjs +1 -0
- package/dist/lib/maths/types/advanced.cjs +1 -0
- package/dist/lib/maths/types/advanced.d.ts +357 -0
- package/dist/lib/maths/types/advanced.d.ts.map +1 -0
- package/dist/lib/maths/types/advanced.js +5 -0
- package/dist/lib/maths/types/advanced.mjs +0 -0
- package/dist/lib/maths/types/basic.cjs +1 -0
- package/dist/lib/maths/types/basic.d.ts +95 -0
- package/dist/lib/maths/types/basic.d.ts.map +1 -0
- package/dist/lib/maths/types/basic.js +5 -0
- package/dist/lib/maths/types/basic.mjs +0 -0
- package/dist/lib/maths/types/index.cjs +1 -0
- package/dist/lib/maths/types/index.d.ts +4 -0
- package/dist/lib/maths/types/index.d.ts.map +1 -0
- package/dist/lib/maths/types/index.js +3 -0
- package/dist/lib/maths/types/index.mjs +0 -0
- package/dist/lib/maths/types/negative.cjs +1 -0
- package/dist/lib/maths/types/negative.d.ts +51 -0
- package/dist/lib/maths/types/negative.d.ts.map +1 -0
- package/dist/lib/maths/types/negative.js +5 -0
- package/dist/lib/maths/types/negative.mjs +0 -0
- package/dist/lib/maths/types/operations.cjs +1 -0
- package/dist/lib/maths/types/operations.d.ts +188 -0
- package/dist/lib/maths/types/operations.d.ts.map +1 -0
- package/dist/lib/maths/types/operations.js +6 -0
- package/dist/lib/maths/types/operations.mjs +0 -0
- package/dist/lib/object/clone.cjs +1 -0
- package/dist/lib/object/clone.d.ts +46 -0
- package/dist/lib/object/clone.d.ts.map +1 -0
- package/dist/lib/object/clone.js +104 -0
- package/dist/lib/object/clone.mjs +1 -0
- package/dist/lib/object/diff.cjs +1 -0
- package/dist/lib/object/diff.d.ts +203 -0
- package/dist/lib/object/diff.d.ts.map +1 -0
- package/dist/lib/object/diff.js +805 -0
- package/dist/lib/object/diff.mjs +1 -0
- package/dist/lib/object/getter-setter.cjs +1 -0
- package/dist/lib/object/getter-setter.d.ts +361 -0
- package/dist/lib/object/getter-setter.d.ts.map +1 -0
- package/dist/lib/object/getter-setter.js +1771 -0
- package/dist/lib/object/getter-setter.mjs +1 -0
- package/dist/lib/object/index.cjs +6 -0
- package/dist/lib/object/index.d.ts +13 -0
- package/dist/lib/object/index.d.ts.map +1 -0
- package/dist/lib/object/index.js +12 -0
- package/dist/lib/object/index.mjs +6 -0
- package/dist/lib/object/merge.cjs +1 -0
- package/dist/lib/object/merge.d.ts +93 -0
- package/dist/lib/object/merge.d.ts.map +1 -0
- package/dist/lib/object/merge.js +474 -0
- package/dist/lib/object/merge.mjs +1 -0
- package/dist/lib/object/object.cjs +1 -0
- package/dist/lib/object/object.d.ts +128 -0
- package/dist/lib/object/object.d.ts.map +1 -0
- package/dist/lib/object/object.js +432 -0
- package/dist/lib/object/object.mjs +1 -0
- package/dist/lib/object/omit.cjs +1 -0
- package/dist/lib/object/omit.d.ts +351 -0
- package/dist/lib/object/omit.d.ts.map +1 -0
- package/dist/lib/object/omit.js +656 -0
- package/dist/lib/object/omit.mjs +1 -0
- package/dist/lib/object/reconcile.cjs +1 -0
- package/dist/lib/object/reconcile.d.ts +7 -0
- package/dist/lib/object/reconcile.d.ts.map +1 -0
- package/dist/lib/object/reconcile.js +122 -0
- package/dist/lib/object/reconcile.mjs +1 -0
- package/dist/lib/object/selector.cjs +1 -0
- package/dist/lib/object/selector.d.ts +50 -0
- package/dist/lib/object/selector.d.ts.map +1 -0
- package/dist/lib/object/selector.js +371 -0
- package/dist/lib/object/selector.mjs +1 -0
- package/dist/lib/object/sort.cjs +1 -0
- package/dist/lib/object/sort.d.ts +149 -0
- package/dist/lib/object/sort.d.ts.map +1 -0
- package/dist/lib/object/sort.js +298 -0
- package/dist/lib/object/sort.mjs +1 -0
- package/dist/lib/object/transform.cjs +1 -0
- package/dist/lib/object/transform.d.ts +620 -0
- package/dist/lib/object/transform.d.ts.map +1 -0
- package/dist/lib/object/transform.js +1058 -0
- package/dist/lib/object/transform.mjs +1 -0
- package/dist/lib/object/types.cjs +1 -0
- package/dist/lib/object/types.d.ts +250 -0
- package/dist/lib/object/types.d.ts.map +1 -0
- package/dist/lib/object/types.js +1 -0
- package/dist/lib/object/types.mjs +0 -0
- package/dist/lib/object/utils.cjs +6 -0
- package/dist/lib/object/utils.d.ts +165 -0
- package/dist/lib/object/utils.d.ts.map +1 -0
- package/dist/lib/object/utils.js +444 -0
- package/dist/lib/object/utils.mjs +6 -0
- package/dist/lib/primitive/boolean/boolean.cjs +1 -0
- package/dist/lib/primitive/boolean/boolean.d.ts +276 -0
- package/dist/lib/primitive/boolean/boolean.d.ts.map +1 -0
- package/dist/lib/primitive/boolean/boolean.js +615 -0
- package/dist/lib/primitive/boolean/boolean.mjs +1 -0
- package/dist/lib/primitive/boolean/index.cjs +1 -0
- package/dist/lib/primitive/boolean/index.d.ts +3 -0
- package/dist/lib/primitive/boolean/index.d.ts.map +1 -0
- package/dist/lib/primitive/boolean/index.js +2 -0
- package/dist/lib/primitive/boolean/index.mjs +1 -0
- package/dist/lib/primitive/boolean/types.cjs +1 -0
- package/dist/lib/primitive/boolean/types.d.ts +14 -0
- package/dist/lib/primitive/boolean/types.d.ts.map +1 -0
- package/dist/lib/primitive/boolean/types.js +1 -0
- package/dist/lib/primitive/boolean/types.mjs +0 -0
- package/dist/lib/primitive/date/date.cjs +1 -0
- package/dist/lib/primitive/date/date.d.ts +641 -0
- package/dist/lib/primitive/date/date.d.ts.map +1 -0
- package/dist/lib/primitive/date/date.js +1998 -0
- package/dist/lib/primitive/date/date.mjs +1 -0
- package/dist/lib/primitive/date/index.cjs +1 -0
- package/dist/lib/primitive/date/index.d.ts +3 -0
- package/dist/lib/primitive/date/index.d.ts.map +1 -0
- package/dist/lib/primitive/date/index.js +2 -0
- package/dist/lib/primitive/date/index.mjs +1 -0
- package/dist/lib/primitive/date/types.cjs +1 -0
- package/dist/lib/primitive/date/types.d.ts +205 -0
- package/dist/lib/primitive/date/types.d.ts.map +1 -0
- package/dist/lib/primitive/date/types.js +7 -0
- package/dist/lib/primitive/date/types.mjs +0 -0
- package/dist/lib/primitive/index.cjs +5 -0
- package/dist/lib/primitive/index.d.ts +5 -0
- package/dist/lib/primitive/index.d.ts.map +1 -0
- package/dist/lib/primitive/index.js +4 -0
- package/dist/lib/primitive/index.mjs +5 -0
- package/dist/lib/primitive/string/index.cjs +5 -0
- package/dist/lib/primitive/string/index.d.ts +3 -0
- package/dist/lib/primitive/string/index.d.ts.map +1 -0
- package/dist/lib/primitive/string/index.js +2 -0
- package/dist/lib/primitive/string/index.mjs +5 -0
- package/dist/lib/primitive/string/parser-2.cjs +8 -0
- package/dist/lib/primitive/string/parser-2.d.ts +17 -0
- package/dist/lib/primitive/string/parser-2.d.ts.map +1 -0
- package/dist/lib/primitive/string/parser-2.js +656 -0
- package/dist/lib/primitive/string/parser-2.mjs +8 -0
- package/dist/lib/primitive/string/parser.cjs +3 -0
- package/dist/lib/primitive/string/parser.d.ts +9 -0
- package/dist/lib/primitive/string/parser.d.ts.map +1 -0
- package/dist/lib/primitive/string/parser.js +775 -0
- package/dist/lib/primitive/string/parser.mjs +3 -0
- package/dist/lib/primitive/string/string.cjs +5 -0
- package/dist/lib/primitive/string/string.d.ts +535 -0
- package/dist/lib/primitive/string/string.d.ts.map +1 -0
- package/dist/lib/primitive/string/string.js +1301 -0
- package/dist/lib/primitive/string/string.mjs +5 -0
- package/dist/lib/primitive/string/types.cjs +1 -0
- package/dist/lib/primitive/string/types.d.ts +318 -0
- package/dist/lib/primitive/string/types.d.ts.map +1 -0
- package/dist/lib/primitive/string/types.js +5 -0
- package/dist/lib/primitive/string/types.mjs +0 -0
- package/dist/lib/primitive/types.cjs +1 -0
- package/dist/lib/primitive/types.d.ts +27 -0
- package/dist/lib/primitive/types.d.ts.map +1 -0
- package/dist/lib/primitive/types.js +1 -0
- package/dist/lib/primitive/types.mjs +0 -0
- package/dist/lib/url/index.cjs +1 -0
- package/dist/lib/url/index.d.ts +3 -0
- package/dist/lib/url/index.d.ts.map +1 -0
- package/dist/lib/url/index.js +2 -0
- package/dist/lib/url/index.mjs +1 -0
- package/dist/lib/url/parser.cjs +1 -0
- package/dist/lib/url/parser.d.ts +216 -0
- package/dist/lib/url/parser.d.ts.map +1 -0
- package/dist/lib/url/parser.js +488 -0
- package/dist/lib/url/parser.mjs +1 -0
- package/dist/lib/url/types.cjs +1 -0
- package/dist/lib/url/types.d.ts +18 -0
- package/dist/lib/url/types.d.ts.map +1 -0
- package/dist/lib/url/types.js +1 -0
- package/dist/lib/url/types.mjs +0 -0
- package/dist/tsconfig.lib.tsbuildinfo +1 -0
- package/package.json +150 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var g=Object.defineProperty;var h=Object.getOwnPropertyDescriptor;var w=Object.getOwnPropertyNames;var k=Object.prototype.hasOwnProperty;var N=(e,n)=>{for(var t in n)g(e,t,{get:n[t],enumerable:!0})},$=(e,n,t,r)=>{if(n&&typeof n=="object"||typeof n=="function")for(let o of w(n))!k.call(e,o)&&o!==t&&g(e,o,{get:()=>n[o],enumerable:!(r=h(n,o))||r.enumerable});return e};var C=e=>$(g({},"__esModule",{value:!0}),e);var L={};N(L,{move:()=>K,reorder:()=>J,sort:()=>T,sortBy:()=>M,sortKeys:()=>I,swap:()=>V});module.exports=C(L);function b(e){if(typeof e!="object"||e===null)return!1;let n=Object.getPrototypeOf(e);return n===Object.prototype||n===null}function A(e,n){if(e==null)return;let t=e;for(let r of n.split(".")){if(t==null)return;t=t[r]}return t}function R(e,n,t,r){let o=e==null,s=n==null;if(o&&s)return 0;if(o)return 1;if(s)return-1;let u=typeof e=="number"&&Number.isNaN(e),i=typeof n=="number"&&Number.isNaN(n);return u&&i?0:u?1:i?-1:e instanceof Date&&n instanceof Date?e.getTime()-n.getTime():typeof e=="boolean"&&typeof n=="boolean"?e===n?0:e?1:-1:typeof e=="number"&&typeof n=="number"?e-n:typeof e=="string"&&typeof n=="string"?e.localeCompare(n,t,r):String(e).localeCompare(String(n),t,r)}function y(e,n){return(Array.isArray(e)?e[n]??"asc":e??"asc")==="desc"?-1:1}function F(e,n){let{order:t,locale:r,localeOptions:o,nullsLast:s=!0}=n,u=y(t,0);return e.slice().sort((i,c)=>{let l=i==null,a=c==null;return l&&a?0:l?s?1:-1:a?s?-1:1:R(i,c,r,o)*u})}function E(e,n,t){let{order:r,locale:o,localeOptions:s,nullsLast:u=!0,comparator:i}=t;return i?e.slice().sort(i):e.slice().sort((c,l)=>{for(let a=0;a<n.length;a++){let d=A(c,n[a]),f=A(l,n[a]),p=d==null,O=f==null;if(p&&O)continue;if(p)return u?1:-1;if(O)return u?-1:1;let S=R(d,f,o,s);if(S!==0)return S*y(r,a)}return 0})}function j(e,n){let{order:t,priorityKeys:r=[],locale:o,localeOptions:s,deep:u}=n,i=y(t,0),c=new Set(r),l=Object.keys(e).filter(f=>!c.has(f));l.sort((f,p)=>f.localeCompare(p,o,s)*i);let a=[...r.filter(f=>f in e),...l],d={};for(let f of a)d[f]=u?m(e[f],n):e[f];return d}function m(e,n){if(Array.isArray(e)){let t=e.map(r=>m(r,n));return x(t,n)}return b(e)?j(e,n):e}function P(e,n){let t=e.length,r=new Set,o=[];for(let s of n)s>=0&&s<t&&!r.has(s)&&(o.push(e[s]),r.add(s));for(let s=0;s<t;s++)r.has(s)||o.push(e[s]);return o}function x(e,n){let{by:t,comparator:r,indices:o,order:s}=n;if(o){let i=P(e,o);return y(s,0)===-1?i.reverse():i}if(r)return e.slice().sort(r);if(t){let i=Array.isArray(t)?t:[t];return E(e,i,n)}let u=e.find(i=>i!=null);return u!=null&&b(u)?y(s,0)===-1?e.slice().reverse():e.slice():F(e,n)}function T(e,n={}){let{deep:t}=n;if(Array.isArray(e)){let r=t?e.map(o=>m(o,n)):e;return x(r,n)}return b(e)?j(e,n):e}function M(e,n,t="asc",r={}){return T(e,{...r,by:n,order:t})}function I(e,n={}){return T(e,n)}function K(e,n,t){let r=e.length;if(r===0)return e.slice();let o=Math.max(0,Math.min(r-1,n)),s=Math.max(0,Math.min(r-1,t));if(o===s)return e.slice();let u=e.slice(),[i]=u.splice(o,1);return u.splice(s,0,i),u}function V(e,n,t){let r=e.length;if(n<0||n>=r)throw new RangeError(`swap: index ${n} out of range`);if(t<0||t>=r)throw new RangeError(`swap: index ${t} out of range`);if(n===t)return e.slice();let o=e.slice();return o[n]=e[t],o[t]=e[n],o}function J(e,n,t="asc"){return T(e,{indices:n,order:t})}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import type { AnyObject, SelectorFor } from './types.js';
|
|
2
|
+
export type SortOrder = 'asc' | 'desc';
|
|
3
|
+
/**
|
|
4
|
+
* Options for `sort()`.
|
|
5
|
+
*
|
|
6
|
+
* @template T - Element type when sorting an array, or the record type.
|
|
7
|
+
*
|
|
8
|
+
* Array sorting
|
|
9
|
+
* sort(users, { by: 'name' })
|
|
10
|
+
* sort(users, { by: ['lastName', 'firstName'], order: ['asc', 'asc'] })
|
|
11
|
+
* sort(scores, { order: 'desc' })
|
|
12
|
+
* sort(items, { comparator: (a, b) => a.priority - b.priority })
|
|
13
|
+
*
|
|
14
|
+
* Record sorting (orders keys)
|
|
15
|
+
* sort(config, { priorityKeys: ['id', 'name'] })
|
|
16
|
+
*
|
|
17
|
+
* Deep / recursive
|
|
18
|
+
* sort(tree, { deep: true })
|
|
19
|
+
*/
|
|
20
|
+
export interface SortOptions<T = any> {
|
|
21
|
+
/**
|
|
22
|
+
* Key path(s) used to compare object array elements.
|
|
23
|
+
* Supports dot-notation for nested access: `'address.city'`.
|
|
24
|
+
* When multiple keys are given, they act as tie-breakers left-to-right.
|
|
25
|
+
* Only meaningful for object arrays; ignored for primitive arrays and records.
|
|
26
|
+
*/
|
|
27
|
+
by?: T extends AnyObject ? SelectorFor<T> | SelectorFor<T>[] : string | string[];
|
|
28
|
+
/**
|
|
29
|
+
* Sort direction. When `by` is an array you may supply a parallel array
|
|
30
|
+
* of directions — one per key. A single value applies to all keys.
|
|
31
|
+
* Default: `'asc'`.
|
|
32
|
+
*/
|
|
33
|
+
order?: SortOrder | SortOrder[];
|
|
34
|
+
/**
|
|
35
|
+
* Recursively sort nested arrays and plain-object values.
|
|
36
|
+
* Default: `false`.
|
|
37
|
+
*/
|
|
38
|
+
deep?: boolean;
|
|
39
|
+
/**
|
|
40
|
+
* For record-key sorting: these keys are placed first, in the given order,
|
|
41
|
+
* before the remaining keys are sorted alphabetically.
|
|
42
|
+
*/
|
|
43
|
+
priorityKeys?: string[];
|
|
44
|
+
/**
|
|
45
|
+
* Put `null` / `undefined` array elements at the end regardless of direction.
|
|
46
|
+
* Default: `true`.
|
|
47
|
+
*/
|
|
48
|
+
nullsLast?: boolean;
|
|
49
|
+
/** BCP 47 locale tag used for string comparison, e.g. `'en-US'`. */
|
|
50
|
+
locale?: string;
|
|
51
|
+
/** Additional options forwarded to `Intl.Collator` when comparing strings. */
|
|
52
|
+
localeOptions?: Intl.CollatorOptions;
|
|
53
|
+
/**
|
|
54
|
+
* Explicit index permutation for arrays.
|
|
55
|
+
* `indices[i]` is the source index in the input array that should appear at
|
|
56
|
+
* position `i` in the output.
|
|
57
|
+
*
|
|
58
|
+
* - Input elements not referenced by any index are appended at the end in
|
|
59
|
+
* their original relative order.
|
|
60
|
+
* - Out-of-range indices are silently skipped.
|
|
61
|
+
* - When combined with `order: 'desc'`, the permuted result is reversed.
|
|
62
|
+
*
|
|
63
|
+
* @example
|
|
64
|
+
* sort(['a','b','c'], { indices: [2, 0, 1] }) // ['c', 'a', 'b']
|
|
65
|
+
* sort(['a','b','c'], { indices: [1, 0] }) // ['b', 'a', 'c'] ('c' appended)
|
|
66
|
+
* sort(users, { indices: [3, 1, 0, 2] }) // explicit UI reorder
|
|
67
|
+
*/
|
|
68
|
+
indices?: number[];
|
|
69
|
+
/**
|
|
70
|
+
* Fully custom comparator. When supplied it overrides `by`, `order`, and
|
|
71
|
+
* locale settings; only `deep` and `priorityKeys` still apply.
|
|
72
|
+
*/
|
|
73
|
+
comparator?: (a: T, b: T) => number;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Sort an array of any element type.
|
|
77
|
+
*
|
|
78
|
+
* @example
|
|
79
|
+
* sort([3, 1, 2]) // [1, 2, 3]
|
|
80
|
+
* sort(['banana', 'apple', 'cherry']) // ['apple', 'banana', 'cherry']
|
|
81
|
+
* sort(users, { by: 'name' })
|
|
82
|
+
* sort(users, { by: ['role', 'name'], order: ['asc', 'desc'] })
|
|
83
|
+
* sort(items, { order: 'desc', deep: true })
|
|
84
|
+
*/
|
|
85
|
+
export declare function sort<T>(input: T[], options?: SortOptions<T>): T[];
|
|
86
|
+
/**
|
|
87
|
+
* Sort the keys of a plain-object record, returning a new object with the
|
|
88
|
+
* same entries but with keys in alphabetical order.
|
|
89
|
+
*
|
|
90
|
+
* @example
|
|
91
|
+
* sort({ z: 1, a: 2, m: 3 }) // { a: 2, m: 3, z: 1 }
|
|
92
|
+
* sort(config, { priorityKeys: ['id', 'name'] })
|
|
93
|
+
* sort(tree, { deep: true })
|
|
94
|
+
*/
|
|
95
|
+
export declare function sort<T extends Record<string, any>>(input: T, options?: SortOptions): T;
|
|
96
|
+
/**
|
|
97
|
+
* Sort an array of objects by one or more key paths, returning a new array.
|
|
98
|
+
* Shorthand for `sort(arr, { by: key, order })`.
|
|
99
|
+
*
|
|
100
|
+
* @example
|
|
101
|
+
* sortBy(users, 'name')
|
|
102
|
+
* sortBy(users, ['lastName', 'firstName'], 'asc')
|
|
103
|
+
* sortBy(products, 'price', 'desc')
|
|
104
|
+
*/
|
|
105
|
+
export declare function sortBy<T extends object>(arr: T[], by: T extends AnyObject ? SelectorFor<T> | SelectorFor<T>[] : string | string[], order?: SortOrder | SortOrder[], options?: Omit<SortOptions<T>, 'by' | 'order'>): T[];
|
|
106
|
+
/**
|
|
107
|
+
* Sort the keys of a record object, returning a new object.
|
|
108
|
+
* Shorthand for `sort(record, { order, priorityKeys, deep })`.
|
|
109
|
+
*
|
|
110
|
+
* @example
|
|
111
|
+
* sortKeys({ z: 1, a: 2 }) // { a: 2, z: 1 }
|
|
112
|
+
* sortKeys(obj, { priorityKeys: ['id', 'type'] })
|
|
113
|
+
* sortKeys(tree, { deep: true })
|
|
114
|
+
*/
|
|
115
|
+
export declare function sortKeys<T extends Record<string, any>>(record: T, options?: Pick<SortOptions, 'order' | 'priorityKeys' | 'deep' | 'locale' | 'localeOptions'>): T;
|
|
116
|
+
/**
|
|
117
|
+
* Move an element from one index to another, shifting the elements in between.
|
|
118
|
+
* Returns a new array; the original is not mutated.
|
|
119
|
+
*
|
|
120
|
+
* - Clamps `from` and `to` to valid array bounds.
|
|
121
|
+
* - When `from === to` the original array is returned as-is (same reference).
|
|
122
|
+
*
|
|
123
|
+
* @example
|
|
124
|
+
* move(['a','b','c','d'], 0, 2) // ['b','c','a','d'] (first → third)
|
|
125
|
+
* move(['a','b','c','d'], 3, 1) // ['a','d','b','c'] (last → second)
|
|
126
|
+
* move(users, fromIndex, toIndex)
|
|
127
|
+
*/
|
|
128
|
+
export declare function move<T>(arr: T[], from: number, to: number): T[];
|
|
129
|
+
/**
|
|
130
|
+
* Swap two elements by index, returning a new array.
|
|
131
|
+
* The original array is not mutated.
|
|
132
|
+
* Out-of-range indices throw a `RangeError`.
|
|
133
|
+
*
|
|
134
|
+
* @example
|
|
135
|
+
* swap(['a','b','c'], 0, 2) // ['c','b','a']
|
|
136
|
+
* swap(users, 1, 3)
|
|
137
|
+
*/
|
|
138
|
+
export declare function swap<T>(arr: T[], i: number, j: number): T[];
|
|
139
|
+
/**
|
|
140
|
+
* Reorder an array by providing the full desired sequence of source indices.
|
|
141
|
+
* Shorthand for `sort(arr, { indices })`.
|
|
142
|
+
*
|
|
143
|
+
* @example
|
|
144
|
+
* reorder(['a','b','c'], [2, 0, 1]) // ['c','a','b']
|
|
145
|
+
* reorder(tabs, newIndexOrder) // apply UI drag-and-drop result
|
|
146
|
+
* reorder(rows, [3,1,0,2], 'desc') // permute then reverse
|
|
147
|
+
*/
|
|
148
|
+
export declare function reorder<T>(arr: T[], indices: number[], order?: SortOrder): T[];
|
|
149
|
+
//# sourceMappingURL=sort.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sort.d.ts","sourceRoot":"","sources":["../../../src/lib/object/sort.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAIzD,MAAM,MAAM,SAAS,GAAG,KAAK,GAAG,MAAM,CAAC;AAEvC;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,WAAW,WAAW,CAAC,CAAC,GAAG,GAAG;IAClC;;;;;OAKG;IACH,EAAE,CAAC,EAAE,CAAC,SAAS,SAAS,GACpB,WAAW,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,GACjC,MAAM,GAAG,MAAM,EAAE,CAAC;IAEtB;;;;OAIG;IACH,KAAK,CAAC,EAAE,SAAS,GAAG,SAAS,EAAE,CAAC;IAEhC;;;OAGG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IAEf;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IAExB;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB,oEAAoE;IACpE,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,8EAA8E;IAC9E,aAAa,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC;IAErC;;;;;;;;;;;;;;OAcG;IACH,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IAEnB;;;OAGG;IACH,UAAU,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,MAAM,CAAC;CACrC;AA2OD;;;;;;;;;GASG;AACH,wBAAgB,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;AAEnE;;;;;;;;GAQG;AACH,wBAAgB,IAAI,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAChD,KAAK,EAAE,CAAC,EACR,OAAO,CAAC,EAAE,WAAW,GACpB,CAAC,CAAC;AAwBL;;;;;;;;GAQG;AACH,wBAAgB,MAAM,CAAC,CAAC,SAAS,MAAM,EACrC,GAAG,EAAE,CAAC,EAAE,EACR,EAAE,EAAE,CAAC,SAAS,SAAS,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,GAAG,MAAM,EAAE,EAC/E,KAAK,GAAE,SAAS,GAAG,SAAS,EAAU,EACtC,OAAO,GAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,IAAI,GAAG,OAAO,CAAM,GACjD,CAAC,EAAE,CAEL;AAED;;;;;;;;GAQG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACpD,MAAM,EAAE,CAAC,EACT,OAAO,GAAE,IAAI,CAAC,WAAW,EAAE,OAAO,GAAG,cAAc,GAAG,MAAM,GAAG,QAAQ,GAAG,eAAe,CAAM,GAC9F,CAAC,CAEH;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,CAAC,EAAE,CAY/D;AAED;;;;;;;;GAQG;AACH,wBAAgB,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,CAAC,EAAE,CAU3D;AAED;;;;;;;;GAQG;AACH,wBAAgB,OAAO,CAAC,CAAC,EACvB,GAAG,EAAE,CAAC,EAAE,EACR,OAAO,EAAE,MAAM,EAAE,EACjB,KAAK,GAAE,SAAiB,GACvB,CAAC,EAAE,CAEL"}
|
|
@@ -0,0 +1,298 @@
|
|
|
1
|
+
import { isPlainObject } from './utils.js';
|
|
2
|
+
// ─── Internal helpers ─────────────────────────────────────────────────────────
|
|
3
|
+
/** Read a value via dot-notation path, e.g. `'address.city'`. */
|
|
4
|
+
function getAtPath(obj, path) {
|
|
5
|
+
if (obj == null)
|
|
6
|
+
return undefined;
|
|
7
|
+
let cur = obj;
|
|
8
|
+
for (const segment of path.split('.')) {
|
|
9
|
+
if (cur == null)
|
|
10
|
+
return undefined;
|
|
11
|
+
cur = cur[segment];
|
|
12
|
+
}
|
|
13
|
+
return cur;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Natural, type-aware comparison.
|
|
17
|
+
* Returns negative / zero / positive like `Array.prototype.sort` expects.
|
|
18
|
+
* Handles: null/undefined (always pushed last), NaN, Date, boolean, number, string.
|
|
19
|
+
* Falls back to locale-aware string coercion for mixed / unknown types.
|
|
20
|
+
*/
|
|
21
|
+
function compareValues(a, b, locale, localeOptions) {
|
|
22
|
+
// null / undefined — treated as "greater than anything" so they sink to the end
|
|
23
|
+
const aN = a == null;
|
|
24
|
+
const bN = b == null;
|
|
25
|
+
if (aN && bN)
|
|
26
|
+
return 0;
|
|
27
|
+
if (aN)
|
|
28
|
+
return 1;
|
|
29
|
+
if (bN)
|
|
30
|
+
return -1;
|
|
31
|
+
// NaN — sink below null
|
|
32
|
+
const aNaN = typeof a === 'number' && Number.isNaN(a);
|
|
33
|
+
const bNaN = typeof b === 'number' && Number.isNaN(b);
|
|
34
|
+
if (aNaN && bNaN)
|
|
35
|
+
return 0;
|
|
36
|
+
if (aNaN)
|
|
37
|
+
return 1;
|
|
38
|
+
if (bNaN)
|
|
39
|
+
return -1;
|
|
40
|
+
// Date
|
|
41
|
+
if (a instanceof Date && b instanceof Date) {
|
|
42
|
+
return a.getTime() - b.getTime();
|
|
43
|
+
}
|
|
44
|
+
// Boolean (false < true)
|
|
45
|
+
if (typeof a === 'boolean' && typeof b === 'boolean') {
|
|
46
|
+
return (a === b ? 0 : a ? 1 : -1);
|
|
47
|
+
}
|
|
48
|
+
// Number (covers BigInt with coercion below)
|
|
49
|
+
if (typeof a === 'number' && typeof b === 'number') {
|
|
50
|
+
return a - b;
|
|
51
|
+
}
|
|
52
|
+
// String — locale-aware
|
|
53
|
+
if (typeof a === 'string' && typeof b === 'string') {
|
|
54
|
+
return a.localeCompare(b, locale, localeOptions);
|
|
55
|
+
}
|
|
56
|
+
// Fallback: coerce both to string
|
|
57
|
+
return String(a).localeCompare(String(b), locale, localeOptions);
|
|
58
|
+
}
|
|
59
|
+
/** Build a single numeric direction multiplier for the i-th sort key. */
|
|
60
|
+
function dirFor(order, i) {
|
|
61
|
+
const o = Array.isArray(order) ? (order[i] ?? 'asc') : (order ?? 'asc');
|
|
62
|
+
return o === 'desc' ? -1 : 1;
|
|
63
|
+
}
|
|
64
|
+
// ─── Core sort functions ──────────────────────────────────────────────────────
|
|
65
|
+
/**
|
|
66
|
+
* Sort a flat array of primitives, Dates, or mixed values using natural
|
|
67
|
+
* comparison. Respects `order`, `locale`, `localeOptions`, and `nullsLast`.
|
|
68
|
+
*/
|
|
69
|
+
function sortPrimitiveArray(arr, options) {
|
|
70
|
+
const { order, locale, localeOptions, nullsLast = true } = options;
|
|
71
|
+
const dir = dirFor(order, 0);
|
|
72
|
+
return arr.slice().sort((a, b) => {
|
|
73
|
+
const aN = a == null;
|
|
74
|
+
const bN = b == null;
|
|
75
|
+
if (aN && bN)
|
|
76
|
+
return 0;
|
|
77
|
+
if (aN)
|
|
78
|
+
return nullsLast ? 1 : -1;
|
|
79
|
+
if (bN)
|
|
80
|
+
return nullsLast ? -1 : 1;
|
|
81
|
+
return compareValues(a, b, locale, localeOptions) * dir;
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Sort an array of objects by one or more key paths.
|
|
86
|
+
* Keys are compared left-to-right; the next key is only consulted when all
|
|
87
|
+
* previous keys produced a tie.
|
|
88
|
+
*/
|
|
89
|
+
function sortObjectArray(arr, keys, options) {
|
|
90
|
+
const { order, locale, localeOptions, nullsLast = true, comparator } = options;
|
|
91
|
+
if (comparator) {
|
|
92
|
+
return arr.slice().sort(comparator);
|
|
93
|
+
}
|
|
94
|
+
return arr.slice().sort((a, b) => {
|
|
95
|
+
for (let i = 0; i < keys.length; i++) {
|
|
96
|
+
const aVal = getAtPath(a, keys[i]);
|
|
97
|
+
const bVal = getAtPath(b, keys[i]);
|
|
98
|
+
const aN = aVal == null;
|
|
99
|
+
const bN = bVal == null;
|
|
100
|
+
if (aN && bN)
|
|
101
|
+
continue;
|
|
102
|
+
if (aN)
|
|
103
|
+
return nullsLast ? 1 : -1;
|
|
104
|
+
if (bN)
|
|
105
|
+
return nullsLast ? -1 : 1;
|
|
106
|
+
const cmp = compareValues(aVal, bVal, locale, localeOptions);
|
|
107
|
+
if (cmp !== 0)
|
|
108
|
+
return cmp * dirFor(order, i);
|
|
109
|
+
}
|
|
110
|
+
return 0;
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Return a new plain object whose own keys are sorted alphabetically, with
|
|
115
|
+
* `priorityKeys` pinned to the front. Values are left untouched unless
|
|
116
|
+
* `deep` is set.
|
|
117
|
+
*/
|
|
118
|
+
function sortRecord(record, options) {
|
|
119
|
+
const { order, priorityKeys = [], locale, localeOptions, deep } = options;
|
|
120
|
+
const dir = dirFor(order, 0);
|
|
121
|
+
const prioritySet = new Set(priorityKeys);
|
|
122
|
+
const rest = Object.keys(record).filter((k) => !prioritySet.has(k));
|
|
123
|
+
rest.sort((a, b) => a.localeCompare(b, locale, localeOptions) * dir);
|
|
124
|
+
const ordered = [...priorityKeys.filter((k) => k in record), ...rest];
|
|
125
|
+
const result = {};
|
|
126
|
+
for (const key of ordered) {
|
|
127
|
+
result[key] = deep ? sortDeep(record[key], options) : record[key];
|
|
128
|
+
}
|
|
129
|
+
return result;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Recursively sort a value: sorts arrays in place (returning new array) and
|
|
133
|
+
* sorts record-object keys. Primitives and non-plain objects are returned
|
|
134
|
+
* unchanged.
|
|
135
|
+
*/
|
|
136
|
+
function sortDeep(value, options) {
|
|
137
|
+
if (Array.isArray(value)) {
|
|
138
|
+
// Deep-sort elements first, then sort the array itself
|
|
139
|
+
const deepSorted = value.map((item) => sortDeep(item, options));
|
|
140
|
+
return sortArrayValue(deepSorted, options);
|
|
141
|
+
}
|
|
142
|
+
if (isPlainObject(value)) {
|
|
143
|
+
return sortRecord(value, options);
|
|
144
|
+
}
|
|
145
|
+
return value;
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Apply an explicit index permutation to an array.
|
|
149
|
+
*
|
|
150
|
+
* `indices[i]` names the source index that appears at position `i` in the
|
|
151
|
+
* output. Input elements not named by any index are appended at the end in
|
|
152
|
+
* their original relative order. Out-of-range indices are ignored.
|
|
153
|
+
*/
|
|
154
|
+
function applyIndices(arr, indices) {
|
|
155
|
+
const len = arr.length;
|
|
156
|
+
const used = new Set();
|
|
157
|
+
const result = [];
|
|
158
|
+
for (const idx of indices) {
|
|
159
|
+
if (idx >= 0 && idx < len && !used.has(idx)) {
|
|
160
|
+
result.push(arr[idx]);
|
|
161
|
+
used.add(idx);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
// Append any elements not covered by the permutation
|
|
165
|
+
for (let i = 0; i < len; i++) {
|
|
166
|
+
if (!used.has(i))
|
|
167
|
+
result.push(arr[i]);
|
|
168
|
+
}
|
|
169
|
+
return result;
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Dispatch array sorting to the appropriate strategy based on the options
|
|
173
|
+
* present: explicit index permutation → value-based sort → direction-only.
|
|
174
|
+
*/
|
|
175
|
+
function sortArrayValue(arr, options) {
|
|
176
|
+
const { by, comparator, indices, order } = options;
|
|
177
|
+
// ── Explicit index permutation ───────────────────────────────────────────
|
|
178
|
+
if (indices) {
|
|
179
|
+
const permuted = applyIndices(arr, indices);
|
|
180
|
+
// order: 'desc' reverses the permuted result
|
|
181
|
+
return dirFor(order, 0) === -1 ? permuted.reverse() : permuted;
|
|
182
|
+
}
|
|
183
|
+
// ── Custom comparator ────────────────────────────────────────────────────
|
|
184
|
+
if (comparator) {
|
|
185
|
+
return arr.slice().sort(comparator);
|
|
186
|
+
}
|
|
187
|
+
// ── Key-based sort ───────────────────────────────────────────────────────
|
|
188
|
+
if (by) {
|
|
189
|
+
const keys = Array.isArray(by) ? by : [by];
|
|
190
|
+
return sortObjectArray(arr, keys, options);
|
|
191
|
+
}
|
|
192
|
+
// ── No key: object arrays are ordered by index position ──────────────────
|
|
193
|
+
// asc = natural order (unchanged)
|
|
194
|
+
// desc = reverse the array
|
|
195
|
+
const firstReal = arr.find((x) => x != null);
|
|
196
|
+
if (firstReal != null && isPlainObject(firstReal)) {
|
|
197
|
+
return dirFor(order, 0) === -1 ? arr.slice().reverse() : arr.slice();
|
|
198
|
+
}
|
|
199
|
+
// ── Primitive array ──────────────────────────────────────────────────────
|
|
200
|
+
return sortPrimitiveArray(arr, options);
|
|
201
|
+
}
|
|
202
|
+
export function sort(input, options = {}) {
|
|
203
|
+
const { deep } = options;
|
|
204
|
+
if (Array.isArray(input)) {
|
|
205
|
+
const items = deep
|
|
206
|
+
? input.map((item) => sortDeep(item, options))
|
|
207
|
+
: input;
|
|
208
|
+
return sortArrayValue(items, options);
|
|
209
|
+
}
|
|
210
|
+
if (isPlainObject(input)) {
|
|
211
|
+
return sortRecord(input, options);
|
|
212
|
+
}
|
|
213
|
+
return input;
|
|
214
|
+
}
|
|
215
|
+
// ─── Convenience helpers ──────────────────────────────────────────────────────
|
|
216
|
+
/**
|
|
217
|
+
* Sort an array of objects by one or more key paths, returning a new array.
|
|
218
|
+
* Shorthand for `sort(arr, { by: key, order })`.
|
|
219
|
+
*
|
|
220
|
+
* @example
|
|
221
|
+
* sortBy(users, 'name')
|
|
222
|
+
* sortBy(users, ['lastName', 'firstName'], 'asc')
|
|
223
|
+
* sortBy(products, 'price', 'desc')
|
|
224
|
+
*/
|
|
225
|
+
export function sortBy(arr, by, order = 'asc', options = {}) {
|
|
226
|
+
return sort(arr, { ...options, by, order });
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Sort the keys of a record object, returning a new object.
|
|
230
|
+
* Shorthand for `sort(record, { order, priorityKeys, deep })`.
|
|
231
|
+
*
|
|
232
|
+
* @example
|
|
233
|
+
* sortKeys({ z: 1, a: 2 }) // { a: 2, z: 1 }
|
|
234
|
+
* sortKeys(obj, { priorityKeys: ['id', 'type'] })
|
|
235
|
+
* sortKeys(tree, { deep: true })
|
|
236
|
+
*/
|
|
237
|
+
export function sortKeys(record, options = {}) {
|
|
238
|
+
return sort(record, options);
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Move an element from one index to another, shifting the elements in between.
|
|
242
|
+
* Returns a new array; the original is not mutated.
|
|
243
|
+
*
|
|
244
|
+
* - Clamps `from` and `to` to valid array bounds.
|
|
245
|
+
* - When `from === to` the original array is returned as-is (same reference).
|
|
246
|
+
*
|
|
247
|
+
* @example
|
|
248
|
+
* move(['a','b','c','d'], 0, 2) // ['b','c','a','d'] (first → third)
|
|
249
|
+
* move(['a','b','c','d'], 3, 1) // ['a','d','b','c'] (last → second)
|
|
250
|
+
* move(users, fromIndex, toIndex)
|
|
251
|
+
*/
|
|
252
|
+
export function move(arr, from, to) {
|
|
253
|
+
const len = arr.length;
|
|
254
|
+
if (len === 0)
|
|
255
|
+
return arr.slice();
|
|
256
|
+
const f = Math.max(0, Math.min(len - 1, from));
|
|
257
|
+
const t = Math.max(0, Math.min(len - 1, to));
|
|
258
|
+
if (f === t)
|
|
259
|
+
return arr.slice();
|
|
260
|
+
const result = arr.slice();
|
|
261
|
+
const [item] = result.splice(f, 1);
|
|
262
|
+
result.splice(t, 0, item);
|
|
263
|
+
return result;
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* Swap two elements by index, returning a new array.
|
|
267
|
+
* The original array is not mutated.
|
|
268
|
+
* Out-of-range indices throw a `RangeError`.
|
|
269
|
+
*
|
|
270
|
+
* @example
|
|
271
|
+
* swap(['a','b','c'], 0, 2) // ['c','b','a']
|
|
272
|
+
* swap(users, 1, 3)
|
|
273
|
+
*/
|
|
274
|
+
export function swap(arr, i, j) {
|
|
275
|
+
const len = arr.length;
|
|
276
|
+
if (i < 0 || i >= len)
|
|
277
|
+
throw new RangeError(`swap: index ${i} out of range`);
|
|
278
|
+
if (j < 0 || j >= len)
|
|
279
|
+
throw new RangeError(`swap: index ${j} out of range`);
|
|
280
|
+
if (i === j)
|
|
281
|
+
return arr.slice();
|
|
282
|
+
const result = arr.slice();
|
|
283
|
+
result[i] = arr[j];
|
|
284
|
+
result[j] = arr[i];
|
|
285
|
+
return result;
|
|
286
|
+
}
|
|
287
|
+
/**
|
|
288
|
+
* Reorder an array by providing the full desired sequence of source indices.
|
|
289
|
+
* Shorthand for `sort(arr, { indices })`.
|
|
290
|
+
*
|
|
291
|
+
* @example
|
|
292
|
+
* reorder(['a','b','c'], [2, 0, 1]) // ['c','a','b']
|
|
293
|
+
* reorder(tabs, newIndexOrder) // apply UI drag-and-drop result
|
|
294
|
+
* reorder(rows, [3,1,0,2], 'desc') // permute then reverse
|
|
295
|
+
*/
|
|
296
|
+
export function reorder(arr, indices, order = 'asc') {
|
|
297
|
+
return sort(arr, { indices, order });
|
|
298
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function b(e){if(typeof e!="object"||e===null)return!1;let n=Object.getPrototypeOf(e);return n===Object.prototype||n===null}function S(e,n){if(e==null)return;let t=e;for(let r of n.split(".")){if(t==null)return;t=t[r]}return t}function A(e,n,t,r){let s=e==null,o=n==null;if(s&&o)return 0;if(s)return 1;if(o)return-1;let u=typeof e=="number"&&Number.isNaN(e),i=typeof n=="number"&&Number.isNaN(n);return u&&i?0:u?1:i?-1:e instanceof Date&&n instanceof Date?e.getTime()-n.getTime():typeof e=="boolean"&&typeof n=="boolean"?e===n?0:e?1:-1:typeof e=="number"&&typeof n=="number"?e-n:typeof e=="string"&&typeof n=="string"?e.localeCompare(n,t,r):String(e).localeCompare(String(n),t,r)}function y(e,n){return(Array.isArray(e)?e[n]??"asc":e??"asc")==="desc"?-1:1}function x(e,n){let{order:t,locale:r,localeOptions:s,nullsLast:o=!0}=n,u=y(t,0);return e.slice().sort((i,c)=>{let l=i==null,a=c==null;return l&&a?0:l?o?1:-1:a?o?-1:1:A(i,c,r,s)*u})}function h(e,n,t){let{order:r,locale:s,localeOptions:o,nullsLast:u=!0,comparator:i}=t;return i?e.slice().sort(i):e.slice().sort((c,l)=>{for(let a=0;a<n.length;a++){let d=S(c,n[a]),f=S(l,n[a]),p=d==null,m=f==null;if(p&&m)continue;if(p)return u?1:-1;if(m)return u?-1:1;let O=A(d,f,s,o);if(O!==0)return O*y(r,a)}return 0})}function R(e,n){let{order:t,priorityKeys:r=[],locale:s,localeOptions:o,deep:u}=n,i=y(t,0),c=new Set(r),l=Object.keys(e).filter(f=>!c.has(f));l.sort((f,p)=>f.localeCompare(p,s,o)*i);let a=[...r.filter(f=>f in e),...l],d={};for(let f of a)d[f]=u?T(e[f],n):e[f];return d}function T(e,n){if(Array.isArray(e)){let t=e.map(r=>T(r,n));return j(t,n)}return b(e)?R(e,n):e}function w(e,n){let t=e.length,r=new Set,s=[];for(let o of n)o>=0&&o<t&&!r.has(o)&&(s.push(e[o]),r.add(o));for(let o=0;o<t;o++)r.has(o)||s.push(e[o]);return s}function j(e,n){let{by:t,comparator:r,indices:s,order:o}=n;if(s){let i=w(e,s);return y(o,0)===-1?i.reverse():i}if(r)return e.slice().sort(r);if(t){let i=Array.isArray(t)?t:[t];return h(e,i,n)}let u=e.find(i=>i!=null);return u!=null&&b(u)?y(o,0)===-1?e.slice().reverse():e.slice():x(e,n)}function g(e,n={}){let{deep:t}=n;if(Array.isArray(e)){let r=t?e.map(s=>T(s,n)):e;return j(r,n)}return b(e)?R(e,n):e}function $(e,n,t="asc",r={}){return g(e,{...r,by:n,order:t})}function C(e,n={}){return g(e,n)}function F(e,n,t){let r=e.length;if(r===0)return e.slice();let s=Math.max(0,Math.min(r-1,n)),o=Math.max(0,Math.min(r-1,t));if(s===o)return e.slice();let u=e.slice(),[i]=u.splice(s,1);return u.splice(o,0,i),u}function E(e,n,t){let r=e.length;if(n<0||n>=r)throw new RangeError(`swap: index ${n} out of range`);if(t<0||t>=r)throw new RangeError(`swap: index ${t} out of range`);if(n===t)return e.slice();let s=e.slice();return s[n]=e[t],s[t]=e[n],s}function P(e,n,t="asc"){return g(e,{indices:n,order:t})}export{F as move,P as reorder,g as sort,$ as sortBy,C as sortKeys,E as swap};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var U=Object.defineProperty;var re=Object.getOwnPropertyDescriptor;var se=Object.getOwnPropertyNames;var ae=Object.prototype.hasOwnProperty;var ie=(e,n)=>{for(var r in n)U(e,r,{get:n[r],enumerable:!0})},oe=(e,n,r,a)=>{if(n&&typeof n=="object"||typeof n=="function")for(let s of se(n))!ae.call(e,s)&&s!==r&&U(e,s,{get:()=>n[s],enumerable:!(a=re(n,s))||a.enumerable});return e};var le=e=>oe(U({},"__esModule",{value:!0}),e);var Ie={};ie(Ie,{camelCaseKeys:()=>W,deepTransform:()=>we,flatten:()=>te,kebabCaseKeys:()=>_,mapKeys:()=>Ke,mapPath:()=>Fe,mapValues:()=>Se,renameKeys:()=>be,snakeCaseKeys:()=>N,structureByKeys:()=>ve,transformKeysAtPath:()=>Pe,transformPath:()=>ke,transformValues:()=>Oe,unflatten:()=>ne});module.exports=le(Ie);var m=e=>e==null||Array.isArray(e)||typeof e=="function"||e instanceof Date||e instanceof RegExp||e instanceof Map||e instanceof Set||e instanceof Error?!1:typeof e=="object";var w=(e,n,r,a)=>{if(r>a)return;if(n.length===0)return e;let s=n[0],i=n.slice(1);if(s.type==="descendant"){let o=w(e,i,r+1,a);if(o!==void 0)return o;if(e&&typeof e=="object")if(Array.isArray(e)){let t=[];for(let f=0;f<e.length;f++){let l=w(e[f],n,r+1,a);l!==void 0&&(t[f]=l)}return t.length>0?t:void 0}else{let t={};for(let f in e)if(e.hasOwnProperty(f)){let l=w(e[f],n,r+1,a);l!==void 0&&(t[f]=l)}return Object.keys(t).length>0?t:void 0}return}switch(s.type){case"property":if(m(e)&&s.value&&String(s.value)in e){let o=e[String(s.value)],t=w(o,i,r+1,a);if(t!==void 0)return{[String(s.value)]:t}}break;case"index":if(Array.isArray(e)){let o=s.value;if(o>=0&&o<e.length){let t=w(e[o],i,r+1,a);if(t!==void 0){let f=new Array(e.length).filter(l=>l!==void 0);return f[o]=t,f}}}else if(e&&typeof e=="object"){let o=String(s.value);if(o in e){let t=w(e[o],i,r+1,a);if(t!==void 0)return{[o]:t}}}break;case"wildcard":if(e&&typeof e=="object")if(Array.isArray(e)){let o=[],t=!1;for(let f=0;f<e.length;f++){let l=w(e[f],i,r+1,a);l!==void 0&&(o[f]=l,t=!0)}return t?o:void 0}else{let o={},t=!1;for(let f in e)if(e.hasOwnProperty(f)){let l=w(e[f],i,r+1,a);l!==void 0&&(o[f]=l,t=!0)}return t?o:void 0}break;case"slice":if(Array.isArray(e)){let[o,t]=s.value,f=Math.max(0,o),l=Math.min(e.length,t===1/0?e.length:t),y=[],A=!1;for(let p=f;p<l;p++){let g=w(e[p],i,r+1,a);g!==void 0&&(y[p]=g,A=!0)}return A?y:void 0}break;case"union":if(Array.isArray(e)){let o=s.value,t=[],f=!1;for(let l of o)if(l>=0&&l<e.length){let y=w(e[l],i,r+1,a);y!==void 0&&(t[l]=y,f=!0)}return f?t:void 0}break;case"filter":if(Array.isArray(e)){let o=s.value,t=[],f=!1;for(let l=0;l<e.length;l++)if(o(e[l])){let y=w(e[l],i,r+1,a);y!==void 0&&(t[l]=y,f=!0)}return f?t:void 0}break}};var q=require("@fluixi/utils/primitive"),B=require("@fluixi/utils/object"),fe=require("@fluixi/utils/array"),ye=require("@fluixi/utils/functions");function L(e){let n=typeof e;return e===null||n==="string"||n==="number"||n==="boolean"||n==="symbol"||n==="bigint"||n==="undefined"||(0,q.isDate)(e)}var I=(e,n)=>{if(e==null||typeof e!="object")return e;if(e instanceof Date)return new Date(e.getTime());if(e instanceof RegExp)return new RegExp(e.source,e.flags);if(e instanceof Map){let r=new Map;return e.forEach((a,s)=>{(!n||!n.some(i=>i.toString()===s.toString()))&&r.set(s,I(a))}),r}if(e instanceof Set){let r=new Set;return e.forEach(a=>{r.add(I(a))}),r}if(Array.isArray(e))return Array.from(e).map(r=>I(r));if(m(e)){let r={};for(let s in e)Object.prototype.hasOwnProperty.call(e,s)&&(!n||!n.some(i=>i.toString()===s.toString()))&&(r[s]=I(e[s]));let a=Object.getOwnPropertySymbols(e);for(let s of a)(!n||!n.some(i=>i.toString()===s.toString()))&&(r[s]=I(e[s]));return r}return e};var z=(e,n)=>e===n,V=(e,n)=>{if(e.length!==n.length)return!1;for(let r=0;r<e.length;r++)if(Array.isArray(e[r])&&Array.isArray(n[r])){if(!V(e[r],n[r]))return!1}else if(m(e[r])&&m(n[r])){if(!J(e[r],n[r]))return!1}else if(e[r]!==n[r])return!1;return!0},J=(e,n)=>{let r=Object.keys(e),a=Object.keys(n);if(r.length!==a.length)return!1;for(let s of r){if(!(s in n))return!1;let i=e[s],o=n[s];if(Array.isArray(i)&&Array.isArray(o)){if(!V(i,o))return!1}else if(m(i)&&m(o)){if(!J(i,o))return!1}else if(i!==o)return!1}return!0},Z=(e,n,r={})=>{let{includeDeleted:a=!1,includeAdded:s=!0,deepArrayComparison:i=!0,equalityFn:o=z,preserveStructure:t=!1}=r;if(e==null&&n==null)return{};if(e==null)return s?{...n}:{};if(n==null){if(a){let y={};for(let A in e)y[A]=void 0;return y}return{}}if(!m(e)||!m(n))return o(e,n)?{}:n;let f={},l=new Set;for(let y in n){l.add(y);let A=e[y],p=n[y];if(!(y in e)){s&&(f[y]=p);continue}if(Array.isArray(A)&&Array.isArray(p)){i?V(A,p)?t&&(f[y]=void 0):f[y]=p:A!==p?f[y]=p:t&&(f[y]=void 0);continue}if(m(A)&&m(p)){let g=Z(A,p,r);Object.keys(g).length>0?f[y]=g:t&&(f[y]=void 0);continue}o(A,p)?t&&(f[y]=void 0):f[y]=p}if(a)for(let y in e)l.has(y)||(f[y]=void 0);return f},C=(e,n,r={})=>{let a=[],s=[],i=[],o={},{includeDeleted:t=!1,includeAdded:f=!0,deepArrayComparison:l=!0,equalityFn:y=z}=r;if(Array.isArray(e)&&Array.isArray(n)){let g=Math.max(e.length,n.length),c=[],d=!1;for(let u=0;u<g;u++){let T=`[${u}]`;if(u>=e.length)a.push(T),c[u]=n[u],d=!0;else if(u>=n.length)s.push(T),d=!0;else{let x=e[u],h=n[u];m(x)&&m(h)||Array.isArray(x)&&Array.isArray(h)?C(x,h,r).hasChanges?(i.push(T),c[u]=h,d=!0):c[u]=x:y(x,h)?c[u]=x:(i.push(T),c[u]=h,d=!0)}}return{changes:d?c:{},added:a,deleted:s,modified:i,hasChanges:d||s.length>0}}let A=(g,c,d="")=>{let u={added:[],deleted:[],modified:[]};if(Array.isArray(g)&&Array.isArray(c)){let T=Math.max(g.length,c.length);for(let x=0;x<T;x++){let h=d?`${d}[${x}]`:`[${x}]`;if(x>=g.length)u.added.push(h);else if(x>=c.length)u.deleted.push(h);else{let S=g[x],K=c[x];if(m(S)&&m(K)){let b=A(S,K,h);u.added.push(...b.added),u.deleted.push(...b.deleted),u.modified.push(...b.modified)}else if(Array.isArray(S)&&Array.isArray(K)){let b=A(S,K,h);u.added.push(...b.added),u.deleted.push(...b.deleted),u.modified.push(...b.modified)}else S!==K&&u.modified.push(h)}}return u}if(m(g)&&m(c)){let T=new Set([...Object.keys(g||{}),...Object.keys(c||{})]);for(let x of T){let h=g?.[x],S=c?.[x],K=d?`${d}.${x}`:x;if(!(x in(g||{})))u.added.push(K);else if(!(x in(c||{})))u.deleted.push(K);else if(Array.isArray(h)&&Array.isArray(S)){if(!V(h,S)){let b=A(h,S,K);u.added.push(...b.added),u.deleted.push(...b.deleted),u.modified.push(...b.modified)}}else if(m(h)&&m(S)){let b=A(h,S,K);u.added.push(...b.added),u.deleted.push(...b.deleted),u.modified.push(...b.modified)}else h!==S&&u.modified.push(K)}}return u};if(e==null&&n==null)return{changes:{},added:a,deleted:s,modified:i,hasChanges:!1};if(e==null){if(f&&n)for(let g in n)a.push(g),o[g]=n[g];return{changes:o,added:a,deleted:s,modified:i,hasChanges:a.length>0}}if(n==null){if(t)for(let g in e)s.push(g),o[g]=void 0;return{changes:o,added:a,deleted:s,modified:i,hasChanges:s.length>0}}let p=new Set;for(let g in n){p.add(g);let c=e[g],d=n[g];if(!(g in e)){f&&(a.push(g),o[g]=d);continue}let u=!1;if(Array.isArray(c)&&Array.isArray(d)){if(u=l?!V(c,d):c!==d,u){let T=A(c,d,g);a.push(...T.added),s.push(...T.deleted),i.push(...T.modified),o[g]=d}}else if(m(c)&&m(d)){let T=Z(c,d,r);if(u=Object.keys(T).length>0,u){let x=A(c,d,g);a.push(...x.added),s.push(...x.deleted),i.push(...x.modified),o[g]=T}}else u=!y(c,d),u&&(i.push(g),o[g]=d)}for(let g in e)p.has(g)||(s.push(g),o[g]=void 0);return{changes:o,added:a,deleted:s,modified:i,hasChanges:a.length>0||s.length>0||i.length>0}};function ue(e){return!!(e&&(e.diff||e.changes)&&(e.modified||e.deleted||e.hasChanges))}var O=(e,n,r)=>{if(!ue(n)){let u=n,T=r||!1;if(Array.isArray(e)&&Array.isArray(u)){let h=T?e:[...e];u.length<h.length&&(h.length=u.length);for(let S=0;S<u.length;S++){let K=u[S];K!==void 0&&(m(h[S])&&m(K)||Array.isArray(h[S])&&Array.isArray(K)?h[S]=O(h[S],K,T):h[S]=K)}return h}if(!m(e))return u;if(!m(u))return e;let x=T?e:{...e};for(let h in u){let S=u[h];S===void 0?delete x[h]:Array.isArray(x[h])&&Array.isArray(S)||m(x[h])&&m(S)?x[h]=O(x[h],S,T):x[h]=S}return x}let{diff:a,added:s=[],deleted:i=[],modified:o=[],changes:t,keepRef:f}=n,l=r!==void 0?r:f,y=t||a;if(!y)return e;let A=new Set(s),p=new Set(i),g=new Set(o),c=u=>{if(s.length===0&&i.length===0&&o.length===0)return!0;let T=u.split(/[.\[\]]+/).filter(Boolean);for(let x=0;x<=T.length;x++){let h=T.slice(0,x).join("."),S=T.slice(0,x).map((K,b)=>/^\d+$/.test(K)?`[${K}]`:b>0?`.${K}`:K).join("");if(A.has(h)||A.has(S)||p.has(h)||p.has(S)||g.has(h)||g.has(S))return!0}return!1};if(Array.isArray(e)&&Array.isArray(y)){let u=l?e:[...e];u.length=y.length;for(let T=0;T<y.length;T++){let x=`[${T}]`,h=y[T];h!==void 0&&c(x)&&(m(u[T])&&m(h)||Array.isArray(u[T])&&Array.isArray(h)?u[T]=O(u[T],h,l):u[T]=h)}return u}if(!m(e))return y;if(!m(y))return e;let d=l?e:{...e};for(let u of i)u.includes(".")||u.includes("[")||c(u)&&delete d[u];for(let u in y){let T=y[u];c(u)&&(T===void 0?delete d[u]:Array.isArray(d[u])&&Array.isArray(T)||m(d[u])&&m(T)?d[u]=O(d[u],T,l):d[u]=T)}return d};var v=(e,n={})=>{let{type:r="auto",throwOnError:a=!1}=n;if(!e||typeof e!="string")return[];let s=[],i="",o=!1,t=!1,f="",l="",y=0,p=r==="auto"?(c=>c.includes("..")?"descendant":c.includes("[?(")?"filter":c.includes("[:")||c.includes("[0:")?"slice":c.includes("[,")||c.includes("[0,1]")?"union":c.includes("[*]")||c.includes(".*.")?"wildcard":c.includes("[]")?"array-wildcard":c.includes("[")&&c.includes("]")?"bracket":"dot")(e):r,g=c=>{let d=c.trim();if(d==="*"||d==="")return{type:"wildcard",value:d===""?"[]":"*",raw:d===""?"[]":c};if(d==="[]")return{type:"wildcard",value:"[]",raw:c};if(/^-?\d+$/.test(d))return{type:"index",value:parseInt(d,10),raw:c};if(d.includes(":")){let u=d.split(":").map(h=>h.trim()),T=u[0]===""?0:parseInt(u[0],10),x=u[1]===""?1/0:parseInt(u[1],10);if(isNaN(T)||isNaN(x)){if(a)throw new Error(`Invalid slice notation: ${c}`);return{type:"wildcard",value:"*",raw:c}}return{type:"slice",value:[T,x],raw:c}}if(d.includes(",")){let u=d.split(",").map(T=>{let x=parseInt(T.trim(),10);return isNaN(x)?-1:x}).filter(T=>T>=0);if(u.length===0){if(a)throw new Error(`Invalid union notation: ${c}`);return{type:"wildcard",value:"*",raw:c}}return{type:"union",value:u,raw:c}}if(d.startsWith("?(")&&d.endsWith(")")){let u=d.slice(2,-1);try{return{type:"filter",value:ce(u),raw:c}}catch(T){if(a)throw T;return{type:"wildcard",value:"*",raw:c}}}return d.startsWith('"')&&d.endsWith('"')||d.startsWith("'")&&d.endsWith("'")?{type:"property",value:d.slice(1,-1),raw:c}:{type:"property",value:d,raw:c}};for(let c=0;c<e.length;c++){let d=e[c],u=e[c+1];if((d==='"'||d==="'")&&!t){t=!0,f=d;continue}else if(d===f&&t){t=!1,f="",d==='"'||d==="'"||(o?l+=d:i+=d);continue}if(t){o?l+=d:i+=d;continue}if(d==="["&&!o){i&&(s.push({type:"property",value:i,raw:i}),i=""),o=!0,l="";continue}if(d==="]"&&o&&!t){o=!1;let x=g(l);s.push(x);continue}let T=s.length>0?s[s.length-1]:null;if(d==="."&&!o&&!t){if(u==="."){let x=e.split("..")[0];s.push({type:"property",value:x,raw:x}),s.push({type:"descendant",value:"..",raw:".."}),c++}else i&&(i==="*"?s.push({type:"wildcard",value:i,raw:i}):s.push({type:"property",value:i,raw:i}),i="");continue}if(o)l+=d;else if(T&&T.type!=="descendant")i+=d;else{let x=e.split(T?.raw)[1];x!==void 0?i=x:i+=d}}return i&&s.push({type:"property",value:i,raw:i}),s.map(c=>{if(c.type==="property"&&typeof c.value=="string"&&/^-?\d+$/.test(c.value)){let d=parseInt(c.value,10);if(!isNaN(d))return{...c,type:"index",value:d}}return c})},ce=e=>{let n=e.replace(/@\.([a-zA-Z_$][\w$]*)/g,(r,a)=>`item.${a}`).replace(/@/g,"item");try{return new Function("item",`return ${n}`)}catch{throw new Error(`Invalid filter expression: ${e}`)}};var Q=(e,n,r)=>{let a=v(n),s=e;for(let i=0;i<a.length;i++){let o=a[i],t=i===a.length-1;switch(o.type){case"property":if(t)s[String(o.value)]=r;else{if(!s[String(o.value)]){let l=a[i+1];s[String(o.value)]=l.type==="index"||l.type==="slice"||l.type==="union"||l.type==="wildcard"?[]:{}}s=s[String(o.value)]}break;case"index":Array.isArray(s)||(s=[]);let f=o.value;if(t){if(f>=s.length)for(let l=s.length;l<=f;l++)s.push(void 0);s[f]=r}else{if(!s[f]){let l=a[i+1];s[f]=l.type==="index"||l.type==="slice"||l.type==="union"||l.type==="wildcard"?[]:{}}s=s[f]}break;case"wildcard":if(Array.isArray(s))if(t)for(let l=0;l<s.length;l++)s[l]=r;else{let l=a[i+1];for(let y=0;y<s.length;y++)s[y]||(s[y]=l.type==="index"||l.type==="slice"||l.type==="union"||l.type==="wildcard"?[]:{});s.length>0&&(s=s[0])}break}}};function $(e,n,r={}){let{preserveStructure:a,multiple:s,throwOnError:i=!1,defaultValue:o,maxDepth:t=20}=r;if(!e||typeof e!="object")return o;if(!n)return e;if(Array.isArray(n))if(a){let y={};for(let A of n){let p=$(e,A,{...r,preserveStructure:!1});p!==void 0&&Q(y,A,p)}return y}else return n.map(y=>$(e,y,{...r,preserveStructure:!1}));let f=v(n,{...r,throwOnError:i});if(f.length===0)return e;if(typeof a>"u"||a===!1){let y=F(e,n);return s===!1&&Array.isArray(y)?y[0]:y===void 0&&o!==void 0?o:y}let l=w(e,f,0,t);return l===void 0&&o!==void 0?o:l}function ee(e,n,r,a,s){let i=I(e),o=[];if(typeof n<"u"&&o.push(n),typeof r<"u"&&o.push(r),typeof a<"u"&&o.push(a),typeof s<"u"&&o.push(s),L(i))return typeof n=="function"?n(i):n;if(o.length===1){if(typeof o[0]=="function")return me(i,o[0]);if(Array.isArray(o[0])){if(Array.isArray(i))if(n.length===0)for(let t=0;t<i.length;t++)i.pop();else return C([...i],[...o[0]]).hasChanges&&O(i,[...o[0]],!0),i}else typeof o[0]=="object"&&!Array.isArray(o[0])?typeof i=="object"&&!Array.isArray(i)&&O(i,o[0],!0):i=o[0];return i}if(Array.isArray(i)){if(typeof n=="string"&&(pe(r)||typeof r=="string")&&o.length===3){if(Array.isArray(r)){for(let t=0;t<r.length;t++)P(i,n,a,r[t]);return i}return P(i,n,a,r)}if(typeof n=="string"&&typeof r=="function"&&o.length===2)return P(i,n,r)}if((typeof n=="string"||typeof n=="number")&&(o.length===2||o.length===3))return de(r)?j(i,n,r,a):typeof n=="number"?typeof a<"u"?P(i,`[${n}].${r}`,a):P(i,`[${n}]`,r,a):typeof r=="number"&&typeof a<"u"?E(i,n,r,a):Array.isArray(r)&&r.length>0&&r.every(t=>typeof t=="number")?R(i,n,r,a):typeof a<"u"&&typeof r=="function"?M(i,n,r,a):P(i,n,r,a);if(typeof n=="string"&&typeof r=="number"){if(o.length===3)return E(i,n,r,a);if(o.length===4)return ge(i,n,r,a,s)}if(typeof n=="string"&&Array.isArray(r)){if(o.length===3)return R(i,n,r,a);if(o.length===4)return Ae(i,n,r,a,s)}if(typeof n=="string"&&typeof r=="object"&&!Array.isArray(r)&&r!==null){let t=r;if("from"in t||"to"in t){if(o.length===3)return j(i,n,t,a);if(o.length===4)return Te(i,n,t,a,s)}}if(typeof n=="object"&&!Array.isArray(n)&&o.length===1)return O(i,n,!0);if(typeof n=="string"&&typeof r=="object"&&!Array.isArray(r)&&o.length===2)return he(i,n,r);if(typeof n=="string"&&typeof r=="function"){if(o.length===3)return M(i,n,r,a);if(o.length===4)return G(i,n,r,a,s)}if(typeof n=="function"&&typeof r=="string"){if(o.length===3)return xe(i,n,r,a);if(o.length===4)return G(i,r,n,a,s)}if(Array.isArray(n)){if(o.length===2&&typeof r=="object"&&!Array.isArray(r))return H(i,n,r);if(o.length===2)return H(i,n,r)}throw new Error(`Invalid set parameters: ${JSON.stringify(o)}`)}function D(e,n,r,a=!1){let s=v(e);if(s.length===0)return r;let i=s[s.length-1].type==="wildcard",o=s.some(f=>f.type==="wildcard")&&Array.isArray(n),t;if((i||o&&a||o&&s.length===2)&&Array.isArray(n))for(let f=0;f<n.length;f++){let l=typeof r=="function"?r(n[f]):typeof n[f]=="object"?O(n[f],r,!0):r;t||(t=[]),t.push(l)}return!i&&!t&&(t=typeof r=="function"?r(n):r),t}function de(e){return typeof e=="object"&&e!==null&&"from"in e&&"to"in e&&typeof e.from=="number"&&typeof e.to=="number"&&e.from<e.to&&e.from>=0&&e.to>0}function pe(e){return Array.isArray(e)&&e.every(n=>typeof n=="string")}function P(e,n,r,a){let s=v(n),i=F(e,n,{paths:s,createMissing:!0}),o;a&&typeof r=="function"&&(o=$(i,a));let f=D(n,a?o:i,r,Array.isArray(e));return a?k(e,`${n}.${a}`,f,{createMissing:!0}):k(e,n,f,{createMissing:!0})}function E(e,n,r,a){let s=F(e,n,{createMissing:!0});if(!Array.isArray(s))throw new Error(`Target at ${n} is not an array ${r}`);let i=structuredClone(s),o=D(n,i[r],a);if(r<0){let t=s.length+r;if(t<0)throw new Error(`Index ${r} is out of bounds`);return k(e,`${n}[${t}]`,o,{createMissing:!0})}return k(e,`${n}[${r}]`,o,{createMissing:!0})}var ge=(e,n,r,a,s)=>typeof a=="function"?P(e,`${n}[${r}]`,a):typeof a=="string"?P(e,`${n}[${r}]`,s,a):null,R=(e,n,r,a)=>{let s=F(e,n);if(!Array.isArray(s))throw new Error(`Target at ${n} is not an array`);for(let i of r)typeof i=="number"?E(e,n,i,a):typeof i=="string"&&P(e,n,a,i);return e},Ae=(e,n,r,a,s)=>R(e,n,r,o=>{let t=typeof s=="function"?s(o?F(o,a):void 0):s,f=o?{...o}:{};return k(f,a,t),f});function j(e,n,r,a){let s=F(e,n);if(!Array.isArray(s))throw new Error(`Target at ${n} is not an array`);let i=r.from??0,o=r.to??s.length-1,t=r.by??1,f=[];for(let l=i;l<=o;l+=t)l>=0&&l<s.length&&f.push(l);return R(e,n,f,a)}var Te=(e,n,r,a,s)=>j(e,n,r,o=>{let t=typeof s=="function"?s(o?F(o,a):void 0):s,f=o?{...o}:{};return k(f,a,t),f});function M(e,n,r,a){let s=F(e,n);if(!Array.isArray(s))throw new Error(`Target at ${n} is not an array`);let i=[],o=[...s];return s.forEach((t,f)=>{r(t,f)&&i.push(f)}),R(e,n,i,a)}function xe(e,n,r,a){let s=e;if(!Array.isArray(s))throw new Error(`Target at ${r} is not an array`);let i=[],o=[...s];return s.forEach((t,f)=>{t=k(t,r,a,{createMissing:!0})}),s}function G(e,n,r,a,s){return M(e,n,r,o=>{let t=typeof s=="function"?s(o?F(o,a):void 0):s,f=o?{...o}:{};return k(f,a,t),f})}function he(e,n,r){let a=F(e,n,{createMissing:!0}),s=O(a||{},r,!0);return k(e,n,s,{createMissing:!0})}function H(e,n,r){if(typeof r=="object"&&!Array.isArray(r)&&r!==null)for(let[a,s]of Object.entries(r))n.includes(a)&&k(e,a,s,{createMissing:!0});else for(let a of n){let s=D(a,F(e,a),r);k(e,a,s,{createMissing:!0})}return e}function F(e,n,r={}){let{createMissing:a=!1,add:s=!1,debug:i=!1}=r,o=v(n),t=e,f=!1,l="",y=n;if(typeof t=="object"&&!Array.isArray(t)&&y.length>0&&t[y])return t=t[y],t;for(let A=0;A<o.length;A++){let p=o[A],g=o.length>1?A===o.length-1:!1;if(t===null&&!a)return;let c=o[A+1];switch(p.type){case"property":if(t&&typeof t=="object")if(Array.isArray(t)){if(typeof p.value=="number"){let d=p.value;if(a&&d>=t.length)for(let u=t.length;u<=d;u++)t.push(void 0);if(a&&(t[d]===null||t[d]===void 0)&&(!g||f)&&(c?t[d]=c.type==="index"||c.type==="slice"||c.type==="union"||c.type==="wildcard"?[]:{}:t[d]=null,f=!1),t=t[d],c){f=!0;continue}}else s?t.push({[String(p.value)]:null}):t=t.map(d=>d[String(p.value)]);if(c)continue;return X(t)}else{if(t[l]&&l.split(".").length>=2){t=t[l];continue}if(a&&(t[String(p.value)]===null||t[String(p.value)]===void 0)&&(!g||f)&&(c?t[String(p.value)]=c.type==="index"||c.type==="slice"||c.type==="union"||c.type==="wildcard"?[]:{}:t[String(p.value)]=null,f=!1,t=t[String(p.value)],c)){f=!0;continue}if(t?(!t[String(p.value)]&&a&&(t[String(p.value)]=null),t=t[String(p.value)]):t={[String(p.value)]:null},c)continue}else if(a)t={},t[String(p.value)]=c.type==="index"||c.type==="slice"||c.type==="union"||c.type==="wildcard"||r.type==="array"?[]:{},t=t[String(p.value)];else return;break;case"index":case"wildcard":if(Array.isArray(t)){if(p.type==="index"){let d=p.value;if(d<0){t=t[t.length-Math.abs(d)];continue}if(a&&(d>=t.length||t[d]==null||t[d]==null)&&!g){for(let u=t.length;u<=d;u++)t.push(void 0);c&&(t[d]=c.type==="index"||c.type==="slice"||c.type==="union"||c.type==="wildcard"?[]:{})}t=t[d]}else if(!g)continue}else if(a){let d=o[A+1];t=[];let u=p.value;for(let T=0;T<=u;T++)t.push(void 0);t[u]=d.type==="index"||d.type==="slice"||d.type==="union"||d.type==="wildcard"||r.type==="array"?[]:{},t=t[u]}else{if(p.type==="index"&&typeof t=="object"&&t&&t[String(p.value)]!==void 0){t=t[String(p.value)];continue}if(typeof t=="object"){t=Object.values(t);continue}return}break;default:return}}return X(t)}function X(e){return Array.isArray(e)?e.filter(n=>typeof n<"u"):e}var k=(e,n,r,a={})=>{if(n==="[*]")return O(e,r,!0);let{createMissing:s=!0}=a,i=v(n);if(i.length===0)return e;let o=i[i.length-1],t=e;for(let f=0;f<i.length-1;f++){let l=i[f];if(t==null){if(!s)return e;throw new Error(`Cannot navigate through null/undefined at segment ${f}`)}let y=i[f+1],A=y.type==="index"||y.type==="slice"||y.type==="union"||y.type==="wildcard";if(l.type==="property"){if(Array.isArray(t)&&typeof typeof l.value=="number"){let p=l.value;if(p<0)throw new Error(`Negative index ${p} not allowed`);if(p>=t.length&&s)for(let g=t.length;g<=p;g++)t.push(void 0);(t[p]===null||t[p]===void 0)&&s&&(t[p]=A?[]:{}),t=t[p]}else(t[String(l.value)]===null||t[String(l.value)]===void 0)&&s&&(t[String(l.value)]=A?[]:{}),typeof t=="object"&&!Array.isArray(t)&&(t=t[String(l.value)]);if(y)continue;break}else if(l.type==="index"||l.type==="wildcard"){if(!Array.isArray(t)){if(!s)return e;t=[]}if(l.type==="index"){let p=l.value;if(p<0)throw new Error(`Negative index ${p} not allowed`);if(p>=t.length&&s)for(let g=t.length;g<=p;g++)t.push(void 0);(t[p]===null||t[p]===void 0)&&s&&(t[p]=A?[]:void 0),t=t[p]}if(y)continue;break}else throw new Error(`Invalid segment type for set: ${l.type}`)}switch(o.type){case"property":if(Array.isArray(t)&&typeof o.value=="number"){let l=o.value;if(l<0)throw new Error(`Negative index ${l} not allowed`);if(l>=t.length)for(let y=t.length;y<=l;y++)t.push(void 0);Array.isArray(r)?t[l]=O(structuredClone(t[l]),r[l],!0):t[l]=r}else if(t||(t={}),Array.isArray(t)){let l=n.split("."),y;if(l.length>=2){l.shift();for(let A=0;A<t.length;A++)Array.isArray(r)?(y=Y(l.join("."),r[A]),t[A]=typeof t[A]=="object"?O(t[A],y,!0):y):(y=Y(l.join("."),r),t[A]=typeof t[A]=="object"?O(t[A],y,!0):y)}else y={[String(o.value)]:r}}else Array.isArray(r)&&r.length===0?typeof t[String(o.value)]>"u"?t[String(o.value)]=[]:t[String(o.value)]=[]:t[String(o.value)]=r;break;case"index":case"wildcard":if(!Array.isArray(t))throw new Error("Cannot use index on non-array for final segment");let f=o.value;if(o.type==="index"){if(f<0)throw new Error(`Negative index ${f} not allowed`);if(f>=t.length)for(let l=t.length;l<=f;l++)t.push(void 0);if(Array.isArray(r))if(typeof t[f]==typeof r[f])try{t[f]=O(I(t[f]),r[f],!0)}catch{throw Error("expected on array")}else t[f]=r;else t[f]=r}else if(o.type==="wildcard")if(Array.isArray(r))for(let l=0;l<t.length;l++)typeof t[l]=="object"?t[l]=O(t[l],r[l],!0):t[l]=r[l];else for(let l=0;l<t.length;l++)typeof t[l]=="object"?t[l]=O(t[l],r,!0):t[l]=r;break;default:throw new Error(`Invalid final segment type for set: ${o.type}`)}return e};var Y=(e,n)=>{let r=v(e);if(r.length===0)return n;let a=n;for(let s=r.length-1;s>=0;s--){let i=r[s];if(i.type==="property")a={[String(i.value)]:a};else if(i.type==="index"){let o=parseInt(String(i.value)),t=[];t[o]=a,a=t}else i.type==="wildcard"?Array.isArray(a)?a=a:a=[a]:i.type==="slice"?Array.isArray(a)||(a=[a]):i.type==="union"?Array.isArray(a)||(a=[a]):i.type==="filter"?Array.isArray(a)||(a=[a]):i.type==="descendant"&&(a=a)}return a};var me=(e,n)=>{let r=n(e);return O(e,r,!0)};function Se(e,n){if(!m(e))return{};let r={};for(let a in e)Object.prototype.hasOwnProperty.call(e,a)&&(r[a]=n(e[a],a,e));return r}function Ke(e,n){if(!m(e))return{};let r={};for(let a in e)if(Object.prototype.hasOwnProperty.call(e,a)){let s=n(a,e[a],e);r[s]=e[a]}return r}function W(e,n={deep:!0}){if(!m(e))return e;if(Array.isArray(e))return n.deep?e.map(a=>W(a,n)):e;let r={};for(let a in e)if(Object.prototype.hasOwnProperty.call(e,a)){let s=e[a],i=a.replace(/[-_]([a-z])/g,(o,t)=>t.toUpperCase()).replace(/^([A-Z])/,o=>o.toLowerCase());r[i]=n.deep&&m(s)?W(s,n):s}return r}function N(e,n={deep:!0}){if(!m(e))return e;if(Array.isArray(e))return n.deep?e.map(a=>N(a,n)):e;let r={};for(let a in e)if(Object.prototype.hasOwnProperty.call(e,a)){let s=e[a],i=a.replace(/[-]([a-z])/g,(o,t)=>`_${t}`).replace(/([a-z0-9])([A-Z])/g,"$1_$2").toLowerCase();r[i]=n.deep&&m(s)?N(s,n):s}return r}function _(e,n={deep:!0}){if(!m(e))return e;if(Array.isArray(e))return n.deep?e.map(a=>_(a,n)):e;let r={};for(let a in e)if(Object.prototype.hasOwnProperty.call(e,a)){let s=e[a],i=a.replace(/[_]([a-z])/g,(o,t)=>`-${t}`).replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase();r[i]=n.deep&&m(s)?_(s,n):s}return r}var te=(e,n={})=>{let{delimiter:r=".",includeArrays:a=!1,maxDepth:s=9}=n;if(Array.isArray(e))return e.map(t=>te(t,n));let i={},o=(t,f="",l=0)=>{if(l>s){i[f]=t;return}if(!m(t)&&!Array.isArray(t)){f&&(i[f]=t);return}if(Array.isArray(t))for(let y=0;y<t.length;y++){let A=f?`${f}[${y}]`:`[${y}]`;o(t[y],A,l+1)}else{for(let A in t){let p=f?`${f}${r}${A}`:A;o(t[A],p,l+1)}let y=Object.getOwnPropertySymbols(t);for(let A of y){let p=f?`${f}${r}${A.toString()}`:A.toString();o(t[A],p,l+1)}}};return o(e),i};function ne(e,n={}){let{delimiter:r=".",detectArrays:a=!0}=n,s={};for(let i in e)if(Object.prototype.hasOwnProperty.call(e,i)){let o=e[i],t=i.split(r),f=s;for(let y=0;y<t.length-1;y++){let A=t[y],p=t[y+1],g=a&&/^\d+$/.test(p);if(!(A in f))f[A]=g?[]:{};else if(g&&!Array.isArray(f[A])){let c={...f[A]};f[A]=[],Object.assign(f[A],c)}f=f[A]}let l=t[t.length-1];f[l]=o}if(a){let i=o=>{if(!m(o))return o;if(Array.isArray(o))return o.map(i);let t=Object.keys(o);if(t.length>0&&t.every((y,A)=>String(A)===y))return Object.values(o).map(i);let l={};for(let y in o)Object.prototype.hasOwnProperty.call(o,y)&&(l[y]=i(o[y]));return l};return i(s)}return s}function Oe(e,...n){if(!m(e)||n.length===0)return e;let r={...e};for(let a in r)if(Object.prototype.hasOwnProperty.call(r,a)){let s=r[a];for(let i of n)s=i(s);r[a]=s}return r}function be(e,n,r={}){if(!m(e))return e;let{removeUnmapped:a=!1}=r,s={};for(let i in e)Object.prototype.hasOwnProperty.call(e,i)&&(i in n?s[n[i]]=e[i]:a||(s[i]=e[i]));return s}function we(e,n={}){let{transformObject:r=t=>t,transformArray:a=t=>t,transformValue:s=t=>t,maxDepth:i=1/0}=n;function o(t,f=[],l=0){if(l>i)return t;if(Array.isArray(t)){let A=t.map((p,g)=>o(p,[...f,g.toString()],l+1));return a(A,f)}if(m(t)){let A={};for(let p in t)if(Object.prototype.hasOwnProperty.call(t,p)){let g=[...f,p];A[p]=o(t[p],g,l+1),!Array.isArray(t[p])&&!m(t[p])&&(A[p]=s(A[p],p,g))}return r(A,f)}let y=f.length>0?f[f.length-1]:"";return s(t,y,f)}return o(e)}function ve(e,n={}){return ne(e,n)}function ke(e,n,r,a={}){if(!m(e))return e;let s=JSON.parse(JSON.stringify(e)),{transformAll:i=!1}=a,o=Array.isArray(n)?n:[n];for(let l of o)if(l.includes("*")||l.includes("[")){let A=function(g,c=""){if(m(g)){if(Array.isArray(g)){g.forEach((d,u)=>{let T=c?`${c}[${u}]`:`[${u}]`;A(d,T)});return}for(let d in g)if(Object.prototype.hasOwnProperty.call(g,d)){let u=g[d],T=c?`${c}.${d}`:d;if(u===null||typeof u!="object"){let x=c?$(s,c):s,h=i?r(u,T,x):r(u,d,x);g[d]=h}else A(u,T)}}};var t=A;let y=$(s,l,{preserveStructure:!0});if(y===void 0)continue;A(y);let p=v(l);if(p.length>0){let g=p[0];g.type==="property"&&(s[String(g.value)]=y[String(g.value)])}}else{let A=function(p,g,c,d){if(c>=g.length)return p;let u=g[c];if(c===g.length-1){let x=c>0?A(p,g,c-1,g.slice(0,c).join(".")):p,h=i?r(x[u],d,x):r(x[u],u,x);return x[u]=h,x}let T=p[u]||{};return p[u]=A(T,g,c+1,d),p};var f=A;let y=l.split(".");A(s,y,0,l)}return s}function Fe(e,n,r,a={}){if(!m(e))return[];let{flatten:s=!0}=a,o=(Array.isArray(n)?n:[n]).map(t=>{let f=$(e,t);return f===void 0?[]:Array.isArray(f)?f.map((l,y)=>{let A=`${t}[${y}]`;return r(l,A,e)}):[r(f,t,e)]});return s?o.flat():o}function Pe(e,n,r,a={}){if(!m(e))return e;let s=JSON.parse(JSON.stringify(e)),{recursive:i=!1}=a,o=Array.isArray(n)?n:[n];for(let t of o){let f=t?$(s,t):s;if(!m(f))continue;let l=(y,A=t)=>{if(!m(y))return y;if(Array.isArray(y))return y.map((g,c)=>m(g)&&!Array.isArray(g)?l(g,`${A}[${c}]`):g);let p={};for(let g in y)if(Object.prototype.hasOwnProperty.call(y,g)){let c=r(g,y[g],A);i&&m(y[g])?p[c]=l(y[g],`${A}.${c}`):p[c]=y[g]}return p};if(Array.isArray(f))for(let y=0;y<f.length;y++)m(f[y])&&!Array.isArray(f[y])&&(f[y]=l(f[y],`${t}[${y}]`));else{let y=l(f);t?ee(s,t,y):(Object.keys(s).forEach(A=>{delete s[A]}),Object.assign(s,y))}}return s}
|