create-prisma 0.1.4 → 0.2.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 +55 -16
- package/dist/cli.mjs +1 -1
- package/dist/{create-Dz9GFGFQ.mjs → create-DgN5mAMV.mjs} +1031 -444
- package/dist/index.d.mts +31 -57
- package/dist/index.mjs +10 -21
- package/package.json +2 -2
- package/templates/create/astro/.yarnrc.yml.hbs +3 -0
- package/templates/create/astro/README.md.hbs +35 -0
- package/templates/create/astro/astro.config.mjs +5 -0
- package/templates/create/astro/deno.json.hbs +5 -0
- package/templates/create/astro/package.json.hbs +22 -0
- package/templates/{init → create/astro}/prisma/schema.prisma.hbs +4 -1
- package/templates/create/astro/prisma/seed.ts.hbs +38 -0
- package/templates/{init/prisma.config.ts.hbs → create/astro/prisma.config.ts} +1 -0
- package/templates/create/astro/public/favicon.svg +14 -0
- package/templates/create/astro/src/env.d.ts +9 -0
- package/templates/create/astro/src/lib/prisma.ts.hbs +53 -0
- package/templates/create/astro/src/pages/api/users.ts.hbs +42 -0
- package/templates/create/astro/src/pages/index.astro.hbs +236 -0
- package/templates/create/astro/tsconfig.json +5 -0
- package/templates/create/hono/.yarnrc.yml.hbs +3 -0
- package/templates/create/hono/README.md.hbs +13 -48
- package/templates/create/hono/deno.json.hbs +5 -0
- package/templates/create/hono/package.json.hbs +3 -0
- package/templates/create/hono/prisma/schema.prisma.hbs +21 -0
- package/templates/create/hono/prisma/seed.ts.hbs +38 -0
- package/templates/create/hono/prisma.config.ts +13 -0
- package/templates/create/hono/src/index.ts.hbs +1 -1
- package/templates/{init/prisma/index.ts.hbs → create/hono/src/lib/prisma.ts.hbs} +14 -13
- package/templates/create/hono/tsconfig.json +1 -2
- package/templates/create/next/.yarnrc.yml.hbs +3 -0
- package/templates/create/next/README.md.hbs +8 -23
- package/templates/create/next/deno.json.hbs +12 -0
- package/templates/create/next/package.json.hbs +4 -0
- package/templates/create/next/prisma/schema.prisma.hbs +21 -0
- package/templates/create/next/prisma/seed.ts.hbs +38 -0
- package/templates/create/next/prisma.config.ts +13 -0
- package/templates/create/next/src/app/globals.css +136 -0
- package/templates/create/next/src/app/page.tsx.hbs +104 -0
- package/templates/create/next/src/lib/prisma.ts.hbs +53 -0
- package/templates/create/nuxt/.yarnrc.yml.hbs +3 -0
- package/templates/create/nuxt/README.md.hbs +32 -0
- package/templates/create/nuxt/app/app.vue +4 -0
- package/templates/create/nuxt/app/pages/index.vue.hbs +230 -0
- package/templates/create/nuxt/deno.json.hbs +5 -0
- package/templates/create/nuxt/nuxt.config.ts +5 -0
- package/templates/create/nuxt/package.json.hbs +27 -0
- package/templates/create/nuxt/prisma/schema.prisma.hbs +21 -0
- package/templates/create/nuxt/prisma/seed.ts.hbs +38 -0
- package/templates/create/nuxt/prisma.config.ts +13 -0
- package/templates/create/nuxt/public/robots.txt +2 -0
- package/templates/create/nuxt/server/api/users.get.ts.hbs +36 -0
- package/templates/create/nuxt/server/utils/prisma.ts.hbs +53 -0
- package/templates/create/nuxt/tsconfig.json +17 -0
- package/templates/create/svelte/.vscode/extensions.json +3 -0
- package/templates/create/svelte/.yarnrc.yml.hbs +3 -0
- package/templates/create/svelte/README.md.hbs +34 -0
- package/templates/create/svelte/deno.json.hbs +5 -0
- package/templates/create/svelte/package.json.hbs +28 -0
- package/templates/create/svelte/prisma/schema.prisma.hbs +21 -0
- package/templates/create/svelte/prisma/seed.ts.hbs +87 -0
- package/templates/create/svelte/prisma.config.ts +13 -0
- package/templates/create/svelte/src/app.d.ts +13 -0
- package/templates/create/svelte/src/app.html +11 -0
- package/templates/create/svelte/src/lib/assets/favicon.svg +1 -0
- package/templates/create/svelte/src/lib/index.ts +1 -0
- package/templates/create/svelte/src/lib/server/prisma.ts.hbs +53 -0
- package/templates/create/svelte/src/routes/+layout.svelte +11 -0
- package/templates/create/svelte/src/routes/+page.server.ts.hbs +28 -0
- package/templates/create/svelte/src/routes/+page.svelte.hbs +350 -0
- package/templates/create/svelte/static/robots.txt +3 -0
- package/templates/create/svelte/svelte.config.js +13 -0
- package/templates/create/svelte/tsconfig.json +20 -0
- package/templates/create/svelte/vite.config.ts +6 -0
- package/templates/create/turborepo/.yarnrc.yml.hbs +3 -0
- package/templates/create/turborepo/README.md.hbs +29 -0
- package/templates/create/turborepo/apps/api/package.json.hbs +21 -0
- package/templates/create/turborepo/apps/api/src/index.ts.hbs +45 -0
- package/templates/create/turborepo/apps/api/tsconfig.json +17 -0
- package/templates/create/turborepo/deno.json.hbs +5 -0
- package/templates/create/turborepo/package.json.hbs +24 -0
- package/templates/create/turborepo/packages/db/package.json.hbs +17 -0
- package/templates/create/turborepo/packages/db/prisma/schema.prisma.hbs +21 -0
- package/templates/create/turborepo/packages/db/prisma/seed.ts.hbs +38 -0
- package/templates/create/turborepo/packages/db/prisma.config.ts +13 -0
- package/templates/create/turborepo/packages/db/src/client.ts.hbs +58 -0
- package/templates/create/turborepo/packages/db/src/index.ts +2 -0
- package/templates/create/turborepo/packages/db/tsconfig.json +19 -0
- package/templates/create/turborepo/turbo.json +34 -0
- package/templates/create/next/app/globals.css +0 -47
- package/templates/create/next/app/page.tsx.hbs +0 -46
- /package/templates/create/next/{app → src/app}/layout.tsx.hbs +0 -0
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
---
|
|
2
|
+
{{#if (eq schemaPreset "basic")}}
|
|
3
|
+
import prisma from "../lib/prisma";
|
|
4
|
+
|
|
5
|
+
const formatter = new Intl.DateTimeFormat("en", {
|
|
6
|
+
dateStyle: "medium",
|
|
7
|
+
timeStyle: "short",
|
|
8
|
+
});
|
|
9
|
+
|
|
10
|
+
const users = await prisma.user
|
|
11
|
+
.findMany({
|
|
12
|
+
take: 10,
|
|
13
|
+
orderBy: {
|
|
14
|
+
createdAt: "desc",
|
|
15
|
+
},
|
|
16
|
+
})
|
|
17
|
+
.catch(() => undefined);
|
|
18
|
+
{{/if}}
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
<html lang="en">
|
|
22
|
+
<head>
|
|
23
|
+
<meta charset="utf-8" />
|
|
24
|
+
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
|
|
25
|
+
<meta name="viewport" content="width=device-width" />
|
|
26
|
+
<meta name="generator" content={Astro.generator} />
|
|
27
|
+
<title>create-prisma + astro</title>
|
|
28
|
+
</head>
|
|
29
|
+
<body>
|
|
30
|
+
<main class="shell">
|
|
31
|
+
<div class="hero">
|
|
32
|
+
<p class="eyebrow">Astro + Prisma 7</p>
|
|
33
|
+
{{#if (eq schemaPreset "basic")}}
|
|
34
|
+
<h1>Users from your database, loaded on the server.</h1>
|
|
35
|
+
<p class="lede">
|
|
36
|
+
This page reads from <code>src/pages/index.astro</code> using the Prisma instance in
|
|
37
|
+
<code>src/lib/prisma.ts</code>. An Astro API route is also scaffolded in
|
|
38
|
+
<code>src/pages/api/users.ts</code>.
|
|
39
|
+
</p>
|
|
40
|
+
</div>
|
|
41
|
+
|
|
42
|
+
<section class="panel">
|
|
43
|
+
<div class="panel-header">
|
|
44
|
+
<h2>Seeded users</h2>
|
|
45
|
+
<span>{users?.length ?? 0} total</span>
|
|
46
|
+
</div>
|
|
47
|
+
|
|
48
|
+
{!users ? (
|
|
49
|
+
<p class="empty">
|
|
50
|
+
Could not query users yet. Run <code>db:migrate</code>, then <code>db:seed</code>,
|
|
51
|
+
then refresh.
|
|
52
|
+
</p>
|
|
53
|
+
) : users.length === 0 ? (
|
|
54
|
+
<p class="empty">No users yet. Run <code>db:seed</code> after your first migration.</p>
|
|
55
|
+
) : (
|
|
56
|
+
<ul class="users">
|
|
57
|
+
{users.map((user) => (
|
|
58
|
+
<li>
|
|
59
|
+
<div>
|
|
60
|
+
<strong>{user.name ?? "Unnamed user"}</strong>
|
|
61
|
+
<p>{user.email}</p>
|
|
62
|
+
</div>
|
|
63
|
+
<time datetime={user.createdAt.toISOString()}>
|
|
64
|
+
{formatter.format(user.createdAt)}
|
|
65
|
+
</time>
|
|
66
|
+
</li>
|
|
67
|
+
))}
|
|
68
|
+
</ul>
|
|
69
|
+
)}
|
|
70
|
+
</section>
|
|
71
|
+
{{else}}
|
|
72
|
+
<h1>Your Astro app is ready.</h1>
|
|
73
|
+
<p class="lede">
|
|
74
|
+
Edit <code>prisma/schema.prisma</code>, run <code>db:migrate</code>, then load your data
|
|
75
|
+
in Astro pages or API routes with the Prisma instance in <code>src/lib/prisma.ts</code>.
|
|
76
|
+
</p>
|
|
77
|
+
</div>
|
|
78
|
+
|
|
79
|
+
<section class="panel">
|
|
80
|
+
<div class="panel-header">
|
|
81
|
+
<h2>What's included</h2>
|
|
82
|
+
<span>Starter kit</span>
|
|
83
|
+
</div>
|
|
84
|
+
|
|
85
|
+
<ul class="users">
|
|
86
|
+
<li>
|
|
87
|
+
<div>
|
|
88
|
+
<strong>Prisma client</strong>
|
|
89
|
+
<p>Use the shared instance from <code>src/lib/prisma.ts</code>.</p>
|
|
90
|
+
</div>
|
|
91
|
+
</li>
|
|
92
|
+
<li>
|
|
93
|
+
<div>
|
|
94
|
+
<strong>API route example</strong>
|
|
95
|
+
<p>See <code>src/pages/api/users.ts</code> for an Astro server endpoint.</p>
|
|
96
|
+
</div>
|
|
97
|
+
</li>
|
|
98
|
+
<li>
|
|
99
|
+
<div>
|
|
100
|
+
<strong>Seed script</strong>
|
|
101
|
+
<p>Run <code>db:seed</code> after your first migration.</p>
|
|
102
|
+
</div>
|
|
103
|
+
</li>
|
|
104
|
+
</ul>
|
|
105
|
+
</section>
|
|
106
|
+
{{/if}}
|
|
107
|
+
</main>
|
|
108
|
+
</body>
|
|
109
|
+
</html>
|
|
110
|
+
|
|
111
|
+
<style>
|
|
112
|
+
:global(body) {
|
|
113
|
+
margin: 0;
|
|
114
|
+
font-family:
|
|
115
|
+
"Instrument Sans",
|
|
116
|
+
"Segoe UI",
|
|
117
|
+
sans-serif;
|
|
118
|
+
background: #f7f8fb;
|
|
119
|
+
color: #0f172a;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
.shell {
|
|
123
|
+
width: min(64rem, 100%);
|
|
124
|
+
margin: 0 auto;
|
|
125
|
+
padding: 4rem 1.5rem 5rem;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
.hero {
|
|
129
|
+
margin-bottom: 2rem;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
.eyebrow {
|
|
133
|
+
margin: 0 0 0.75rem;
|
|
134
|
+
color: #10b981;
|
|
135
|
+
font-size: 0.875rem;
|
|
136
|
+
font-weight: 700;
|
|
137
|
+
letter-spacing: 0.14em;
|
|
138
|
+
text-transform: uppercase;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
h1 {
|
|
142
|
+
margin: 0;
|
|
143
|
+
max-width: 12ch;
|
|
144
|
+
font-size: clamp(2.75rem, 7vw, 5rem);
|
|
145
|
+
line-height: 0.95;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
.lede {
|
|
149
|
+
max-width: 42rem;
|
|
150
|
+
font-size: 1.05rem;
|
|
151
|
+
line-height: 1.7;
|
|
152
|
+
color: #475569;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
.panel {
|
|
156
|
+
padding: 1.5rem;
|
|
157
|
+
border: 1px solid #dbe2ea;
|
|
158
|
+
border-radius: 1.5rem;
|
|
159
|
+
background: #ffffff;
|
|
160
|
+
box-shadow: 0 12px 32px rgba(15, 23, 42, 0.06);
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
.panel-header {
|
|
164
|
+
display: flex;
|
|
165
|
+
align-items: center;
|
|
166
|
+
justify-content: space-between;
|
|
167
|
+
gap: 1rem;
|
|
168
|
+
margin-bottom: 1rem;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
h2 {
|
|
172
|
+
margin: 0;
|
|
173
|
+
font-size: 1.125rem;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
.panel-header span,
|
|
177
|
+
.empty,
|
|
178
|
+
time {
|
|
179
|
+
color: #64748b;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
.panel p {
|
|
183
|
+
color: #64748b;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
.users {
|
|
187
|
+
list-style: none;
|
|
188
|
+
margin: 0;
|
|
189
|
+
padding: 0;
|
|
190
|
+
display: grid;
|
|
191
|
+
gap: 0.75rem;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
.users li {
|
|
195
|
+
display: flex;
|
|
196
|
+
align-items: center;
|
|
197
|
+
justify-content: space-between;
|
|
198
|
+
gap: 1rem;
|
|
199
|
+
padding: 1rem 1.125rem;
|
|
200
|
+
border-radius: 1rem;
|
|
201
|
+
background: #f8fafc;
|
|
202
|
+
border: 1px solid #dbe2ea;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
.users p {
|
|
206
|
+
margin: 0.2rem 0 0;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
time {
|
|
210
|
+
font-size: 0.875rem;
|
|
211
|
+
white-space: nowrap;
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
code {
|
|
215
|
+
padding: 0.15rem 0.4rem;
|
|
216
|
+
border-radius: 0.35rem;
|
|
217
|
+
background: #eef2f7;
|
|
218
|
+
font-family:
|
|
219
|
+
SFMono-Regular,
|
|
220
|
+
Consolas,
|
|
221
|
+
monospace;
|
|
222
|
+
font-size: 0.95em;
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
@media (max-width: 640px) {
|
|
226
|
+
.shell {
|
|
227
|
+
padding-top: 3rem;
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
.users li,
|
|
231
|
+
.panel-header {
|
|
232
|
+
flex-direction: column;
|
|
233
|
+
align-items: flex-start;
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
</style>
|
|
@@ -4,63 +4,28 @@ Generated by `create-prisma` with the Hono template.
|
|
|
4
4
|
|
|
5
5
|
## Scripts
|
|
6
6
|
|
|
7
|
-
{{
|
|
8
|
-
- `
|
|
9
|
-
- `
|
|
10
|
-
- `bun run start` - run compiled server from `dist/`
|
|
11
|
-
{{else}}
|
|
12
|
-
{{#if (eq packageManager "pnpm")}}
|
|
13
|
-
- `pnpm dev` - start local dev server
|
|
14
|
-
- `pnpm build` - typecheck and compile
|
|
15
|
-
- `pnpm start` - run compiled server from `dist/`
|
|
16
|
-
{{else}}
|
|
17
|
-
{{#if (eq packageManager "npm")}}
|
|
18
|
-
- `npm run dev` - start local dev server
|
|
19
|
-
- `npm run build` - typecheck and compile
|
|
20
|
-
- `npm run start` - run compiled server from `dist/`
|
|
21
|
-
{{else}}
|
|
22
|
-
- `npm run dev` or `pnpm dev` or `bun run dev` - start local dev server
|
|
23
|
-
- `npm run build` or `pnpm build` or `bun run build` - typecheck and compile
|
|
24
|
-
- `npm run start` or `pnpm start` or `bun run start` - run compiled server from `dist/`
|
|
25
|
-
{{/if}}
|
|
26
|
-
{{/if}}
|
|
27
|
-
{{/if}}
|
|
7
|
+
- `{{runScriptCommand packageManager "dev"}}` - start local dev server
|
|
8
|
+
- `{{runScriptCommand packageManager "build"}}` - typecheck and compile
|
|
9
|
+
- `{{runScriptCommand packageManager "start"}}` - run compiled server from `dist/`
|
|
28
10
|
|
|
29
11
|
## Prisma
|
|
30
12
|
|
|
31
13
|
1. Make sure dependencies are installed.
|
|
32
14
|
2. Generate Prisma Client:
|
|
33
15
|
|
|
34
|
-
{{
|
|
35
|
-
`bun run db:generate`
|
|
36
|
-
{{else}}
|
|
37
|
-
{{#if (eq packageManager "pnpm")}}
|
|
38
|
-
`pnpm db:generate`
|
|
39
|
-
{{else}}
|
|
40
|
-
{{#if (eq packageManager "npm")}}
|
|
41
|
-
`npm run db:generate`
|
|
42
|
-
{{else}}
|
|
43
|
-
`npm run db:generate` or `pnpm db:generate` or `bun run db:generate`
|
|
44
|
-
{{/if}}
|
|
45
|
-
{{/if}}
|
|
46
|
-
{{/if}}
|
|
16
|
+
`{{runScriptCommand packageManager "db:generate"}}`
|
|
47
17
|
|
|
48
18
|
3. Run your first migration:
|
|
49
19
|
|
|
50
|
-
{{
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
{{
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
{{else}}
|
|
59
|
-
`npm run db:migrate` or `pnpm db:migrate` or `bun run db:migrate`
|
|
60
|
-
{{/if}}
|
|
61
|
-
{{/if}}
|
|
62
|
-
{{/if}}
|
|
20
|
+
`{{runScriptCommand packageManager "db:migrate"}}`
|
|
21
|
+
4. Seed the database:
|
|
22
|
+
|
|
23
|
+
`{{runScriptCommand packageManager "db:seed"}}`
|
|
24
|
+
|
|
25
|
+
5. Use the Prisma client from `src/lib/prisma.ts`.
|
|
26
|
+
|
|
27
|
+
Generated Prisma files are written to `src/generated/prisma`.
|
|
63
28
|
{{#if (eq schemaPreset "basic")}}
|
|
64
29
|
|
|
65
|
-
The template includes a basic `User` model
|
|
30
|
+
The template includes a basic `User` model, a sample `GET /users` endpoint, and seed data in `prisma/seed.ts`.
|
|
66
31
|
{{/if}}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
generator client {
|
|
2
|
+
provider = "prisma-client"
|
|
3
|
+
output = "../src/generated/prisma"
|
|
4
|
+
{{#if (eq packageManager "deno")}}
|
|
5
|
+
runtime = "deno"
|
|
6
|
+
{{/if}}
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
datasource db {
|
|
10
|
+
provider = "{{provider}}"
|
|
11
|
+
}
|
|
12
|
+
{{#if (eq schemaPreset "basic")}}
|
|
13
|
+
|
|
14
|
+
model User {
|
|
15
|
+
id String @id @default(cuid())
|
|
16
|
+
email String @unique
|
|
17
|
+
name String?
|
|
18
|
+
createdAt DateTime @default(now())
|
|
19
|
+
updatedAt DateTime @updatedAt
|
|
20
|
+
}
|
|
21
|
+
{{/if}}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import prisma from "../src/lib/prisma";
|
|
2
|
+
|
|
3
|
+
async function main() {
|
|
4
|
+
{{#if (eq schemaPreset "basic")}}
|
|
5
|
+
const users = await Promise.all([
|
|
6
|
+
prisma.user.upsert({
|
|
7
|
+
where: { email: "alice@prisma.io" },
|
|
8
|
+
update: { name: "Alice" },
|
|
9
|
+
create: {
|
|
10
|
+
email: "alice@prisma.io",
|
|
11
|
+
name: "Alice",
|
|
12
|
+
},
|
|
13
|
+
}),
|
|
14
|
+
prisma.user.upsert({
|
|
15
|
+
where: { email: "bob@prisma.io" },
|
|
16
|
+
update: { name: "Bob" },
|
|
17
|
+
create: {
|
|
18
|
+
email: "bob@prisma.io",
|
|
19
|
+
name: "Bob",
|
|
20
|
+
},
|
|
21
|
+
}),
|
|
22
|
+
]);
|
|
23
|
+
|
|
24
|
+
console.log(`Seeded ${users.length} users.`);
|
|
25
|
+
{{else}}
|
|
26
|
+
console.log("No seed data defined for the empty schema preset.");
|
|
27
|
+
{{/if}}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
main()
|
|
31
|
+
.then(async () => {
|
|
32
|
+
await prisma.$disconnect();
|
|
33
|
+
})
|
|
34
|
+
.catch(async (error) => {
|
|
35
|
+
console.error(error);
|
|
36
|
+
await prisma.$disconnect();
|
|
37
|
+
process.exit(1);
|
|
38
|
+
});
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import "dotenv/config";
|
|
2
|
+
import { defineConfig, env } from "prisma/config";
|
|
3
|
+
|
|
4
|
+
export default defineConfig({
|
|
5
|
+
schema: "prisma/schema.prisma",
|
|
6
|
+
migrations: {
|
|
7
|
+
path: "prisma/migrations",
|
|
8
|
+
seed: "tsx prisma/seed.ts",
|
|
9
|
+
},
|
|
10
|
+
datasource: {
|
|
11
|
+
url: env("DATABASE_URL"),
|
|
12
|
+
},
|
|
13
|
+
});
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import "dotenv/config";
|
|
2
|
-
import { PrismaClient } from "
|
|
2
|
+
import { PrismaClient } from "../generated/prisma/client";
|
|
3
3
|
{{#if (eq provider "postgresql")}}
|
|
4
4
|
import { PrismaPg } from "@prisma/adapter-pg";
|
|
5
5
|
{{/if}}
|
|
@@ -16,37 +16,38 @@ import { PrismaBetterSqlite3 } from "@prisma/adapter-better-sqlite3";
|
|
|
16
16
|
import { PrismaMssql } from "@prisma/adapter-mssql";
|
|
17
17
|
{{/if}}
|
|
18
18
|
|
|
19
|
-
|
|
20
|
-
|
|
19
|
+
{{#if (eq provider "sqlite")}}
|
|
20
|
+
const databaseUrl = process.env.DATABASE_URL ?? "file:./dev.db";
|
|
21
|
+
{{else}}
|
|
22
|
+
const databaseUrl = process.env.DATABASE_URL;
|
|
23
|
+
if (!databaseUrl) {
|
|
24
|
+
throw new Error("DATABASE_URL is required");
|
|
21
25
|
}
|
|
26
|
+
{{/if}}
|
|
22
27
|
|
|
23
28
|
{{#if (eq provider "postgresql")}}
|
|
24
29
|
const adapter = new PrismaPg({
|
|
25
|
-
connectionString:
|
|
30
|
+
connectionString: databaseUrl,
|
|
26
31
|
});
|
|
27
32
|
{{/if}}
|
|
28
33
|
{{#if (eq provider "cockroachdb")}}
|
|
29
34
|
const adapter = new PrismaPg({
|
|
30
|
-
connectionString:
|
|
35
|
+
connectionString: databaseUrl,
|
|
31
36
|
});
|
|
32
37
|
{{/if}}
|
|
33
38
|
{{#if (eq provider "mysql")}}
|
|
34
|
-
const adapter = new PrismaMariaDb(
|
|
39
|
+
const adapter = new PrismaMariaDb(databaseUrl);
|
|
35
40
|
{{/if}}
|
|
36
41
|
{{#if (eq provider "sqlite")}}
|
|
37
42
|
const adapter = new PrismaBetterSqlite3({
|
|
38
|
-
url:
|
|
43
|
+
url: databaseUrl,
|
|
39
44
|
});
|
|
40
45
|
{{/if}}
|
|
41
46
|
{{#if (eq provider "sqlserver")}}
|
|
42
|
-
const adapter = new PrismaMssql(
|
|
47
|
+
const adapter = new PrismaMssql(databaseUrl);
|
|
43
48
|
{{/if}}
|
|
44
49
|
|
|
45
|
-
const prisma =
|
|
46
|
-
|
|
47
|
-
if (process.env.NODE_ENV !== "production") {
|
|
48
|
-
globalThis.prisma = prisma;
|
|
49
|
-
}
|
|
50
|
+
const prisma = new PrismaClient({ adapter });
|
|
50
51
|
|
|
51
52
|
export { prisma };
|
|
52
53
|
export default prisma;
|
|
@@ -4,42 +4,27 @@ Generated by `create-prisma` with the Next.js template.
|
|
|
4
4
|
|
|
5
5
|
## Scripts
|
|
6
6
|
|
|
7
|
-
{{
|
|
8
|
-
- `
|
|
9
|
-
- `
|
|
10
|
-
- `bun run start` - run production server
|
|
11
|
-
{{else}}
|
|
12
|
-
{{#if (eq packageManager "pnpm")}}
|
|
13
|
-
- `pnpm dev` - start local dev server
|
|
14
|
-
- `pnpm build` - production build
|
|
15
|
-
- `pnpm start` - run production server
|
|
16
|
-
{{else}}
|
|
17
|
-
{{#if (eq packageManager "npm")}}
|
|
18
|
-
- `npm run dev` - start local dev server
|
|
19
|
-
- `npm run build` - production build
|
|
20
|
-
- `npm run start` - run production server
|
|
21
|
-
{{else}}
|
|
22
|
-
- `npm run dev` or `pnpm dev` or `bun dev` - start local dev server
|
|
23
|
-
- `npm run build` or `pnpm build` or `bun run build` - production build
|
|
24
|
-
- `npm run start` or `pnpm start` or `bun run start` - run production server
|
|
25
|
-
{{/if}}
|
|
26
|
-
{{/if}}
|
|
27
|
-
{{/if}}
|
|
7
|
+
- `{{runScriptCommand packageManager "dev"}}` - start local dev server
|
|
8
|
+
- `{{runScriptCommand packageManager "build"}}` - production build
|
|
9
|
+
- `{{runScriptCommand packageManager "start"}}` - run production server
|
|
28
10
|
|
|
29
11
|
## Prisma
|
|
30
12
|
|
|
31
13
|
Prisma setup is scaffolded automatically in:
|
|
32
14
|
|
|
33
15
|
- `prisma/schema.prisma`
|
|
34
|
-
- `prisma/
|
|
16
|
+
- `prisma/seed.ts`
|
|
17
|
+
- `src/lib/prisma.ts`
|
|
35
18
|
- `prisma.config.ts`
|
|
19
|
+
- `src/generated/prisma`
|
|
36
20
|
|
|
37
21
|
Database helper scripts are added to `package.json`:
|
|
38
22
|
|
|
39
23
|
- `db:generate`
|
|
40
24
|
- `db:push`
|
|
41
25
|
- `db:migrate`
|
|
26
|
+
- `db:seed`
|
|
42
27
|
{{#if (eq schemaPreset "basic")}}
|
|
43
28
|
|
|
44
|
-
The starter page reads from a basic `User` model so you can verify queries quickly.
|
|
29
|
+
The starter page in `src/app/page.tsx` reads from a basic `User` model so you can verify queries quickly, and `prisma/seed.ts` inserts starter users.
|
|
45
30
|
{{/if}}
|
|
@@ -2,6 +2,9 @@
|
|
|
2
2
|
"name": "{{projectName}}",
|
|
3
3
|
"version": "0.1.0",
|
|
4
4
|
"private": true,
|
|
5
|
+
{{#if (packageManagerManifestValue packageManager)}}
|
|
6
|
+
"packageManager": "{{packageManagerManifestValue packageManager}}",
|
|
7
|
+
{{/if}}
|
|
5
8
|
"type": "module",
|
|
6
9
|
"scripts": {
|
|
7
10
|
"dev": "next dev",
|
|
@@ -20,6 +23,7 @@
|
|
|
20
23
|
"@types/react-dom": "^19",
|
|
21
24
|
"eslint": "^9",
|
|
22
25
|
"eslint-config-next": "16.1.6",
|
|
26
|
+
"tsx": "^4.7.1",
|
|
23
27
|
"typescript": "^5"
|
|
24
28
|
}
|
|
25
29
|
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
generator client {
|
|
2
|
+
provider = "prisma-client"
|
|
3
|
+
output = "../src/generated/prisma"
|
|
4
|
+
{{#if (eq packageManager "deno")}}
|
|
5
|
+
runtime = "deno"
|
|
6
|
+
{{/if}}
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
datasource db {
|
|
10
|
+
provider = "{{provider}}"
|
|
11
|
+
}
|
|
12
|
+
{{#if (eq schemaPreset "basic")}}
|
|
13
|
+
|
|
14
|
+
model User {
|
|
15
|
+
id String @id @default(cuid())
|
|
16
|
+
email String @unique
|
|
17
|
+
name String?
|
|
18
|
+
createdAt DateTime @default(now())
|
|
19
|
+
updatedAt DateTime @updatedAt
|
|
20
|
+
}
|
|
21
|
+
{{/if}}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import prisma from "../src/lib/prisma";
|
|
2
|
+
|
|
3
|
+
async function main() {
|
|
4
|
+
{{#if (eq schemaPreset "basic")}}
|
|
5
|
+
const users = await Promise.all([
|
|
6
|
+
prisma.user.upsert({
|
|
7
|
+
where: { email: "alice@prisma.io" },
|
|
8
|
+
update: { name: "Alice" },
|
|
9
|
+
create: {
|
|
10
|
+
email: "alice@prisma.io",
|
|
11
|
+
name: "Alice",
|
|
12
|
+
},
|
|
13
|
+
}),
|
|
14
|
+
prisma.user.upsert({
|
|
15
|
+
where: { email: "bob@prisma.io" },
|
|
16
|
+
update: { name: "Bob" },
|
|
17
|
+
create: {
|
|
18
|
+
email: "bob@prisma.io",
|
|
19
|
+
name: "Bob",
|
|
20
|
+
},
|
|
21
|
+
}),
|
|
22
|
+
]);
|
|
23
|
+
|
|
24
|
+
console.log(`Seeded ${users.length} users.`);
|
|
25
|
+
{{else}}
|
|
26
|
+
console.log("No seed data defined for the empty schema preset.");
|
|
27
|
+
{{/if}}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
main()
|
|
31
|
+
.then(async () => {
|
|
32
|
+
await prisma.$disconnect();
|
|
33
|
+
})
|
|
34
|
+
.catch(async (error) => {
|
|
35
|
+
console.error(error);
|
|
36
|
+
await prisma.$disconnect();
|
|
37
|
+
process.exit(1);
|
|
38
|
+
});
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import "dotenv/config";
|
|
2
|
+
import { defineConfig, env } from "prisma/config";
|
|
3
|
+
|
|
4
|
+
export default defineConfig({
|
|
5
|
+
schema: "prisma/schema.prisma",
|
|
6
|
+
migrations: {
|
|
7
|
+
path: "prisma/migrations",
|
|
8
|
+
seed: "tsx prisma/seed.ts",
|
|
9
|
+
},
|
|
10
|
+
datasource: {
|
|
11
|
+
url: env("DATABASE_URL"),
|
|
12
|
+
},
|
|
13
|
+
});
|