UNPKG

@swell/cli

Version:

Swell's command line interface/utility

88 lines (87 loc) 3.45 kB
import { checkbox } from '@inquirer/prompts'; import { Flags } from '@oclif/core'; import { CreateCollectionCommand } from '../../create-collection-command.js'; import { ConfigType } from '../../lib/apps/index.js'; import { parseFields, parseViews, } from '../../lib/create/content.js'; import { toFileName } from '../../lib/create/index.js'; export default class CreateContent extends CreateCollectionCommand { static description = `This command assists in generating UI model configuration files. CLI will prompt for values when flags are not present.`; static examples = [ { command: 'swell create content', description: 'Create content model interactively.', }, { command: 'swell create content visitors -v list,edit,new', description: 'Specify views delimited by semicolons.', }, { command: 'swell create content visitors -f name:short_text,description:long_text,verified:boolean,visitor_count:integer,photo:image,orders:collection', description: 'Specify fields with types delimited by semicolons', }, { command: 'swell create content visitors -o -f verified:short_text -v list,edit,new -d "Visitor Views"', description: 'Specify fields, views, and description.', }, ]; static flags = { description: Flags.string({ char: 'd', default: '', description: 'content model description', }), fields: Flags.string({ char: 'f', default: '', description: 'list of content model fields delimited by commas', }), label: Flags.string({ char: 'l', default: '', description: 'content model label', }), overwrite: Flags.boolean({ default: false, description: 'overwrite existing content model configuration file', }), views: Flags.string({ char: 'v', default: '', description: 'list of content model views delimited by commas, i.e. list,edit,new', }), }; static summary = 'Initialize a content UI model config file with properties in the content folder.'; createType = ConfigType.CONTENT; async run() { const { flags } = await this.parse(CreateContent); const { collection, description, label } = await this.promptCollection(); const fileName = toFileName(collection); const fileBody = { collection, }; const { fields, overwrite, views } = flags; if (label) { fileBody.label = label; } fileBody.description = description; fileBody.fields = fields ? parseFields(fields.split(',')) : []; if (views) { fileBody.views = views ? parseViews(views.split(',')) : []; } else { const viewsInput = await checkbox({ choices: [ { name: 'List view', value: 'list' }, { name: 'Edit view', value: 'edit' }, { name: 'New view', value: 'new' }, ], message: 'Which views does your content have?', }); fileBody.views = parseViews(viewsInput); } await this.createFile({ fileBody, fileName, }, overwrite); } }