@synnaxlabs/x 0.32.0 → 0.34.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 (124) hide show
  1. package/.turbo/turbo-build.log +32 -32
  2. package/dist/binary.cjs +1 -1
  3. package/dist/binary.js +1 -1
  4. package/dist/bounds-CFI9wDXn.js +171 -0
  5. package/dist/bounds-DzCDHgdE.cjs +1 -0
  6. package/dist/bounds.cjs +1 -1
  7. package/dist/bounds.js +1 -1
  8. package/dist/box-DVCNGsJG.js +201 -0
  9. package/dist/box-Mf8E1Ypp.cjs +1 -0
  10. package/dist/box.cjs +1 -1
  11. package/dist/box.js +1 -1
  12. package/dist/caseconv.cjs +1 -1
  13. package/dist/caseconv.js +1 -1
  14. package/dist/compare.js +1 -1
  15. package/dist/deep.cjs +1 -1
  16. package/dist/deep.js +46 -48
  17. package/dist/{direction-DZbN47uL.cjs → direction-D7qoo_GJ.cjs} +1 -1
  18. package/dist/direction.cjs +1 -1
  19. package/dist/external-B3XSLDq5.cjs +1 -0
  20. package/dist/{external-CO221aaF.js → external-sVtvYJS6.js} +3 -3
  21. package/dist/{index-B5THJ1eb.js → index-BBa2mWG1.js} +1 -1
  22. package/dist/{index-DgaYJC35.cjs → index-CYxQwEdX.cjs} +1 -1
  23. package/dist/{index-B3BUDIdi.js → index-HQonyH7n.js} +1 -2
  24. package/dist/index-YsO0EMN8.cjs +1 -0
  25. package/dist/{index-Duv1uH08.js → index-eue4dSQX.js} +14 -10
  26. package/dist/index.cjs +2 -2
  27. package/dist/index.js +162 -145
  28. package/dist/{location-DjcaXEps.js → location-CI9x53qR.js} +8 -8
  29. package/dist/{location-gPB1RtfA.cjs → location-DetomF8Z.cjs} +1 -1
  30. package/dist/location.cjs +1 -1
  31. package/dist/location.js +1 -1
  32. package/dist/path-BBCx3K6k.cjs +1 -0
  33. package/dist/{path-B-1-i3qC.js → path-CmnoH3RC.js} +26 -26
  34. package/dist/{position-DkON65EZ.js → position-CFc9RsSn.js} +2 -2
  35. package/dist/{position-C71OiHiw.cjs → position-DKhPhvPh.cjs} +1 -1
  36. package/dist/position.cjs +1 -1
  37. package/dist/position.js +1 -1
  38. package/dist/runtime.cjs +1 -1
  39. package/dist/runtime.js +1 -1
  40. package/dist/{scale-COPgp55a.cjs → scale-CT61XD_X.cjs} +1 -1
  41. package/dist/{scale-qw6vRO4s.js → scale-DNQE1LMm.js} +25 -3
  42. package/dist/scale.cjs +1 -1
  43. package/dist/scale.js +1 -1
  44. package/dist/series-DWLXo7J6.cjs +11 -0
  45. package/dist/{series-B5eA90Ci.js → series-sjWkW8qe.js} +627 -466
  46. package/dist/spatial.cjs +1 -1
  47. package/dist/spatial.js +5 -5
  48. package/dist/src/binary/encoder.d.ts.map +1 -1
  49. package/dist/src/caseconv/caseconv.d.ts.map +1 -1
  50. package/dist/src/clamp/clamp.d.ts.map +1 -1
  51. package/dist/src/compare/compare.d.ts.map +1 -1
  52. package/dist/src/debounce/debounce.d.ts.map +1 -1
  53. package/dist/src/deep/difference.d.ts.map +1 -1
  54. package/dist/src/deep/merge.d.ts.map +1 -1
  55. package/dist/src/deep/path.d.ts +2 -2
  56. package/dist/src/deep/path.d.ts.map +1 -1
  57. package/dist/src/math/math.d.ts +26 -6
  58. package/dist/src/math/math.d.ts.map +1 -1
  59. package/dist/src/math/math.spec.d.ts +2 -0
  60. package/dist/src/math/math.spec.d.ts.map +1 -0
  61. package/dist/src/migrate/migrate.d.ts.map +1 -1
  62. package/dist/src/record.d.ts +4 -0
  63. package/dist/src/record.d.ts.map +1 -1
  64. package/dist/src/spatial/bounds/bounds.d.ts +208 -4
  65. package/dist/src/spatial/bounds/bounds.d.ts.map +1 -1
  66. package/dist/src/spatial/box/box.d.ts +4 -4
  67. package/dist/src/spatial/box/box.d.ts.map +1 -1
  68. package/dist/src/spatial/scale/scale.d.ts +177 -5
  69. package/dist/src/spatial/scale/scale.d.ts.map +1 -1
  70. package/dist/src/strings/strings.d.ts +14 -0
  71. package/dist/src/strings/strings.d.ts.map +1 -1
  72. package/dist/src/telem/generate.d.ts.map +1 -1
  73. package/dist/src/telem/series.d.ts +35 -10
  74. package/dist/src/telem/series.d.ts.map +1 -1
  75. package/dist/src/telem/telem.d.ts +12 -10
  76. package/dist/src/telem/telem.d.ts.map +1 -1
  77. package/dist/src/url/url.d.ts.map +1 -1
  78. package/dist/telem.cjs +1 -1
  79. package/dist/telem.js +1 -1
  80. package/dist/url.cjs +1 -1
  81. package/dist/url.js +1 -1
  82. package/dist/{zodutil-BWvwKcpb.cjs → zodutil-C6RYzvXd.cjs} +1 -1
  83. package/dist/{zodutil-qNM8aVYC.js → zodutil-Tmuc4CNq.js} +1 -1
  84. package/dist/zodutil.cjs +1 -1
  85. package/dist/zodutil.js +1 -1
  86. package/package.json +10 -9
  87. package/src/binary/encoder.ts +1 -2
  88. package/src/caseconv/caseconv.ts +8 -15
  89. package/src/clamp/clamp.ts +1 -1
  90. package/src/compare/compare.ts +1 -3
  91. package/src/debounce/debounce.ts +1 -2
  92. package/src/deep/difference.ts +3 -9
  93. package/src/deep/merge.ts +8 -15
  94. package/src/deep/path.spec.ts +1 -1
  95. package/src/deep/path.ts +4 -4
  96. package/src/math/math.spec.ts +149 -0
  97. package/src/math/math.ts +61 -10
  98. package/src/migrate/migrate.ts +4 -5
  99. package/src/record.ts +5 -0
  100. package/src/runtime/os.ts +2 -2
  101. package/src/spatial/bounds/bounds.spec.ts +135 -270
  102. package/src/spatial/bounds/bounds.ts +296 -29
  103. package/src/spatial/box/box.ts +13 -12
  104. package/src/spatial/direction/direction.ts +1 -1
  105. package/src/spatial/location/location.ts +5 -5
  106. package/src/spatial/scale/scale.ts +196 -12
  107. package/src/strings/strings.spec.ts +33 -1
  108. package/src/strings/strings.ts +52 -0
  109. package/src/telem/generate.ts +1 -3
  110. package/src/telem/series.spec.ts +235 -0
  111. package/src/telem/series.ts +310 -100
  112. package/src/telem/telem.spec.ts +27 -11
  113. package/src/telem/telem.ts +56 -36
  114. package/src/url/url.ts +9 -12
  115. package/src/zodutil/zodutil.spec.ts +5 -7
  116. package/tsconfig.tsbuildinfo +1 -1
  117. package/dist/bounds-CpboA0q6.js +0 -127
  118. package/dist/bounds-ZZc1c-_Z.cjs +0 -1
  119. package/dist/box-BQID-0jO.cjs +0 -1
  120. package/dist/box-xRqO6NvI.js +0 -202
  121. package/dist/external-B-DoBvh7.cjs +0 -1
  122. package/dist/index-xk130iQA.cjs +0 -1
  123. package/dist/path-577Fmn5N.cjs +0 -1
  124. package/dist/series-CJ65b1Uz.cjs +0 -11
