create-coreback 1.0.1 → 1.0.3

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.
@@ -1 +1 @@
1
- {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAgC,MAAM,YAAY,CAAC;AAEzE,wBAAsB,mBAAmB,CACvC,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,aAAa,CAAC,CAsDxB"}
1
+ {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAgC,MAAM,YAAY,CAAC;AAEzE,wBAAsB,mBAAmB,CACvC,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,aAAa,CAAC,CAqExB"}
package/dist/prompts.js CHANGED
@@ -1,22 +1,32 @@
1
1
  import inquirer from 'inquirer';
2
2
  export async function promptProjectConfig(defaultName) {
3
+ // If project name is provided as argument, use it directly without prompting
4
+ const projectName = defaultName
5
+ ? defaultName.toLowerCase().trim()
6
+ : undefined;
7
+ // Validate the provided name if it exists
8
+ if (projectName) {
9
+ if (!/^[a-z0-9-]+$/.test(projectName)) {
10
+ throw new Error('Project name must be lowercase, alphanumeric, and can contain hyphens');
11
+ }
12
+ }
3
13
  const answers = await inquirer.prompt([
4
- {
5
- type: 'input',
6
- name: 'projectName',
7
- message: 'Project name:',
8
- default: defaultName || 'my-backend',
9
- validate: (input) => {
10
- if (!input.trim()) {
11
- return 'Project name cannot be empty';
12
- }
13
- if (!/^[a-z0-9-]+$/.test(input)) {
14
- return 'Project name must be lowercase, alphanumeric, and can contain hyphens';
15
- }
16
- return true;
17
- },
18
- filter: (input) => input.toLowerCase().trim(),
19
- },
14
+ ...(projectName ? [] : [{
15
+ type: 'input',
16
+ name: 'projectName',
17
+ message: 'Project name:',
18
+ default: 'my-project',
19
+ validate: (input) => {
20
+ if (!input.trim()) {
21
+ return 'Project name cannot be empty';
22
+ }
23
+ if (!/^[a-z0-9-]+$/.test(input)) {
24
+ return 'Project name must be lowercase, alphanumeric, and can contain hyphens';
25
+ }
26
+ return true;
27
+ },
28
+ filter: (input) => input.toLowerCase().trim(),
29
+ }]),
20
30
  {
21
31
  type: 'list',
22
32
  name: 'database',
@@ -51,6 +61,9 @@ export async function promptProjectConfig(defaultName) {
51
61
  ],
52
62
  },
53
63
  ]);
54
- return answers;
64
+ return {
65
+ ...answers,
66
+ projectName: projectName || answers.projectName,
67
+ };
55
68
  }
56
69
  //# sourceMappingURL=prompts.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAIhC,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,WAAoB;IAEpB,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;QACpC;YACE,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,aAAa;YACnB,OAAO,EAAE,eAAe;YACxB,OAAO,EAAE,WAAW,IAAI,YAAY;YACpC,QAAQ,EAAE,CAAC,KAAa,EAAE,EAAE;gBAC1B,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;oBAClB,OAAO,8BAA8B,CAAC;gBACxC,CAAC;gBACD,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;oBAChC,OAAO,uEAAuE,CAAC;gBACjF,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC;YACD,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE;SACtD;QACD;YACE,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE,kBAAkB;YAC3B,OAAO,EAAE;gBACP,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE;gBAC3C,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE;gBACjC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;gBACrC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;aACpC;SACF;QACD;YACE,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,aAAa;YACnB,OAAO,EAAE,6BAA6B;YACtC,OAAO,EAAE,IAAI;SACd;QACD;YACE,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,eAAe;YACrB,OAAO,EAAE,+BAA+B;YACxC,OAAO,EAAE,IAAI;SACd;QACD;YACE,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,gBAAgB;YACtB,OAAO,EAAE,yBAAyB;YAClC,OAAO,EAAE;gBACP,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;gBAC7B,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;gBAC/B,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;aAChC;SACF;KACF,CAAC,CAAC;IAEH,OAAO,OAAwB,CAAC;AAClC,CAAC"}
1
+ {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAIhC,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,WAAoB;IAEpB,6EAA6E;IAC7E,MAAM,WAAW,GAAG,WAAW;QAC7B,CAAC,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE;QAClC,CAAC,CAAC,SAAS,CAAC;IAEd,0CAA0C;IAC1C,IAAI,WAAW,EAAE,CAAC;QAChB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;YACtC,MAAM,IAAI,KAAK,CAAC,uEAAuE,CAAC,CAAC;QAC3F,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;QACpC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBACtB,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,aAAa;gBACnB,OAAO,EAAE,eAAe;gBACxB,OAAO,EAAE,YAAY;gBACrB,QAAQ,EAAE,CAAC,KAAa,EAAE,EAAE;oBAC1B,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;wBAClB,OAAO,8BAA8B,CAAC;oBACxC,CAAC;oBACD,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;wBAChC,OAAO,uEAAuE,CAAC;oBACjF,CAAC;oBACD,OAAO,IAAI,CAAC;gBACd,CAAC;gBACD,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE;aACtD,CAAC,CAAC;QACH;YACE,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE,kBAAkB;YAC3B,OAAO,EAAE;gBACP,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE;gBAC3C,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE;gBACjC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;gBACrC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;aACpC;SACF;QACD;YACE,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,aAAa;YACnB,OAAO,EAAE,6BAA6B;YACtC,OAAO,EAAE,IAAI;SACd;QACD;YACE,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,eAAe;YACrB,OAAO,EAAE,+BAA+B;YACxC,OAAO,EAAE,IAAI;SACd;QACD;YACE,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,gBAAgB;YACtB,OAAO,EAAE,yBAAyB;YAClC,OAAO,EAAE;gBACP,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;gBAC7B,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;gBAC/B,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;aAChC;SACF;KACF,CAAC,CAAC;IAEH,OAAO;QACL,GAAG,OAAO;QACV,WAAW,EAAE,WAAW,IAAI,OAAO,CAAC,WAAW;KAC/B,CAAC;AACrB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-coreback",
3
- "version": "1.0.1",
3
+ "version": "1.0.3",
4
4
  "description": "CLI to generate production-ready backend projects with Node.js, TypeScript and Express",
5
5
  "type": "module",
6
6
  "bin": {
@@ -0,0 +1,2 @@
1
+ onlyBuiltDependencies:
2
+ - esbuild
@@ -35,6 +35,15 @@ DATABASE_URL="${databaseUrl}"
35
35
  # JWT
36
36
  JWT_SECRET=your-super-secret-key-change-this-in-production
37
37
  JWT_EXPIRES_IN=7d
38
+
39
+ # Email (Optional - if not configured, uses test account)
40
+ # EMAIL_HOST=smtp.gmail.com
41
+ # EMAIL_PORT=587
42
+ # EMAIL_SECURE=false
43
+ # EMAIL_USER=your-email@gmail.com
44
+ # EMAIL_PASSWORD=your-app-password
45
+ EMAIL_FROM=noreply@coreback.app
46
+ APP_URL=http://localhost:3000
38
47
  `;
39
48
  }
40
49
 
@@ -7,45 +7,47 @@ export async function generatePackageJson(
7
7
  config: ProjectConfig
8
8
  ): Promise<void> {
9
9
  const dependencies: Record<string, string> = {
10
- express: '^4.18.2',
11
- 'express-rate-limit': '^7.1.5',
10
+ express: '^4.21.1',
11
+ 'express-rate-limit': '^8.2.1',
12
12
  cors: '^2.8.5',
13
- helmet: '^7.1.0',
14
- compression: '^1.7.4',
15
- dotenv: '^16.4.1',
16
- zod: '^3.22.4',
17
- winston: '^3.11.0',
18
- '@prisma/client': '^5.9.1',
13
+ helmet: '^8.1.0',
14
+ compression: '^1.8.1',
15
+ dotenv: '^17.2.3',
16
+ zod: '^3.25.76',
17
+ winston: '^3.19.0',
18
+ '@prisma/client': '^5.22.0',
19
19
  'swagger-jsdoc': '^6.2.8',
20
- 'swagger-ui-express': '^5.0.0',
20
+ 'swagger-ui-express': '^5.0.1',
21
21
  };
22
22
 
23
23
  if (config.includeAuth) {
24
24
  dependencies['jsonwebtoken'] = '^9.0.2';
25
25
  dependencies['bcrypt'] = '^5.1.1';
26
+ dependencies['nodemailer'] = '^6.9.8';
26
27
  }
27
28
 
28
29
  const devDependencies: Record<string, string> = {
29
- '@types/express': '^4.17.21',
30
- '@types/cors': '^2.8.17',
31
- '@types/compression': '^1.7.5',
32
- '@types/node': '^20.11.5',
33
- '@types/jsonwebtoken': '^9.0.5',
30
+ '@types/express': '^4.17.25',
31
+ '@types/cors': '^2.8.19',
32
+ '@types/compression': '^1.8.1',
33
+ '@types/node': '^20.19.27',
34
+ '@types/jsonwebtoken': '^9.0.10',
34
35
  '@types/bcrypt': '^5.0.2',
36
+ '@types/nodemailer': '^6.4.14',
35
37
  '@types/swagger-jsdoc': '^6.0.4',
36
- '@types/swagger-ui-express': '^4.1.6',
37
- '@types/jest': '^29.5.11',
38
- '@types/supertest': '^6.0.2',
39
- '@typescript-eslint/eslint-plugin': '^6.19.1',
40
- '@typescript-eslint/parser': '^6.19.1',
41
- eslint: '^8.56.0',
42
- prettier: '^3.2.4',
43
- 'ts-jest': '^29.1.2',
44
- jest: '^29.7.0',
45
- supertest: '^6.3.4',
46
- tsx: '^4.7.1',
47
- typescript: '^5.3.3',
48
- prisma: '^5.9.1',
38
+ '@types/swagger-ui-express': '^4.1.8',
39
+ '@types/jest': '^29.5.14',
40
+ '@types/supertest': '^6.0.3',
41
+ '@typescript-eslint/eslint-plugin': '^8.50.1',
42
+ '@typescript-eslint/parser': '^8.50.1',
43
+ eslint: '^8.57.1',
44
+ prettier: '^3.7.4',
45
+ 'ts-jest': '^29.4.6',
46
+ jest: '^30.2.0',
47
+ supertest: '^7.1.4',
48
+ tsx: '^4.21.0',
49
+ typescript: '^5.9.3',
50
+ prisma: '^5.22.0',
49
51
  };
50
52
 
51
53
  const packageJson = {
@@ -52,7 +52,12 @@ model User {
52
52
  `;
53
53
 
54
54
  if (config.includeAuth) {
55
- schema += ` password String
55
+ schema += ` password String
56
+ emailVerified Boolean @default(false)
57
+ emailVerificationToken String?
58
+ emailVerificationExpires DateTime?
59
+ passwordResetToken String?
60
+ passwordResetExpires DateTime?
56
61
  `;
57
62
  }
58
63