Skip to content

Commit

Permalink
chore: move to ESM
Browse files Browse the repository at this point in the history
  • Loading branch information
edosrecki committed Nov 4, 2022
1 parent 42f982b commit 436feba
Show file tree
Hide file tree
Showing 29 changed files with 1,619 additions and 1,015 deletions.
2,410 changes: 1,506 additions & 904 deletions package-lock.json

Large diffs are not rendered by default.

23 changes: 12 additions & 11 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
"name": "google-cloud-sql",
"version": "1.7.1",
"description": "Connect to private Google Cloud SQL instance through Cloud SQL Auth Proxy running in GKE cluster.",
"type": "module",
"license": "UNLICENSED",
"author": "Dinko Osrecki <dinko.osrecki@emarsys.com>",
"homepage": "https://github.com/edosrecki/google-cloud-sql-cli",
Expand All @@ -28,36 +29,36 @@
"prettify-package-json": "prettier-package-json --write"
},
"dependencies": {
"boxen": "5.1.2",
"chalk": "4.1.2",
"commander": "8.3.0",
"boxen": "7.0.0",
"chalk": "5.1.2",
"commander": "9.4.1",
"conf": "10.2.0",
"exit-hook": "2.2.1",
"exit-hook": "3.1.2",
"fuse.js": "6.6.2",
"inquirer": "8.2.5",
"inquirer-autocomplete-prompt": "1.4.0",
"inquirer": "9.1.4",
"inquirer-autocomplete-prompt": "3.0.0",
"lodash": "4.17.21",
"memoizee": "0.4.15",
"shelljs": "0.8.5",
"update-notifier": "5.1.0"
"update-notifier": "6.0.2"
},
"devDependencies": {
"@semantic-release/changelog": "6.0.1",
"@semantic-release/exec": "6.0.3",
"@semantic-release/git": "10.0.1",
"@tsconfig/node18": "1.0.1",
"@types/inquirer": "8.2.4",
"@types/inquirer-autocomplete-prompt": "1.3.5",
"@types/inquirer": "9.0.2",
"@types/inquirer-autocomplete-prompt": "3.0.0",
"@types/lodash": "4.14.187",
"@types/memoizee": "0.4.8",
"@types/node": "18.11.9",
"@types/shelljs": "0.8.11",
"@types/update-notifier": "5.1.0",
"@types/update-notifier": "6.0.1",
"@typescript-eslint/eslint-plugin": "5.42.0",
"@typescript-eslint/parser": "5.42.0",
"eslint": "8.26.0",
"eslint-config-prettier": "8.5.0",
"husky": "7.0.4",
"husky": "8.0.1",
"pkg": "5.8.0",
"prettier-package-json": "2.7.0",
"rimraf": "3.0.2",
Expand Down
26 changes: 13 additions & 13 deletions src/commands/configurations/create.ts
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
import { bold, green, red } from 'chalk'
import chalk from 'chalk'
import inquirer from 'inquirer'
import autocomplete from 'inquirer-autocomplete-prompt'
import { saveConfiguration } from '../../lib/configurations'
import { ConfigurationCreateAnswers } from '../../lib/types'
import { configurationNamePrompt } from './prompts/configuration-name'
import { confirmationPrompt } from './prompts/confirmation'
import { googleCloudProjectPrompt } from './prompts/google-cloud-project'
import { googleCloudSqlInstancePrompt } from './prompts/google-cloud-sql-instance'
import { kubernetesContextPrompt } from './prompts/kubernetes-context'
import { kubernetesNamespacePrompt } from './prompts/kubernetes-namespace'
import { kubernetesServiceAccountPrompt } from './prompts/kubernetes-service-account'
import { localPortPrompt } from './prompts/local-port'
import { saveConfiguration } from '../../lib/configurations/index.js'
import { ConfigurationCreateAnswers } from '../../lib/types.js'
import { configurationNamePrompt } from './prompts/configuration-name.js'
import { confirmationPrompt } from './prompts/confirmation.js'
import { googleCloudProjectPrompt } from './prompts/google-cloud-project.js'
import { googleCloudSqlInstancePrompt } from './prompts/google-cloud-sql-instance.js'
import { kubernetesContextPrompt } from './prompts/kubernetes-context.js'
import { kubernetesNamespacePrompt } from './prompts/kubernetes-namespace.js'
import { kubernetesServiceAccountPrompt } from './prompts/kubernetes-service-account.js'
import { localPortPrompt } from './prompts/local-port.js'

export const createConfiguration = async () => {
inquirer.registerPrompt('autocomplete', autocomplete)
Expand All @@ -29,8 +29,8 @@ export const createConfiguration = async () => {
if (answers.confirmation) {
saveConfiguration(answers)

console.log(green(`Saved configuration '${bold(answers.configurationName)}'.`))
console.log(chalk.green(`Saved configuration '${chalk.bold(answers.configurationName)}'.`))
} else {
console.log(red('You are excused.'))
console.log(chalk.red('You are excused.'))
}
}
12 changes: 6 additions & 6 deletions src/commands/configurations/index.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import { Command } from 'commander'
import { logError } from '../../lib/util/error'
import { createConfiguration } from './create'
import { showConfigurationPath } from './path'
import { removeConfiguration } from './remove'
import { runConfiguration, runConfigurationByName } from './run'
import { showConfiguration } from './show'
import { logError } from '../../lib/util/error.js'
import { createConfiguration } from './create.js'
import { showConfigurationPath } from './path.js'
import { removeConfiguration } from './remove.js'
import { runConfiguration, runConfigurationByName } from './run.js'
import { showConfiguration } from './show.js'

export async function addConfigurationsCommands(program: Command) {
const configurations = new Command('configurations')
Expand Down
6 changes: 3 additions & 3 deletions src/commands/configurations/path.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { bold } from 'chalk'
import { configurationPath } from '../../lib/configurations'
import chalk from 'chalk'
import { configurationPath } from '../../lib/configurations/index.js'

export const showConfigurationPath = () => {
console.log(bold(configurationPath))
console.log(chalk.bold(configurationPath))
}
8 changes: 4 additions & 4 deletions src/commands/configurations/prompts/configuration.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { getConfigurations } from '../../../lib/configurations'
import { Configuration, ConfigurationChooseAnswers } from '../../../lib/types'
import { searchByKey } from '../../../lib/util/search'
import { tryCatch } from '../../../lib/util/error'
import { getConfigurations } from '../../../lib/configurations/index.js'
import { Configuration, ConfigurationChooseAnswers } from '../../../lib/types.js'
import { searchByKey } from '../../../lib/util/search.js'
import { tryCatch } from '../../../lib/util/error.js'

const formatConfiguration = (configuration: Configuration) => {
return {
Expand Down
8 changes: 4 additions & 4 deletions src/commands/configurations/prompts/google-cloud-project.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { fetchGoogleCloudProjects } from '../../../lib/gcloud/projects'
import { ConfigurationCreateAnswers } from '../../../lib/types'
import { tryCatch } from '../../../lib/util/error'
import { search } from '../../../lib/util/search'
import { fetchGoogleCloudProjects } from '../../../lib/gcloud/projects.js'
import { ConfigurationCreateAnswers } from '../../../lib/types.js'
import { tryCatch } from '../../../lib/util/error.js'
import { search } from '../../../lib/util/search.js'

const source = tryCatch((answers: ConfigurationCreateAnswers, input?: string) => {
const projects = fetchGoogleCloudProjects()
Expand Down
12 changes: 6 additions & 6 deletions src/commands/configurations/prompts/google-cloud-sql-instance.ts
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
import { pick } from 'lodash'
import _ from 'lodash'
import {
fetchGoogleCloudSqlInstances,
GoogleCloudSqlInstance,
} from '../../../lib/gcloud/sql-instances'
import { ConfigurationCreateAnswers } from '../../../lib/types'
import { searchByKey } from '../../../lib/util/search'
import { tryCatch } from '../../../lib/util/error'
} from '../../../lib/gcloud/sql-instances.js'
import { ConfigurationCreateAnswers } from '../../../lib/types.js'
import { searchByKey } from '../../../lib/util/search.js'
import { tryCatch } from '../../../lib/util/error.js'

const formatInstance = (instance: GoogleCloudSqlInstance) => {
const { name, region } = instance
return {
name: `${name} (${region})`,
short: name,
value: pick(instance, 'connectionName', 'port'),
value: _.pick(instance, 'connectionName', 'port'),
}
}

Expand Down
8 changes: 4 additions & 4 deletions src/commands/configurations/prompts/kubernetes-context.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { fetchKubernetesContexts } from '../../../lib/kubectl/contexts'
import { ConfigurationCreateAnswers } from '../../../lib/types'
import { search } from '../../../lib/util/search'
import { tryCatch } from '../../../lib/util/error'
import { fetchKubernetesContexts } from '../../../lib/kubectl/contexts.js'
import { ConfigurationCreateAnswers } from '../../../lib/types.js'
import { search } from '../../../lib/util/search.js'
import { tryCatch } from '../../../lib/util/error.js'

const source = tryCatch((answers: ConfigurationCreateAnswers, input?: string) => {
const instances = fetchKubernetesContexts()
Expand Down
8 changes: 4 additions & 4 deletions src/commands/configurations/prompts/kubernetes-namespace.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { fetchKubernetesNamespaces } from '../../../lib/kubectl/namespaces'
import { ConfigurationCreateAnswers } from '../../../lib/types'
import { search } from '../../../lib/util/search'
import { tryCatch } from '../../../lib/util/error'
import { fetchKubernetesNamespaces } from '../../../lib/kubectl/namespaces.js'
import { ConfigurationCreateAnswers } from '../../../lib/types.js'
import { search } from '../../../lib/util/search.js'
import { tryCatch } from '../../../lib/util/error.js'

const source = tryCatch((answers: ConfigurationCreateAnswers, input?: string) => {
const instances = fetchKubernetesNamespaces(answers.kubernetesContext)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { fetchKubernetesServiceAccounts } from '../../../lib/kubectl/service-accounts'
import { ConfigurationCreateAnswers } from '../../../lib/types'
import { search } from '../../../lib/util/search'
import { tryCatch } from '../../../lib/util/error'
import { fetchKubernetesServiceAccounts } from '../../../lib/kubectl/service-accounts.js'
import { ConfigurationCreateAnswers } from '../../../lib/types.js'
import { search } from '../../../lib/util/search.js'
import { tryCatch } from '../../../lib/util/error.js'

const source = tryCatch((answers: ConfigurationCreateAnswers, input?: string) => {
const instances = fetchKubernetesServiceAccounts(
Expand Down
14 changes: 7 additions & 7 deletions src/commands/configurations/remove.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import { green, red, bold } from 'chalk'
import chalk from 'chalk'
import inquirer from 'inquirer'
import autocomplete from 'inquirer-autocomplete-prompt'
import { deleteConfiguration } from '../../lib/configurations'
import { ConfigurationChooseAnswers } from '../../lib/types'
import { configurationPrompt } from './prompts/configuration'
import { confirmationPrompt } from './prompts/confirmation'
import { deleteConfiguration } from '../../lib/configurations/index.js'
import { ConfigurationChooseAnswers } from '../../lib/types.js'
import { configurationPrompt } from './prompts/configuration.js'
import { confirmationPrompt } from './prompts/confirmation.js'

export const removeConfiguration = async () => {
inquirer.registerPrompt('autocomplete', autocomplete)
Expand All @@ -19,9 +19,9 @@ export const removeConfiguration = async () => {
deleteConfiguration(configuration.configurationName)

console.log(
green(`Deleted configuration '${bold(configuration.configurationName)}'.`)
chalk.green(`Deleted configuration '${chalk.bold(configuration.configurationName)}'.`)
)
} else {
console.log(red('You are excused.'))
console.log(chalk.red('You are excused.'))
}
}
12 changes: 6 additions & 6 deletions src/commands/configurations/run.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import { red } from 'chalk'
import chalk from 'chalk'
import inquirer from 'inquirer'
import autocomplete from 'inquirer-autocomplete-prompt'
import { execConfiguration, getConfiguration } from '../../lib/configurations'
import { ConfigurationChooseAnswers } from '../../lib/types'
import { configurationPrompt } from './prompts/configuration'
import { confirmationPrompt } from './prompts/confirmation'
import { execConfiguration, getConfiguration } from '../../lib/configurations/index.js'
import { ConfigurationChooseAnswers } from '../../lib/types.js'
import { configurationPrompt } from './prompts/configuration.js'
import { confirmationPrompt } from './prompts/confirmation.js'

export const runConfiguration = async () => {
inquirer.registerPrompt('autocomplete', autocomplete)
Expand All @@ -18,7 +18,7 @@ export const runConfiguration = async () => {
if (confirmation) {
execConfiguration(configuration)
} else {
console.log(red('You are excused.'))
console.log(chalk.red('You are excused.'))
}
}

Expand Down
4 changes: 2 additions & 2 deletions src/commands/configurations/show.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import inquirer from 'inquirer'
import autocomplete from 'inquirer-autocomplete-prompt'
import { ConfigurationChooseAnswers } from '../../lib/types'
import { configurationPrompt } from './prompts/configuration'
import { ConfigurationChooseAnswers } from '../../lib/types.js'
import { configurationPrompt } from './prompts/configuration.js'

export const showConfiguration = async () => {
inquirer.registerPrompt('autocomplete', autocomplete)
Expand Down
6 changes: 3 additions & 3 deletions src/index.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
#!/usr/bin/env node

import { Command } from 'commander'
import { addConfigurationsCommands } from './commands/configurations'
import { notifyForUpdates } from './lib/updates'
import { version } from './lib/version'
import { addConfigurationsCommands } from './commands/configurations/index.js'
import { notifyForUpdates } from './lib/updates.js'
import { version } from './lib/version.js'

async function main() {
notifyForUpdates()
Expand Down
14 changes: 7 additions & 7 deletions src/lib/configurations/index.ts
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
import exitHook from 'exit-hook'
import { omit } from 'lodash'
import _ from 'lodash'
import {
deletePod,
portForward,
runCloudSqlProxyPod,
waitForPodReady,
} from '../kubectl/pods'
import { Configuration, ConfigurationCreateAnswers } from '../types'
import { appendOrReplaceByKey, deleteByKey, findByKey } from '../util/array'
import { randomString } from '../util/string'
import { store } from './store'
} from '../kubectl/pods.js'
import { Configuration, ConfigurationCreateAnswers } from '../types.js'
import { appendOrReplaceByKey, deleteByKey, findByKey } from '../util/array.js'
import { randomString } from '../util/string.js'
import { store } from './store.js'

const storeKey = 'configurations' as const
const searchKey = 'configurationName' as const
Expand All @@ -25,7 +25,7 @@ export const getConfiguration = (name: string): Configuration | undefined => {
}

export const saveConfiguration = (answers: ConfigurationCreateAnswers): void => {
const configuration = omit(answers, excludeProperties)
const configuration = _.omit(answers, excludeProperties)

const configurations = store.get(storeKey)
appendOrReplaceByKey(configurations, configuration, searchKey)
Expand Down
2 changes: 1 addition & 1 deletion src/lib/configurations/store.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import Conf from 'conf'
import { Configuration } from '../types'
import { Configuration } from '../types.js'

type Schema = {
configurations: Configuration[]
Expand Down
2 changes: 1 addition & 1 deletion src/lib/gcloud/projects.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import memoize from 'memoizee'
import { execCommandMultiline } from '../util/exec'
import { execCommandMultiline } from '../util/exec.js'

export const fetchGoogleCloudProjects = memoize((): string[] => {
return execCommandMultiline(`
Expand Down
2 changes: 1 addition & 1 deletion src/lib/gcloud/sql-instances.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import memoize from 'memoizee'
import { execCommandMultiline } from '../util/exec'
import { execCommandMultiline } from '../util/exec.js'

export type GoogleCloudSqlInstance = {
name: string
Expand Down
2 changes: 1 addition & 1 deletion src/lib/kubectl/contexts.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import memoize from 'memoizee'
import { execCommand, execCommandMultiline } from '../util/exec'
import { execCommand, execCommandMultiline } from '../util/exec.js'

export const fetchKubernetesCurrentContext = (): string => {
return execCommand(`kubectl config current-context`)
Expand Down
2 changes: 1 addition & 1 deletion src/lib/kubectl/namespaces.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import memoize from 'memoizee'
import { execCommandMultiline } from '../util/exec'
import { execCommandMultiline } from '../util/exec.js'

export const fetchKubernetesNamespaces = memoize((context: string): string[] => {
return execCommandMultiline(`
Expand Down
14 changes: 7 additions & 7 deletions src/lib/kubectl/pods.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { bold, cyan } from 'chalk'
import { execCommand, execCommandAttached } from '../util/exec'
import chalk from 'chalk'
import { execCommand, execCommandAttached } from '../util/exec.js'

type CloudSqlProxyPod = {
name: string
Expand All @@ -26,28 +26,28 @@ export const runCloudSqlProxyPod = (pod: CloudSqlProxyPod): string => {
}

export const deletePod = (pod: CloudSqlProxyPod) => {
console.log(`Deleting pod '${bold(cyan(pod.name))}'.`)
console.log(`Deleting pod '${chalk.bold.cyan(pod.name)}'.`)
execCommand(`
kubectl delete pod ${pod.name} \
--context="${pod.context}" \
--namespace="${pod.namespace}"
`)
console.log(`Pod '${bold(cyan(pod.name))}' deleted.`)
console.log(`Pod '${chalk.cyan(pod.name)}' deleted.`)
}

export const waitForPodReady = (pod: CloudSqlProxyPod) => {
console.log(`Waiting for pod '${bold(cyan(pod.name))}'.`)
console.log(`Waiting for pod '${chalk.bold.cyan(pod.name)}'.`)
execCommand(`
kubectl wait pod ${pod.name} \
--for=condition=ready \
--context="${pod.context}" \
--namespace="${pod.namespace}"
`)
console.log(`Pod '${bold(cyan(pod.name))}' is ready.`)
console.log(`Pod '${chalk.bold.cyan(pod.name)}' is ready.`)
}

export const portForward = (pod: CloudSqlProxyPod) => {
console.log(`Starting port forwarding to pod '${bold(cyan(pod.name))}'.`)
console.log(`Starting port forwarding to pod '${chalk.bold.cyan(pod.name)}'.`)
execCommandAttached(`
kubectl port-forward ${pod.name} ${pod.localPort}:${pod.remotePort} \
--context="${pod.context}" \
Expand Down
2 changes: 1 addition & 1 deletion src/lib/kubectl/service-accounts.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import memoize from 'memoizee'
import { execCommandMultiline } from '../util/exec'
import { execCommandMultiline } from '../util/exec.js'

export const fetchKubernetesServiceAccounts = memoize(
(context: string, namespace: string): string[] => {
Expand Down
Loading

0 comments on commit 436feba

Please sign in to comment.