create-prisma 0.7.2 → 0.8.0-pr.56.216.1

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 (131) hide show
  1. package/README.md +35 -159
  2. package/dist/cli.mjs +9 -3
  3. package/dist/create-BeMLn0T7.mjs +1409 -0
  4. package/dist/index.d.mts +43 -62
  5. package/dist/index.mjs +35 -2
  6. package/package.json +24 -19
  7. package/templates/create/_shared/.gitattributes.hbs +11 -0
  8. package/templates/create/_shared/README.md.hbs +39 -0
  9. package/templates/create/_shared/module.ts.hbs +28 -0
  10. package/templates/create/_shared/pnpm-workspace.yaml.hbs +16 -0
  11. package/templates/create/_shared/prisma-composer.config.ts.hbs +11 -0
  12. package/templates/create/_shared/prisma.config.ts.hbs +17 -0
  13. package/templates/create/_shared/service.ts.hbs +42 -0
  14. package/templates/create/_shared/src/prisma/composer.ts.hbs +8 -0
  15. package/templates/create/_shared/src/prisma/db.ts.hbs +51 -0
  16. package/templates/create/_shared/src/prisma/seed.ts.hbs +36 -0
  17. package/templates/create/_shared/src/prisma/users.ts.hbs +35 -0
  18. package/templates/create/astro/{astro.config.mjs.hbs → astro.config.mjs} +1 -2
  19. package/templates/create/astro/package.json.hbs +5 -5
  20. package/templates/create/astro/src/pages/api/users.ts.hbs +6 -23
  21. package/templates/create/astro/src/pages/index.astro.hbs +19 -56
  22. package/templates/create/astro/tsconfig.json +3 -0
  23. package/templates/create/elysia/package.json.hbs +6 -7
  24. package/templates/create/elysia/src/index.ts.hbs +18 -27
  25. package/templates/create/elysia/tsconfig.json +3 -1
  26. package/templates/create/hono/package.json.hbs +6 -7
  27. package/templates/create/hono/src/index.ts.hbs +11 -15
  28. package/templates/create/hono/tsconfig.json +3 -1
  29. package/templates/create/minimal/.yarnrc.yml.hbs +3 -0
  30. package/templates/create/minimal/package.json.hbs +15 -0
  31. package/templates/create/minimal/src/index.ts.hbs +19 -0
  32. package/templates/create/{turborepo/apps/api → minimal}/tsconfig.json +2 -2
  33. package/templates/create/nest/package.json.hbs +7 -7
  34. package/templates/create/nest/src/app.module.ts.hbs +9 -10
  35. package/templates/create/nest/src/main.ts.hbs +3 -10
  36. package/templates/create/nest/src/prisma.service.ts.hbs +6 -5
  37. package/templates/create/nest/src/users.controller.ts.hbs +3 -5
  38. package/templates/create/nest/src/users.service.ts.hbs +4 -11
  39. package/templates/create/nest/tsconfig.json +3 -2
  40. package/templates/create/next/eslint.config.mjs +8 -1
  41. package/templates/create/next/package.json.hbs +10 -10
  42. package/templates/create/next/src/app/page.tsx.hbs +17 -56
  43. package/templates/create/next/tsconfig.json +1 -0
  44. package/templates/create/nuxt/app/pages/index.vue.hbs +12 -45
  45. package/templates/create/nuxt/package.json.hbs +8 -7
  46. package/templates/create/nuxt/server/api/users.get.ts.hbs +3 -15
  47. package/templates/create/nuxt/tsconfig.json +3 -0
  48. package/templates/create/svelte/package.json.hbs +9 -11
  49. package/templates/create/svelte/src/routes/+page.server.ts.hbs +4 -16
  50. package/templates/create/svelte/src/routes/+page.svelte.hbs +14 -164
  51. package/templates/create/svelte/svelte.config.js +1 -4
  52. package/templates/create/svelte/tsconfig.json +2 -1
  53. package/templates/create/svelte/vite.config.ts +3 -0
  54. package/templates/create/tanstack-start/package.json.hbs +14 -14
  55. package/templates/create/tanstack-start/src/routes/__root.tsx.hbs +2 -3
  56. package/templates/create/tanstack-start/src/routes/index.tsx.hbs +27 -78
  57. package/templates/create/tanstack-start/tsconfig.json +4 -2
  58. package/templates/create/tanstack-start/vite.config.ts +2 -4
  59. package/dist/src-B3hRLZ0U.mjs +0 -2527
  60. package/templates/create/astro/README.md.hbs +0 -47
  61. package/templates/create/astro/deno.json.hbs +0 -5
  62. package/templates/create/astro/prisma/schema.prisma.hbs +0 -21
  63. package/templates/create/astro/prisma/seed.ts.hbs +0 -38
  64. package/templates/create/astro/prisma.compute.ts.hbs +0 -10
  65. package/templates/create/astro/prisma.config.ts.hbs +0 -15
  66. package/templates/create/astro/src/lib/prisma.ts.hbs +0 -55
  67. package/templates/create/elysia/README.md.hbs +0 -43
  68. package/templates/create/elysia/deno.json.hbs +0 -5
  69. package/templates/create/elysia/prisma/schema.prisma.hbs +0 -25
  70. package/templates/create/elysia/prisma/seed.ts.hbs +0 -38
  71. package/templates/create/elysia/prisma.compute.ts.hbs +0 -11
  72. package/templates/create/elysia/prisma.config.ts.hbs +0 -15
  73. package/templates/create/elysia/src/lib/prisma.ts.hbs +0 -56
  74. package/templates/create/hono/README.md.hbs +0 -43
  75. package/templates/create/hono/deno.json.hbs +0 -5
  76. package/templates/create/hono/prisma/schema.prisma.hbs +0 -25
  77. package/templates/create/hono/prisma/seed.ts.hbs +0 -38
  78. package/templates/create/hono/prisma.compute.ts.hbs +0 -10
  79. package/templates/create/hono/prisma.config.ts.hbs +0 -15
  80. package/templates/create/hono/src/lib/prisma.ts.hbs +0 -56
  81. package/templates/create/nest/README.md.hbs +0 -43
  82. package/templates/create/nest/deno.json.hbs +0 -5
  83. package/templates/create/nest/prisma/schema.prisma.hbs +0 -25
  84. package/templates/create/nest/prisma/seed.ts.hbs +0 -40
  85. package/templates/create/nest/prisma.compute.ts.hbs +0 -10
  86. package/templates/create/nest/prisma.config.ts.hbs +0 -15
  87. package/templates/create/nest/src/lib/prisma.ts.hbs +0 -58
  88. package/templates/create/next/README.md.hbs +0 -42
  89. package/templates/create/next/deno.json.hbs +0 -12
  90. package/templates/create/next/prisma/schema.prisma.hbs +0 -21
  91. package/templates/create/next/prisma/seed.ts.hbs +0 -38
  92. package/templates/create/next/prisma.compute.ts.hbs +0 -9
  93. package/templates/create/next/prisma.config.ts.hbs +0 -15
  94. package/templates/create/next/src/lib/prisma.ts.hbs +0 -56
  95. package/templates/create/nuxt/README.md.hbs +0 -44
  96. package/templates/create/nuxt/deno.json.hbs +0 -5
  97. package/templates/create/nuxt/prisma/schema.prisma.hbs +0 -21
  98. package/templates/create/nuxt/prisma/seed.ts.hbs +0 -38
  99. package/templates/create/nuxt/prisma.compute.ts.hbs +0 -9
  100. package/templates/create/nuxt/prisma.config.ts.hbs +0 -15
  101. package/templates/create/nuxt/server/utils/prisma.ts.hbs +0 -56
  102. package/templates/create/svelte/README.md.hbs +0 -45
  103. package/templates/create/svelte/deno.json.hbs +0 -5
  104. package/templates/create/svelte/prisma/schema.prisma.hbs +0 -21
  105. package/templates/create/svelte/prisma/seed.ts.hbs +0 -38
  106. package/templates/create/svelte/prisma.config.ts.hbs +0 -15
  107. package/templates/create/svelte/src/lib/server/prisma.ts.hbs +0 -53
  108. package/templates/create/tanstack-start/README.md.hbs +0 -43
  109. package/templates/create/tanstack-start/deno.json.hbs +0 -13
  110. package/templates/create/tanstack-start/prisma/schema.prisma.hbs +0 -21
  111. package/templates/create/tanstack-start/prisma/seed.ts.hbs +0 -38
  112. package/templates/create/tanstack-start/prisma.compute.ts.hbs +0 -9
  113. package/templates/create/tanstack-start/prisma.config.ts.hbs +0 -15
  114. package/templates/create/tanstack-start/src/lib/prisma.server.ts.hbs +0 -56
  115. package/templates/create/turborepo/README.md.hbs +0 -42
  116. package/templates/create/turborepo/apps/api/package.json.hbs +0 -26
  117. package/templates/create/turborepo/apps/api/src/index.ts.hbs +0 -55
  118. package/templates/create/turborepo/deno.json.hbs +0 -5
  119. package/templates/create/turborepo/package.json.hbs +0 -30
  120. package/templates/create/turborepo/packages/db/package.json.hbs +0 -22
  121. package/templates/create/turborepo/packages/db/prisma/schema.prisma.hbs +0 -21
  122. package/templates/create/turborepo/packages/db/prisma/seed.ts.hbs +0 -38
  123. package/templates/create/turborepo/packages/db/prisma.config.ts.hbs +0 -15
  124. package/templates/create/turborepo/packages/db/src/client.ts.hbs +0 -63
  125. package/templates/create/turborepo/packages/db/src/index.ts +0 -2
  126. package/templates/create/turborepo/packages/db/tsconfig.json +0 -15
  127. package/templates/create/turborepo/pnpm-workspace.yaml +0 -3
  128. package/templates/create/turborepo/prisma.compute.ts.hbs +0 -14
  129. package/templates/create/turborepo/turbo.json +0 -28
  130. /package/templates/create/{turborepo → elysia}/.yarnrc.yml.hbs +0 -0
  131. /package/templates/create/next/{next.config.ts.hbs → next.config.ts} +0 -0
