@woodpecker-ci/plugin
Version:
Utilities to create a Woodpecker-CI typescript / javascript plugin.
35 lines (32 loc) • 1.52 kB
text/typescript
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 };