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.
Files changed (92) hide show
  1. package/README.md +55 -16
  2. package/dist/cli.mjs +1 -1
  3. package/dist/{create-Dz9GFGFQ.mjs → create-DgN5mAMV.mjs} +1031 -444
  4. package/dist/index.d.mts +31 -57
  5. package/dist/index.mjs +10 -21
  6. package/package.json +2 -2
  7. package/templates/create/astro/.yarnrc.yml.hbs +3 -0
  8. package/templates/create/astro/README.md.hbs +35 -0
  9. package/templates/create/astro/astro.config.mjs +5 -0
  10. package/templates/create/astro/deno.json.hbs +5 -0
  11. package/templates/create/astro/package.json.hbs +22 -0
  12. package/templates/{init → create/astro}/prisma/schema.prisma.hbs +4 -1
  13. package/templates/create/astro/prisma/seed.ts.hbs +38 -0
  14. package/templates/{init/prisma.config.ts.hbs → create/astro/prisma.config.ts} +1 -0
  15. package/templates/create/astro/public/favicon.svg +14 -0
  16. package/templates/create/astro/src/env.d.ts +9 -0
  17. package/templates/create/astro/src/lib/prisma.ts.hbs +53 -0
  18. package/templates/create/astro/src/pages/api/users.ts.hbs +42 -0
  19. package/templates/create/astro/src/pages/index.astro.hbs +236 -0
  20. package/templates/create/astro/tsconfig.json +5 -0
  21. package/templates/create/hono/.yarnrc.yml.hbs +3 -0
  22. package/templates/create/hono/README.md.hbs +13 -48
  23. package/templates/create/hono/deno.json.hbs +5 -0
  24. package/templates/create/hono/package.json.hbs +3 -0
  25. package/templates/create/hono/prisma/schema.prisma.hbs +21 -0
  26. package/templates/create/hono/prisma/seed.ts.hbs +38 -0
  27. package/templates/create/hono/prisma.config.ts +13 -0
  28. package/templates/create/hono/src/index.ts.hbs +1 -1
  29. package/templates/{init/prisma/index.ts.hbs → create/hono/src/lib/prisma.ts.hbs} +14 -13
  30. package/templates/create/hono/tsconfig.json +1 -2
  31. package/templates/create/next/.yarnrc.yml.hbs +3 -0
  32. package/templates/create/next/README.md.hbs +8 -23
  33. package/templates/create/next/deno.json.hbs +12 -0
  34. package/templates/create/next/package.json.hbs +4 -0
  35. package/templates/create/next/prisma/schema.prisma.hbs +21 -0
  36. package/templates/create/next/prisma/seed.ts.hbs +38 -0
  37. package/templates/create/next/prisma.config.ts +13 -0
  38. package/templates/create/next/src/app/globals.css +136 -0
  39. package/templates/create/next/src/app/page.tsx.hbs +104 -0
  40. package/templates/create/next/src/lib/prisma.ts.hbs +53 -0
  41. package/templates/create/nuxt/.yarnrc.yml.hbs +3 -0
  42. package/templates/create/nuxt/README.md.hbs +32 -0
  43. package/templates/create/nuxt/app/app.vue +4 -0
  44. package/templates/create/nuxt/app/pages/index.vue.hbs +230 -0
  45. package/templates/create/nuxt/deno.json.hbs +5 -0
  46. package/templates/create/nuxt/nuxt.config.ts +5 -0
  47. package/templates/create/nuxt/package.json.hbs +27 -0
  48. package/templates/create/nuxt/prisma/schema.prisma.hbs +21 -0
  49. package/templates/create/nuxt/prisma/seed.ts.hbs +38 -0
  50. package/templates/create/nuxt/prisma.config.ts +13 -0
  51. package/templates/create/nuxt/public/robots.txt +2 -0
  52. package/templates/create/nuxt/server/api/users.get.ts.hbs +36 -0
  53. package/templates/create/nuxt/server/utils/prisma.ts.hbs +53 -0
  54. package/templates/create/nuxt/tsconfig.json +17 -0
  55. package/templates/create/svelte/.vscode/extensions.json +3 -0
  56. package/templates/create/svelte/.yarnrc.yml.hbs +3 -0
  57. package/templates/create/svelte/README.md.hbs +34 -0
  58. package/templates/create/svelte/deno.json.hbs +5 -0
  59. package/templates/create/svelte/package.json.hbs +28 -0
  60. package/templates/create/svelte/prisma/schema.prisma.hbs +21 -0
  61. package/templates/create/svelte/prisma/seed.ts.hbs +87 -0
  62. package/templates/create/svelte/prisma.config.ts +13 -0
  63. package/templates/create/svelte/src/app.d.ts +13 -0
  64. package/templates/create/svelte/src/app.html +11 -0
  65. package/templates/create/svelte/src/lib/assets/favicon.svg +1 -0
  66. package/templates/create/svelte/src/lib/index.ts +1 -0
  67. package/templates/create/svelte/src/lib/server/prisma.ts.hbs +53 -0
  68. package/templates/create/svelte/src/routes/+layout.svelte +11 -0
  69. package/templates/create/svelte/src/routes/+page.server.ts.hbs +28 -0
  70. package/templates/create/svelte/src/routes/+page.svelte.hbs +350 -0
  71. package/templates/create/svelte/static/robots.txt +3 -0
  72. package/templates/create/svelte/svelte.config.js +13 -0
  73. package/templates/create/svelte/tsconfig.json +20 -0
  74. package/templates/create/svelte/vite.config.ts +6 -0
  75. package/templates/create/turborepo/.yarnrc.yml.hbs +3 -0
  76. package/templates/create/turborepo/README.md.hbs +29 -0
  77. package/templates/create/turborepo/apps/api/package.json.hbs +21 -0
  78. package/templates/create/turborepo/apps/api/src/index.ts.hbs +45 -0
  79. package/templates/create/turborepo/apps/api/tsconfig.json +17 -0
  80. package/templates/create/turborepo/deno.json.hbs +5 -0
  81. package/templates/create/turborepo/package.json.hbs +24 -0
  82. package/templates/create/turborepo/packages/db/package.json.hbs +17 -0
  83. package/templates/create/turborepo/packages/db/prisma/schema.prisma.hbs +21 -0
  84. package/templates/create/turborepo/packages/db/prisma/seed.ts.hbs +38 -0
  85. package/templates/create/turborepo/packages/db/prisma.config.ts +13 -0
  86. package/templates/create/turborepo/packages/db/src/client.ts.hbs +58 -0
  87. package/templates/create/turborepo/packages/db/src/index.ts +2 -0
  88. package/templates/create/turborepo/packages/db/tsconfig.json +19 -0
  89. package/templates/create/turborepo/turbo.json +34 -0
  90. package/templates/create/next/app/globals.css +0 -47
  91. package/templates/create/next/app/page.tsx.hbs +0 -46
  92. /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>
