Path: blob/main/extensions/terminal-suggest/src/fig/fig-autocomplete-shared/revert.ts
3520 views
/*---------------------------------------------------------------------------------------------1* Copyright (c) Microsoft Corporation. All rights reserved.2* Licensed under the MIT License. See License.txt in the project root for license information.3*--------------------------------------------------------------------------------------------*/45import { Option, Subcommand } from './convert';67function makeSingleOrArray<T>(arr: T[]): Fig.SingleOrArray<T> {8return arr.length === 1 ? (arr[0] as Fig.SingleOrArray<T>) : (arr as Fig.SingleOrArray<T>);9}1011function revertOption<ArgT extends Fig.Arg, OptionT>(option: Option<ArgT, OptionT>): Fig.Option {12const { name, args } = option;1314return {15name: makeSingleOrArray(name),16args,17};18}1920export function revertSubcommand<ArgT extends Fig.Arg, OptionT, SubcommandT>(21subcommand: Subcommand<ArgT, OptionT, SubcommandT>,22postProcessingFn: (23oldSub: Subcommand<ArgT, OptionT, SubcommandT>,24newSub: Fig.Subcommand25) => Fig.Subcommand26): Fig.Subcommand {27const { name, subcommands, options, persistentOptions, args } = subcommand;2829const newSubcommand: Fig.Subcommand = {30name: makeSingleOrArray(name),31subcommands:32Object.values(subcommands).length !== 033? Object.values(subcommands).map((sub) => revertSubcommand(sub, postProcessingFn))34: undefined,35options:36Object.values(options).length !== 037? [38...Object.values(options).map((option) => revertOption(option)),39...Object.values(persistentOptions).map((option) => revertOption(option)),40]41: undefined,42args: Object.values(args).length !== 0 ? makeSingleOrArray(Object.values(args)) : undefined,43};44return postProcessingFn(subcommand, newSubcommand);45}464748