v6
1// Copyright 2022 Google LLC
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// https://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15import { createInterface } from 'node:readline'
16
17export async function question(
18 query: string,
19 { choices }: { choices?: string[] } = {}
20) {
21 let completer = undefined
22 if (Array.isArray(choices)) {
23 completer = function completer(line: string) {
24 const completions = choices
25 const hits = completions.filter((c) => c.startsWith(line))
26 return [hits.length ? hits : completions, line]
27 }
28 }
29 const rl = createInterface({
30 input: process.stdin,
31 output: process.stdout,
32 terminal: true,
33 completer,
34 })
35
36 return new Promise((resolve) =>
37 rl.question(query ?? '', (answer) => {
38 rl.close()
39 resolve(answer)
40 })
41 )
42}