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.
- package/README.md +35 -159
- package/dist/cli.mjs +9 -3
- package/dist/create-BeMLn0T7.mjs +1409 -0
- package/dist/index.d.mts +43 -62
- package/dist/index.mjs +35 -2
- package/package.json +24 -19
- package/templates/create/_shared/.gitattributes.hbs +11 -0
- package/templates/create/_shared/README.md.hbs +39 -0
- package/templates/create/_shared/module.ts.hbs +28 -0
- package/templates/create/_shared/pnpm-workspace.yaml.hbs +16 -0
- package/templates/create/_shared/prisma-composer.config.ts.hbs +11 -0
- package/templates/create/_shared/prisma.config.ts.hbs +17 -0
- package/templates/create/_shared/service.ts.hbs +42 -0
- package/templates/create/_shared/src/prisma/composer.ts.hbs +8 -0
- package/templates/create/_shared/src/prisma/db.ts.hbs +51 -0
- package/templates/create/_shared/src/prisma/seed.ts.hbs +36 -0
- package/templates/create/_shared/src/prisma/users.ts.hbs +35 -0
- package/templates/create/astro/{astro.config.mjs.hbs → astro.config.mjs} +1 -2
- package/templates/create/astro/package.json.hbs +5 -5
- package/templates/create/astro/src/pages/api/users.ts.hbs +6 -23
- package/templates/create/astro/src/pages/index.astro.hbs +19 -56
- package/templates/create/astro/tsconfig.json +3 -0
- package/templates/create/elysia/package.json.hbs +6 -7
- package/templates/create/elysia/src/index.ts.hbs +18 -27
- package/templates/create/elysia/tsconfig.json +3 -1
- package/templates/create/hono/package.json.hbs +6 -7
- package/templates/create/hono/src/index.ts.hbs +11 -15
- package/templates/create/hono/tsconfig.json +3 -1
- package/templates/create/minimal/.yarnrc.yml.hbs +3 -0
- package/templates/create/minimal/package.json.hbs +15 -0
- package/templates/create/minimal/src/index.ts.hbs +19 -0
- package/templates/create/{turborepo/apps/api → minimal}/tsconfig.json +2 -2
- package/templates/create/nest/package.json.hbs +7 -7
- package/templates/create/nest/src/app.module.ts.hbs +9 -10
- package/templates/create/nest/src/main.ts.hbs +3 -10
- package/templates/create/nest/src/prisma.service.ts.hbs +6 -5
- package/templates/create/nest/src/users.controller.ts.hbs +3 -5
- package/templates/create/nest/src/users.service.ts.hbs +4 -11
- package/templates/create/nest/tsconfig.json +3 -2
- package/templates/create/next/eslint.config.mjs +8 -1
- package/templates/create/next/package.json.hbs +10 -10
- package/templates/create/next/src/app/page.tsx.hbs +17 -56
- package/templates/create/next/tsconfig.json +1 -0
- package/templates/create/nuxt/app/pages/index.vue.hbs +12 -45
- package/templates/create/nuxt/package.json.hbs +8 -7
- package/templates/create/nuxt/server/api/users.get.ts.hbs +3 -15
- package/templates/create/nuxt/tsconfig.json +3 -0
- package/templates/create/svelte/package.json.hbs +9 -11
- package/templates/create/svelte/src/routes/+page.server.ts.hbs +4 -16
- package/templates/create/svelte/src/routes/+page.svelte.hbs +14 -164
- package/templates/create/svelte/svelte.config.js +1 -4
- package/templates/create/svelte/tsconfig.json +2 -1
- package/templates/create/svelte/vite.config.ts +3 -0
- package/templates/create/tanstack-start/package.json.hbs +14 -14
- package/templates/create/tanstack-start/src/routes/__root.tsx.hbs +2 -3
- package/templates/create/tanstack-start/src/routes/index.tsx.hbs +27 -78
- package/templates/create/tanstack-start/tsconfig.json +4 -2
- package/templates/create/tanstack-start/vite.config.ts +2 -4
- package/dist/src-B3hRLZ0U.mjs +0 -2527
- package/templates/create/astro/README.md.hbs +0 -47
- package/templates/create/astro/deno.json.hbs +0 -5
- package/templates/create/astro/prisma/schema.prisma.hbs +0 -21
- package/templates/create/astro/prisma/seed.ts.hbs +0 -38
- package/templates/create/astro/prisma.compute.ts.hbs +0 -10
- package/templates/create/astro/prisma.config.ts.hbs +0 -15
- package/templates/create/astro/src/lib/prisma.ts.hbs +0 -55
- package/templates/create/elysia/README.md.hbs +0 -43
- package/templates/create/elysia/deno.json.hbs +0 -5
- package/templates/create/elysia/prisma/schema.prisma.hbs +0 -25
- package/templates/create/elysia/prisma/seed.ts.hbs +0 -38
- package/templates/create/elysia/prisma.compute.ts.hbs +0 -11
- package/templates/create/elysia/prisma.config.ts.hbs +0 -15
- package/templates/create/elysia/src/lib/prisma.ts.hbs +0 -56
- package/templates/create/hono/README.md.hbs +0 -43
- package/templates/create/hono/deno.json.hbs +0 -5
- package/templates/create/hono/prisma/schema.prisma.hbs +0 -25
- package/templates/create/hono/prisma/seed.ts.hbs +0 -38
- package/templates/create/hono/prisma.compute.ts.hbs +0 -10
- package/templates/create/hono/prisma.config.ts.hbs +0 -15
- package/templates/create/hono/src/lib/prisma.ts.hbs +0 -56
- package/templates/create/nest/README.md.hbs +0 -43
- package/templates/create/nest/deno.json.hbs +0 -5
- package/templates/create/nest/prisma/schema.prisma.hbs +0 -25
- package/templates/create/nest/prisma/seed.ts.hbs +0 -40
- package/templates/create/nest/prisma.compute.ts.hbs +0 -10
- package/templates/create/nest/prisma.config.ts.hbs +0 -15
- package/templates/create/nest/src/lib/prisma.ts.hbs +0 -58
- package/templates/create/next/README.md.hbs +0 -42
- package/templates/create/next/deno.json.hbs +0 -12
- package/templates/create/next/prisma/schema.prisma.hbs +0 -21
- package/templates/create/next/prisma/seed.ts.hbs +0 -38
- package/templates/create/next/prisma.compute.ts.hbs +0 -9
- package/templates/create/next/prisma.config.ts.hbs +0 -15
- package/templates/create/next/src/lib/prisma.ts.hbs +0 -56
- package/templates/create/nuxt/README.md.hbs +0 -44
- package/templates/create/nuxt/deno.json.hbs +0 -5
- package/templates/create/nuxt/prisma/schema.prisma.hbs +0 -21
- package/templates/create/nuxt/prisma/seed.ts.hbs +0 -38
- package/templates/create/nuxt/prisma.compute.ts.hbs +0 -9
- package/templates/create/nuxt/prisma.config.ts.hbs +0 -15
- package/templates/create/nuxt/server/utils/prisma.ts.hbs +0 -56
- package/templates/create/svelte/README.md.hbs +0 -45
- package/templates/create/svelte/deno.json.hbs +0 -5
- package/templates/create/svelte/prisma/schema.prisma.hbs +0 -21
- package/templates/create/svelte/prisma/seed.ts.hbs +0 -38
- package/templates/create/svelte/prisma.config.ts.hbs +0 -15
- package/templates/create/svelte/src/lib/server/prisma.ts.hbs +0 -53
- package/templates/create/tanstack-start/README.md.hbs +0 -43
- package/templates/create/tanstack-start/deno.json.hbs +0 -13
- package/templates/create/tanstack-start/prisma/schema.prisma.hbs +0 -21
- package/templates/create/tanstack-start/prisma/seed.ts.hbs +0 -38
- package/templates/create/tanstack-start/prisma.compute.ts.hbs +0 -9
- package/templates/create/tanstack-start/prisma.config.ts.hbs +0 -15
- package/templates/create/tanstack-start/src/lib/prisma.server.ts.hbs +0 -56
- package/templates/create/turborepo/README.md.hbs +0 -42
- package/templates/create/turborepo/apps/api/package.json.hbs +0 -26
- package/templates/create/turborepo/apps/api/src/index.ts.hbs +0 -55
- package/templates/create/turborepo/deno.json.hbs +0 -5
- package/templates/create/turborepo/package.json.hbs +0 -30
- package/templates/create/turborepo/packages/db/package.json.hbs +0 -22
- package/templates/create/turborepo/packages/db/prisma/schema.prisma.hbs +0 -21
- package/templates/create/turborepo/packages/db/prisma/seed.ts.hbs +0 -38
- package/templates/create/turborepo/packages/db/prisma.config.ts.hbs +0 -15
- package/templates/create/turborepo/packages/db/src/client.ts.hbs +0 -63
- package/templates/create/turborepo/packages/db/src/index.ts +0 -2
- package/templates/create/turborepo/packages/db/tsconfig.json +0 -15
- package/templates/create/turborepo/pnpm-workspace.yaml +0 -3
- package/templates/create/turborepo/prisma.compute.ts.hbs +0 -14
- package/templates/create/turborepo/turbo.json +0 -28
- /package/templates/create/{turborepo → elysia}/.yarnrc.yml.hbs +0 -0
- /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
|
-
|
|
5
|
-
const {
|
|
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
|
|
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
|
|
24
|
-
|
|
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
|
|
28
|
-
<code>src/
|
|
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>
|
|
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
|
|
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
|
-
|
|
54
|
-
{
|
|
55
|
-
|
|
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'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
|
}
|
|
@@ -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
|
-
|
|
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
|
|
36
|
-
|
|
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
|
|
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>
|
|
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
|
|
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.
|
|
19
|
-
"vue": "^3.5.
|
|
20
|
-
"vue-router": "^
|
|
18
|
+
"nuxt": "^4.3.1",
|
|
19
|
+
"vue": "^3.5.29",
|
|
20
|
+
"vue-router": "^4.6.4"
|
|
21
21
|
},
|
|
22
22
|
"devDependencies": {
|
|
23
|
-
"@types/node": "^
|
|
24
|
-
"tsx": "^4.
|
|
25
|
-
"typescript": "^
|
|
26
|
-
"
|
|
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
|
-
{
|
|
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
|
|
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
|
|
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}}
|
|
@@ -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/
|
|
20
|
-
"@sveltejs/
|
|
21
|
-
"@
|
|
22
|
-
"
|
|
23
|
-
"svelte": "^
|
|
24
|
-
"
|
|
25
|
-
"
|
|
26
|
-
"
|
|
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
|
-
|
|
3
|
-
import
|
|
2
|
+
|
|
3
|
+
import { listUsers } from "../prisma/users";
|
|
4
4
|
|
|
5
5
|
export const load: PageServerLoad = async () => {
|
|
6
|
-
const users = await
|
|
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
|
|
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
|
|
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
|
|
25
|
-
<code>src/
|
|
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>
|
|
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
|
|
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
|
-
|
|
51
|
-
{
|
|
52
|
-
|
|
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-
|
|
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
|
|
@@ -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.
|
|
18
|
-
"@tanstack/react-start": "^1.
|
|
19
|
-
"
|
|
20
|
-
"react": "^19.2.
|
|
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
|
-
"@
|
|
25
|
-
"@types/
|
|
26
|
-
"@types/react
|
|
27
|
-
"@
|
|
28
|
-
"
|
|
29
|
-
"
|
|
30
|
-
"
|
|
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
|
-
|