deploy-bbc 0.0.1

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 (127) hide show
  1. package/CLAUDE.md +329 -0
  2. package/README.md +0 -0
  3. package/cli/README.md +0 -0
  4. package/cli/package.json +43 -0
  5. package/cli/src/cli/index.ts +449 -0
  6. package/cli/src/helpers/create-project.ts +66 -0
  7. package/cli/src/helpers/generate-docker-compose.ts +133 -0
  8. package/cli/src/helpers/generate-dockerfile.ts +45 -0
  9. package/cli/src/helpers/init-git.ts +33 -0
  10. package/cli/src/helpers/install-dependencies.ts +28 -0
  11. package/cli/src/helpers/log-next-steps.ts +84 -0
  12. package/cli/src/helpers/scaffold-project.ts +62 -0
  13. package/cli/src/index.ts +18 -0
  14. package/cli/src/installers/ai.ts +123 -0
  15. package/cli/src/installers/auth.ts +132 -0
  16. package/cli/src/installers/base.ts +16 -0
  17. package/cli/src/installers/cloud.ts +127 -0
  18. package/cli/src/installers/database.ts +212 -0
  19. package/cli/src/installers/docs.ts +93 -0
  20. package/cli/src/installers/email.ts +119 -0
  21. package/cli/src/installers/env-variables.ts +27 -0
  22. package/cli/src/installers/index.ts +145 -0
  23. package/cli/src/installers/observability.ts +103 -0
  24. package/cli/src/installers/queue.ts +103 -0
  25. package/cli/src/installers/ratelimit.ts +98 -0
  26. package/cli/src/installers/realtime.ts +79 -0
  27. package/cli/src/installers/testing.ts +88 -0
  28. package/cli/src/installers/validation.ts +85 -0
  29. package/cli/src/templates/base/.env.example +3 -0
  30. package/cli/src/templates/base/README.md +31 -0
  31. package/cli/src/templates/base/package.json +20 -0
  32. package/cli/src/templates/base/src/config/index.ts +8 -0
  33. package/cli/src/templates/base/src/index.ts +26 -0
  34. package/cli/src/templates/base/src/middleware/error.ts +13 -0
  35. package/cli/src/templates/base/src/middleware/logger.ts +8 -0
  36. package/cli/src/templates/base/src/routes/index.ts +12 -0
  37. package/cli/src/templates/base/src/types/index.ts +2 -0
  38. package/cli/src/templates/base/src/utils/env.ts +5 -0
  39. package/cli/src/templates/base/tsconfig.json +20 -0
  40. package/cli/src/templates/base-bun-native/.env.example +3 -0
  41. package/cli/src/templates/base-bun-native/README.md +31 -0
  42. package/cli/src/templates/base-bun-native/package.json +19 -0
  43. package/cli/src/templates/base-bun-native/src/config/index.ts +8 -0
  44. package/cli/src/templates/base-bun-native/src/index.ts +50 -0
  45. package/cli/src/templates/base-bun-native/src/middleware/error.ts +20 -0
  46. package/cli/src/templates/base-bun-native/src/middleware/logger.ts +6 -0
  47. package/cli/src/templates/base-bun-native/src/routes/index.ts +21 -0
  48. package/cli/src/templates/base-bun-native/src/types/index.ts +2 -0
  49. package/cli/src/templates/base-bun-native/src/utils/env.ts +5 -0
  50. package/cli/src/templates/base-bun-native/tsconfig.json +20 -0
  51. package/cli/src/templates/base-express/.env.example +3 -0
  52. package/cli/src/templates/base-express/README.md +31 -0
  53. package/cli/src/templates/base-express/package.json +21 -0
  54. package/cli/src/templates/base-express/src/config/index.ts +8 -0
  55. package/cli/src/templates/base-express/src/index.ts +27 -0
  56. package/cli/src/templates/base-express/src/middleware/error.ts +15 -0
  57. package/cli/src/templates/base-express/src/middleware/logger.ts +12 -0
  58. package/cli/src/templates/base-express/src/routes/index.ts +12 -0
  59. package/cli/src/templates/base-express/src/types/index.ts +2 -0
  60. package/cli/src/templates/base-express/src/utils/env.ts +5 -0
  61. package/cli/src/templates/base-express/tsconfig.json +20 -0
  62. package/cli/src/templates/extras/ai/anthropic/src/routes/ai/claude.ts +0 -0
  63. package/cli/src/templates/extras/ai/anthropic/src/services/ai/anthropic.ts +0 -0
  64. package/cli/src/templates/extras/ai/gemini/src/services/ai/gemini.ts +0 -0
  65. package/cli/src/templates/extras/ai/openai/src/routes/ai/chat.ts +0 -0
  66. package/cli/src/templates/extras/ai/openai/src/services/ai/openai.ts +0 -0
  67. package/cli/src/templates/extras/ai/vercel-ai/src/routes/ai/generate.ts +0 -0
  68. package/cli/src/templates/extras/ai/vercel-ai/src/routes/ai/stream.ts +0 -0
  69. package/cli/src/templates/extras/ai/vercel-ai/src/services/ai/index.ts +0 -0
  70. package/cli/src/templates/extras/auth/jwt/src/middleware/auth.ts +0 -0
  71. package/cli/src/templates/extras/auth/jwt/src/routes/auth.ts +0 -0
  72. package/cli/src/templates/extras/auth/jwt/src/utils/jwt.ts +0 -0
  73. package/cli/src/templates/extras/auth/oauth/src/config/oauth.ts +0 -0
  74. package/cli/src/templates/extras/auth/oauth/src/routes/auth.ts +0 -0
  75. package/cli/src/templates/extras/auth/session/src/config/session.ts +0 -0
  76. package/cli/src/templates/extras/auth/session/src/middleware/session.ts +0 -0
  77. package/cli/src/templates/extras/cloud/aws/src/services/aws/s3.ts +0 -0
  78. package/cli/src/templates/extras/cloud/aws/src/services/aws/ses.ts +0 -0
  79. package/cli/src/templates/extras/cloud/azure/src/services/azure/blob.ts +0 -0
  80. package/cli/src/templates/extras/cloud/cloudflare-r2/src/services/cloudflare/r2.ts +0 -0
  81. package/cli/src/templates/extras/cloud/gcp/src/services/gcp/storage.ts +0 -0
  82. package/cli/src/templates/extras/database/mongodb/src/db/index.ts +0 -0
  83. package/cli/src/templates/extras/database/mongodb/src/db/models/user.model.ts +0 -0
  84. package/cli/src/templates/extras/database/mysql/drizzle.config.ts +0 -0
  85. package/cli/src/templates/extras/database/postgres/src/db/index.ts +0 -0
  86. package/cli/src/templates/extras/database/redis/src/db/redis.ts +0 -0
  87. package/cli/src/templates/extras/docs/scalar/src/openapi/index.ts +0 -0
  88. package/cli/src/templates/extras/docs/scalar/src/routes/docs.ts +0 -0
  89. package/cli/src/templates/extras/docs/swagger/src/openapi/index.ts +0 -0
  90. package/cli/src/templates/extras/docs/swagger/src/routes/docs.ts +0 -0
  91. package/cli/src/templates/extras/email/nodemailer/src/services/email/nodemailer.ts +0 -0
  92. package/cli/src/templates/extras/email/resend/src/services/email/resend.ts +0 -0
  93. package/cli/src/templates/extras/email/resend/src/templates/email/welcome.ts +0 -0
  94. package/cli/src/templates/extras/email/sendgrid/src/services/email/sendgrid.ts +0 -0
  95. package/cli/src/templates/extras/observability/logtail/src/config/logger.ts +0 -0
  96. package/cli/src/templates/extras/observability/sentry/src/config/sentry.ts +0 -0
  97. package/cli/src/templates/extras/observability/sentry/src/middleware/sentry.ts +0 -0
  98. package/cli/src/templates/extras/queue/bullmq/src/queue/index.ts +0 -0
  99. package/cli/src/templates/extras/queue/bullmq/src/queue/jobs/email.job.ts +0 -0
  100. package/cli/src/templates/extras/queue/bullmq/src/queue/processors/email.processor.ts +0 -0
  101. package/cli/src/templates/extras/queue/bullmq/src/routes/queue.ts +0 -0
  102. package/cli/src/templates/extras/queue/inngest/src/inngest/client.ts +0 -0
  103. package/cli/src/templates/extras/queue/inngest/src/inngest/functions/email.ts +0 -0
  104. package/cli/src/templates/extras/queue/inngest/src/routes/inngest.ts +0 -0
  105. package/cli/src/templates/extras/realtime/socketio/src/socket/handlers.ts +0 -0
  106. package/cli/src/templates/extras/realtime/socketio/src/socket/index.ts +0 -0
  107. package/cli/src/templates/extras/realtime/sse/src/routes/sse.ts +0 -0
  108. package/cli/src/templates/extras/testing/vitest/src/__tests__/example.test.ts +0 -0
  109. package/cli/src/templates/extras/testing/vitest/src/__tests__/setup.ts +0 -0
  110. package/cli/src/templates/extras/testing/vitest/vitest.config.ts +0 -0
  111. package/cli/src/templates/extras/validation/yup/src/middleware/index.ts +1 -0
  112. package/cli/src/templates/extras/validation/yup/src/middleware/validate.ts +83 -0
  113. package/cli/src/templates/extras/validation/yup/src/routes/users.ts +132 -0
  114. package/cli/src/templates/extras/validation/zod/src/middleware/index.ts +1 -0
  115. package/cli/src/templates/extras/validation/zod/src/middleware/validate.ts +80 -0
  116. package/cli/src/templates/extras/validation/zod/src/routes/users.ts +128 -0
  117. package/cli/src/types/index.ts +126 -0
  118. package/cli/src/utils/add-package-dependency.ts +56 -0
  119. package/cli/src/utils/dependency-version-map.ts +85 -0
  120. package/cli/src/utils/logger.ts +19 -0
  121. package/cli/src/utils/parse-name-and-path.ts +55 -0
  122. package/cli/src/utils/render-title.ts +11 -0
  123. package/cli/tsconfig.json +35 -0
  124. package/package.json +20 -0
  125. package/prettier.config.mjs +0 -0
  126. package/test-cli.sh +56 -0
  127. package/tsconfig.json +15 -0
