better-ts-stack 2.1.1 → 2.1.2
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 -21
- package/dist/args.js +6 -0
- package/dist/builder/moduleSelector.js +6 -1
- package/dist/builder/readmeGenerator.js +6 -0
- package/dist/builder/templateContext.js +1 -0
- package/dist/prompts/stack.js +7 -0
- package/dist/types/index.js +2 -0
- package/dist/ui/messages.js +2 -0
- package/package.json +71 -71
- package/templates/backend/express/.prettierignore +52 -52
- package/templates/backend/express/.prettierrc +16 -16
- package/templates/backend/express/gitignore +3 -1
- package/templates/backend/express/tsconfig.eslint.json +9 -9
- package/templates/backend/nestjs/.prettierignore +52 -52
- package/templates/backend/nestjs/gitignore +3 -1
- package/templates/backend/nestjs/tsconfig.eslint.json +9 -9
- package/templates/frontend/nextjs/app/globals.css +89 -89
- package/templates/frontend/nextjs/app/layout.tsx +34 -34
- package/templates/frontend/nextjs/components/ui/button.tsx +51 -51
- package/templates/frontend/nextjs/components/ui/card.tsx +60 -60
- package/templates/frontend/nextjs/components/ui/field.tsx +67 -67
- package/templates/frontend/nextjs/components/ui/input.tsx +18 -18
- package/templates/frontend/nextjs/config.json +35 -35
- package/templates/frontend/nextjs/eslint.config.mjs +11 -11
- package/templates/frontend/nextjs/next.config.ts.hbs +12 -12
- package/templates/frontend/nextjs/postcss.config.mjs +7 -7
- package/templates/frontend/nextjs/public/file.svg +1 -1
- package/templates/frontend/nextjs/public/globe.svg +1 -1
- package/templates/frontend/nextjs/public/window.svg +1 -1
- package/templates/frontend/tanstack/components.json +18 -18
- package/templates/frontend/tanstack/eslint.config.mjs +23 -23
- package/templates/frontend/tanstack/gitignore +39 -39
- package/templates/frontend/tanstack/public/favicon.svg +7 -7
- package/templates/frontend/tanstack/src/components/ui/button.tsx +51 -51
- package/templates/frontend/tanstack/src/components/ui/card.tsx +60 -60
- package/templates/frontend/tanstack/src/components/ui/field.tsx +67 -67
- package/templates/frontend/tanstack/src/components/ui/input.tsx +18 -18
- package/templates/frontend/tanstack/src/lib/utils.ts +6 -6
- package/templates/frontend/tanstack/src/router.tsx +31 -31
- package/templates/frontend/tanstack/src/routes/__root.tsx +69 -69
- package/templates/frontend/tanstack/tsconfig.json +22 -22
- package/templates/modules/agents/AGENTS.md.hbs +237 -0
- package/templates/modules/agents/CLAUDE.md +1 -0
- package/templates/modules/agents/config.json +10 -0
- package/templates/modules/auth/express/src/lib/jwt.ts.hbs +27 -27
- package/templates/modules/auth/nextjs/app/api/auth/[...all]/route.ts +4 -4
- package/templates/modules/auth/nextjs/config.json +18 -18
- package/templates/modules/auth/nextjs/lib/auth-client.ts +3 -3
- package/templates/modules/auth/tanstack/config.json +18 -18
- package/templates/modules/auth/tanstack/src/lib/auth-client.ts +2 -2
- package/templates/modules/auth/tanstack/src/lib/auth-functions.ts +8 -8
- package/templates/modules/auth/tanstack/src/lib/auth.ts.hbs +37 -37
- package/templates/modules/auth/tanstack/src/routes/api/auth/$.ts +15 -15
- package/templates/modules/auth/tanstack/src/routes/dashboard.tsx +110 -110
- package/templates/modules/auth/tanstack/src/routes/sign-in.tsx +36 -36
- package/templates/modules/auth/tanstack/src/routes/sign-up.tsx +36 -36
- package/templates/modules/docker/.dockerignore +2 -0
- package/templates/modules/docker/config.json +15 -15
- package/templates/modules/drizzle/express/config.json +26 -26
- package/templates/modules/drizzle/nestjs/config.json +26 -26
- package/templates/modules/drizzle/nextjs/config.json +26 -26
- package/templates/modules/drizzle/nextjs/drizzle.config.ts +13 -13
- package/templates/modules/drizzle/tanstack/config.json +26 -26
- package/templates/modules/drizzle/tanstack/drizzle.config.ts +12 -12
- package/templates/modules/drizzle/tanstack/src/lib/db.ts +13 -13
- package/templates/modules/mongoose/express/config.json +15 -15
- package/templates/modules/mongoose/express/src/lib/db.ts +43 -43
- package/templates/modules/mongoose/express/src/models/User.ts +48 -48
- package/templates/modules/mongoose/nestjs/config.json +15 -15
- package/templates/modules/mongoose/nextjs/config.json +15 -15
- package/templates/modules/mongoose/nextjs/models/User.ts +48 -48
- package/templates/modules/mongoose/tanstack/config.json +16 -16
- package/templates/modules/mongoose/tanstack/src/models/User.ts +48 -48
- package/templates/modules/prisma/express/config.json +27 -27
- package/templates/modules/prisma/express/prisma/schema.prisma +23 -23
- package/templates/modules/prisma/nestjs/config.json +27 -27
- package/templates/modules/prisma/nextjs/config.json +28 -28
- package/templates/modules/prisma/nextjs/lib/prisma.ts +18 -18
- package/templates/modules/prisma/nextjs/prisma.config.ts +14 -14
- package/templates/modules/prisma/tanstack/config.json +28 -28
- package/templates/modules/prisma/tanstack/prisma/schema.prisma.hbs +91 -91
- package/templates/modules/prisma/tanstack/prisma.config.ts +14 -14
- package/templates/modules/prisma/tanstack/src/lib/prisma.ts +17 -17
- package/templates/modules/vscode/.vscode/extensions.json.hbs +29 -0
- package/templates/modules/vscode/.vscode/settings.json.hbs +22 -0
- package/templates/modules/vscode/config.json +10 -0
|
@@ -1,37 +1,37 @@
|
|
|
1
|
-
import { createFileRoute, redirect } from "@tanstack/react-router";
|
|
2
|
-
|
|
3
|
-
import { SignUpForm } from "~/components/auth/sign-up-form";
|
|
4
|
-
import { getSession } from "~/lib/auth-functions";
|
|
5
|
-
|
|
6
|
-
export const Route = createFileRoute("/sign-up")({
|
|
7
|
-
beforeLoad: async () => {
|
|
8
|
-
const session = await getSession();
|
|
9
|
-
|
|
10
|
-
if (session) {
|
|
11
|
-
throw redirect({ to: "/dashboard" });
|
|
12
|
-
}
|
|
13
|
-
},
|
|
14
|
-
component: SignUpPage,
|
|
15
|
-
});
|
|
16
|
-
|
|
17
|
-
function SignUpPage() {
|
|
18
|
-
return (
|
|
19
|
-
<main className="min-h-screen bg-[radial-gradient(circle_at_top,_rgba(56,189,248,0.18),_transparent_28%),linear-gradient(180deg,_#f8fafc_0%,_#ecfeff_100%)] px-6 py-16 sm:px-10">
|
|
20
|
-
<div className="mx-auto flex min-h-[calc(100vh-8rem)] max-w-5xl items-center gap-12 lg:grid lg:grid-cols-[0.9fr_1.1fr]">
|
|
21
|
-
<section className="hidden space-y-5 lg:block">
|
|
22
|
-
<span className="inline-flex rounded-full border border-sky-200 bg-white/80 px-3 py-1 text-xs font-medium uppercase tracking-[0.24em] text-sky-700">
|
|
23
|
-
Better Auth
|
|
24
|
-
</span>
|
|
25
|
-
<h1 className="text-4xl font-semibold tracking-tight text-slate-950">
|
|
26
|
-
Create your account.
|
|
27
|
-
</h1>
|
|
28
|
-
<p className="max-w-md text-base leading-7 text-slate-600">
|
|
29
|
-
Start with email and password today, then layer in profile data,
|
|
30
|
-
onboarding, and provider-based auth when your product needs it.
|
|
31
|
-
</p>
|
|
32
|
-
</section>
|
|
33
|
-
<SignUpForm />
|
|
34
|
-
</div>
|
|
35
|
-
</main>
|
|
36
|
-
);
|
|
1
|
+
import { createFileRoute, redirect } from "@tanstack/react-router";
|
|
2
|
+
|
|
3
|
+
import { SignUpForm } from "~/components/auth/sign-up-form";
|
|
4
|
+
import { getSession } from "~/lib/auth-functions";
|
|
5
|
+
|
|
6
|
+
export const Route = createFileRoute("/sign-up")({
|
|
7
|
+
beforeLoad: async () => {
|
|
8
|
+
const session = await getSession();
|
|
9
|
+
|
|
10
|
+
if (session) {
|
|
11
|
+
throw redirect({ to: "/dashboard" });
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
component: SignUpPage,
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
function SignUpPage() {
|
|
18
|
+
return (
|
|
19
|
+
<main className="min-h-screen bg-[radial-gradient(circle_at_top,_rgba(56,189,248,0.18),_transparent_28%),linear-gradient(180deg,_#f8fafc_0%,_#ecfeff_100%)] px-6 py-16 sm:px-10">
|
|
20
|
+
<div className="mx-auto flex min-h-[calc(100vh-8rem)] max-w-5xl items-center gap-12 lg:grid lg:grid-cols-[0.9fr_1.1fr]">
|
|
21
|
+
<section className="hidden space-y-5 lg:block">
|
|
22
|
+
<span className="inline-flex rounded-full border border-sky-200 bg-white/80 px-3 py-1 text-xs font-medium uppercase tracking-[0.24em] text-sky-700">
|
|
23
|
+
Better Auth
|
|
24
|
+
</span>
|
|
25
|
+
<h1 className="text-4xl font-semibold tracking-tight text-slate-950">
|
|
26
|
+
Create your account.
|
|
27
|
+
</h1>
|
|
28
|
+
<p className="max-w-md text-base leading-7 text-slate-600">
|
|
29
|
+
Start with email and password today, then layer in profile data,
|
|
30
|
+
onboarding, and provider-based auth when your product needs it.
|
|
31
|
+
</p>
|
|
32
|
+
</section>
|
|
33
|
+
<SignUpForm />
|
|
34
|
+
</div>
|
|
35
|
+
</main>
|
|
36
|
+
);
|
|
37
37
|
}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
{
|
|
2
|
-
"id": "docker",
|
|
3
|
-
"name": "Docker",
|
|
4
|
-
"description": "Docker containerization with multi-stage build and docker-compose",
|
|
5
|
-
"type": "feature",
|
|
6
|
-
"dependencies": {},
|
|
7
|
-
"devDependencies": {},
|
|
8
|
-
"scripts": {
|
|
9
|
-
"docker:build": "docker build -t {{projectName}} .",
|
|
10
|
-
"docker:up": "docker compose up -d --build",
|
|
11
|
-
"docker:down": "docker compose down",
|
|
12
|
-
"docker:logs": "docker compose logs -f"
|
|
13
|
-
},
|
|
14
|
-
"envVars": {}
|
|
15
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"id": "docker",
|
|
3
|
+
"name": "Docker",
|
|
4
|
+
"description": "Docker containerization with multi-stage build and docker-compose",
|
|
5
|
+
"type": "feature",
|
|
6
|
+
"dependencies": {},
|
|
7
|
+
"devDependencies": {},
|
|
8
|
+
"scripts": {
|
|
9
|
+
"docker:build": "docker build -t {{projectName}} .",
|
|
10
|
+
"docker:up": "docker compose up -d --build",
|
|
11
|
+
"docker:down": "docker compose down",
|
|
12
|
+
"docker:logs": "docker compose logs -f"
|
|
13
|
+
},
|
|
14
|
+
"envVars": {}
|
|
15
|
+
}
|
|
@@ -1,26 +1,26 @@
|
|
|
1
|
-
{
|
|
2
|
-
"id": "drizzle",
|
|
3
|
-
"name": "Drizzle ORM",
|
|
4
|
-
"description": "Drizzle ORM for Express with PostgreSQL",
|
|
5
|
-
"type": "database",
|
|
6
|
-
"dependencies": {
|
|
7
|
-
"drizzle-orm": "^0.45.4",
|
|
8
|
-
"pg": "^8.23.1",
|
|
9
|
-
"dotenv": "^17.4.2"
|
|
10
|
-
},
|
|
11
|
-
"devDependencies": {
|
|
12
|
-
"drizzle-kit": "^0.31.11",
|
|
13
|
-
"@types/pg": "^8.23.1"
|
|
14
|
-
},
|
|
15
|
-
"scripts": {
|
|
16
|
-
"db:generate": "drizzle-kit generate",
|
|
17
|
-
"db:migrate": "drizzle-kit migrate",
|
|
18
|
-
"db:studio": "drizzle-kit studio"
|
|
19
|
-
},
|
|
20
|
-
"envVars": {
|
|
21
|
-
"DATABASE_URL": "postgresql://postgres:postgres@localhost:5432/postgres"
|
|
22
|
-
},
|
|
23
|
-
"overrides": {
|
|
24
|
-
"esbuild": "^0.28.2"
|
|
25
|
-
}
|
|
26
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"id": "drizzle",
|
|
3
|
+
"name": "Drizzle ORM",
|
|
4
|
+
"description": "Drizzle ORM for Express with PostgreSQL",
|
|
5
|
+
"type": "database",
|
|
6
|
+
"dependencies": {
|
|
7
|
+
"drizzle-orm": "^0.45.4",
|
|
8
|
+
"pg": "^8.23.1",
|
|
9
|
+
"dotenv": "^17.4.2"
|
|
10
|
+
},
|
|
11
|
+
"devDependencies": {
|
|
12
|
+
"drizzle-kit": "^0.31.11",
|
|
13
|
+
"@types/pg": "^8.23.1"
|
|
14
|
+
},
|
|
15
|
+
"scripts": {
|
|
16
|
+
"db:generate": "drizzle-kit generate",
|
|
17
|
+
"db:migrate": "drizzle-kit migrate",
|
|
18
|
+
"db:studio": "drizzle-kit studio"
|
|
19
|
+
},
|
|
20
|
+
"envVars": {
|
|
21
|
+
"DATABASE_URL": "postgresql://postgres:postgres@localhost:5432/postgres"
|
|
22
|
+
},
|
|
23
|
+
"overrides": {
|
|
24
|
+
"esbuild": "^0.28.2"
|
|
25
|
+
}
|
|
26
|
+
}
|
|
@@ -1,26 +1,26 @@
|
|
|
1
|
-
{
|
|
2
|
-
"id": "drizzle",
|
|
3
|
-
"name": "Drizzle ORM",
|
|
4
|
-
"description": "Drizzle ORM for NestJS with PostgreSQL",
|
|
5
|
-
"type": "database",
|
|
6
|
-
"dependencies": {
|
|
7
|
-
"drizzle-orm": "^0.45.4",
|
|
8
|
-
"pg": "^8.23.1",
|
|
9
|
-
"dotenv": "^17.4.2"
|
|
10
|
-
},
|
|
11
|
-
"devDependencies": {
|
|
12
|
-
"drizzle-kit": "^0.31.11",
|
|
13
|
-
"@types/pg": "^8.23.1"
|
|
14
|
-
},
|
|
15
|
-
"scripts": {
|
|
16
|
-
"db:generate": "drizzle-kit generate",
|
|
17
|
-
"db:migrate": "drizzle-kit migrate",
|
|
18
|
-
"db:studio": "drizzle-kit studio"
|
|
19
|
-
},
|
|
20
|
-
"envVars": {
|
|
21
|
-
"DATABASE_URL": "postgresql://postgres:postgres@localhost:5432/postgres"
|
|
22
|
-
},
|
|
23
|
-
"overrides": {
|
|
24
|
-
"esbuild": "^0.28.2"
|
|
25
|
-
}
|
|
26
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"id": "drizzle",
|
|
3
|
+
"name": "Drizzle ORM",
|
|
4
|
+
"description": "Drizzle ORM for NestJS with PostgreSQL",
|
|
5
|
+
"type": "database",
|
|
6
|
+
"dependencies": {
|
|
7
|
+
"drizzle-orm": "^0.45.4",
|
|
8
|
+
"pg": "^8.23.1",
|
|
9
|
+
"dotenv": "^17.4.2"
|
|
10
|
+
},
|
|
11
|
+
"devDependencies": {
|
|
12
|
+
"drizzle-kit": "^0.31.11",
|
|
13
|
+
"@types/pg": "^8.23.1"
|
|
14
|
+
},
|
|
15
|
+
"scripts": {
|
|
16
|
+
"db:generate": "drizzle-kit generate",
|
|
17
|
+
"db:migrate": "drizzle-kit migrate",
|
|
18
|
+
"db:studio": "drizzle-kit studio"
|
|
19
|
+
},
|
|
20
|
+
"envVars": {
|
|
21
|
+
"DATABASE_URL": "postgresql://postgres:postgres@localhost:5432/postgres"
|
|
22
|
+
},
|
|
23
|
+
"overrides": {
|
|
24
|
+
"esbuild": "^0.28.2"
|
|
25
|
+
}
|
|
26
|
+
}
|
|
@@ -1,26 +1,26 @@
|
|
|
1
|
-
{
|
|
2
|
-
"id": "drizzle",
|
|
3
|
-
"name": "Drizzle ORM",
|
|
4
|
-
"description": "Drizzle ORM for Next.js with PostgreSQL",
|
|
5
|
-
"type": "database",
|
|
6
|
-
"dependencies": {
|
|
7
|
-
"drizzle-orm": "^0.45.4",
|
|
8
|
-
"pg": "^8.23.1",
|
|
9
|
-
"dotenv": "^17.4.2"
|
|
10
|
-
},
|
|
11
|
-
"devDependencies": {
|
|
12
|
-
"drizzle-kit": "^0.31.11",
|
|
13
|
-
"@types/pg": "^8.23.1"
|
|
14
|
-
},
|
|
15
|
-
"scripts": {
|
|
16
|
-
"db:generate": "drizzle-kit generate",
|
|
17
|
-
"db:migrate": "drizzle-kit migrate",
|
|
18
|
-
"db:studio": "drizzle-kit studio"
|
|
19
|
-
},
|
|
20
|
-
"envVars": {
|
|
21
|
-
"DATABASE_URL": "postgresql://postgres:postgres@localhost:5432/postgres"
|
|
22
|
-
},
|
|
23
|
-
"overrides": {
|
|
24
|
-
"esbuild": "^0.28.2"
|
|
25
|
-
}
|
|
26
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"id": "drizzle",
|
|
3
|
+
"name": "Drizzle ORM",
|
|
4
|
+
"description": "Drizzle ORM for Next.js with PostgreSQL",
|
|
5
|
+
"type": "database",
|
|
6
|
+
"dependencies": {
|
|
7
|
+
"drizzle-orm": "^0.45.4",
|
|
8
|
+
"pg": "^8.23.1",
|
|
9
|
+
"dotenv": "^17.4.2"
|
|
10
|
+
},
|
|
11
|
+
"devDependencies": {
|
|
12
|
+
"drizzle-kit": "^0.31.11",
|
|
13
|
+
"@types/pg": "^8.23.1"
|
|
14
|
+
},
|
|
15
|
+
"scripts": {
|
|
16
|
+
"db:generate": "drizzle-kit generate",
|
|
17
|
+
"db:migrate": "drizzle-kit migrate",
|
|
18
|
+
"db:studio": "drizzle-kit studio"
|
|
19
|
+
},
|
|
20
|
+
"envVars": {
|
|
21
|
+
"DATABASE_URL": "postgresql://postgres:postgres@localhost:5432/postgres"
|
|
22
|
+
},
|
|
23
|
+
"overrides": {
|
|
24
|
+
"esbuild": "^0.28.2"
|
|
25
|
+
}
|
|
26
|
+
}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import { config } from "dotenv";
|
|
2
|
-
import { defineConfig } from "drizzle-kit";
|
|
3
|
-
|
|
4
|
-
config({ path: ".env" });
|
|
5
|
-
|
|
6
|
-
export default defineConfig({
|
|
7
|
-
schema: "./lib/schema.ts",
|
|
8
|
-
out: "./migrations",
|
|
9
|
-
dialect: "postgresql",
|
|
10
|
-
dbCredentials: {
|
|
11
|
-
url: process.env.DATABASE_URL!,
|
|
12
|
-
},
|
|
13
|
-
});
|
|
1
|
+
import { config } from "dotenv";
|
|
2
|
+
import { defineConfig } from "drizzle-kit";
|
|
3
|
+
|
|
4
|
+
config({ path: ".env" });
|
|
5
|
+
|
|
6
|
+
export default defineConfig({
|
|
7
|
+
schema: "./lib/schema.ts",
|
|
8
|
+
out: "./migrations",
|
|
9
|
+
dialect: "postgresql",
|
|
10
|
+
dbCredentials: {
|
|
11
|
+
url: process.env.DATABASE_URL!,
|
|
12
|
+
},
|
|
13
|
+
});
|
|
@@ -1,26 +1,26 @@
|
|
|
1
|
-
{
|
|
2
|
-
"id": "drizzle",
|
|
3
|
-
"name": "Drizzle ORM",
|
|
4
|
-
"description": "Drizzle ORM for TanStack Start with PostgreSQL",
|
|
5
|
-
"type": "database",
|
|
6
|
-
"dependencies": {
|
|
7
|
-
"drizzle-orm": "^0.45.4",
|
|
8
|
-
"pg": "^8.23.1",
|
|
9
|
-
"dotenv": "^17.4.2"
|
|
10
|
-
},
|
|
11
|
-
"devDependencies": {
|
|
12
|
-
"drizzle-kit": "^0.31.11",
|
|
13
|
-
"@types/pg": "^8.23.1"
|
|
14
|
-
},
|
|
15
|
-
"scripts": {
|
|
16
|
-
"db:generate": "drizzle-kit generate",
|
|
17
|
-
"db:migrate": "drizzle-kit migrate",
|
|
18
|
-
"db:studio": "drizzle-kit studio"
|
|
19
|
-
},
|
|
20
|
-
"envVars": {
|
|
21
|
-
"DATABASE_URL": "postgresql://postgres:postgres@localhost:5432/postgres"
|
|
22
|
-
},
|
|
23
|
-
"overrides": {
|
|
24
|
-
"esbuild": "^0.28.2"
|
|
25
|
-
}
|
|
26
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"id": "drizzle",
|
|
3
|
+
"name": "Drizzle ORM",
|
|
4
|
+
"description": "Drizzle ORM for TanStack Start with PostgreSQL",
|
|
5
|
+
"type": "database",
|
|
6
|
+
"dependencies": {
|
|
7
|
+
"drizzle-orm": "^0.45.4",
|
|
8
|
+
"pg": "^8.23.1",
|
|
9
|
+
"dotenv": "^17.4.2"
|
|
10
|
+
},
|
|
11
|
+
"devDependencies": {
|
|
12
|
+
"drizzle-kit": "^0.31.11",
|
|
13
|
+
"@types/pg": "^8.23.1"
|
|
14
|
+
},
|
|
15
|
+
"scripts": {
|
|
16
|
+
"db:generate": "drizzle-kit generate",
|
|
17
|
+
"db:migrate": "drizzle-kit migrate",
|
|
18
|
+
"db:studio": "drizzle-kit studio"
|
|
19
|
+
},
|
|
20
|
+
"envVars": {
|
|
21
|
+
"DATABASE_URL": "postgresql://postgres:postgres@localhost:5432/postgres"
|
|
22
|
+
},
|
|
23
|
+
"overrides": {
|
|
24
|
+
"esbuild": "^0.28.2"
|
|
25
|
+
}
|
|
26
|
+
}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import { defineConfig } from "drizzle-kit";
|
|
2
|
-
import { config } from "dotenv";
|
|
3
|
-
|
|
4
|
-
config({ path: ".env" });
|
|
5
|
-
|
|
6
|
-
export default defineConfig({
|
|
7
|
-
schema: "./src/lib/schema.ts",
|
|
8
|
-
out: "./migrations",
|
|
9
|
-
dialect: "postgresql",
|
|
10
|
-
dbCredentials: {
|
|
11
|
-
url: process.env.DATABASE_URL!,
|
|
12
|
-
},
|
|
1
|
+
import { defineConfig } from "drizzle-kit";
|
|
2
|
+
import { config } from "dotenv";
|
|
3
|
+
|
|
4
|
+
config({ path: ".env" });
|
|
5
|
+
|
|
6
|
+
export default defineConfig({
|
|
7
|
+
schema: "./src/lib/schema.ts",
|
|
8
|
+
out: "./migrations",
|
|
9
|
+
dialect: "postgresql",
|
|
10
|
+
dbCredentials: {
|
|
11
|
+
url: process.env.DATABASE_URL!,
|
|
12
|
+
},
|
|
13
13
|
});
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import { config } from "dotenv";
|
|
2
|
-
import { drizzle } from "drizzle-orm/node-postgres";
|
|
3
|
-
import { Pool } from "pg";
|
|
4
|
-
|
|
5
|
-
import * as schema from "./schema";
|
|
6
|
-
|
|
7
|
-
config({ path: ".env" }); // or .env.local
|
|
8
|
-
|
|
9
|
-
const pool = new Pool({
|
|
10
|
-
connectionString: process.env.DATABASE_URL,
|
|
11
|
-
});
|
|
12
|
-
|
|
13
|
-
export const db = drizzle(pool, { schema });
|
|
1
|
+
import { config } from "dotenv";
|
|
2
|
+
import { drizzle } from "drizzle-orm/node-postgres";
|
|
3
|
+
import { Pool } from "pg";
|
|
4
|
+
|
|
5
|
+
import * as schema from "./schema";
|
|
6
|
+
|
|
7
|
+
config({ path: ".env" }); // or .env.local
|
|
8
|
+
|
|
9
|
+
const pool = new Pool({
|
|
10
|
+
connectionString: process.env.DATABASE_URL,
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
export const db = drizzle(pool, { schema });
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
{
|
|
2
|
-
"id": "mongoose",
|
|
3
|
-
"name": "Mongoose (MongoDB)",
|
|
4
|
-
"description": "MongoDB database integration for Express using Mongoose ODM",
|
|
5
|
-
"type": "database",
|
|
6
|
-
"dependencies": {
|
|
7
|
-
"mongoose": "^9.11.4",
|
|
8
|
-
"mongodb": "^7.8.0"
|
|
9
|
-
},
|
|
10
|
-
"devDependencies": {},
|
|
11
|
-
"scripts": {},
|
|
12
|
-
"envVars": {
|
|
13
|
-
"MONGODB_URI": "mongodb://localhost:27017/myapp"
|
|
14
|
-
}
|
|
15
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"id": "mongoose",
|
|
3
|
+
"name": "Mongoose (MongoDB)",
|
|
4
|
+
"description": "MongoDB database integration for Express using Mongoose ODM",
|
|
5
|
+
"type": "database",
|
|
6
|
+
"dependencies": {
|
|
7
|
+
"mongoose": "^9.11.4",
|
|
8
|
+
"mongodb": "^7.8.0"
|
|
9
|
+
},
|
|
10
|
+
"devDependencies": {},
|
|
11
|
+
"scripts": {},
|
|
12
|
+
"envVars": {
|
|
13
|
+
"MONGODB_URI": "mongodb://localhost:27017/myapp"
|
|
14
|
+
}
|
|
15
|
+
}
|
|
@@ -1,43 +1,43 @@
|
|
|
1
|
-
import mongoose from "mongoose";
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* MongoDB connection configuration
|
|
5
|
-
*/
|
|
6
|
-
const connectDB = async (): Promise<void> => {
|
|
7
|
-
try {
|
|
8
|
-
const mongoUri = process.env.MONGODB_URI;
|
|
9
|
-
|
|
10
|
-
if (!mongoUri) {
|
|
11
|
-
throw new Error("MONGODB_URI environment variable is not defined");
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
await mongoose.connect(mongoUri);
|
|
15
|
-
|
|
16
|
-
console.log("MongoDB connected successfully");
|
|
17
|
-
|
|
18
|
-
mongoose.connection.on("error", (error) => {
|
|
19
|
-
console.error("MongoDB connection error:", error);
|
|
20
|
-
});
|
|
21
|
-
|
|
22
|
-
mongoose.connection.on("disconnected", () => {
|
|
23
|
-
console.log("MongoDB disconnected");
|
|
24
|
-
});
|
|
25
|
-
} catch (error) {
|
|
26
|
-
console.error("Failed to connect to MongoDB:", error);
|
|
27
|
-
process.exit(1);
|
|
28
|
-
}
|
|
29
|
-
};
|
|
30
|
-
|
|
31
|
-
/**
|
|
32
|
-
* Gracefully close MongoDB connection
|
|
33
|
-
*/
|
|
34
|
-
const disconnectDB = async (): Promise<void> => {
|
|
35
|
-
try {
|
|
36
|
-
await mongoose.connection.close();
|
|
37
|
-
console.log("MongoDB connection closed");
|
|
38
|
-
} catch (error) {
|
|
39
|
-
console.error("Error closing MongoDB connection:", error);
|
|
40
|
-
}
|
|
41
|
-
};
|
|
42
|
-
|
|
43
|
-
export { connectDB, disconnectDB };
|
|
1
|
+
import mongoose from "mongoose";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* MongoDB connection configuration
|
|
5
|
+
*/
|
|
6
|
+
const connectDB = async (): Promise<void> => {
|
|
7
|
+
try {
|
|
8
|
+
const mongoUri = process.env.MONGODB_URI;
|
|
9
|
+
|
|
10
|
+
if (!mongoUri) {
|
|
11
|
+
throw new Error("MONGODB_URI environment variable is not defined");
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
await mongoose.connect(mongoUri);
|
|
15
|
+
|
|
16
|
+
console.log("MongoDB connected successfully");
|
|
17
|
+
|
|
18
|
+
mongoose.connection.on("error", (error) => {
|
|
19
|
+
console.error("MongoDB connection error:", error);
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
mongoose.connection.on("disconnected", () => {
|
|
23
|
+
console.log("MongoDB disconnected");
|
|
24
|
+
});
|
|
25
|
+
} catch (error) {
|
|
26
|
+
console.error("Failed to connect to MongoDB:", error);
|
|
27
|
+
process.exit(1);
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Gracefully close MongoDB connection
|
|
33
|
+
*/
|
|
34
|
+
const disconnectDB = async (): Promise<void> => {
|
|
35
|
+
try {
|
|
36
|
+
await mongoose.connection.close();
|
|
37
|
+
console.log("MongoDB connection closed");
|
|
38
|
+
} catch (error) {
|
|
39
|
+
console.error("Error closing MongoDB connection:", error);
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
export { connectDB, disconnectDB };
|
|
@@ -1,48 +1,48 @@
|
|
|
1
|
-
import mongoose, { type Model, Schema } from "mongoose";
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* User document interface
|
|
5
|
-
*/
|
|
6
|
-
export interface IUser {
|
|
7
|
-
email: string;
|
|
8
|
-
name?: string | null;
|
|
9
|
-
password: string;
|
|
10
|
-
createdAt: Date;
|
|
11
|
-
updatedAt: Date;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* User schema definition
|
|
16
|
-
*/
|
|
17
|
-
const userSchema = new Schema<IUser>(
|
|
18
|
-
{
|
|
19
|
-
email: {
|
|
20
|
-
type: String,
|
|
21
|
-
required: true,
|
|
22
|
-
unique: true,
|
|
23
|
-
lowercase: true,
|
|
24
|
-
trim: true,
|
|
25
|
-
},
|
|
26
|
-
name: {
|
|
27
|
-
type: String,
|
|
28
|
-
trim: true,
|
|
29
|
-
},
|
|
30
|
-
password: {
|
|
31
|
-
type: String,
|
|
32
|
-
required: true,
|
|
33
|
-
minlength: 6,
|
|
34
|
-
},
|
|
35
|
-
},
|
|
36
|
-
{
|
|
37
|
-
timestamps: true,
|
|
38
|
-
}
|
|
39
|
-
);
|
|
40
|
-
|
|
41
|
-
/**
|
|
42
|
-
* User model
|
|
43
|
-
*/
|
|
44
|
-
const User =
|
|
45
|
-
(mongoose.models.User as Model<IUser> | undefined) ??
|
|
46
|
-
mongoose.model<IUser>("User", userSchema);
|
|
47
|
-
|
|
48
|
-
export default User;
|
|
1
|
+
import mongoose, { type Model, Schema } from "mongoose";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* User document interface
|
|
5
|
+
*/
|
|
6
|
+
export interface IUser {
|
|
7
|
+
email: string;
|
|
8
|
+
name?: string | null;
|
|
9
|
+
password: string;
|
|
10
|
+
createdAt: Date;
|
|
11
|
+
updatedAt: Date;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* User schema definition
|
|
16
|
+
*/
|
|
17
|
+
const userSchema = new Schema<IUser>(
|
|
18
|
+
{
|
|
19
|
+
email: {
|
|
20
|
+
type: String,
|
|
21
|
+
required: true,
|
|
22
|
+
unique: true,
|
|
23
|
+
lowercase: true,
|
|
24
|
+
trim: true,
|
|
25
|
+
},
|
|
26
|
+
name: {
|
|
27
|
+
type: String,
|
|
28
|
+
trim: true,
|
|
29
|
+
},
|
|
30
|
+
password: {
|
|
31
|
+
type: String,
|
|
32
|
+
required: true,
|
|
33
|
+
minlength: 6,
|
|
34
|
+
},
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
timestamps: true,
|
|
38
|
+
}
|
|
39
|
+
);
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* User model
|
|
43
|
+
*/
|
|
44
|
+
const User =
|
|
45
|
+
(mongoose.models.User as Model<IUser> | undefined) ??
|
|
46
|
+
mongoose.model<IUser>("User", userSchema);
|
|
47
|
+
|
|
48
|
+
export default User;
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
{
|
|
2
|
-
"id": "mongoose",
|
|
3
|
-
"name": "Mongoose (MongoDB)",
|
|
4
|
-
"description": "MongoDB database integration for NestJS using Mongoose ODM",
|
|
5
|
-
"type": "database",
|
|
6
|
-
"dependencies": {
|
|
7
|
-
"@nestjs/mongoose": "^12.0.0",
|
|
8
|
-
"mongoose": "^9.11.4"
|
|
9
|
-
},
|
|
10
|
-
"devDependencies": {},
|
|
11
|
-
"scripts": {},
|
|
12
|
-
"envVars": {
|
|
13
|
-
"MONGODB_URI": "mongodb://localhost:27017/myapp"
|
|
14
|
-
}
|
|
15
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"id": "mongoose",
|
|
3
|
+
"name": "Mongoose (MongoDB)",
|
|
4
|
+
"description": "MongoDB database integration for NestJS using Mongoose ODM",
|
|
5
|
+
"type": "database",
|
|
6
|
+
"dependencies": {
|
|
7
|
+
"@nestjs/mongoose": "^12.0.0",
|
|
8
|
+
"mongoose": "^9.11.4"
|
|
9
|
+
},
|
|
10
|
+
"devDependencies": {},
|
|
11
|
+
"scripts": {},
|
|
12
|
+
"envVars": {
|
|
13
|
+
"MONGODB_URI": "mongodb://localhost:27017/myapp"
|
|
14
|
+
}
|
|
15
|
+
}
|