create-prisma 0.7.1-pr.52.181.1 → 0.7.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.
Files changed (129) hide show
  1. package/README.md +25 -19
  2. package/dist/cli.mjs +2 -32
  3. package/dist/index.d.mts +25 -1
  4. package/dist/index.mjs +2 -2290
  5. package/dist/src-B3hRLZ0U.mjs +2527 -0
  6. package/package.json +2 -4
  7. package/templates/create/astro/README.md.hbs +14 -7
  8. package/templates/create/astro/astro.config.mjs.hbs +0 -11
  9. package/templates/create/astro/deno.json.hbs +5 -0
  10. package/templates/create/astro/prisma/schema.prisma.hbs +5 -0
  11. package/templates/create/astro/prisma/seed.ts.hbs +5 -1
  12. package/templates/create/astro/prisma.compute.ts.hbs +10 -0
  13. package/templates/create/astro/src/lib/prisma.ts.hbs +4 -18
  14. package/templates/create/astro/src/pages/api/users.ts.hbs +11 -1
  15. package/templates/create/astro/src/pages/index.astro.hbs +176 -36
  16. package/templates/create/elysia/README.md.hbs +13 -7
  17. package/templates/create/elysia/deno.json.hbs +5 -0
  18. package/templates/create/elysia/package.json.hbs +3 -4
  19. package/templates/create/elysia/prisma/schema.prisma.hbs +6 -0
  20. package/templates/create/elysia/prisma/seed.ts.hbs +5 -1
  21. package/templates/create/elysia/prisma.compute.ts.hbs +11 -0
  22. package/templates/create/elysia/src/index.ts.hbs +17 -13
  23. package/templates/create/elysia/src/lib/prisma.ts.hbs +4 -18
  24. package/templates/create/elysia/tsconfig.json +0 -1
  25. package/templates/create/hono/README.md.hbs +13 -7
  26. package/templates/create/hono/deno.json.hbs +5 -0
  27. package/templates/create/hono/package.json.hbs +2 -2
  28. package/templates/create/hono/prisma/schema.prisma.hbs +6 -0
  29. package/templates/create/hono/prisma/seed.ts.hbs +5 -1
  30. package/templates/create/hono/prisma.compute.ts.hbs +10 -0
  31. package/templates/create/hono/src/index.ts.hbs +7 -9
  32. package/templates/create/hono/src/lib/prisma.ts.hbs +4 -18
  33. package/templates/create/hono/tsconfig.json +0 -1
  34. package/templates/create/nest/README.md.hbs +12 -6
  35. package/templates/create/nest/deno.json.hbs +5 -0
  36. package/templates/create/nest/package.json.hbs +2 -2
  37. package/templates/create/nest/prisma/schema.prisma.hbs +6 -0
  38. package/templates/create/nest/prisma/seed.ts.hbs +5 -1
  39. package/templates/create/nest/prisma.compute.ts.hbs +10 -0
  40. package/templates/create/nest/src/app.controller.ts.hbs +1 -6
  41. package/templates/create/nest/src/app.module.ts.hbs +14 -7
  42. package/templates/create/nest/src/lib/prisma.ts.hbs +4 -17
  43. package/templates/create/nest/src/main.ts.hbs +6 -2
  44. package/templates/create/nest/src/prisma.service.ts.hbs +2 -2
  45. package/templates/create/nest/src/users.controller.ts.hbs +3 -1
  46. package/templates/create/nest/src/users.service.ts.hbs +3 -1
  47. package/templates/create/nest/tsconfig.json +0 -1
  48. package/templates/create/next/README.md.hbs +11 -7
  49. package/templates/create/next/deno.json.hbs +12 -0
  50. package/templates/create/next/prisma/schema.prisma.hbs +5 -0
  51. package/templates/create/next/prisma/seed.ts.hbs +5 -1
  52. package/templates/create/next/prisma.compute.ts.hbs +9 -0
  53. package/templates/create/next/src/app/globals.css +122 -0
  54. package/templates/create/next/src/app/layout.tsx.hbs +2 -2
  55. package/templates/create/next/src/app/page.tsx.hbs +58 -34
  56. package/templates/create/next/src/lib/prisma.ts.hbs +4 -18
  57. package/templates/create/nuxt/README.md.hbs +11 -7
  58. package/templates/create/nuxt/app/pages/index.vue.hbs +175 -43
  59. package/templates/create/nuxt/deno.json.hbs +5 -0
  60. package/templates/create/nuxt/nuxt.config.ts +0 -1
  61. package/templates/create/nuxt/prisma/schema.prisma.hbs +5 -0
  62. package/templates/create/nuxt/prisma/seed.ts.hbs +5 -1
  63. package/templates/create/nuxt/prisma.compute.ts.hbs +9 -0
  64. package/templates/create/nuxt/server/api/users.get.ts.hbs +6 -0
  65. package/templates/create/nuxt/server/utils/prisma.ts.hbs +4 -18
  66. package/templates/create/svelte/README.md.hbs +13 -4
  67. package/templates/create/svelte/deno.json.hbs +5 -0
  68. package/templates/create/svelte/package.json.hbs +1 -2
  69. package/templates/create/svelte/prisma/schema.prisma.hbs +5 -0
  70. package/templates/create/svelte/prisma/seed.ts.hbs +5 -1
  71. package/templates/create/svelte/src/lib/server/prisma.ts.hbs +2 -18
  72. package/templates/create/svelte/src/routes/+layout.svelte +0 -1
  73. package/templates/create/svelte/src/routes/+page.server.ts.hbs +7 -1
  74. package/templates/create/svelte/src/routes/+page.svelte.hbs +297 -41
  75. package/templates/create/svelte/svelte.config.js +13 -0
  76. package/templates/create/svelte/vite.config.ts +0 -3
  77. package/templates/create/tanstack-start/README.md.hbs +11 -7
  78. package/templates/create/tanstack-start/deno.json.hbs +13 -0
  79. package/templates/create/tanstack-start/prisma/schema.prisma.hbs +5 -0
  80. package/templates/create/tanstack-start/prisma/seed.ts.hbs +5 -1
  81. package/templates/create/tanstack-start/prisma.compute.ts.hbs +9 -0
  82. package/templates/create/tanstack-start/src/lib/prisma.server.ts.hbs +4 -18
  83. package/templates/create/tanstack-start/src/routes/__root.tsx.hbs +29 -4
  84. package/templates/create/tanstack-start/src/routes/index.tsx.hbs +76 -35
  85. package/templates/create/tanstack-start/src/styles.css +146 -0
  86. package/templates/create/tanstack-start/tsconfig.json +1 -1
  87. package/templates/create/turborepo/README.md.hbs +9 -7
  88. package/templates/create/turborepo/apps/api/package.json.hbs +9 -2
  89. package/templates/create/turborepo/apps/api/src/index.ts.hbs +12 -28
  90. package/templates/create/turborepo/apps/api/tsconfig.json +0 -1
  91. package/templates/create/turborepo/deno.json.hbs +5 -0
  92. package/templates/create/turborepo/package.json.hbs +6 -0
  93. package/templates/create/turborepo/packages/db/package.json.hbs +5 -4
  94. package/templates/create/turborepo/packages/db/prisma/schema.prisma.hbs +5 -0
  95. package/templates/create/turborepo/packages/db/prisma/seed.ts.hbs +5 -1
  96. package/templates/create/turborepo/packages/db/src/client.ts.hbs +5 -2
  97. package/templates/create/turborepo/packages/db/tsconfig.json +0 -1
  98. package/templates/create/turborepo/prisma.compute.ts.hbs +14 -0
  99. package/templates/create/astro/module.ts.hbs +0 -30
  100. package/templates/create/astro/prisma-composer.config.ts.hbs +0 -8
  101. package/templates/create/astro/service.ts.hbs +0 -19
  102. package/templates/create/elysia/.yarnrc.yml.hbs +0 -3
  103. package/templates/create/elysia/module.ts.hbs +0 -30
  104. package/templates/create/elysia/prisma-composer.config.ts.hbs +0 -8
  105. package/templates/create/elysia/service.ts.hbs +0 -19
  106. package/templates/create/hono/module.ts.hbs +0 -30
  107. package/templates/create/hono/prisma-composer.config.ts.hbs +0 -8
  108. package/templates/create/hono/service.ts.hbs +0 -19
  109. package/templates/create/nest/module.ts.hbs +0 -30
  110. package/templates/create/nest/prisma-composer.config.ts.hbs +0 -8
  111. package/templates/create/nest/src/service.ts.hbs +0 -19
  112. package/templates/create/next/module.ts.hbs +0 -30
  113. package/templates/create/next/prisma-composer.config.ts.hbs +0 -8
  114. package/templates/create/next/service.ts.hbs +0 -19
  115. package/templates/create/nuxt/module.ts.hbs +0 -30
  116. package/templates/create/nuxt/prisma-composer.config.ts.hbs +0 -8
  117. package/templates/create/nuxt/service.ts.hbs +0 -19
  118. package/templates/create/svelte/module.ts.hbs +0 -30
  119. package/templates/create/svelte/prisma-composer.config.ts.hbs +0 -8
  120. package/templates/create/svelte/service.ts.hbs +0 -19
  121. package/templates/create/svelte/svelte.config.js.hbs +0 -10
  122. package/templates/create/tanstack-start/module.ts.hbs +0 -30
  123. package/templates/create/tanstack-start/prisma-composer.config.ts.hbs +0 -8
  124. package/templates/create/tanstack-start/service.ts.hbs +0 -19
  125. package/templates/create/turborepo/apps/api/src/service.ts.hbs +0 -19
  126. package/templates/create/turborepo/module.ts.hbs +0 -30
  127. package/templates/create/turborepo/prisma-composer.config.ts.hbs +0 -8
  128. package/templates/shared/setup-composer-postgres.mjs.hbs +0 -179
  129. package/templates/shared/starter.css +0 -276
