@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
@@ -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.
package/src/runtime/os.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.
@@ -13,10 +13,17 @@ export const OPERATING_SYSTEMS = ["MacOS", "Windows", "Linux", "Docker"] as cons
13
13
  export const osZ = z.enum(OPERATING_SYSTEMS);
14
14
  export type OS = (typeof OPERATING_SYSTEMS)[number];
15
15
 
16
- export interface GetOSProps {
16
+ export type RequiredGetOSProps = {
17
17
  force?: OS;
18
18
  default?: OS;
19
- }
19
+ };
20
+
21
+ export type OptionalGetOSProps = {
22
+ force?: OS | undefined;
23
+ default: OS;
24
+ };
25
+
26
+ export type GetOSProps = RequiredGetOSProps | OptionalGetOSProps;
20
27
 
21
28
  let os: OS | undefined;
22
29
 
@@ -29,10 +36,15 @@ const evalOS = (): OS | undefined => {
29
36
  return undefined;
30
37
  };
31
38
 
32
- export const getOS = (props: GetOSProps = {}): OS | undefined => {
39
+ export interface GetOS {
40
+ (props?: RequiredGetOSProps): OS;
41
+ (props?: OptionalGetOSProps): OS | undefined;
42
+ }
43
+
44
+ export const getOS = ((props: GetOSProps = {}): OS | undefined => {
33
45
  const { force, default: default_ } = props;
34
46
  if (force != null) return force;
35
47
  if (os != null) return os;
36
48
  os = evalOS();
37
49
  return os ?? default_;
38
- };
50
+ }) as unknown as GetOS;
package/src/search.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.
@@ -28,12 +28,14 @@ export const Search = {
28
28
  };
29
29
 
30
30
  export interface TermSearcher<T, K extends Key, E extends Keyed<K>> {
31
+ readonly type: string;
31
32
  search: (term: T) => E[];
32
33
  retrieve: (keys: K[]) => E[];
33
34
  page: (offset: number, limit: number) => E[];
34
35
  }
35
36
 
36
37
  export interface AsyncTermSearcher<T, K extends Key, E extends Keyed<K>> {
38
+ readonly type: string;
37
39
  search: (term: T) => Promise<E[]>;
38
40
  retrieve: (keys: K[]) => Promise<E[]>;
39
41
  page: (offset: number, limit: number) => Promise<E[]>;
@@ -1,4 +1,3 @@
1
-
2
1
  // Copyright 2024 Synnax Labs, Inc.
3
2
  //
4
3
  // Use of this software is governed by the Business Source License included in the file
@@ -8,8 +7,8 @@
8
7
  // License, use of this software will be governed by the Apache License, Version 2.0,
9
8
  // included in the file licenses/APL.txt.
10
9
 
11
- export const shallowCopy = <T extends unknown>(obj: T): T => {
12
- if (Array.isArray(obj)) return [...obj] as T;
13
- if (typeof obj === "object" && obj !== null) return { ...obj } as T;
14
- return obj;
15
- }
10
+ export const shallowCopy = <T>(obj: T): T => {
11
+ if (Array.isArray(obj)) return [...obj] as T;
12
+ if (typeof obj === "object" && obj !== null) return { ...obj };
13
+ return obj;
14
+ };
@@ -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.
@@ -10,7 +10,8 @@
10
10
  import { z } from "zod";
11
11
 
12
12
  export const numberCouple = z.tuple([z.number(), z.number()]);
13
- export type NumberCouple = z.infer<typeof numberCouple>;
13
+ export const bigNumberCouple = z.tuple([z.bigint(), z.bigint()]);
14
+ export type NumberCouple<T extends number | bigint = number> = [T, T];
14
15
 
15
16
  // Dimensions
16
17
 
@@ -53,7 +54,7 @@ export const Y_LOCATIONS = ["top", "bottom"] as const;
53
54
  export const yLocation = z.enum(Y_LOCATIONS);
54
55
  export type YLocation = (typeof Y_LOCATIONS)[number];
55
56
  export const CENTER_LOCATIONS = ["center"] as const;
56
- export const centerlocation = z.enum(CENTER_LOCATIONS);
57
+ export const centerLocation = z.enum(CENTER_LOCATIONS);
57
58
  export type CenterLocation = (typeof CENTER_LOCATIONS)[number];
58
59
  export const LOCATIONS = [...OUTER_LOCATIONS, ...CENTER_LOCATIONS] as const;
59
60
  export const location = z.enum(LOCATIONS);
@@ -70,10 +71,17 @@ export type Order = (typeof ORDERS)[number];
70
71
  // Bounds
71
72
 
72
73
  export const bounds = z.object({ lower: z.number(), upper: z.number() });
73
- export type Bounds = z.infer<typeof bounds>;
74
+ export const bigBounds = z.object({ lower: z.bigint(), upper: z.bigint() });
75
+ export interface Bounds<T extends number | bigint = number> {
76
+ lower: T;
77
+ upper: T;
78
+ }
74
79
 
75
80
  export const crudeBounds = z.union([bounds, numberCouple]);
76
- export type CrudeBounds = z.infer<typeof crudeBounds>;
81
+ export const bigCrudeBounds = z.union([bigBounds, numberCouple]);
82
+ export type CrudeBounds<T extends number | bigint = number> =
83
+ | Bounds<T>
84
+ | NumberCouple<T>;
77
85
  export const crudeDirection = z.union([direction, location]);
78
86
  export type CrudeDirection = z.infer<typeof crudeDirection>;
79
87
  export const crudeLocation = z.union([direction, location, z.instanceof(String)]);
@@ -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 { describe, expect, it, test } from "vitest";
11
11
 
12
+ import { type NumberCouple } from "@/spatial/base";
12
13
  import * as bounds from "@/spatial/bounds/bounds";
13
14
 
14
15
  describe("Bounds", () => {
@@ -26,12 +27,32 @@ describe("Bounds", () => {
26
27
  expect(bound.upper).toEqual(2);
27
28
  });
28
29
  });
30
+ it("should accept two arguments", () => {
31
+ const bound = bounds.construct(1, 2);
32
+ expect(bound.lower).toEqual(1);
33
+ expect(bound.upper).toEqual(2);
34
+ });
29
35
  it("should consider a single argument as the upper bound", () => {
30
36
  const bound = bounds.construct(1);
31
37
  expect(bound.lower).toEqual(0);
32
38
  expect(bound.upper).toEqual(1);
33
39
  });
34
40
  });
