@swell/cli
Version:
Swell's command line interface/utility
88 lines (87 loc) • 3.45 kB
JavaScript
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);
}
}