File size: 1,178 Bytes
68d7816 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | import { z } from 'zod';
import { registerConfigSection } from '#/app/config/configSectionContributions';
import { isPlainObject, plainObjectToToml, transformPlainObject } from '#/app/config/toml';
import { HOOK_EVENT_TYPES } from './internal/types';
export const HOOKS_SECTION = 'hooks';
export const HookDefSchema = z
.object({
event: z.enum(HOOK_EVENT_TYPES),
matcher: z.string().optional(),
command: z.string().min(1),
timeout: z.number().int().min(1).max(600).optional(),
})
.strict();
export type HookDefConfig = z.infer<typeof HookDefSchema>;
export const HooksConfigSchema = z.array(HookDefSchema);
export const hooksFromToml = (rawSnake: unknown): unknown => {
if (!Array.isArray(rawSnake)) return rawSnake;
return rawSnake.map((hook) => (isPlainObject(hook) ? transformPlainObject(hook) : hook));
};
export const hooksToToml = (value: unknown, _rawSnake: unknown): unknown => {
if (!Array.isArray(value)) return value;
return value.map((hook) => (isPlainObject(hook) ? plainObjectToToml(hook, undefined) : hook));
};
registerConfigSection(HOOKS_SECTION, HooksConfigSchema, {
fromToml: hooksFromToml,
toToml: hooksToToml,
});
|