create-stackkit-app 0.4.4 → 0.4.5
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 +1 -1
- package/dist/index.js +62 -4
- package/dist/lib/create-project.d.ts +20 -1
- package/dist/lib/create-project.js +133 -48
- package/dist/lib/utils/config-utils.js +56 -1
- package/dist/lib/utils/logger.d.ts +16 -0
- package/dist/lib/utils/logger.js +59 -0
- package/dist/lib/utils/module-utils.js +346 -196
- package/dist/lib/utils/package-utils.js +2 -2
- package/modules/auth/authjs/files/api/auth/[...nextauth]/route.ts +6 -0
- package/modules/auth/authjs/files/lib/auth-client.ts +11 -0
- package/modules/auth/authjs/files/lib/auth.ts +41 -0
- package/modules/auth/authjs/files/schemas/prisma-schema.prisma +45 -0
- package/modules/auth/authjs/module.json +95 -0
- package/modules/auth/better-auth/files/lib/auth-client.ts +7 -0
- package/modules/auth/better-auth/files/lib/auth.ts +62 -0
- package/modules/auth/better-auth/files/lib/email-service.ts +34 -0
- package/modules/auth/better-auth/files/lib/email-templates.ts +89 -0
- package/modules/auth/better-auth/files/schemas/prisma-schema.prisma +1 -1
- package/modules/auth/better-auth/module.json +164 -27
- package/modules/database/mongoose/files/lib/db.ts +68 -0
- package/modules/database/{mongoose-mongodb → mongoose}/files/models/User.ts +0 -5
- package/modules/database/{mongoose-mongodb → mongoose}/module.json +9 -24
- package/modules/database/prisma/files/lib/prisma.ts +1 -3
- package/modules/database/prisma/files/prisma/schema.prisma +1 -1
- package/modules/database/prisma/files/prisma.config.ts +2 -2
- package/modules/database/prisma/module.json +5 -23
- package/package.json +1 -1
- package/templates/express/.env.example +0 -1
- package/templates/express/package.json +4 -4
- package/templates/express/src/app.ts +2 -2
- package/templates/express/src/features/health/health.controller.ts +18 -0
- package/templates/express/src/features/health/health.route.ts +9 -0
- package/templates/express/src/features/health/health.service.ts +6 -0
- package/templates/nextjs/lib/env.ts +8 -0
- package/templates/nextjs/package.json +7 -7
- package/templates/react-vite/.env.example +1 -2
- package/templates/react-vite/.prettierignore +4 -0
- package/templates/react-vite/.prettierrc +9 -0
- package/templates/react-vite/README.md +22 -0
- package/templates/react-vite/package.json +16 -16
- package/templates/react-vite/src/router.tsx +0 -12
- package/templates/react-vite/vite.config.ts +0 -6
- package/modules/auth/clerk/files/express/auth.ts +0 -7
- package/modules/auth/clerk/files/nextjs/auth-provider.tsx +0 -5
- package/modules/auth/clerk/files/nextjs/middleware.ts +0 -9
- package/modules/auth/clerk/files/react/auth-provider.tsx +0 -15
- package/modules/auth/clerk/module.json +0 -115
- package/modules/database/mongoose-mongodb/files/lib/db.ts +0 -78
- package/templates/express/src/features/auth/auth.controller.ts +0 -48
- package/templates/express/src/features/auth/auth.route.ts +0 -10
- package/templates/express/src/features/auth/auth.service.ts +0 -21
- package/templates/react-vite/src/api/services/user.service.ts +0 -18
- package/templates/react-vite/src/pages/UserProfile.tsx +0 -40
- package/templates/react-vite/src/types/user.d.ts +0 -6
|
@@ -3,7 +3,6 @@ import mongoose, { Document, Schema } from "mongoose";
|
|
|
3
3
|
export interface IUser extends Document {
|
|
4
4
|
name: string;
|
|
5
5
|
email: string;
|
|
6
|
-
password: string;
|
|
7
6
|
createdAt: Date;
|
|
8
7
|
updatedAt: Date;
|
|
9
8
|
}
|
|
@@ -22,10 +21,6 @@ const UserSchema: Schema = new Schema(
|
|
|
22
21
|
lowercase: true,
|
|
23
22
|
trim: true,
|
|
24
23
|
},
|
|
25
|
-
password: {
|
|
26
|
-
type: String,
|
|
27
|
-
required: true,
|
|
28
|
-
},
|
|
29
24
|
},
|
|
30
25
|
{
|
|
31
26
|
timestamps: true,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
|
-
"name": "mongoose
|
|
3
|
-
"displayName": "Mongoose
|
|
2
|
+
"name": "mongoose",
|
|
3
|
+
"displayName": "Mongoose (MongoDB)",
|
|
4
4
|
"description": "Mongoose ODM for MongoDB database",
|
|
5
5
|
"category": "database",
|
|
6
6
|
"provider": "mongoose",
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"supportedFrameworks": ["nextjs", "express"],
|
|
9
9
|
"dependencies": {
|
|
10
10
|
"mongoose": "^8.8.4",
|
|
11
|
-
"
|
|
11
|
+
"mongodb": "^6.10.0"
|
|
12
12
|
},
|
|
13
13
|
"devDependencies": {
|
|
14
14
|
"@types/mongoose": "^5.11.97"
|
|
@@ -17,8 +17,7 @@
|
|
|
17
17
|
"common": [
|
|
18
18
|
{
|
|
19
19
|
"key": "DATABASE_URL",
|
|
20
|
-
"value": "mongodb://
|
|
21
|
-
"description": "MongoDB connection string",
|
|
20
|
+
"value": "mongodb+srv://username:password@cluster.mongodb.net/mydb",
|
|
22
21
|
"required": true
|
|
23
22
|
}
|
|
24
23
|
]
|
|
@@ -30,35 +29,21 @@
|
|
|
30
29
|
"compilerOptions": {
|
|
31
30
|
"baseUrl": ".",
|
|
32
31
|
"paths": {
|
|
33
|
-
"@/*": ["
|
|
34
|
-
"@/models/*": ["./src/models/*"]
|
|
32
|
+
"@/*": ["./*"]
|
|
35
33
|
}
|
|
36
34
|
},
|
|
37
|
-
"include": ["src/**/*", "
|
|
35
|
+
"include": ["src/**/*", "lib/**/*"],
|
|
38
36
|
"exclude": ["node_modules", "dist"]
|
|
39
37
|
}
|
|
40
38
|
}
|
|
41
|
-
},
|
|
42
|
-
"nextjs": {
|
|
43
|
-
"tsconfig.json": {
|
|
44
|
-
"merge": {
|
|
45
|
-
"compilerOptions": {
|
|
46
|
-
"baseUrl": ".",
|
|
47
|
-
"paths": {
|
|
48
|
-
"@/models/*": ["./models/*"]
|
|
49
|
-
}
|
|
50
|
-
},
|
|
51
|
-
"exclude": ["node_modules", ".next", "out"]
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
39
|
}
|
|
55
40
|
},
|
|
56
41
|
"patches": [
|
|
57
42
|
{
|
|
58
43
|
"type": "create-file",
|
|
59
|
-
"description": "
|
|
60
|
-
"source": "lib/
|
|
61
|
-
"destination": "{{lib}}/
|
|
44
|
+
"description": "{{dbDescription}}",
|
|
45
|
+
"source": "lib/{{dbFile}}",
|
|
46
|
+
"destination": "{{lib}}/{{dbFile}}"
|
|
62
47
|
},
|
|
63
48
|
{
|
|
64
49
|
"type": "create-file",
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import "dotenv/config";
|
|
2
|
-
import { defineConfig } from "prisma/config";
|
|
2
|
+
import { defineConfig, env } from "prisma/config";
|
|
3
3
|
|
|
4
4
|
export default defineConfig({
|
|
5
5
|
schema: "prisma/schema.prisma",
|
|
@@ -7,6 +7,6 @@ export default defineConfig({
|
|
|
7
7
|
path: "prisma/migrations",
|
|
8
8
|
},
|
|
9
9
|
datasource: {
|
|
10
|
-
url:
|
|
10
|
+
url: env('DATABASE_URL'),
|
|
11
11
|
},
|
|
12
12
|
});
|
|
@@ -49,7 +49,6 @@
|
|
|
49
49
|
{
|
|
50
50
|
"key": "DATABASE_URL",
|
|
51
51
|
"value": "{{connectionString}}",
|
|
52
|
-
"description": "Database connection URL",
|
|
53
52
|
"required": true
|
|
54
53
|
}
|
|
55
54
|
],
|
|
@@ -58,31 +57,26 @@
|
|
|
58
57
|
{
|
|
59
58
|
"key": "DATABASE_HOST",
|
|
60
59
|
"value": "localhost",
|
|
61
|
-
"description": "MySQL host",
|
|
62
60
|
"required": true
|
|
63
61
|
},
|
|
64
62
|
{
|
|
65
63
|
"key": "DATABASE_USER",
|
|
66
64
|
"value": "",
|
|
67
|
-
"description": "MySQL username",
|
|
68
65
|
"required": true
|
|
69
66
|
},
|
|
70
67
|
{
|
|
71
68
|
"key": "DATABASE_PASSWORD",
|
|
72
69
|
"value": "",
|
|
73
|
-
"description": "MySQL password",
|
|
74
70
|
"required": true
|
|
75
71
|
},
|
|
76
72
|
{
|
|
77
73
|
"key": "DATABASE_NAME",
|
|
78
74
|
"value": "mydb",
|
|
79
|
-
"description": "MySQL database name",
|
|
80
75
|
"required": true
|
|
81
76
|
},
|
|
82
77
|
{
|
|
83
78
|
"key": "DATABASE_PORT",
|
|
84
79
|
"value": "3306",
|
|
85
|
-
"description": "MySQL port",
|
|
86
80
|
"required": false
|
|
87
81
|
}
|
|
88
82
|
]
|
|
@@ -94,24 +88,12 @@
|
|
|
94
88
|
"merge": {
|
|
95
89
|
"compilerOptions": {
|
|
96
90
|
"baseUrl": ".",
|
|
97
|
-
"paths": {
|
|
98
|
-
"@/*": ["./src/*"]
|
|
99
|
-
}
|
|
100
|
-
},
|
|
101
|
-
"include": ["src/**/*"],
|
|
102
|
-
"exclude": ["node_modules", "dist", "prisma/migrations"]
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
},
|
|
106
|
-
"nextjs": {
|
|
107
|
-
"tsconfig.json": {
|
|
108
|
-
"merge": {
|
|
109
|
-
"compilerOptions": {
|
|
110
91
|
"paths": {
|
|
111
92
|
"@/*": ["./*"]
|
|
112
93
|
}
|
|
113
94
|
},
|
|
114
|
-
"
|
|
95
|
+
"include": ["src/**/*", "lib/**/*"],
|
|
96
|
+
"exclude": ["node_modules", "dist", "lib/generated/prisma"]
|
|
115
97
|
}
|
|
116
98
|
}
|
|
117
99
|
}
|
|
@@ -131,9 +113,9 @@
|
|
|
131
113
|
},
|
|
132
114
|
{
|
|
133
115
|
"type": "create-file",
|
|
134
|
-
"description": "
|
|
135
|
-
"source": "lib/
|
|
136
|
-
"destination": "{{lib}}/
|
|
116
|
+
"description": "{{dbDescription}}",
|
|
117
|
+
"source": "lib/{{dbFile}}",
|
|
118
|
+
"destination": "{{lib}}/{{dbFile}}"
|
|
137
119
|
}
|
|
138
120
|
],
|
|
139
121
|
"postInstall": ["npx prisma generate"]
|
package/package.json
CHANGED
|
@@ -22,12 +22,12 @@
|
|
|
22
22
|
"@types/cors": "^2.8.19",
|
|
23
23
|
"@types/express": "^5.0.6",
|
|
24
24
|
"@types/morgan": "^1.9.10",
|
|
25
|
-
"@types/node": "^25.0.
|
|
26
|
-
"@typescript-eslint/eslint-plugin": "^8.
|
|
27
|
-
"@typescript-eslint/parser": "^8.
|
|
25
|
+
"@types/node": "^25.0.8",
|
|
26
|
+
"@typescript-eslint/eslint-plugin": "^8.53.0",
|
|
27
|
+
"@typescript-eslint/parser": "^8.53.0",
|
|
28
28
|
"cross-env": "^10.1.0",
|
|
29
29
|
"eslint": "^9.39.2",
|
|
30
30
|
"tsx": "^4.21.0",
|
|
31
31
|
"typescript": "^5.9.3"
|
|
32
32
|
}
|
|
33
|
-
}
|
|
33
|
+
}
|
|
@@ -3,7 +3,7 @@ import express, { Application, NextFunction, Request, Response } from "express";
|
|
|
3
3
|
import helmet from "helmet";
|
|
4
4
|
import morgan from "morgan";
|
|
5
5
|
import { env } from "./config/env";
|
|
6
|
-
import { authRoutes } from "./features/
|
|
6
|
+
import { authRoutes } from "./features/health/health.route";
|
|
7
7
|
import { errorHandler } from "./middlewares/error.middleware";
|
|
8
8
|
|
|
9
9
|
// app initialization
|
|
@@ -35,7 +35,7 @@ app.get("/", (_req: Request, res: Response) => {
|
|
|
35
35
|
});
|
|
36
36
|
|
|
37
37
|
// routes
|
|
38
|
-
app.use("/api/
|
|
38
|
+
app.use("/api/health", authRoutes);
|
|
39
39
|
|
|
40
40
|
// unhandled routes
|
|
41
41
|
app.use((req: Request, _res: Response, next: NextFunction) => {
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { NextFunction, Request, Response } from "express";
|
|
2
|
+
|
|
3
|
+
const health = async (_req: Request, res: Response, next: NextFunction) => {
|
|
4
|
+
try {
|
|
5
|
+
res.status(200).json({
|
|
6
|
+
success: true,
|
|
7
|
+
message: "API is healthy!",
|
|
8
|
+
timestamp: new Date().toISOString(),
|
|
9
|
+
version: "1.0.0",
|
|
10
|
+
});
|
|
11
|
+
} catch (error) {
|
|
12
|
+
next(error);
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
export const healthController = {
|
|
17
|
+
health,
|
|
18
|
+
};
|
|
@@ -15,13 +15,13 @@
|
|
|
15
15
|
"react-dom": "19.2.3"
|
|
16
16
|
},
|
|
17
17
|
"devDependencies": {
|
|
18
|
-
"@tailwindcss/postcss": "^4",
|
|
19
|
-
"@types/node": "^
|
|
20
|
-
"@types/react": "^19",
|
|
21
|
-
"@types/react-dom": "^19",
|
|
22
|
-
"eslint": "^9",
|
|
18
|
+
"@tailwindcss/postcss": "^4.1.18",
|
|
19
|
+
"@types/node": "^25.0.8",
|
|
20
|
+
"@types/react": "^19.2.8",
|
|
21
|
+
"@types/react-dom": "^19.2.3",
|
|
22
|
+
"eslint": "^9.39.2",
|
|
23
23
|
"eslint-config-next": "16.1.1",
|
|
24
|
-
"tailwindcss": "^4",
|
|
25
|
-
"typescript": "^5"
|
|
24
|
+
"tailwindcss": "^4.1.18",
|
|
25
|
+
"typescript": "^5.9.3"
|
|
26
26
|
}
|
|
27
27
|
}
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
VITE_API_URL=http://localhost:3000
|
|
1
|
+
VITE_API_URL=http://localhost:3000
|
|
@@ -14,6 +14,7 @@ A production-ready React starter template with TypeScript, Vite, and essential l
|
|
|
14
14
|
- **SEO Ready** with React Helmet Async
|
|
15
15
|
- **Error Boundaries** for graceful error handling
|
|
16
16
|
- **ESLint** for code quality
|
|
17
|
+
- **Prettier** for code formatting
|
|
17
18
|
- **Custom Hooks** included
|
|
18
19
|
|
|
19
20
|
## Quick Start
|
|
@@ -30,6 +31,18 @@ pnpm build
|
|
|
30
31
|
|
|
31
32
|
# Preview production build
|
|
32
33
|
pnpm preview
|
|
34
|
+
|
|
35
|
+
# Run linter
|
|
36
|
+
pnpm lint
|
|
37
|
+
|
|
38
|
+
# Fix linting issues
|
|
39
|
+
pnpm lint:fix
|
|
40
|
+
|
|
41
|
+
# Format code
|
|
42
|
+
pnpm format
|
|
43
|
+
|
|
44
|
+
# Check formatting
|
|
45
|
+
pnpm format:check
|
|
33
46
|
```
|
|
34
47
|
|
|
35
48
|
## Project Structure
|
|
@@ -44,6 +57,7 @@ src/
|
|
|
44
57
|
├── pages/ # Route pages
|
|
45
58
|
├── types/ # TypeScript types
|
|
46
59
|
├── utils/ # Helper functions
|
|
60
|
+
├── test/ # Test setup
|
|
47
61
|
├── App.tsx # Main app component
|
|
48
62
|
├── main.tsx # Entry point
|
|
49
63
|
└── index.css # Global styles
|
|
@@ -51,6 +65,14 @@ src/
|
|
|
51
65
|
|
|
52
66
|
## Environment Variables
|
|
53
67
|
|
|
68
|
+
Copy `.env.example` to `.env` and update the values:
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
cp .env.example .env
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
## Environment Variables
|
|
75
|
+
|
|
54
76
|
Create a `.env` file:
|
|
55
77
|
|
|
56
78
|
```env
|
|
@@ -12,33 +12,33 @@
|
|
|
12
12
|
},
|
|
13
13
|
"dependencies": {
|
|
14
14
|
"@tailwindcss/vite": "^4.1.18",
|
|
15
|
-
"@tanstack/react-query": "^5.
|
|
16
|
-
"@tanstack/react-query-devtools": "^5.
|
|
17
|
-
"axios": "^1.
|
|
15
|
+
"@tanstack/react-query": "^5.90.16",
|
|
16
|
+
"@tanstack/react-query-devtools": "^5.91.2",
|
|
17
|
+
"axios": "^1.13.2",
|
|
18
18
|
"class-variance-authority": "^0.7.1",
|
|
19
19
|
"clsx": "^2.1.1",
|
|
20
|
-
"react": "^19.2.
|
|
21
|
-
"react-dom": "^19.2.
|
|
20
|
+
"react": "^19.2.3",
|
|
21
|
+
"react-dom": "^19.2.3",
|
|
22
22
|
"react-helmet-async": "^2.0.5",
|
|
23
|
-
"react-hot-toast": "^2.
|
|
23
|
+
"react-hot-toast": "^2.6.0",
|
|
24
24
|
"react-router": "^7.12.0",
|
|
25
25
|
"tailwind-merge": "^3.4.0"
|
|
26
26
|
},
|
|
27
27
|
"devDependencies": {
|
|
28
|
-
"@eslint/js": "^9.39.
|
|
29
|
-
"@types/node": "^
|
|
30
|
-
"@types/react": "^19.2.
|
|
28
|
+
"@eslint/js": "^9.39.2",
|
|
29
|
+
"@types/node": "^25.0.8",
|
|
30
|
+
"@types/react": "^19.2.8",
|
|
31
31
|
"@types/react-dom": "^19.2.3",
|
|
32
|
-
"@vitejs/plugin-react": "^5.1.
|
|
32
|
+
"@vitejs/plugin-react": "^5.1.2",
|
|
33
33
|
"autoprefixer": "^10.4.23",
|
|
34
|
-
"eslint": "^9.39.
|
|
34
|
+
"eslint": "^9.39.2",
|
|
35
35
|
"eslint-plugin-react-hooks": "^7.0.1",
|
|
36
|
-
"eslint-plugin-react-refresh": "^0.4.
|
|
37
|
-
"globals": "^
|
|
36
|
+
"eslint-plugin-react-refresh": "^0.4.26",
|
|
37
|
+
"globals": "^17.0.0",
|
|
38
38
|
"postcss": "^8.5.6",
|
|
39
39
|
"tailwindcss": "^4.1.18",
|
|
40
40
|
"typescript": "~5.9.3",
|
|
41
|
-
"typescript-eslint": "^8.
|
|
42
|
-
"vite": "^7.
|
|
41
|
+
"typescript-eslint": "^8.53.0",
|
|
42
|
+
"vite": "^7.3.1"
|
|
43
43
|
}
|
|
44
|
-
}
|
|
44
|
+
}
|
|
@@ -1,11 +1,9 @@
|
|
|
1
1
|
import { createBrowserRouter } from "react-router";
|
|
2
|
-
import { userService } from "./api/services/user.service";
|
|
3
2
|
import { ErrorBoundary } from "./components/ErrorBoundary";
|
|
4
3
|
import Layout from "./components/Layout";
|
|
5
4
|
import About from "./pages/About";
|
|
6
5
|
import Home from "./pages/Home";
|
|
7
6
|
import NotFound from "./pages/NotFound";
|
|
8
|
-
import UserProfile from "./pages/UserProfile";
|
|
9
7
|
|
|
10
8
|
export const router = createBrowserRouter([
|
|
11
9
|
{
|
|
@@ -15,16 +13,6 @@ export const router = createBrowserRouter([
|
|
|
15
13
|
children: [
|
|
16
14
|
{ index: true, Component: Home },
|
|
17
15
|
{ path: "about", Component: About },
|
|
18
|
-
{
|
|
19
|
-
path: "users/:userId",
|
|
20
|
-
loader: async ({ params }) => {
|
|
21
|
-
const id = params.userId;
|
|
22
|
-
if (!id) throw new Response("Missing user id", { status: 400 });
|
|
23
|
-
const user = await userService.getUser(id);
|
|
24
|
-
return user;
|
|
25
|
-
},
|
|
26
|
-
Component: UserProfile,
|
|
27
|
-
},
|
|
28
16
|
{ path: "*", Component: NotFound },
|
|
29
17
|
],
|
|
30
18
|
},
|
|
@@ -1,13 +1,7 @@
|
|
|
1
1
|
import tailwindcss from "@tailwindcss/vite";
|
|
2
2
|
import react from "@vitejs/plugin-react";
|
|
3
|
-
import path from "path";
|
|
4
3
|
import { defineConfig } from "vite";
|
|
5
4
|
|
|
6
5
|
export default defineConfig({
|
|
7
6
|
plugins: [react(), tailwindcss()],
|
|
8
|
-
resolve: {
|
|
9
|
-
alias: {
|
|
10
|
-
"@": path.resolve(__dirname, "./src"),
|
|
11
|
-
},
|
|
12
|
-
},
|
|
13
7
|
});
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { ClerkProvider } from "@clerk/clerk-react";
|
|
2
|
-
|
|
3
|
-
const publishableKey = import.meta.env.VITE_CLERK_PUBLISHABLE_KEY;
|
|
4
|
-
|
|
5
|
-
if (!publishableKey) {
|
|
6
|
-
throw new Error("Missing Publishable Key");
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
export function AuthProvider({ children }: { children: React.ReactNode }) {
|
|
10
|
-
return (
|
|
11
|
-
<ClerkProvider publishableKey={publishableKey} afterSignOutUrl="/">
|
|
12
|
-
{children}
|
|
13
|
-
</ClerkProvider>
|
|
14
|
-
);
|
|
15
|
-
}
|
|
@@ -1,115 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "clerk",
|
|
3
|
-
"displayName": "Clerk",
|
|
4
|
-
"description": "Clerk Authentication",
|
|
5
|
-
"category": "auth",
|
|
6
|
-
"provider": "clerk",
|
|
7
|
-
"supportedFrameworks": ["nextjs", "express", "react-vite"],
|
|
8
|
-
"frameworkConfigs": {
|
|
9
|
-
"nextjs": {
|
|
10
|
-
"dependencies": {
|
|
11
|
-
"@clerk/nextjs": "^6.10.2"
|
|
12
|
-
},
|
|
13
|
-
"envVars": [
|
|
14
|
-
{
|
|
15
|
-
"key": "NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY",
|
|
16
|
-
"value": "",
|
|
17
|
-
"description": "Clerk publishable key (from Clerk dashboard)",
|
|
18
|
-
"required": true
|
|
19
|
-
},
|
|
20
|
-
{
|
|
21
|
-
"key": "CLERK_SECRET_KEY",
|
|
22
|
-
"value": "",
|
|
23
|
-
"description": "Clerk secret key (from Clerk dashboard)",
|
|
24
|
-
"required": true
|
|
25
|
-
},
|
|
26
|
-
{
|
|
27
|
-
"key": "NEXT_PUBLIC_CLERK_SIGN_IN_URL",
|
|
28
|
-
"value": "/sign-in",
|
|
29
|
-
"description": "Sign in page URL",
|
|
30
|
-
"required": true
|
|
31
|
-
},
|
|
32
|
-
{
|
|
33
|
-
"key": "NEXT_PUBLIC_CLERK_SIGN_UP_URL",
|
|
34
|
-
"value": "/sign-up",
|
|
35
|
-
"description": "Sign up page URL",
|
|
36
|
-
"required": true
|
|
37
|
-
},
|
|
38
|
-
{
|
|
39
|
-
"key": "NEXT_PUBLIC_CLERK_AFTER_SIGN_IN_URL",
|
|
40
|
-
"value": "/",
|
|
41
|
-
"description": "Redirect URL after sign in",
|
|
42
|
-
"required": true
|
|
43
|
-
},
|
|
44
|
-
{
|
|
45
|
-
"key": "NEXT_PUBLIC_CLERK_AFTER_SIGN_UP_URL",
|
|
46
|
-
"value": "/",
|
|
47
|
-
"description": "Redirect URL after sign up",
|
|
48
|
-
"required": true
|
|
49
|
-
}
|
|
50
|
-
],
|
|
51
|
-
"patches": [
|
|
52
|
-
{
|
|
53
|
-
"type": "create-file",
|
|
54
|
-
"description": "Create Clerk auth provider",
|
|
55
|
-
"source": "nextjs/auth-provider.tsx",
|
|
56
|
-
"destination": "{{lib}}/auth-provider.tsx"
|
|
57
|
-
},
|
|
58
|
-
{
|
|
59
|
-
"type": "create-file",
|
|
60
|
-
"description": "Create Clerk middleware",
|
|
61
|
-
"source": "nextjs/middleware.ts",
|
|
62
|
-
"destination": "middleware.ts"
|
|
63
|
-
}
|
|
64
|
-
]
|
|
65
|
-
},
|
|
66
|
-
"express": {
|
|
67
|
-
"dependencies": {
|
|
68
|
-
"@clerk/express": "^1.3.0"
|
|
69
|
-
},
|
|
70
|
-
"envVars": [
|
|
71
|
-
{
|
|
72
|
-
"key": "CLERK_PUBLISHABLE_KEY",
|
|
73
|
-
"value": "",
|
|
74
|
-
"description": "Clerk publishable key (from Clerk dashboard)",
|
|
75
|
-
"required": true
|
|
76
|
-
},
|
|
77
|
-
{
|
|
78
|
-
"key": "CLERK_SECRET_KEY",
|
|
79
|
-
"value": "",
|
|
80
|
-
"description": "Clerk secret key (from Clerk dashboard)",
|
|
81
|
-
"required": true
|
|
82
|
-
}
|
|
83
|
-
],
|
|
84
|
-
"patches": [
|
|
85
|
-
{
|
|
86
|
-
"type": "create-file",
|
|
87
|
-
"description": "Create Clerk auth utilities",
|
|
88
|
-
"source": "express/auth.ts",
|
|
89
|
-
"destination": "{{lib}}/auth.ts"
|
|
90
|
-
}
|
|
91
|
-
]
|
|
92
|
-
},
|
|
93
|
-
"react-vite": {
|
|
94
|
-
"dependencies": {
|
|
95
|
-
"@clerk/clerk-react": "^5.15.0"
|
|
96
|
-
},
|
|
97
|
-
"envVars": [
|
|
98
|
-
{
|
|
99
|
-
"key": "VITE_CLERK_PUBLISHABLE_KEY",
|
|
100
|
-
"value": "",
|
|
101
|
-
"description": "Clerk publishable key (from Clerk dashboard)",
|
|
102
|
-
"required": true
|
|
103
|
-
}
|
|
104
|
-
],
|
|
105
|
-
"patches": [
|
|
106
|
-
{
|
|
107
|
-
"type": "create-file",
|
|
108
|
-
"description": "Create Clerk auth provider",
|
|
109
|
-
"source": "react/auth-provider.tsx",
|
|
110
|
-
"destination": "{{lib}}/auth-provider.tsx"
|
|
111
|
-
}
|
|
112
|
-
]
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
}
|