// Aggregate-agnostic row helpers shared by the modules' repositories. export function pick(row: T, keys: readonly K[]): Pick { const picked = {} as Pick; for (const key of keys) { picked[key] = row[key]; } return picked; } /** Runtime rows carry app-extension columns the schema types do not know. */ export function extractCustomFields(row: object, knownColumns: readonly string[]) { const known = new Set(knownColumns); const customFields: Record = {}; for (const [key, value] of Object.entries(row)) { if (!known.has(key)) { customFields[key] = value; } } return customFields; } function isSameColumnValue(a: unknown, b: unknown) { if (a instanceof Date || b instanceof Date) { return a instanceof Date && b instanceof Date && a.getTime() === b.getTime(); } return a === b; } export function changedColumns(before: Record, after: Record) { const changes: Record = {}; for (const [column, value] of Object.entries(after)) { if (!isSameColumnValue(before[column], value)) { changes[column] = value; } } return changes; }