refactor: gather group metadata

This commit is contained in:
Carlos Valente
2025-03-28 19:16:38 +01:00
committed by Carlos Valente
parent 730cb95c04
commit 876d111c61
48 changed files with 1044 additions and 751 deletions
@@ -1,11 +1,11 @@
import { dayInMs, MILLIS_PER_HOUR, MILLIS_PER_MINUTE } from './conversionUtils';
import { getTimeFromPrevious } from './getTimeFromPrevious';
import { getTimeFrom } from './getTimeFrom';
describe('getTimeFromPrevious', () => {
describe('getTimeFrom', () => {
it('returns the time elapsed (gap or overlap) from the previous', () => {
const expected = 75600000 - 71700000; // current start - previousEnd
expect(
getTimeFromPrevious(
getTimeFrom(
{ timeStart: 21 * MILLIS_PER_HOUR, dayOffset: 0 },
{ timeStart: 19 * MILLIS_PER_HOUR + 20 * MILLIS_PER_MINUTE, duration: 35 * MILLIS_PER_MINUTE, dayOffset: 0 },
),
@@ -14,22 +14,18 @@ describe('getTimeFromPrevious', () => {
it('accounts for partially overlapping events', () => {
const expected = -1;
expect(getTimeFromPrevious({ timeStart: 11, dayOffset: 0 }, { timeStart: 10, duration: 2, dayOffset: 0 })).toBe(
expected,
);
expect(getTimeFrom({ timeStart: 11, dayOffset: 0 }, { timeStart: 10, duration: 2, dayOffset: 0 })).toBe(expected);
});
it('accounts for events that are fully contained', () => {
const expected = -6;
expect(getTimeFromPrevious({ timeStart: 10, dayOffset: 0 }, { timeStart: 8, duration: 8, dayOffset: 0 })).toBe(
expected,
);
expect(getTimeFrom({ timeStart: 10, dayOffset: 0 }, { timeStart: 8, duration: 8, dayOffset: 0 })).toBe(expected);
});
it('fully overlapping events are the next day', () => {
const expected = dayInMs - 2 * MILLIS_PER_HOUR;
expect(
getTimeFromPrevious(
getTimeFrom(
{ timeStart: 10 * MILLIS_PER_HOUR, dayOffset: 1 },
{ timeStart: 10 * MILLIS_PER_HOUR, duration: 2 * MILLIS_PER_HOUR, dayOffset: 0 },
),
@@ -39,7 +35,7 @@ describe('getTimeFromPrevious', () => {
it('accounts for events that are the day after', () => {
const expected = -MILLIS_PER_HOUR; // (previousEnd - currentStart);
expect(
getTimeFromPrevious(
getTimeFrom(
{ timeStart: 22 * MILLIS_PER_HOUR, dayOffset: 0 },
{ timeStart: 20 * MILLIS_PER_HOUR, duration: 3 * MILLIS_PER_HOUR, dayOffset: 0 },
),
@@ -49,7 +45,7 @@ describe('getTimeFromPrevious', () => {
it('accounts for events that cross midnight', () => {
const expected = -MILLIS_PER_HOUR; // (previousEnd - currentStart);
expect(
getTimeFromPrevious(
getTimeFrom(
{ timeStart: 1 * MILLIS_PER_HOUR, dayOffset: 1 },
{ timeStart: 20 * MILLIS_PER_HOUR, duration: 6 * MILLIS_PER_HOUR, dayOffset: 0 },
),
@@ -3,9 +3,9 @@ import type { OntimeEvent } from 'ontime-types';
import { dayInMs } from './conversionUtils.js';
/**
* Utility returns the gap from previous event
* Utility returns the gap from a previous given event
*/
export function getTimeFromPrevious(
export function getTimeFrom(
current: Pick<OntimeEvent, 'timeStart' | 'dayOffset'>,
previous: Pick<OntimeEvent, 'timeStart' | 'duration' | 'dayOffset'> | null,
): number {
@@ -1,19 +1,5 @@
import type { MaybeString } from 'ontime-types';
import { EndAction, TimerType, TimeStrategy } from 'ontime-types';
/**
* Check if a given value is a valid type linkStart, returns the fallback otherwise
* linkStart can be a string (id of an event to link) or null (unlinked)
* @param {MaybeString} maybeLinkStart
* @returns {MaybeString}
*/
export function validateLinkStart(maybeLinkStart: unknown, fallback: MaybeString = null): MaybeString {
if (typeof maybeLinkStart === 'string' || maybeLinkStart === null) {
return maybeLinkStart as MaybeString;
}
return fallback;
}
/**
* Check if a given value is a valid time strategy, returns the fallback otherwise
* @param {TimeStrategy} maybeTimeStrategy