|
1 | 1 | import type { WizardFormValues } from "./wizardForm" |
2 | 2 | import { PRESETS } from "./constants" |
3 | 3 |
|
| 4 | +function parsePositiveInt(raw: string): number | undefined { |
| 5 | + const n = Number(raw.trim()) |
| 6 | + return raw.trim() && Number.isInteger(n) && n >= 1 ? n : undefined |
| 7 | +} |
| 8 | + |
4 | 9 | export function buildConfigOverrides(values: WizardFormValues): Record<string, unknown> { |
5 | | - const parsedStartPage = values.startPage.trim() ? Number(values.startPage) : undefined |
6 | | - const parsedEndPage = values.endPage.trim() ? Number(values.endPage) : undefined |
| 10 | + const parsedStartPage = parsePositiveInt(values.startPage) |
| 11 | + const parsedEndPage = parsePositiveInt(values.endPage) |
| 12 | + const validPageRange = |
| 13 | + parsedStartPage === undefined || parsedEndPage === undefined || parsedStartPage <= parsedEndPage |
7 | 14 |
|
8 | 15 | const preset = PRESETS.find((p) => p.id === values.selectedPreset) |
9 | 16 | const baseConfig = preset?.baseConfig ?? {} |
@@ -32,8 +39,8 @@ export function buildConfigOverrides(values: WizardFormValues): Record<string, u |
32 | 39 | if (values.styleguide.trim()) config.styleguide = values.styleguide.trim() |
33 | 40 | if (values.editingLanguage.trim()) config.editing_language = values.editingLanguage.trim() |
34 | 41 | if (values.outputLanguages.length > 0) config.output_languages = values.outputLanguages |
35 | | - if (parsedStartPage !== undefined) config.start_page = parsedStartPage |
36 | | - if (parsedEndPage !== undefined) config.end_page = parsedEndPage |
| 42 | + if (validPageRange && parsedStartPage !== undefined) config.start_page = parsedStartPage |
| 43 | + if (validPageRange && parsedEndPage !== undefined) config.end_page = parsedEndPage |
37 | 44 | if (values.imageSegmentation && values.segmentationMinSide.trim()) { |
38 | 45 | const n = Number(values.segmentationMinSide.trim()) |
39 | 46 | if (!isNaN(n)) config.image_segmentation = { min_side: n } |
|
0 commit comments