refactor: migrate custom fields to transactions

refactor: extract functions to api domain

refactor: strict custom field parsing

refactor: remove rundown cache utilities

refactor: directory restructure
This commit is contained in:
Carlos Valente
2025-06-06 21:08:30 +02:00
committed by Carlos Valente
parent b1d23467a2
commit 62c8319d70
75 changed files with 2060 additions and 2480 deletions
+2 -1
View File
@@ -28,6 +28,7 @@ export {
getPreviousBlockNormal,
swapEventData,
} from './src/rundown-utils/rundownUtils.js';
export { getFirstRundown } from './src/rundown/rundown.utils.js';
// time format utils
export {
@@ -53,7 +54,7 @@ export { isAlphanumeric, isAlphanumericWithSpace } from './src/regex-utils/isAlp
export { isColourHex } from './src/regex-utils/isColourHex.js';
export { splitWhitespace } from './src/regex-utils/splitWhitespace.js';
export { customFieldLabelToKey, customKeyFromLabel } from './src/customField-utils/customFieldLabelToKey.js';
export { customFieldLabelToKey, customKeyFromLabel } from './src/customField-utils/customFieldUtils.js';
// helpers from externals
export { deepmerge } from './src/externals/deepmerge.js';
@@ -1,21 +0,0 @@
import type { CustomFields } from 'ontime-types';
import { isAlphanumericWithSpace } from '../regex-utils/isAlphanumeric.js';
/**
* @description Transforms a Custom field label into a valid key or returns null if not possible
*/
export const customFieldLabelToKey = (label: string): string | null => {
if (isAlphanumericWithSpace(label)) {
return label.trim().replaceAll(' ', '_');
}
return null;
};
export const customKeyFromLabel = (label: string, fields: CustomFields): string | null => {
const maybeMatchingKey = Object.keys(fields).find((key) => fields[key].label === label);
if (maybeMatchingKey) {
return maybeMatchingKey;
}
return null;
};
@@ -0,0 +1,19 @@
import type { CustomFields } from 'ontime-types';
/**
* Transforms an alphanumeric label with spaces into a valid key
*/
export function customFieldLabelToKey(label: string): string {
return label.trim().replaceAll(' ', '_');
}
/**
* Finds an object key in the CustomFields object that matches the given label
*/
export function customKeyFromLabel(label: string, fields: CustomFields): string | null {
const maybeMatchingKey = Object.keys(fields).find((key) => fields[key].label === label);
if (maybeMatchingKey) {
return maybeMatchingKey;
}
return null;
}
@@ -0,0 +1,15 @@
import type { ProjectRundowns, Rundown } from 'ontime-types';
/**
* Gets the first rundown in the project
* We know that the project has at least one rundown
*/
export function getFirstRundown(rundowns: ProjectRundowns): Rundown {
const keys = Object.keys(rundowns);
if (keys.length === 0) {
throw new Error('No rundowns found in project');
}
const firstKey = keys[0];
return rundowns[firstKey];
}