better-ts-stack 0.1.1 → 1.1.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/README.md +12 -6
- package/dist/builder/configGenerator.d.ts.map +1 -1
- package/dist/builder/configGenerator.js +30 -24
- package/dist/builder/configGenerator.js.map +1 -1
- package/dist/builder/dependencyInstaller.d.ts.map +1 -1
- package/dist/builder/dependencyInstaller.js +1 -10
- package/dist/builder/dependencyInstaller.js.map +1 -1
- package/dist/builder/index.d.ts.map +1 -1
- package/dist/builder/index.js +3 -7
- package/dist/builder/index.js.map +1 -1
- package/dist/builder/moduleSelector.d.ts.map +1 -1
- package/dist/builder/moduleSelector.js +1 -1
- package/dist/builder/moduleSelector.js.map +1 -1
- package/dist/builder/templateContext.d.ts +2 -2
- package/dist/builder/templateContext.d.ts.map +1 -1
- package/dist/builder/templateContext.js +1 -3
- package/dist/builder/templateContext.js.map +1 -1
- package/dist/modules/registry.d.ts.map +1 -1
- package/dist/modules/registry.js +2 -5
- package/dist/modules/registry.js.map +1 -1
- package/dist/output/nextSteps.d.ts.map +1 -1
- package/dist/output/nextSteps.js +7 -34
- package/dist/output/nextSteps.js.map +1 -1
- package/dist/prompts/index.d.ts.map +1 -1
- package/dist/prompts/index.js +3 -14
- package/dist/prompts/index.js.map +1 -1
- package/dist/prompts/stack.d.ts +3 -0
- package/dist/prompts/stack.d.ts.map +1 -0
- package/dist/prompts/stack.js +77 -0
- package/dist/prompts/stack.js.map +1 -0
- package/dist/types/index.d.ts +12 -10
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +6 -10
- package/dist/types/index.js.map +1 -1
- package/dist/validators/index.d.ts +1 -1
- package/dist/validators/index.d.ts.map +1 -1
- package/dist/validators/index.js +1 -1
- package/package.json +12 -12
- package/templates/backend/express/config.json +44 -42
- package/templates/backend/express/eslint.config.mjs +40 -31
- package/templates/backend/express/src/index.ts +61 -46
- package/templates/backend/express/src/routes/health.ts +12 -12
- package/templates/backend/express/tsconfig.json +25 -23
- package/templates/frontend/nextjs/config.json +33 -27
- package/templates/frontend/nextjs/eslint.config.mjs +11 -11
- package/templates/frontend/nextjs/proxy.ts.hbs +9 -8
- package/templates/frontend/nextjs/tsconfig.json +34 -21
- package/templates/frontend/tanstack/components.json +18 -0
- package/templates/frontend/tanstack/config.json +49 -0
- package/templates/frontend/tanstack/eslint.config.mjs +23 -0
- package/templates/frontend/tanstack/gitignore +38 -0
- package/templates/frontend/tanstack/public/favicon.svg +7 -0
- package/templates/frontend/tanstack/src/components/ui/button.tsx +51 -0
- package/templates/frontend/tanstack/src/components/ui/card.tsx +60 -0
- package/templates/frontend/tanstack/src/components/ui/field.tsx +67 -0
- package/templates/frontend/tanstack/src/components/ui/input.tsx +18 -0
- package/templates/frontend/tanstack/src/lib/utils.ts +6 -0
- package/templates/frontend/tanstack/src/routeTree.gen.ts +68 -0
- package/templates/frontend/tanstack/src/router.tsx +32 -0
- package/templates/frontend/tanstack/src/routes/__root.tsx +70 -0
- package/templates/frontend/tanstack/src/routes/index.tsx.hbs +102 -0
- package/templates/frontend/tanstack/src/styles/app.css +85 -0
- package/templates/frontend/tanstack/tsconfig.json +22 -0
- package/templates/frontend/tanstack/vite.config.ts +14 -0
- package/templates/modules/auth/express/config.json +26 -1
- package/templates/modules/auth/express/src/routes/auth.ts.hbs +1 -1
- package/templates/modules/auth/express/src/services/userStore.ts.hbs +95 -107
- package/templates/modules/auth/nextjs/config.json +6 -6
- package/templates/modules/auth/nextjs/lib/auth.ts.hbs +34 -32
- package/templates/modules/auth/tanstack/config.json +33 -0
- package/templates/modules/auth/tanstack/src/components/auth/sign-in-form.tsx +135 -0
- package/templates/modules/auth/tanstack/src/components/auth/sign-out-button.tsx +49 -0
- package/templates/modules/auth/tanstack/src/components/auth/sign-up-form.tsx +153 -0
- package/templates/modules/auth/tanstack/src/lib/auth-client.ts +3 -0
- package/templates/modules/auth/tanstack/src/lib/auth-functions.ts +12 -0
- package/templates/modules/auth/tanstack/src/lib/auth-schema.ts +39 -0
- package/templates/modules/auth/tanstack/src/lib/auth.ts.hbs +38 -0
- package/templates/modules/auth/tanstack/src/routeTree.gen.ts +140 -0
- package/templates/modules/auth/tanstack/src/routes/api/auth/$.ts +16 -0
- package/templates/modules/auth/tanstack/src/routes/dashboard.tsx +111 -0
- package/templates/modules/auth/tanstack/src/routes/sign-in.tsx +37 -0
- package/templates/modules/auth/tanstack/src/routes/sign-up.tsx +37 -0
- package/templates/modules/docker/.dockerignore +14 -13
- package/templates/modules/docker/Dockerfile.hbs +64 -9
- package/templates/modules/docker/config.json +19 -16
- package/templates/modules/docker/docker-compose.yml.hbs +9 -9
- package/templates/modules/drizzle/express/config.json +27 -0
- package/templates/modules/drizzle/express/drizzle.config.ts +13 -0
- package/templates/modules/drizzle/express/src/lib/db.ts +13 -0
- package/templates/modules/drizzle/express/src/lib/schema.ts +10 -0
- package/templates/modules/drizzle/nextjs/config.json +27 -19
- package/templates/modules/drizzle/nextjs/lib/db.ts +3 -1
- package/templates/modules/drizzle/nextjs/lib/schema.ts.hbs +84 -84
- package/templates/modules/drizzle/tanstack/config.json +26 -0
- package/templates/modules/drizzle/tanstack/drizzle.config.ts +13 -0
- package/templates/modules/drizzle/tanstack/src/lib/db.ts +13 -0
- package/templates/modules/drizzle/tanstack/src/lib/schema.ts.hbs +84 -0
- package/templates/modules/mongoose/config.json +16 -16
- package/templates/modules/mongoose/src/lib/db.ts.hbs +0 -13
- package/templates/modules/mongoose/src/models/User.ts +48 -47
- package/templates/modules/prisma/express/config.json +27 -21
- package/templates/modules/prisma/express/prisma/schema.prisma +3 -2
- package/templates/modules/prisma/express/prisma.config.ts +12 -13
- package/templates/modules/prisma/express/src/lib/prisma.ts +24 -37
- package/templates/modules/prisma/nextjs/config.json +28 -23
- package/templates/modules/prisma/nextjs/prisma/schema.prisma.hbs +91 -90
- package/templates/modules/prisma/tanstack/config.json +28 -0
- package/templates/modules/prisma/tanstack/prisma/schema.prisma.hbs +91 -0
- package/templates/modules/prisma/tanstack/prisma.config.ts +12 -0
- package/templates/modules/prisma/tanstack/src/lib/prisma.ts +18 -0
- package/dist/prompts/backend/index.d.ts +0 -3
- package/dist/prompts/backend/index.d.ts.map +0 -1
- package/dist/prompts/backend/index.js +0 -128
- package/dist/prompts/backend/index.js.map +0 -1
- package/dist/prompts/frontend/index.d.ts +0 -3
- package/dist/prompts/frontend/index.d.ts.map +0 -1
- package/dist/prompts/frontend/index.js +0 -111
- package/dist/prompts/frontend/index.js.map +0 -1
|
@@ -1,90 +1,91 @@
|
|
|
1
|
-
// Prisma schema file
|
|
2
|
-
// Learn more: https://pris.ly/d/prisma-schema
|
|
3
|
-
|
|
4
|
-
generator client {
|
|
5
|
-
provider = "prisma-client
|
|
6
|
-
output = "../generated
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
datasource db {
|
|
10
|
-
provider = "postgresql"
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
{{#if useAuth}}
|
|
14
|
-
|
|
15
|
-
model User {
|
|
16
|
-
id String @id
|
|
17
|
-
name String
|
|
18
|
-
email String
|
|
19
|
-
emailVerified Boolean @default(false)
|
|
20
|
-
image String?
|
|
21
|
-
createdAt DateTime @default(now())
|
|
22
|
-
updatedAt DateTime @updatedAt
|
|
23
|
-
sessions Session[]
|
|
24
|
-
accounts Account[]
|
|
25
|
-
|
|
26
|
-
@@unique([email])
|
|
27
|
-
@@map("user")
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
model Session {
|
|
31
|
-
id String @id
|
|
32
|
-
expiresAt DateTime
|
|
33
|
-
token String
|
|
34
|
-
createdAt DateTime @default(now())
|
|
35
|
-
updatedAt DateTime @updatedAt
|
|
36
|
-
ipAddress String?
|
|
37
|
-
userAgent String?
|
|
38
|
-
userId String
|
|
39
|
-
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
|
40
|
-
|
|
41
|
-
@@unique([token])
|
|
42
|
-
@@index([userId])
|
|
43
|
-
@@map("session")
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
model Account {
|
|
47
|
-
id String @id
|
|
48
|
-
accountId String
|
|
49
|
-
providerId String
|
|
50
|
-
userId String
|
|
51
|
-
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
|
52
|
-
accessToken String?
|
|
53
|
-
refreshToken String?
|
|
54
|
-
idToken String?
|
|
55
|
-
accessTokenExpiresAt DateTime?
|
|
56
|
-
refreshTokenExpiresAt DateTime?
|
|
57
|
-
scope String?
|
|
58
|
-
password String?
|
|
59
|
-
createdAt DateTime @default(now())
|
|
60
|
-
updatedAt DateTime @updatedAt
|
|
61
|
-
|
|
62
|
-
@@index([userId])
|
|
63
|
-
@@
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
@@
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
1
|
+
// Prisma schema file
|
|
2
|
+
// Learn more: https://pris.ly/d/prisma-schema
|
|
3
|
+
|
|
4
|
+
generator client {
|
|
5
|
+
provider = "prisma-client"
|
|
6
|
+
output = "../generated"
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
datasource db {
|
|
10
|
+
provider = "postgresql"
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
{{#if useAuth}}
|
|
14
|
+
|
|
15
|
+
model User {
|
|
16
|
+
id String @id
|
|
17
|
+
name String
|
|
18
|
+
email String
|
|
19
|
+
emailVerified Boolean @default(false)
|
|
20
|
+
image String?
|
|
21
|
+
createdAt DateTime @default(now())
|
|
22
|
+
updatedAt DateTime @updatedAt
|
|
23
|
+
sessions Session[]
|
|
24
|
+
accounts Account[]
|
|
25
|
+
|
|
26
|
+
@@unique([email])
|
|
27
|
+
@@map("user")
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
model Session {
|
|
31
|
+
id String @id
|
|
32
|
+
expiresAt DateTime
|
|
33
|
+
token String
|
|
34
|
+
createdAt DateTime @default(now())
|
|
35
|
+
updatedAt DateTime @updatedAt
|
|
36
|
+
ipAddress String?
|
|
37
|
+
userAgent String?
|
|
38
|
+
userId String
|
|
39
|
+
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
|
40
|
+
|
|
41
|
+
@@unique([token])
|
|
42
|
+
@@index([userId])
|
|
43
|
+
@@map("session")
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
model Account {
|
|
47
|
+
id String @id
|
|
48
|
+
accountId String
|
|
49
|
+
providerId String
|
|
50
|
+
userId String
|
|
51
|
+
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
|
52
|
+
accessToken String?
|
|
53
|
+
refreshToken String?
|
|
54
|
+
idToken String?
|
|
55
|
+
accessTokenExpiresAt DateTime?
|
|
56
|
+
refreshTokenExpiresAt DateTime?
|
|
57
|
+
scope String?
|
|
58
|
+
password String?
|
|
59
|
+
createdAt DateTime @default(now())
|
|
60
|
+
updatedAt DateTime @updatedAt
|
|
61
|
+
|
|
62
|
+
@@index([userId])
|
|
63
|
+
@@unique([providerId, accountId])
|
|
64
|
+
@@map("account")
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
model Verification {
|
|
68
|
+
id String @id
|
|
69
|
+
identifier String
|
|
70
|
+
value String
|
|
71
|
+
expiresAt DateTime
|
|
72
|
+
createdAt DateTime @default(now())
|
|
73
|
+
updatedAt DateTime @updatedAt
|
|
74
|
+
|
|
75
|
+
@@index([identifier])
|
|
76
|
+
@@map("verification")
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
{{else}}
|
|
80
|
+
// Sample User model
|
|
81
|
+
model User {
|
|
82
|
+
id String @id @default(uuid())
|
|
83
|
+
email String @unique
|
|
84
|
+
name String?
|
|
85
|
+
password String
|
|
86
|
+
createdAt DateTime @default(now())
|
|
87
|
+
updatedAt DateTime @updatedAt
|
|
88
|
+
|
|
89
|
+
@@map("users")
|
|
90
|
+
}
|
|
91
|
+
{{/if}}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "prisma",
|
|
3
|
+
"name": "Prisma ORM",
|
|
4
|
+
"description": "Prisma ORM for TanStack Start with PostgreSQL",
|
|
5
|
+
"type": "database",
|
|
6
|
+
"dependencies": {
|
|
7
|
+
"@prisma/client": "^7.10.0",
|
|
8
|
+
"@prisma/adapter-pg": "^7.10.0"
|
|
9
|
+
},
|
|
10
|
+
"devDependencies": {
|
|
11
|
+
"prisma": "^7.10.0",
|
|
12
|
+
"dotenv": "^17.4.2"
|
|
13
|
+
},
|
|
14
|
+
"scripts": {
|
|
15
|
+
"prisma:generate": "prisma generate",
|
|
16
|
+
"prisma:migrate": "prisma migrate dev",
|
|
17
|
+
"prisma:studio": "prisma studio",
|
|
18
|
+
"prebuild": "prisma generate"
|
|
19
|
+
},
|
|
20
|
+
"envVars": {
|
|
21
|
+
"DATABASE_URL": "postgresql://postgres:postgres@localhost:5432/postgres?schema=public"
|
|
22
|
+
},
|
|
23
|
+
"templateFiles": ["prisma/schema.prisma.hbs"],
|
|
24
|
+
"overrides": {
|
|
25
|
+
"deepmerge-ts": "^8.0.2",
|
|
26
|
+
"mysql2": "^3.24.3"
|
|
27
|
+
}
|
|
28
|
+
}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
// Prisma schema file
|
|
2
|
+
// Learn more: https://pris.ly/d/prisma-schema
|
|
3
|
+
|
|
4
|
+
generator client {
|
|
5
|
+
provider = "prisma-client"
|
|
6
|
+
output = "../generated"
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
datasource db {
|
|
10
|
+
provider = "postgresql"
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
{{#if useAuth}}
|
|
14
|
+
|
|
15
|
+
model User {
|
|
16
|
+
id String @id
|
|
17
|
+
name String
|
|
18
|
+
email String
|
|
19
|
+
emailVerified Boolean @default(false)
|
|
20
|
+
image String?
|
|
21
|
+
createdAt DateTime @default(now())
|
|
22
|
+
updatedAt DateTime @updatedAt
|
|
23
|
+
sessions Session[]
|
|
24
|
+
accounts Account[]
|
|
25
|
+
|
|
26
|
+
@@unique([email])
|
|
27
|
+
@@map("user")
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
model Session {
|
|
31
|
+
id String @id
|
|
32
|
+
expiresAt DateTime
|
|
33
|
+
token String
|
|
34
|
+
createdAt DateTime @default(now())
|
|
35
|
+
updatedAt DateTime @updatedAt
|
|
36
|
+
ipAddress String?
|
|
37
|
+
userAgent String?
|
|
38
|
+
userId String
|
|
39
|
+
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
|
40
|
+
|
|
41
|
+
@@unique([token])
|
|
42
|
+
@@index([userId])
|
|
43
|
+
@@map("session")
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
model Account {
|
|
47
|
+
id String @id
|
|
48
|
+
accountId String
|
|
49
|
+
providerId String
|
|
50
|
+
userId String
|
|
51
|
+
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
|
|
52
|
+
accessToken String?
|
|
53
|
+
refreshToken String?
|
|
54
|
+
idToken String?
|
|
55
|
+
accessTokenExpiresAt DateTime?
|
|
56
|
+
refreshTokenExpiresAt DateTime?
|
|
57
|
+
scope String?
|
|
58
|
+
password String?
|
|
59
|
+
createdAt DateTime @default(now())
|
|
60
|
+
updatedAt DateTime @updatedAt
|
|
61
|
+
|
|
62
|
+
@@index([userId])
|
|
63
|
+
@@unique([providerId, accountId])
|
|
64
|
+
@@map("account")
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
model Verification {
|
|
68
|
+
id String @id
|
|
69
|
+
identifier String
|
|
70
|
+
value String
|
|
71
|
+
expiresAt DateTime
|
|
72
|
+
createdAt DateTime @default(now())
|
|
73
|
+
updatedAt DateTime @updatedAt
|
|
74
|
+
|
|
75
|
+
@@index([identifier])
|
|
76
|
+
@@map("verification")
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
{{else}}
|
|
80
|
+
// Sample User model
|
|
81
|
+
model User {
|
|
82
|
+
id String @id @default(uuid())
|
|
83
|
+
email String @unique
|
|
84
|
+
name String?
|
|
85
|
+
password String
|
|
86
|
+
createdAt DateTime @default(now())
|
|
87
|
+
updatedAt DateTime @updatedAt
|
|
88
|
+
|
|
89
|
+
@@map("users")
|
|
90
|
+
}
|
|
91
|
+
{{/if}}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { PrismaPg } from "@prisma/adapter-pg";
|
|
2
|
+
|
|
3
|
+
import { PrismaClient } from "../../generated/client";
|
|
4
|
+
|
|
5
|
+
const globalForPrisma = global as unknown as {
|
|
6
|
+
prisma: PrismaClient;
|
|
7
|
+
};
|
|
8
|
+
const adapter = new PrismaPg({
|
|
9
|
+
connectionString: process.env.DATABASE_URL,
|
|
10
|
+
});
|
|
11
|
+
const prisma =
|
|
12
|
+
globalForPrisma.prisma ||
|
|
13
|
+
new PrismaClient({
|
|
14
|
+
adapter,
|
|
15
|
+
});
|
|
16
|
+
if (process.env.NODE_ENV !== "production") globalForPrisma.prisma = prisma;
|
|
17
|
+
|
|
18
|
+
export default prisma;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/prompts/backend/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAYL,aAAa,EACd,MAAM,aAAa,CAAC;AAErB,eAAO,MAAM,qBAAqB,QAAa,OAAO,CAAC,aAAa,CAkJnE,CAAC"}
|
|
@@ -1,128 +0,0 @@
|
|
|
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.collectBackendChoices = void 0;
|
|
7
|
-
const prompts_1 = require("@clack/prompts");
|
|
8
|
-
const consola_1 = __importDefault(require("consola"));
|
|
9
|
-
const types_1 = require("../../types");
|
|
10
|
-
const collectBackendChoices = async () => {
|
|
11
|
-
const project = await (0, prompts_1.group)({
|
|
12
|
-
framework: async () => {
|
|
13
|
-
let selection;
|
|
14
|
-
while (!selection) {
|
|
15
|
-
const result = await (0, prompts_1.select)({
|
|
16
|
-
message: "Select a backend framework:",
|
|
17
|
-
options: types_1.backendFrameworkOptions,
|
|
18
|
-
initialValue: "express",
|
|
19
|
-
});
|
|
20
|
-
if ((0, prompts_1.isCancel)(result)) {
|
|
21
|
-
(0, prompts_1.cancel)("Operation cancelled.");
|
|
22
|
-
process.exit(0);
|
|
23
|
-
}
|
|
24
|
-
if (result === "nestjs") {
|
|
25
|
-
consola_1.default.warn("This framework is coming soon! Please select another option.");
|
|
26
|
-
continue;
|
|
27
|
-
}
|
|
28
|
-
selection = result;
|
|
29
|
-
}
|
|
30
|
-
return selection;
|
|
31
|
-
},
|
|
32
|
-
databaseType: async () => {
|
|
33
|
-
const selection = await (0, prompts_1.select)({
|
|
34
|
-
message: "Select a database:",
|
|
35
|
-
options: types_1.databaseTypeOptions,
|
|
36
|
-
initialValue: "none",
|
|
37
|
-
});
|
|
38
|
-
if ((0, prompts_1.isCancel)(selection)) {
|
|
39
|
-
(0, prompts_1.cancel)("Operation cancelled.");
|
|
40
|
-
process.exit(0);
|
|
41
|
-
}
|
|
42
|
-
return selection;
|
|
43
|
-
},
|
|
44
|
-
orm: async ({ results }) => {
|
|
45
|
-
// Type guard to narrow the databaseType from unknown to DatabaseType
|
|
46
|
-
const dbType = results.databaseType;
|
|
47
|
-
// Skip ORM selection if no database type was selected
|
|
48
|
-
if (dbType === "none") {
|
|
49
|
-
return "none";
|
|
50
|
-
}
|
|
51
|
-
// Type guard: at this point, dbType must be mongodb or postgresql
|
|
52
|
-
if (dbType !== "mongodb" && dbType !== "postgresql") {
|
|
53
|
-
throw new Error(`Invalid database type: ${dbType}`);
|
|
54
|
-
}
|
|
55
|
-
// Select appropriate ORM options based on database type
|
|
56
|
-
const ormOptions = dbType === "mongodb" ? types_1.mongodbOrmOptions : types_1.postgresqlOrmOptions;
|
|
57
|
-
const selection = await (0, prompts_1.select)({
|
|
58
|
-
message: `Select an ORM for ${dbType}:`,
|
|
59
|
-
options: ormOptions,
|
|
60
|
-
initialValue: "prisma",
|
|
61
|
-
});
|
|
62
|
-
if ((0, prompts_1.isCancel)(selection)) {
|
|
63
|
-
(0, prompts_1.cancel)("Operation cancelled.");
|
|
64
|
-
process.exit(0);
|
|
65
|
-
}
|
|
66
|
-
return selection;
|
|
67
|
-
},
|
|
68
|
-
packageManager: async () => {
|
|
69
|
-
const selection = await (0, prompts_1.select)({
|
|
70
|
-
message: "Select a package manager:",
|
|
71
|
-
options: types_1.packageManagerOptions,
|
|
72
|
-
initialValue: "npm",
|
|
73
|
-
});
|
|
74
|
-
if ((0, prompts_1.isCancel)(selection)) {
|
|
75
|
-
(0, prompts_1.cancel)("Operation cancelled.");
|
|
76
|
-
process.exit(0);
|
|
77
|
-
}
|
|
78
|
-
return selection;
|
|
79
|
-
},
|
|
80
|
-
useDocker: () => (0, prompts_1.confirm)({
|
|
81
|
-
message: "Use Docker?",
|
|
82
|
-
initialValue: false,
|
|
83
|
-
}),
|
|
84
|
-
useAuth: async () => {
|
|
85
|
-
const selection = await (0, prompts_1.select)({
|
|
86
|
-
message: "Add authentication?",
|
|
87
|
-
options: types_1.authOptions,
|
|
88
|
-
initialValue: false,
|
|
89
|
-
});
|
|
90
|
-
if ((0, prompts_1.isCancel)(selection)) {
|
|
91
|
-
(0, prompts_1.cancel)("Operation cancelled.");
|
|
92
|
-
process.exit(0);
|
|
93
|
-
}
|
|
94
|
-
return selection;
|
|
95
|
-
},
|
|
96
|
-
initGit: () => (0, prompts_1.confirm)({
|
|
97
|
-
message: "Initialize a git repository?",
|
|
98
|
-
initialValue: true,
|
|
99
|
-
}),
|
|
100
|
-
installDeps: () => (0, prompts_1.confirm)({
|
|
101
|
-
message: "Install dependencies now?",
|
|
102
|
-
initialValue: false,
|
|
103
|
-
}),
|
|
104
|
-
}, {
|
|
105
|
-
onCancel: () => {
|
|
106
|
-
(0, prompts_1.cancel)("Operation cancelled.");
|
|
107
|
-
process.exit(0);
|
|
108
|
-
},
|
|
109
|
-
});
|
|
110
|
-
// Transform the group result into the proper typed object
|
|
111
|
-
// Validate orm using type guard
|
|
112
|
-
if (!(0, types_1.isValidOrmOption)(project.orm)) {
|
|
113
|
-
throw new Error(`Invalid ORM option: ${String(project.orm)}`);
|
|
114
|
-
}
|
|
115
|
-
const result = {
|
|
116
|
-
framework: project.framework,
|
|
117
|
-
databaseType: project.databaseType,
|
|
118
|
-
orm: project.orm,
|
|
119
|
-
packageManager: project.packageManager,
|
|
120
|
-
useDocker: Boolean(project.useDocker),
|
|
121
|
-
useAuth: Boolean(project.useAuth),
|
|
122
|
-
initGit: Boolean(project.initGit),
|
|
123
|
-
installDeps: Boolean(project.installDeps),
|
|
124
|
-
};
|
|
125
|
-
return result;
|
|
126
|
-
};
|
|
127
|
-
exports.collectBackendChoices = collectBackendChoices;
|
|
128
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/prompts/backend/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/prompts/frontend/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAWL,aAAa,EACd,MAAM,aAAa,CAAC;AAErB,eAAO,MAAM,sBAAsB,QAAa,OAAO,CAAC,aAAa,CA+HpE,CAAC"}
|
|
@@ -1,111 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.collectFrontendChoices = void 0;
|
|
4
|
-
const prompts_1 = require("@clack/prompts");
|
|
5
|
-
const types_1 = require("../../types");
|
|
6
|
-
const collectFrontendChoices = async () => {
|
|
7
|
-
const project = await (0, prompts_1.group)({
|
|
8
|
-
framework: async () => {
|
|
9
|
-
// Auto-select Next.js since it's the only option
|
|
10
|
-
return Promise.resolve("nextjs");
|
|
11
|
-
},
|
|
12
|
-
databaseType: async () => {
|
|
13
|
-
const selection = await (0, prompts_1.select)({
|
|
14
|
-
message: "Select a database:",
|
|
15
|
-
options: types_1.databaseTypeOptions,
|
|
16
|
-
initialValue: "none",
|
|
17
|
-
});
|
|
18
|
-
if ((0, prompts_1.isCancel)(selection)) {
|
|
19
|
-
(0, prompts_1.cancel)("Operation cancelled.");
|
|
20
|
-
process.exit(0);
|
|
21
|
-
}
|
|
22
|
-
return selection;
|
|
23
|
-
},
|
|
24
|
-
orm: async ({ results }) => {
|
|
25
|
-
// Type guard to narrow the databaseType from unknown to DatabaseType
|
|
26
|
-
const dbType = results.databaseType;
|
|
27
|
-
// Skip ORM selection if no database type was selected
|
|
28
|
-
if (dbType === "none") {
|
|
29
|
-
return "none";
|
|
30
|
-
}
|
|
31
|
-
// Select ORM based on database type
|
|
32
|
-
if (dbType !== "mongodb" && dbType !== "postgresql") {
|
|
33
|
-
return "none";
|
|
34
|
-
}
|
|
35
|
-
const ormOptions = dbType === "mongodb" ? types_1.mongodbOrmOptions : types_1.postgresqlOrmOptions;
|
|
36
|
-
const selection = await (0, prompts_1.select)({
|
|
37
|
-
message: `Select an ORM for ${dbType}:`,
|
|
38
|
-
options: ormOptions,
|
|
39
|
-
initialValue: "prisma",
|
|
40
|
-
});
|
|
41
|
-
if ((0, prompts_1.isCancel)(selection)) {
|
|
42
|
-
(0, prompts_1.cancel)("Operation cancelled.");
|
|
43
|
-
process.exit(0);
|
|
44
|
-
}
|
|
45
|
-
return selection;
|
|
46
|
-
},
|
|
47
|
-
packageManager: async () => {
|
|
48
|
-
const selection = await (0, prompts_1.select)({
|
|
49
|
-
message: "Select a package manager:",
|
|
50
|
-
options: types_1.packageManagerOptions,
|
|
51
|
-
initialValue: "npm",
|
|
52
|
-
});
|
|
53
|
-
if ((0, prompts_1.isCancel)(selection)) {
|
|
54
|
-
(0, prompts_1.cancel)("Operation cancelled.");
|
|
55
|
-
process.exit(0);
|
|
56
|
-
}
|
|
57
|
-
return selection;
|
|
58
|
-
},
|
|
59
|
-
useDocker: () => (0, prompts_1.confirm)({
|
|
60
|
-
message: "Use Docker?",
|
|
61
|
-
initialValue: false,
|
|
62
|
-
}),
|
|
63
|
-
useAuth: async ({ results }) => {
|
|
64
|
-
// Better Auth template requires a database-backed adapter
|
|
65
|
-
if (results.databaseType === "none") {
|
|
66
|
-
return false;
|
|
67
|
-
}
|
|
68
|
-
const selection = await (0, prompts_1.select)({
|
|
69
|
-
message: "Add Better Auth?",
|
|
70
|
-
options: types_1.authOptions,
|
|
71
|
-
initialValue: false,
|
|
72
|
-
});
|
|
73
|
-
if ((0, prompts_1.isCancel)(selection)) {
|
|
74
|
-
(0, prompts_1.cancel)("Operation cancelled.");
|
|
75
|
-
process.exit(0);
|
|
76
|
-
}
|
|
77
|
-
return selection;
|
|
78
|
-
},
|
|
79
|
-
initGit: () => (0, prompts_1.confirm)({
|
|
80
|
-
message: "Initialize a git repository?",
|
|
81
|
-
initialValue: true,
|
|
82
|
-
}),
|
|
83
|
-
installDeps: () => (0, prompts_1.confirm)({
|
|
84
|
-
message: "Install dependencies now?",
|
|
85
|
-
initialValue: false,
|
|
86
|
-
}),
|
|
87
|
-
}, {
|
|
88
|
-
onCancel: () => {
|
|
89
|
-
(0, prompts_1.cancel)("Operation cancelled.");
|
|
90
|
-
process.exit(0);
|
|
91
|
-
},
|
|
92
|
-
});
|
|
93
|
-
// Transform the group result into the proper typed object
|
|
94
|
-
// Validate orm using type guard
|
|
95
|
-
if (!(0, types_1.isValidOrmOption)(project.orm)) {
|
|
96
|
-
throw new Error(`Invalid ORM option: ${String(project.orm)}`);
|
|
97
|
-
}
|
|
98
|
-
const result = {
|
|
99
|
-
framework: project.framework,
|
|
100
|
-
databaseType: project.databaseType,
|
|
101
|
-
orm: project.orm,
|
|
102
|
-
packageManager: project.packageManager,
|
|
103
|
-
useDocker: Boolean(project.useDocker),
|
|
104
|
-
useAuth: Boolean(project.useAuth),
|
|
105
|
-
initGit: Boolean(project.initGit),
|
|
106
|
-
installDeps: Boolean(project.installDeps),
|
|
107
|
-
};
|
|
108
|
-
return result;
|
|
109
|
-
};
|
|
110
|
-
exports.collectFrontendChoices = collectFrontendChoices;
|
|
111
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/prompts/frontend/index.ts"],"names":[],"mappings":"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"}
|