@@ -9,7 +9,7 @@
9
9
 
10
10
  import { describe, expect, it, test } from "vitest";
11
11
 
12
- import { type NumberCouple } from "@/spatial/base";
12
+ import { type numeric } from "@/numeric";
13
13
  import * as bounds from "@/spatial/bounds/bounds";
14
14
 
15
15
  describe("Bounds", () => {
@@ -232,234 +232,146 @@ describe("Bounds", () => {
232
232
  });
233
233
  });
234
234
  });
235
- describe("insert", () => {
236
- describe("formal cases", () => {
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
235
 
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
- ];
236
+ describe("traverse", () => {
237
+ interface Spec<T extends numeric.Value> {
238
+ bounds: Array<bounds.Crude<T>>;
239
+ start: T;
240
+ dist: T;
241
+ expected: T;
242
+ }
440
243
 
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
- });
244
+ const SPECS: Spec<numeric.Value>[] = [
245
+ {
246
+ bounds: [
247
+ [0, 10],
248
+ [10, 20],
249
+ ],
250
+ start: 5,
251
+ dist: 5,
252
+ expected: 10,
253
+ },
254
+ {
255
+ bounds: [
256
+ [0, 10],
257
+ [15, 20],
258
+ ],
259
+ start: 12,
260
+ dist: 3,
261
+ expected: 18,
262
+ },
263
+ {
264
+ bounds: [
265
+ [0, 10],
266
+ [15, 20],
267
+ ],
268
+ start: 12,
269
+ dist: -3,
270
+ expected: 7,
271
+ },
272
+ {
273
+ bounds: [
274
+ [0, 10],
275
+ [15, 20],
276
+ ],
277
+ start: 10,
278
+ dist: -3,
279
+ expected: 7,
280
+ },
281
+ {
282
+ bounds: [
283
+ [0, 10],
284
+ [15, 20],
285
+ ],
286
+ start: 15,
287
+ dist: -3,
288
+ expected: 7,
289
+ },
290
+ {
291
+ bounds: [
292
+ [0, 10],
293
+ [15, 20],
294
+ ],
295
+ start: 16,
296
+ dist: -3,
297
+ expected: 8,
298
+ },
299
+ {
300
+ bounds: [
301
+ [0, 10],
302
+ [15, 20],
303
+ ],
304
+ start: 16,
305
+ dist: 12,
306
+ expected: 20,
307
+ },
308
+ {
309
+ bounds: [
310
+ [0, 10],
311
+ [15, 20],
312
+ ],
313
+ start: 16,
314
+ dist: -20,
315
+ expected: 0,
316
+ },
317
+ {
318
+ bounds: [[620n, 726n]],
319
+ start: 724n,
320
+ dist: -6n,
321
+ expected: 718n,
322
+ },
323
+ ];
324
+ SPECS.forEach(({ bounds: b, start, dist, expected }) => {
325
+ test(`should return ${expected} for ${b} and ${start} and ${dist}`, () => {
326
+ expect(bounds.traverse(b, start, dist)).toEqual(expected);
447
327
  });
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
- });
328
+ });
329
+ });
330
+
331
+ describe("distance", () => {
332
+ interface Spec<T extends numeric.Value> {
333
+ bounds: Array<bounds.Crude<T>>;
334
+ start: T;
335
+ end: T;
336
+ expected: T;
337
+ }
338
+
339
+ const SPECS: Spec<numeric.Value>[] = [
340
+ {
341
+ bounds: [
342
+ [0, 10],
343
+ [10, 20],
344
+ ],
345
+ start: 5,
346
+ end: 15,
347
+ expected: 10,
348
+ },
349
+ {
350
+ bounds: [
351
+ [0, 10],
352
+ [15, 20],
353
+ ],
354
+ start: 12,
355
+ end: 18,
356
+ expected: 3,
357
+ },
358
+ {
359
+ bounds: [
360
+ [0, 10],
361
+ [15, 20],
362
+ ],
363
+ start: 10,
364
+ end: 5,
365
+ expected: 5,
366
+ },
367
+ ];
368
+ SPECS.forEach(({ bounds: b, start, end, expected }) => {
369
+ test(`should return ${expected} for ${b} and ${start} and ${end}`, () => {
370
+ expect(bounds.distance(b, start, end)).toEqual(expected);
460
371
  });
461
372
  });
462
373
  });