@@ -0,0 +1,5 @@
1
+ {
2
+ "extends": "astro/tsconfigs/strict",
3
+ "include": [".astro/types.d.ts", "**/*"],
4
+ "exclude": ["dist"]
5
+ }
@@ -0,0 +1,3 @@
1
+ {{#if (eq packageManager "yarn")}}
2
+ nodeLinker: node-modules
3
+ {{/if}}
@@ -4,63 +4,28 @@ Generated by `create-prisma` with the Hono template.
4
4
 
5
5
  ## Scripts
6
6
 
7
- {{#if (eq packageManager "bun")}}
8
- - `bun run dev` - start local dev server
9
- - `bun run build` - typecheck and compile
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
- {{#if (eq packageManager "bun")}}
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
- {{#if (eq packageManager "bun")}}
51
- `bun run db:migrate`
52
- {{else}}
53
- {{#if (eq packageManager "pnpm")}}
54
- `pnpm db:migrate`
55
- {{else}}
56
- {{#if (eq packageManager "npm")}}
57
- `npm run db:migrate`
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 and a sample `GET /users` endpoint.
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,5 @@
1
+ {{#if (eq packageManager "deno")}}
2
+ {
3
+ "nodeModulesDir": "auto"
4
+ }
5
+ {{/if}}
@@ -1,6 +1,9 @@
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",
@@ -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
3
  {{#if (eq schemaPreset "basic")}}
4
- import { prisma } from "../prisma";
4
+ import { prisma } from "./lib/prisma";
5
5
  {{/if}}
6
6
 
7
7
  const app = new Hono();
@@ -1,5 +1,5 @@
1
1
  import "dotenv/config";
2
- import { PrismaClient } from "./generated/client";
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
- declare global {
20
- var prisma: PrismaClient | undefined;
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: process.env.{{envVar}} ?? "",
30
+ connectionString: databaseUrl,
26
31
  });
27
32
  {{/if}}
28
33
  {{#if (eq provider "cockroachdb")}}
29
34
  const adapter = new PrismaPg({
30
- connectionString: process.env.{{envVar}} ?? "",
35
+ connectionString: databaseUrl,
31
36
  });
32
37
  {{/if}}
33
38
  {{#if (eq provider "mysql")}}
34
- const adapter = new PrismaMariaDb(process.env.{{envVar}} ?? "");
39
+ const adapter = new PrismaMariaDb(databaseUrl);
35
40
  {{/if}}
36
41
  {{#if (eq provider "sqlite")}}
37
42
  const adapter = new PrismaBetterSqlite3({
38
- url: process.env.{{envVar}} ?? "file:./dev.db",
43
+ url: databaseUrl,
39
44
  });
40
45
  {{/if}}
41
46
  {{#if (eq provider "sqlserver")}}
42
- const adapter = new PrismaMssql(process.env.{{envVar}} ?? "");
47
+ const adapter = new PrismaMssql(databaseUrl);
43
48
  {{/if}}
44
49
 
45
- const prisma = globalThis.prisma ?? new PrismaClient({ adapter });
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;
@@ -10,6 +10,5 @@
10
10
  "forceConsistentCasingInFileNames": true,
11
11
  "outDir": "dist",
12
12
  "rootDir": "."
13
- },
14
- "include": ["src/**/*.ts", "prisma/**/*.ts", "prisma.config.ts"]
13
+ }
15
14
  }
@@ -0,0 +1,3 @@
1
+ {{#if (eq packageManager "yarn")}}
2
+ nodeLinker: node-modules
3
+ {{/if}}
@@ -4,42 +4,27 @@ Generated by `create-prisma` with the Next.js template.
4
4
 
5
5
  ## Scripts
6
6
 
7
- {{#if (eq packageManager "bun")}}
8
- - `bun dev` - start local dev server
9
- - `bun run build` - production build
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/index.ts`
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}}
@@ -0,0 +1,12 @@
1
+ {{#if (eq packageManager "deno")}}
2
+ {
3
+ "nodeModulesDir": "auto",
4
+ "unstable": [
5
+ "bare-node-builtins",
6
+ "detect-cjs",
7
+ "node-globals",
8
+ "unsafe-proto",
9
+ "sloppy-imports"
10
+ ]
11
+ }
12
+ {{/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
+ });