@synnaxlabs/x 0.16.1 → 0.24.0

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 (516) hide show
  1. package/.turbo/turbo-build.log +99 -7
  2. package/.vscode/settings.json +5 -1
  3. package/dist/base-B48bPNx5.cjs +1 -0
  4. package/dist/base-DnZzEvvz.js +38 -0
  5. package/dist/binary.cjs +3 -0
  6. package/dist/binary.js +100 -0
  7. package/dist/bounds-Bh_QBZZK.cjs +1 -0
  8. package/dist/bounds-Dmn-hd_-.js +129 -0
  9. package/dist/bounds.cjs +1 -0
  10. package/dist/bounds.js +4 -0
  11. package/dist/box-C92jYSNY.js +205 -0
  12. package/dist/box-m3dlc1kR.cjs +1 -0
  13. package/dist/box.cjs +1 -0
  14. package/dist/box.js +4 -0
  15. package/dist/caseconv.cjs +1 -0
  16. package/dist/caseconv.js +4 -0
  17. package/dist/change-C-YELKx6.cjs +1 -0
  18. package/dist/change-DLl6DccR.js +12 -0
  19. package/dist/change.cjs +1 -0
  20. package/dist/change.js +4 -0
  21. package/dist/compare.cjs +1 -0
  22. package/dist/compare.js +4 -0
  23. package/dist/debounce.cjs +1 -0
  24. package/dist/debounce.js +17 -0
  25. package/dist/deep.cjs +1 -0
  26. package/dist/deep.js +121 -0
  27. package/dist/destructor.cjs +1 -0
  28. package/dist/destructor.js +1 -0
  29. package/dist/dimensions-BAuHfd-b.js +44 -0
  30. package/dist/dimensions-zMcb9pMk.cjs +1 -0
  31. package/dist/dimensions.cjs +1 -0
  32. package/dist/dimensions.js +4 -0
  33. package/dist/direction-CScbfCdT.js +16 -0
  34. package/dist/direction-DZbN47uL.cjs +1 -0
  35. package/dist/direction.cjs +1 -0
  36. package/dist/direction.js +4 -0
  37. package/dist/external-B-DoBvh7.cjs +1 -0
  38. package/dist/external-DI9122wF.js +27 -0
  39. package/dist/identity.cjs +1 -0
  40. package/dist/identity.js +4 -0
  41. package/dist/index-BpCPHf78.cjs +1 -0
  42. package/dist/index-Bt5ivtN9.js +95 -0
  43. package/dist/index-BwkQTA-j.js +360 -0
  44. package/dist/index-CuG8fceO.cjs +1 -0
  45. package/dist/index.cjs +3 -0
  46. package/dist/index.js +178 -0
  47. package/dist/kv.cjs +1 -0
  48. package/dist/kv.js +6 -0
  49. package/dist/location-CfP9TAnW.js +94 -0
  50. package/dist/location-c3g6WKs-.cjs +1 -0
  51. package/dist/location.cjs +1 -0
  52. package/dist/location.js +4 -0
  53. package/dist/observe.cjs +1 -0
  54. package/dist/observe.js +43 -0
  55. package/dist/path-BO4pyGZf.cjs +1 -0
  56. package/dist/path-nTHmt_4i.js +65 -0
  57. package/dist/position-BBnkwGX1.cjs +1 -0
  58. package/dist/position-B_aphAR0.js +87 -0
  59. package/dist/position.cjs +1 -0
  60. package/dist/position.js +4 -0
  61. package/dist/record.cjs +1 -0
  62. package/dist/record.js +9 -0
  63. package/dist/runtime.cjs +1 -0
  64. package/dist/runtime.js +4 -0
  65. package/dist/scale-C8axypQ2.cjs +1 -0
  66. package/dist/scale-CgtgqlYU.js +205 -0
  67. package/dist/scale.cjs +1 -0
  68. package/dist/scale.js +4 -0
  69. package/dist/search.cjs +1 -0
  70. package/dist/search.js +15 -0
  71. package/dist/series-8E6FnWBU.cjs +11 -0
  72. package/dist/series-DCJSrg1P.js +1629 -0
  73. package/dist/spatial-BOhaO8xN.cjs +1 -0
  74. package/dist/spatial-DozyssiN.js +11 -0
  75. package/dist/spatial.cjs +1 -0
  76. package/dist/spatial.js +20 -0
  77. package/dist/{binary → src/binary}/encoder.d.ts +26 -2
  78. package/dist/src/binary/encoder.d.ts.map +1 -0
  79. package/dist/src/binary/encoder.spec.d.ts.map +1 -0
  80. package/dist/src/binary/index.d.ts.map +1 -0
  81. package/dist/src/caseconv/caseconv.d.ts +6 -0
  82. package/dist/src/caseconv/caseconv.d.ts.map +1 -0
  83. package/dist/src/caseconv/index.d.ts +2 -0
  84. package/dist/src/caseconv/index.d.ts.map +1 -0
  85. package/dist/{change → src/change}/change.d.ts +10 -9
  86. package/dist/src/change/change.d.ts.map +1 -0
  87. package/dist/src/change/index.d.ts.map +1 -0
  88. package/dist/src/clamp/clamp.d.ts.map +1 -0
  89. package/dist/src/clamp/index.d.ts +2 -0
  90. package/dist/src/clamp/index.d.ts.map +1 -0
  91. package/dist/{compare → src/compare}/compare.d.ts +6 -4
  92. package/dist/src/compare/compare.d.ts.map +1 -0
  93. package/dist/src/compare/compare.spec.d.ts +2 -0
  94. package/dist/src/compare/compare.spec.d.ts.map +1 -0
  95. package/dist/src/compare/index.d.ts.map +1 -0
  96. package/dist/src/control/control.d.ts +107 -0
  97. package/dist/src/control/control.d.ts.map +1 -0
  98. package/dist/src/control/index.d.ts +2 -0
  99. package/dist/src/control/index.d.ts.map +1 -0
  100. package/dist/src/debounce/debounce.d.ts.map +1 -0
  101. package/dist/src/debounce/debounce.spec.d.ts +2 -0
  102. package/dist/src/debounce/debounce.spec.d.ts.map +1 -0
  103. package/dist/src/debounce/index.d.ts +2 -0
  104. package/dist/src/debounce/index.d.ts.map +1 -0
  105. package/dist/src/deep/copy.d.ts.map +1 -0
  106. package/dist/{deep → src/deep}/delete.d.ts +2 -1
  107. package/dist/src/deep/delete.d.ts.map +1 -0
  108. package/dist/{deep → src/deep}/delete.spec.d.ts.map +1 -1
  109. package/dist/src/deep/difference.d.ts.map +1 -0
  110. package/dist/src/deep/difference.spec.d.ts.map +1 -0
  111. package/dist/src/deep/equal.d.ts.map +1 -0
  112. package/dist/{deep → src/deep}/equal.spec.d.ts.map +1 -1
  113. package/dist/{deep → src/deep}/external.d.ts +3 -4
  114. package/dist/src/deep/external.d.ts.map +1 -0
  115. package/dist/src/deep/index.d.ts.map +1 -0
  116. package/dist/src/deep/merge.d.ts +12 -0
  117. package/dist/src/deep/merge.d.ts.map +1 -0
  118. package/dist/{deep → src/deep}/merge.spec.d.ts.map +1 -1
  119. package/dist/src/deep/partial.d.ts.map +1 -0
  120. package/dist/src/deep/path.d.ts +54 -0
  121. package/dist/src/deep/path.d.ts.map +1 -0
  122. package/dist/{deep → src/deep}/path.spec.d.ts.map +1 -1
  123. package/dist/src/destructor.d.ts.map +1 -0
  124. package/dist/{identity.d.ts → src/identity.d.ts} +2 -1
  125. package/dist/src/identity.d.ts.map +1 -0
  126. package/dist/{index.d.ts → src/index.d.ts} +22 -20
  127. package/dist/src/index.d.ts.map +1 -0
  128. package/dist/src/invert.d.ts.map +1 -0
  129. package/dist/src/join.d.ts.map +1 -0
  130. package/dist/src/kv/index.d.ts.map +1 -0
  131. package/dist/src/kv/types.d.ts.map +1 -0
  132. package/dist/src/math/index.d.ts +2 -0
  133. package/dist/src/math/index.d.ts.map +1 -0
  134. package/dist/src/math/math.d.ts +11 -0
  135. package/dist/src/math/math.d.ts.map +1 -0
  136. package/dist/src/migrate/index.d.ts.map +1 -0
  137. package/dist/src/migrate/migrate.d.ts +29 -0
  138. package/dist/src/migrate/migrate.d.ts.map +1 -0
  139. package/dist/src/migrate/migrate.spec.d.ts.map +1 -0
  140. package/dist/{mock → src/mock}/MockGLBufferController.d.ts +2 -1
  141. package/dist/src/mock/MockGLBufferController.d.ts.map +1 -0
  142. package/dist/src/mock/index.d.ts.map +1 -0
  143. package/dist/src/observe/index.d.ts.map +1 -0
  144. package/dist/src/observe/observe.d.ts +24 -0
  145. package/dist/src/observe/observe.d.ts.map +1 -0
  146. package/dist/src/observe/obsever.spec.d.ts +2 -0
  147. package/dist/src/observe/obsever.spec.d.ts.map +1 -0
  148. package/dist/src/optional.d.ts.map +1 -0
  149. package/dist/{primitive.d.ts → src/primitive.d.ts} +2 -1
  150. package/dist/src/primitive.d.ts.map +1 -0
  151. package/dist/{record.d.ts → src/record.d.ts} +7 -8
  152. package/dist/src/record.d.ts.map +1 -0
  153. package/dist/{renderable.d.ts → src/renderable.d.ts} +2 -1
  154. package/dist/src/renderable.d.ts.map +1 -0
  155. package/dist/src/runtime/detect.d.ts.map +1 -0
  156. package/dist/src/runtime/external.d.ts.map +1 -0
  157. package/dist/src/runtime/index.d.ts.map +1 -0
  158. package/dist/src/runtime/os.d.ts +20 -0
  159. package/dist/src/runtime/os.d.ts.map +1 -0
  160. package/dist/{search.d.ts → src/search.d.ts} +5 -2
  161. package/dist/src/search.d.ts.map +1 -0
  162. package/dist/src/shallowCopy.d.ts +2 -0
  163. package/dist/src/shallowCopy.d.ts.map +1 -0
  164. package/dist/{spatial → src/spatial}/base.d.ts +30 -5
  165. package/dist/src/spatial/base.d.ts.map +1 -0
  166. package/dist/src/spatial/bounds/bounds.d.ts +148 -0
  167. package/dist/src/spatial/bounds/bounds.d.ts.map +1 -0
  168. package/dist/src/spatial/bounds/bounds.spec.d.ts.map +1 -0
  169. package/dist/src/spatial/bounds/index.d.ts.map +1 -0
  170. package/dist/{spatial → src/spatial}/box/box.d.ts +73 -24
  171. package/dist/src/spatial/box/box.d.ts.map +1 -0
  172. package/dist/src/spatial/box/box.spec.d.ts.map +1 -0
  173. package/dist/src/spatial/box/index.d.ts.map +1 -0
  174. package/dist/{spatial → src/spatial}/dimensions/dimensions.d.ts +4 -3
  175. package/dist/src/spatial/dimensions/dimensions.d.ts.map +1 -0
  176. package/dist/src/spatial/dimensions/dimensions.spec.d.ts.map +1 -0
  177. package/dist/src/spatial/dimensions/index.d.ts.map +1 -0
  178. package/dist/{spatial → src/spatial}/direction/direction.d.ts +4 -3
  179. package/dist/src/spatial/direction/direction.d.ts.map +1 -0
  180. package/dist/src/spatial/direction/direction.spec.d.ts.map +1 -0
  181. package/dist/src/spatial/direction/index.d.ts.map +1 -0
  182. package/dist/{spatial → src/spatial}/external.d.ts +2 -2
  183. package/dist/src/spatial/external.d.ts.map +1 -0
  184. package/dist/src/spatial/index.d.ts.map +1 -0
  185. package/dist/src/spatial/location/index.d.ts.map +1 -0
  186. package/dist/{spatial → src/spatial}/location/location.d.ts +4 -3
  187. package/dist/src/spatial/location/location.d.ts.map +1 -0
  188. package/dist/src/spatial/location/location.spec.d.ts.map +1 -0
  189. package/dist/src/spatial/position/index.d.ts.map +1 -0
  190. package/dist/{spatial → src/spatial}/position/position.d.ts +4 -4
  191. package/dist/src/spatial/position/position.d.ts.map +1 -0
  192. package/dist/src/spatial/position/position.spec.d.ts.map +1 -0
  193. package/dist/src/spatial/scale/index.d.ts.map +1 -0
  194. package/dist/{spatial → src/spatial}/scale/scale.d.ts +15 -62
  195. package/dist/src/spatial/scale/scale.d.ts.map +1 -0
  196. package/dist/src/spatial/scale/scale.spec.d.ts.map +1 -0
  197. package/dist/src/spatial/spatial.d.ts +2 -0
  198. package/dist/src/spatial/spatial.d.ts.map +1 -0
  199. package/dist/src/spatial/xy/index.d.ts.map +1 -0
  200. package/dist/{spatial → src/spatial}/xy/xy.d.ts +16 -25
  201. package/dist/src/spatial/xy/xy.d.ts.map +1 -0
  202. package/dist/{spatial → src/spatial}/xy/xy.spec.d.ts.map +1 -1
  203. package/dist/src/telem/generate.d.ts +4 -0
  204. package/dist/src/telem/generate.d.ts.map +1 -0
  205. package/dist/src/telem/gl.d.ts.map +1 -0
  206. package/dist/{telem → src/telem}/index.d.ts +1 -1
  207. package/dist/src/telem/index.d.ts.map +1 -0
  208. package/dist/{telem → src/telem}/series.d.ts +10 -8
  209. package/dist/src/telem/series.d.ts.map +1 -0
  210. package/dist/{telem → src/telem}/series.spec.d.ts.map +1 -1
  211. package/dist/{telem → src/telem}/telem.d.ts +19 -21
  212. package/dist/src/telem/telem.d.ts.map +1 -0
  213. package/dist/{telem → src/telem}/telem.spec.d.ts.map +1 -1
  214. package/dist/src/toArray.d.ts.map +1 -0
  215. package/dist/src/transform.d.ts +6 -0
  216. package/dist/src/transform.d.ts.map +1 -0
  217. package/dist/src/unique.d.ts.map +1 -0
  218. package/dist/src/url/index.d.ts +2 -0
  219. package/dist/src/url/index.d.ts.map +1 -0
  220. package/dist/src/url/url.d.ts.map +1 -0
  221. package/dist/{url → src/url}/url.spec.d.ts.map +1 -1
  222. package/dist/src/worker/index.d.ts +2 -0
  223. package/dist/src/worker/index.d.ts.map +1 -0
  224. package/dist/{worker → src/worker}/worker.d.ts +4 -4
  225. package/dist/src/worker/worker.d.ts.map +1 -0
  226. package/dist/src/worker/worker.spec.d.ts.map +1 -0
  227. package/dist/src/zodutil/index.d.ts +2 -0
  228. package/dist/src/zodutil/index.d.ts.map +1 -0
  229. package/dist/src/zodutil/zodutil.d.ts +6 -0
  230. package/dist/src/zodutil/zodutil.d.ts.map +1 -0
  231. package/dist/src/zodutil/zodutil.spec.d.ts +2 -0
  232. package/dist/src/zodutil/zodutil.spec.d.ts.map +1 -0
  233. package/dist/telem.cjs +1 -0
  234. package/dist/telem.js +17 -0
  235. package/dist/toArray.cjs +1 -0
  236. package/dist/toArray.js +5 -0
  237. package/dist/unique.cjs +1 -0
  238. package/dist/unique.js +4 -0
  239. package/dist/url.cjs +1 -0
  240. package/dist/url.js +54 -0
  241. package/dist/worker.cjs +1 -0
  242. package/dist/worker.js +47 -0
  243. package/dist/xy-D1ZbIqpT.js +90 -0
  244. package/dist/xy-cP-FXJtR.cjs +1 -0
  245. package/dist/xy.cjs +1 -0
  246. package/dist/xy.js +4 -0
  247. package/dist/zodutil.cjs +1 -0
  248. package/dist/zodutil.js +21 -0
  249. package/eslint.config.js +12 -0
  250. package/package.json +157 -13
  251. package/src/binary/encoder.spec.ts +150 -7
  252. package/src/binary/encoder.ts +110 -9
  253. package/src/binary/index.ts +1 -1
  254. package/src/caseconv/caseconv.ts +31 -0
  255. package/src/caseconv/index.ts +10 -0
  256. package/src/change/change.ts +7 -6
  257. package/src/change/index.ts +1 -1
  258. package/src/{clamp.ts → clamp/clamp.ts} +1 -1
  259. package/src/clamp/index.ts +10 -0
  260. package/src/compare/compare.spec.ts +49 -0
  261. package/src/compare/compare.ts +37 -10
  262. package/src/compare/index.ts +1 -1
  263. package/src/control/control.ts +77 -0
  264. package/src/control/index.ts +1 -0
  265. package/src/debounce/debounce.spec.ts +52 -0
  266. package/src/{debounce.ts → debounce/debounce.ts} +4 -4
  267. package/src/debounce/index.ts +10 -0
  268. package/src/deep/copy.ts +2 -3
  269. package/src/deep/delete.spec.ts +2 -2
  270. package/src/deep/delete.ts +3 -2
  271. package/src/deep/difference.spec.ts +28 -27
  272. package/src/deep/difference.ts +13 -11
  273. package/src/deep/equal.spec.ts +4 -4
  274. package/src/deep/equal.ts +5 -5
  275. package/src/deep/external.ts +4 -5
  276. package/src/deep/index.ts +1 -1
  277. package/src/deep/merge.spec.ts +120 -4
  278. package/src/deep/merge.ts +50 -6
  279. package/src/deep/partial.ts +1 -1
  280. package/src/deep/path.spec.ts +91 -39
  281. package/src/deep/path.ts +111 -46
  282. package/src/destructor.ts +2 -2
  283. package/src/identity.ts +1 -1
  284. package/src/index.ts +23 -21
  285. package/src/invert.ts +9 -0
  286. package/src/join.ts +1 -1
  287. package/src/kv/index.ts +1 -1
  288. package/src/kv/types.ts +1 -1
  289. package/src/math/index.ts +10 -0
  290. package/src/math/math.ts +33 -0
  291. package/src/migrate/index.ts +9 -0
  292. package/src/migrate/migrate.spec.ts +65 -54
  293. package/src/migrate/migrate.ts +126 -17
  294. package/src/mock/MockGLBufferController.ts +6 -6
  295. package/src/mock/index.ts +1 -1
  296. package/src/observe/index.ts +1 -1
  297. package/src/observe/observe.ts +37 -6
  298. package/src/observe/obsever.spec.ts +56 -0
  299. package/src/optional.ts +3 -4
  300. package/src/primitive.ts +1 -1
  301. package/src/record.ts +10 -6
  302. package/src/renderable.ts +1 -1
  303. package/src/runtime/detect.ts +3 -3
  304. package/src/runtime/external.ts +1 -1
  305. package/src/runtime/index.ts +1 -1
  306. package/src/runtime/os.ts +17 -5
  307. package/src/search.ts +3 -1
  308. package/src/shallowCopy.ts +5 -6
  309. package/src/spatial/base.ts +13 -5
  310. package/src/spatial/bounds/bounds.spec.ts +259 -180
  311. package/src/spatial/bounds/bounds.ts +200 -85
  312. package/src/spatial/bounds/index.ts +2 -2
  313. package/src/spatial/box/box.spec.ts +211 -2
  314. package/src/spatial/box/box.ts +97 -49
  315. package/src/spatial/box/index.ts +2 -2
  316. package/src/spatial/dimensions/dimensions.spec.ts +1 -1
  317. package/src/spatial/dimensions/dimensions.ts +4 -4
  318. package/src/spatial/dimensions/index.ts +2 -2
  319. package/src/spatial/direction/direction.spec.ts +1 -1
  320. package/src/spatial/direction/direction.ts +7 -7
  321. package/src/spatial/direction/index.ts +2 -2
  322. package/src/spatial/external.ts +3 -3
  323. package/src/spatial/index.ts +1 -1
  324. package/src/spatial/location/index.ts +2 -2
  325. package/src/spatial/location/location.spec.ts +1 -1
  326. package/src/spatial/location/location.ts +21 -21
  327. package/src/spatial/position/index.ts +1 -1
  328. package/src/spatial/position/position.spec.ts +1 -1
  329. package/src/spatial/position/position.ts +3 -20
  330. package/src/spatial/scale/index.ts +2 -2
  331. package/src/spatial/scale/scale.spec.ts +3 -3
  332. package/src/spatial/scale/scale.ts +3 -3
  333. package/src/spatial/spatial.ts +5 -5
  334. package/src/spatial/xy/index.ts +2 -2
  335. package/src/spatial/xy/xy.spec.ts +93 -44
  336. package/src/spatial/xy/xy.ts +20 -27
  337. package/src/telem/generate.ts +1 -1
  338. package/src/telem/gl.ts +1 -1
  339. package/src/telem/index.ts +2 -2
  340. package/src/telem/series.spec.ts +64 -5
  341. package/src/telem/series.ts +47 -35
  342. package/src/telem/telem.spec.ts +130 -2
  343. package/src/telem/telem.ts +63 -23
  344. package/src/toArray.ts +2 -2
  345. package/src/transform.ts +9 -2
  346. package/src/unique.ts +1 -1
  347. package/src/url/index.ts +2 -2
  348. package/src/url/url.spec.ts +2 -2
  349. package/src/url/url.ts +4 -4
  350. package/src/worker/index.ts +10 -0
  351. package/src/worker/worker.spec.ts +2 -2
  352. package/src/worker/worker.ts +13 -13
  353. package/src/zodutil/index.ts +10 -0
  354. package/src/zodutil/zodutil.spec.ts +103 -0
  355. package/src/zodutil/zodutil.ts +44 -0
  356. package/tsconfig.json +1 -0
  357. package/tsconfig.tsbuildinfo +1 -0
  358. package/vite.config.ts +39 -3
  359. package/.eslintrc.cjs +0 -18
  360. package/dist/binary/encoder.d.ts.map +0 -1
  361. package/dist/binary/encoder.spec.d.ts.map +0 -1
  362. package/dist/binary/index.d.ts.map +0 -1
  363. package/dist/case.d.ts +0 -6
  364. package/dist/case.d.ts.map +0 -1
  365. package/dist/change/change.d.ts.map +0 -1
  366. package/dist/change/index.d.ts.map +0 -1
  367. package/dist/clamp.d.ts.map +0 -1
  368. package/dist/compare/compare.d.ts.map +0 -1
  369. package/dist/compare/index.d.ts.map +0 -1
  370. package/dist/debounce.d.ts.map +0 -1
  371. package/dist/deep/copy.d.ts.map +0 -1
  372. package/dist/deep/delete.d.ts.map +0 -1
  373. package/dist/deep/difference.d.ts.map +0 -1
  374. package/dist/deep/difference.spec.d.ts.map +0 -1
  375. package/dist/deep/equal.d.ts.map +0 -1
  376. package/dist/deep/external.d.ts.map +0 -1
  377. package/dist/deep/index.d.ts.map +0 -1
  378. package/dist/deep/memo.d.ts +0 -2
  379. package/dist/deep/memo.d.ts.map +0 -1
  380. package/dist/deep/merge.d.ts +0 -3
  381. package/dist/deep/merge.d.ts.map +0 -1
  382. package/dist/deep/partial.d.ts.map +0 -1
  383. package/dist/deep/path.d.ts +0 -37
  384. package/dist/deep/path.d.ts.map +0 -1
  385. package/dist/destructor.d.ts.map +0 -1
  386. package/dist/identity.d.ts.map +0 -1
  387. package/dist/index.d.ts.map +0 -1
  388. package/dist/invert.d.ts.map +0 -1
  389. package/dist/join.d.ts.map +0 -1
  390. package/dist/kv/index.d.ts.map +0 -1
  391. package/dist/kv/types.d.ts.map +0 -1
  392. package/dist/migrate/index.d.ts.map +0 -1
  393. package/dist/migrate/migrate.d.ts +0 -16
  394. package/dist/migrate/migrate.d.ts.map +0 -1
  395. package/dist/migrate/migrate.spec.d.ts.map +0 -1
  396. package/dist/mock/MockGLBufferController.d.ts.map +0 -1
  397. package/dist/mock/index.d.ts.map +0 -1
  398. package/dist/observe/index.d.ts.map +0 -1
  399. package/dist/observe/observe.d.ts +0 -12
  400. package/dist/observe/observe.d.ts.map +0 -1
  401. package/dist/optional.d.ts.map +0 -1
  402. package/dist/primitive.d.ts.map +0 -1
  403. package/dist/record.d.ts.map +0 -1
  404. package/dist/renderable.d.ts.map +0 -1
  405. package/dist/runtime/detect.d.ts.map +0 -1
  406. package/dist/runtime/external.d.ts.map +0 -1
  407. package/dist/runtime/index.d.ts.map +0 -1
  408. package/dist/runtime/os.d.ts +0 -10
  409. package/dist/runtime/os.d.ts.map +0 -1
  410. package/dist/search.d.ts.map +0 -1
  411. package/dist/shallowCopy.d.ts +0 -2
  412. package/dist/shallowCopy.d.ts.map +0 -1
  413. package/dist/spatial/base.d.ts.map +0 -1
  414. package/dist/spatial/bounds/bounds.d.ts +0 -71
  415. package/dist/spatial/bounds/bounds.d.ts.map +0 -1
  416. package/dist/spatial/bounds/bounds.spec.d.ts.map +0 -1
  417. package/dist/spatial/bounds/index.d.ts.map +0 -1
  418. package/dist/spatial/box/box.d.ts.map +0 -1
  419. package/dist/spatial/box/box.spec.d.ts.map +0 -1
  420. package/dist/spatial/box/index.d.ts.map +0 -1
  421. package/dist/spatial/dimensions/dimensions.d.ts.map +0 -1
  422. package/dist/spatial/dimensions/dimensions.spec.d.ts.map +0 -1
  423. package/dist/spatial/dimensions/index.d.ts.map +0 -1
  424. package/dist/spatial/direction/direction.d.ts.map +0 -1
  425. package/dist/spatial/direction/direction.spec.d.ts.map +0 -1
  426. package/dist/spatial/direction/index.d.ts.map +0 -1
  427. package/dist/spatial/external.d.ts.map +0 -1
  428. package/dist/spatial/index.d.ts.map +0 -1
  429. package/dist/spatial/location/index.d.ts.map +0 -1
  430. package/dist/spatial/location/location.d.ts.map +0 -1
  431. package/dist/spatial/location/location.spec.d.ts.map +0 -1
  432. package/dist/spatial/position/index.d.ts.map +0 -1
  433. package/dist/spatial/position/position.d.ts.map +0 -1
  434. package/dist/spatial/position/position.spec.d.ts.map +0 -1
  435. package/dist/spatial/scale/index.d.ts.map +0 -1
  436. package/dist/spatial/scale/scale.d.ts.map +0 -1
  437. package/dist/spatial/scale/scale.spec.d.ts.map +0 -1
  438. package/dist/spatial/spatial.d.ts +0 -2
  439. package/dist/spatial/spatial.d.ts.map +0 -1
  440. package/dist/spatial/xy/index.d.ts.map +0 -1
  441. package/dist/spatial/xy/xy.d.ts.map +0 -1
  442. package/dist/telem/generate.d.ts +0 -3
  443. package/dist/telem/generate.d.ts.map +0 -1
  444. package/dist/telem/gl.d.ts.map +0 -1
  445. package/dist/telem/index.d.ts.map +0 -1
  446. package/dist/telem/series.d.ts.map +0 -1
  447. package/dist/telem/telem.d.ts.map +0 -1
  448. package/dist/toArray.d.ts.map +0 -1
  449. package/dist/transform.d.ts +0 -2
  450. package/dist/transform.d.ts.map +0 -1
  451. package/dist/unique.d.ts.map +0 -1
  452. package/dist/url/index.d.ts +0 -2
  453. package/dist/url/index.d.ts.map +0 -1
  454. package/dist/url/url.d.ts.map +0 -1
  455. package/dist/worker/worker.d.ts.map +0 -1
  456. package/dist/worker/worker.spec.d.ts.map +0 -1
  457. package/dist/x.cjs +0 -12
  458. package/dist/x.cjs.map +0 -1
  459. package/dist/x.js +0 -5935
  460. package/dist/x.js.map +0 -1
  461. package/src/case.ts +0 -27
  462. package/src/deep/memo.ts +0 -24
  463. /package/dist/{binary → src/binary}/encoder.spec.d.ts +0 -0
  464. /package/dist/{binary → src/binary}/index.d.ts +0 -0
  465. /package/dist/{change → src/change}/index.d.ts +0 -0
  466. /package/dist/{clamp.d.ts → src/clamp/clamp.d.ts} +0 -0
  467. /package/dist/{compare → src/compare}/index.d.ts +0 -0
  468. /package/dist/{debounce.d.ts → src/debounce/debounce.d.ts} +0 -0
  469. /package/dist/{deep → src/deep}/copy.d.ts +0 -0
  470. /package/dist/{deep → src/deep}/delete.spec.d.ts +0 -0
  471. /package/dist/{deep → src/deep}/difference.d.ts +0 -0
  472. /package/dist/{deep → src/deep}/difference.spec.d.ts +0 -0
  473. /package/dist/{deep → src/deep}/equal.d.ts +0 -0
  474. /package/dist/{deep → src/deep}/equal.spec.d.ts +0 -0
  475. /package/dist/{deep → src/deep}/index.d.ts +0 -0
  476. /package/dist/{deep → src/deep}/merge.spec.d.ts +0 -0
  477. /package/dist/{deep → src/deep}/partial.d.ts +0 -0
  478. /package/dist/{deep → src/deep}/path.spec.d.ts +0 -0
  479. /package/dist/{destructor.d.ts → src/destructor.d.ts} +0 -0
  480. /package/dist/{invert.d.ts → src/invert.d.ts} +0 -0
  481. /package/dist/{join.d.ts → src/join.d.ts} +0 -0
  482. /package/dist/{kv → src/kv}/index.d.ts +0 -0
  483. /package/dist/{kv → src/kv}/types.d.ts +0 -0
  484. /package/dist/{migrate → src/migrate}/index.d.ts +0 -0
  485. /package/dist/{migrate → src/migrate}/migrate.spec.d.ts +0 -0
  486. /package/dist/{mock → src/mock}/index.d.ts +0 -0
  487. /package/dist/{observe → src/observe}/index.d.ts +0 -0
  488. /package/dist/{optional.d.ts → src/optional.d.ts} +0 -0
  489. /package/dist/{runtime → src/runtime}/detect.d.ts +0 -0
  490. /package/dist/{runtime → src/runtime}/external.d.ts +0 -0
  491. /package/dist/{runtime → src/runtime}/index.d.ts +0 -0
  492. /package/dist/{spatial → src/spatial}/bounds/bounds.spec.d.ts +0 -0
  493. /package/dist/{spatial → src/spatial}/bounds/index.d.ts +0 -0
  494. /package/dist/{spatial → src/spatial}/box/box.spec.d.ts +0 -0
  495. /package/dist/{spatial → src/spatial}/box/index.d.ts +0 -0
  496. /package/dist/{spatial → src/spatial}/dimensions/dimensions.spec.d.ts +0 -0
  497. /package/dist/{spatial → src/spatial}/dimensions/index.d.ts +0 -0
  498. /package/dist/{spatial → src/spatial}/direction/direction.spec.d.ts +0 -0
  499. /package/dist/{spatial → src/spatial}/direction/index.d.ts +0 -0
  500. /package/dist/{spatial → src/spatial}/index.d.ts +0 -0
  501. /package/dist/{spatial → src/spatial}/location/index.d.ts +0 -0
  502. /package/dist/{spatial → src/spatial}/location/location.spec.d.ts +0 -0
  503. /package/dist/{spatial → src/spatial}/position/index.d.ts +0 -0
  504. /package/dist/{spatial → src/spatial}/position/position.spec.d.ts +0 -0
  505. /package/dist/{spatial → src/spatial}/scale/index.d.ts +0 -0
  506. /package/dist/{spatial → src/spatial}/scale/scale.spec.d.ts +0 -0
  507. /package/dist/{spatial → src/spatial}/xy/index.d.ts +0 -0
  508. /package/dist/{spatial → src/spatial}/xy/xy.spec.d.ts +0 -0
  509. /package/dist/{telem → src/telem}/gl.d.ts +0 -0
  510. /package/dist/{telem → src/telem}/series.spec.d.ts +0 -0
  511. /package/dist/{telem → src/telem}/telem.spec.d.ts +0 -0
  512. /package/dist/{toArray.d.ts → src/toArray.d.ts} +0 -0
  513. /package/dist/{unique.d.ts → src/unique.d.ts} +0 -0
  514. /package/dist/{url → src/url}/url.d.ts +0 -0
  515. /package/dist/{url → src/url}/url.spec.d.ts +0 -0
  516. /package/dist/{worker → src/worker}/worker.spec.d.ts +0 -0
