Skip to content
This repository has been archived by the owner on Mar 31, 2021. It is now read-only.

Commit

Permalink
Use commands instead of just options
Browse files Browse the repository at this point in the history
  • Loading branch information
Brandon Pittman committed Oct 18, 2019
1 parent 101c7ce commit 9cb258f
Show file tree
Hide file tree
Showing 7 changed files with 73 additions and 70 deletions.
86 changes: 34 additions & 52 deletions cli.js
@@ -1,80 +1,62 @@
#! /usr/bin/env node

'use strict';

const meow = require('meow');
const pascalcase = require('pascalcase');

const isGridsomeProject = require('./lib/isGridsomeProject');
const override = require('./lib/override');
const createPage = require('./lib/createPage');
const createComponent = require('./lib/createComponent');
const createLayout = require('./lib/createLayout');
const createTemplate = require('./lib/createTemplate');
const deleteReadme = require('./lib/deleteReadme');
const cli = meow(`
const copyTemplate = require('./lib/copyTemplate');
const fresh = require('./lib/fresh');

const cli = meow(`
Usage
$ gridsome-helpers -o html|vue
$ gridsome-helpers
override html|vue Override filetype
scaffold -t TYPE -n NAME Scaffold out a new file
fresh Delete Gridsome boilerplate pages and folder-specific README.md files
Options
--override, -o html|vue Override filetype
--component, -c ComponentName Create component skeleton
--page, -p PageName Create page skeleton
--layout, -l LayoutName Create layout skeleton
--template, -t TemplateName Create template skeleton
--delete-readme Delete Gridsome README.md files inside src directories
--help, -h Show help
Options
--type, -t Page|Template|Layout|Component Filetype to be scaffolded
--name, -n SomeFilename Filename to be used (will be pascal cased by CLI)
--help, -h Show help
`, {
flags: {
help: {
alias: 'h',
type: 'boolean'
},
override: {
type: 'string',
alias: 'o'
},
component: {
type: 'string',
alias: 'c'
},
layout: {
type: 'string',
alias: 'l'
},
page: {
type: {
type: 'string',
alias: 'p'
alias: 't'
},
template: {
name: {
type: 'string',
alias: 't'
alias: 'n'
}
}
});

if (cli.flags.override) {
override(cli);
}

if (cli.flags.page && cli.flags.page.length > 0) {
createPage(pascalcase(cli.flags.page));
}
isGridsomeProject();

if (cli.flags.template && cli.flags.template.length > 0) {
createTemplate(pascalcase(cli.flags.template));
}
const command = cli.input[0];

if (cli.flags.layout && cli.flags.layout.length > 0) {
createLayout(pascalcase(cli.flags.layout));
}
switch (command) {
case 'scaffold':
console.log('scaffold');
copyTemplate(pascalcase(cli.flags.type), pascalcase(cli.flags.name));
break;

if (cli.flags.component && cli.flags.component.length > 0) {
createComponent(pascalcase(cli.flags.component));
}
case 'override':
override(cli.input[1]);
break;

if (cli.flags.deleteReadme) {
deleteReadme();
}
case 'fresh':
fresh();
break;

if (Object.keys(cli.flags).length === 2) {
cli.showHelp();
default:
cli.showHelp();
}
6 changes: 3 additions & 3 deletions lib/createPage.js → lib/copyTemplate.js
Expand Up @@ -2,11 +2,11 @@ const fs = require('fs');
const {log} = require('console');
const chalk = require('chalk');

module.exports = name => {
if (fs.existsSync(`./src/pages/${name}.vue`)) {
module.exports = (type, name) => {
if (fs.existsSync(`./src/${type.toLowerCase()}s/${name}.vue`)) {
log(chalk.red(`${name}.vue already exists!`));
} else {
fs.copyFileSync(`${__dirname}/../templates/Page.vue`, `./src/pages/${name}.vue`);
fs.copyFileSync(`${__dirname}/../templates/${type}.vue`, `./src/${type.toLowerCase()}s/${name}.vue`);
log(chalk.green(`${name}.vue created successfully.`));
}
};
12 changes: 0 additions & 12 deletions lib/deleteReadme.js

This file was deleted.

21 changes: 21 additions & 0 deletions lib/fresh.js
@@ -0,0 +1,21 @@
const del = require('del');
const chalk = require('chalk');
const copyTemplate = require('./copyTemplate');

module.exports = async () => {
const deletedPaths = await del([
'src/{pages,components,layouts,templates}/README.md',
'src/pages/{Index,About}.vue',
'src/layouts/DefaultLayout.vue',
'!./README.md'
]);

if (deletedPaths.length > 0) {
console.log(chalk.green('Deleted files:\n', deletedPaths.join('\n')));
} else {
console.log(chalk.yellow('No files to delete.'));
}

copyTemplate('Layout', 'DefaultLayout');
copyTemplate('Page', 'Index');
};
9 changes: 9 additions & 0 deletions lib/isGridsomeProject.js
@@ -0,0 +1,9 @@
const fs = require('fs');
const chalk = require('chalk');

module.exports = () => {
if (!fs.existsSync('./gridsome.config.js')) {
console.log(chalk.red('Not in root of a Gridsome project!'));
process.exit(126);
}
};
6 changes: 3 additions & 3 deletions lib/override.js
Expand Up @@ -2,20 +2,20 @@ const fs = require('fs');
const chalk = require('chalk');
const {log} = console;

module.exports = cli => {
module.exports = filetype => {
if (!fs.existsSync('./src')) {
log(chalk.blue('Creating src directory'));
fs.mkdirSync('./src');
}

if (cli.flags.override === 'html') {
if (filetype === 'html') {
if (fs.existsSync('./src/index.html')) {
log(chalk.red('index.html already exists!'));
} else {
fs.copyFileSync(`${__dirname}/../templates/index.html`, './src/index.html');
log(chalk.green('index.html created successfully.'));
}
} else if (cli.flags.override === 'vue') {
} else if (filetype === 'vue') {
if (fs.existsSync('./src/App.vue')) {
log(chalk.red('App.vue already exists!'));
} else {
Expand Down
3 changes: 3 additions & 0 deletions lib/scaffold.js
@@ -0,0 +1,3 @@
module.exports = options => {
console.log(options);
};

0 comments on commit 9cb258f

Please sign in to comment.