374
+
463
375
  describe("linspace", () => {
464
376
  it("should generate the correct array", () => {
465
377
  const b = bounds.construct([1, 3]);
@@ -475,51 +387,4 @@ describe("Bounds", () => {
475
387
  expect(bounds.clamp(b, 4)).toEqual(2);
476
388
  });
477
389
  });
478
- describe("exposure", () => {
479
- interface Spec {
480
- name: string;
481
- bg: bounds.Crude;
482
- filter: bounds.Crude;
483
- result: number;
484
- }
485
- const SPECS: Spec[] = [
486
- {
487
- name: "full exposure",
488
- bg: [1, 3],
489
- filter: [1, 3],
490
- result: 1,
491
- },
492
- {
493
- name: "no exposure",
494
- bg: [1, 3],
495
- filter: [4, 5],
496
- result: 0,
497
- },
498
- {
499
- name: "partial exposure",
500
- bg: [1, 3],
501
- filter: [2, 4],
502
- result: 0.5,
503
- },
504
- {
505
- name: "partial exposure",
506
- bg: [1, 3],
507
- filter: [0, 2],
508
- result: 0.5,
509
- },
510
- {
511
- name: "full exposure",
512
- bg: [1, 3],
513
- filter: [0, 4],
514
- result: 1,
515
- },
516
- ];
517
- SPECS.forEach(({ name, bg, filter, result }) => {
518
- test(name, () => {
519
- expect(bounds.exposure(bounds.construct(bg), bounds.construct(filter))).toEqual(
520
- result,
521
- );
522
- });
523
- });
524
- });
525
390
  });