Skip to content

Commit 145dfbf

Browse files
committed
chore(deps): update to the latest inquirer
1 parent c5071af commit 145dfbf

26 files changed

+456
-464
lines changed

package.json

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,8 @@
4444
"commander": "14.0.3",
4545
"conf": "15.1.0",
4646
"exit-hook": "5.1.0",
47+
"@inquirer/prompts": "^7.0.0",
4748
"fuse.js": "7.1.0",
48-
"inquirer": "9.3.8",
49-
"inquirer-autocomplete-prompt": "3.0.1",
5049
"lodash-es": "4.17.23",
5150
"memoizee": "0.4.17",
5251
"shelljs": "0.10.0",
@@ -59,8 +58,6 @@
5958
"@semantic-release/git": "10.0.1",
6059
"@stylistic/eslint-plugin": "5.8.0",
6160
"@tsconfig/node24": "24.0.4",
62-
"@types/inquirer": "^9.0.9",
63-
"@types/inquirer-autocomplete-prompt": "3.0.3",
6461
"@types/lodash-es": "4.17.12",
6562
"@types/memoizee": "0.4.12",
6663
"@types/node": "24.10.6",

pnpm-lock.yaml

Lines changed: 246 additions & 209 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/commands/configurations/create.ts

Lines changed: 36 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,46 @@
11
import chalk from 'chalk'
2-
import inquirer from 'inquirer'
3-
import autocomplete from 'inquirer-autocomplete-prompt'
42
import { saveConfiguration } from '../../lib/configurations/index.js'
5-
import { ConfigurationCreateAnswers } from '../../lib/types.js'
6-
import { googleAlloyDbInstancePrompt } from './prompts/google-alloydb-instance.js'
7-
import { configurationNamePrompt } from './prompts/configuration-name.js'
8-
import { confirmationPrompt } from './prompts/confirmation.js'
9-
import { databaseTypePrompt } from './prompts/database-type.js'
10-
import { googleCloudProjectPrompt } from './prompts/google-cloud-project.js'
11-
import { googleCloudSqlInstancePrompt } from './prompts/google-cloud-sql-instance.js'
12-
import { kubernetesContextPrompt } from './prompts/kubernetes-context.js'
13-
import { kubernetesNamespacePrompt } from './prompts/kubernetes-namespace.js'
14-
import { kubernetesServiceAccountPrompt } from './prompts/kubernetes-service-account.js'
15-
import { localPortPrompt } from './prompts/local-port.js'
3+
import { promptGoogleAlloyDbInstance } from './prompts/google-alloydb-instance.js'
4+
import { promptConfigurationName } from './prompts/configuration-name.js'
5+
import { promptConfirmation } from './prompts/confirmation.js'
6+
import { promptDatabaseType } from './prompts/database-type.js'
7+
import { promptGoogleCloudProject } from './prompts/google-cloud-project.js'
8+
import { promptGoogleCloudSqlInstance } from './prompts/google-cloud-sql-instance.js'
9+
import { promptKubernetesContext } from './prompts/kubernetes-context.js'
10+
import { promptKubernetesNamespace } from './prompts/kubernetes-namespace.js'
11+
import { promptKubernetesServiceAccount } from './prompts/kubernetes-service-account.js'
12+
import { promptLocalPort } from './prompts/local-port.js'
1613

