import type { ParseArgsConfig } from 'node:util'; import type { AnyFlag, AnyFlags } from './flag-types.js'; import type { PeowlyHelpMessageMeta } from './help-list-types.js'; export type PackageJsonLike = { name?: string | undefined; description?: string | undefined; version?: string | undefined; bin?: string | Record; }; export interface PeowlyMeta extends PeowlyHelpMessageMeta { readonly description?: string | false | undefined; readonly help?: string | undefined; readonly name?: string | undefined; readonly pkg?: PackageJsonLike | undefined; readonly processTitle?: string | false | undefined; readonly version?: string | undefined; } export interface ExtendedParseArgsConfig extends Omit { readonly args?: string[] | undefined; readonly options?: Flags | undefined; readonly returnRemainderArgs?: boolean | undefined; } export interface PeowlyOptions extends ExtendedParseArgsConfig, PeowlyMeta {} type TypedFlag = // Meow extension // Flag extends {type: 'number'} // ? number // : Flag extends { type: 'string' } ? string : Flag extends { type: 'boolean' } ? boolean : unknown; type PossiblyOptionalFlag = // Meow extension // Flag extends {isRequired: true} // ? FlagType // : Flag extends { 'default': unknown } ? FlagType : FlagType | undefined; export type TypedFlags = { [F in keyof Flags]: Flags[F] extends { multiple: true } ? PossiblyOptionalFlag>> : PossiblyOptionalFlag> }; export interface PeowlyResult { input: string[]; flags: TypedFlags>; remainderArgs: string[]; showHelp: (exitCode?: number) => never; }