@@ -0,0 +1,122 @@
1
+ :root {
2
+ color-scheme: light;
3
+ }
4
+
5
+ * {
6
+ box-sizing: border-box;
7
+ }
8
+
9
+ body {
10
+ margin: 0;
11
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif;
12
+ background: #fff;
13
+ color: #111;
14
+ }
15
+
16
+ .shell {
17
+ max-width: 40rem;
18
+ margin: 0 auto;
19
+ padding: 3rem 1.5rem;
20
+ }
21
+
22
+ .hero {
23
+ margin-bottom: 1.5rem;
24
+ }
25
+
26
+ .eyebrow {
27
+ margin: 0 0 0.5rem;
28
+ color: #666;
29
+ font-size: 0.75rem;
30
+ font-weight: 600;
31
+ letter-spacing: 0.06em;
32
+ text-transform: uppercase;
33
+ }
34
+
35
+ h1 {
36
+ margin: 0;
37
+ font-size: 1.25rem;
38
+ font-weight: 600;
39
+ line-height: 1.4;
40
+ }
41
+
42
+ .lede {
43
+ margin: 0.5rem 0 0;
44
+ color: #666;
45
+ font-size: 0.875rem;
46
+ line-height: 1.6;
47
+ }
48
+
49
+ .panel {
50
+ border: 1px solid #e5e5e5;
51
+ border-radius: 0.5rem;
52
+ padding: 1rem;
53
+ }
54
+
55
+ .panelHeader {
56
+ display: flex;
57
+ align-items: center;
58
+ justify-content: space-between;
59
+ gap: 1rem;
60
+ margin-bottom: 0.75rem;
61
+ }
62
+
63
+ h2 {
64
+ margin: 0;
65
+ font-size: 0.875rem;
66
+ font-weight: 600;
67
+ }
68
+
69
+ .panelHeader span,
70
+ .empty,
71
+ time {
72
+ color: #888;
73
+ font-size: 0.8rem;
74
+ }
75
+
76
+ .panel p {
77
+ color: #666;
78
+ font-size: 0.8rem;
79
+ }
80
+
81
+ .users {
82
+ list-style: none;
83
+ margin: 0;
84
+ padding: 0;
85
+ display: grid;
86
+ gap: 0.5rem;
87
+ }
88
+
89
+ .users li {
90
+ display: flex;
91
+ align-items: center;
92
+ justify-content: space-between;
93
+ gap: 1rem;
94
+ padding: 0.625rem 0.75rem;
95
+ border: 1px solid #eee;
96
+ border-radius: 0.375rem;
97
+ }
98
+
99
+ .users p {
100
+ margin: 0.125rem 0 0;
101
+ }
102
+
103
+ time {
104
+ font-size: 0.75rem;
105
+ white-space: nowrap;
106
+ }
107
+
108
+ code {
109
+ padding: 0.125rem 0.25rem;
110
+ border-radius: 0.25rem;
111
+ background: #f5f5f5;
112
+ font-family: SFMono-Regular, Consolas, monospace;
113
+ font-size: 0.875em;
114
+ }
115
+
116
+ @media (max-width: 640px) {
117
+ .users li,
118
+ .panelHeader {
119
+ flex-direction: column;
120
+ align-items: flex-start;
121
+ }
122
+ }
@@ -2,8 +2,8 @@ import type { Metadata } from "next";
2
2
  import "./globals.css";
