create-prisma 0.1.3 → 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-DgN5mAMV.mjs +1677 -0
- 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 +5 -2
- 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 +14 -11
- package/templates/create/hono/deno.json.hbs +5 -0
- package/templates/create/hono/package.json.hbs +4 -1
- 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 +3 -3
- package/templates/create/hono/src/lib/prisma.ts.hbs +53 -0
- package/templates/create/hono/tsconfig.json +1 -2
- package/templates/create/next/.yarnrc.yml.hbs +3 -0
- package/templates/create/next/README.md.hbs +9 -6
- 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/dist/create-fJECj1B0.mjs +0 -1026
- package/templates/create/next/app/globals.css +0 -47
- package/templates/create/next/app/page.tsx.hbs +0 -40
- package/templates/init/prisma/index.ts.hbs +0 -44
- /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,25 +4,28 @@ Generated by `create-prisma` with the Hono template.
|
|
|
4
4
|
|
|
5
5
|
## Scripts
|
|
6
6
|
|
|
7
|
-
- `
|
|
8
|
-
- `
|
|
9
|
-
- `
|
|
7
|
+
- `{{runScriptCommand packageManager "dev"}}` - start local dev server
|
|
8
|
+
- `{{runScriptCommand packageManager "build"}}` - typecheck and compile
|
|
9
|
+
- `{{runScriptCommand packageManager "start"}}` - run compiled server from `dist/`
|
|
10
10
|
|
|
11
11
|
## Prisma
|
|
12
12
|
|
|
13
13
|
1. Make sure dependencies are installed.
|
|
14
14
|
2. Generate Prisma Client:
|
|
15
15
|
|
|
16
|
-
|
|
17
|
-
bunx --bun prisma generate
|
|
18
|
-
```
|
|
16
|
+
`{{runScriptCommand packageManager "db:generate"}}`
|
|
19
17
|
|
|
20
18
|
3. Run your first migration:
|
|
21
19
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
```
|
|
25
|
-
{{#if useBasicSchema}}
|
|
20
|
+
`{{runScriptCommand packageManager "db:migrate"}}`
|
|
21
|
+
4. Seed the database:
|
|
26
22
|
|
|
27
|
-
|
|
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`.
|
|
28
|
+
{{#if (eq schemaPreset "basic")}}
|
|
29
|
+
|
|
30
|
+
The template includes a basic `User` model, a sample `GET /users` endpoint, and seed data in `prisma/seed.ts`.
|
|
28
31
|
{{/if}}
|
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "{{projectName}}",
|
|
3
3
|
"private": true,
|
|
4
|
+
{{#if (packageManagerManifestValue packageManager)}}
|
|
5
|
+
"packageManager": "{{packageManagerManifestValue packageManager}}",
|
|
6
|
+
{{/if}}
|
|
4
7
|
"type": "module",
|
|
5
8
|
"scripts": {
|
|
6
9
|
"dev": "tsx watch src/index.ts",
|
|
7
10
|
"build": "tsc",
|
|
8
|
-
"start": "
|
|
11
|
+
"start": "tsx dist/src/index.js"
|
|
9
12
|
},
|
|
10
13
|
"dependencies": {
|
|
11
14
|
"@hono/node-server": "^1.19.9",
|
|
@@ -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,7 +1,7 @@
|
|
|
1
1
|
import { serve } from "@hono/node-server";
|
|
2
2
|
import { Hono } from "hono";
|
|
3
|
-
{{#if
|
|
4
|
-
import { prisma } from "
|
|
3
|
+
{{#if (eq schemaPreset "basic")}}
|
|
4
|
+
import { prisma } from "./lib/prisma";
|
|
5
5
|
{{/if}}
|
|
6
6
|
|
|
7
7
|
const app = new Hono();
|
|
@@ -11,7 +11,7 @@ app.get("/", (c) => {
|
|
|
11
11
|
message: "hello from create-prisma + hono",
|
|
12
12
|
});
|
|
13
13
|
});
|
|
14
|
-
{{#if
|
|
14
|
+
{{#if (eq schemaPreset "basic")}}
|
|
15
15
|
|
|
16
16
|
app.get("/users", async (c) => {
|
|
17
17
|
const users = await prisma.user.findMany({
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import "dotenv/config";
|
|
2
|
+
import { PrismaClient } from "../generated/prisma/client";
|
|
3
|
+
{{#if (eq provider "postgresql")}}
|
|
4
|
+
import { PrismaPg } from "@prisma/adapter-pg";
|
|
5
|
+
{{/if}}
|
|
6
|
+
{{#if (eq provider "cockroachdb")}}
|
|
7
|
+
import { PrismaPg } from "@prisma/adapter-pg";
|
|
8
|
+
{{/if}}
|
|
9
|
+
{{#if (eq provider "mysql")}}
|
|
10
|
+
import { PrismaMariaDb } from "@prisma/adapter-mariadb";
|
|
11
|
+
{{/if}}
|
|
12
|
+
{{#if (eq provider "sqlite")}}
|
|
13
|
+
import { PrismaBetterSqlite3 } from "@prisma/adapter-better-sqlite3";
|
|
14
|
+
{{/if}}
|
|
15
|
+
{{#if (eq provider "sqlserver")}}
|
|
16
|
+
import { PrismaMssql } from "@prisma/adapter-mssql";
|
|
17
|
+
{{/if}}
|
|
18
|
+
|
|
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");
|
|
25
|
+
}
|
|
26
|
+
{{/if}}
|
|
27
|
+
|
|
28
|
+
{{#if (eq provider "postgresql")}}
|
|
29
|
+
const adapter = new PrismaPg({
|
|
30
|
+
connectionString: databaseUrl,
|
|
31
|
+
});
|
|
32
|
+
{{/if}}
|
|
33
|
+
{{#if (eq provider "cockroachdb")}}
|
|
34
|
+
const adapter = new PrismaPg({
|
|
35
|
+
connectionString: databaseUrl,
|
|
36
|
+
});
|
|
37
|
+
{{/if}}
|
|
38
|
+
{{#if (eq provider "mysql")}}
|
|
39
|
+
const adapter = new PrismaMariaDb(databaseUrl);
|
|
40
|
+
{{/if}}
|
|
41
|
+
{{#if (eq provider "sqlite")}}
|
|
42
|
+
const adapter = new PrismaBetterSqlite3({
|
|
43
|
+
url: databaseUrl,
|
|
44
|
+
});
|
|
45
|
+
{{/if}}
|
|
46
|
+
{{#if (eq provider "sqlserver")}}
|
|
47
|
+
const adapter = new PrismaMssql(databaseUrl);
|
|
48
|
+
{{/if}}
|
|
49
|
+
|
|
50
|
+
const prisma = new PrismaClient({ adapter });
|
|
51
|
+
|
|
52
|
+
export { prisma };
|
|
53
|
+
export default prisma;
|
|
@@ -4,24 +4,27 @@ Generated by `create-prisma` with the Next.js template.
|
|
|
4
4
|
|
|
5
5
|
## Scripts
|
|
6
6
|
|
|
7
|
-
- `
|
|
8
|
-
- `
|
|
9
|
-
- `
|
|
7
|
+
- `{{runScriptCommand packageManager "dev"}}` - start local dev server
|
|
8
|
+
- `{{runScriptCommand packageManager "build"}}` - production build
|
|
9
|
+
- `{{runScriptCommand packageManager "start"}}` - run production server
|
|
10
10
|
|
|
11
11
|
## Prisma
|
|
12
12
|
|
|
13
13
|
Prisma setup is scaffolded automatically in:
|
|
14
14
|
|
|
15
15
|
- `prisma/schema.prisma`
|
|
16
|
-
- `prisma/
|
|
16
|
+
- `prisma/seed.ts`
|
|
17
|
+
- `src/lib/prisma.ts`
|
|
17
18
|
- `prisma.config.ts`
|
|
19
|
+
- `src/generated/prisma`
|
|
18
20
|
|
|
19
21
|
Database helper scripts are added to `package.json`:
|
|
20
22
|
|
|
21
23
|
- `db:generate`
|
|
22
24
|
- `db:push`
|
|
23
25
|
- `db:migrate`
|
|
24
|
-
|
|
26
|
+
- `db:seed`
|
|
27
|
+
{{#if (eq schemaPreset "basic")}}
|
|
25
28
|
|
|
26
|
-
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.
|
|
27
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
|
+
});
|