package/CLAUDE.md ADDED
@@ -0,0 +1,329 @@
1
+ # Project Conventions & Guidelines
2
+
3
+ This document outlines the coding conventions and guidelines for the `create-backend-app` project.
4
+
5
+ ---
6
+
7
+ ## 📁 File & Folder Naming Conventions
8
+
9
+ ### ✅ Use `kebab-case` for ALL files and folders
10
+
11
+ **Files:**
12
+
13
+ ```
14
+ ✅ create-project.ts
15
+ ✅ install-dependencies.ts
16
+ ✅ generate-docker-compose.ts
17
+ ✅ scaffold-project.ts
18
+
19
+ ❌ createProject.ts
20
+ ❌ installDependencies.ts
21
+ ❌ generate_docker_compose.ts
22
+ ```
23
+
24
+ **Folders:**
25
+
26
+ ```
27
+ ✅ src/helpers/
28
+ ✅ src/templates/extras/
29
+ ✅ src/utils/dependency-versions/
30
+ ✅ templates/extras/ai/vercel-ai/
31
+
32
+ ❌ src/Helpers/
33
+ ❌ src/templates_extras/
34
+ ❌ src/utils/dependencyVersions/
35
+ ```
36
+
37
+ **Why kebab-case?**
38
+
39
+ - URL-friendly
40
+ - Case-insensitive filesystem compatible
41
+ - Easy to read
42
+ - Industry standard for file systems
43
+
44
+ ---
45
+
46
+ ## 🔧 Function Naming Conventions
47
+
48
+ ### ✅ Use `snake_case` for ALL function definitions
49
+
50
+ **Functions:**
51
+
52
+ ```typescript
53
+ ✅ export async function create_project(options: CliResults) { }
54
+ ✅ export function install_dependencies(projectDir: string) { }
55
+ ✅ export function generate_dockerfile(options: ProjectOptions) { }
56
+ ✅ function add_package_dependency(pkg: string) { }
57
+
58
+ ❌ export async function createProject(options: CliResults) { }
59
+ ❌ export function installDependencies(projectDir: string) { }
60
+ ❌ export function generateDockerfile(options: ProjectOptions) { }
61
+ ```
62
+
63
+ **Why snake_case?**
64
+
65
+ - Consistent with Python/Rust conventions
66
+ - Clear word separation
67
+ - Easy to read in longer function names
68
+ - Reduces cognitive load when switching between languages
69
+
70
+ ---
71
+
72
+ ## 📝 Variable Naming Conventions
73
+
74
+ ### Use `camelCase` for variables and parameters
75
+
76
+ ```typescript
77
+ ✅ const projectDir = "/path/to/project";
78
+ ✅ const selectedPackages = ["postgres", "redis"];
79
+ ✅ let isInstalling = false;
80
+
81
+ ❌ const project_dir = "/path/to/project";
82
+ ❌ const selected_packages = ["postgres", "redis"];
83
+ ```
84
+
85
+ **Why camelCase for variables?**
86
+
87
+ - TypeScript/JavaScript standard
88
+ - Matches ecosystem conventions
89
+ - Better IDE support
90
+
91
+ ---
92
+
93
+ ## 🎯 Constants
94
+
95
+ ### Use `SCREAMING_SNAKE_CASE` for constants
96
+
97
+ ```typescript
98
+ ✅ const DEFAULT_PORT = 3000;
99
+ ✅ const MAX_RETRIES = 3;
100
+ ✅ const DATABASE_URL = process.env.DATABASE_URL;
101
+
102
+ ❌ const defaultPort = 3000;
103
+ ❌ const maxRetries = 3;
104
+ ```
105
+
106
+ ---
107
+
108
+ ## 📦 Type & Interface Naming
109
+
110
+ ### Use `PascalCase` for types, interfaces, enums, and classes
111
+
112
+ ```typescript
113
+ ✅ interface CliResults { }
114
+ ✅ type InstallerOptions = { }
115
+ ✅ enum AvailablePackages { }
116
+ ✅ class ProjectScaffold { }
117
+
118
+ ❌ interface cli_results { }
119
+ ❌ type installer_options = { }
120
+ ```
121
+
122
+ ---
123
+
124
+ ## 🗂️ Import/Export Conventions
125
+
126
+ ### Named exports preferred over default exports
127
+
128
+ ```typescript
129
+ ✅ export function create_project() { }
130
+ ✅ export const install_dependencies = () => { }
131
+
132
+ ❌ export default function createProject() { }
133
+ ```
134
+
135
+ ### Import organization
136
+
137
+ ```typescript
138
+ // 1. External dependencies
139
+ import chalk from "chalk";
140
+ import * as p from "@clack/prompts";
141
+
142
+ // 2. Internal absolute imports
143
+ import { logger } from "../utils/logger.js";
144
+ import { type CliResults } from "../types/index.js";
145
+
146
+ // 3. Relative imports
147
+ import { create_project } from "./create-project.js";
148
+ ```
149
+
150
+ ---
151
+
152
+ ## 📋 Complete Example
153
+
154
+ ```typescript
155
+ // src/helpers/scaffold-project.ts
156
+
157
+ import path from "path";
158
+ import fs from "fs-extra";
159
+ import { type CliResults, type InstallerOptions } from "../types/index.js";
160
+ import { logger } from "../utils/logger.js";
161
+ import { install_dependencies } from "./install-dependencies.js";
162
+
163
+ const DEFAULT_PROJECT_DIR = process.cwd();
164
+ const TEMPLATE_BASE_PATH = "../templates/base";
165
+
166
+ interface ScaffoldOptions {
167
+ projectDir: string;
168
+ appName: string;
169
+ packages: string[];
170
+ }
171
+
172
+ export async function scaffold_project(options: CliResults): Promise<void> {
173
+ const projectDir = path.resolve(DEFAULT_PROJECT_DIR, options.appName);
174
+
175
+ logger.info(`Creating project at: ${projectDir}`);
176
+
177
+ await create_base_structure(projectDir);
178
+ await copy_template_files(projectDir, options.packages);
179
+
180
+ if (!options.flags.noInstall) {
181
+ await install_dependencies(projectDir);
182
+ }
183
+
184
+ logger.success("✅ Project scaffolded successfully!");
185
+ }
186
+
187
+ async function create_base_structure(projectDir: string): Promise<void> {
188
+ await fs.ensureDir(projectDir);
189
+ await fs.ensureDir(path.join(projectDir, "src"));
190
+ await fs.ensureDir(path.join(projectDir, "src", "routes"));
191
+ }
192
+
193
+ async function copy_template_files(
194
+ projectDir: string,
195
+ packages: string[]
196
+ ): Promise<void> {
197
+ const templatePath = path.resolve(__dirname, TEMPLATE_BASE_PATH);
198
+ await fs.copy(templatePath, projectDir);
199
+ }
200
+
201
+ function get_package_installer(packageName: string) {
202
+ // Implementation
203
+ }
204
+ ```
205
+
206
+ ---
207
+
208
+ ## 🎨 Template File Naming
209
+
210
+ ### Template files should also use kebab-case
211
+
212
+ ```
213
+ ✅ templates/base/src/index.ts
214
+ ✅ templates/extras/database/postgres/src/db/index.ts
215
+ ✅ templates/extras/ai/vercel-ai/src/services/ai/index.ts
216
+ ✅ templates/extras/queue/bullmq/src/queue/email-job.ts
217
+
218
+ ❌ templates/base/src/Index.ts
219
+ ❌ templates/extras/database/postgres/src/db/dbIndex.ts
220
+ ❌ templates/extras/ai/vercel-ai/src/services/ai/aiService.ts
221
+ ```
222
+
223
+ ---
224
+
225
+ ## 🔍 Linting Rules
226
+
227
+ To enforce these conventions, configure ESLint:
228
+
229
+ ```json
230
+ {
231
+ "rules": {
232
+ "camelcase": ["error", {
233
+ "properties": "never",
234
+ "allow": ["^[a-z]+(_[a-z]+)*$"]
235
+ }],
236
+ "@typescript-eslint/naming-convention": [
237
+ "error",
238
+ {
239
+ "selector": "function",
240
+ "format": ["snake_case"]
241
+ },
242
+ {
243
+ "selector": "variable",
244
+ "format": ["camelCase", "UPPER_CASE"]
245
+ },
246
+ {
247
+ "selector": "typeLike",
248
+ "format": ["PascalCase"]
249
+ }
250
+ ]
251
+ }
252
+ }
253
+ ```
254
+
255
+ ---
256
+
257
+ ## 🚫 Common Mistakes to Avoid
258
+
259
+ ### ❌ Don't mix conventions
260
+
261
+ ```typescript
262
+ ❌ function createProject() { } // camelCase function
263
+ ❌ const project_dir = ""; // snake_case variable
264
+ ❌ src/CreateProject.ts // PascalCase file
265
+ ```
266
+
267
+ ### ✅ Do stick to the rules
268
+
269
+ ```typescript
270
+ ✅ function create_project() { } // snake_case function
271
+ ✅ const projectDir = ""; // camelCase variable
272
+ ✅ src/create-project.ts // kebab-case file
273
+ ```
274
+
275
+ ---
276
+
277
+ ## 📚 Summary Table
278
+
279
+ | Element | Convention | Example |
280
+ |---------|-----------|---------|
281
+ | **Files** | `kebab-case` | `create-project.ts` |
282
+ | **Folders** | `kebab-case` | `src/helpers/` |
283
+ | **Functions** | `snake_case` | `function create_project()` |
284
+ | **Variables** | `camelCase` | `const projectDir` |
285
+ | **Constants** | `SCREAMING_SNAKE_CASE` | `const MAX_RETRIES` |
286
+ | **Types/Interfaces** | `PascalCase` | `interface CliResults` |
287
+ | **Enums** | `PascalCase` | `enum AvailablePackages` |
288
+ | **Classes** | `PascalCase` | `class ProjectScaffold` |
289
+
290
+ ---
291
+
292
+ ## 🤝 Contributing
293
+
294
+ When contributing to this project, please:
295
+
296
+ 1. ✅ Follow ALL conventions outlined in this document
297
+ 2. ✅ Run linting before committing: `bun run lint`
298
+ 3. ✅ Format code: `bun run format`
299
+ 4. ✅ Use descriptive commit messages
300
+ 5. ✅ Add JSDoc comments for exported functions
301
+
302
+ ---
303
+
304
+ ## 💡 Rationale
305
+
306
+ These conventions are chosen to:
307
+
308
+ - **Maintain consistency** across the codebase
309
+ - **Improve readability** for all contributors
310
+ - **Reduce cognitive load** when working with multiple languages
311
+ - **Follow industry standards** where applicable
312
+ - **Enable better tooling support**
313
+
314
+ ---
315
+
316
+ ## 📖 References
317
+
318
+ - [Airbnb JavaScript Style Guide](https://github.com/airbnb/javascript)
319
+ - [TypeScript Style Guide](https://google.github.io/styleguide/tsguide.html)
320
+ - [File Naming Conventions](https://github.com/kettanaito/naming-cheatsheet)
321
+
322
+ ---
323
+
324
+ **Last Updated:** January 2026
325
+ **Maintainer:** @yourname
326
+
327
+ ---
328
+
329
+ *Questions or suggestions? Open an issue or PR!*
package/README.md ADDED
File without changes
package/cli/README.md ADDED
File without changes
@@ -0,0 +1,43 @@
1
+ {
2
+ "name": "deploy-bbc",
3
+ "version": "0.0.1",
4
+ "description": "CLI to bootstrap production-ready backends with Bun (Best Backend Code)",
5
+ "type": "module",
6
+ "bin": {
7
+ "deploy-bbc": "./dist/index.js"
8
+ },
9
+ "files": [
10
+ "dist",
11
+ "templates"
12
+ ],
13
+ "scripts": {
14
+ "dev": "bun --watch src/index.ts",
15
+ "build": "bun build src/index.ts --outdir dist --target node",
16
+ "start": "node dist/index.js",
17
+ "type-check": "tsc --noEmit"
18
+ },
19
+ "keywords": [
20
+ "backend",
21
+ "bun",
22
+ "typescript",
23
+ "cli",
24
+ "boilerplate",
25
+ "api"
26
+ ],
27
+ "author": "Your Name",
28
+ "license": "MIT",
29
+ "dependencies": {
30
+ "@clack/prompts": "^0.7.0",
31
+ "chalk": "^5.3.0",
32
+ "commander": "^11.1.0",
33
+ "execa": "^8.0.1",
34
+ "fs-extra": "^11.2.0",
35
+ "ora": "^7.0.1"
36
+ },
37
+ "devDependencies": {
38
+ "@types/bun": "latest",
39
+ "@types/fs-extra": "^11.0.4",
40
+ "@types/node": "^20.10.6",
41
+ "typescript": "^5.3.3"
42
+ }
43
+ }