3
3
 
4
4
  export const metadata: Metadata = {
5
- title: "{{projectName}} · Prisma",
6
- description: "A minimal Prisma starter generated by create-prisma.",
5
+ title: "{{projectName}}",
6
+ description: "Generated by create-prisma",
7
7
  };
8
8
 
9
9
  export default function RootLayout({
@@ -1,9 +1,11 @@
1
1
  export const dynamic = "force-dynamic";
2
2
 
3
3
  export default async function Home() {
4
+ {{#if (eq schemaPreset "basic")}}
4
5
  const { prisma } = await import("../lib/prisma");
5
6
  const formatter = new Intl.DateTimeFormat("en", {
6
7
  dateStyle: "medium",
8
+ timeStyle: "short",
7
9
  });
8
10
  const users = await prisma.user
9
11
  .findMany({
@@ -13,47 +15,40 @@ export default async function Home() {
13
15
  },
14
16
  })
15
17
  .catch(() => undefined);
18
+ {{/if}}
16
19
 
17
20
  return (
18
21
  <main className="shell">
19
- <header className="intro">
20
- <div className="product">
21
- <span className="product-mark" aria-hidden="true">P</span>
22
- <span className="product-name">{{projectName}}</span>
23
- <span className="framework">Next.js</span>
24
- </div>
25
- <h1>Start building with Prisma.</h1>
22
+ <div className="hero">
23
+ <p className="eyebrow">Next.js + Prisma 7</p>
24
+ {{#if (eq schemaPreset "basic")}}
25
+ <h1>Users from your database, loaded on the server.</h1>
26
26
  <p className="lede">
27
- Your app is connected and ready to query. The latest users from your database are shown
28
- below.
27
+ This page reads from <code>src/app/page.tsx</code> using the Prisma instance in{" "}
28
+ <code>src/lib/prisma.ts</code>.
29
29
  </p>
30
- </header>
30
+ </div>
31
31
 
32
- <section className="user-panel" aria-labelledby="users-heading">
33
- <div className="panel-header">
34
- <div className="panel-title">
35
- <h2 id="users-heading">Users</h2>
36
- <p>Latest records</p>
37
- </div>
38
- <span className="count">{users?.length ?? 0}</span>
32
+ <section className="panel">
33
+ <div className="panelHeader">
34
+ <h2>Seeded users</h2>
35
+ <span>{users?.length ?? 0} total</span>
39
36
  </div>
40
37
 
41
38
  {!users ? (
42
- <p className="empty-state">
43
- The database is not ready yet. Check the setup steps in <code>README.md</code>.
39
+ <p className="empty">
40
+ Could not query users yet. Run <code>db:migrate</code>, then <code>db:seed</code>,
41
+ then refresh.
44
42
  </p>
45
43
  ) : users.length === 0 ? (
46
- <p className="empty-state">No users yet. Run <code>db:seed</code>, then refresh.</p>
44
+ <p className="empty">No users yet. Run <code>db:seed</code> after your first migration.</p>
47
45
  ) : (
48
- <ul className="user-list">
46
+ <ul className="users">
49
47
  {users.map((user) => (
50
- <li className="user-row" key={user.id}>
51
- <span className="avatar" aria-hidden="true">
52
- {(user.name ?? user.email).charAt(0).toUpperCase()}
53
- </span>
54
- <div className="user-copy">
55
- <p className="user-name">{user.name ?? "Unnamed user"}</p>
56
- <p className="user-email">{user.email}</p>
48
+ <li key={user.id}>
49
+ <div>
50
+ <strong>{user.name ?? "Unnamed user"}</strong>
51
+ <p>{user.email}</p>
57
52
  </div>
58
53
  <time dateTime={user.createdAt.toISOString()}>
59
54
  {formatter.format(user.createdAt)}
@@ -63,13 +58,42 @@ export default async function Home() {
63
58
  </ul>
64
59
  )}
65
60
  </section>
61
+ {{else}}
62
+ <h1>Your Next.js app is ready.</h1>
63
+ <p className="lede">
64
+ Edit <code>prisma/schema.prisma</code>, run <code>db:migrate</code>, then load your data
65
+ in server components with the Prisma instance in <code>src/lib/prisma.ts</code>.
66
+ </p>
67
+ </div>
66
68
 
67
- <footer className="footer">
68
- <p>Start with <code>prisma/schema.prisma</code></p>
69
- <a className="docs-link" href="https://pris.ly/d/prisma-schema" target="_blank" rel="noreferrer">
70
- Prisma docs <span aria-hidden="true">↗</span>
71
- </a>
72
- </footer>
69
+ <section className="panel">
70
+ <div className="panelHeader">
71
+ <h2>What&apos;s included</h2>
72
+ <span>Starter kit</span>
73
+ </div>
74
+
75
+ <ul className="users">
76
+ <li>
77
+ <div>
78
+ <strong>Prisma client</strong>
79
+ <p>Use the shared instance from <code>src/lib/prisma.ts</code>.</p>
80
+ </div>
81
+ </li>
82
+ <li>
83
+ <div>
84
+ <strong>Seed script</strong>
85
+ <p>Run <code>db:seed</code> after your first migration.</p>
86
+ </div>
87
+ </li>
88
+ <li>
89
+ <div>
90
+ <strong>Generated client output</strong>
91
+ <p>Prisma Client is generated into <code>src/generated/prisma</code>.</p>
92
+ </div>
93
+ </li>
94
+ </ul>
95
+ </section>
96
+ {{/if}}
73
97
  </main>
74
98
  );
75
99
  }
@@ -1,8 +1,7 @@
1
+ {{#if (requiresDotenvConfigImport packageManager)}}
1
2
  import "dotenv/config";
2
-
3
- import service from "../../service";
4
-
5
- import { PrismaClient } from "../generated/prisma/client";
3
+ {{/if}}
4
+ import { PrismaClient } from "../generated/prisma/client{{#if (eq packageManager "deno")}}.ts{{/if}}";
6
5
  {{#if (eq provider "postgresql")}}
7
6
  import { PrismaPg } from "@prisma/adapter-pg";
8
7
  {{/if}}
@@ -19,20 +18,7 @@ import { {{sqliteAdapterClass packageManager}} } from "{{sqliteAdapterPackage pa
19
18
  import { PrismaMssql } from "@prisma/adapter-mssql";
20
19
  {{/if}}
21
20
 
22
- function getComposerDatabaseUrl(): string | undefined {
23
- try {
24
- {{#if composerPostgres}}
25
- return service.load().database.url;
26
- {{else}}
27
- return service.input().databaseUrl.expose();
28
- {{/if}}
29
- } catch {
30
- return undefined;
31
- }
32
- }
33
-
34
- const rawDatabaseUrl = getComposerDatabaseUrl() ?? process.env.DATABASE_URL;
35
-
21
+ const rawDatabaseUrl = process.env.DATABASE_URL;
36
22
  {{#if (eq provider "sqlite")}}
37
23
  const databaseUrl = (rawDatabaseUrl ?? "").trim() || "file:./dev.db";
38
24
  {{else}}
@@ -8,7 +8,9 @@ Generated by `create-prisma` with the Nuxt template.
8
8
  - `{{runScriptCommand packageManager "build"}}` - build for production
9
9
  - `{{runScriptCommand packageManager "preview"}}` - preview the production build
10
10
  - `{{runScriptCommand packageManager "typecheck"}}` - run Nuxt type checks
11
- - `{{runScriptCommand packageManager "deploy"}}` - build and deploy with Prisma Composer
11
+ {{#if compute}}
12
+ - `{{runScriptCommand packageManager "compute:deploy"}}` - redeploy to Prisma Compute with environment variables from `.env`
13
+ {{/if}}
12
14
 
13
15
  ## Prisma
14
16
 
@@ -19,9 +21,7 @@ Prisma setup is scaffolded automatically in:
19
21
  - `server/utils/prisma.ts`
20
22
  - `server/api/users.get.ts`
21
23
  - `prisma.config.ts`
22
- - `module.ts`
23
- - `service.ts`
24
- - `prisma-composer.config.ts`
24
+ - `prisma.compute.ts`
25
25
  - `server/generated/prisma`
26
26
 
27
27
  Database helper scripts are added to `package.json`:
@@ -30,11 +30,15 @@ Database helper scripts are added to `package.json`:
30
30
  - `db:push`
31
31
  - `db:migrate`
32
32
  - `db:seed`
33
+ {{#if (eq schemaPreset "basic")}}
33
34
 
34
35
  The starter page in `app/pages/index.vue` fetches seeded users from `server/api/users.get.ts`, and `prisma/seed.ts` inserts starter users.
36
+ {{/if}}
37
+ {{#if compute}}
35
38
 
36
- ## Prisma Composer
39
+ ## Prisma Compute
37
40
 
38
- The application topology is declared in `module.ts` and `service.ts`, with deploy configuration in `prisma-composer.config.ts`. {{#if composerPostgres}}Composer provisions Prisma Postgres and injects its connection into the service.{{else}}The database URL is bound as a secret service input from `.env`.{{/if}}
41
+ This project includes a Prisma Compute deploy script and deploy defaults in `prisma.compute.ts`. Deploys load environment variables from `.env`; if setup created a Prisma Postgres database, its `DATABASE_URL` is already written there.
39
42
 
40
- If needed, sign in with `{{prismaAuthLoginCommand packageManager}}`. Run `{{runScriptCommand packageManager "deploy"}}` to deploy later changes.
43
+ After local changes, run `{{runScriptCommand packageManager "compute:deploy"}}` to redeploy.
44
+ {{/if}}
@@ -1,14 +1,9 @@
1
1
  <script setup lang="ts">
2
2
  useHead({
3
- title: "{{projectName}} · Prisma",
4
- meta: [
5
- {
6
- name: "description",
7
- content: "A minimal Prisma starter generated by create-prisma.",
8
- },
9
- ],
3
+ title: "create-prisma + nuxt",
10
4
  });
11
5
 
6
+ {{#if (eq schemaPreset "basic")}}
12
7
  type User = {
13
8
  id: string;
14
9
  email: string;
@@ -23,6 +18,7 @@ type UsersPayload = {
23
18
 
24
19
  const formatter = new Intl.DateTimeFormat("en", {
25
20
  dateStyle: "medium",
21
+ timeStyle: "short",
26
22
  });
27
23
 
28
24
  const { data } = await useFetch<UsersPayload>("/api/users");
@@ -30,59 +26,195 @@ const { data } = await useFetch<UsersPayload>("/api/users");
30
26
  function formatCreatedAt(value: string): string {
31
27
  return formatter.format(new Date(value));
32
28
  }
33
-
34
- function getInitial(user: User): string {
35
- return (user.name ?? user.email).charAt(0).toUpperCase();
36
- }
29
+ {{/if}}
37
30
  </script>
38
31
 
39
32
  <template>
40
33
  <main class="shell">
41
- <header class="intro">
42
- <div class="product">
43
- <span class="product-mark" aria-hidden="true">P</span>
44
- <span class="product-name">{{projectName}}</span>
45
- <span class="framework">Nuxt</span>
46
- </div>
47
- <h1>Start building with Prisma.</h1>
34
+ <div class="hero">
35
+ <p class="eyebrow">Nuxt + Prisma 7</p>
36
+ {{#if (eq schemaPreset "basic")}}
37
+ <h1>Users from your database, loaded through Nitro.</h1>
48
38
  <p class="lede">
49
- Your app is connected and ready to query. The latest users from your database are shown
50
- below.
39
+ This page fetches <code>/api/users</code> from <code>server/api/users.get.ts</code> using
40
+ the Prisma instance in <code>server/utils/prisma.ts</code>.
51
41
  </p>
52
- </header>
42
+ </div>
53
43
 
54
- <section class="user-panel" aria-labelledby="users-heading">
44
+ <section class="panel">
55
45
  <div class="panel-header">
56
- <div class="panel-title">
57
- <h2 id="users-heading">Users</h2>
58
- <p>Latest records</p>
59
- </div>
60
- <span class="count">\{{ data?.users?.length ?? 0 }}</span>
46
+ <h2>Seeded users</h2>
47
+ <span>\{{ data?.users?.length ?? 0 }} total</span>
61
48
  </div>
62
49
 
63
- <p v-if="data?.error" class="empty-state">
64
- The database is not ready yet. Check the setup steps in <code>README.md</code>.
50
+ <p v-if="data?.error" class="empty">
51
+ \{{ data.error }} Run <code>db:migrate</code>, then <code>db:seed</code>, then refresh.
65
52
  </p>
66
- <p v-else-if="!data?.users?.length" class="empty-state">
67
- No users yet. Run <code>db:seed</code>, then refresh.
53
+ <p v-else-if="!data?.users?.length" class="empty">
54
+ No users yet. Run <code>db:seed</code> after your first migration.
68
55
  </p>
69
- <ul v-else class="user-list">
70
- <li v-for="user in data.users" :key="user.id" class="user-row">
71
- <span class="avatar" aria-hidden="true">\{{ getInitial(user) }}</span>
72
- <div class="user-copy">
73
- <p class="user-name">\{{ user.name ?? "Unnamed user" }}</p>
74
- <p class="user-email">\{{ user.email }}</p>
56
+ <ul v-else class="users">
57
+ <li v-for="user in data.users" :key="user.id">
58
+ <div>
59
+ <strong>\{{ user.name ?? "Unnamed user" }}</strong>
60
+ <p>\{{ user.email }}</p>
75
61
  </div>
76
62
  <time :datetime="user.createdAt">\{{ formatCreatedAt(user.createdAt) }}</time>
77
63
  </li>
78
64
  </ul>
79
65
  </section>
66
+ {{else}}
67
+ <h1>Your Nuxt app is ready.</h1>
68
+ <p class="lede">
69
+ Edit <code>prisma/schema.prisma</code>, run <code>db:migrate</code>, then query data in
70
+ Nitro routes or server utilities with the Prisma instance in <code>server/utils/prisma.ts</code>.
71
+ </p>
72
+ </div>
80
73
 
81
- <footer class="footer">
82
- <p>Start with <code>prisma/schema.prisma</code></p>
83
- <a class="docs-link" href="https://pris.ly/d/prisma-schema" target="_blank" rel="noreferrer">
84
- Prisma docs <span aria-hidden="true">↗</span>
85
- </a>
86
- </footer>
74
+ <section class="panel">
75
+ <div class="panel-header">
76
+ <h2>What's included</h2>
77
+ <span>Starter kit</span>
78
+ </div>
79
+
80
+ <ul class="users">
81
+ <li>
82
+ <div>
83
+ <strong>Prisma client</strong>
84
+ <p>Use the shared server instance from <code>server/utils/prisma.ts</code>.</p>
85
+ </div>
86
+ </li>
87
+ <li>
88
+ <div>
89
+ <strong>Nitro API route</strong>
90
+ <p>Start from <code>server/api/users.get.ts</code> for server-side data access.</p>
91
+ </div>
92
+ </li>
93
+ <li>
94
+ <div>
95
+ <strong>Generated client output</strong>
96
+ <p>Prisma Client is generated into <code>server/generated/prisma</code>.</p>
97
+ </div>
98
+ </li>
99
+ </ul>
100
+ </section>
101
+ {{/if}}
87
102
  </main>
88
103
  </template>
104
+
105
+ <style>
106
+ body {
107
+ margin: 0;
108
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif;
109
+ background: #fff;
110
+ color: #111;
111
+ }
112
+
113
+ .shell {
114
+ max-width: 40rem;
115
+ margin: 0 auto;
116
+ padding: 3rem 1.5rem;
117
+ }
118
+
119
+ .hero {
120
+ margin-bottom: 1.5rem;
121
+ }
122
+
123
+ .eyebrow {
124
+ margin: 0 0 0.5rem;
125
+ color: #666;
126
+ font-size: 0.75rem;
127
+ font-weight: 600;
128
+ letter-spacing: 0.06em;
129
+ text-transform: uppercase;
130
+ }
131
+
132
+ h1 {
133
+ margin: 0;
134
+ font-size: 1.25rem;
135
+ font-weight: 600;
136
+ line-height: 1.4;
137
+ }
138
+
139
+ .lede {
140
+ margin: 0.5rem 0 0;
141
+ color: #666;
142
+ font-size: 0.875rem;
143
+ line-height: 1.6;
144
+ }
145
+
146
+ .panel {
147
+ border: 1px solid #e5e5e5;
148
+ border-radius: 0.5rem;
149
+ padding: 1rem;
150
+ }
151
+
152
+ .panel-header {
153
+ display: flex;
154
+ align-items: center;
155
+ justify-content: space-between;
156
+ gap: 1rem;
157
+ margin-bottom: 0.75rem;
158
+ }
159
+
160
+ h2 {
161
+ margin: 0;
162
+ font-size: 0.875rem;
163
+ font-weight: 600;
164
+ }
165
+
166
+ .panel-header span,
167
+ .empty,
168
+ time {
169
+ color: #888;
170
+ font-size: 0.8rem;
171
+ }
172
+
173
+ .panel p {
174
+ color: #666;
175
+ font-size: 0.8rem;
176
+ }
177
+
178
+ .users {
179
+ list-style: none;
180
+ margin: 0;
181
+ padding: 0;
182
+ display: grid;
183
+ gap: 0.5rem;
184
+ }
185
+
186
+ .users li {
187
+ display: flex;
188
+ align-items: center;
189
+ justify-content: space-between;
190
+ gap: 1rem;
191
+ padding: 0.625rem 0.75rem;
192
+ border: 1px solid #eee;
193
+ border-radius: 0.375rem;
194
+ }
195
+
196
+ .users p {
197
+ margin: 0.125rem 0 0;
198
+ }
199
+
200
+ time {
201
+ font-size: 0.75rem;
202
+ white-space: nowrap;
203
+ }
204
+
205
+ code {
206
+ padding: 0.125rem 0.25rem;
207
+ border-radius: 0.25rem;
208
+ background: #f5f5f5;
209
+ font-family: SFMono-Regular, Consolas, monospace;
210
+ font-size: 0.875em;
211
+ }
212
+
213
+ @media (max-width: 640px) {
214
+ .users li,
215
+ .panel-header {
216
+ flex-direction: column;
217
+ align-items: flex-start;
218
+ }
219
+ }
220
+ </style>
@@ -0,0 +1,5 @@
1
+ {{#if (eq packageManager "deno")}}
2
+ {
3
+ "nodeModulesDir": "auto"
4
+ }
5
+ {{/if}}
@@ -1,7 +1,6 @@
1
1
  // https://nuxt.com/docs/api/configuration/nuxt-config
2
2
  export default defineNuxtConfig({
3
3
  compatibilityDate: "2025-07-15",
4
- css: ["~/assets/css/main.css"],
5
4
  devtools: { enabled: true },
6
5
  typescript: {
7
6
  tsConfig: {
@@ -1,11 +1,15 @@
1
1
  generator client {
2
2
  provider = "prisma-client"
3
3
  output = "../server/generated/prisma"
4
+ {{#if (eq packageManager "deno")}}
5
+ runtime = "deno"
6
+ {{/if}}
4
7
  }
5
8
 
6
9
  datasource db {
7
10
  provider = "{{provider}}"
8
11
  }
12
+ {{#if (eq schemaPreset "basic")}}
9
13
 
10
14
  model User {
11
15
  id String @id @default(cuid())
@@ -14,3 +18,4 @@ model User {
14
18
  createdAt DateTime @default(now())
15
19
  updatedAt DateTime @updatedAt
16
20
  }
21
+ {{/if}}
@@ -1,6 +1,7 @@
1
- import prisma from "../server/utils/prisma";
1
+ import prisma from "../server/utils/prisma{{#if (eq packageManager "deno")}}.ts{{/if}}";
2
2
 
3
3
  async function main() {
4
+ {{#if (eq schemaPreset "basic")}}
4
5
  const users = await Promise.all([
5
6
  prisma.user.upsert({
6
7
  where: { email: "alice@prisma.io" },
@@ -21,6 +22,9 @@ async function main() {
21
22
  ]);
22
23
 
23
24
  console.log(`Seeded ${users.length} users.`);
25
+ {{else}}
26
+ console.log("No seed data defined for the empty schema preset.");
27
+ {{/if}}
24
28
  }
25
29
 
26
30
  main()
@@ -0,0 +1,9 @@
1
+ import { defineComputeConfig } from "@prisma/compute-sdk/config";
2
+
3
+ export default defineComputeConfig({
4
+ app: {
5
+ name: "{{projectName}}",
6
+ framework: "nuxt",
7
+ env: ".env",
8
+ },
9
+ });
@@ -1,3 +1,4 @@
1
+ {{#if (eq schemaPreset "basic")}}
1
2
  import prisma from "../utils/prisma";
2
3
 
3
4
  export default defineEventHandler(async () => {
@@ -28,3 +29,8 @@ export default defineEventHandler(async () => {
28
29
 
29
30
  return { users };
30
31
  });
32
+ {{else}}
33
+ export default defineEventHandler(async () => {
34
+ return { users: [] };
35
+ });
36
+ {{/if}}