@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.
- package/LICENSE +21 -0
- package/README.md +90 -0
- package/bin/cli.cjs +12 -0
- package/dist/generator.d.ts +59 -0
- package/dist/generator.d.ts.map +1 -0
- package/dist/generator.js +178 -0
- package/dist/generator.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +113 -0
- package/dist/index.js.map +1 -0
- package/dist/installer.d.ts +37 -0
- package/dist/installer.d.ts.map +1 -0
- package/dist/installer.js +146 -0
- package/dist/installer.js.map +1 -0
- package/dist/prompts.d.ts +19 -0
- package/dist/prompts.d.ts.map +1 -0
- package/dist/prompts.js +67 -0
- package/dist/prompts.js.map +1 -0
- package/package.json +59 -0
- package/templates/boilerplate/.env.example +24 -0
- package/templates/boilerplate/.eslintrc.cjs +27 -0
- package/templates/boilerplate/.prettierrc +9 -0
- package/templates/boilerplate/DEPENDENCIES.md +43 -0
- package/templates/boilerplate/README.md +282 -0
- package/templates/boilerplate/docker/.dockerignore +46 -0
- package/templates/boilerplate/docker/Dockerfile +61 -0
- package/templates/boilerplate/docker/docker-compose.yml +68 -0
- package/templates/boilerplate/drizzle/drizzle.config.ts +13 -0
- package/templates/boilerplate/drizzle/schema.ts +22 -0
- package/templates/boilerplate/jest.config.cjs +24 -0
- package/templates/boilerplate/nodemon.json +11 -0
- package/templates/boilerplate/package.json +61 -0
- package/templates/boilerplate/prisma/schema.prisma +0 -0
- package/templates/boilerplate/scripts/generate-module.cjs +397 -0
- package/templates/boilerplate/src/common/middleware/error.middleware.ts +121 -0
- package/templates/boilerplate/src/common/middleware/validation.middleware.ts +50 -0
- package/templates/boilerplate/src/common/utils/http-logger.ts +24 -0
- package/templates/boilerplate/src/common/utils/logger.ts +34 -0
- package/templates/boilerplate/src/common/utils/response-helper.ts +140 -0
- package/templates/boilerplate/src/config/env.ts +24 -0
- package/templates/boilerplate/src/config/index.ts +92 -0
- package/templates/boilerplate/src/database/drizzle.connection.ts +50 -0
- package/templates/boilerplate/src/database/index.ts +20 -0
- package/templates/boilerplate/src/database/mongoose.connection.ts +56 -0
- package/templates/boilerplate/src/database/prisma.connection.ts +50 -0
- package/templates/boilerplate/src/modules/.gitkeep +0 -0
- package/templates/boilerplate/src/server.ts +121 -0
- package/templates/boilerplate/src/types/express.types.ts +29 -0
- package/templates/boilerplate/src/types/index.ts +5 -0
- package/templates/boilerplate/src/types/response.types.ts +54 -0
- 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"}
|
package/dist/prompts.js
ADDED
|
@@ -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,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.
|