From 1c07af402b35ba4c2abf89ff5816e791994db536 Mon Sep 17 00:00:00 2001 From: "Max P." Date: Fri, 30 May 2025 12:42:37 +0200 Subject: [PATCH] feat(cli): add validation for command options --- src/cli/create.ts | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/src/cli/create.ts b/src/cli/create.ts index 1a20e5f..338e288 100644 --- a/src/cli/create.ts +++ b/src/cli/create.ts @@ -2,6 +2,14 @@ import { Command } from '@cliffy/command'; import { generateUnitFiles } from '../templates/unit-generator.ts'; import { TimerOptions } from '../types/options.ts'; import { t } from '../i18n/mod.ts'; +import { + collectAndValidateAfter, + collectAndValidateEnv, + validateIdentifier, + validateNotEmpty, + validatePath, + validateSystemdCalendar, +} from '../utils/mod.ts'; export function createCommand() { return new Command() @@ -9,43 +17,54 @@ export function createCommand() { .option( '--name ', t('option_name'), + { value: (v) => validateIdentifier(v, '--name') }, ) .option( '--exec ', t('option_exec'), - { required: true }, + { + required: true, + value: (v) => validateNotEmpty(v, '--exec'), + }, ) .option('--calendar ', t('option_calendar'), { required: true, + value: validateSystemdCalendar, }) .option('--description ', t('option_description')) .option('--user', t('option_user')) .option( '--run-as ', t('option_run_as'), + { value: (v) => validateNotEmpty(v, '--run-as') }, ) .option( '--home ', t('option_home'), + { value: (v) => validatePath(v, true) }, ) .option( '--cwd ', t('option_cwd'), + { value: (v) => validatePath(v, true) }, ) - .option('--output ', t('option_output')) + .option('--output ', t('option_output'), { + value: (v) => validatePath(v, false), + }) .option( '--after ', t('option_after'), - { collect: true }, + { collect: true, value: collectAndValidateAfter }, ) .option( '--environment ', t('option_environment'), - { collect: true }, + { collect: true, value: collectAndValidateEnv }, ) .option( '--logfile ', t('option_logfile'), + { value: (v) => validatePath(v, false) }, ) .option('--dry-run', t('option_dry_run')) .action(async (options: TimerOptions) => {