@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.
Files changed (354) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +73 -0
  3. package/dist/index.cjs +1 -0
  4. package/dist/index.d.ts +2 -0
  5. package/dist/index.d.ts.map +1 -0
  6. package/dist/index.js +1 -0
  7. package/dist/index.mjs +1 -0
  8. package/dist/lib/array/advanced.cjs +1 -0
  9. package/dist/lib/array/advanced.d.ts +1116 -0
  10. package/dist/lib/array/advanced.d.ts.map +1 -0
  11. package/dist/lib/array/advanced.js +2429 -0
  12. package/dist/lib/array/advanced.mjs +1 -0
  13. package/dist/lib/array/array.cjs +1 -0
  14. package/dist/lib/array/array.d.ts +6 -0
  15. package/dist/lib/array/array.d.ts.map +1 -0
  16. package/dist/lib/array/array.js +31 -0
  17. package/dist/lib/array/array.mjs +1 -0
  18. package/dist/lib/array/index.cjs +1 -0
  19. package/dist/lib/array/index.d.ts +4 -0
  20. package/dist/lib/array/index.d.ts.map +1 -0
  21. package/dist/lib/array/index.js +3 -0
  22. package/dist/lib/array/index.mjs +1 -0
  23. package/dist/lib/array/utils.cjs +1 -0
  24. package/dist/lib/array/utils.d.ts +100 -0
  25. package/dist/lib/array/utils.d.ts.map +1 -0
  26. package/dist/lib/array/utils.js +165 -0
  27. package/dist/lib/array/utils.mjs +1 -0
  28. package/dist/lib/color/color.cjs +1 -0
  29. package/dist/lib/color/color.d.ts +366 -0
  30. package/dist/lib/color/color.d.ts.map +1 -0
  31. package/dist/lib/color/color.js +722 -0
  32. package/dist/lib/color/color.mjs +1 -0
  33. package/dist/lib/color/constants.cjs +1 -0
  34. package/dist/lib/color/constants.d.ts +361 -0
  35. package/dist/lib/color/constants.d.ts.map +1 -0
  36. package/dist/lib/color/constants.js +358 -0
  37. package/dist/lib/color/constants.mjs +1 -0
  38. package/dist/lib/color/conversions.cjs +1 -0
  39. package/dist/lib/color/conversions.d.ts +166 -0
  40. package/dist/lib/color/conversions.d.ts.map +1 -0
  41. package/dist/lib/color/conversions.js +766 -0
  42. package/dist/lib/color/conversions.mjs +1 -0
  43. package/dist/lib/color/helpers.cjs +1 -0
  44. package/dist/lib/color/helpers.d.ts +75 -0
  45. package/dist/lib/color/helpers.d.ts.map +1 -0
  46. package/dist/lib/color/helpers.js +419 -0
  47. package/dist/lib/color/helpers.mjs +1 -0
  48. package/dist/lib/color/index.cjs +1 -0
  49. package/dist/lib/color/index.d.ts +12 -0
  50. package/dist/lib/color/index.d.ts.map +1 -0
  51. package/dist/lib/color/index.js +15 -0
  52. package/dist/lib/color/index.mjs +1 -0
  53. package/dist/lib/color/types.cjs +1 -0
  54. package/dist/lib/color/types.d.ts +179 -0
  55. package/dist/lib/color/types.d.ts.map +1 -0
  56. package/dist/lib/color/types.js +1 -0
  57. package/dist/lib/color/types.mjs +0 -0
  58. package/dist/lib/color/utils.cjs +1 -0
  59. package/dist/lib/color/utils.d.ts +199 -0
  60. package/dist/lib/color/utils.d.ts.map +1 -0
  61. package/dist/lib/color/utils.js +858 -0
  62. package/dist/lib/color/utils.mjs +1 -0
  63. package/dist/lib/compare/comparators.cjs +1 -0
  64. package/dist/lib/compare/comparators.d.ts +65 -0
  65. package/dist/lib/compare/comparators.d.ts.map +1 -0
  66. package/dist/lib/compare/comparators.js +210 -0
  67. package/dist/lib/compare/comparators.mjs +1 -0
  68. package/dist/lib/compare/index.cjs +1 -0
  69. package/dist/lib/compare/index.d.ts +2 -0
  70. package/dist/lib/compare/index.d.ts.map +1 -0
  71. package/dist/lib/compare/index.js +1 -0
  72. package/dist/lib/compare/index.mjs +1 -0
  73. package/dist/lib/crypto/hash.cjs +1 -0
  74. package/dist/lib/crypto/hash.d.ts +6 -0
  75. package/dist/lib/crypto/hash.d.ts.map +1 -0
  76. package/dist/lib/crypto/hash.js +53 -0
  77. package/dist/lib/crypto/hash.mjs +1 -0
  78. package/dist/lib/crypto/index.cjs +1 -0
  79. package/dist/lib/crypto/index.d.ts +2 -0
  80. package/dist/lib/crypto/index.d.ts.map +1 -0
  81. package/dist/lib/crypto/index.js +1 -0
  82. package/dist/lib/crypto/index.mjs +1 -0
  83. package/dist/lib/dom/events.cjs +1 -0
  84. package/dist/lib/dom/events.d.ts +159 -0
  85. package/dist/lib/dom/events.d.ts.map +1 -0
  86. package/dist/lib/dom/events.js +50 -0
  87. package/dist/lib/dom/events.mjs +1 -0
  88. package/dist/lib/dom/index.cjs +1 -0
  89. package/dist/lib/dom/index.d.ts +3 -0
  90. package/dist/lib/dom/index.d.ts.map +1 -0
  91. package/dist/lib/dom/index.js +2 -0
  92. package/dist/lib/dom/index.mjs +1 -0
  93. package/dist/lib/dom/utils.cjs +1 -0
  94. package/dist/lib/dom/utils.d.ts +6 -0
  95. package/dist/lib/dom/utils.d.ts.map +1 -0
  96. package/dist/lib/dom/utils.js +37 -0
  97. package/dist/lib/dom/utils.mjs +1 -0
  98. package/dist/lib/functions/functions.cjs +1 -0
  99. package/dist/lib/functions/functions.d.ts +329 -0
  100. package/dist/lib/functions/functions.d.ts.map +1 -0
  101. package/dist/lib/functions/functions.js +585 -0
  102. package/dist/lib/functions/functions.mjs +1 -0
  103. package/dist/lib/functions/index.cjs +1 -0
  104. package/dist/lib/functions/index.d.ts +3 -0
  105. package/dist/lib/functions/index.d.ts.map +1 -0
  106. package/dist/lib/functions/index.js +1 -0
  107. package/dist/lib/functions/index.mjs +1 -0
  108. package/dist/lib/functions/types.cjs +1 -0
  109. package/dist/lib/functions/types.d.ts +2 -0
  110. package/dist/lib/functions/types.d.ts.map +1 -0
  111. package/dist/lib/functions/types.js +1 -0
  112. package/dist/lib/functions/types.mjs +0 -0
  113. package/dist/lib/helpers.cjs +1 -0
  114. package/dist/lib/helpers.d.ts +13 -0
  115. package/dist/lib/helpers.d.ts.map +1 -0
  116. package/dist/lib/helpers.js +66 -0
  117. package/dist/lib/helpers.mjs +1 -0
  118. package/dist/lib/index.cjs +1 -0
  119. package/dist/lib/index.d.ts +6 -0
  120. package/dist/lib/index.d.ts.map +1 -0
  121. package/dist/lib/index.js +8 -0
  122. package/dist/lib/index.mjs +1 -0
  123. package/dist/lib/maths/constants.cjs +1 -0
  124. package/dist/lib/maths/constants.d.ts +84 -0
  125. package/dist/lib/maths/constants.d.ts.map +1 -0
  126. package/dist/lib/maths/constants.js +79 -0
  127. package/dist/lib/maths/constants.mjs +1 -0
  128. package/dist/lib/maths/fn/advanced.cjs +1 -0
  129. package/dist/lib/maths/fn/advanced.d.ts +149 -0
  130. package/dist/lib/maths/fn/advanced.d.ts.map +1 -0
  131. package/dist/lib/maths/fn/advanced.js +264 -0
  132. package/dist/lib/maths/fn/advanced.mjs +1 -0
  133. package/dist/lib/maths/fn/basic.cjs +1 -0
  134. package/dist/lib/maths/fn/basic.d.ts +182 -0
  135. package/dist/lib/maths/fn/basic.d.ts.map +1 -0
  136. package/dist/lib/maths/fn/basic.js +343 -0
  137. package/dist/lib/maths/fn/basic.mjs +1 -0
  138. package/dist/lib/maths/fn/complex.cjs +1 -0
  139. package/dist/lib/maths/fn/complex.d.ts +153 -0
  140. package/dist/lib/maths/fn/complex.d.ts.map +1 -0
  141. package/dist/lib/maths/fn/complex.js +383 -0
  142. package/dist/lib/maths/fn/complex.mjs +1 -0
  143. package/dist/lib/maths/fn/index.cjs +1 -0
  144. package/dist/lib/maths/fn/index.d.ts +10 -0
  145. package/dist/lib/maths/fn/index.d.ts.map +1 -0
  146. package/dist/lib/maths/fn/index.js +9 -0
  147. package/dist/lib/maths/fn/index.mjs +1 -0
  148. package/dist/lib/maths/fn/trigo.cjs +1 -0
  149. package/dist/lib/maths/fn/trigo.d.ts +147 -0
  150. package/dist/lib/maths/fn/trigo.d.ts.map +1 -0
  151. package/dist/lib/maths/fn/trigo.js +227 -0
  152. package/dist/lib/maths/fn/trigo.mjs +1 -0
  153. package/dist/lib/maths/fn/vector.cjs +1 -0
  154. package/dist/lib/maths/fn/vector.d.ts +512 -0
  155. package/dist/lib/maths/fn/vector.d.ts.map +1 -0
  156. package/dist/lib/maths/fn/vector.js +1136 -0
  157. package/dist/lib/maths/fn/vector.mjs +1 -0
  158. package/dist/lib/maths/formatter.cjs +1 -0
  159. package/dist/lib/maths/formatter.d.ts +35 -0
  160. package/dist/lib/maths/formatter.d.ts.map +1 -0
  161. package/dist/lib/maths/formatter.js +56 -0
  162. package/dist/lib/maths/formatter.mjs +1 -0
  163. package/dist/lib/maths/guards.cjs +1 -0
  164. package/dist/lib/maths/guards.d.ts +166 -0
  165. package/dist/lib/maths/guards.d.ts.map +1 -0
  166. package/dist/lib/maths/guards.js +315 -0
  167. package/dist/lib/maths/guards.mjs +1 -0
  168. package/dist/lib/maths/index.cjs +1 -0
  169. package/dist/lib/maths/index.d.ts +24 -0
  170. package/dist/lib/maths/index.d.ts.map +1 -0
  171. package/dist/lib/maths/index.js +29 -0
  172. package/dist/lib/maths/index.mjs +1 -0
  173. package/dist/lib/maths/parser.cjs +1 -0
  174. package/dist/lib/maths/parser.d.ts +20 -0
  175. package/dist/lib/maths/parser.d.ts.map +1 -0
  176. package/dist/lib/maths/parser.js +78 -0
  177. package/dist/lib/maths/parser.mjs +1 -0
  178. package/dist/lib/maths/random.cjs +1 -0
  179. package/dist/lib/maths/random.d.ts +27 -0
  180. package/dist/lib/maths/random.d.ts.map +1 -0
  181. package/dist/lib/maths/random.js +49 -0
  182. package/dist/lib/maths/random.mjs +1 -0
  183. package/dist/lib/maths/types/advanced.cjs +1 -0
  184. package/dist/lib/maths/types/advanced.d.ts +357 -0
  185. package/dist/lib/maths/types/advanced.d.ts.map +1 -0
  186. package/dist/lib/maths/types/advanced.js +5 -0
  187. package/dist/lib/maths/types/advanced.mjs +0 -0
  188. package/dist/lib/maths/types/basic.cjs +1 -0
  189. package/dist/lib/maths/types/basic.d.ts +95 -0
  190. package/dist/lib/maths/types/basic.d.ts.map +1 -0
  191. package/dist/lib/maths/types/basic.js +5 -0
  192. package/dist/lib/maths/types/basic.mjs +0 -0
  193. package/dist/lib/maths/types/index.cjs +1 -0
  194. package/dist/lib/maths/types/index.d.ts +4 -0
  195. package/dist/lib/maths/types/index.d.ts.map +1 -0
  196. package/dist/lib/maths/types/index.js +3 -0
  197. package/dist/lib/maths/types/index.mjs +0 -0
  198. package/dist/lib/maths/types/negative.cjs +1 -0
  199. package/dist/lib/maths/types/negative.d.ts +51 -0
  200. package/dist/lib/maths/types/negative.d.ts.map +1 -0
  201. package/dist/lib/maths/types/negative.js +5 -0
  202. package/dist/lib/maths/types/negative.mjs +0 -0
  203. package/dist/lib/maths/types/operations.cjs +1 -0
  204. package/dist/lib/maths/types/operations.d.ts +188 -0
  205. package/dist/lib/maths/types/operations.d.ts.map +1 -0
  206. package/dist/lib/maths/types/operations.js +6 -0
  207. package/dist/lib/maths/types/operations.mjs +0 -0
  208. package/dist/lib/object/clone.cjs +1 -0
  209. package/dist/lib/object/clone.d.ts +46 -0
  210. package/dist/lib/object/clone.d.ts.map +1 -0
  211. package/dist/lib/object/clone.js +104 -0
  212. package/dist/lib/object/clone.mjs +1 -0
  213. package/dist/lib/object/diff.cjs +1 -0
  214. package/dist/lib/object/diff.d.ts +203 -0
  215. package/dist/lib/object/diff.d.ts.map +1 -0
  216. package/dist/lib/object/diff.js +805 -0
  217. package/dist/lib/object/diff.mjs +1 -0
  218. package/dist/lib/object/getter-setter.cjs +1 -0
  219. package/dist/lib/object/getter-setter.d.ts +361 -0
  220. package/dist/lib/object/getter-setter.d.ts.map +1 -0
  221. package/dist/lib/object/getter-setter.js +1771 -0
  222. package/dist/lib/object/getter-setter.mjs +1 -0
  223. package/dist/lib/object/index.cjs +6 -0
  224. package/dist/lib/object/index.d.ts +13 -0
  225. package/dist/lib/object/index.d.ts.map +1 -0
  226. package/dist/lib/object/index.js +12 -0
  227. package/dist/lib/object/index.mjs +6 -0
  228. package/dist/lib/object/merge.cjs +1 -0
  229. package/dist/lib/object/merge.d.ts +93 -0
  230. package/dist/lib/object/merge.d.ts.map +1 -0
  231. package/dist/lib/object/merge.js +474 -0
  232. package/dist/lib/object/merge.mjs +1 -0
  233. package/dist/lib/object/object.cjs +1 -0
  234. package/dist/lib/object/object.d.ts +128 -0
  235. package/dist/lib/object/object.d.ts.map +1 -0
  236. package/dist/lib/object/object.js +432 -0
  237. package/dist/lib/object/object.mjs +1 -0
  238. package/dist/lib/object/omit.cjs +1 -0
  239. package/dist/lib/object/omit.d.ts +351 -0
  240. package/dist/lib/object/omit.d.ts.map +1 -0
  241. package/dist/lib/object/omit.js +656 -0
  242. package/dist/lib/object/omit.mjs +1 -0
  243. package/dist/lib/object/reconcile.cjs +1 -0
  244. package/dist/lib/object/reconcile.d.ts +7 -0
  245. package/dist/lib/object/reconcile.d.ts.map +1 -0
  246. package/dist/lib/object/reconcile.js +122 -0
  247. package/dist/lib/object/reconcile.mjs +1 -0
  248. package/dist/lib/object/selector.cjs +1 -0
  249. package/dist/lib/object/selector.d.ts +50 -0
  250. package/dist/lib/object/selector.d.ts.map +1 -0
  251. package/dist/lib/object/selector.js +371 -0
  252. package/dist/lib/object/selector.mjs +1 -0
  253. package/dist/lib/object/sort.cjs +1 -0
  254. package/dist/lib/object/sort.d.ts +149 -0
  255. package/dist/lib/object/sort.d.ts.map +1 -0
  256. package/dist/lib/object/sort.js +298 -0
  257. package/dist/lib/object/sort.mjs +1 -0
  258. package/dist/lib/object/transform.cjs +1 -0
  259. package/dist/lib/object/transform.d.ts +620 -0
  260. package/dist/lib/object/transform.d.ts.map +1 -0
  261. package/dist/lib/object/transform.js +1058 -0
  262. package/dist/lib/object/transform.mjs +1 -0
  263. package/dist/lib/object/types.cjs +1 -0
  264. package/dist/lib/object/types.d.ts +250 -0
  265. package/dist/lib/object/types.d.ts.map +1 -0
  266. package/dist/lib/object/types.js +1 -0
  267. package/dist/lib/object/types.mjs +0 -0
  268. package/dist/lib/object/utils.cjs +6 -0
  269. package/dist/lib/object/utils.d.ts +165 -0
  270. package/dist/lib/object/utils.d.ts.map +1 -0
  271. package/dist/lib/object/utils.js +444 -0
  272. package/dist/lib/object/utils.mjs +6 -0
  273. package/dist/lib/primitive/boolean/boolean.cjs +1 -0
  274. package/dist/lib/primitive/boolean/boolean.d.ts +276 -0
  275. package/dist/lib/primitive/boolean/boolean.d.ts.map +1 -0
  276. package/dist/lib/primitive/boolean/boolean.js +615 -0
  277. package/dist/lib/primitive/boolean/boolean.mjs +1 -0
  278. package/dist/lib/primitive/boolean/index.cjs +1 -0
  279. package/dist/lib/primitive/boolean/index.d.ts +3 -0
  280. package/dist/lib/primitive/boolean/index.d.ts.map +1 -0
  281. package/dist/lib/primitive/boolean/index.js +2 -0
  282. package/dist/lib/primitive/boolean/index.mjs +1 -0
  283. package/dist/lib/primitive/boolean/types.cjs +1 -0
  284. package/dist/lib/primitive/boolean/types.d.ts +14 -0
  285. package/dist/lib/primitive/boolean/types.d.ts.map +1 -0
  286. package/dist/lib/primitive/boolean/types.js +1 -0
  287. package/dist/lib/primitive/boolean/types.mjs +0 -0
  288. package/dist/lib/primitive/date/date.cjs +1 -0
  289. package/dist/lib/primitive/date/date.d.ts +641 -0
  290. package/dist/lib/primitive/date/date.d.ts.map +1 -0
  291. package/dist/lib/primitive/date/date.js +1998 -0
  292. package/dist/lib/primitive/date/date.mjs +1 -0
  293. package/dist/lib/primitive/date/index.cjs +1 -0
  294. package/dist/lib/primitive/date/index.d.ts +3 -0
  295. package/dist/lib/primitive/date/index.d.ts.map +1 -0
  296. package/dist/lib/primitive/date/index.js +2 -0
  297. package/dist/lib/primitive/date/index.mjs +1 -0
  298. package/dist/lib/primitive/date/types.cjs +1 -0
  299. package/dist/lib/primitive/date/types.d.ts +205 -0
  300. package/dist/lib/primitive/date/types.d.ts.map +1 -0
  301. package/dist/lib/primitive/date/types.js +7 -0
  302. package/dist/lib/primitive/date/types.mjs +0 -0
  303. package/dist/lib/primitive/index.cjs +5 -0
  304. package/dist/lib/primitive/index.d.ts +5 -0
  305. package/dist/lib/primitive/index.d.ts.map +1 -0
  306. package/dist/lib/primitive/index.js +4 -0
  307. package/dist/lib/primitive/index.mjs +5 -0
  308. package/dist/lib/primitive/string/index.cjs +5 -0
  309. package/dist/lib/primitive/string/index.d.ts +3 -0
  310. package/dist/lib/primitive/string/index.d.ts.map +1 -0
  311. package/dist/lib/primitive/string/index.js +2 -0
  312. package/dist/lib/primitive/string/index.mjs +5 -0
  313. package/dist/lib/primitive/string/parser-2.cjs +8 -0
  314. package/dist/lib/primitive/string/parser-2.d.ts +17 -0
  315. package/dist/lib/primitive/string/parser-2.d.ts.map +1 -0
  316. package/dist/lib/primitive/string/parser-2.js +656 -0
  317. package/dist/lib/primitive/string/parser-2.mjs +8 -0
  318. package/dist/lib/primitive/string/parser.cjs +3 -0
  319. package/dist/lib/primitive/string/parser.d.ts +9 -0
  320. package/dist/lib/primitive/string/parser.d.ts.map +1 -0
  321. package/dist/lib/primitive/string/parser.js +775 -0
  322. package/dist/lib/primitive/string/parser.mjs +3 -0
  323. package/dist/lib/primitive/string/string.cjs +5 -0
  324. package/dist/lib/primitive/string/string.d.ts +535 -0
  325. package/dist/lib/primitive/string/string.d.ts.map +1 -0
  326. package/dist/lib/primitive/string/string.js +1301 -0
  327. package/dist/lib/primitive/string/string.mjs +5 -0
  328. package/dist/lib/primitive/string/types.cjs +1 -0
  329. package/dist/lib/primitive/string/types.d.ts +318 -0
  330. package/dist/lib/primitive/string/types.d.ts.map +1 -0
  331. package/dist/lib/primitive/string/types.js +5 -0
  332. package/dist/lib/primitive/string/types.mjs +0 -0
  333. package/dist/lib/primitive/types.cjs +1 -0
  334. package/dist/lib/primitive/types.d.ts +27 -0
  335. package/dist/lib/primitive/types.d.ts.map +1 -0
  336. package/dist/lib/primitive/types.js +1 -0
  337. package/dist/lib/primitive/types.mjs +0 -0
  338. package/dist/lib/url/index.cjs +1 -0
  339. package/dist/lib/url/index.d.ts +3 -0
  340. package/dist/lib/url/index.d.ts.map +1 -0
  341. package/dist/lib/url/index.js +2 -0
  342. package/dist/lib/url/index.mjs +1 -0
  343. package/dist/lib/url/parser.cjs +1 -0
  344. package/dist/lib/url/parser.d.ts +216 -0
  345. package/dist/lib/url/parser.d.ts.map +1 -0
  346. package/dist/lib/url/parser.js +488 -0
  347. package/dist/lib/url/parser.mjs +1 -0
  348. package/dist/lib/url/types.cjs +1 -0
  349. package/dist/lib/url/types.d.ts +18 -0
  350. package/dist/lib/url/types.d.ts.map +1 -0
  351. package/dist/lib/url/types.js +1 -0
  352. package/dist/lib/url/types.mjs +0 -0
  353. package/dist/tsconfig.lib.tsbuildinfo +1 -0
  354. 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}