123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315 |
- import {PackageJson} from 'type-fest';
- declare namespace meow {
- type FlagType = 'string' | 'boolean' | 'number';
-
- type IsRequiredPredicate = (flags: Readonly<AnyFlags>, input: readonly string[]) => boolean;
- interface Flag<Type extends FlagType, Default> {
- readonly type?: Type;
- readonly alias?: string;
- readonly default?: Default;
- readonly isRequired?: boolean | IsRequiredPredicate;
- readonly isMultiple?: boolean;
- }
- type StringFlag = Flag<'string', string>;
- type BooleanFlag = Flag<'boolean', boolean>;
- type NumberFlag = Flag<'number', number>;
- type AnyFlag = StringFlag | BooleanFlag | NumberFlag;
- type AnyFlags = Record<string, AnyFlag>;
- interface Options<Flags extends AnyFlags> {
-
- readonly flags?: Flags;
-
- readonly description?: string | false;
-
- readonly help?: string | false;
-
- readonly version?: string | false;
-
- readonly autoHelp?: boolean;
-
- readonly autoVersion?: boolean;
-
- readonly pkg?: Record<string, unknown>;
-
- readonly argv?: readonly string[];
-
- readonly inferType?: boolean;
-
- readonly booleanDefault?: boolean | null | undefined;
-
- readonly hardRejection?: boolean;
-
- readonly allowUnknownFlags?: boolean;
- }
- type TypedFlag<Flag extends AnyFlag> =
- Flag extends {type: 'number'}
- ? number
- : Flag extends {type: 'string'}
- ? string
- : Flag extends {type: 'boolean'}
- ? boolean
- : unknown;
- type PossiblyOptionalFlag<Flag extends AnyFlag, FlagType> =
- Flag extends {isRequired: true}
- ? FlagType
- : Flag extends {default: any}
- ? FlagType
- : FlagType | undefined;
- type TypedFlags<Flags extends AnyFlags> = {
- [F in keyof Flags]: Flags[F] extends {isMultiple: true}
- ? PossiblyOptionalFlag<Flags[F], Array<TypedFlag<Flags[F]>>>
- : PossiblyOptionalFlag<Flags[F], TypedFlag<Flags[F]>>
- };
- interface Result<Flags extends AnyFlags> {
-
- input: string[];
-
- flags: TypedFlags<Flags> & Record<string, unknown>;
-
- unnormalizedFlags: TypedFlags<Flags> & Record<string, unknown>;
-
- pkg: PackageJson;
-
- help: string;
-
- showHelp: (exitCode?: number) => void;
-
- showVersion: () => void;
- }
- }
- declare function meow<Flags extends meow.AnyFlags>(helpMessage: string, options?: meow.Options<Flags>): meow.Result<Flags>;
- declare function meow<Flags extends meow.AnyFlags>(options?: meow.Options<Flags>): meow.Result<Flags>;
- export = meow;
|