@codeenthusiast09/create-express-app 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +90 -0
  3. package/bin/cli.cjs +12 -0
  4. package/dist/generator.d.ts +59 -0
  5. package/dist/generator.d.ts.map +1 -0
  6. package/dist/generator.js +178 -0
  7. package/dist/generator.js.map +1 -0
  8. package/dist/index.d.ts +2 -0
  9. package/dist/index.d.ts.map +1 -0
  10. package/dist/index.js +113 -0
  11. package/dist/index.js.map +1 -0
  12. package/dist/installer.d.ts +37 -0
  13. package/dist/installer.d.ts.map +1 -0
  14. package/dist/installer.js +146 -0
  15. package/dist/installer.js.map +1 -0
  16. package/dist/prompts.d.ts +19 -0
  17. package/dist/prompts.d.ts.map +1 -0
  18. package/dist/prompts.js +67 -0
  19. package/dist/prompts.js.map +1 -0
  20. package/package.json +59 -0
  21. package/templates/boilerplate/.env.example +24 -0
  22. package/templates/boilerplate/.eslintrc.cjs +27 -0
  23. package/templates/boilerplate/.prettierrc +9 -0
  24. package/templates/boilerplate/DEPENDENCIES.md +43 -0
  25. package/templates/boilerplate/README.md +282 -0
  26. package/templates/boilerplate/docker/.dockerignore +46 -0
  27. package/templates/boilerplate/docker/Dockerfile +61 -0
  28. package/templates/boilerplate/docker/docker-compose.yml +68 -0
  29. package/templates/boilerplate/drizzle/drizzle.config.ts +13 -0
  30. package/templates/boilerplate/drizzle/schema.ts +22 -0
  31. package/templates/boilerplate/jest.config.cjs +24 -0
  32. package/templates/boilerplate/nodemon.json +11 -0
  33. package/templates/boilerplate/package.json +61 -0
  34. package/templates/boilerplate/prisma/schema.prisma +0 -0
  35. package/templates/boilerplate/scripts/generate-module.cjs +397 -0
  36. package/templates/boilerplate/src/common/middleware/error.middleware.ts +121 -0
  37. package/templates/boilerplate/src/common/middleware/validation.middleware.ts +50 -0
  38. package/templates/boilerplate/src/common/utils/http-logger.ts +24 -0
  39. package/templates/boilerplate/src/common/utils/logger.ts +34 -0
  40. package/templates/boilerplate/src/common/utils/response-helper.ts +140 -0
  41. package/templates/boilerplate/src/config/env.ts +24 -0
  42. package/templates/boilerplate/src/config/index.ts +92 -0
  43. package/templates/boilerplate/src/database/drizzle.connection.ts +50 -0
  44. package/templates/boilerplate/src/database/index.ts +20 -0
  45. package/templates/boilerplate/src/database/mongoose.connection.ts +56 -0
  46. package/templates/boilerplate/src/database/prisma.connection.ts +50 -0
  47. package/templates/boilerplate/src/modules/.gitkeep +0 -0
  48. package/templates/boilerplate/src/server.ts +121 -0
  49. package/templates/boilerplate/src/types/express.types.ts +29 -0
  50. package/templates/boilerplate/src/types/index.ts +5 -0
  51. package/templates/boilerplate/src/types/response.types.ts +54 -0
  52. package/templates/boilerplate/tsconfig.json +72 -0
