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
@@ -1,10 +1,10 @@
export type CustomFieldLabel = string;
export type CustomFieldKey = string;
export type CustomField = {
type: 'string' | 'image';
colour: string;
label: CustomFieldLabel;
label: string;
};
export type CustomFields = Record<CustomFieldLabel, CustomField>;
export type EntryCustomFields = Record<CustomFieldLabel, string>;
export type CustomFields = Record<CustomFieldKey, CustomField>;
export type EntryCustomFields = Record<CustomFieldKey, string>;
+1 -1
View File
@@ -59,7 +59,7 @@ export type { URLPreset } from './definitions/core/UrlPreset.type.js';
export type {
CustomFields,
CustomField,
CustomFieldLabel,
CustomFieldKey,
EntryCustomFields,
} from './definitions/core/CustomFields.type.js';
+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];
}