@synnaxlabs/x 0.49.2 → 0.49.3

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.
@@ -1478,7 +1478,7 @@ describe("TimeRange", () => {
1478
1478
  });
1479
1479
  });
1480
1480
 
1481
- describe("simplify", () => {
1481
+ describe("merge", () => {
1482
1482
  it("should merge overlapping time ranges", () => {
1483
1483
  const trs = [
1484
1484
  new TimeRange(TimeSpan.seconds(1), TimeSpan.seconds(4)),
@@ -1486,45 +1486,33 @@ describe("TimeRange", () => {
1486
1486
  new TimeRange(TimeSpan.seconds(3), TimeSpan.seconds(5)),
1487
1487
  new TimeRange(TimeSpan.seconds(6), TimeSpan.seconds(7)),
1488
1488
  ];
1489
- const expected = [
1490
- new TimeRange(TimeSpan.seconds(1), TimeSpan.seconds(5)),
1491
- new TimeRange(TimeSpan.seconds(6), TimeSpan.seconds(7)),
1492
- ];
1493
- const simplified = TimeRange.simplify(trs);
1494
- expect(simplified).toEqual(expected);
1489
+ const expected = new TimeRange(TimeSpan.seconds(1), TimeSpan.seconds(7));
1490
+ const merged = TimeRange.merge(...trs);
1491
+ expect(merged).toEqual(expected);
1495
1492
  });
1496
1493
  it("should merge time ranges that are adjacent", () => {
1497
1494
  const trs = [
1498
1495
  new TimeRange(TimeSpan.seconds(1), TimeSpan.seconds(4)),
1499
1496
  new TimeRange(TimeSpan.seconds(4), TimeSpan.seconds(5)),
1500
1497
  ];
1501
- const expected = [new TimeRange(TimeSpan.seconds(1), TimeSpan.seconds(5))];
1502
- const simplified = TimeRange.simplify(trs);
1503
- expect(simplified).toEqual(expected);
1504
- });
1505
- it("should remove zero length time ranges", () => {
1506
- const trs = [
1507
- new TimeRange(TimeSpan.seconds(1), TimeSpan.seconds(4)),
1508
- new TimeRange(TimeSpan.seconds(5), TimeSpan.seconds(5)),
1509
- ];
1510
- const expected = [new TimeRange(TimeSpan.seconds(1), TimeSpan.seconds(4))];
1511
- const simplified = TimeRange.simplify(trs);
1512
- expect(simplified).toEqual(expected);
1498
+ const expected = new TimeRange(TimeSpan.seconds(1), TimeSpan.seconds(5));
1499
+ const merged = TimeRange.merge(...trs);
1500
+ expect(merged).toEqual(expected);
1513
1501
  });
1514
1502
  it("should make ranges valid by swapping start and end", () => {
1515
1503
  const trs = [
1516
1504
  new TimeRange(TimeSpan.seconds(4), TimeSpan.seconds(1)),
1517
1505
  new TimeRange(TimeSpan.seconds(2), TimeSpan.seconds(3)),
1518
1506
  ];
1519
- const expected = [new TimeRange(TimeSpan.seconds(1), TimeSpan.seconds(4))];
1520
- const simplified = TimeRange.simplify(trs);
1521
- expect(simplified).toEqual(expected);
1507
+ const expected = new TimeRange(TimeSpan.seconds(1), TimeSpan.seconds(4));
1508
+ const merged = TimeRange.merge(...trs);
1509
+ expect(merged).toEqual(expected);
1522
1510
  });
1523
1511
  it("should work with zero ranges", () => {
1524
1512
  const trs: TimeRange[] = [];
1525
- const expected: TimeRange[] = [];
1526
- const simplified = TimeRange.simplify(trs);
1527
- expect(simplified).toEqual(expected);
1513
+ const expected = TimeRange.MAX.swap();
1514
+ const merged = TimeRange.merge(...trs);
1515
+ expect(merged).toEqual(expected);
1528
1516
  });
1529
1517
  });
1530
1518
  describe("numericBounds", () => {
@@ -1680,28 +1680,14 @@ export class TimeRange implements primitive.Stringer {
1680
1680
  }
1681
1681
 
1682
1682
  /**
1683
- * Simplify takes the list of `TimeRange`s, makes all of them valid, sorts them, and
1684
- * merges any overlapping ranges.
1685
- *
1686
- * @param ranges - The list of `TimeRange`s to simplify.
1687
- * @returns A list of simplified `TimeRange`s.
1688
- */
1689
- static simplify(ranges: TimeRange[]): TimeRange[] {
1690
- return ranges
1691
- .map((r) => r.makeValid())
1692
- .sort((a, b) => TimeRange.sort(a, b))
1693
- .reduce<TimeRange[]>((simplified, range) => {
1694
- if (range.span.isZero) return simplified;
1695
- if (simplified.length === 0) {
1696
- simplified.push(range);
1697
- return simplified;
1698
- }
1699
- const last = simplified[simplified.length - 1];
1700
- if (last.overlapsWith(range) || last.end.equals(range.start))
1701
- last.end = TimeStamp.max(last.end, range.end);
1702
- else simplified.push(range);
1703
- return simplified;
1704
- }, []);
1683
+ * Merges the given time ranges into a single time range.
1684
+ *
1685
+ * @param ranges - The list of `CrudeTimeRange`s to merge.
1686
+ * @returns A new `TimeRange` that is the union of the given time ranges - the start
1687
+ * is the minimum of the start times and the end is the maximum of the end times.
1688
+ */
1689
+ static merge(...ranges: CrudeTimeRange[]): TimeRange {
1690
+ return TimeRange.max(...ranges.map((r) => new TimeRange(r).makeValid()));
1705
1691
  }
1706
1692
  }
1707
1693