41
+ describe("equals", () => {
42
+ it("should return true if the bounds are equal", () => {
43
+ const a = bounds.construct([1, 2]);
44
+ const b = bounds.construct([1, 2]);
45
+ expect(bounds.equals(a, b)).toEqual(true);
46
+ });
47
+ it("should return true if both bounds are undefined", () => {
48
+ expect(bounds.equals(undefined, undefined)).toEqual(true);
49
+ });
50
+ it("should return false if the bounds are not equal", () => {
51
+ const a = bounds.construct([1, 2]);
52
+ const b = bounds.construct([1, 3]);
53
+ expect(bounds.equals(a, b)).toEqual(false);
54
+ });
55
+ });
35
56
  describe("contains", () => {
36
57
  it("should return true if the value is within the bounds", () => {
37
58
  const b = bounds.construct([1, 2]);
@@ -206,194 +227,252 @@ describe("Bounds", () => {
206
227
  [[[3, 7]], 8, { index: 1, position: 0 }],
207
228
  ];
208
229
  SPECS.forEach(([b, target, expected]) => {
209
- test(`should return ${expected} for ${b} and ${target}`, () => {
230
+ test(`should return ${JSON.stringify(expected)} for ${JSON.stringify(b)} and ${target}`, () => {
210
231
  expect(bounds.findInsertPosition(b, target)).toEqual(expected);
211
232
  });
212
233
  });
213
234
  });
214
235
  describe("insert", () => {
215
236
  describe("formal cases", () => {
216
- test("insert before adjacent upper", () => {
217
- const b: bounds.Crude[] = [
218
- [2, 3],
219
- [3, 4],
220
- [5, 6],
221
- ];
222
- const v: bounds.Crude = [1, 2];
223
- const result = bounds.insert(b, v);
224
- expect(result).toEqual([
225
- { lower: 1, upper: 2 },
226
- { lower: 2, upper: 3 },
227
- { lower: 3, upper: 4 },
228
- { lower: 5, upper: 6 },
229
- ]);
230
- });
231
- test("insert in-between with no overlap", () => {
232
- const b: bounds.Crude[] = [
233
- [2, 3],
234
- [3, 4],
235
- [7, 8],
236
- ];
237
- const v: bounds.Crude = [5, 6];
238
- const result = bounds.insert(b, v);
239
- expect(result).toEqual([
240
- { lower: 2, upper: 3 },
241
- { lower: 3, upper: 4 },
242
- { lower: 5, upper: 6 },
243
- { lower: 7, upper: 8 },
244
- ]);
245
- });
246
- test("insert in-between adjacent lower and upper", () => {
247
- const b: bounds.Crude[] = [
248
- [2, 3],
249
- [3, 4],
250
- [5, 6],
251
- ];
252
- const v: bounds.Crude = [4, 5];
253
- const result = bounds.insert(b, v);
254
- expect(result).toEqual([
255
- { lower: 2, upper: 3 },
256
- { lower: 3, upper: 4 },
257
- { lower: 4, upper: 5 },
258
- { lower: 5, upper: 6 },
259
- ]);
260
- });
261
- test("insert in-between adjacent lower not upper", () => {
262
- const b: bounds.Crude[] = [
263
- [2, 3],
264
- [3, 4],
265
- [7, 8],
266
- ];
267
- const v: bounds.Crude = [4, 6];
268
- const result = bounds.insert(b, v);
269
- expect(result).toEqual([
270
- { lower: 2, upper: 3 },
271
- { lower: 3, upper: 4 },
272
- { lower: 4, upper: 6 },
273
- { lower: 7, upper: 8 },
274
- ]);
275
- });
276
- test("insert in-between overlap lower adjacent upper", () => {
277
- const b: bounds.Crude[] = [
278
- [2, 4],
279
- [5, 6],
280
- [7, 8],
281
- ];
282
- const v: bounds.Crude = [3, 5];
283
- const result = bounds.insert(b, v);
284
- expect(result).toEqual([
285
- { lower: 2, upper: 4 },
286
- { lower: 4, upper: 5 },
287
- { lower: 5, upper: 6 },
288
- { lower: 7, upper: 8 },
289
- ]);
290
- });
291
- test("insert in-between adjacent lower contain 1 adjacent upper", () => {
292
- const b: bounds.Crude[] = [
293
- [2, 4],
294
- [5, 6],
295
- [7, 8],
296
- ];
297
- const v: bounds.Crude = [4, 7];
298
- const result = bounds.insert(b, v);
299
- expect(result).toEqual([
300
- { lower: 2, upper: 4 },
301
- { lower: 4, upper: 7 },
302
- { lower: 7, upper: 8 },
303
- ]);
304
- });
305
- test("insert in-between overlap lower consume 1 adjacent upper", () => {
306
- const b: bounds.Crude[] = [
307
- [2, 4],
308
- [5, 6],
309
- [7, 8],
310
- ];
311
- const v: bounds.Crude = [3, 7];
312
- const result = bounds.insert(b, v);
313
- expect(result).toEqual([
314
- { lower: 2, upper: 4 },
315
- { lower: 4, upper: 7 },
316
- { lower: 7, upper: 8 },
317
- ]);
318
- });
319
- test("insert in-between replace 1", () => {
320
- const b: bounds.Crude[] = [
321
- [2, 4],
322
- [5, 6],
323
- [7, 8],
324
- ];
325
- const v: bounds.Crude = [5, 6];
326
- const result = bounds.insert(b, v);
327
- expect(result).toEqual([
328
- { lower: 2, upper: 4 },
329
- { lower: 5, upper: 6 },
330
- { lower: 7, upper: 8 },
331
- ]);
332
- });
333
- test("insert before overlap first", () => {
334
- const b: bounds.Crude[] = [[3, 7]];
335
- const v: bounds.Crude = [1, 4];
336
- const result = bounds.insert(b, v);
337
- expect(result).toEqual([
338
- { lower: 1, upper: 3 },
339
- { lower: 3, upper: 7 },
340
- ]);
341
- });
342
- test("insert before no adjacent", () => {
343
- const b: bounds.Crude[] = [[3, 7]];
344
- const v: bounds.Crude = [1, 2];
345
- const result = bounds.insert(b, v);
346
- expect(result).toEqual([
347
- { lower: 1, upper: 2 },
348
- { lower: 3, upper: 7 },
349
- ]);
350
- });
351
- test("insert after no adjacent", () => {
352
- const b: bounds.Crude[] = [[3, 7]];
353
- const v: bounds.Crude = [8, 9];
354
- const result = bounds.insert(b, v);
355
- expect(result).toEqual([
356
- { lower: 3, upper: 7 },
357
- { lower: 8, upper: 9 },
358
- ]);
359
- });
360
- test("insert after adjacent upper", () => {
361
- const b: bounds.Crude[] = [[3, 7]];
362
- const v: bounds.Crude = [7, 9];
363
- const result = bounds.insert(b, v);
364
- expect(result).toEqual([
365
- { lower: 3, upper: 7 },
366
- { lower: 7, upper: 9 },
367
- ]);
237
+ interface Spec {
238
+ name: string;
239
+ b: Array<NumberCouple<bigint | number>>;
240
+ v: NumberCouple<bigint | number>;
241
+ result: Array<bounds.Bounds<bigint | number>>;
242
+ focus?: boolean;
243
+ }
244
+
245
+ const SPECS: Spec[] = [
246
+ {
247
+ name: "insert before adjacent upper",
248
+ b: [
249
+ [2, 3],
250
+ [3, 4],
251
+ [5, 6],
252
+ ],
253
+ v: [1, 2],
254
+ result: [
255
+ { lower: 1, upper: 2 },
256
+ { lower: 2, upper: 3 },
257
+ { lower: 3, upper: 4 },
258
+ { lower: 5, upper: 6 },
259
+ ],
260
+ },
261
+ {
262
+ name: "insert in-between with no overlap",
263
+ b: [
264
+ [2, 3],
265
+ [3, 4],
266
+ [7, 8],
267
+ ],
268
+ v: [5, 6],
269
+ result: [
270
+ { lower: 2, upper: 3 },
271
+ { lower: 3, upper: 4 },
272
+ { lower: 5, upper: 6 },
273
+ { lower: 7, upper: 8 },
274
+ ],
275
+ },
276
+ {
277
+ name: "insert in-between adjacent lower and upper",
278
+ b: [
279
+ [2, 3],
280
+ [3, 4],
281
+ [5, 6],
282
+ ],
283
+ v: [4, 5],
284
+ result: [
285
+ { lower: 2, upper: 3 },
286
+ { lower: 3, upper: 4 },
287
+ { lower: 4, upper: 5 },
288
+ { lower: 5, upper: 6 },
289
+ ],
290
+ },
291
+ {
292
+ name: "insert in-between adjacent lower and upper",
293
+ b: [
294
+ [2, 3],
295
+ [3, 4],
296
+ [5, 6],
297
+ ],
298
+ v: [4, 5],
299
+ result: [
300
+ { lower: 2, upper: 3 },
301
+ { lower: 3, upper: 4 },
302
+ { lower: 4, upper: 5 },
303
+ { lower: 5, upper: 6 },
304
+ ],
305
+ },
306
+ {
307
+ name: "insert in-between adjacent lower not upper",
308
+ b: [
309
+ [2, 3],
310
+ [3, 4],
311
+ [7, 8],
312
+ ],
313
+ v: [4, 6],
314
+ result: [
315
+ { lower: 2, upper: 3 },
316
+ { lower: 3, upper: 4 },
317
+ { lower: 4, upper: 6 },
318
+ { lower: 7, upper: 8 },
319
+ ],
320
+ },
321
+ {
322
+ name: "insert in-between overlap lower adjacent upper",
323
+ b: [
324
+ [2, 4],
325
+ [5, 6],
326
+ [7, 8],
327
+ ],
328
+ v: [3, 5],
329
+ result: [
330
+ { lower: 2, upper: 4 },
331
+ { lower: 4, upper: 5 },
332
+ { lower: 5, upper: 6 },
333
+ { lower: 7, upper: 8 },
334
+ ],
335
+ },
336
+ {
337
+ name: "insert in-between adjacent lower contain 1 adjacent upper",
338
+ b: [
339
+ [2, 4],
340
+ [5, 6],
341
+ [7, 8],
342
+ ],
343
+ v: [4, 7],
344
+ result: [
345
+ { lower: 2, upper: 4 },
346
+ { lower: 4, upper: 7 },
347
+ { lower: 7, upper: 8 },
348
+ ],
349
+ },
350
+ {
351
+ name: "insert in-between overlap lower consume 1 adjacent upper",
352
+ b: [
353
+ [2, 4],
354
+ [5, 6],
355
+ [7, 8],
356
+ ],
357
+ v: [3, 7],
358
+ result: [
359
+ { lower: 2, upper: 4 },
360
+ { lower: 4, upper: 7 },
361
+ { lower: 7, upper: 8 },
362
+ ],
363
+ },
364
+ {
365
+ name: "insert in-between replace 1",
366
+ b: [
367
+ [2, 4],
368
+ [5, 6],
369
+ [7, 8],
370
+ ],
371
+ v: [5, 6],
372
+ result: [
373
+ { lower: 2, upper: 4 },
374
+ { lower: 5, upper: 6 },
375
+ { lower: 7, upper: 8 },
376
+ ],
377
+ },
378
+ {
379
+ name: "insert before overlap first",
380
+ b: [[3, 7]],
381
+ v: [1, 4],
382
+ result: [
383
+ { lower: 1, upper: 3 },
384
+ { lower: 3, upper: 7 },
385
+ ],
386
+ },
387
+ {
388
+ name: "insert before no adjacent",
389
+ b: [[3, 7]],
390
+ v: [1, 2],
391
+ result: [
392
+ { lower: 1, upper: 2 },
393
+ { lower: 3, upper: 7 },
394
+ ],
395
+ },
396
+ {
397
+ name: "insert after no adjacent",
398
+ b: [[3, 7]],
399
+ v: [8, 9],
400
+ result: [
401
+ { lower: 3, upper: 7 },
402
+ { lower: 8, upper: 9 },
403
+ ],
404
+ },
405
+ {
406
+ name: "insert after adjacent upper",
407
+ b: [[3, 7]],
408
+ v: [7, 9],
409
+ result: [
410
+ { lower: 3, upper: 7 },
411
+ { lower: 7, upper: 9 },
412
+ ],
413
+ },
414
+ {
415
+ name: "insert after overlap last",
416
+ b: [[3, 7]],
417
+ v: [5, 9],
418
+ result: [
419
+ { lower: 3, upper: 7 },
420
+ { lower: 7, upper: 9 },
421
+ ],
422
+ },
423
+ {
424
+ name: "regression 1",
425
+ b: [
426
+ [0, 47040],
427
+ [47040, 47240],
428
+ [47240, 47280],
429
+ [47280, 47320],
430
+ [47320, 47400],
431
+ ],
432
+ v: [47066, 47066 + 354],
433
+ result: [
434
+ { lower: 0, upper: 47040 },
435
+ { lower: 47040, upper: 47240 },
436
+ { lower: 47240, upper: 47066 + 354 },
437
+ ],
438
+ },
439
+ ];
440
+
441
+ describe("number", () => {
442
+ SPECS.forEach(({ name, b, v, result, focus }) => {
443
+ (focus === true ? test.only : test)(name, () => {
444
+ expect(bounds.insert(b, v)).toEqual(result);
445
+ });
446
+ });
368
447
  });
369
- test("insert after overlap last", () => {
370
- const b: bounds.Crude[] = [[3, 7]];
371
- const v: bounds.Crude = [5, 9];
372
- const result = bounds.insert(b, v);
373
- expect(result).toEqual([
374
- { lower: 3, upper: 7 },
375
- { lower: 7, upper: 9 },
376
- ]);
448
+ describe("bigint", () => {
449
+ SPECS.forEach(({ name, b, v, result, focus }) => {
450
+ (focus === true ? test.only : test)(name, () => {
451
+ b = b.map(([l, u]) => [BigInt(l), BigInt(u)]);
452
+ v = [BigInt(v[0]), BigInt(v[1])];
453
+ result = result.map(({ lower, upper }) => ({
454
+ lower: BigInt(lower),
455
+ upper: BigInt(upper),
456
+ }));
457
+ expect(bounds.insert(b, v)).toEqual(result);
458
+ });
459
+ });
377
460
  });
378
461
  });
379
- describe("regressions", () => {
380
- it("should insert a value into a sorted array of bounds", () => {
381
- const b: bounds.Crude[] = [
382
- { lower: 0, upper: 47040 },
383
- { lower: 47040, upper: 47240 },
384
- { lower: 47240, upper: 47280 },
385
- { lower: 47280, upper: 47320 },
386
- { lower: 47320, upper: 47400 },
387
- ];
388
- const v: bounds.Crude = { lower: 47066, upper: 47066 + 354 };
389
- const result = bounds.insert(b, v);
390
- expect(result).toEqual([
391
- { lower: 0, upper: 47040 },
392
- { lower: 47040, upper: 47240 },
393
- { lower: 47240, upper: 47066 + 354 },
394
- ]);
395
- });
396
- it("should insert a value into a sorted array of bounds", () => {});
462
+ });
463
+ describe("linspace", () => {
464
+ it("should generate the correct array", () => {
465
+ const b = bounds.construct([1, 3]);
466
+ const result = bounds.linspace(b);
467
+ expect(result).toEqual([1, 2]);
468
+ });
469
+ });
470
+ describe("clamp", () => {
471
+ it("should clamp the provided target to the bounds", () => {
472
+ const b = bounds.construct([1, 3]);
473
+ expect(bounds.clamp(b, 0)).toEqual(1);
474
+ expect(bounds.clamp(b, 2)).toEqual(2);
475
+ expect(bounds.clamp(b, 4)).toEqual(2);
397
476
  });
398
477
  });
399
478
  });