@@ -0,0 +1,49 @@
1
+ // Copyright 2024 Synnax Labs, Inc.
2
+ //
3
+ // Use of this software is governed by the Business Source License included in the file
4
+ // licenses/BSL.txt.
5
+ //
6
+ // As of the Change Date specified in that file, in accordance with the Business Source
7
+ // License, use of this software will be governed by the Apache License, Version 2.0,
8
+ // included in the file licenses/APL.txt.
9
+
10
+ import { describe, expect, it } from "vitest";
11
+
12
+ import { compare } from "@/compare";
13
+
14
+ describe("compare", () => {
15
+ describe("numericStrings", () => {
16
+ interface Spec {
17
+ name: string;
18
+ input: string[];
19
+ expected: string[];
20
+ }
21
+ const SPECS: Spec[] = [
22
+ {
23
+ name: "pure numbers",
24
+ input: ["5", "4", "3", "2", "1"],
25
+ expected: ["1", "2", "3", "4", "5"],
26
+ },
27
+ {
28
+ name: "suffixed numbers with equal prefixes",
29
+ input: ["a5", "a4", "a3", "a2", "a1"],
30
+ expected: ["a1", "a2", "a3", "a4", "a5"],
31
+ },
32
+ {
33
+ name: "suffixed numbers with different prefixes",
34
+ input: ["a1", "b1", "a2", "b2", "a3", "b3"],
35
+ expected: ["a1", "a2", "a3", "b1", "b2", "b3"],
36
+ },
37
+ {
38
+ name: "mixed separators",
39
+ input: ["a2", "a.1", "a-3", "a_4"],
40
+ expected: ["a.1", "a2", "a-3", "a_4"],
41
+ },
42
+ ];
43
+ SPECS.forEach((spec) => {
44
+ it(spec.name, () => {
45
+ expect(spec.input.sort(compare.stringsWithNumbers)).toEqual(spec.expected);
46
+ });
47
+ });
48
+ });
49
+ });
@@ -1,4 +1,4 @@
1
- // Copyright 2023 Synnax Labs, Inc.
1
+ // Copyright 2024 Synnax Labs, Inc.
2
2
  //
