(inputs: Record<string, any>)
| 558 | * Returns { valid, cronExpression?, error? }. |
| 559 | */ |
| 560 | export const resolveScheduleCron = (inputs: Record<string, any>): { valid: boolean; cronExpression?: string; error?: string } => { |
| 561 | const scheduleType = (inputs.scheduleType as string) || 'cronExpression' |
| 562 | const timezone = (inputs.scheduleTimezone as string) || 'UTC' |
| 563 | |
| 564 | if (scheduleType === 'visualPicker') { |
| 565 | const pickerInput: VisualPickerInput = { |
| 566 | scheduleFrequency: inputs.scheduleFrequency, |
| 567 | scheduleOnMinute: inputs.scheduleOnMinute, |
| 568 | scheduleOnTime: inputs.scheduleOnTime, |
| 569 | scheduleOnDayOfWeek: inputs.scheduleOnDayOfWeek, |
| 570 | scheduleOnDayOfMonth: inputs.scheduleOnDayOfMonth |
| 571 | } |
| 572 | const pickerResult = validateVisualPickerFields(pickerInput) |
| 573 | if (!pickerResult.valid) { |
| 574 | return { valid: false, error: pickerResult.error } |
| 575 | } |
| 576 | const cron = buildCronFromVisualPicker(pickerInput) |
| 577 | // Also validate the resulting cron + timezone |
| 578 | const cronResult = validateCronExpression(cron, timezone) |
| 579 | if (!cronResult.valid) { |
| 580 | return { valid: false, error: cronResult.error } |
| 581 | } |
| 582 | return { valid: true, cronExpression: cron } |
| 583 | } |
| 584 | |
| 585 | // scheduleType === 'cronExpression' |
| 586 | const expression = inputs.scheduleCronExpression as string |
| 587 | const cronResult = validateCronExpression(expression, timezone) |
| 588 | if (!cronResult.valid) { |
| 589 | return { valid: false, error: cronResult.error } |
| 590 | } |
| 591 | return { valid: true, cronExpression: expression } |
| 592 | } |
| 593 | |
| 594 | /** |
| 595 | * Mode-aware schedule input validator. |
no test coverage detected