Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/extensions/terminal-suggest/src/fig/fig-autocomplete-shared/revert.ts
3520 views
1
/*---------------------------------------------------------------------------------------------
2
* Copyright (c) Microsoft Corporation. All rights reserved.
3
* Licensed under the MIT License. See License.txt in the project root for license information.
4
*--------------------------------------------------------------------------------------------*/
5
6
import { Option, Subcommand } from './convert';
7
8
function makeSingleOrArray<T>(arr: T[]): Fig.SingleOrArray<T> {
9
return arr.length === 1 ? (arr[0] as Fig.SingleOrArray<T>) : (arr as Fig.SingleOrArray<T>);
10
}
11
12
function revertOption<ArgT extends Fig.Arg, OptionT>(option: Option<ArgT, OptionT>): Fig.Option {
13
const { name, args } = option;
14
15
return {
16
name: makeSingleOrArray(name),
17
args,
18
};
19
}
20
21
export function revertSubcommand<ArgT extends Fig.Arg, OptionT, SubcommandT>(
22
subcommand: Subcommand<ArgT, OptionT, SubcommandT>,
23
postProcessingFn: (
24
oldSub: Subcommand<ArgT, OptionT, SubcommandT>,
25
newSub: Fig.Subcommand
26
) => Fig.Subcommand
27
): Fig.Subcommand {
28
const { name, subcommands, options, persistentOptions, args } = subcommand;
29
30
const newSubcommand: Fig.Subcommand = {
31
name: makeSingleOrArray(name),
32
subcommands:
33
Object.values(subcommands).length !== 0
34
? Object.values(subcommands).map((sub) => revertSubcommand(sub, postProcessingFn))
35
: undefined,
36
options:
37
Object.values(options).length !== 0
38
? [
39
...Object.values(options).map((option) => revertOption(option)),
40
...Object.values(persistentOptions).map((option) => revertOption(option)),
41
]
42
: undefined,
43
args: Object.values(args).length !== 0 ? makeSingleOrArray(Object.values(args)) : undefined,
44
};
45
return postProcessingFn(subcommand, newSubcommand);
46
}
47
48