UNPKG

@woodpecker-ci/plugin

Version:

Utilities to create a Woodpecker-CI typescript / javascript plugin.

35 lines (32 loc) 1.52 kB
type SettingType = 'string' | 'number' | 'boolean' | 'json'; type SettingTypeValue<T extends SettingType> = T extends 'boolean' ? boolean : T extends 'string' ? string : T extends 'number' ? number : T extends 'json' ? unknown : never; type SettingDef<T extends SettingType, S = {}> = { type: T; description: string; required?: boolean; default?: SettingTypeValue<T>; } & S; type BooleanArgDef = SettingDef<'boolean'>; type StringArgDef = SettingDef<'string', { trimWhiteSpace?: boolean; }>; type NumberArgDef = SettingDef<'number'>; type JSONArgDef = SettingDef<'json'>; type SettingsDef = Record<string, BooleanArgDef | StringArgDef | NumberArgDef | JSONArgDef>; type ParsedSettings<T extends SettingsDef> = { [K in keyof T]: T[K]['required'] extends true ? SettingTypeValue<T[K]['type']> : T[K]['default'] extends SettingTypeValue<T[K]['type']> ? SettingTypeValue<T[K]['type']> : SettingTypeValue<T[K]['type']> | undefined; }; type MetaDef = { name: string; version?: string; description?: string; }; type CommandDef<T extends SettingsDef> = { meta: MetaDef; settings: T; run: (ctx: { settings: ParsedSettings<T>; }) => void | Promise<void>; }; declare function runPlugin<T extends SettingsDef>(options: CommandDef<T>): Promise<void>; export { type BooleanArgDef, type CommandDef, type JSONArgDef, type MetaDef, type NumberArgDef, type ParsedSettings, type SettingDef, type SettingType, type SettingTypeValue, type SettingsDef, type StringArgDef, runPlugin };