@@ -1,31 +1,23 @@
1
1
  export const dynamic = "force-dynamic";
2
2
 
3
3
  export default async function Home() {
4
- {{#if (eq schemaPreset "basic")}}
5
- const { prisma } = await import("../lib/prisma");
4
+
5
+ const { listUsers } = await import("../prisma/users");
6
6
  const formatter = new Intl.DateTimeFormat("en", {
7
7
  dateStyle: "medium",
8
8
  timeStyle: "short",
9
9
  });
10
- const users = await prisma.user
11
- .findMany({
12
- take: 10,
13
- orderBy: {
14
- createdAt: "desc",
15
- },
16
- })
17
- .catch(() => undefined);
18
- {{/if}}
10
+ const users = await listUsers(10).catch(() => undefined);
19
11
 
20
12
  return (
21
13
  <main className="shell">
22
14
  <div className="hero">
23
- <p className="eyebrow">Next.js + Prisma 7</p>
24
- {{#if (eq schemaPreset "basic")}}
15
+ <p className="eyebrow">Next.js + Prisma 8</p>
16
+
25
17
  <h1>Users from your database, loaded on the server.</h1>
26
18
  <p className="lede">
27
- This page reads from <code>src/app/page.tsx</code> using the Prisma instance in{" "}
28
- <code>src/lib/prisma.ts</code>.
19
+ This page reads from <code>src/app/page.tsx</code> using the Prisma 8 helper in{" "}
20
+ <code>src/prisma/users.ts</code>.
29
21
  </p>
30
22
  </div>
31
23
 
@@ -37,63 +29,32 @@ export default async function Home() {
37
29
 
38
30
  {!users ? (
39
31
  <p className="empty">
40
- Could not query users yet. Run <code>db:migrate</code>, then <code>db:seed</code>,
32
+ Could not query users yet. Run <code>contract:emit</code> and apply your schema,
41
33
  then refresh.
42
34
  </p>
43
35
  ) : users.length === 0 ? (
44
- <p className="empty">No users yet. Run <code>db:seed</code> after your first migration.</p>
36
+ <p className="empty">No users found.</p>
45
37
  ) : (
46
38
  <ul className="users">
47
39
  {users.map((user) => (
48
40
  <li key={user.id}>
49
41
  <div>
50
42
  <strong>{user.name ?? "Unnamed user"}</strong>
51
- <p>{user.email}</p>
43
+ <p>{user.username ? `@${user.username}` : user.email}</p>
52
44
  </div>
53
- <time dateTime={user.createdAt.toISOString()}>
54
- {formatter.format(user.createdAt)}
55
- </time>
45
+ {user.createdAt ? (
46
+ <time dateTime={user.createdAt.toISOString()}>
47
+ {formatter.format(user.createdAt)}
48
+ </time>
49
+ ) : (
50
+ <span className="empty">No timestamp</span>
51
+ )}
56
52
  </li>
57
53
  ))}
58
54
  </ul>
59
55
  )}
60
56
  </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>
68
57
 
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}}
97
58
  </main>
98
59
  );
99
60
  }
@@ -14,6 +14,7 @@
14
14
  "isolatedModules": true,
15
15
  "jsx": "react-jsx",
16
16
  "incremental": true,
17
+ "types": ["node"],
17
18
  "plugins": [
18
19
  {
19
20
  "name": "next"
@@ -3,12 +3,12 @@ useHead({
3
3
  title: "create-prisma + nuxt",
4
4
  });
5
5
 
6
- {{#if (eq schemaPreset "basic")}}
7
6
  type User = {
8
7
  id: string;
9
8
  email: string;
9
+ username: string | null;
10
10
  name: string | null;
11
- createdAt: string;
11
+ createdAt: string | null;
12
12
  };
13
13
 
14
14
  type UsersPayload = {
@@ -26,18 +26,18 @@ const { data } = await useFetch<UsersPayload>("/api/users");
26
26
  function formatCreatedAt(value: string): string {
27
27
  return formatter.format(new Date(value));
28
28
  }
29
- {{/if}}
29
+
30
30
  </script>
31
31
 
32
32
  <template>
33
33
  <main class="shell">
34
34
  <div class="hero">
35
- <p class="eyebrow">Nuxt + Prisma 7</p>
36
- {{#if (eq schemaPreset "basic")}}
35
+ <p class="eyebrow">Nuxt + Prisma 8</p>
36
+
37
37
  <h1>Users from your database, loaded through Nitro.</h1>
38
38
  <p class="lede">
39
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>.
40
+ the Prisma 8 helper in <code>src/prisma/users.ts</code>.
41
41
  </p>
42
42
  </div>
43
43
 
@@ -48,57 +48,23 @@ function formatCreatedAt(value: string): string {
48
48
  </div>
49
49
 
50
50
  <p v-if="data?.error" class="empty">
51
- \{{ data.error }} Run <code>db:migrate</code>, then <code>db:seed</code>, then refresh.
51
+ \{{ data.error }} Run <code>contract:emit</code> and apply your schema, then refresh.
52
52
  </p>
53
53
  <p v-else-if="!data?.users?.length" class="empty">
54
- No users yet. Run <code>db:seed</code> after your first migration.
54
+ No users found.
55
55
  </p>
56
56
  <ul v-else class="users">
57
57
  <li v-for="user in data.users" :key="user.id">
58
58
  <div>
59
59
  <strong>\{{ user.name ?? "Unnamed user" }}</strong>
60
- <p>\{{ user.email }}</p>
60
+ <p>\{{ user.username ? "@" + user.username : user.email }}</p>
61
61
  </div>
62
- <time :datetime="user.createdAt">\{{ formatCreatedAt(user.createdAt) }}</time>
62
+ <time v-if="user.createdAt" :datetime="user.createdAt">\{{ formatCreatedAt(user.createdAt) }}</time>
63
+ <span v-else class="muted">No timestamp</span>
63
64
  </li>
64
65
  </ul>
65
66
  </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>
73
67
 
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}}
102
68
  </main>
103
69
  </template>
104
70
 
@@ -165,6 +131,7 @@ h2 {
165
131
 
166
132
  .panel-header span,
167
133
  .empty,
134
+ .muted,
168
135
  time {
169
136
  color: #888;
170
137
  font-size: 0.8rem;
@@ -15,14 +15,15 @@
15
15
  "typecheck": "nuxt typecheck"
16
16
  },
17
17
  "dependencies": {
18
- "nuxt": "^4.4.8",
19
- "vue": "^3.5.38",
20
- "vue-router": "^5.1.0"
18
+ "nuxt": "^4.3.1",
19
+ "vue": "^3.5.29",
20
+ "vue-router": "^4.6.4"
21
21
  },
22
22
  "devDependencies": {
23
- "@types/node": "^26.0.0",
24
- "tsx": "^4.22.4",
25
- "typescript": "^6.0.3",
26
- "vue-tsc": "^3.3.5"
23
+ "@types/node": "^24.3.0",
24
+ "tsx": "^4.7.1",
25
+ "typescript": "^5.9.3",
26
+ "vite": "^8.1.2",
27
+ "vue-tsc": "^3.3.9"
27
28
  }
28
29
  }
@@ -1,18 +1,11 @@
1
- {{#if (eq schemaPreset "basic")}}
2
- import prisma from "../utils/prisma";
1
+ import { listUsers } from "../../src/prisma/users";
3
2
 
4
3
  export default defineEventHandler(async () => {
5
- const users = await prisma.user
6
- .findMany({
7
- take: 10,
8
- orderBy: {
9
- createdAt: "desc",
10
- },
11
- })
4
+ const users = await listUsers(10)
12
5
  .then((rows) =>
13
6
  rows.map((user) => ({
14
7
  ...user,
15
- createdAt: user.createdAt.toISOString(),
8
+ createdAt: user.createdAt?.toISOString() ?? null,
16
9
  }))
17
10
  )
18
11
  .catch((error) => {
@@ -29,8 +22,3 @@ export default defineEventHandler(async () => {
29
22
 
30
23
  return { users };
31
24
  });
32
- {{else}}
33
- export default defineEventHandler(async () => {
34
- return { users: [] };
35
- });
36
- {{/if}}
@@ -1,4 +1,7 @@
1
1
  {
2
+ "compilerOptions": {
3
+ "types": ["node"]
4
+ },
2
5
  "files": [],
3
6
  "references": [
4
7
  {
@@ -12,18 +12,16 @@
12
12
  "preview": "vite preview",
13
13
  "prepare": "svelte-kit sync || echo ''",
14
14
  "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
15
- "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
16
- "db:generate": "svelte-kit sync && {{prismaCommand packageManager "generate"}}"
15
+ "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch"
17
16
  },
18
17
  "devDependencies": {
19
- "@sveltejs/adapter-auto": "^7.0.1",
20
- "@sveltejs/kit": "^2.67.0",
21
- "@sveltejs/vite-plugin-svelte": "^7.1.2",
22
- "@types/node": "^26.0.0",
23
- "svelte": "^5.56.3",
24
- "svelte-check": "^4.6.0",
25
- "tsx": "^4.22.4",
26
- "typescript": "^6.0.3",
27
- "vite": "^8.0.16"
18
+ "@sveltejs/kit": "^2.50.2",
19
+ "@sveltejs/vite-plugin-svelte": "^7.3.0",
20
+ "@types/node": "^24.3.0",
21
+ "svelte": "^5.51.0",
22
+ "svelte-check": "^4.4.2",
23
+ "tsx": "^4.7.1",
24
+ "typescript": "^5.9.3",
25
+ "vite": "^8.1.2"
28
26
  }
29
27
  }
@@ -1,28 +1,16 @@
1
1
  import type { PageServerLoad } from "./$types";
2
- {{#if (eq schemaPreset "basic")}}
3
- import prisma from "$lib/server/prisma";
2
+
3
+ import { listUsers } from "../prisma/users";
4
4
 
5
5
  export const load: PageServerLoad = async () => {
6
- const users = await prisma.user
7
- .findMany({
8
- take: 10,
9
- orderBy: {
10
- createdAt: "desc",
11
- },
12
- })
6
+ const users = await listUsers(10)
13
7
  .then((rows) =>
14
8
  rows.map((user) => ({
15
9
  ...user,
16
- createdAt: user.createdAt.toISOString(),
10
+ createdAt: user.createdAt?.toISOString() ?? null,
17
11
  }))
18
12
  )
19
13
  .catch(() => undefined);
20
14
 
21
15
  return { users };
22
16
  };
23
- {{else}}
24
-
25
- export const load: PageServerLoad = async () => {
26
- return {};
27
- };
28
- {{/if}}
@@ -1,4 +1,3 @@
1
- {{#if (eq schemaPreset "basic")}}
2
1
  <script lang="ts">
3
2
  import type { PageProps } from './$types';
4
3
 
@@ -18,11 +17,11 @@
18
17
 
19
18
  <section class="shell">
20
19
  <div class="hero">
21
- <p class="eyebrow">SvelteKit + Prisma 7</p>
20
+ <p class="eyebrow">SvelteKit + Prisma 8</p>
22
21
  <h1>Users from your database, loaded on the server.</h1>
23
22
  <p class="lede">
24
- This page reads from <code>+page.server.ts</code> using the Prisma instance in
25
- <code>src/lib/server/prisma.ts</code>.
23
+ This page reads from <code>+page.server.ts</code> using the Prisma 8 helper in
24
+ <code>src/prisma/users.ts</code>.
26
25
  </p>
27
26
  </div>
28
27
 
@@ -34,22 +33,26 @@
34
33
 
35
34
  {#if !data.users}
36
35
  <p class="empty">
37
- Could not query users yet. Run <code>db:migrate</code>, then <code>db:seed</code>, then
36
+ Could not query users yet. Run <code>contract:emit</code> and apply your schema, then
38
37
  refresh.
39
38
  </p>
40
39
  {:else if data.users.length === 0}
41
- <p class="empty">No users yet. Run <code>db:seed</code> after your first migration.</p>
40
+ <p class="empty">No users found.</p>
42
41
  {:else}
43
42
  <ul class="users">
44
43
  {#each data.users as user}
45
44
  <li>
46
45
  <div>
47
46
  <strong>{user.name ?? 'Unnamed user'}</strong>
48
- <p>{user.email}</p>
47
+ <p>{user.username ? `@${user.username}` : user.email}</p>
49
48
  </div>
50
- <time datetime={new Date(user.createdAt).toISOString()}>
51
- {formatter.format(new Date(user.createdAt))}
52
- </time>
49
+ {#if user.createdAt}
50
+ <time datetime={new Date(user.createdAt).toISOString()}>
51
+ {formatter.format(new Date(user.createdAt))}
52
+ </time>
53
+ {:else}
54
+ <span class="muted">No timestamp</span>
55
+ {/if}
53
56
  </li>
54
57
  {/each}
55
58
  </ul>
@@ -120,6 +123,7 @@
120
123
 
121
124
  .panel-header span,
122
125
  .empty,
126
+ .muted,
123
127
  time {
124
128
  color: #888;
125
129
  font-size: 0.8rem;
@@ -173,157 +177,3 @@
173
177
  }
174
178
  }
175
179
  </style>
176
- {{else}}
177
- <svelte:head>
178
- <title>create-prisma + sveltekit</title>
179
- </svelte:head>
180
-
181
- <section class="shell">
182
- <div class="hero">
183
- <p class="eyebrow">SvelteKit + Prisma 7</p>
184
- <h1>Your SvelteKit app is ready.</h1>
185
- <p class="lede">
186
- Edit <code>prisma/schema.prisma</code>, run <code>db:migrate</code>, then load your data from
187
- <code>+page.server.ts</code> with the Prisma instance in <code>src/lib/server/prisma.ts</code>.
188
- </p>
189
- </div>
190
-
191
- <div class="panel">
192
- <div class="panel-header">
193
- <h2>What's included</h2>
194
- <span>Starter kit</span>
195
- </div>
196
-
197
- <ul class="users">
198
- <li>
199
- <div>
200
- <strong>Prisma client</strong>
201
- <p>Use the server-only instance from <code>src/lib/server/prisma.ts</code>.</p>
202
- </div>
203
- </li>
204
- <li>
205
- <div>
206
- <strong>Seed script</strong>
207
- <p>Run <code>db:seed</code> after your first migration.</p>
208
- </div>
209
- </li>
210
- <li>
211
- <div>
212
- <strong>Generated client output</strong>
213
- <p>Prisma Client is generated into <code>src/generated/prisma</code>.</p>
214
- </div>
215
- </li>
216
- </ul>
217
- </div>
218
- </section>
219
-
220
- <style>
221
- :global(body) {
222
- margin: 0;
223
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', system-ui, sans-serif;
224
- background: #fff;
225
- color: #111;
226
- }
227
-
228
- .shell {
229
- max-width: 40rem;
230
- margin: 0 auto;
231
- padding: 3rem 1.5rem;
232
- }
233
-
234
- .hero {
235
- margin-bottom: 1.5rem;
236
- }
237
-
238
- .eyebrow {
239
- margin: 0 0 0.5rem;
240
- color: #666;
241
- font-size: 0.75rem;
242
- font-weight: 600;
243
- letter-spacing: 0.06em;
244
- text-transform: uppercase;
245
- }
246
-
247
- h1 {
248
- margin: 0;
249
- font-size: 1.25rem;
250
- font-weight: 600;
251
- line-height: 1.4;
252
- }
253
-
254
- .lede {
255
- margin: 0.5rem 0 0;
256
- color: #666;
257
- font-size: 0.875rem;
258
- line-height: 1.6;
259
- }
260
-
261
- .panel {
262
- border: 1px solid #e5e5e5;
263
- border-radius: 0.5rem;
264
- padding: 1rem;
265
- }
266
-
267
- .panel-header {
268
- display: flex;
269
- align-items: center;
270
- justify-content: space-between;
271
- gap: 1rem;
272
- margin-bottom: 0.75rem;
273
- }
274
-
275
- h2 {
276
- margin: 0;
277
- font-size: 0.875rem;
278
- font-weight: 600;
279
- }
280
-
281
- .panel-header span {
282
- color: #888;
283
- font-size: 0.8rem;
284
- }
285
-
286
- .panel p {
287
- color: #666;
288
- font-size: 0.8rem;
289
- }
290
-
291
- .users {
292
- list-style: none;
293
- margin: 0;
294
- padding: 0;
295
- display: grid;
296
- gap: 0.5rem;
297
- }
298
-
299
- .users li {
300
- display: flex;
301
- align-items: center;
302
- justify-content: space-between;
303
- gap: 1rem;
304
- padding: 0.625rem 0.75rem;
305
- border: 1px solid #eee;
306
- border-radius: 0.375rem;
307
- }
308
-
309
- .users p {
310
- margin: 0.125rem 0 0;
311
- }
312
-
313
- code {
314
- padding: 0.125rem 0.25rem;
315
- border-radius: 0.25rem;
316
- background: #f5f5f5;
317
- font-family: SFMono-Regular, Consolas, monospace;
318
- font-size: 0.875em;
319
- }
320
-
321
- @media (max-width: 640px) {
322
- .users li,
323
- .panel-header {
324
- flex-direction: column;
325
- align-items: flex-start;
326
- }
327
- }
328
- </style>
329
- {{/if}}
@@ -1,11 +1,8 @@
1
- import adapter from "@sveltejs/adapter-auto";
1
+ import adapter from "@sveltejs/adapter-node";
2
2
 
3
3
  /** @type {import('@sveltejs/kit').Config} */
4
4
  const config = {
5
5
  kit: {
6
- // adapter-auto only supports some environments, see https://svelte.dev/docs/kit/adapter-auto for a list.
7
- // If your environment is not supported, or you settled on a specific environment, switch out the adapter.
8
- // See https://svelte.dev/docs/kit/adapters for more information about adapters.
9
6
  adapter: adapter(),
10
7
  },
11
8
  };
@@ -10,7 +10,8 @@
10
10
  "skipLibCheck": true,
11
11
  "sourceMap": true,
12
12
  "strict": true,
13
- "moduleResolution": "bundler"
13
+ "moduleResolution": "bundler",
14
+ "types": ["node"]
14
15
  }
15
16
  // Path aliases are handled by https://svelte.dev/docs/kit/configuration#alias
16
17
  // except $lib which is handled by https://svelte.dev/docs/kit/configuration#files
@@ -3,4 +3,7 @@ import { defineConfig } from "vite";
3
3
 
4
4
  export default defineConfig({
5
5
  plugins: [sveltekit()],
6
+ ssr: {
7
+ noExternal: true,
8
+ },
6
9
  });
@@ -7,26 +7,26 @@
7
7
  {{/if}}
8
8
  "type": "module",
9
9
  "scripts": {
10
- "dev": "vite dev",
10
+ "dev": "vite dev --port 3000",
11
11
  "build": "vite build",
12
- "start": "node .output/server/index.mjs",
13
12
  "preview": "vite preview",
14
13
  "typecheck": "tsc --noEmit"
15
14
  },
16
15
  "dependencies": {
17
- "@tanstack/react-router": "^1.170.16",
18
- "@tanstack/react-start": "^1.168.26",
19
- "nitro": "^3.0.260610-beta",
20
- "react": "^19.2.7",
21
- "react-dom": "^19.2.7"
16
+ "@tanstack/react-router": "^1.132.0",
17
+ "@tanstack/react-start": "^1.132.0",
18
+ "react": "^19.2.0",
19
+ "react-dom": "^19.2.0"
22
20
  },
23
21
  "devDependencies": {
24
- "@types/node": "^26.0.0",
25
- "@types/react": "^19.2.17",
26
- "@types/react-dom": "^19.2.3",
27
- "@vitejs/plugin-react": "^6.0.3",
28
- "tsx": "^4.22.4",
29
- "typescript": "^6.0.3",
30
- "vite": "^8.0.16"
22
+ "@tanstack/router-plugin": "^1.132.0",
23
+ "@types/node": "^24.3.0",
24
+ "@types/react": "^19.2.2",
25
+ "@types/react-dom": "^19.2.2",
26
+ "@vitejs/plugin-react": "^5.2.0",
27
+ "tsx": "^4.7.1",
28
+ "typescript": "^5.9.3",
29
+ "vite": "^8.1.2",
30
+ "vite-tsconfig-paths": "^6.1.1"
31
31
  }
32
32
  }
@@ -18,7 +18,7 @@ export const Route = createRootRoute({
18
18
  },
19
19
  {
20
20
  name: "description",
21
- content: "TanStack Start + Prisma starter generated by create-prisma.",
21
+ content: "TanStack Start + Prisma 8 starter generated by create-prisma.",
22
22
  },
23
23
  ],
24
24
  links: [
@@ -42,7 +42,7 @@ function RootDocument({ children }: { children: ReactNode }) {
42
42
  <header className="topbar">
43
43
  <div>
44
44
  <p className="eyebrow">create-prisma</p>
45
- <h1>TanStack Start + Prisma</h1>
45
+ <h1>TanStack Start + Prisma 8</h1>
46
46
  </div>
47
47
 
48
48
  <nav className="nav">
@@ -68,4 +68,3 @@ function RootDocument({ children }: { children: ReactNode }) {
68
68
  </html>
69
69
  );
70
70
  }
71
-