1714
export const createConfiguration = async () => {
18-
inquirer.registerPrompt('autocomplete', autocomplete)
15+
const googleCloudProject = await promptGoogleCloudProject()
16+
const databaseType = await promptDatabaseType()
1917

20-
const answers = await inquirer.prompt<ConfigurationCreateAnswers>([
21-
googleCloudProjectPrompt,
22-
databaseTypePrompt,
23-
googleCloudSqlInstancePrompt,
24-
googleAlloyDbInstancePrompt,
25-
kubernetesContextPrompt,
26-
kubernetesNamespacePrompt,
27-
kubernetesServiceAccountPrompt,
28-
localPortPrompt,
29-
configurationNamePrompt,
30-
confirmationPrompt,
31-
])
18+
const databaseInstance = databaseType === 'cloudsql'
19+
? await promptGoogleCloudSqlInstance(googleCloudProject)
20+
: await promptGoogleAlloyDbInstance(googleCloudProject)
3221

33-
if (answers.confirmation) {
34-
saveConfiguration(answers)
22+
const kubernetesContext = await promptKubernetesContext()
23+
const kubernetesNamespace = await promptKubernetesNamespace(kubernetesContext)
24+
const kubernetesServiceAccount = await promptKubernetesServiceAccount(
25+
kubernetesContext,
26+
kubernetesNamespace,
27+
)
28+
const localPort = await promptLocalPort()
29+
const configurationName = await promptConfigurationName()
30+
const confirmation = await promptConfirmation()
3531

36-
console.log(chalk.green(`Saved configuration '${chalk.bold(answers.configurationName)}'.`))
32+
if (confirmation) {
33+
saveConfiguration({
34+
configurationName,
35+
databaseType,
36+
databaseInstance,
37+
kubernetesContext,
38+
kubernetesNamespace,
39+
kubernetesServiceAccount,
40+
localPort: localPort ?? 5432,
41+
})
42+
43+
console.log(chalk.green(`Saved configuration '${chalk.bold(configurationName)}'.`))
3744
}
3845
else {
3946
console.log(chalk.red('You are excused.'))
Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
export const configurationNamePrompt = {
2-
type: 'input',
3-
name: 'configurationName',
4-
message: 'Enter configuration name:',
5-
}
1+
import { input } from '@inquirer/prompts'
2+
3+
export const promptConfigurationName = (): Promise<string> =>
4+
input({ message: 'Enter configuration name:' })
Lines changed: 15 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,20 @@
1+
import { search } from '@inquirer/prompts'
12
import { getConfigurations } from '../../../lib/configurations/index.js'
2-
import { Configuration, ConfigurationChooseAnswers } from '../../../lib/types.js'
3+
import { Configuration } from '../../../lib/types.js'
34
import { searchByKey } from '../../../lib/util/search.js'
4-
import { tryCatch } from '../../../lib/util/error.js'
55

6-
const formatConfiguration = (configuration: Configuration) => {
7-
return {
8-
name: configuration.configurationName,
9-
short: configuration.configurationName,
10-
value: configuration,
11-
}
12-
}
13-
14-
const source = tryCatch((answers: ConfigurationChooseAnswers, input?: string) => {
15-
const configurations = getConfigurations()
16-
const filtered = searchByKey(configurations, 'configurationName', input)
17-
18-
return filtered.map(formatConfiguration)
6+
const formatConfiguration = (configuration: Configuration) => ({
7+
name: configuration.configurationName,
8+
short: configuration.configurationName,
9+
value: configuration,
1910
})
2011

21-
export const configurationPrompt = {
22-
type: 'autocomplete',
23-
name: 'configuration',
24-
message: 'Choose configuration:',
25-
source,
26-
}
12+
export const promptConfiguration = (): Promise<Configuration> =>
13+
search({
14+
message: 'Choose configuration:',
15+
source: async (term) => {
16+
const configurations = getConfigurations()
17+
const filtered = searchByKey(configurations, 'configurationName', term)
18+
return filtered.map(formatConfiguration)
19+
},
20+
})
Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
export const confirmationPrompt = {
2-
type: 'confirm',
3-
name: 'confirmation',
4-
message: 'Do you want to proceed?',
5-
}
1+
import { confirm } from '@inquirer/prompts'
2+
3+
export const promptConfirmation = (): Promise<boolean> =>
4+
confirm({ message: 'Do you want to proceed?' })
Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
1-
export const databaseTypePrompt = {
2-
type: 'list',
3-
name: 'databaseType',
4-
message: 'Choose database type:',
5-
choices: [
6-
{ name: 'Cloud SQL', value: 'cloudsql' },
7-
{ name: 'AlloyDB', value: 'alloydb' },
8-
],
9-
}
1+
import { select } from '@inquirer/prompts'
2+
import { DatabaseType } from '../../../lib/types.js'
3+
4+
export const promptDatabaseType = (): Promise<DatabaseType> =>
5+
select({
6+
message: 'Choose database type:',
7+
choices: [
8+
{ name: 'Cloud SQL', value: 'cloudsql' as const },
9+
{ name: 'AlloyDB', value: 'alloydb' as const },
10+
],
11+
})
Lines changed: 15 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,24 @@
1+
import { search } from '@inquirer/prompts'
12
import { pick } from 'lodash-es'
23
import {
34
fetchGoogleAlloyDbInstances,
45
GoogleAlloyDbInstance,
56
} from '../../../lib/gcloud/alloydb-instances.js'
6-
import { ConfigurationCreateAnswers } from '../../../lib/types.js'
7+
import { DatabaseInstance } from '../../../lib/types.js'
78
import { searchByKey } from '../../../lib/util/search.js'
8-
import { tryCatch } from '../../../lib/util/error.js'
99

10-
const formatInstance = (instance: GoogleAlloyDbInstance) => {
11-
const { name, region, cluster } = instance
12-
return {
13-
name: `${name} (cluster: ${cluster}, region: ${region})`,
14-
short: name,
15-
value: pick(instance, 'connectionName', 'port'),
16-
}
17-
}
18-
19-
const source = tryCatch((answers: ConfigurationCreateAnswers, input?: string) => {
20-
const instances = fetchGoogleAlloyDbInstances(answers.googleCloudProject)
21-
const filtered = searchByKey(instances, 'connectionName', input)
22-
23-
return filtered.map(formatInstance)
10+
const formatInstance = (instance: GoogleAlloyDbInstance) => ({
11+
name: `${instance.name} (cluster: ${instance.cluster}, region: ${instance.region})`,
12+
short: instance.name,
13+
value: pick(instance, 'connectionName', 'port') as DatabaseInstance,
2414
})
2515

26-
export const googleAlloyDbInstancePrompt = {
27-
type: 'autocomplete',
28-
name: 'databaseInstance',
29-
message: 'Choose Google AlloyDB instance:',
30-
source,
31-
when: (answers: ConfigurationCreateAnswers) => answers.databaseType === 'alloydb',
32-
}
16+
export const promptGoogleAlloyDbInstance = (googleCloudProject: string): Promise<DatabaseInstance> =>
17+
search({
18+
message: 'Choose Google AlloyDB instance:',
19+
source: async (term) => {
20+
const instances = await fetchGoogleAlloyDbInstances(googleCloudProject)
21+
const filtered = searchByKey(instances, 'connectionName', term)
22+
return filtered.map(formatInstance)
23+
},
24+
})
Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,12 @@
1+
import { search } from '@inquirer/prompts'
12
import { fetchGoogleCloudProjects } from '../../../lib/gcloud/projects.js'
2-
import { ConfigurationCreateAnswers } from '../../../lib/types.js'
3-
import { tryCatch } from '../../../lib/util/error.js'
4-
import { search } from '../../../lib/util/search.js'
3+
import { search as fuzzySearch } from '../../../lib/util/search.js'
54

6-
const source = tryCatch((answers: ConfigurationCreateAnswers, input?: string) => {
7-
const projects = fetchGoogleCloudProjects()
8-
return search(projects, input)
9-
})
10-
11-
export const googleCloudProjectPrompt = {
12-
type: 'autocomplete',
13-
name: 'googleCloudProject',
14-
message: 'Choose Google Cloud project:',
15-
source,
16-
}
5+
export const promptGoogleCloudProject = (): Promise<string> =>
6+
search({
7+
message: 'Choose Google Cloud project:',
8+
source: async (term) => {
9+
const projects = await fetchGoogleCloudProjects()
10+
return fuzzySearch(projects, term)
11+
},
12+
})
Lines changed: 15 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,24 @@
1+
import { search } from '@inquirer/prompts'
12
import { pick } from 'lodash-es'
23
import {
34
fetchGoogleCloudSqlInstances,
45
GoogleCloudSqlInstance,
56
} from '../../../lib/gcloud/sql-instances.js'
6-
import { ConfigurationCreateAnswers } from '../../../lib/types.js'
7+
import { DatabaseInstance } from '../../../lib/types.js'
78
import { searchByKey } from '../../../lib/util/search.js'
8-
import { tryCatch } from '../../../lib/util/error.js'
99

10-
const formatInstance = (instance: GoogleCloudSqlInstance) => {
11-
const { name, region } = instance
12-
return {
13-
name: `${name} (${region})`,
14-
short: name,
15-
value: pick(instance, 'connectionName', 'port'),
16-
}
17-
}
18-
19-
const source = tryCatch((answers: ConfigurationCreateAnswers, input?: string) => {
20-
const instances = fetchGoogleCloudSqlInstances(answers.googleCloudProject)
21-
const filtered = searchByKey(instances, 'connectionName', input)
22-
23-
return filtered.map(formatInstance)
10+
const formatInstance = (instance: GoogleCloudSqlInstance) => ({
11+
name: `${instance.name} (${instance.region})`,
12+
short: instance.name,
13+
value: pick(instance, 'connectionName', 'port') as DatabaseInstance,
2414
})
2515

26-
export const googleCloudSqlInstancePrompt = {
27-
type: 'autocomplete',
28-
name: 'databaseInstance',
29-
message: 'Choose Google Cloud SQL instance:',
30-
source,
31-
when: (answers: ConfigurationCreateAnswers) => answers.databaseType === 'cloudsql',
32-
}
16+
export const promptGoogleCloudSqlInstance = (googleCloudProject: string): Promise<DatabaseInstance> =>
17+
search({
18+
message: 'Choose Google Cloud SQL instance:',
19+
source: async (term) => {
20+
const instances = await fetchGoogleCloudSqlInstances(googleCloudProject)
21+
const filtered = searchByKey(instances, 'connectionName', term)
22+
return filtered.map(formatInstance)
23+
},
24+
})

0 commit comments

Comments
 (0)