deploy-bbc 0.0.1 โ 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/cli/README.md +345 -0
- package/cli/package.json +16 -5
- package/cli/src/helpers/scaffold-project.ts +1 -1
- package/cli/src/installers/ai.ts +4 -4
- package/cli/src/installers/auth.ts +3 -3
- package/cli/src/installers/cloud.ts +4 -4
- package/cli/src/installers/database.ts +4 -4
- package/cli/src/installers/docs.ts +2 -2
- package/cli/src/installers/email.ts +3 -3
- package/cli/src/installers/observability.ts +2 -2
- package/cli/src/installers/queue.ts +2 -2
- package/cli/src/installers/ratelimit.ts +2 -2
- package/cli/src/installers/realtime.ts +2 -2
- package/cli/src/installers/testing.ts +1 -1
- package/cli/src/installers/validation.ts +2 -2
- package/package.json +1 -1
package/cli/README.md
CHANGED
|
@@ -0,0 +1,345 @@
|
|
|
1
|
+
# ๐ deploy-bbc (Best Backend Code)
|
|
2
|
+
|
|
3
|
+
Bootstrap production-ready backend projects with Bun, TypeScript, and Docker in seconds.
|
|
4
|
+
|
|
5
|
+
[](https://www.npmjs.com/package/deploy-bbc)
|
|
6
|
+
[](https://opensource.org/licenses/MIT)
|
|
7
|
+
|
|
8
|
+
## โจ Features
|
|
9
|
+
|
|
10
|
+
- ๐ฏ **Interactive CLI** - Step-by-step project setup with beautiful prompts
|
|
11
|
+
- โก **3 Framework Options** - Choose between Hono, Express, or Bun Native
|
|
12
|
+
- ๐๏ธ **Multiple Databases** - PostgreSQL, MySQL, MongoDB, Redis with Drizzle ORM/Mongoose
|
|
13
|
+
- ๐ **Authentication** - JWT, OAuth 2.0, Session-based auth
|
|
14
|
+
- ๐ค **AI Integration** - OpenAI, Anthropic Claude, Google Gemini, Vercel AI SDK
|
|
15
|
+
- โ๏ธ **Cloud Storage** - AWS S3, Google Cloud, Azure, Cloudflare R2
|
|
16
|
+
- ๐ง **Email Services** - Resend, SendGrid, NodeMailer
|
|
17
|
+
- ๐ **Real-time** - Socket.io, Server-Sent Events
|
|
18
|
+
- ๐ **Validation** - Zod or Yup for request validation
|
|
19
|
+
- ๐ **Background Jobs** - BullMQ, Inngest
|
|
20
|
+
- ๐ **API Documentation** - Swagger/OpenAPI, Scalar
|
|
21
|
+
- ๐งช **Testing** - Vitest with Supertest
|
|
22
|
+
- ๐ณ **Docker Ready** - Dockerfile + docker-compose.yml included
|
|
23
|
+
- ๐ฆ **TypeScript** - Full type safety out of the box
|
|
24
|
+
|
|
25
|
+
## ๐ Quick Start
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
# Using npx (recommended)
|
|
29
|
+
npx deploy-bbc my-awesome-api
|
|
30
|
+
|
|
31
|
+
# Using npm
|
|
32
|
+
npm create deploy-bbc my-awesome-api
|
|
33
|
+
|
|
34
|
+
# Using bun
|
|
35
|
+
bunx deploy-bbc my-awesome-api
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## ๐ฆ Installation
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
# Install globally
|
|
42
|
+
npm install -g deploy-bbc
|
|
43
|
+
|
|
44
|
+
# Use directly with npx
|
|
45
|
+
npx deploy-bbc
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## ๐จ Usage
|
|
49
|
+
|
|
50
|
+
### Interactive Mode
|
|
51
|
+
|
|
52
|
+
Simply run the command and follow the prompts:
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
npx deploy-bbc my-project
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
You'll be asked to select:
|
|
59
|
+
1. **Project name** - Your application name
|
|
60
|
+
2. **Framework** - Hono (recommended), Express, or Bun Native
|
|
61
|
+
3. **Database(s)** - PostgreSQL, MySQL, MongoDB, Redis
|
|
62
|
+
4. **Authentication** - JWT, OAuth, Session-based
|
|
63
|
+
5. **AI Providers** - OpenAI, Anthropic, Gemini
|
|
64
|
+
6. **Email Service** - Resend, SendGrid, NodeMailer
|
|
65
|
+
7. **Real-time** - Socket.io or SSE
|
|
66
|
+
8. **Background Jobs** - BullMQ or Inngest
|
|
67
|
+
9. **Validation** - Zod or Yup
|
|
68
|
+
10. **API Docs** - Swagger or Scalar
|
|
69
|
+
11. **Testing** - Vitest setup
|
|
70
|
+
|
|
71
|
+
### CI Mode (Non-Interactive)
|
|
72
|
+
|
|
73
|
+
Perfect for automated deployments:
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
npx deploy-bbc my-project \
|
|
77
|
+
--CI \
|
|
78
|
+
--express \
|
|
79
|
+
--postgres \
|
|
80
|
+
--redis \
|
|
81
|
+
--jwt \
|
|
82
|
+
--zod \
|
|
83
|
+
--vitest \
|
|
84
|
+
--swagger \
|
|
85
|
+
--noGit
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
## ๐ ๏ธ Framework Options
|
|
89
|
+
|
|
90
|
+
### Hono (Default)
|
|
91
|
+
```bash
|
|
92
|
+
npx deploy-bbc my-app --hono
|
|
93
|
+
```
|
|
94
|
+
- Ultrafast web framework built for the edge
|
|
95
|
+
- Tiny footprint (~12KB)
|
|
96
|
+
- Express-like API
|
|
97
|
+
- **Recommended for most projects**
|
|
98
|
+
|
|
99
|
+
### Express
|
|
100
|
+
```bash
|
|
101
|
+
npx deploy-bbc my-app --express
|
|
102
|
+
```
|
|
103
|
+
- Battle-tested Node.js framework
|
|
104
|
+
- Huge ecosystem
|
|
105
|
+
- Familiar to most developers
|
|
106
|
+
|
|
107
|
+
### Bun Native
|
|
108
|
+
```bash
|
|
109
|
+
npx deploy-bbc my-app --bun-native
|
|
110
|
+
```
|
|
111
|
+
- Native Bun.serve() API
|
|
112
|
+
- Zero dependencies
|
|
113
|
+
- Maximum performance
|
|
114
|
+
|
|
115
|
+
## ๐ Available Packages
|
|
116
|
+
|
|
117
|
+
### Databases
|
|
118
|
+
- `--postgres` - PostgreSQL with Drizzle ORM
|
|
119
|
+
- `--mysql` - MySQL with Drizzle ORM
|
|
120
|
+
- `--mongodb` - MongoDB with Mongoose
|
|
121
|
+
- `--redis` - Redis for caching & sessions
|
|
122
|
+
|
|
123
|
+
### Authentication
|
|
124
|
+
- `--jwt` - JSON Web Token authentication
|
|
125
|
+
- `--oauth` - OAuth 2.0 (Google, GitHub)
|
|
126
|
+
- `--session` - Session-based auth (requires Redis)
|
|
127
|
+
|
|
128
|
+
### AI & ML
|
|
129
|
+
- `--openai` - OpenAI GPT models
|
|
130
|
+
- `--anthropic` - Anthropic Claude SDK
|
|
131
|
+
- `--gemini` - Google Gemini
|
|
132
|
+
- `--vercelAI` - Vercel AI SDK (unified interface)
|
|
133
|
+
|
|
134
|
+
### Cloud Storage
|
|
135
|
+
- `--aws` - AWS S3 & SES
|
|
136
|
+
- `--gcp` - Google Cloud Storage
|
|
137
|
+
- `--azure` - Azure Blob Storage
|
|
138
|
+
- `--cloudflareR2` - Cloudflare R2
|
|
139
|
+
|
|
140
|
+
### Communication
|
|
141
|
+
- `--resend` - Modern email service
|
|
142
|
+
- `--sendgrid` - Enterprise email
|
|
143
|
+
- `--nodemailer` - SMTP email
|
|
144
|
+
- `--socketio` - WebSockets
|
|
145
|
+
- `--sse` - Server-Sent Events
|
|
146
|
+
|
|
147
|
+
### Infrastructure
|
|
148
|
+
- `--bullmq` - Redis-based job queue
|
|
149
|
+
- `--inngest` - Serverless job orchestration
|
|
150
|
+
- `--upstashRateLimit` - Upstash rate limiting
|
|
151
|
+
- `--customRateLimit` - Custom rate limit middleware
|
|
152
|
+
- `--sentry` - Error tracking
|
|
153
|
+
- `--logtail` - Log aggregation
|
|
154
|
+
|
|
155
|
+
### Developer Experience
|
|
156
|
+
- `--swagger` - Swagger/OpenAPI docs
|
|
157
|
+
- `--scalar` - Modern API documentation
|
|
158
|
+
- `--vitest` - Testing framework
|
|
159
|
+
- `--zod` - Zod validation
|
|
160
|
+
- `--yup` - Yup validation
|
|
161
|
+
|
|
162
|
+
### Options
|
|
163
|
+
- `--noInstall` - Skip dependency installation
|
|
164
|
+
- `--noGit` - Skip git initialization
|
|
165
|
+
- `--CI` - Non-interactive mode
|
|
166
|
+
|
|
167
|
+
## ๐ Examples
|
|
168
|
+
|
|
169
|
+
### Full-Stack API with PostgreSQL + JWT + AI
|
|
170
|
+
```bash
|
|
171
|
+
npx deploy-bbc my-api \
|
|
172
|
+
--hono \
|
|
173
|
+
--postgres \
|
|
174
|
+
--redis \
|
|
175
|
+
--jwt \
|
|
176
|
+
--openai \
|
|
177
|
+
--zod \
|
|
178
|
+
--swagger \
|
|
179
|
+
--vitest
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
### Microservice with Express + MongoDB
|
|
183
|
+
```bash
|
|
184
|
+
npx deploy-bbc user-service \
|
|
185
|
+
--express \
|
|
186
|
+
--mongodb \
|
|
187
|
+
--session \
|
|
188
|
+
--resend \
|
|
189
|
+
--bullmq \
|
|
190
|
+
--sentry
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
### Minimal Bun Native API
|
|
194
|
+
```bash
|
|
195
|
+
npx deploy-bbc fast-api \
|
|
196
|
+
--bun-native \
|
|
197
|
+
--postgres \
|
|
198
|
+
--jwt \
|
|
199
|
+
--zod
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
### AI-Powered Backend
|
|
203
|
+
```bash
|
|
204
|
+
npx deploy-bbc ai-backend \
|
|
205
|
+
--hono \
|
|
206
|
+
--postgres \
|
|
207
|
+
--jwt \
|
|
208
|
+
--anthropic \
|
|
209
|
+
--vercelAI \
|
|
210
|
+
--aws \
|
|
211
|
+
--zod \
|
|
212
|
+
--scalar
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
## ๐๏ธ Project Structure
|
|
216
|
+
|
|
217
|
+
```
|
|
218
|
+
my-project/
|
|
219
|
+
โโโ src/
|
|
220
|
+
โ โโโ index.ts # Application entry point
|
|
221
|
+
โ โโโ config/ # Configuration
|
|
222
|
+
โ โโโ middleware/ # Custom middleware
|
|
223
|
+
โ โโโ routes/ # API routes
|
|
224
|
+
โ โโโ types/ # TypeScript types
|
|
225
|
+
โ โโโ utils/ # Utility functions
|
|
226
|
+
โโโ docker-compose.yml # Docker services
|
|
227
|
+
โโโ Dockerfile # Container configuration
|
|
228
|
+
โโโ .env.example # Environment variables template
|
|
229
|
+
โโโ package.json # Dependencies
|
|
230
|
+
โโโ tsconfig.json # TypeScript config
|
|
231
|
+
โโโ README.md # Project documentation
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
## ๐ฆ Getting Started with Your Project
|
|
235
|
+
|
|
236
|
+
After creating your project:
|
|
237
|
+
|
|
238
|
+
```bash
|
|
239
|
+
# Navigate to project
|
|
240
|
+
cd my-project
|
|
241
|
+
|
|
242
|
+
# Copy environment variables
|
|
243
|
+
cp .env.example .env
|
|
244
|
+
|
|
245
|
+
# Edit .env with your credentials
|
|
246
|
+
nano .env
|
|
247
|
+
|
|
248
|
+
# Start development server
|
|
249
|
+
bun run dev
|
|
250
|
+
|
|
251
|
+
# Start with Docker
|
|
252
|
+
docker-compose up -d
|
|
253
|
+
bun run dev
|
|
254
|
+
|
|
255
|
+
# Run tests
|
|
256
|
+
bun test
|
|
257
|
+
|
|
258
|
+
# Build for production
|
|
259
|
+
bun run build
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
## ๐ง Validation Example (Zod)
|
|
263
|
+
|
|
264
|
+
When you select Zod validation, you get ready-to-use middleware:
|
|
265
|
+
|
|
266
|
+
```typescript
|
|
267
|
+
import { z } from "zod";
|
|
268
|
+
import { validate, get_validated } from "./middleware/validate.js";
|
|
269
|
+
|
|
270
|
+
const create_user_schema = z.object({
|
|
271
|
+
name: z.string().min(2),
|
|
272
|
+
email: z.string().email(),
|
|
273
|
+
age: z.number().int().min(18).optional(),
|
|
274
|
+
});
|
|
275
|
+
|
|
276
|
+
app.post(
|
|
277
|
+
"/users",
|
|
278
|
+
validate({ target: "body", schema: create_user_schema }),
|
|
279
|
+
(c) => {
|
|
280
|
+
const body = get_validated(c, "body");
|
|
281
|
+
// body is fully typed and validated
|
|
282
|
+
return c.json({ user: body });
|
|
283
|
+
}
|
|
284
|
+
);
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
## ๐ณ Docker Support
|
|
288
|
+
|
|
289
|
+
Every project includes:
|
|
290
|
+
- **Dockerfile** - Optimized multi-stage build
|
|
291
|
+
- **docker-compose.yml** - Services orchestration
|
|
292
|
+
- Database containers (PostgreSQL, MySQL, Redis)
|
|
293
|
+
- Volume persistence
|
|
294
|
+
- Network configuration
|
|
295
|
+
|
|
296
|
+
Start everything with:
|
|
297
|
+
```bash
|
|
298
|
+
docker-compose up -d
|
|
299
|
+
```
|
|
300
|
+
|
|
301
|
+
## ๐ Documentation
|
|
302
|
+
|
|
303
|
+
Each generated project includes:
|
|
304
|
+
- Comprehensive README.md
|
|
305
|
+
- .env.example with all required variables
|
|
306
|
+
- Example routes and middleware
|
|
307
|
+
- TypeScript types and interfaces
|
|
308
|
+
- Docker setup instructions
|
|
309
|
+
|
|
310
|
+
## ๐ค Contributing
|
|
311
|
+
|
|
312
|
+
Contributions are welcome! Please feel free to submit a Pull Request.
|
|
313
|
+
|
|
314
|
+
1. Fork the repository
|
|
315
|
+
2. Create your feature branch (`git checkout -b feature/amazing-feature`)
|
|
316
|
+
3. Commit your changes (`git commit -m 'Add some amazing feature'`)
|
|
317
|
+
4. Push to the branch (`git push origin feature/amazing-feature`)
|
|
318
|
+
5. Open a Pull Request
|
|
319
|
+
|
|
320
|
+
## ๐ License
|
|
321
|
+
|
|
322
|
+
MIT ยฉ [Aritra Sarkar](https://github.com/aritra69)
|
|
323
|
+
|
|
324
|
+
## ๐ Acknowledgments
|
|
325
|
+
|
|
326
|
+
Built with:
|
|
327
|
+
- [Bun](https://bun.sh) - Fast JavaScript runtime
|
|
328
|
+
- [Hono](https://hono.dev) - Ultrafast web framework
|
|
329
|
+
- [Clack](https://github.com/natemoo-re/clack) - Beautiful CLI prompts
|
|
330
|
+
- [Drizzle ORM](https://orm.drizzle.team) - TypeScript ORM
|
|
331
|
+
- [Zod](https://zod.dev) - TypeScript-first validation
|
|
332
|
+
|
|
333
|
+
## ๐ Links
|
|
334
|
+
|
|
335
|
+
- [GitHub Repository](https://github.com/aritra69/deploy-bbc)
|
|
336
|
+
- [npm Package](https://www.npmjs.com/package/deploy-bbc)
|
|
337
|
+
- [Report Issues](https://github.com/aritra69/deploy-bbc/issues)
|
|
338
|
+
|
|
339
|
+
## โญ Show Your Support
|
|
340
|
+
|
|
341
|
+
Give a โญ๏ธ if this project helped you!
|
|
342
|
+
|
|
343
|
+
---
|
|
344
|
+
|
|
345
|
+
**Made with โค๏ธ by [Aritra Sarkar](https://github.com/aritra69)**
|
package/cli/package.json
CHANGED
|
@@ -1,18 +1,21 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "deploy-bbc",
|
|
3
|
-
"version": "0.0
|
|
3
|
+
"version": "1.0.0",
|
|
4
4
|
"description": "CLI to bootstrap production-ready backends with Bun (Best Backend Code)",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
7
7
|
"deploy-bbc": "./dist/index.js"
|
|
8
8
|
},
|
|
9
9
|
"files": [
|
|
10
|
-
"dist"
|
|
11
|
-
"templates"
|
|
10
|
+
"dist"
|
|
12
11
|
],
|
|
12
|
+
"engines": {
|
|
13
|
+
"node": ">=18.0.0"
|
|
14
|
+
},
|
|
13
15
|
"scripts": {
|
|
14
16
|
"dev": "bun --watch src/index.ts",
|
|
15
|
-
"build": "bun build src/index.ts --outdir dist --target node",
|
|
17
|
+
"build": "bun build src/index.ts --outdir dist --target node && cp -r src/templates dist/templates",
|
|
18
|
+
"prepublishOnly": "bun run build",
|
|
16
19
|
"start": "node dist/index.js",
|
|
17
20
|
"type-check": "tsc --noEmit"
|
|
18
21
|
},
|
|
@@ -24,8 +27,16 @@
|
|
|
24
27
|
"boilerplate",
|
|
25
28
|
"api"
|
|
26
29
|
],
|
|
27
|
-
"author": "
|
|
30
|
+
"author": "Aritra Sarkar <aritrasarkar2002@gmail.com>",
|
|
28
31
|
"license": "MIT",
|
|
32
|
+
"repository": {
|
|
33
|
+
"type": "git",
|
|
34
|
+
"url": "https://github.com/aritra69/deploy-bbc.git"
|
|
35
|
+
},
|
|
36
|
+
"homepage": "https://github.com/aritra69/deploy-bbc#readme",
|
|
37
|
+
"bugs": {
|
|
38
|
+
"url": "https://github.com/aritra69/deploy-bbc/issues"
|
|
39
|
+
},
|
|
29
40
|
"dependencies": {
|
|
30
41
|
"@clack/prompts": "^0.7.0",
|
|
31
42
|
"chalk": "^5.3.0",
|
|
@@ -42,7 +42,7 @@ export async function scaffold_project(
|
|
|
42
42
|
? "base-express"
|
|
43
43
|
: "base-bun-native";
|
|
44
44
|
|
|
45
|
-
const templateDir = path.resolve(__dirname,
|
|
45
|
+
const templateDir = path.resolve(__dirname, `templates/${templateDirName}`);
|
|
46
46
|
await fs.copy(templateDir, projectDir, {
|
|
47
47
|
overwrite: false,
|
|
48
48
|
errorOnExist: false,
|
package/cli/src/installers/ai.ts
CHANGED
|
@@ -35,7 +35,7 @@ export async function ai_installer(options: InstallerOptions): Promise<void> {
|
|
|
35
35
|
}
|
|
36
36
|
|
|
37
37
|
async function install_openai(projectDir: string): Promise<void> {
|
|
38
|
-
const templateDir = path.resolve(__dirname, "
|
|
38
|
+
const templateDir = path.resolve(__dirname, "templates/extras/ai/openai");
|
|
39
39
|
await copy_template_files(templateDir, projectDir);
|
|
40
40
|
|
|
41
41
|
await add_package_dependency(projectDir, {
|
|
@@ -51,7 +51,7 @@ async function install_openai(projectDir: string): Promise<void> {
|
|
|
51
51
|
async function install_anthropic(projectDir: string): Promise<void> {
|
|
52
52
|
const templateDir = path.resolve(
|
|
53
53
|
__dirname,
|
|
54
|
-
"
|
|
54
|
+
"templates/extras/ai/anthropic"
|
|
55
55
|
);
|
|
56
56
|
await copy_template_files(templateDir, projectDir);
|
|
57
57
|
|
|
@@ -66,7 +66,7 @@ async function install_anthropic(projectDir: string): Promise<void> {
|
|
|
66
66
|
}
|
|
67
67
|
|
|
68
68
|
async function install_gemini(projectDir: string): Promise<void> {
|
|
69
|
-
const templateDir = path.resolve(__dirname, "
|
|
69
|
+
const templateDir = path.resolve(__dirname, "templates/extras/ai/gemini");
|
|
70
70
|
await copy_template_files(templateDir, projectDir);
|
|
71
71
|
|
|
72
72
|
await add_package_dependency(projectDir, {
|
|
@@ -82,7 +82,7 @@ async function install_gemini(projectDir: string): Promise<void> {
|
|
|
82
82
|
async function install_vercel_ai(projectDir: string): Promise<void> {
|
|
83
83
|
const templateDir = path.resolve(
|
|
84
84
|
__dirname,
|
|
85
|
-
"
|
|
85
|
+
"templates/extras/ai/vercel-ai"
|
|
86
86
|
);
|
|
87
87
|
await copy_template_files(templateDir, projectDir);
|
|
88
88
|
|
|
@@ -34,7 +34,7 @@ export async function auth_installer(
|
|
|
34
34
|
}
|
|
35
35
|
|
|
36
36
|
async function install_jwt(projectDir: string): Promise<void> {
|
|
37
|
-
const templateDir = path.resolve(__dirname, "
|
|
37
|
+
const templateDir = path.resolve(__dirname, "templates/extras/auth/jwt");
|
|
38
38
|
await copy_template_files(templateDir, projectDir);
|
|
39
39
|
|
|
40
40
|
await add_package_dependency(projectDir, {
|
|
@@ -58,7 +58,7 @@ async function install_jwt(projectDir: string): Promise<void> {
|
|
|
58
58
|
}
|
|
59
59
|
|
|
60
60
|
async function install_oauth(projectDir: string): Promise<void> {
|
|
61
|
-
const templateDir = path.resolve(__dirname, "
|
|
61
|
+
const templateDir = path.resolve(__dirname, "templates/extras/auth/oauth");
|
|
62
62
|
await copy_template_files(templateDir, projectDir);
|
|
63
63
|
|
|
64
64
|
await add_package_dependency(projectDir, {
|
|
@@ -83,7 +83,7 @@ async function install_oauth(projectDir: string): Promise<void> {
|
|
|
83
83
|
async function install_session(projectDir: string): Promise<void> {
|
|
84
84
|
const templateDir = path.resolve(
|
|
85
85
|
__dirname,
|
|
86
|
-
"
|
|
86
|
+
"templates/extras/auth/session"
|
|
87
87
|
);
|
|
88
88
|
await copy_template_files(templateDir, projectDir);
|
|
89
89
|
|
|
@@ -37,7 +37,7 @@ export async function cloud_installer(
|
|
|
37
37
|
}
|
|
38
38
|
|
|
39
39
|
async function install_aws(projectDir: string): Promise<void> {
|
|
40
|
-
const templateDir = path.resolve(__dirname, "
|
|
40
|
+
const templateDir = path.resolve(__dirname, "templates/extras/cloud/aws");
|
|
41
41
|
await copy_template_files(templateDir, projectDir);
|
|
42
42
|
|
|
43
43
|
await add_package_dependency(projectDir, {
|
|
@@ -53,7 +53,7 @@ async function install_aws(projectDir: string): Promise<void> {
|
|
|
53
53
|
}
|
|
54
54
|
|
|
55
55
|
async function install_gcp(projectDir: string): Promise<void> {
|
|
56
|
-
const templateDir = path.resolve(__dirname, "
|
|
56
|
+
const templateDir = path.resolve(__dirname, "templates/extras/cloud/gcp");
|
|
57
57
|
await copy_template_files(templateDir, projectDir);
|
|
58
58
|
|
|
59
59
|
await add_package_dependency(projectDir, {
|
|
@@ -69,7 +69,7 @@ async function install_gcp(projectDir: string): Promise<void> {
|
|
|
69
69
|
async function install_azure(projectDir: string): Promise<void> {
|
|
70
70
|
const templateDir = path.resolve(
|
|
71
71
|
__dirname,
|
|
72
|
-
"
|
|
72
|
+
"templates/extras/cloud/azure"
|
|
73
73
|
);
|
|
74
74
|
await copy_template_files(templateDir, projectDir);
|
|
75
75
|
|
|
@@ -86,7 +86,7 @@ async function install_azure(projectDir: string): Promise<void> {
|
|
|
86
86
|
async function install_cloudflare_r2(projectDir: string): Promise<void> {
|
|
87
87
|
const templateDir = path.resolve(
|
|
88
88
|
__dirname,
|
|
89
|
-
"
|
|
89
|
+
"templates/extras/cloud/cloudflare-r2"
|
|
90
90
|
);
|
|
91
91
|
await copy_template_files(templateDir, projectDir);
|
|
92
92
|
|
|
@@ -42,7 +42,7 @@ async function install_postgres(projectDir: string): Promise<void> {
|
|
|
42
42
|
// Copy template files
|
|
43
43
|
const templateDir = path.resolve(
|
|
44
44
|
__dirname,
|
|
45
|
-
"
|
|
45
|
+
"templates/extras/database/postgres"
|
|
46
46
|
);
|
|
47
47
|
await copy_template_files(templateDir, projectDir);
|
|
48
48
|
|
|
@@ -74,7 +74,7 @@ async function install_mysql(projectDir: string): Promise<void> {
|
|
|
74
74
|
// Copy template files
|
|
75
75
|
const templateDir = path.resolve(
|
|
76
76
|
__dirname,
|
|
77
|
-
"
|
|
77
|
+
"templates/extras/database/mysql"
|
|
78
78
|
);
|
|
79
79
|
await copy_template_files(templateDir, projectDir);
|
|
80
80
|
|
|
@@ -106,7 +106,7 @@ async function install_mongodb(projectDir: string): Promise<void> {
|
|
|
106
106
|
// Copy template files
|
|
107
107
|
const templateDir = path.resolve(
|
|
108
108
|
__dirname,
|
|
109
|
-
"
|
|
109
|
+
"templates/extras/database/mongodb"
|
|
110
110
|
);
|
|
111
111
|
await copy_template_files(templateDir, projectDir);
|
|
112
112
|
|
|
@@ -126,7 +126,7 @@ async function install_redis(projectDir: string): Promise<void> {
|
|
|
126
126
|
// Copy template files
|
|
127
127
|
const templateDir = path.resolve(
|
|
128
128
|
__dirname,
|
|
129
|
-
"
|
|
129
|
+
"templates/extras/database/redis"
|
|
130
130
|
);
|
|
131
131
|
await copy_template_files(templateDir, projectDir);
|
|
132
132
|
|
|
@@ -33,7 +33,7 @@ export async function docs_installer(
|
|
|
33
33
|
async function install_swagger(projectDir: string): Promise<void> {
|
|
34
34
|
const templateDir = path.resolve(
|
|
35
35
|
__dirname,
|
|
36
|
-
"
|
|
36
|
+
"templates/extras/docs/swagger"
|
|
37
37
|
);
|
|
38
38
|
await copy_template_files(templateDir, projectDir);
|
|
39
39
|
|
|
@@ -45,7 +45,7 @@ async function install_swagger(projectDir: string): Promise<void> {
|
|
|
45
45
|
async function install_scalar(projectDir: string): Promise<void> {
|
|
46
46
|
const templateDir = path.resolve(
|
|
47
47
|
__dirname,
|
|
48
|
-
"
|
|
48
|
+
"templates/extras/docs/scalar"
|
|
49
49
|
);
|
|
50
50
|
await copy_template_files(templateDir, projectDir);
|
|
51
51
|
|
|
@@ -36,7 +36,7 @@ export async function email_installer(
|
|
|
36
36
|
async function install_resend(projectDir: string): Promise<void> {
|
|
37
37
|
const templateDir = path.resolve(
|
|
38
38
|
__dirname,
|
|
39
|
-
"
|
|
39
|
+
"templates/extras/email/resend"
|
|
40
40
|
);
|
|
41
41
|
await copy_template_files(templateDir, projectDir);
|
|
42
42
|
|
|
@@ -53,7 +53,7 @@ async function install_resend(projectDir: string): Promise<void> {
|
|
|
53
53
|
async function install_sendgrid(projectDir: string): Promise<void> {
|
|
54
54
|
const templateDir = path.resolve(
|
|
55
55
|
__dirname,
|
|
56
|
-
"
|
|
56
|
+
"templates/extras/email/sendgrid"
|
|
57
57
|
);
|
|
58
58
|
await copy_template_files(templateDir, projectDir);
|
|
59
59
|
|
|
@@ -70,7 +70,7 @@ async function install_sendgrid(projectDir: string): Promise<void> {
|
|
|
70
70
|
async function install_nodemailer(projectDir: string): Promise<void> {
|
|
71
71
|
const templateDir = path.resolve(
|
|
72
72
|
__dirname,
|
|
73
|
-
"
|
|
73
|
+
"templates/extras/email/nodemailer"
|
|
74
74
|
);
|
|
75
75
|
await copy_template_files(templateDir, projectDir);
|
|
76
76
|
|
|
@@ -33,7 +33,7 @@ export async function observability_installer(
|
|
|
33
33
|
async function install_sentry(projectDir: string): Promise<void> {
|
|
34
34
|
const templateDir = path.resolve(
|
|
35
35
|
__dirname,
|
|
36
|
-
"
|
|
36
|
+
"templates/extras/observability/sentry"
|
|
37
37
|
);
|
|
38
38
|
await copy_template_files(templateDir, projectDir);
|
|
39
39
|
|
|
@@ -50,7 +50,7 @@ async function install_sentry(projectDir: string): Promise<void> {
|
|
|
50
50
|
async function install_logtail(projectDir: string): Promise<void> {
|
|
51
51
|
const templateDir = path.resolve(
|
|
52
52
|
__dirname,
|
|
53
|
-
"
|
|
53
|
+
"templates/extras/observability/logtail"
|
|
54
54
|
);
|
|
55
55
|
await copy_template_files(templateDir, projectDir);
|
|
56
56
|
|
|
@@ -33,7 +33,7 @@ export async function queue_installer(
|
|
|
33
33
|
async function install_bullmq(projectDir: string): Promise<void> {
|
|
34
34
|
const templateDir = path.resolve(
|
|
35
35
|
__dirname,
|
|
36
|
-
"
|
|
36
|
+
"templates/extras/queue/bullmq"
|
|
37
37
|
);
|
|
38
38
|
await copy_template_files(templateDir, projectDir);
|
|
39
39
|
|
|
@@ -50,7 +50,7 @@ async function install_bullmq(projectDir: string): Promise<void> {
|
|
|
50
50
|
async function install_inngest(projectDir: string): Promise<void> {
|
|
51
51
|
const templateDir = path.resolve(
|
|
52
52
|
__dirname,
|
|
53
|
-
"
|
|
53
|
+
"templates/extras/queue/inngest"
|
|
54
54
|
);
|
|
55
55
|
await copy_template_files(templateDir, projectDir);
|
|
56
56
|
|
|
@@ -33,7 +33,7 @@ export async function ratelimit_installer(
|
|
|
33
33
|
async function install_upstash_ratelimit(projectDir: string): Promise<void> {
|
|
34
34
|
const templateDir = path.resolve(
|
|
35
35
|
__dirname,
|
|
36
|
-
"
|
|
36
|
+
"templates/extras/ratelimit/upstash"
|
|
37
37
|
);
|
|
38
38
|
await copy_template_files(templateDir, projectDir);
|
|
39
39
|
|
|
@@ -51,7 +51,7 @@ async function install_upstash_ratelimit(projectDir: string): Promise<void> {
|
|
|
51
51
|
async function install_custom_ratelimit(projectDir: string): Promise<void> {
|
|
52
52
|
const templateDir = path.resolve(
|
|
53
53
|
__dirname,
|
|
54
|
-
"
|
|
54
|
+
"templates/extras/ratelimit/custom"
|
|
55
55
|
);
|
|
56
56
|
await copy_template_files(templateDir, projectDir);
|
|
57
57
|
|
|
@@ -33,7 +33,7 @@ export async function realtime_installer(
|
|
|
33
33
|
async function install_socketio(projectDir: string): Promise<void> {
|
|
34
34
|
const templateDir = path.resolve(
|
|
35
35
|
__dirname,
|
|
36
|
-
"
|
|
36
|
+
"templates/extras/realtime/socketio"
|
|
37
37
|
);
|
|
38
38
|
await copy_template_files(templateDir, projectDir);
|
|
39
39
|
|
|
@@ -53,7 +53,7 @@ async function install_socketio(projectDir: string): Promise<void> {
|
|
|
53
53
|
async function install_sse(projectDir: string): Promise<void> {
|
|
54
54
|
const templateDir = path.resolve(
|
|
55
55
|
__dirname,
|
|
56
|
-
"
|
|
56
|
+
"templates/extras/realtime/sse"
|
|
57
57
|
);
|
|
58
58
|
await copy_template_files(templateDir, projectDir);
|
|
59
59
|
|
|
@@ -30,7 +30,7 @@ export async function testing_installer(
|
|
|
30
30
|
async function install_vitest(projectDir: string): Promise<void> {
|
|
31
31
|
const templateDir = path.resolve(
|
|
32
32
|
__dirname,
|
|
33
|
-
"
|
|
33
|
+
"templates/extras/testing/vitest"
|
|
34
34
|
);
|
|
35
35
|
await copy_template_files(templateDir, projectDir);
|
|
36
36
|
|
|
@@ -33,7 +33,7 @@ export async function validation_installer(
|
|
|
33
33
|
async function install_zod(projectDir: string): Promise<void> {
|
|
34
34
|
const templateDir = path.resolve(
|
|
35
35
|
__dirname,
|
|
36
|
-
"
|
|
36
|
+
"templates/extras/validation/zod"
|
|
37
37
|
);
|
|
38
38
|
await copy_template_files(templateDir, projectDir);
|
|
39
39
|
|
|
@@ -45,7 +45,7 @@ async function install_zod(projectDir: string): Promise<void> {
|
|
|
45
45
|
async function install_yup(projectDir: string): Promise<void> {
|
|
46
46
|
const templateDir = path.resolve(
|
|
47
47
|
__dirname,
|
|
48
|
-
"
|
|
48
|
+
"templates/extras/validation/yup"
|
|
49
49
|
);
|
|
50
50
|
await copy_template_files(templateDir, projectDir);
|
|
51
51
|
|