@keyshade/cli
Version:
76 lines (65 loc) • 1.75 kB
text/typescript
import BaseCommand from '@/commands/base.command'
import {
type CommandActionData,
type CommandOption
} from '@/types/command/command.types'
import ControllerInstance from '@/util/controller-instance'
import { Logger } from '@/util/logger'
import { text } from '@clack/prompts'
export default class CreateWorkspace extends BaseCommand {
getName(): string {
return 'create'
}
getDescription(): string {
return 'Creates a new workspace'
}
getOptions(): CommandOption[] {
return [
{
short: '-n',
long: '--name <Workspace Name>',
description: 'Name of the workspace.'
},
{
short: '-i',
long: '--icon <Workspace Icon>',
description: 'Icon of the workspace.'
}
]
}
canMakeHttpRequests(): boolean {
return true
}
async action({ options }: CommandActionData): Promise<void> {
const { name, icon } = await this.parseInput(options)
const { data, error, success } =
await ControllerInstance.getInstance().workspaceController.createWorkspace(
{
name,
icon
},
this.headers
)
if (success) {
Logger.info(`Workspace ${data.name} (${data.slug}) created successfully!`)
Logger.info(`Created at ${data.createdAt}`)
Logger.info(`Updated at ${data.updatedAt}`)
} else {
this.logError(error)
}
}
private async parseInput(options: CommandActionData['options']): Promise<{
name: string
icon?: string
}> {
let { name } = options
const { icon } = options
if (!name) {
name = await text({
message: 'Enter the name of the Workspace',
placeholder: 'My Workspace'
})
}
return { name, icon }
}
}