@@ -0,0 +1,146 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.Installer = void 0;
7
+ const execa_1 = __importDefault(require("execa"));
8
+ const ora_1 = __importDefault(require("ora"));
9
+ const chalk_1 = __importDefault(require("chalk"));
10
+ /**
11
+ * Installer
12
+ *
13
+ * Handles post-generation tasks:
14
+ * - Installing dependencies
15
+ * - Initializing git repository
16
+ */
17
+ class Installer {
18
+ constructor(config, projectPath) {
19
+ this.config = config;
20
+ this.projectPath = projectPath;
21
+ }
22
+ /**
23
+ * Install Dependencies
24
+ *
25
+ * Runs npm install in the project directory.
26
+ * Also installs database-specific dependencies.
27
+ */
28
+ async installDependencies() {
29
+ const spinner = (0, ora_1.default)("Installing dependencies...").start();
30
+ try {
31
+ // Base npm install
32
+ await (0, execa_1.default)("npm", ["install"], {
33
+ cwd: this.projectPath,
34
+ stdio: "pipe",
35
+ });
36
+ spinner.text = "Installing database dependencies...";
37
+ // Install database-specific dependencies
38
+ await this.installDatabaseDependencies();
39
+ spinner.succeed(chalk_1.default.green("Dependencies installed"));
40
+ }
41
+ catch (error) {
42
+ spinner.fail(chalk_1.default.red("Failed to install dependencies"));
43
+ throw error;
44
+ }
45
+ }
46
+ /**
47
+ * Install Database-Specific Dependencies
48
+ */
49
+ async installDatabaseDependencies() {
50
+ const deps = [];
51
+ const devDeps = [];
52
+ if (this.config.database === "mongodb") {
53
+ deps.push("mongoose");
54
+ }
55
+ else if (this.config.database === "postgresql") {
56
+ if (this.config.orm === "prisma") {
57
+ // Pin to Prisma 6 for stability
58
+ deps.push("@prisma/client@^6.0.0");
59
+ devDeps.push("prisma@^6.0.0");
60
+ }
61
+ else if (this.config.orm === "drizzle") {
62
+ deps.push("drizzle-orm", "pg");
63
+ devDeps.push("drizzle-kit", "@types/pg");
64
+ }
65
+ }
66
+ // Install production dependencies
67
+ if (deps.length > 0) {
68
+ await (0, execa_1.default)("npm", ["install", ...deps], {
69
+ cwd: this.projectPath,
70
+ stdio: "pipe",
71
+ });
72
+ }
73
+ // Install dev dependencies
74
+ if (devDeps.length > 0) {
75
+ await (0, execa_1.default)("npm", ["install", "--save-dev", ...devDeps], {
76
+ cwd: this.projectPath,
77
+ stdio: "pipe",
78
+ });
79
+ }
80
+ // Run post-install tasks for specific ORMs
81
+ await this.runPostInstallTasks();
82
+ }
83
+ /**
84
+ * Run Post-Install Tasks
85
+ *
86
+ * Runs necessary setup commands after dependencies are installed
87
+ */
88
+ async runPostInstallTasks() {
89
+ if (this.config.database === "postgresql" && this.config.orm === "prisma") {
90
+ const spinner = (0, ora_1.default)("Generating Prisma Client...").start();
91
+ try {
92
+ await (0, execa_1.default)("npx", ["prisma", "generate"], {
93
+ cwd: this.projectPath,
94
+ stdio: "pipe",
95
+ });
96
+ spinner.succeed(chalk_1.default.green("Prisma Client generated"));
97
+ }
98
+ catch (error) {
99
+ spinner.fail(chalk_1.default.red("Failed to generate Prisma Client"));
100
+ throw error;
101
+ }
102
+ }
103
+ }
104
+ /**
105
+ * Initialize Git Repository
106
+ *
107
+ * Runs git init and makes an initial commit.
108
+ */
109
+ async initGit() {
110
+ const spinner = (0, ora_1.default)("Initializing git repository...").start();
111
+ try {
112
+ // Initialize git
113
+ await (0, execa_1.default)("git", ["init"], {
114
+ cwd: this.projectPath,
115
+ stdio: "pipe",
116
+ });
117
+ // Configure git user (for the initial commit)
118
+ await (0, execa_1.default)("git", ["config", "user.email", "user@example.com"], {
119
+ cwd: this.projectPath,
120
+ stdio: "pipe",
121
+ });
122
+ await (0, execa_1.default)("git", ["config", "user.name", "User"], {
123
+ cwd: this.projectPath,
124
+ stdio: "pipe",
125
+ });
126
+ // Add all files
127
+ await (0, execa_1.default)("git", ["add", "."], {
128
+ cwd: this.projectPath,
129
+ stdio: "pipe",
130
+ });
131
+ // Initial commit
132
+ await (0, execa_1.default)("git", ["commit", "-m", "feat: initial project setup from create-express-app"], {
133
+ cwd: this.projectPath,
134
+ stdio: "pipe",
135
+ });
136
+ spinner.succeed(chalk_1.default.green("Git repository initialized"));
137
+ }
138
+ catch (error) {
139
+ spinner.fail(chalk_1.default.red("Failed to initialize git"));
140
+ // Don't throw - git init failing shouldn't stop the whole process
141
+ console.warn(chalk_1.default.yellow("You can initialize git manually later"));
142
+ }
143
+ }
144
+ }
145
+ exports.Installer = Installer;
146
+ //# sourceMappingURL=installer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"installer.js","sourceRoot":"","sources":["../src/installer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * User Choices Interface
3
+ *
4
+ * This defines what information we collect from the user
5
+ */
6
+ export interface ProjectConfig {
7
+ projectName: string;
8
+ database: "mongodb" | "postgresql";
9
+ orm?: "prisma" | "drizzle";
10
+ includeDocker: boolean;
11
+ }
12
+ /**
13
+ * Ask User Questions
14
+ *
15
+ * This function shows interactive prompts and returns user's choices.
16
+ * Uses inquirer to create a nice CLI experience.
17
+ */
18
+ export declare function promptUser(projectName?: string): Promise<ProjectConfig>;
19
+ //# sourceMappingURL=prompts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,SAAS,GAAG,YAAY,CAAC;IACnC,GAAG,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC3B,aAAa,EAAE,OAAO,CAAC;CACxB;AAED;;;;;GAKG;AACH,wBAAsB,UAAU,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAwD7E"}
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.promptUser = promptUser;
7
+ const inquirer_1 = __importDefault(require("inquirer"));
8
+ /**
9
+ * Ask User Questions
10
+ *
11
+ * This function shows interactive prompts and returns user's choices.
12
+ * Uses inquirer to create a nice CLI experience.
13
+ */
14
+ async function promptUser(projectName) {
15
+ const answers = await inquirer_1.default.prompt([
16
+ // Project Name
17
+ {
18
+ type: "input",
19
+ name: "projectName",
20
+ message: "Project name:",
21
+ default: projectName || "my-express-app",
22
+ validate: (input) => {
23
+ // Check if name is valid (no spaces, special chars, etc.)
24
+ if (/^[a-z0-9-_]+$/.test(input)) {
25
+ return true;
26
+ }
27
+ return "Project name can only contain lowercase letters, numbers, hyphens, and underscores";
28
+ },
29
+ },
30
+ // Database Choice
31
+ {
32
+ type: "list",
33
+ name: "database",
34
+ message: "Which database do you want to use?",
35
+ choices: [
36
+ { name: "MongoDB (with Mongoose)", value: "mongodb" },
37
+ { name: "PostgreSQL (with Prisma or Drizzle)", value: "postgresql" },
38
+ ],
39
+ },
40
+ // ORM Choice (only if PostgreSQL selected)
41
+ {
42
+ type: "list",
43
+ name: "orm",
44
+ message: "Which ORM for PostgreSQL?",
45
+ choices: [
46
+ {
47
+ name: "Prisma (recommended - great DX, migrations)",
48
+ value: "prisma",
49
+ },
50
+ {
51
+ name: "Drizzle (newer - more type-safe, better performance)",
52
+ value: "drizzle",
53
+ },
54
+ ],
55
+ when: (answers) => answers.database === "postgresql",
56
+ },
57
+ // Docker
58
+ {
59
+ type: "confirm",
60
+ name: "includeDocker",
61
+ message: "Include Docker setup?",
62
+ default: true,
63
+ },
64
+ ]);
65
+ return answers;
66
+ }
67
+ //# sourceMappingURL=prompts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":";;;;;AAoBA,gCAwDC;AA5ED,wDAAgC;AAchC;;;;;GAKG;AACI,KAAK,UAAU,UAAU,CAAC,WAAoB;IACnD,MAAM,OAAO,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAAC;QACpC,eAAe;QACf;YACE,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,aAAa;YACnB,OAAO,EAAE,eAAe;YACxB,OAAO,EAAE,WAAW,IAAI,gBAAgB;YACxC,QAAQ,EAAE,CAAC,KAAa,EAAE,EAAE;gBAC1B,0DAA0D;gBAC1D,IAAI,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;oBAChC,OAAO,IAAI,CAAC;gBACd,CAAC;gBACD,OAAO,oFAAoF,CAAC;YAC9F,CAAC;SACF;QAED,kBAAkB;QAClB;YACE,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE,oCAAoC;YAC7C,OAAO,EAAE;gBACP,EAAE,IAAI,EAAE,yBAAyB,EAAE,KAAK,EAAE,SAAS,EAAE;gBACrD,EAAE,IAAI,EAAE,qCAAqC,EAAE,KAAK,EAAE,YAAY,EAAE;aACrE;SACF;QAED,2CAA2C;QAC3C;YACE,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,KAAK;YACX,OAAO,EAAE,2BAA2B;YACpC,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,6CAA6C;oBACnD,KAAK,EAAE,QAAQ;iBAChB;gBACD;oBACE,IAAI,EAAE,sDAAsD;oBAC5D,KAAK,EAAE,SAAS;iBACjB;aACF;YACD,IAAI,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,KAAK,YAAY;SACrD;QAED,SAAS;QACT;YACE,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,eAAe;YACrB,OAAO,EAAE,uBAAuB;YAChC,OAAO,EAAE,IAAI;SACd;KACF,CAAC,CAAC;IAEH,OAAO,OAAwB,CAAC;AAClC,CAAC"}
package/package.json ADDED
@@ -0,0 +1,59 @@
1
+ {
2
+ "name": "@codeenthusiast09/create-express-app",
3
+ "version": "1.0.0",
4
+ "description": "CLI tool to generate production-ready Express TypeScript projects with flexible database options (MongoDB, PostgreSQL with Prisma or Drizzle)",
5
+ "main": "dist/index.js",
6
+ "bin": {
7
+ "create-express-app": "./bin/cli.cjs"
8
+ },
9
+ "repository": {
10
+ "type": "git",
11
+ "url": "https://github.com/CodeEnthusiast09/create-express-app"
12
+ },
13
+ "bugs": {
14
+ "url": "https://github.com/CodeEnthusiast09/create-express-app/issues"
15
+ },
16
+ "homepage": "https://github.com/CodeEnthusiast09/create-express-app#readme",
17
+ "scripts": {
18
+ "dev": "tsx src/index.ts",
19
+ "build": "tsc",
20
+ "start": "node dist/index.js",
21
+ "prepublishOnly": "npm run build"
22
+ },
23
+ "keywords": [
24
+ "express",
25
+ "typescript",
26
+ "cli",
27
+ "boilerplate",
28
+ "generator",
29
+ "mongodb",
30
+ "postgresql",
31
+ "prisma",
32
+ "drizzle",
33
+ "mongoose",
34
+ "scaffolding",
35
+ "template"
36
+ ],
37
+ "author": "O'Brien Taiwo <obrienadedapo15@gmail.com>",
38
+ "license": "MIT",
39
+ "dependencies": {
40
+ "chalk": "^4.1.2",
41
+ "commander": "^11.1.0",
42
+ "inquirer": "^8.2.6",
43
+ "ora": "^5.4.1",
44
+ "fs-extra": "^11.2.0",
45
+ "execa": "^5.1.1"
46
+ },
47
+ "devDependencies": {
48
+ "@types/node": "^20.11.19",
49
+ "@types/inquirer": "^9.0.7",
50
+ "@types/fs-extra": "^11.0.4",
51
+ "typescript": "^5.3.3",
52
+ "tsx": "^4.7.1"
53
+ },
54
+ "files": [
55
+ "dist",
56
+ "bin",
57
+ "templates"
58
+ ]
59
+ }
@@ -0,0 +1,24 @@
1
+ # Application
2
+ NODE_ENV=development
3
+ PORT=3000
4
+
5
+ # Database
6
+ # Choose one based on your database:
7
+
8
+ # MongoDB (Mongoose)
9
+ DATABASE_URL=mongodb://localhost:27017/myapp
10
+
11
+ # PostgreSQL (Prisma or Drizzle)
12
+ # DATABASE_URL=postgresql://user:password@localhost:5432/myapp
13
+
14
+
15
+ # JWT Configuration
16
+ JWT_SECRET=your-super-secret-jwt-key-min-32-characters-for security
17
+ JWT_EXPIRES_IN=7d
18
+
19
+ # CORS Configuration
20
+ CORS_ORIGIN=*
21
+ CORS_CREDENTIALS=false
22
+
23
+ # Logging
24
+ LOG_LEVEL=info
@@ -0,0 +1,27 @@
1
+ module.exports = {
2
+ parser: "@typescript-eslint/parser",
3
+ parserOptions: {
4
+ project: "tsconfig.json",
5
+ tsconfigRootDir: __dirname,
6
+ sourceType: "module",
7
+ },
8
+ plugins: ["@typescript-eslint"],
9
+ extends: [
10
+ "eslint:recommended",
11
+ "plugin:@typescript-eslint/recommended",
12
+ "plugin:@typescript-eslint/recommended-requiring-type-checking",
13
+ ],
14
+ root: true,
15
+ env: {
16
+ node: true,
17
+ jest: true,
18
+ },
19
+ ignorePatterns: [".eslintrc.js", "dist", "node_modules"],
20
+ rules: {
21
+ "@typescript-eslint/interface-name-prefix": "off",
22
+ "@typescript-eslint/explicit-function-return-type": "off",
23
+ "@typescript-eslint/explicit-module-boundary-types": "off",
24
+ "@typescript-eslint/no-explicit-any": "warn",
25
+ "@typescript-eslint/no-unused-vars": ["error", { argsIgnorePattern: "^_" }],
26
+ },
27
+ };
@@ -0,0 +1,9 @@
1
+ {
2
+ "semi": true,
3
+ "trailingComma": "all",
4
+ "singleQuote": true,
5
+ "printWidth": 100,
6
+ "tabWidth": 2,
7
+ "arrowParens": "always",
8
+ "endOfLine": "lf"
9
+ }
@@ -0,0 +1,43 @@
1
+ # Database Dependencies
2
+
3
+ This boilerplate supports three database options. The CLI will automatically install the correct dependencies based on your choice.
4
+
5
+ ## MongoDB with Mongoose (Default)
6
+
7
+ ```bash
8
+ npm install mongoose
9
+ npm install -D @types/mongoose
10
+ ```
11
+
12
+ ## PostgreSQL with Prisma
13
+
14
+ ```bash
15
+ npm install @prisma/client
16
+ npm install -D prisma
17
+ ```
18
+
19
+ After installation, run:
20
+
21
+ ```bash
22
+ npx prisma init
23
+ npx prisma migrate dev
24
+ npx prisma generate
25
+ ```
26
+
27
+ ## PostgreSQL with Drizzle
28
+
29
+ ```bash
30
+ npm install drizzle-orm pg
31
+ npm install -D drizzle-kit @types/pg
32
+ ```
33
+
34
+ After installation, run:
35
+
36
+ ```bash
37
+ npx drizzle-kit generate:pg
38
+ npx drizzle-kit push:pg
39
+ ```
40
+
41
+ ---
42
+
43
+ **Note:** The CLI tool will handle all of this automatically during project setup.