-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
22 changed files
with
602 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,94 @@ | ||
const mkdirp = require('mkdirp'); | ||
const shell = require('shelljs'); | ||
const fs = require('fs'); | ||
const arguements = require('minimist') | ||
|
||
let appDirectory = `${process.cwd()}` | ||
|
||
const mainContentBindings = require('./code-snippets/fileKeyBindings'); | ||
const createFileWithContent = require('./helperFunctions/createFileAndAddContent'); | ||
const getFileAndUpdateContent = require('./helperFunctions/getFileAndUpdateContent'); | ||
const createControllerAndService = require('./helperFunctions/createControllerAndService'); | ||
const styling = require('./code-snippets/styling') | ||
const viewComponent = require('./code-snippets/view') | ||
|
||
const cdIntoApp = () => { | ||
return new Promise(resolve => { | ||
shell.cd(appDirectory) | ||
resolve() | ||
}) | ||
} | ||
|
||
const attachStartScript = (folderDirectory) => { | ||
let packageFile = `${folderDirectory}/package.json` | ||
try { | ||
if (fs.existsSync(packageFile)) { | ||
fs.readFile(packageFile, 'utf8', (err, oldContent) => { | ||
let newContent = oldContent.replace(/"scripts": {/g, `"scripts": {\n "start": "nodemon --exec babel-node app.js",`); | ||
fs.writeFile(packageFile, newContent, (err) => { | ||
if (err) throw err; | ||
}) | ||
}) | ||
} | ||
} catch (err) { | ||
console.log('package error add start: "nodemon --exec babel-node app.js" manually') | ||
} | ||
} | ||
|
||
const installPackages = (folderName, callback) => { | ||
return new Promise(resolve => { | ||
console.log("\nInstalling express, babel to provide es7 context\n") | ||
shell.exec(`npm init -y && npm install express && npm install -D nodemon @babel/core @babel/cli @babel/preset-env @babel/node`, () => { | ||
attachStartScript(folderName) | ||
console.log("\nFinished installing packages\n") | ||
console.log(`cd into ${folderName} and use futher commands like | ||
1) --resource=phone to further orchestrate controller and service file with mapping of route.js`) | ||
resolve() | ||
callback() | ||
}) | ||
}) | ||
} | ||
|
||
const defaultRun = () => { | ||
return new Promise(resolve => { | ||
let promises = [] | ||
createFileWithContent.createFileWithContent(`${appDirectory}/app.js`, require('./code-snippets/app')); | ||
|
||
Object.keys(mainContentBindings).forEach((fileName, i) => { | ||
promises[i] = new Promise(res => { | ||
createFileWithContent.createFileWithContent(`${appDirectory}/src/${fileName}`, mainContentBindings[fileName], err => { | ||
if (err) { return console.log(err) } | ||
res() | ||
}); | ||
}) | ||
}) | ||
Promise.all(promises).then(() => { resolve() }) | ||
}) | ||
} | ||
|
||
const addRoute = (resource) => { | ||
getFileAndUpdateContent.updateRouteText(`${appDirectory}/src/routes/index.js`, resource) | ||
.then(() => createControllerAndService.createControllerAndService(`${appDirectory}/src`, resource)) | ||
.catch((err) => console.log(err)); | ||
} | ||
|
||
let arguement = arguements(process.argv.slice(2)); | ||
|
||
if (arguement.hasOwnProperty('resource')) { | ||
addRoute(resource) | ||
} | ||
else { | ||
let folderName = arguement._[0]; | ||
appDirectory += `/${folderName}` | ||
mkdirp(appDirectory); | ||
cdIntoApp() | ||
installPackages(appDirectory, () => shell.exec('npm i')) | ||
createFileWithContent.createFileWithContent(`${appDirectory}/.babelrc`, '{ "presets": ["@babel/preset-env"] }') | ||
defaultRun() | ||
if (arguement.hasOwnProperty('style')) { | ||
styling.addStylingToProject(arguement.style, appDirectory) | ||
} | ||
if (arguement.hasOwnProperty('view')) { | ||
viewComponent.addViewToProject(arguement.view, appDirectory) | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
module.exports = `import express from 'express'; | ||
import path from 'path'; | ||
import routes from './src/routes'; | ||
const PORT = process.env.PORT || 3000; | ||
const app = express() | ||
//Connecting static components | ||
app.set('views', __dirname + '/views'); | ||
app.use(express.static(__dirname + '/views')); | ||
// Connect all our routes to our application | ||
app.use('/', routes); | ||
// Turn on that server! | ||
app.listen(PORT, () => { | ||
console.log(\`App listening on port \${PORT}\`); | ||
}); | ||
` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
module.exports = (resource, pluralResource) => `import {Router} from 'express'; | ||
import ${resource}Service from '../service/${resource}Service'; | ||
const ${pluralResource} = Router(); | ||
${pluralResource}.get('/', ${resource}Service.all); | ||
${pluralResource}.get('/:${resource}Id', ${resource}Service.single); | ||
module.exports = ${pluralResource};` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
const pluralize = require('pluralize') | ||
|
||
module.exports = { | ||
'routes/index.js': require('./route.js'), | ||
'controller/userController.js': require('./controllerSchema')('user', pluralize('user')), | ||
'controller/addressController.js': require('./controllerSchema')('address', pluralize('address')), | ||
'service/userService.js': require('./serviceSchema')('user'), | ||
'service/addressService.js': require('./serviceSchema')('address') | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
module.exports = `import {Router} from 'express'; | ||
const routes = Router() | ||
routes.get('/', (req, res) => { | ||
res.status(200).json({ message: 'Connected!' }); | ||
}); | ||
import users from '../controller/userController'; | ||
routes.use('/users', users); | ||
import addresses from '../controller/addressController'; | ||
routes.use('/addresses', addresses); | ||
module.exports = routes; | ||
` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
module.exports = (resource) => `module.exports = { | ||
single: (req, res) => { | ||
const ${resource} = req.${resource}Id; | ||
res.status(200).json({ ${resource} }); | ||
}, | ||
all: (req, res) => { | ||
res.status(200).json([{ ${resource}: "New York" },{ ${resource}: "Chicago" }]); | ||
} | ||
};` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,67 @@ | ||
const shell = require('shelljs') | ||
const fs = require('fs') | ||
const mkdirp = require('mkdirp') | ||
const createFileAndAddContent = require('../helperFunctions/createFileAndAddContent') | ||
const fetchFile = require('../helperFunctions/fetchContent') | ||
|
||
module.exports.addStylingToProject = (styleName, directory) => { | ||
const supportedStyles = ['css', 'sass', 'scss', 'less']; | ||
|
||
if (!supportedStyles.includes(styleName)) { | ||
console.log('Requested Style not supported choose between css|sass|scss'); | ||
exit() | ||
} | ||
|
||
mkdirp(directory + '/views/css'); | ||
switch (styleName) { | ||
case 'sass': | ||
fetchFile.fetchContent('/template/style.sass').then((data) => | ||
createFileAndAddContent.createFileWithContent(`${directory}/views/sass/style.sass`, data)) | ||
shell.exec('npm i node-sass-middleware', () => { | ||
let packageFile = `${directory}/app.js` | ||
if (fs.existsSync(packageFile)) { | ||
fs.readFile(packageFile, 'utf8', (err, oldContent) => { | ||
let newContent = oldContent.replace(/(.*)express\(\)/g, `const app = express();\nimport scssMiddleware from 'node-sass-middleware';\n\napp.use(scssMiddleware({\n src: __dirname + '/views/sass',\n dest: __dirname + '/views/css',\n debug: true,\n outputStyle: 'compressed',\n prefix: '/css'}));`); | ||
fs.writeFile(packageFile, newContent, (err) => { | ||
if (err) throw err; | ||
}) | ||
}) | ||
} | ||
}) | ||
break; | ||
case 'scss': | ||
fetchFile.fetchContent('/template/style.scss').then((data) => | ||
createFileAndAddContent.createFileWithContent(`${directory}/views/scss/style.scss`, data)) | ||
shell.exec('npm i node-sass-middleware', () => { | ||
let packageFile = `${directory}/app.js` | ||
if (fs.existsSync(packageFile)) { | ||
fs.readFile(packageFile, 'utf8', (err, oldContent) => { | ||
let newContent = oldContent.replace(/(.*)express\(\)/g, `const app = express();\nimport scssMiddleware from 'node-sass-middleware';\n\napp.use(scssMiddleware({\n src: __dirname + '/views/scss',\n dest: __dirname + '/views/css',\n debug: true,\n outputStyle: 'compressed',\n prefix: '/css'}));`); | ||
fs.writeFile(packageFile, newContent, (err) => { | ||
if (err) throw err; | ||
}) | ||
}) | ||
} | ||
}) | ||
break; | ||
case 'less': | ||
fetchFile.fetchContent('/template/style.less').then((data) => | ||
createFileAndAddContent.createFileWithContent(`${directory}/views/less/style.less`, data)) | ||
shell.exec('npm i less-middleware', () => { | ||
let packageFile = `${directory}/app.js` | ||
if (fs.existsSync(packageFile)) { | ||
fs.readFile(packageFile, 'utf8', (err, oldContent) => { | ||
let newContent = oldContent.replace(/(.*)express\(\)/g, `const app = express();\nimport lessMiddleware from 'less-middleware';\n\napp.use(lessMiddleware('/less', {\n dest: 'css',\n debug: true,\n pathRoot: path.join(__dirname, 'views')}))`); | ||
fs.writeFile(packageFile, newContent, (err) => { | ||
if (err) throw err; | ||
}) | ||
}) | ||
} | ||
}) | ||
break; | ||
default: | ||
fetchFile.fetchContent('/template/style.css').then((data) => | ||
createFileAndAddContent.createFileWithContent(`${directory}/views/css/style.css`, data)) | ||
break; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,62 @@ | ||
const shell = require('shelljs') | ||
const fs = require('fs'); | ||
const createFileAndAddContent = require('../helperFunctions/createFileAndAddContent') | ||
const fetchFile = require('../helperFunctions/fetchContent') | ||
|
||
module.exports.addViewToProject = (view, directory) => { | ||
const supportedViews = ['ejs', 'hbs']; | ||
|
||
if (!supportedViews.includes(view)) { | ||
console.log('Requested View not supported choose between ejs|hbs'); | ||
exit() | ||
} | ||
|
||
switch (view) { | ||
case 'ejs': | ||
fetchFile.fetchContent('/template/view.ejs').then((data) => | ||
createFileAndAddContent.createFileWithContent(`${directory}/views/view.ejs`, data)) | ||
shell.exec('npm i ejs', () => { | ||
try { | ||
let packageFile = `${directory}/app.js` | ||
if (fs.existsSync(packageFile)) { | ||
fs.readFile(packageFile, 'utf8', (err, oldContent) => { | ||
let newContent = oldContent.replace(/(.*)express\(\)/g, `const app = express()\napp.set('view engine', 'ejs')\n\napp.get('/index', (req, res) => res.render('view', {title: 'Index'}))`); | ||
fs.writeFile(packageFile, newContent, (err) => { | ||
if (err) throw err; | ||
}) | ||
}) | ||
} | ||
} catch (err) { | ||
console.log('package error') | ||
} | ||
}) | ||
break; | ||
case 'hbs': | ||
fetchFile.fetchContent('/template/layout.hbs').then((data) => | ||
createFileAndAddContent.createFileWithContent(`${directory}/views/main.hbs`, data)) | ||
fetchFile.fetchContent('/template/view.hbs').then((data) => | ||
createFileAndAddContent.createFileWithContent(`${directory}/views/view.hbs`, data)) | ||
shell.exec('npm i express-handlebars', () => { | ||
try { | ||
let packageFile = `${directory}/app.js` | ||
if (fs.existsSync(packageFile)) { | ||
fs.readFile(packageFile, 'utf8', (err, oldContent) => { | ||
let newContent = oldContent.replace(/(.*)express\(\)/g, `const app = express()\nimport exphbs from 'express-handlebars';\n\napp.engine('.hbs', exphbs({extname: '.hbs', layoutsDir: __dirname + '/views'})); | ||
app.set('view engine', 'hbs') | ||
app.get('/index', (req, res) => res.render('view', {title: 'Index'})) | ||
`); | ||
fs.writeFile(packageFile, newContent, (err) => { | ||
if (err) throw err; | ||
}) | ||
}) | ||
} | ||
} catch (err) { | ||
console.log('package error') | ||
} | ||
}) | ||
break; | ||
default: | ||
break; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
const pluralize = require('pluralize') | ||
|
||
const createFileWithContent = require('./createFileAndAddContent'); | ||
|
||
module.exports.createControllerAndService = (fileDirectory, resource) => { | ||
createFileWithContent.createFileWithContent(`${fileDirectory}/controller/${resource}Controller.js`, | ||
require('../code-snippets/controllerSchema')(resource, pluralize(resource))) | ||
createFileWithContent.createFileWithContent(`${fileDirectory}/service/${resource}Service.js`, | ||
require('../code-snippets/serviceSchema')(resource)) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
const fs = require('fs'); | ||
const mkdirp = require('mkdirp'); | ||
const getDirName = require('path').dirname; | ||
|
||
module.exports.createFileWithContent = (filePath, content) => { | ||
mkdirp(getDirName(filePath), function (err) { | ||
if (err) return cb(err); | ||
fs.writeFile(filePath, content, (err)=>{ | ||
if (err) throw err; | ||
}) | ||
}) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
const fs = require('fs'); | ||
const path = require('path') | ||
|
||
let appDirectory = path.resolve(__dirname + '/../'); | ||
|
||
module.exports.fetchContent = (filePath) => { | ||
return new Promise((resolve, reject)=>{ | ||
fs.readFile(appDirectory+filePath, 'utf8', (err, oldContent)=>{ | ||
if(err) reject(err) | ||
resolve(oldContent); | ||
}) | ||
}) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
const fs = require('fs'); | ||
const pluralize = require('pluralize') | ||
|
||
const createFileWithContent = require('./createFileAndAddContent'); | ||
|
||
module.exports.updateRouteText = (filePath, resource) => { | ||
return new Promise((resolve, reject)=>{ | ||
try { | ||
if (fs.existsSync(filePath)) { | ||
fs.readFile(filePath, 'utf8', (err, oldContent)=>{ | ||
let newContent = oldContent.replace(/module.exports(.*)/g, `import ${pluralize(resource)} from '../controller/${resource}Controller'; | ||
routes.use('/${pluralize(resource)}', ${pluralize(resource)}); | ||
module.exports = routes;`); | ||
|
||
createFileWithContent.createFileWithContent(filePath, newContent, err => { | ||
if(err) {console.log('Error in adding data to routes file')} | ||
}) | ||
}) | ||
resolve() | ||
} | ||
else { | ||
throw 'routes/index.js file doesn\'t exists' | ||
} | ||
} catch(err) { | ||
reject(err) | ||
} | ||
}) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
module.exports.updateRouteText = (filePath, resource) => { | ||
return new Promise((resolve, reject)=>{ | ||
try { | ||
if (fs.existsSync(filePath)) { | ||
fs.readFile(filePath, 'utf8', (err, oldContent)=>{ | ||
let newContent = oldContent.replace(/module.exports(.*)/g, `routes.get('/index', function(req, res) { | ||
res.render('view', {title: 'Index'}); | ||
});`); | ||
|
||
createFileWithContent.createFileWithContent(filePath, newContent, err => { | ||
if(err) {console.log('Error in adding data to routes file')} | ||
}) | ||
}) | ||
resolve() | ||
} | ||
else { | ||
throw 'routes/index.js file doesn\'t exists' | ||
} | ||
} catch(err) { | ||
reject(err) | ||
} | ||
}) | ||
} |
Oops, something went wrong.