-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtypes.d.ts
126 lines (107 loc) · 3.53 KB
/
types.d.ts
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
declare module 'cafe-args' {
export type CafeFnContext = { options: Record<string, unknown>; arguments: Record<string, unknown> }
export type CafeFn = (context: CafeFnContext) => Promise<void>
export type PreparedCafeFn = () => Promise<void>
export interface Argument<T = unknown> {
key: string
description: string
type?: 'string' | 'boolean' | 'number' | 'bigint' | 'hex-string'
required?: boolean | { when: string } | { unless: string }
conflicts?: string
default?: T
defaultDescription?: string
alias?: string
envKey?: string
minimum?: number | bigint
maximum?: number | bigint
length?: number
minimumLength?: number
maximumLength?: number
oddLength?: boolean
noErrors?: boolean
autocompletePath?: boolean
handler?: () => void
}
export interface CommandDefinition {
key: string
fullPath: string
description: string
options: Argument[]
arguments: Argument[]
alias?: string
sibling?: string
fn?: CafeFn
}
export interface ParsedCommand {
key: string
fullPath: string
description: string
command: CommandDefinition
options: Record<string, unknown>
arguments: Record<string, unknown>
}
export interface Context {
exitReason?: string
command: CommandDefinition
options: Record<string, unknown>
arguments: Record<string, unknown>
fn?: PreparedCafeFn
sourcemap: Record<string, 'default' | 'env' | 'explicit'>
sibling?: ParsedCommand
}
export class Command {
constructor(
name: string,
description: string,
settings?: {
alias?: string
sibling?: string
}
)
withOption(option: Argument): Command
withPositional(positional: Argument): Command
withFn(fn: CafeFn): Command
}
export class Group {
constructor(name: string, description: string)
withCommand(command: Command): Group
withGroup(group: Group): Group
}
export interface Application {
name: string
command: string
version: string
description: string
}
export interface Parser {
suggest(line: string, offset: number, trailing: string): Promise<string[]>
parse(argv: string[]): Promise<string | Context>
addGroup(group: Group): void
addCommand(command: Command): void
addGlobalOption(option: Argument): void
}
export interface ParserOptions {
printer?: Printer
application?: Application
pathResolver?: (word: string) => Promise<string[]>
}
export function createParser(options?: ParserOptions): Parser
export interface TokenizeContext {
argv: string[]
quotes: false | string
token: string
opensNext: boolean
}
export function tokenize(string: string, offset: number): TokenizeContext
export type Shell = 'fish' | 'zsh' | 'bash'
export function detectShell(string: string): Shell | null
export function getShellPaths(shell: Shell): string[]
export function generateCompletion(command: string, shell: Shell): string
export interface Printer {
print(text: string): void
printError(text: string): void
printHeading(text: string): void
formatDim(text: string): string
formatImportant(text: string): string
}
}