77e592502c
Fixes multiple issues with CRON schedule input validation and execution time display. ### Issues Fixed 1. **UTC label placement** - Added "UTC" suffix to specific times (e.g., "at 09:30 UTC") but not to interval descriptions (e.g., "every hour") 2. **Upcoming execution time calculation** - Fixed incorrect execution times for malformed CRON expressions by implementing auto-correction ### Changes - Created `normalizeCronExpression` utility to standardize cron expressions before parsing - Updated `formatTime` to support optional UTC suffix - Enhanced `getHoursDescription` to append UTC to specific times - Added comprehensive test coverage (102 tests passing) ### Before - `"1 /3 * * *"` showed daily executions at same time (incorrect) - `"9 * * *"` showed same time repeated 3 times (incorrect) - No UTC labels on schedule descriptions (confusing) ### After - All malformed expressions auto-corrected and show correct execution times - UTC labels clearly indicate timezone for specific times - User-friendly error messages for truly invalid patterns Closes #15870
36 lines
969 B
TypeScript
36 lines
969 B
TypeScript
import { z } from 'zod';
|
|
import { baseTriggerSchema } from './base-trigger-schema';
|
|
|
|
export const workflowCronTriggerSchema = baseTriggerSchema.extend({
|
|
type: z.literal('CRON'),
|
|
settings: z.discriminatedUnion('type', [
|
|
z.object({
|
|
type: z.literal('DAYS'),
|
|
schedule: z.object({
|
|
day: z.number().min(1),
|
|
hour: z.number().min(0).max(23),
|
|
minute: z.number().min(0).max(59),
|
|
}),
|
|
outputSchema: z.looseObject({}),
|
|
}),
|
|
z.object({
|
|
type: z.literal('HOURS'),
|
|
schedule: z.object({
|
|
hour: z.number().min(1),
|
|
minute: z.number().min(0).max(59),
|
|
}),
|
|
outputSchema: z.looseObject({}),
|
|
}),
|
|
z.object({
|
|
type: z.literal('MINUTES'),
|
|
schedule: z.object({ minute: z.number().min(1).max(60) }),
|
|
outputSchema: z.looseObject({}),
|
|
}),
|
|
z.object({
|
|
type: z.literal('CUSTOM'),
|
|
pattern: z.string(),
|
|
outputSchema: z.looseObject({}),
|
|
}),
|
|
]),
|
|
});
|