3
3
  // Use of this software is governed by the Business Source License included in the file
4
4
  // licenses/BSL.txt.
@@ -7,7 +7,7 @@
7
7
  // License, use of this software will be governed by the Apache License, Version 2.0,
8
8
  // included in the file licenses/APL.txt.
9
9
 
10
- import { type Primitive, isStringer, type PrimitiveRecord } from "@/primitive";
10
+ import { isStringer, type Primitive } from "@/primitive";
11
11
  import { type spatial } from "@/spatial";
12
12
 
13
13
  export type CompareF<T> = (a: T, b: T) => number;
@@ -20,10 +20,7 @@ export type CompareF<T> = (a: T, b: T) => number;
20
20
  * This is used to determine the type of comparison to perform.
21
21
  * @param reverse Whether to reverse the sort order.
22
22
  */
23
- export const newF = <T extends Primitive>(
24
- v: T,
25
- reverse: boolean = false,
26
- ): CompareF<T> => {
23
+ export const newF = <T>(v: T, reverse: boolean = false): CompareF<T> => {
27
24
  const t = isStringer(v) ? "stringer" : typeof v;
28
25
  let f: CompareF<T>;
29
26
  switch (t) {
@@ -35,16 +32,19 @@ export const newF = <T extends Primitive>(
35
32
  (a as string).toString().localeCompare((b as string).toString());
36
33
  break;
37
34
  case "number":
38
- f = (a: T, b: T) => (a as number) - (b as number);
35
+ f = (a: T, b: T) => Number(a) - Number(b);
39
36
  break;
40
37
  case "bigint":
41
- f = (a: T, b: T) => ((a as bigint) - (b as bigint) > BigInt(0) ? 1 : -1);
38
+ f = (a: T, b: T) => (BigInt(a as number) - BigInt(b as number) > 0n ? 1 : -1);
42
39
  break;
43
40
  case "boolean":
44
41
  f = (a: T, b: T) => Number(a) - Number(b);
45
42
  break;
43
+ case "undefined":
44
+ f = () => 0;
45
+ break;
46
46
  default:
47
- console.warn("sortFunc: unknown type");
47
+ console.warn(`sortFunc: unknown type ${t}`);
48
48
  return () => -1;
49
49
  }
50
50
  return reverse ? reverseF(f) : f;
@@ -58,7 +58,7 @@ export const newF = <T extends Primitive>(
58
58
  * comparison to perform.
59
59
  * @param reverse Whether to reverse the sort order.
60
60
  */
61
- export const newFieldF = <T extends PrimitiveRecord>(
61
+ export const newFieldF = <T>(
62
62
  key: keyof T,
63
63
  value: T,
64
64
  reverse?: boolean,
@@ -120,3 +120,30 @@ export const isLessThan = (n: number): boolean => n < EQUAL;
120
120
  export const isGreaterThan = (n: number): boolean => n > EQUAL;
121
121
 
122
122
  export const isGreaterThanEqual = (n: number): boolean => n >= EQUAL;
123
+
124
+ export const stringsWithNumbers = (a: string, b: string): number => {
125
+ const alphaNumericRegex = /([a-zA-Z]+)|(\d+)/g;
126
+
127
+ // Remove separators and split into parts
128
+ const aParts = a.replace(/[\s_.\-]+/g, "").match(alphaNumericRegex);
129
+ const bParts = b.replace(/[\s_.\-]+/g, "").match(alphaNumericRegex);
130
+
131
+ if (!aParts || !bParts) return 0;
132
+
133
+ for (let i = 0; i < Math.min(aParts.length, bParts.length); i++) {
134
+ const aPart = aParts[i];
135
+ const bPart = bParts[i];
136
+
137
+ if (isNaN(Number(aPart)) && isNaN(Number(bPart))) {
138
+ const localeComparison = aPart.localeCompare(bPart);
139
+ if (localeComparison !== 0) return localeComparison;
140
+ } else if (!isNaN(Number(aPart)) && !isNaN(Number(bPart))) {
141
+ const numComparison = Number(aPart) - Number(bPart);
142
+ if (numComparison !== 0) return numComparison;
143
+ } else {
144
+ return isNaN(Number(aPart)) ? -1 : 1;
145
+ }
146
+ }
147
+
148
+ return aParts.length - bParts.length;
149
+ };
@@ -1,4 +1,4 @@
1
- // Copyright 2023 Synnax Labs, Inc.
1
+ // Copyright 2024 Synnax Labs, Inc.
2
2
  //
3
3
  // Use of this software is governed by the Business Source License included in the file
4
4
  // licenses/BSL.txt.
@@ -0,0 +1,77 @@
1
+ // Copyright 2024 Synnax Labs, Inc.
2
+ //
3
+ // Use of this software is governed by the Business Source License included in the file
4
+ // licenses/BSL.txt.
5
+ //
6
+ // As of the Change Date specified in that file, in accordance with the Business Source
7
+ // License, use of this software will be governed by the Apache License, Version 2.0,
8
+ // included in the file licenses/APL.txt.
9
+
10
+ import { z } from "zod";
11
+
12
+ export class Authority extends Number {
13
+ static readonly Absolute = 255;
14
+ static readonly Default = 1;
15
+
16
+ static readonly z = z.union([
17
+ z.instanceof(Authority),
18
+ z
19
+ .number()
20
+ .int()
21
+ .min(0)
22
+ .max(255)
23
+ .transform((n) => new Authority(n)),
24
+ z.instanceof(Number).transform((n) => new Authority(n)),
25
+ ]);
26
+ }
27
+
28
+ export const subjectZ = z.object({
29
+ name: z.string(),
30
+ key: z.string(),
31
+ });
32
+
33
+ export interface Subject {
34
+ name: string;
35
+ key: string;
36
+ }
37
+
38
+ export const stateZ = <T extends z.ZodTypeAny>(r: T) =>
39
+ z.object({
40
+ subject: subjectZ,
41
+ resource: r,
42
+ authority: Authority.z,
43
+ });
44
+
45
+ export interface State<R> {
46
+ subject: Subject;
47
+ resource: R;
48
+ authority: Authority;
49
+ }
50
+
51
+ export const filterTransfersByChannelKey =
52
+ <R>(...resources: R[]) =>
53
+ (transfers: Transfer<R>[]): Transfer<R>[] =>
54
+ transfers.filter((t) => {
55
+ let ok = false;
56
+ if (t.to != null) ok = resources.includes(t.to.resource);
57
+ if (t.from != null && !ok) ok = resources.includes(t.from.resource);
58
+ return ok;
59
+ });
60
+
61
+ interface Release<R> {
62
+ from: State<R>;
63
+ to?: null;
64
+ }
65
+
66
+ interface Acquire<R> {
67
+ from?: null;
68
+ to: State<R>;
69
+ }
70
+
71
+ export type Transfer<R> =
72
+ | {
73
+ from: State<R>;
74
+ to: State<R>;
75
+ }
76
+ | Release<R>
77
+ | Acquire<R>;
@@ -0,0 +1 @@
1
+ export * as control from "@/control/control";
@@ -0,0 +1,52 @@
1
+ // Copyright 2024 Synnax Labs, Inc.
2
+ //
3
+ // Use of this software is governed by the Business Source License included in the file
4
+ // licenses/BSL.txt.
5
+ //
6
+ // As of the Change Date specified in that file, in accordance with the Business Source
7
+ // License, use of this software will be governed by the Apache License, Version 2.0,
8
+ // included in the file licenses/APL.txt.
9
+
10
+ import { describe, expect, it, vi } from "vitest";
11
+
12
+ import { debounce, throttle } from "@/debounce/debounce";
13
+
14
+ describe("debounce", () => {
15
+ describe("debounce", () => {
16
+ it("should debounce the execution of the given function", () => {
17
+ vi.useFakeTimers();
18
+ const fn = vi.fn();
19
+ const debounced = debounce(fn, 100);
20
+ debounced(10);
21
+ debounced(20);
22
+ debounced(30);
23
+ debounced(40);
24
+ expect(fn).toHaveBeenCalledTimes(0);
25
+ vi.advanceTimersByTime(100);
26
+ expect(fn).toHaveBeenCalledTimes(1);
27
+ expect(fn).toHaveBeenCalledWith(40);
28
+ });
29
+ it("should not debounce the execution of the given function if the time is 0", () => {
30
+ const fn = vi.fn();
31
+ const debounced = debounce(fn, 0);
32
+ // assert that debounced is the same
33
+ expect(debounced).toBe(fn);
34
+ });
35
+ });
36
+ describe("throttle", () => {
37
+ it("should throttle the execution of the given function", () => {
38
+ vi.useFakeTimers();
39
+ const fn = vi.fn();
40
+ const debounced = throttle(fn, 100);
41
+ debounced(10);
42
+ debounced(20);
43
+ debounced(30);
44
+ debounced(40);
45
+ vi.advanceTimersByTime(100);
46
+ expect(fn).toHaveBeenCalledTimes(1);
47
+ expect(fn).toHaveBeenCalledWith(10);
48
+ vi.advanceTimersByTime(100);
49
+ expect(fn).toHaveBeenCalledTimes(1);
50
+ });
51
+ });
52
+ });
@@ -1,4 +1,4 @@
1
- // Copyright 2023 Synnax Labs, Inc.
1
+ // Copyright 2024 Synnax Labs, Inc.
2
2
  //
3
3
  // Use of this software is governed by the Business Source License included in the file
4
4
  // licenses/BSL.txt.
@@ -9,7 +9,7 @@
9
9
 
10
10
  export const debounce = <F extends (...args: any[]) => void>(
11
11
  func: F,
12
- waitFor: number
12
+ waitFor: number,
13
13
  ): F => {
14
14
  let timeout: ReturnType<typeof setTimeout> | null = null;
15
15
  if (waitFor === 0) return func;
@@ -27,7 +27,7 @@ export const debounce = <F extends (...args: any[]) => void>(
27
27
 
28
28
  export const throttle = <F extends (...args: any[]) => void>(
29
29
  func: F,
30
- waitFor: number
30
+ waitFor: number,
31
31
  ): F => {
32
32
  let timeout: ReturnType<typeof setTimeout> | null = null;
33
33
  if (waitFor === 0) return func;
@@ -42,4 +42,4 @@ export const throttle = <F extends (...args: any[]) => void>(
42
42
  };
43
43
 
44
44
  return throttled as F;
45
- }
45
+ };
@@ -0,0 +1,10 @@
1
+ // Copyright 2024 Synnax Labs, Inc.
2
+ //
3
+ // Use of this software is governed by the Business Source License included in the file
4
+ // licenses/BSL.txt.
5
+ //
6
+ // As of the Change Date specified in that file, in accordance with the Business Source
7
+ // License, use of this software will be governed by the Apache License, Version 2.0,
8
+ // included in the file licenses/APL.txt.
9
+
10
+ export * from "@/debounce/debounce";
package/src/deep/copy.ts CHANGED
@@ -1,4 +1,4 @@
1
- // Copyright 2023 Synnax Labs, Inc.
1
+ // Copyright 2024 Synnax Labs, Inc.
2
2
  //
3
3
  // Use of this software is governed by the Business Source License included in the file
4
4
  // licenses/BSL.txt.
@@ -7,5 +7,4 @@
7
7
  // License, use of this software will be governed by the Apache License, Version 2.0,
8
8
  // included in the file licenses/APL.txt.
9
9
 
10
- export const copy = <T>(obj: T): T =>
11
- JSON.parse(JSON.stringify(obj));
10
+ export const copy = <T>(obj: T): T => JSON.parse(JSON.stringify(obj));
@@ -1,4 +1,4 @@
1
- // Copyright 2023 Synnax Labs, Inc.
1
+ // Copyright 2024 Synnax Labs, Inc.
2
2
  //
3
3
  // Use of this software is governed by the Business Source License included in the file
4
4
  // licenses/BSL.txt.
@@ -7,7 +7,7 @@
7
7
  // License, use of this software will be governed by the Apache License, Version 2.0,
8
8
  // included in the file licenses/APL.txt.
9
9
 
10
- import { describe, it, expect } from "vitest";
10
+ import { describe, expect,it } from "vitest";
11
11
 
12
12
  import { deep } from "@/deep";
13
13
 
@@ -1,4 +1,4 @@
1
- // Copyright 2023 Synnax Labs, Inc.
1
+ // Copyright 2024 Synnax Labs, Inc.
2
2
  //
3
3
  // Use of this software is governed by the Business Source License included in the file
4
4
  // licenses/BSL.txt.
@@ -9,6 +9,7 @@
9
9
 
10
10
  import { type Key } from "@/deep/path";
11
11
 
12
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-constraint
12
13
  export const deleteD = <T extends any, D extends number = 5>(
13
14
  target: T,
14
15
  ...keys: Array<Key<T, D>>
@@ -17,7 +18,7 @@ export const deleteD = <T extends any, D extends number = 5>(
17
18
  let curr: any = target;
18
19
  const arr = key.split(".");
19
20
  arr.forEach((k, i) => {
20
- // eslint-disable-next-line @typescript-eslint/no-dynamic-delete
21
+
21
22
  if (i === arr.length - 1) delete curr[k];
22
23
  else curr = curr[k];
23
24
  });
@@ -1,4 +1,4 @@
1
- // Copyright 2023 Synnax Labs, Inc.
1
+ // Copyright 2024 Synnax Labs, Inc.
2
2
  //
3
3
  // Use of this software is governed by the Business Source License included in the file
4
4
  // licenses/BSL.txt.
@@ -8,31 +8,32 @@
8
8
  // included in the file licenses/APL.txt.
9
9
 
10
10
  import { describe, expect, it } from "vitest";
11
+
11
12
  import { deep } from "@/deep";
12
13
 
13
- describe('deep/difference', () => {
14
- it('should return a map of differences between two objects', () => {
15
- const obj1 = {
16
- a: 1,
17
- b: 2,
18
- c: {
19
- d: 4,
20
- e: 5,
21
- f: [6, 7, 8],
22
- },
23
- };
24
- const obj2 = {
25
- a: 1,
26
- b: 3,
27
- c: {
28
- d: 4,
29
- e: 6,
30
- f: [6, 7, 8],
31
- },
32
- };
33
- const diff = deep.difference(obj1, obj2);
34
- expect(Object.keys(diff).length).toEqual(2);
35
- expect(diff['b']).toEqual([2, 3]);
36
- expect(diff['c.e']).toEqual([5, 6]);
37
- });
38
- });
14
+ describe("deep/difference", () => {
15
+ it("should return a map of differences between two objects", () => {
16
+ const obj1 = {
17
+ a: 1,
18
+ b: 2,
19
+ c: {
20
+ d: 4,
21
+ e: 5,
22
+ f: [6, 7, 8],
23
+ },
24
+ };
25
+ const obj2 = {
26
+ a: 1,
27
+ b: 3,
28
+ c: {
29
+ d: 4,
30
+ e: 6,
31
+ f: [6, 7, 8],
32
+ },
33
+ };
34
+ const diff = deep.difference(obj1, obj2);
35
+ expect(Object.keys(diff).length).toEqual(2);
36
+ expect(diff.b).toEqual([2, 3]);
37
+ expect(diff["c.e"]).toEqual([5, 6]);
38
+ });
39
+ });
@@ -1,4 +1,4 @@
1
- // Copyright 2023 Synnax Labs, Inc.
1
+ // Copyright 2024 Synnax Labs, Inc.
2
2
  //
3
3
  // Use of this software is governed by the Business Source License included in the file
4
4
  // licenses/BSL.txt.
@@ -7,31 +7,34 @@
7
7
  // License, use of this software will be governed by the Apache License, Version 2.0,
8
8
  // included in the file licenses/APL.txt.
9
9
 
10
-
11
10
  type PathValueTuple = [any, any];
12
11
 
13
- export const difference = (obj1: Record<string, any>, obj2: Record<string, any>, path: string = ''): Record<string, PathValueTuple> => {
12
+ export const difference = (
13
+ obj1: Record<string, any>,
14
+ obj2: Record<string, any>,
15
+ path: string = "",
16
+ ): Record<string, PathValueTuple> => {
14
17
  const diffMap: Record<string, PathValueTuple> = {};
15
18
 
16
- const compare = (a: any, b: any, currentPath: string) => {
19
+ const compare = (a: any, b: any, currentPath: string): void => {
17
20
  if (typeof a !== typeof b || a === null || b === null) {
18
21
  diffMap[currentPath] = [a, b];
19
22
  return;
20
23
  }
21
24
 
22
- if (typeof a === 'object' && typeof b === 'object') {
25
+ if (typeof a === "object" && typeof b === "object") {
23
26
  if (Array.isArray(a) && Array.isArray(b)) {
24
27
  if (a.length !== b.length) {
25
- diffMap[currentPath] = [a, b];
28
+ diffMap[currentPath] = [a, b];
26
29
  return;
27
30
  }
28
31
  for (let i = 0; i < a.length; i++) {
29
32
  compare(a[i], b[i], `${currentPath}[${i}]`);
30
33
  }
31
34
  } else {
32
- const keys = new Set([...Object.keys(a), ...Object.keys(b)]);
33
- keys.forEach(key => {
34
- compare(a[key], b[key], currentPath ? `${currentPath}.${key}` : key);
35
+ const keys = new Set([...Object.keys(a as {}), ...Object.keys(b as {})]);
36
+ keys.forEach((key) => {
37
+ compare(a[key], b[key], currentPath !== "" ? `${currentPath}.${key}` : key);
35
38
  });
36
39
  }
37
40
  } else {
@@ -43,5 +46,4 @@ export const difference = (obj1: Record<string, any>, obj2: Record<string, any>,
43
46
 
44
47
  compare(obj1, obj2, path);
45
48
  return diffMap;
46
- }
47
-
49
+ };
@@ -1,4 +1,4 @@
1
- // Copyright 2023 Synnax Labs, Inc.
1
+ // Copyright 2024 Synnax Labs, Inc.
2
2
  //
3
3
  // Use of this software is governed by the Business Source License included in the file
4
4
  // licenses/BSL.txt.
@@ -7,7 +7,7 @@
7
7
  // License, use of this software will be governed by the Apache License, Version 2.0,
8
8
  // included in the file licenses/APL.txt.
9
9
 
10
- import { describe, it, expect } from "vitest";
10
+ import { describe, expect,it } from "vitest";
11
11
 
12
12
  import { deep } from "@/deep";
13
13
 
@@ -52,7 +52,7 @@ describe("deepEqual", () => {
52
52
  const a = [1, 2, 3];
53
53
  const b = [1, 2, 3];
54
54
  expect(deep.equal(a, b)).toBe(true);
55
- })
55
+ });
56
56
  it("should true for object arrays that are equal", () => {
57
57
  const a = [{ a: 1 }, { b: 2 }];
58
58
  const b = [{ a: 1 }, { b: 2 }];
@@ -75,7 +75,7 @@ describe("deepEqual", () => {
75
75
  });
76
76
  it("should return false for object arrays that are not equal", () => {
77
77
  const a = [{ a: 1 }, { b: 2 }];
78
- const b = [{ a: 1 }, { b: 2, c: 4}];
78
+ const b = [{ a: 1 }, { b: 2, c: 4 }];
79
79
  expect(deep.equal(a, b)).toBe(false);
80
80
  });
81
81
  });
package/src/deep/equal.ts CHANGED
@@ -1,4 +1,4 @@
1
- // Copyright 2023 Synnax Labs, Inc.
1
+ // Copyright 2024 Synnax Labs, Inc.
2
2
  //
3
3
  // Use of this software is governed by the Business Source License included in the file
4
4
  // licenses/BSL.txt.
@@ -36,9 +36,9 @@ export const equal = <
36
36
  const bKeys = Object.keys(b);
37
37
  if (aKeys.length !== bKeys.length) return false;
38
38
  for (const key of aKeys) {
39
- // @ts-expect-error
39
+ // @ts-expect-error - indexing nested value.
40
40
  const aVal = a[key];
41
- // @ts-expect-error
41
+ // @ts-expect-error - indexing nested value.
42
42
  const bVal = b[key];
43
43
  if (typeof aVal === "object" && typeof bVal === "object") {
44
44
  if (!equal(aVal, bVal)) return false;
@@ -56,9 +56,9 @@ export const partialEqual = <T extends unknown | DeepEqualBaseRecord | Primitive
56
56
  const partialKeys = Object.keys(partial);
57
57
  if (partialKeys.length > baseKeys.length) return false;
58
58
  for (const key of partialKeys) {
59
- // @ts-expect-error
59
+ // @ts-expect-error - indexing nested value.
60
60
  const baseVal = base[key];
61
- // @ts-expect-error
61
+ // @ts-expect-error - indexing nested value.
62
62
  const partialVal = partial[key];
63
63
  if (typeof baseVal === "object" && typeof partialVal === "object") {
64
64
  if (!partialEqual(baseVal, partialVal)) return false;
@@ -1,4 +1,4 @@
1
- // Copyright 2023 Synnax Labs, Inc.
1
+ // Copyright 2024 Synnax Labs, Inc.
2
2
  //
3
3
  // Use of this software is governed by the Business Source License included in the file
4
4
  // licenses/BSL.txt.
@@ -9,9 +9,8 @@
9
9
 
10
10
  export * from "@/deep/copy";
11
11
  export * from "@/deep/delete";
12
- export * from "@/deep/path";
12
+ export * from "@/deep/difference";
13
+ export * from "@/deep/equal";
13
14
  export * from "@/deep/merge";
14
15
  export * from "@/deep/partial";
15
- export * from "@/deep/equal";
16
- export * from "@/deep/memo";
17
- export * from "@/deep/difference";
16
+ export * from "@/deep/path";
package/src/deep/index.ts CHANGED
@@ -1,4 +1,4 @@
1
- // Copyright 2023 Synnax Labs, Inc.
1
+ // Copyright 2024 Synnax Labs, Inc.
2
2
  //
3
3
  // Use of this software is governed by the Business Source License included in the file
4
4
  // licenses/BSL.txt.