Skip to content

Commit

Permalink
create new version of every util
Browse files Browse the repository at this point in the history
  • Loading branch information
abdrahmanES1 committed Nov 12, 2023
1 parent c956359 commit 1136b0f
Show file tree
Hide file tree
Showing 13 changed files with 170 additions and 70 deletions.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
"scripts": {
"test": "jest",
"build": "tsc",
"link-cli": "(npm unlink --global express-initializer || true) && chmod +x ./dist/src/index.js && npm link --global express-initializer",
"link-cli": "(yarn unlink --global express-initializer || true) && chmod +x ./dist/src/index.js && yarn link --global express-initializer",
"start": "cd dist && node ./src/index.js",
"ci": "npm run build && npm run test",
"release": "npm publish"
Expand Down
19 changes: 11 additions & 8 deletions src/index.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
#!/usr/bin/env node
import commander, { Command } from "commander";
import createApp from '../util/createApp'
import createFile from "../util/createFile";
import createApp from '../util/createAppv2'
const figlet = require("figlet");
import chalk from "chalk";
import cliSelect from "cli-select";
import createResource from "../util/createResource";
import packageJson from '../package.json'
import createResources from "../util/createResources";
import createResource from "../util/createResourcev2";


const program = new Command();
console.log(chalk.cyanBright(figlet.textSync(packageJson.name, {
Expand All @@ -22,7 +23,6 @@ program
.option("-d, --debug", "output extra debugging")
.option('-ts, --typescript', 'use TypeScript')

type X = { id: number, value: string }
program.command('new')
.description('Create new Express App')
.argument('<app-name>', 'App Name')
Expand All @@ -31,7 +31,7 @@ program.command('new')
cliSelect({
values: ['RESTful API', 'Web App'],
selected: "👉",
unselected: " ",
unselected: " ",
cleanup: false,
valueRenderer: (value, selected) => {
if (selected) {
Expand All @@ -41,7 +41,7 @@ program.command('new')
},
}).then(async (value) => {
if (value.id === 0) {
await createApp(appName, options, () => { })
await createApp(appName, options)
.then(() => {
console.log(chalk.blue.bold(`\n🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉`));
console.log(chalk.blue.bold(`\n cd ${appName}`));
Expand All @@ -51,6 +51,7 @@ program.command('new')
console.log(console.log(chalk.red(err)));
})
}

else console.log(chalk.blue(`🚧 🚧 🚧 Web app Coming soon .. 🚧 🚧 🚧`));
})

Expand All @@ -59,15 +60,17 @@ program.command('new')




program.command('g')
.description("Generate new App Resource controller, model, middleware, route, resource")
.addArgument(new commander.Argument('<file-type>', 'file type Controller Service').choices(['controller', 'model', 'middleware', "route", "resource", "view"]))
.argument('<file-name>', 'file name ex. users ')
.action((fileType, fileName, options) => {
if (fileType == "resource") {
createResource(`${process.cwd()}`, fileName, options);
createResources(`${process.cwd()}`, fileName, options);
} else {
createFile(`${process.cwd()}`, fileType, fileName, options);

createResource(`${process.cwd()}`, fileType, fileName, options);
}
});

Expand Down
2 changes: 1 addition & 1 deletion tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,5 +14,5 @@
"outDir": "dist" ,
"resolveJsonModule": true
},
"include": ["src", "types.d.ts"]
"include": ["src"]
}
9 changes: 0 additions & 9 deletions types.d.ts

This file was deleted.

36 changes: 20 additions & 16 deletions util/createApp.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,26 +3,30 @@ import createResource from './createResource'
import { mkdir, writeFile } from "fs/promises";
import chalk from "chalk";
import { appTemplate, indexTemplate, errorMiddlewareTemplate } from '../templates/js'

import projectStructure from './projectStructure'
import createFiles from './createFilev2'
import { DirectoryStructure } from "../types";

export default async (appName: string, options: any, callback: Function) => {
const getFilesExtention = (options: any) => options?.typescript ? ".ts" : ".js";
try {
await mkdir(`${appName}`)
await mkdir(`${appName}/src`)
await mkdir(`${appName}/src/controllers`)
await mkdir(`${appName}/src/middlewares`)
await mkdir(`${appName}/src/models`)
await mkdir(`${appName}/src/routes`)
await mkdir(`${appName}/config`)
await exec(`cd ${appName} && touch index${getFilesExtention(options)}`)
await exec(`cd ${appName}/src && touch app${getFilesExtention(options)}`)
await exec(`cd ${appName} && npm init -y`)
await createResource(appName, "users", options)
await writeFile(`${appName}/src/app${getFilesExtention(options)}`, appTemplate())
await writeFile(`${appName}/index${getFilesExtention(options)}`, indexTemplate())
await writeFile(`${appName}/src/middlewares/error.middleware${getFilesExtention(options)}`, errorMiddlewareTemplate())
callback()


// await mkdir(`${appName}`)
// await mkdir(`${appName}/src`)
// await mkdir(`${appName}/src/controllers`)
// await mkdir(`${appName}/src/middlewares`)
// await mkdir(`${appName}/src/models`)
// await mkdir(`${appName}/src/routes`)
// await mkdir(`${appName}/config`)
// await exec(`cd ${appName} && touch index${getFilesExtention(options)}`)
// await exec(`cd ${appName}/src && touch app${getFilesExtention(options)}`)
// await exec(`cd ${appName} && npm init -y`)
// await createResource(appName, "users", options)
// await writeFile(`${appName}/src/app${getFilesExtention(options)}`, appTemplate())
// await writeFile(`${appName}/index${getFilesExtention(options)}`, indexTemplate())
// await writeFile(`${appName}/src/middlewares/error.middleware${getFilesExtention(options)}`, errorMiddlewareTemplate())
// callback()
} catch (error: any) {
console.log(chalk.red("🚨 " + error.message));
return
Expand Down
40 changes: 40 additions & 0 deletions util/createAppv2.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
import { exec } from "child_process";
import chalk from "chalk";
import { appTemplate, indexTemplate, errorMiddlewareTemplate } from "../templates/js"
import createDirectory from "./createDirectory"
import createFile from "./createFilev2"
import createResources from "./createResources";


export default async (appName: string, options: any) => {
const getFilesExtention = (options: any) => options?.typescript ? ".ts" : ".js";

try {
// Create Directories

await createDirectory(`${appName}`)
await createDirectory(`${appName}/src`)
await createDirectory(`${appName}/src/controllers`)
await createDirectory(`${appName}/src/middlewares`)
await createDirectory(`${appName}/src/models`)
await createDirectory(`${appName}/src/routes`)
await createDirectory(`${appName}/configs`)
await createDirectory(`${appName}/public`)

// Create files

await createResources(appName, "users", options)
await createFile(`${appName}/src/middlewares/error.middleware${getFilesExtention(options)}`, errorMiddlewareTemplate())
await createFile(`${appName}/index${getFilesExtention(options)}`, indexTemplate());
await createFile(`${appName}/src/app${getFilesExtention(options)}`, appTemplate());
await exec(`cd ${appName} && npm init -y`)

} catch (error: any) {
console.log(chalk.red("🚨 " + error.message));
return
}

}



10 changes: 0 additions & 10 deletions util/createDirectories.ts

This file was deleted.

10 changes: 5 additions & 5 deletions util/createDirectory.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import { existsSync, mkdirSync } from 'fs'
function createDirectory(directoryPath) {
if (!existsSync(directoryPath)) {
mkdirSync(directoryPath, { recursive: true });
import { existsSync, promises as fs, } from 'fs';

async function createDirectory(directoryPath: string): Promise<void> {
if (!await existsSync(directoryPath)) {
await fs.mkdir(directoryPath, { recursive: true });
}
}

export default createDirectory;
20 changes: 0 additions & 20 deletions util/createFiles.ts

This file was deleted.

17 changes: 17 additions & 0 deletions util/createFilev2.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import chalk from "chalk";
import { writeFile } from "fs/promises";
import { existsSync } from "fs";
export default async (filePath: string, fileContent = "") => {

if (!await existsSync(filePath)) {
await writeFile(filePath, fileContent).then(() => {
console.log(chalk.green(`🚀 CREATE ${filePath}`));
}).catch((err) => {
console.log(chalk.bgRed(`${err}`));
console.log(chalk.red(`🚨 FAILED ${filePath}`));
console.log(chalk.red(`🚦 Initilize Project first`));
})
}


}
26 changes: 26 additions & 0 deletions util/createResources.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import { routeTemplate, controllerTemplate } from '../templates/js'
import { existsSync } from 'fs'
import chalk from 'chalk'
import createResource from './createResourcev2'

export default async (appName: string, fileName: string, options: any) => {
if (existsSync(`${appName}/src`)) {
await Promise.race(
[
createResource(appName, "controller", fileName, options, controllerTemplate(fileName)),
createResource(appName, "middleware", fileName, options),
createResource(appName, "model", fileName, options),
createResource(appName, "route", fileName, options, routeTemplate(fileName)),
// createFile(appName, "view", fileName, options),
]
)
} else {
console.log(chalk.red(`🚨 FAILED Creating Resource`));
console.log(chalk.underline.cyan(`🚦 Initilize Project first`));
return
}

}



12 changes: 12 additions & 0 deletions util/createResourcev2.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import createFile from "./createFilev2";
export default async (appName: string, fileType: string, fileName: string, options: any, fileContent = "") => {
const getFilesExtention = (options: any) => options?.typescript ? ".ts" : ".js";

if (fileType == "config") {
await createFile(`${appName}/${fileType}s/${fileName}.${fileType}${getFilesExtention(options)}`, fileContent)
} else {
await createFile(`${appName}/src/${fileType}s/${fileName}.${fileType}${getFilesExtention(options)}`, fileContent)
}


}
37 changes: 37 additions & 0 deletions util/projectStructure.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
import { DirectoryStructure } from "../types";



export default function projectStructure(projectName: string, options: object): DirectoryStructure {
const getFilesExtention = (options: any) => options?.typescript ? ".ts" : ".js" as string;

return {
[projectName]: {
config: {

},
src: {
controllers: {
["users.controller" + `${getFilesExtention(options)}`]: "users controller"
},
models: {
["users.model" + `${getFilesExtention(options)}`]: "users model"
},
routes: {
["users.route" + `${getFilesExtention(options)}`]: "users route"
},
middlewares: {
["users.middleware" + `${getFilesExtention(options)}`]: "users middleware"
},
["app" + `${getFilesExtention(options)}`]: ""
},
utils: {

},
["index" + `${getFilesExtention(options)}`]: ""

}
}


}

0 comments on commit 1136b0f

Please sign in to comment.