@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
+ 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";function k(e){if(typeof e!="object"||e===null)return!1;let a=Object.getPrototypeOf(e);return a===Object.prototype||a===null}var w=(e,a,i,r)=>{if(i>r)return;if(a.length===0)return e;let n=a[0],f=a.slice(1);if(n.type==="descendant"){let o=w(e,f,i+1,r);if(o!==void 0)return o;if(e&&typeof e=="object")if(Array.isArray(e)){let t=[];for(let l=0;l<e.length;l++){let s=w(e[l],a,i+1,r);s!==void 0&&(t[l]=s)}return t.length>0?t:void 0}else{let t={};for(let l in e)if(e.hasOwnProperty(l)){let s=w(e[l],a,i+1,r);s!==void 0&&(t[l]=s)}return Object.keys(t).length>0?t:void 0}return}switch(n.type){case"property":if(m(e)&&n.value&&String(n.value)in e){let o=e[String(n.value)],t=w(o,f,i+1,r);if(t!==void 0)return{[String(n.value)]:t}}break;case"index":if(Array.isArray(e)){let o=n.value;if(o>=0&&o<e.length){let t=w(e[o],f,i+1,r);if(t!==void 0){let l=new Array(e.length).filter(s=>s!==void 0);return l[o]=t,l}}}else if(e&&typeof e=="object"){let o=String(n.value);if(o in e){let t=w(e[o],f,i+1,r);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 l=0;l<e.length;l++){let s=w(e[l],f,i+1,r);s!==void 0&&(o[l]=s,t=!0)}return t?o:void 0}else{let o={},t=!1;for(let l in e)if(e.hasOwnProperty(l)){let s=w(e[l],f,i+1,r);s!==void 0&&(o[l]=s,t=!0)}return t?o:void 0}break;case"slice":if(Array.isArray(e)){let[o,t]=n.value,l=Math.max(0,o),s=Math.min(e.length,t===1/0?e.length:t),y=[],g=!1;for(let A=l;A<s;A++){let p=w(e[A],f,i+1,r);p!==void 0&&(y[A]=p,g=!0)}return g?y:void 0}break;case"union":if(Array.isArray(e)){let o=n.value,t=[],l=!1;for(let s of o)if(s>=0&&s<e.length){let y=w(e[s],f,i+1,r);y!==void 0&&(t[s]=y,l=!0)}return l?t:void 0}break;case"filter":if(Array.isArray(e)){let o=n.value,t=[],l=!1;for(let s=0;s<e.length;s++)if(o(e[s])){let y=w(e[s],f,i+1,r);y!==void 0&&(t[s]=y,l=!0)}return l?t:void 0}break}};var O=(e,a)=>{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 i=new Map;return e.forEach((r,n)=>{(!a||!a.some(f=>f.toString()===n.toString()))&&i.set(n,O(r))}),i}if(e instanceof Set){let i=new Set;return e.forEach(r=>{i.add(O(r))}),i}if(Array.isArray(e))return Array.from(e).map(i=>O(i));if(m(e)){let i={};for(let n in e)Object.prototype.hasOwnProperty.call(e,n)&&(!a||!a.some(f=>f.toString()===n.toString()))&&(i[n]=O(e[n]));let r=Object.getOwnPropertySymbols(e);for(let n of r)(!a||!a.some(f=>f.toString()===n.toString()))&&(i[n]=O(e[n]));return i}return e};var W=(e,a)=>e===a,V=(e,a)=>{if(e.length!==a.length)return!1;for(let i=0;i<e.length;i++)if(Array.isArray(e[i])&&Array.isArray(a[i])){if(!V(e[i],a[i]))return!1}else if(m(e[i])&&m(a[i])){if(!D(e[i],a[i]))return!1}else if(e[i]!==a[i])return!1;return!0},D=(e,a)=>{let i=Object.keys(e),r=Object.keys(a);if(i.length!==r.length)return!1;for(let n of i){if(!(n in a))return!1;let f=e[n],o=a[n];if(Array.isArray(f)&&Array.isArray(o)){if(!V(f,o))return!1}else if(m(f)&&m(o)){if(!D(f,o))return!1}else if(f!==o)return!1}return!0},N=(e,a,i={})=>{let{includeDeleted:r=!1,includeAdded:n=!0,deepArrayComparison:f=!0,equalityFn:o=W,preserveStructure:t=!1}=i;if(e==null&&a==null)return{};if(e==null)return n?{...a}:{};if(a==null){if(r){let y={};for(let g in e)y[g]=void 0;return y}return{}}if(!m(e)||!m(a))return o(e,a)?{}:a;let l={},s=new Set;for(let y in a){s.add(y);let g=e[y],A=a[y];if(!(y in e)){n&&(l[y]=A);continue}if(Array.isArray(g)&&Array.isArray(A)){f?V(g,A)?t&&(l[y]=void 0):l[y]=A:g!==A?l[y]=A:t&&(l[y]=void 0);continue}if(m(g)&&m(A)){let p=N(g,A,i);Object.keys(p).length>0?l[y]=p:t&&(l[y]=void 0);continue}o(g,A)?t&&(l[y]=void 0):l[y]=A}if(r)for(let y in e)s.has(y)||(l[y]=void 0);return l},j=(e,a,i={})=>{let r=[],n=[],f=[],o={},{includeDeleted:t=!1,includeAdded:l=!0,deepArrayComparison:s=!0,equalityFn:y=W}=i;if(Array.isArray(e)&&Array.isArray(a)){let p=Math.max(e.length,a.length),d=[],c=!1;for(let u=0;u<p;u++){let T=`[${u}]`;if(u>=e.length)r.push(T),d[u]=a[u],c=!0;else if(u>=a.length)n.push(T),c=!0;else{let x=e[u],h=a[u];m(x)&&m(h)||Array.isArray(x)&&Array.isArray(h)?j(x,h,i).hasChanges?(f.push(T),d[u]=h,c=!0):d[u]=x:y(x,h)?d[u]=x:(f.push(T),d[u]=h,c=!0)}}return{changes:c?d:{},added:r,deleted:n,modified:f,hasChanges:c||n.length>0}}let g=(p,d,c="")=>{let u={added:[],deleted:[],modified:[]};if(Array.isArray(p)&&Array.isArray(d)){let T=Math.max(p.length,d.length);for(let x=0;x<T;x++){let h=c?`${c}[${x}]`:`[${x}]`;if(x>=p.length)u.added.push(h);else if(x>=d.length)u.deleted.push(h);else{let S=p[x],b=d[x];if(m(S)&&m(b)){let K=g(S,b,h);u.added.push(...K.added),u.deleted.push(...K.deleted),u.modified.push(...K.modified)}else if(Array.isArray(S)&&Array.isArray(b)){let K=g(S,b,h);u.added.push(...K.added),u.deleted.push(...K.deleted),u.modified.push(...K.modified)}else S!==b&&u.modified.push(h)}}return u}if(m(p)&&m(d)){let T=new Set([...Object.keys(p||{}),...Object.keys(d||{})]);for(let x of T){let h=p?.[x],S=d?.[x],b=c?`${c}.${x}`:x;if(!(x in(p||{})))u.added.push(b);else if(!(x in(d||{})))u.deleted.push(b);else if(Array.isArray(h)&&Array.isArray(S)){if(!V(h,S)){let K=g(h,S,b);u.added.push(...K.added),u.deleted.push(...K.deleted),u.modified.push(...K.modified)}}else if(m(h)&&m(S)){let K=g(h,S,b);u.added.push(...K.added),u.deleted.push(...K.deleted),u.modified.push(...K.modified)}else h!==S&&u.modified.push(b)}}return u};if(e==null&&a==null)return{changes:{},added:r,deleted:n,modified:f,hasChanges:!1};if(e==null){if(l&&a)for(let p in a)r.push(p),o[p]=a[p];return{changes:o,added:r,deleted:n,modified:f,hasChanges:r.length>0}}if(a==null){if(t)for(let p in e)n.push(p),o[p]=void 0;return{changes:o,added:r,deleted:n,modified:f,hasChanges:n.length>0}}let A=new Set;for(let p in a){A.add(p);let d=e[p],c=a[p];if(!(p in e)){l&&(r.push(p),o[p]=c);continue}let u=!1;if(Array.isArray(d)&&Array.isArray(c)){if(u=s?!V(d,c):d!==c,u){let T=g(d,c,p);r.push(...T.added),n.push(...T.deleted),f.push(...T.modified),o[p]=c}}else if(m(d)&&m(c)){let T=N(d,c,i);if(u=Object.keys(T).length>0,u){let x=g(d,c,p);r.push(...x.added),n.push(...x.deleted),f.push(...x.modified),o[p]=T}}else u=!y(d,c),u&&(f.push(p),o[p]=c)}for(let p in e)A.has(p)||(n.push(p),o[p]=void 0);return{changes:o,added:r,deleted:n,modified:f,hasChanges:r.length>0||n.length>0||f.length>0}};function L(e){return!!(e&&(e.diff||e.changes)&&(e.modified||e.deleted||e.hasChanges))}var F=(e,a,i)=>{if(!L(a)){let u=a,T=i||!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 b=u[S];b!==void 0&&(m(h[S])&&m(b)||Array.isArray(h[S])&&Array.isArray(b)?h[S]=F(h[S],b,T):h[S]=b)}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]=F(x[h],S,T):x[h]=S}return x}let{diff:r,added:n=[],deleted:f=[],modified:o=[],changes:t,keepRef:l}=a,s=i!==void 0?i:l,y=t||r;if(!y)return e;let g=new Set(n),A=new Set(f),p=new Set(o),d=u=>{if(n.length===0&&f.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((b,K)=>/^\d+$/.test(b)?`[${b}]`:K>0?`.${b}`:b).join("");if(g.has(h)||g.has(S)||A.has(h)||A.has(S)||p.has(h)||p.has(S))return!0}return!1};if(Array.isArray(e)&&Array.isArray(y)){let u=s?e:[...e];u.length=y.length;for(let T=0;T<y.length;T++){let x=`[${T}]`,h=y[T];h!==void 0&&d(x)&&(m(u[T])&&m(h)||Array.isArray(u[T])&&Array.isArray(h)?u[T]=F(u[T],h,s):u[T]=h)}return u}if(!m(e))return y;if(!m(y))return e;let c=s?e:{...e};for(let u of f)u.includes(".")||u.includes("[")||d(u)&&delete c[u];for(let u in y){let T=y[u];d(u)&&(T===void 0?delete c[u]:Array.isArray(c[u])&&Array.isArray(T)||m(c[u])&&m(T)?c[u]=F(c[u],T,s):c[u]=T)}return c};var P=(e,a={})=>{let{type:i="auto",throwOnError:r=!1}=a;if(!e||typeof e!="string")return[];let n=[],f="",o=!1,t=!1,l="",s="",y=0,A=i==="auto"?(d=>d.includes("..")?"descendant":d.includes("[?(")?"filter":d.includes("[:")||d.includes("[0:")?"slice":d.includes("[,")||d.includes("[0,1]")?"union":d.includes("[*]")||d.includes(".*.")?"wildcard":d.includes("[]")?"array-wildcard":d.includes("[")&&d.includes("]")?"bracket":"dot")(e):i,p=d=>{let c=d.trim();if(c==="*"||c==="")return{type:"wildcard",value:c===""?"[]":"*",raw:c===""?"[]":d};if(c==="[]")return{type:"wildcard",value:"[]",raw:d};if(/^-?\d+$/.test(c))return{type:"index",value:parseInt(c,10),raw:d};if(c.includes(":")){let u=c.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(r)throw new Error(`Invalid slice notation: ${d}`);return{type:"wildcard",value:"*",raw:d}}return{type:"slice",value:[T,x],raw:d}}if(c.includes(",")){let u=c.split(",").map(T=>{let x=parseInt(T.trim(),10);return isNaN(x)?-1:x}).filter(T=>T>=0);if(u.length===0){if(r)throw new Error(`Invalid union notation: ${d}`);return{type:"wildcard",value:"*",raw:d}}return{type:"union",value:u,raw:d}}if(c.startsWith("?(")&&c.endsWith(")")){let u=c.slice(2,-1);try{return{type:"filter",value:z(u),raw:d}}catch(T){if(r)throw T;return{type:"wildcard",value:"*",raw:d}}}return c.startsWith('"')&&c.endsWith('"')||c.startsWith("'")&&c.endsWith("'")?{type:"property",value:c.slice(1,-1),raw:d}:{type:"property",value:c,raw:d}};for(let d=0;d<e.length;d++){let c=e[d],u=e[d+1];if((c==='"'||c==="'")&&!t){t=!0,l=c;continue}else if(c===l&&t){t=!1,l="",c==='"'||c==="'"||(o?s+=c:f+=c);continue}if(t){o?s+=c:f+=c;continue}if(c==="["&&!o){f&&(n.push({type:"property",value:f,raw:f}),f=""),o=!0,s="";continue}if(c==="]"&&o&&!t){o=!1;let x=p(s);n.push(x);continue}let T=n.length>0?n[n.length-1]:null;if(c==="."&&!o&&!t){if(u==="."){let x=e.split("..")[0];n.push({type:"property",value:x,raw:x}),n.push({type:"descendant",value:"..",raw:".."}),d++}else f&&(f==="*"?n.push({type:"wildcard",value:f,raw:f}):n.push({type:"property",value:f,raw:f}),f="");continue}if(o)s+=c;else if(T&&T.type!=="descendant")f+=c;else{let x=e.split(T?.raw)[1];x!==void 0?f=x:f+=c}}return f&&n.push({type:"property",value:f,raw:f}),n.map(d=>{if(d.type==="property"&&typeof d.value=="string"&&/^-?\d+$/.test(d.value)){let c=parseInt(d.value,10);if(!isNaN(c))return{...d,type:"index",value:c}}return d})},z=e=>{let a=e.replace(/@\.([a-zA-Z_$][\w$]*)/g,(i,r)=>`item.${r}`).replace(/@/g,"item");try{return new Function("item",`return ${a}`)}catch{throw new Error(`Invalid filter expression: ${e}`)}},E=e=>{let a=[];for(let i=0;i<e.length;i++){let r=e[i],n=i>0?e[i-1]:null;switch(r.type){case"property":/[\.\[\]\s]/.test(String(r.value))?a.push(`["${r.value}"]`):(n&&n.type!=="descendant"&&a.push("."),a.push(String(r.value)));break;case"index":a.push(`[${r.value}]`);break;case"wildcard":r.value==="[]"?a.push("[]"):a.push("[*]");break;case"slice":let[o,t]=r.value;a.push(`[${o}:${t===1/0?"":t}]`);break;case"union":let l=r.value;a.push(`[${l.join(",")}]`);break;case"filter":a.push(`[?(${r.raw?.slice(2,-1)||""})]`);break;case"descendant":a.push("..");break}}return a.join("").replace(/\.\[/g,"[")};function Q(e,a){for(let i in a){let r=e[i],n=a[i],f=j(r,n);Array.isArray(r)&&Array.isArray(n)?(r.length=0,r.push(...n)):typeof r=="object"&&typeof n=="object"&&r&&n&&f.hasChanges?F(r,n):e[i]=n}}function $(e,...a){if(a.length===0)return O(e);let i={preserveTarget:!1,strict:!1},r=a,n=a[a.length-1];n&&typeof n=="object"&&("preserveTarget"in n||"strict"in n)&&(i={...i,...n},r=a.slice(0,-1));let f=i.preserveTarget?e:O(e),o=Array.isArray(f);for(let t of r)if(t&&Array.isArray(t)!==o)throw new Error("Cannot mix arrays and objects in deepMergeWithOptions");for(let t of r)if(t!=null)if(o){let l=f,s=t;if(i.strict)for(let y=0;y<l.length&&y<s.length;y++)k(l[y])&&k(s[y])?l[y]=$(l[y],s[y],i):typeof l[y]==typeof s[y]&&(l[y]=O(s[y]));else Q(l,s)}else{if(!k(t))continue;let l=f,s=t;for(let g in s){if(!Object.prototype.hasOwnProperty.call(s,g))continue;let A=s[g];if(i.strict&&!(g in l))continue;let p=l[g];p===void 0?l[g]=O(A):Array.isArray(A)&&Array.isArray(p)?i.strict?l[g]=$(p,A,i):l[g]=[...p,...A.map(d=>O(d))]:k(A)&&k(p)?l[g]=$(p,A,i):l[g]=O(A)}let y=Object.getOwnPropertySymbols(s);for(let g of y){if(i.strict&&!(g in l))continue;let A=s[g],p=l[g];p===void 0?l[g]=O(A):Array.isArray(A)&&Array.isArray(p)?i.strict?l[g]=$(p,A,i):l[g]=[...p,...A.map(d=>O(d))]:k(A)&&k(p)?l[g]=$(p,A,i):l[g]=O(A)}}return f}function U(e,...a){return $(e,...a,{preserveTarget:!0})}var B=(e,a,i)=>{let r=P(a),n=e;for(let f=0;f<r.length;f++){let o=r[f],t=f===r.length-1;switch(o.type){case"property":if(t)n[String(o.value)]=i;else{if(!n[String(o.value)]){let s=r[f+1];n[String(o.value)]=s.type==="index"||s.type==="slice"||s.type==="union"||s.type==="wildcard"?[]:{}}n=n[String(o.value)]}break;case"index":Array.isArray(n)||(n=[]);let l=o.value;if(t){if(l>=n.length)for(let s=n.length;s<=l;s++)n.push(void 0);n[l]=i}else{if(!n[l]){let s=r[f+1];n[l]=s.type==="index"||s.type==="slice"||s.type==="union"||s.type==="wildcard"?[]:{}}n=n[l]}break;case"wildcard":if(Array.isArray(n))if(t)for(let s=0;s<n.length;s++)n[s]=i;else{let s=r[f+1];for(let y=0;y<n.length;y++)n[y]||(n[y]=s.type==="index"||s.type==="slice"||s.type==="union"||s.type==="wildcard"?[]:{});n.length>0&&(n=n[0])}break}}};function I(e,a,i={}){let{preserveStructure:r,multiple:n,throwOnError:f=!1,defaultValue:o,maxDepth:t=20}=i;if(!e||typeof e!="object")return o;if(!a)return e;if(Array.isArray(a))if(r){let y={};for(let g of a){let A=I(e,g,{...i,preserveStructure:!1});A!==void 0&&B(y,g,A)}return y}else return a.map(y=>I(e,y,{...i,preserveStructure:!1}));let l=P(a,{...i,throwOnError:f});if(l.length===0)return e;if(typeof r>"u"||r===!1){let y=Z(e,a);return n===!1&&Array.isArray(y)?y[0]:y===void 0&&o!==void 0?o:y}let s=w(e,l,0,t);return s===void 0&&o!==void 0?o:s}function Z(e,a,i={}){let{createMissing:r=!1,add:n=!1,debug:f=!1}=i,o=P(a),t=e,l=!1,s="",y=a;if(typeof t=="object"&&!Array.isArray(t)&&y.length>0&&t[y])return t=t[y],t;for(let g=0;g<o.length;g++){let A=o[g],p=o.length>1?g===o.length-1:!1;if(t===null&&!r)return;let d=o[g+1];switch(A.type){case"property":if(t&&typeof t=="object")if(Array.isArray(t)){if(typeof A.value=="number"){let c=A.value;if(r&&c>=t.length)for(let u=t.length;u<=c;u++)t.push(void 0);if(r&&(t[c]===null||t[c]===void 0)&&(!p||l)&&(d?t[c]=d.type==="index"||d.type==="slice"||d.type==="union"||d.type==="wildcard"?[]:{}:t[c]=null,l=!1),t=t[c],d){l=!0;continue}}else n?t.push({[String(A.value)]:null}):t=t.map(c=>c[String(A.value)]);if(d)continue;return _(t)}else{if(t[s]&&s.split(".").length>=2){t=t[s];continue}if(r&&(t[String(A.value)]===null||t[String(A.value)]===void 0)&&(!p||l)&&(d?t[String(A.value)]=d.type==="index"||d.type==="slice"||d.type==="union"||d.type==="wildcard"?[]:{}:t[String(A.value)]=null,l=!1,t=t[String(A.value)],d)){l=!0;continue}if(t?(!t[String(A.value)]&&r&&(t[String(A.value)]=null),t=t[String(A.value)]):t={[String(A.value)]:null},d)continue}else if(r)t={},t[String(A.value)]=d.type==="index"||d.type==="slice"||d.type==="union"||d.type==="wildcard"||i.type==="array"?[]:{},t=t[String(A.value)];else return;break;case"index":case"wildcard":if(Array.isArray(t)){if(A.type==="index"){let c=A.value;if(c<0){t=t[t.length-Math.abs(c)];continue}if(r&&(c>=t.length||t[c]==null||t[c]==null)&&!p){for(let u=t.length;u<=c;u++)t.push(void 0);d&&(t[c]=d.type==="index"||d.type==="slice"||d.type==="union"||d.type==="wildcard"?[]:{})}t=t[c]}else if(!p)continue}else if(r){let c=o[g+1];t=[];let u=A.value;for(let T=0;T<=u;T++)t.push(void 0);t[u]=c.type==="index"||c.type==="slice"||c.type==="union"||c.type==="wildcard"||i.type==="array"?[]:{},t=t[u]}else{if(A.type==="index"&&typeof t=="object"&&t&&t[String(A.value)]!==void 0){t=t[String(A.value)];continue}if(typeof t=="object"){t=Object.values(t);continue}return}break;default:return}}return _(t)}function _(e){return Array.isArray(e)?e.filter(a=>typeof a<"u"):e}var R=(e,a,i={})=>{let{throwOnError:r=!1}=i;if(Array.isArray(a))return a.map(t=>R(e,t,i));let n=P(a,{throwOnError:r});if(n.length===0)return!1;let f=n[n.length-1];if(n.some(t=>t.type==="wildcard"||t.type==="slice"||t.type==="union")){let t=q(e,a,i),l=!1;for(let s of t)G(e,s)&&(l=!0);return l}let o=e;for(let t=0;t<n.length-1;t++){let l=n[t];if(o==null)return!1;switch(l.type){case"property":o=o[String(l.value)];break;case"index":if(!Array.isArray(o))return!1;let s=l.value;if(s<0||s>=o.length)return!1;o=o[s];break;default:return!1}}if(o==null)return!1;switch(f.type){case"property":if(String(f.value)in o)return delete o[String(f.value)],!0;break;case"index":if(!Array.isArray(o))return!1;let t=f.value;if(t>=0&&t<o.length)return o.splice(t,1),!0;break}return!1},G=(e,a)=>{let i=P(a);if(i.length===0)return!1;let r=i[i.length-1],n=e;for(let f=0;f<i.length-1;f++){let o=i[f];if(n==null)return!1;switch(o.type){case"property":n=n[String(o.value)];break;case"index":if(!Array.isArray(n))return!1;let t=o.value;if(t<0||t>=n.length)return!1;n=n[t];break;default:return!1}}if(n==null)return!1;switch(r.type){case"property":if(String(r.value)in n)return delete n[String(r.value)],!0;break;case"index":if(!Array.isArray(n))return!1;let f=r.value;if(f>=0&&f<n.length)return n.splice(f,1),!0;break}return!1},q=(e,a,i={})=>{let{format:r="selector",maxDepth:n=20}=i;if(a&&Array.isArray(a)){let t=[];for(let l of a){let s=q(e,l,i);t.push(...s)}return t}if(a){let t=P(a,i);return v(e,t,0,n).map(s=>r==="selector"?s.path:s.stringPath)}let f=[],o=(t,l=[],s=[],y=0)=>{if(!(y>n)){if(l.length>0){let g=E(l);f.push({path:g,stringPath:s.join(".")})}if(t&&typeof t=="object")if(Array.isArray(t))for(let g=0;g<t.length;g++)o(t[g],[...l,{type:"index",value:g,raw:`[${g}]`}],[...s,`[${g}]`],y+1);else for(let g in t)t.hasOwnProperty(g)&&o(t[g],[...l,{type:"property",value:g,raw:g}],[...s,g],y+1)}};return o(e),f.map(t=>r==="selector"?t.path:t.stringPath)};function v(e,a,i,r,n=[],f=[]){if(i>r)return[];if(a.length===0)return[{value:e,path:E(n),stringPath:f.join(".")}];let o=a[0],t=a.slice(1),l=[];if(o.type==="descendant"){if(l.push(...v(e,t,i+1,r,n,f)),e&&typeof e=="object")if(Array.isArray(e))for(let s=0;s<e.length;s++)l.push(...v(e[s],a,i+1,r,[...n,{type:"index",value:s,raw:`[${s}]`}],[...f,`[${s}]`]));else for(let s in e)e.hasOwnProperty(s)&&l.push(...v(e[s],a,i+1,r,[...n,{type:"property",value:s,raw:s}],[...f,s]));return l}switch(o.type){case"property":if(e&&typeof e=="object"&&String(o.value)in e){let s=e[String(o.value)];l.push(...v(s,t,i+1,r,[...n,o],[...f,String(o.value)]))}break;case"index":if(Array.isArray(e)){let s=o.value;s>=0&&s<e.length&&l.push(...v(e[s],t,i+1,r,[...n,o],[...f,`[${s}]`]))}else if(e&&typeof e=="object"){let s=String(o.value);s in e&&l.push(...v(e[s],t,i+1,r,[...n,{...o,type:"property"}],[...f,s]))}break;case"wildcard":if(e&&typeof e=="object")if(Array.isArray(e))for(let s=0;s<e.length;s++)l.push(...v(e[s],t,i+1,r,[...n,{type:"index",value:s,raw:`[${s}]`}],[...f,`[${s}]`]));else for(let s in e)e.hasOwnProperty(s)&&l.push(...v(e[s],t,i+1,r,[...n,{type:"property",value:s,raw:s}],[...f,s]));break;case"slice":if(Array.isArray(e)){let[s,y]=o.value,g=Math.max(0,s),A=Math.min(e.length,y===1/0?e.length:y);for(let p=g;p<A;p++)l.push(...v(e[p],t,i+1,r,[...n,{type:"index",value:p,raw:`[${p}]`}],[...f,`[${p}]`]))}break;case"union":if(Array.isArray(e)){let s=o.value;for(let y of s)y>=0&&y<e.length&&l.push(...v(e[y],t,i+1,r,[...n,{type:"index",value:y,raw:`[${y}]`}],[...f,`[${y}]`]))}break;case"filter":if(Array.isArray(e)){let s=o.value;for(let y=0;y<e.length;y++)s(e[y])&&l.push(...v(e[y],t,i+1,r,[...n,{type:"index",value:y,raw:`[${y}]`}],[...f,`[${y}]`]))}break}return l}function me(e,a){if(!m(e))return{};let i={...e};for(let r of a)delete i[r];return i}function J(e,a){if(e==null||typeof e!="object")return e;if(Array.isArray(e))return e.map(r=>J(r,a));let i={};for(let[r,n]of Object.entries(e))a.includes(r)||(i[r]=J(n,a));return i}function Se(e){return a=>{if(!m(a))return{};let i={...a};for(let r of e)r in i&&delete i[r];return i}}function H(e,a){if(!m(e))return{};let i={};for(let r in e)Object.prototype.hasOwnProperty.call(e,r)&&!a(e[r],r,e)&&(i[r]=e[r]);return i}function Ke(e){return H(e,a=>a==null)}function be(e,a){if(!m(e))return{};let i={};for(let r of a)r in e&&(i[r]=e[r]);return i}function Oe(e,a){if(!m(e))return{};let i={};for(let r in e)Object.prototype.hasOwnProperty.call(e,r)&&a(e[r],r,e)&&(i[r]=e[r]);return i}function we(e,a,i){if(!m(e))return{};let r=JSON.parse(JSON.stringify(e)),n=Array.isArray(a)?a:[a];for(let o=0;o<n.length;o++){let t=n[o],l=n[o+1];if(!t||t==="")continue;let s=P(t);if(t.includes("*")||t.includes("[")||s.length>1){let A=function(p,d=""){if(m(p)){if(Array.isArray(p)){p.forEach((c,u)=>{A(c,d?`${d}[${u}]`:`[${u}]`)});return}for(let c in p)if(Object.prototype.hasOwnProperty.call(p,c)){let u=d?`${d}.${c}`:c;g.push({fullPath:u,segments:P(u)}),A(p[c],u)}}};var f=A;let y=I(r,t,{preserveStructure:!0});if(y===void 0)continue;let g=[];A(y);for(let{fullPath:p,segments:d}of g){let c=[...d],u=c.pop();if(!u)continue;let T=c.map(K=>K.type==="index"?`[${K.value}]`:K.value).join(".").replace(/\.\[/g,"["),x=I(r,T.length>0?T:p,{preserveStructure:!0}),h=T?x:r;if(!h)continue;let S=String(u.value),b=h[S];if(i){let K=i(b,p,r);if(K===!0)if(u.type==="index"&&Array.isArray(h)){let C=u.value;C>=0&&C<h.length&&h.splice(C,1)}else R(r,n[o]);else K!==!1&&(h[S]=K)}else if(u.type==="index"&&Array.isArray(h)){let K=u.value;K>=0&&K<h.length&&h.splice(K,1)}else R(r,n[o])}}else{let y=t;if(typeof y=="string"&&y in r)if(i){let g=i(r[y],t,r);g===!0?delete r[y]:g!==!1&&(r[y]=g)}else R(r,n[o])}}return r}function ve(e,a,i){if(!m(e))return{};if(Array.isArray(a)){let f={};for(let o of a){let t=I(e,o,{preserveStructure:!0});if(t!==void 0)if(i){let l=(y,g)=>{if(m(y)){if(Array.isArray(y))return y.map((p,d)=>l(p,`${g}[${d}]`));let A={};for(let p in y)if(Object.prototype.hasOwnProperty.call(y,p)){let d=g?`${g}.${p}`:p;A[p]=l(y[p],d)}return A}return i(y,g,e)},s=l(t,o);U(f,s)}else Object.assign(f,U(f,t))}return f}let r=Array.isArray(a)?a[0]:a,n=I(e,r,{preserveStructure:!0});if(n===void 0)return{};if(i){let f=(o,t)=>{if(m(o)){if(Array.isArray(o))return o.map((s,y)=>f(s,`${t}[${y}]`));let l={};for(let s in o)if(Object.prototype.hasOwnProperty.call(o,s)){let y=t?`${t}.${s}`:s;l[s]=f(o[s],y)}return l}return i(o,t,e)};return f(n,r)}return n}function M(e,a){if(!m(e))return e;if(Array.isArray(e))return e.map(r=>M(r,a));let i={};for(let r in e){if(!Object.prototype.hasOwnProperty.call(e,r))continue;let n=e[r];a(n,r,e)||(m(n)?i[r]=M(n,a):Array.isArray(n)?i[r]=n.map(f=>M(f,a)):i[r]=n)}return i}export{Se as createOmitter,J as deepOmit,M as deepOmitBy,me as omit,H as omitBy,Ke as omitNil,we as omitPath,be as pick,Oe as pickBy,ve as pickPath};
@@ -0,0 +1 @@
1
+ "use strict";var g=Object.defineProperty;var O=Object.getOwnPropertyDescriptor;var w=Object.getOwnPropertyNames;var b=Object.prototype.hasOwnProperty;var j=(i,e)=>{for(var r in e)g(i,r,{get:e[r],enumerable:!0})},A=(i,e,r,f)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of w(e))!b.call(i,a)&&a!==r&&g(i,a,{get:()=>e[a],enumerable:!(f=O(e,a))||f.enumerable});return i};var h=i=>A(g({},"__esModule",{value:!0}),i);var v={};j(v,{reconcile:()=>q});module.exports=h(v);function p(i){if(i==null||typeof i!="object")return!1;let e=Object.getPrototypeOf(i);return e===Object.prototype||e===null}function k(i,e,r){return i===e?e:Array.isArray(i)?T(i,Array.isArray(e)?e:[],r):p(i)?m(i,p(e)?e:{},r):i}function T(i,e,r){let{key:f,keepRef:a}=r,u=e.length,o=i.length,s=new Array(u);for(let n=0;n<u;n++)s[n]=e[n];if(f===!1){if(a){for(let l=0;l<o;l++){let R=k(i[l],s[l],r);R!==s[l]&&(e[l]=R)}return u>o&&e.splice(o),e}let n=o!==u,t=new Array(o);for(let l=0;l<o;l++)t[l]=k(i[l],s[l],r),t[l]!==s[l]&&(n=!0);return n?t:e}let d=new Map;for(let n=0;n<u;n++){let t=s[n];t!=null&&typeof t=="object"&&f in t&&d.set(t[f],t)}let y=new Array(o);for(let n=0;n<o;n++){let t=i[n];t!=null&&typeof t=="object"&&f in t?y[n]=k(t,d.get(t[f]),r):y[n]=k(t,s[n],r)}if(a){for(let n=0;n<o;n++)y[n]!==s[n]&&(e[n]=y[n]);return u>o&&e.splice(o),e}let c=o!==u;for(let n=0;!c&&n<o;n++)y[n]!==s[n]&&(c=!0);return c?y:e}function m(i,e,r){let{merge:f,keepRef:a}=r,u=Object.keys(i),o=Object.keys(e),s=Object.create(null);for(let c=0;c<o.length;c++)s[o[c]]=e[o[c]];let d=null,y=()=>(d||(d=a?e:{...s}),d);if(!f)for(let c=0;c<o.length;c++){let n=o[c];n in i||delete y()[n]}for(let c=0;c<u.length;c++){let n=u[c],t=s[n],l=k(i[n],t,r);(l!==t||!(n in s))&&(y()[n]=l)}return d??e}function q(i,e){let r={key:e?.key!==void 0?e.key:"id",merge:e?.merge??!1,keepRef:e?.keepRef??!1};return f=>f==null?i:k(i,f,r)}
@@ -0,0 +1,7 @@
1
+ export interface ReconcileOptions {
2
+ key?: string | false;
3
+ merge?: boolean;
4
+ keepRef?: boolean;
5
+ }
6
+ export declare function reconcile<T>(next: T, options?: ReconcileOptions): (current: T | undefined) => T;
7
+ //# sourceMappingURL=reconcile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reconcile.d.ts","sourceRoot":"","sources":["../../../src/lib/object/reconcile.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B,GAAG,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IACrB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAqHD,wBAAgB,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,CAAC,OAAO,EAAE,CAAC,GAAG,SAAS,KAAK,CAAC,CAU/F"}
@@ -0,0 +1,122 @@
1
+ function isPlain(v) {
2
+ if (v == null || typeof v !== 'object')
3
+ return false;
4
+ const p = Object.getPrototypeOf(v);
5
+ return p === Object.prototype || p === null;
6
+ }
7
+ function reconcileValue(next, current, opts) {
8
+ if (next === current)
9
+ return current;
10
+ if (Array.isArray(next))
11
+ return reconcileArr(next, Array.isArray(current) ? current : [], opts);
12
+ if (isPlain(next))
13
+ return reconcileObj(next, isPlain(current) ? current : {}, opts);
14
+ return next;
15
+ }
16
+ function reconcileArr(next, current, opts) {
17
+ const { key, keepRef } = opts;
18
+ const curLen = current.length;
19
+ const nextLen = next.length;
20
+ // Snapshot once — avoids repeated proxy reads returning different references
21
+ const curItems = new Array(curLen);
22
+ for (let i = 0; i < curLen; i++)
23
+ curItems[i] = current[i];
24
+ if (key === false) {
25
+ // Index-based
26
+ if (keepRef) {
27
+ for (let i = 0; i < nextLen; i++) {
28
+ const rv = reconcileValue(next[i], curItems[i], opts);
29
+ if (rv !== curItems[i])
30
+ current[i] = rv;
31
+ }
32
+ if (curLen > nextLen)
33
+ current.splice(nextLen);
34
+ return current;
35
+ }
36
+ let changed = nextLen !== curLen;
37
+ const out = new Array(nextLen);
38
+ for (let i = 0; i < nextLen; i++) {
39
+ out[i] = reconcileValue(next[i], curItems[i], opts);
40
+ if (out[i] !== curItems[i])
41
+ changed = true;
42
+ }
43
+ return changed ? out : current;
44
+ }
45
+ // Key-based: build lookup from snapshot
46
+ const currentMap = new Map();
47
+ for (let i = 0; i < curLen; i++) {
48
+ const item = curItems[i];
49
+ if (item != null && typeof item === 'object' && key in item) {
50
+ currentMap.set(item[key], item);
51
+ }
52
+ }
53
+ const resolved = new Array(nextLen);
54
+ for (let i = 0; i < nextLen; i++) {
55
+ const n = next[i];
56
+ if (n != null && typeof n === 'object' && key in n) {
57
+ resolved[i] = reconcileValue(n, currentMap.get(n[key]), opts);
58
+ }
59
+ else {
60
+ resolved[i] = reconcileValue(n, curItems[i], opts);
61
+ }
62
+ }
63
+ if (keepRef) {
64
+ for (let i = 0; i < nextLen; i++) {
65
+ if (resolved[i] !== curItems[i])
66
+ current[i] = resolved[i];
67
+ }
68
+ if (curLen > nextLen)
69
+ current.splice(nextLen);
70
+ return current;
71
+ }
72
+ // Immutable: compare resolved positions against snapshotted positions
73
+ let changed = nextLen !== curLen;
74
+ for (let i = 0; !changed && i < nextLen; i++) {
75
+ if (resolved[i] !== curItems[i])
76
+ changed = true;
77
+ }
78
+ return changed ? resolved : current;
79
+ }
80
+ function reconcileObj(next, current, opts) {
81
+ const { merge, keepRef } = opts;
82
+ const nextKeys = Object.keys(next);
83
+ const currentKeys = Object.keys(current);
84
+ // Snapshot current values once to avoid repeated proxy reads
85
+ const curValues = Object.create(null);
86
+ for (let i = 0; i < currentKeys.length; i++) {
87
+ curValues[currentKeys[i]] = current[currentKeys[i]];
88
+ }
89
+ let out = null;
90
+ const getOut = () => {
91
+ if (!out)
92
+ out = keepRef ? current : { ...curValues };
93
+ return out;
94
+ };
95
+ if (!merge) {
96
+ for (let i = 0; i < currentKeys.length; i++) {
97
+ const k = currentKeys[i];
98
+ if (!(k in next))
99
+ delete getOut()[k];
100
+ }
101
+ }
102
+ for (let i = 0; i < nextKeys.length; i++) {
103
+ const k = nextKeys[i];
104
+ const cv = curValues[k];
105
+ const rv = reconcileValue(next[k], cv, opts);
106
+ if (rv !== cv || !(k in curValues))
107
+ getOut()[k] = rv;
108
+ }
109
+ return out ?? current;
110
+ }
111
+ export function reconcile(next, options) {
112
+ const opts = {
113
+ key: options?.key !== undefined ? options.key : 'id',
114
+ merge: options?.merge ?? false,
115
+ keepRef: options?.keepRef ?? false,
116
+ };
117
+ return (current) => {
118
+ if (current === undefined || current === null)
119
+ return next;
120
+ return reconcileValue(next, current, opts);
121
+ };
122
+ }
@@ -0,0 +1 @@
1
+ function R(i){if(i==null||typeof i!="object")return!1;let n=Object.getPrototypeOf(i);return n===Object.prototype||n===null}function d(i,n,f){return i===n?n:Array.isArray(i)?p(i,Array.isArray(n)?n:[],f):R(i)?O(i,R(n)?n:{},f):i}function p(i,n,f){let{key:s,keepRef:k}=f,a=n.length,o=i.length,c=new Array(a);for(let e=0;e<a;e++)c[e]=n[e];if(s===!1){if(k){for(let r=0;r<o;r++){let g=d(i[r],c[r],f);g!==c[r]&&(n[r]=g)}return a>o&&n.splice(o),n}let e=o!==a,t=new Array(o);for(let r=0;r<o;r++)t[r]=d(i[r],c[r],f),t[r]!==c[r]&&(e=!0);return e?t:n}let y=new Map;for(let e=0;e<a;e++){let t=c[e];t!=null&&typeof t=="object"&&s in t&&y.set(t[s],t)}let u=new Array(o);for(let e=0;e<o;e++){let t=i[e];t!=null&&typeof t=="object"&&s in t?u[e]=d(t,y.get(t[s]),f):u[e]=d(t,c[e],f)}if(k){for(let e=0;e<o;e++)u[e]!==c[e]&&(n[e]=u[e]);return a>o&&n.splice(o),n}let l=o!==a;for(let e=0;!l&&e<o;e++)u[e]!==c[e]&&(l=!0);return l?u:n}function O(i,n,f){let{merge:s,keepRef:k}=f,a=Object.keys(i),o=Object.keys(n),c=Object.create(null);for(let l=0;l<o.length;l++)c[o[l]]=n[o[l]];let y=null,u=()=>(y||(y=k?n:{...c}),y);if(!s)for(let l=0;l<o.length;l++){let e=o[l];e in i||delete u()[e]}for(let l=0;l<a.length;l++){let e=a[l],t=c[e],r=d(i[e],t,f);(r!==t||!(e in c))&&(u()[e]=r)}return y??n}function w(i,n){let f={key:n?.key!==void 0?n.key:"id",merge:n?.merge??!1,keepRef:n?.keepRef??!1};return s=>s==null?i:d(i,s,f)}export{w as reconcile};
@@ -0,0 +1 @@
1
+ "use strict";var h=Object.defineProperty;var $=Object.getOwnPropertyDescriptor;var T=Object.getOwnPropertyNames;var x=Object.prototype.hasOwnProperty;var k=(e,n)=>{for(var a in n)h(e,a,{get:n[a],enumerable:!0})},I=(e,n,a,i)=>{if(n&&typeof n=="object"||typeof n=="function")for(let l of T(n))!x.call(e,l)&&l!==a&&h(e,l,{get:()=>n[l],enumerable:!(i=$(n,l))||i.enumerable});return e};var N=e=>I(h({},"__esModule",{value:!0}),e);var W={};k(W,{createFilterFunction:()=>g,createSelector:()=>E,detectSelectorType:()=>w,parseSelector:()=>v,stringifySelector:()=>A,validateSelector:()=>S});module.exports=N(W);var v=(e,n={})=>{let{type:a="auto",throwOnError:i=!1}=n;if(!e||typeof e!="string")return[];let l=[],s="",o=!1,d=!1,f="",y="",j=0,O=a==="auto"?(t=>t.includes("..")?"descendant":t.includes("[?(")?"filter":t.includes("[:")||t.includes("[0:")?"slice":t.includes("[,")||t.includes("[0,1]")?"union":t.includes("[*]")||t.includes(".*.")?"wildcard":t.includes("[]")?"array-wildcard":t.includes("[")&&t.includes("]")?"bracket":"dot")(e):a,m=t=>{let r=t.trim();if(r==="*"||r==="")return{type:"wildcard",value:r===""?"[]":"*",raw:r===""?"[]":t};if(r==="[]")return{type:"wildcard",value:"[]",raw:t};if(/^-?\d+$/.test(r))return{type:"index",value:parseInt(r,10),raw:t};if(r.includes(":")){let c=r.split(":").map(b=>b.trim()),u=c[0]===""?0:parseInt(c[0],10),p=c[1]===""?1/0:parseInt(c[1],10);if(isNaN(u)||isNaN(p)){if(i)throw new Error(`Invalid slice notation: ${t}`);return{type:"wildcard",value:"*",raw:t}}return{type:"slice",value:[u,p],raw:t}}if(r.includes(",")){let c=r.split(",").map(u=>{let p=parseInt(u.trim(),10);return isNaN(p)?-1:p}).filter(u=>u>=0);if(c.length===0){if(i)throw new Error(`Invalid union notation: ${t}`);return{type:"wildcard",value:"*",raw:t}}return{type:"union",value:c,raw:t}}if(r.startsWith("?(")&&r.endsWith(")")){let c=r.slice(2,-1);try{return{type:"filter",value:g(c),raw:t}}catch(u){if(i)throw u;return{type:"wildcard",value:"*",raw:t}}}return r.startsWith('"')&&r.endsWith('"')||r.startsWith("'")&&r.endsWith("'")?{type:"property",value:r.slice(1,-1),raw:t}:{type:"property",value:r,raw:t}};for(let t=0;t<e.length;t++){let r=e[t],c=e[t+1];if((r==='"'||r==="'")&&!d){d=!0,f=r;continue}else if(r===f&&d){d=!1,f="",r==='"'||r==="'"||(o?y+=r:s+=r);continue}if(d){o?y+=r:s+=r;continue}if(r==="["&&!o){s&&(l.push({type:"property",value:s,raw:s}),s=""),o=!0,y="";continue}if(r==="]"&&o&&!d){o=!1;let p=m(y);l.push(p);continue}let u=l.length>0?l[l.length-1]:null;if(r==="."&&!o&&!d){if(c==="."){let p=e.split("..")[0];l.push({type:"property",value:p,raw:p}),l.push({type:"descendant",value:"..",raw:".."}),t++}else s&&(s==="*"?l.push({type:"wildcard",value:s,raw:s}):l.push({type:"property",value:s,raw:s}),s="");continue}if(o)y+=r;else if(u&&u.type!=="descendant")s+=r;else{let p=e.split(u?.raw)[1];p!==void 0?s=p:s+=r}}return s&&l.push({type:"property",value:s,raw:s}),l.map(t=>{if(t.type==="property"&&typeof t.value=="string"&&/^-?\d+$/.test(t.value)){let r=parseInt(t.value,10);if(!isNaN(r))return{...t,type:"index",value:r}}return t})},g=e=>{let n=e.replace(/@\.([a-zA-Z_$][\w$]*)/g,(a,i)=>`item.${i}`).replace(/@/g,"item");try{return new Function("item",`return ${n}`)}catch{throw new Error(`Invalid filter expression: ${e}`)}},A=e=>{let n=[];for(let a=0;a<e.length;a++){let i=e[a],l=a>0?e[a-1]:null;switch(i.type){case"property":/[\.\[\]\s]/.test(String(i.value))?n.push(`["${i.value}"]`):(l&&l.type!=="descendant"&&n.push("."),n.push(String(i.value)));break;case"index":n.push(`[${i.value}]`);break;case"wildcard":i.value==="[]"?n.push("[]"):n.push("[*]");break;case"slice":let[o,d]=i.value;n.push(`[${o}:${d===1/0?"":d}]`);break;case"union":let f=i.value;n.push(`[${f.join(",")}]`);break;case"filter":n.push(`[?(${i.raw?.slice(2,-1)||""})]`);break;case"descendant":n.push("..");break}}return n.join("").replace(/\.\[/g,"[")},S=(e,n={})=>{if(Array.isArray(e))return e.map(a=>S(a,n));if(!/^[a-zA-Z]/.test(e))return{valid:!1,error:"Selector starts with '.'",type:w(e)};if(!/[a-zA-Z]$/.test(e))return{valid:!1,error:"Selector end with '.'",type:w(e)};try{let a=v(e,{throwOnError:!0}),i=w(e);return n.allowedTypes&&!n.allowedTypes.includes(i)?{valid:!1,error:`Selector type ${i} not allowed. Allowed: ${n.allowedTypes.join(", ")}`,type:i}:{valid:!0,type:w(e)}}catch(a){return{valid:!1,error:a.message}}},w=e=>e.includes("..")?"descendant":e.includes("[?(")?"filter":e.includes("[:")||e.includes("[0:")?"slice":/\[[^\]]*,[^\]]*\]/.test(e)?"union":e.includes("[*]")||e.includes(".*.")?"wildcard":e.includes("[]")?"array-wildcard":e.includes("[")&&e.includes("]")?"bracket":"dot",E=(e,n)=>e.replace(/\{(\w+)\}/g,(a,i)=>i in n?String(n[i]):`{${i}}`);
@@ -0,0 +1,50 @@
1
+ import type { Selector, SelectorOptions, SelectorSegment, SelectorType } from './types.js';
2
+ /**
3
+ * Enhanced selector string parsing with multiple notations
4
+ * @param selector - Selector string
5
+ * @param options - Parsing options
6
+ * @returns Array of selector segments
7
+ * @example
8
+ * parseSelector('users[0].name') // [{type: 'property', value: 'users'}, {type: 'index', value: 0}, ...]
9
+ */
10
+ export declare const parseSelector: (selector: string, options?: SelectorOptions) => SelectorSegment[];
11
+ /**
12
+ * Creates a filter function from expression string
13
+ * @param expr - Filter expression (e.g., '@.age > 18')
14
+ * @returns Filter function
15
+ */
16
+ export declare const createFilterFunction: (expr: string) => ((item: any) => boolean);
17
+ /**
18
+ * Stringifies selector segments back to string
19
+ */
20
+ export declare const stringifySelector: (segments: SelectorSegment[]) => string;
21
+ /**
22
+ * Checks if selector matches type signature
23
+ */
24
+ export declare const validateSelector: (selector: Selector, options?: {
25
+ allowedTypes?: SelectorType[];
26
+ }) => {
27
+ valid: boolean;
28
+ error?: string;
29
+ type?: SelectorType;
30
+ } | {
31
+ valid: boolean;
32
+ error?: string;
33
+ type?: SelectorType;
34
+ }[];
35
+ /**
36
+ * Detects selector type from string
37
+ */
38
+ export declare const detectSelectorType: (selector: string) => SelectorType;
39
+ /**
40
+ * Creates a selector from a template
41
+ * @param template - Template string
42
+ * @param replacements - Replacements object
43
+ * @example
44
+ * createSelector('a.{id}', {id: 1}) // 'a.1'
45
+ * createSelector('a.{id}.{name}', {id: 1, name: 'John'}) // 'a.1.John'
46
+ * createSelector('a.{id}.{name}.{age}', {id: 1, name: 'John', age: 30}) // 'a.1.John.30'
47
+ * createSelector('users[{id}].{property}', {id: 1}) // 'users[1].property'
48
+ */
49
+ export declare const createSelector: (template: string, replacements: Record<string, string | number>) => string;
50
+ //# sourceMappingURL=selector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selector.d.ts","sourceRoot":"","sources":["../../../src/lib/object/selector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,QAAQ,EACR,eAAe,EACf,eAAe,EACf,YAAY,EACb,MAAM,YAAY,CAAC;AAEpB;;;;;;;GAOG;AACH,eAAO,MAAM,aAAa,GACxB,UAAU,MAAM,EAChB,UAAS,eAAoB,KAC5B,eAAe,EA0NjB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,GAC/B,MAAM,MAAM,KACX,CAAC,CAAC,IAAI,EAAE,GAAG,KAAK,OAAO,CAazB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB,GAAI,UAAU,eAAe,EAAE,KAAG,MAsD/D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,gBAAgB,GAC3B,UAAU,QAAQ,EAClB,UAAS;IAAE,YAAY,CAAC,EAAE,YAAY,EAAE,CAAA;CAAO,KAE7C;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,YAAY,CAAA;CAAE,GACvD;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,YAAY,CAAA;CAAE,EAiD1D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,kBAAkB,GAAI,UAAU,MAAM,KAAG,YAUrD,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,cAAc,GACzB,UAAU,MAAM,EAChB,cAAc,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,KAC5C,MAOF,CAAC"}
@@ -0,0 +1,371 @@
1
+ /**
2
+ * Enhanced selector string parsing with multiple notations
3
+ * @param selector - Selector string
4
+ * @param options - Parsing options
5
+ * @returns Array of selector segments
6
+ * @example
7
+ * parseSelector('users[0].name') // [{type: 'property', value: 'users'}, {type: 'index', value: 0}, ...]
8
+ */
9
+ export const parseSelector = (selector, options = {}) => {
10
+ const { type = 'auto', throwOnError = false } = options;
11
+ if (!selector || typeof selector !== 'string') {
12
+ return [];
13
+ }
14
+ const segments = [];
15
+ let current = '';
16
+ let inBrackets = false;
17
+ let inQuotes = false;
18
+ let quoteChar = '';
19
+ let bracketContent = '';
20
+ let bracketDepth = 0;
21
+ const detectType = (str) => {
22
+ if (str.includes('..'))
23
+ return 'descendant';
24
+ if (str.includes('[?('))
25
+ return 'filter';
26
+ if (str.includes('[:') || str.includes('[0:'))
27
+ return 'slice';
28
+ if (str.includes('[,') || str.includes('[0,1]'))
29
+ return 'union';
30
+ if (str.includes('[*]') || str.includes('.*.'))
31
+ return 'wildcard';
32
+ if (str.includes('[]'))
33
+ return 'array-wildcard';
34
+ if (str.includes('[') && str.includes(']'))
35
+ return 'bracket';
36
+ return 'dot';
37
+ };
38
+ const actualType = type === 'auto' ? detectType(selector) : type;
39
+ const parseBracketContent = (content) => {
40
+ const trimmed = content.trim();
41
+ // Wildcard
42
+ if (trimmed === '*' || trimmed === '') {
43
+ return {
44
+ type: 'wildcard',
45
+ value: trimmed === '' ? '[]' : '*',
46
+ raw: trimmed === '' ? '[]' : content,
47
+ };
48
+ }
49
+ // Array wildcard
50
+ if (trimmed === '[]') {
51
+ return { type: 'wildcard', value: '[]', raw: content };
52
+ }
53
+ // Numeric index
54
+ if (/^-?\d+$/.test(trimmed)) {
55
+ return { type: 'index', value: parseInt(trimmed, 10), raw: content };
56
+ }
57
+ // Slice notation [start:end:step] or [start:end]
58
+ if (trimmed.includes(':')) {
59
+ const parts = trimmed.split(':').map((p) => p.trim());
60
+ const start = parts[0] === '' ? 0 : parseInt(parts[0], 10);
61
+ const end = parts[1] === '' ? Infinity : parseInt(parts[1], 10);
62
+ if (isNaN(start) || isNaN(end)) {
63
+ if (throwOnError)
64
+ throw new Error(`Invalid slice notation: ${content}`);
65
+ return { type: 'wildcard', value: '*', raw: content };
66
+ }
67
+ return { type: 'slice', value: [start, end], raw: content };
68
+ }
69
+ // Union notation [0,2,4]
70
+ if (trimmed.includes(',')) {
71
+ const indices = trimmed
72
+ .split(',')
73
+ .map((p) => {
74
+ const num = parseInt(p.trim(), 10);
75
+ return isNaN(num) ? -1 : num;
76
+ })
77
+ .filter((n) => n >= 0);
78
+ if (indices.length === 0) {
79
+ if (throwOnError)
80
+ throw new Error(`Invalid union notation: ${content}`);
81
+ return { type: 'wildcard', value: '*', raw: content };
82
+ }
83
+ return { type: 'union', value: indices, raw: content };
84
+ }
85
+ // Filter notation [?(@.age > 18)]
86
+ if (trimmed.startsWith('?(') && trimmed.endsWith(')')) {
87
+ const expr = trimmed.slice(2, -1);
88
+ try {
89
+ const filterFn = createFilterFunction(expr);
90
+ return { type: 'filter', value: filterFn, raw: content };
91
+ }
92
+ catch (error) {
93
+ if (throwOnError)
94
+ throw error;
95
+ return { type: 'wildcard', value: '*', raw: content };
96
+ }
97
+ }
98
+ // Quoted property
99
+ if ((trimmed.startsWith('"') && trimmed.endsWith('"')) ||
100
+ (trimmed.startsWith("'") && trimmed.endsWith("'"))) {
101
+ return { type: 'property', value: trimmed.slice(1, -1), raw: content };
102
+ }
103
+ // Regular property
104
+ return { type: 'property', value: trimmed, raw: content };
105
+ };
106
+ for (let i = 0; i < selector.length; i++) {
107
+ const char = selector[i];
108
+ const nextChar = selector[i + 1];
109
+ // Handle quotes
110
+ if ((char === '"' || char === "'") && !inQuotes) {
111
+ inQuotes = true;
112
+ quoteChar = char;
113
+ // if (inBrackets) {
114
+ // bracketContent += char;
115
+ // } else {
116
+ // current += char;
117
+ // }
118
+ continue;
119
+ }
120
+ else if (char === quoteChar && inQuotes) {
121
+ inQuotes = false;
122
+ quoteChar = '';
123
+ if (!(char === '"' || char === "'")) {
124
+ if (inBrackets) {
125
+ bracketContent += char;
126
+ }
127
+ else {
128
+ current += char;
129
+ }
130
+ }
131
+ continue;
132
+ }
133
+ // Inside quotes, just add character
134
+ if (inQuotes) {
135
+ if (inBrackets) {
136
+ bracketContent += char;
137
+ }
138
+ else {
139
+ current += char;
140
+ }
141
+ continue;
142
+ }
143
+ // Handle bracket start
144
+ if (char === '[' && !inBrackets) {
145
+ if (current) {
146
+ segments.push({ type: 'property', value: current, raw: current });
147
+ current = '';
148
+ }
149
+ inBrackets = true;
150
+ bracketContent = '';
151
+ continue;
152
+ }
153
+ // Handle bracket end
154
+ if (char === ']' && inBrackets && !inQuotes) {
155
+ inBrackets = false;
156
+ const segment = parseBracketContent(bracketContent);
157
+ segments.push(segment);
158
+ continue;
159
+ }
160
+ let lastDot = segments.length > 0 ? segments[segments.length - 1] : null;
161
+ // Handle dots
162
+ if (char === '.' && !inBrackets && !inQuotes) {
163
+ // Check for descendant selector (..)
164
+ if (nextChar === '.') {
165
+ // lastDot = true
166
+ const l = selector.split('..')[0];
167
+ segments.push({ type: 'property', value: l, raw: l });
168
+ segments.push({ type: 'descendant', value: '..', raw: '..' });
169
+ i++; // Skip next dot
170
+ }
171
+ else if (current) {
172
+ if (current === '*') {
173
+ segments.push({ type: 'wildcard', value: current, raw: current });
174
+ }
175
+ else {
176
+ segments.push({ type: 'property', value: current, raw: current });
177
+ }
178
+ current = '';
179
+ }
180
+ continue;
181
+ }
182
+ // Add character to current buffer
183
+ if (inBrackets) {
184
+ bracketContent += char;
185
+ }
186
+ else {
187
+ if (lastDot && lastDot.type !== 'descendant') {
188
+ current += char;
189
+ }
190
+ else {
191
+ const l = selector.split(lastDot?.raw)[1];
192
+ if (l !== undefined) {
193
+ // current = l;
194
+ current = l;
195
+ }
196
+ else {
197
+ current += char;
198
+ }
199
+ }
200
+ }
201
+ }
202
+ if (current) {
203
+ segments.push({ type: 'property', value: current, raw: current });
204
+ }
205
+ // console.log('checking for last', segments);
206
+ // Convert numeric strings in property segments
207
+ return segments.map((segment) => {
208
+ if (segment.type === 'property' && typeof segment.value === 'string') {
209
+ if (/^-?\d+$/.test(segment.value)) {
210
+ const num = parseInt(segment.value, 10);
211
+ if (!isNaN(num)) {
212
+ // return { ...segment, type: 'property', value: String(num) };
213
+ return { ...segment, type: 'index', value: num };
214
+ }
215
+ }
216
+ }
217
+ return segment;
218
+ });
219
+ };
220
+ /**
221
+ * Creates a filter function from expression string
222
+ * @param expr - Filter expression (e.g., '@.age > 18')
223
+ * @returns Filter function
224
+ */
225
+ export const createFilterFunction = (expr) => {
226
+ // Simple expression parser
227
+ // Supports: @.property, comparisons, logical operators
228
+ const safeExpr = expr
229
+ .replace(/@\.([a-zA-Z_$][\w$]*)/g, (_, prop) => `item.${prop}`)
230
+ .replace(/@/g, 'item');
231
+ try {
232
+ // eslint-disable-next-line @typescript-eslint/no-implied-eval
233
+ return new Function('item', `return ${safeExpr}`);
234
+ }
235
+ catch (error) {
236
+ throw new Error(`Invalid filter expression: ${expr}`);
237
+ }
238
+ };
239
+ /**
240
+ * Stringifies selector segments back to string
241
+ */
242
+ export const stringifySelector = (segments) => {
243
+ const parts = [];
244
+ for (let i = 0; i < segments.length; i++) {
245
+ const segment = segments[i];
246
+ const prevSegment = i > 0 ? segments[i - 1] : null;
247
+ switch (segment.type) {
248
+ case 'property':
249
+ // Check if property needs quotes
250
+ const needsQuotes = /[\.\[\]\s]/.test(String(segment.value));
251
+ if (needsQuotes) {
252
+ parts.push(`["${segment.value}"]`);
253
+ }
254
+ else {
255
+ if (prevSegment && prevSegment.type !== 'descendant') {
256
+ parts.push('.');
257
+ }
258
+ parts.push(String(segment.value));
259
+ }
260
+ break;
261
+ case 'index':
262
+ parts.push(`[${segment.value}]`);
263
+ break;
264
+ case 'wildcard':
265
+ if (segment.value === '[]') {
266
+ parts.push('[]');
267
+ }
268
+ else {
269
+ parts.push('[*]');
270
+ }
271
+ break;
272
+ case 'slice':
273
+ const [start, end] = segment.value;
274
+ parts.push(`[${start}:${end === Infinity ? '' : end}]`);
275
+ break;
276
+ case 'union':
277
+ const indices = segment.value;
278
+ parts.push(`[${indices.join(',')}]`);
279
+ break;
280
+ case 'filter':
281
+ parts.push(`[?(${segment.raw?.slice(2, -1) || ''})]`);
282
+ break;
283
+ case 'descendant':
284
+ parts.push('..');
285
+ break;
286
+ }
287
+ }
288
+ return parts.join('').replace(/\.\[/g, '[');
289
+ };
290
+ /**
291
+ * Checks if selector matches type signature
292
+ */
293
+ export const validateSelector = (selector, options = {}) => {
294
+ // Handle array of selectors
295
+ if (Array.isArray(selector)) {
296
+ return selector.map((sel) => validateSelector(sel, options));
297
+ }
298
+ //check if selector starts with alphabet
299
+ if (!/^[a-zA-Z]/.test(selector)) {
300
+ return {
301
+ valid: false,
302
+ error: `Selector starts with '.'`,
303
+ type: detectSelectorType(selector),
304
+ };
305
+ }
306
+ //check if selector ends with alphabet
307
+ if (!/[a-zA-Z]$/.test(selector)) {
308
+ return {
309
+ valid: false,
310
+ error: `Selector end with '.'`,
311
+ type: detectSelectorType(selector),
312
+ };
313
+ }
314
+ try {
315
+ const segments = parseSelector(selector, { throwOnError: true });
316
+ const type = detectSelectorType(selector);
317
+ // console.log('validate', segments, type);
318
+ if (options.allowedTypes) {
319
+ if (!options.allowedTypes.includes(type)) {
320
+ return {
321
+ valid: false,
322
+ error: `Selector type ${type} not allowed. Allowed: ${options.allowedTypes.join(', ')}`,
323
+ type,
324
+ };
325
+ }
326
+ }
327
+ return { valid: true, type: detectSelectorType(selector) };
328
+ }
329
+ catch (error) {
330
+ return { valid: false, error: error.message };
331
+ }
332
+ };
333
+ /**
334
+ * Detects selector type from string
335
+ */
336
+ export const detectSelectorType = (selector) => {
337
+ if (selector.includes('..'))
338
+ return 'descendant';
339
+ if (selector.includes('[?('))
340
+ return 'filter';
341
+ if (selector.includes('[:') || selector.includes('[0:'))
342
+ return 'slice';
343
+ // we need regex to test union but the actually regex catch brackets
344
+ if (/\[[^\]]*,[^\]]*\]/.test(selector))
345
+ return 'union';
346
+ if (selector.includes('[*]') || selector.includes('.*.'))
347
+ return 'wildcard';
348
+ if (selector.includes('[]'))
349
+ return 'array-wildcard';
350
+ if (selector.includes('[') && selector.includes(']'))
351
+ return 'bracket';
352
+ return 'dot';
353
+ };
354
+ /**
355
+ * Creates a selector from a template
356
+ * @param template - Template string
357
+ * @param replacements - Replacements object
358
+ * @example
359
+ * createSelector('a.{id}', {id: 1}) // 'a.1'
360
+ * createSelector('a.{id}.{name}', {id: 1, name: 'John'}) // 'a.1.John'
361
+ * createSelector('a.{id}.{name}.{age}', {id: 1, name: 'John', age: 30}) // 'a.1.John.30'
362
+ * createSelector('users[{id}].{property}', {id: 1}) // 'users[1].property'
363
+ */
364
+ export const createSelector = (template, replacements) => {
365
+ return template.replace(/\{(\w+)\}/g, (_, key) => {
366
+ if (key in replacements) {
367
+ return String(replacements[key]);
368
+ }
369
+ return `{${key}}`;
370
+ });
371
+ };
@@ -0,0 +1 @@
1
+ var g=(t,n={})=>{let{type:l="auto",throwOnError:i=!1}=n;if(!t||typeof t!="string")return[];let s=[],a="",o=!1,d=!1,f="",y="",b=0,T=l==="auto"?(r=>r.includes("..")?"descendant":r.includes("[?(")?"filter":r.includes("[:")||r.includes("[0:")?"slice":r.includes("[,")||r.includes("[0,1]")?"union":r.includes("[*]")||r.includes(".*.")?"wildcard":r.includes("[]")?"array-wildcard":r.includes("[")&&r.includes("]")?"bracket":"dot")(t):l,h=r=>{let e=r.trim();if(e==="*"||e==="")return{type:"wildcard",value:e===""?"[]":"*",raw:e===""?"[]":r};if(e==="[]")return{type:"wildcard",value:"[]",raw:r};if(/^-?\d+$/.test(e))return{type:"index",value:parseInt(e,10),raw:r};if(e.includes(":")){let c=e.split(":").map(v=>v.trim()),u=c[0]===""?0:parseInt(c[0],10),p=c[1]===""?1/0:parseInt(c[1],10);if(isNaN(u)||isNaN(p)){if(i)throw new Error(`Invalid slice notation: ${r}`);return{type:"wildcard",value:"*",raw:r}}return{type:"slice",value:[u,p],raw:r}}if(e.includes(",")){let c=e.split(",").map(u=>{let p=parseInt(u.trim(),10);return isNaN(p)?-1:p}).filter(u=>u>=0);if(c.length===0){if(i)throw new Error(`Invalid union notation: ${r}`);return{type:"wildcard",value:"*",raw:r}}return{type:"union",value:c,raw:r}}if(e.startsWith("?(")&&e.endsWith(")")){let c=e.slice(2,-1);try{return{type:"filter",value:S(c),raw:r}}catch(u){if(i)throw u;return{type:"wildcard",value:"*",raw:r}}}return e.startsWith('"')&&e.endsWith('"')||e.startsWith("'")&&e.endsWith("'")?{type:"property",value:e.slice(1,-1),raw:r}:{type:"property",value:e,raw:r}};for(let r=0;r<t.length;r++){let e=t[r],c=t[r+1];if((e==='"'||e==="'")&&!d){d=!0,f=e;continue}else if(e===f&&d){d=!1,f="",e==='"'||e==="'"||(o?y+=e:a+=e);continue}if(d){o?y+=e:a+=e;continue}if(e==="["&&!o){a&&(s.push({type:"property",value:a,raw:a}),a=""),o=!0,y="";continue}if(e==="]"&&o&&!d){o=!1;let p=h(y);s.push(p);continue}let u=s.length>0?s[s.length-1]:null;if(e==="."&&!o&&!d){if(c==="."){let p=t.split("..")[0];s.push({type:"property",value:p,raw:p}),s.push({type:"descendant",value:"..",raw:".."}),r++}else a&&(a==="*"?s.push({type:"wildcard",value:a,raw:a}):s.push({type:"property",value:a,raw:a}),a="");continue}if(o)y+=e;else if(u&&u.type!=="descendant")a+=e;else{let p=t.split(u?.raw)[1];p!==void 0?a=p:a+=e}}return a&&s.push({type:"property",value:a,raw:a}),s.map(r=>{if(r.type==="property"&&typeof r.value=="string"&&/^-?\d+$/.test(r.value)){let e=parseInt(r.value,10);if(!isNaN(e))return{...r,type:"index",value:e}}return r})},S=t=>{let n=t.replace(/@\.([a-zA-Z_$][\w$]*)/g,(l,i)=>`item.${i}`).replace(/@/g,"item");try{return new Function("item",`return ${n}`)}catch{throw new Error(`Invalid filter expression: ${t}`)}},x=t=>{let n=[];for(let l=0;l<t.length;l++){let i=t[l],s=l>0?t[l-1]:null;switch(i.type){case"property":/[\.\[\]\s]/.test(String(i.value))?n.push(`["${i.value}"]`):(s&&s.type!=="descendant"&&n.push("."),n.push(String(i.value)));break;case"index":n.push(`[${i.value}]`);break;case"wildcard":i.value==="[]"?n.push("[]"):n.push("[*]");break;case"slice":let[o,d]=i.value;n.push(`[${o}:${d===1/0?"":d}]`);break;case"union":let f=i.value;n.push(`[${f.join(",")}]`);break;case"filter":n.push(`[?(${i.raw?.slice(2,-1)||""})]`);break;case"descendant":n.push("..");break}}return n.join("").replace(/\.\[/g,"[")},m=(t,n={})=>{if(Array.isArray(t))return t.map(l=>m(l,n));if(!/^[a-zA-Z]/.test(t))return{valid:!1,error:"Selector starts with '.'",type:w(t)};if(!/[a-zA-Z]$/.test(t))return{valid:!1,error:"Selector end with '.'",type:w(t)};try{let l=g(t,{throwOnError:!0}),i=w(t);return n.allowedTypes&&!n.allowedTypes.includes(i)?{valid:!1,error:`Selector type ${i} not allowed. Allowed: ${n.allowedTypes.join(", ")}`,type:i}:{valid:!0,type:w(t)}}catch(l){return{valid:!1,error:l.message}}},w=t=>t.includes("..")?"descendant":t.includes("[?(")?"filter":t.includes("[:")||t.includes("[0:")?"slice":/\[[^\]]*,[^\]]*\]/.test(t)?"union":t.includes("[*]")||t.includes(".*.")?"wildcard":t.includes("[]")?"array-wildcard":t.includes("[")&&t.includes("]")?"bracket":"dot",k=(t,n)=>t.replace(/\{(\w+)\}/g,(l,i)=>i in n?String(n[i]):`{${i}}`);export{S as createFilterFunction,k as createSelector,w as detectSelectorType,g as parseSelector,x as stringifySelector,m as validateSelector};