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.
- package/README.md +25 -19
- package/dist/cli.mjs +2 -32
- package/dist/index.d.mts +25 -1
- package/dist/index.mjs +2 -2290
- package/dist/src-B3hRLZ0U.mjs +2527 -0
- package/package.json +2 -4
- package/templates/create/astro/README.md.hbs +14 -7
- package/templates/create/astro/astro.config.mjs.hbs +0 -11
- package/templates/create/astro/deno.json.hbs +5 -0
- package/templates/create/astro/prisma/schema.prisma.hbs +5 -0
- package/templates/create/astro/prisma/seed.ts.hbs +5 -1
- package/templates/create/astro/prisma.compute.ts.hbs +10 -0
- package/templates/create/astro/src/lib/prisma.ts.hbs +4 -18
- package/templates/create/astro/src/pages/api/users.ts.hbs +11 -1
- package/templates/create/astro/src/pages/index.astro.hbs +176 -36
- package/templates/create/elysia/README.md.hbs +13 -7
- package/templates/create/elysia/deno.json.hbs +5 -0
- package/templates/create/elysia/package.json.hbs +3 -4
- package/templates/create/elysia/prisma/schema.prisma.hbs +6 -0
- package/templates/create/elysia/prisma/seed.ts.hbs +5 -1
- package/templates/create/elysia/prisma.compute.ts.hbs +11 -0
- package/templates/create/elysia/src/index.ts.hbs +17 -13
- package/templates/create/elysia/src/lib/prisma.ts.hbs +4 -18
- package/templates/create/elysia/tsconfig.json +0 -1
- package/templates/create/hono/README.md.hbs +13 -7
- package/templates/create/hono/deno.json.hbs +5 -0
- package/templates/create/hono/package.json.hbs +2 -2
- package/templates/create/hono/prisma/schema.prisma.hbs +6 -0
- package/templates/create/hono/prisma/seed.ts.hbs +5 -1
- package/templates/create/hono/prisma.compute.ts.hbs +10 -0
- package/templates/create/hono/src/index.ts.hbs +7 -9
- package/templates/create/hono/src/lib/prisma.ts.hbs +4 -18
- package/templates/create/hono/tsconfig.json +0 -1
- package/templates/create/nest/README.md.hbs +12 -6
- package/templates/create/nest/deno.json.hbs +5 -0
- package/templates/create/nest/package.json.hbs +2 -2
- package/templates/create/nest/prisma/schema.prisma.hbs +6 -0
- package/templates/create/nest/prisma/seed.ts.hbs +5 -1
- package/templates/create/nest/prisma.compute.ts.hbs +10 -0
- package/templates/create/nest/src/app.controller.ts.hbs +1 -6
- package/templates/create/nest/src/app.module.ts.hbs +14 -7
- package/templates/create/nest/src/lib/prisma.ts.hbs +4 -17
- package/templates/create/nest/src/main.ts.hbs +6 -2
- package/templates/create/nest/src/prisma.service.ts.hbs +2 -2
- package/templates/create/nest/src/users.controller.ts.hbs +3 -1
- package/templates/create/nest/src/users.service.ts.hbs +3 -1
- package/templates/create/nest/tsconfig.json +0 -1
- package/templates/create/next/README.md.hbs +11 -7
- package/templates/create/next/deno.json.hbs +12 -0
- package/templates/create/next/prisma/schema.prisma.hbs +5 -0
- package/templates/create/next/prisma/seed.ts.hbs +5 -1
- package/templates/create/next/prisma.compute.ts.hbs +9 -0
- package/templates/create/next/src/app/globals.css +122 -0
- package/templates/create/next/src/app/layout.tsx.hbs +2 -2
- package/templates/create/next/src/app/page.tsx.hbs +58 -34
- package/templates/create/next/src/lib/prisma.ts.hbs +4 -18
- package/templates/create/nuxt/README.md.hbs +11 -7
- package/templates/create/nuxt/app/pages/index.vue.hbs +175 -43
- package/templates/create/nuxt/deno.json.hbs +5 -0
- package/templates/create/nuxt/nuxt.config.ts +0 -1
- package/templates/create/nuxt/prisma/schema.prisma.hbs +5 -0
- package/templates/create/nuxt/prisma/seed.ts.hbs +5 -1
- package/templates/create/nuxt/prisma.compute.ts.hbs +9 -0
- package/templates/create/nuxt/server/api/users.get.ts.hbs +6 -0
- package/templates/create/nuxt/server/utils/prisma.ts.hbs +4 -18
- package/templates/create/svelte/README.md.hbs +13 -4
- package/templates/create/svelte/deno.json.hbs +5 -0
- package/templates/create/svelte/package.json.hbs +1 -2
- package/templates/create/svelte/prisma/schema.prisma.hbs +5 -0
- package/templates/create/svelte/prisma/seed.ts.hbs +5 -1
- package/templates/create/svelte/src/lib/server/prisma.ts.hbs +2 -18
- package/templates/create/svelte/src/routes/+layout.svelte +0 -1
- package/templates/create/svelte/src/routes/+page.server.ts.hbs +7 -1
- package/templates/create/svelte/src/routes/+page.svelte.hbs +297 -41
- package/templates/create/svelte/svelte.config.js +13 -0
- package/templates/create/svelte/vite.config.ts +0 -3
- package/templates/create/tanstack-start/README.md.hbs +11 -7
- package/templates/create/tanstack-start/deno.json.hbs +13 -0
- package/templates/create/tanstack-start/prisma/schema.prisma.hbs +5 -0
- package/templates/create/tanstack-start/prisma/seed.ts.hbs +5 -1
- package/templates/create/tanstack-start/prisma.compute.ts.hbs +9 -0
- package/templates/create/tanstack-start/src/lib/prisma.server.ts.hbs +4 -18
- package/templates/create/tanstack-start/src/routes/__root.tsx.hbs +29 -4
- package/templates/create/tanstack-start/src/routes/index.tsx.hbs +76 -35
- package/templates/create/tanstack-start/src/styles.css +146 -0
- package/templates/create/tanstack-start/tsconfig.json +1 -1
- package/templates/create/turborepo/README.md.hbs +9 -7
- package/templates/create/turborepo/apps/api/package.json.hbs +9 -2
- package/templates/create/turborepo/apps/api/src/index.ts.hbs +12 -28
- package/templates/create/turborepo/apps/api/tsconfig.json +0 -1
- package/templates/create/turborepo/deno.json.hbs +5 -0
- package/templates/create/turborepo/package.json.hbs +6 -0
- package/templates/create/turborepo/packages/db/package.json.hbs +5 -4
- package/templates/create/turborepo/packages/db/prisma/schema.prisma.hbs +5 -0
- package/templates/create/turborepo/packages/db/prisma/seed.ts.hbs +5 -1
- package/templates/create/turborepo/packages/db/src/client.ts.hbs +5 -2
- package/templates/create/turborepo/packages/db/tsconfig.json +0 -1
- package/templates/create/turborepo/prisma.compute.ts.hbs +14 -0
- package/templates/create/astro/module.ts.hbs +0 -30
- package/templates/create/astro/prisma-composer.config.ts.hbs +0 -8
- package/templates/create/astro/service.ts.hbs +0 -19
- package/templates/create/elysia/.yarnrc.yml.hbs +0 -3
- package/templates/create/elysia/module.ts.hbs +0 -30
- package/templates/create/elysia/prisma-composer.config.ts.hbs +0 -8
- package/templates/create/elysia/service.ts.hbs +0 -19
- package/templates/create/hono/module.ts.hbs +0 -30
- package/templates/create/hono/prisma-composer.config.ts.hbs +0 -8
- package/templates/create/hono/service.ts.hbs +0 -19
- package/templates/create/nest/module.ts.hbs +0 -30
- package/templates/create/nest/prisma-composer.config.ts.hbs +0 -8
- package/templates/create/nest/src/service.ts.hbs +0 -19
- package/templates/create/next/module.ts.hbs +0 -30
- package/templates/create/next/prisma-composer.config.ts.hbs +0 -8
- package/templates/create/next/service.ts.hbs +0 -19
- package/templates/create/nuxt/module.ts.hbs +0 -30
- package/templates/create/nuxt/prisma-composer.config.ts.hbs +0 -8
- package/templates/create/nuxt/service.ts.hbs +0 -19
- package/templates/create/svelte/module.ts.hbs +0 -30
- package/templates/create/svelte/prisma-composer.config.ts.hbs +0 -8
- package/templates/create/svelte/service.ts.hbs +0 -19
- package/templates/create/svelte/svelte.config.js.hbs +0 -10
- package/templates/create/tanstack-start/module.ts.hbs +0 -30
- package/templates/create/tanstack-start/prisma-composer.config.ts.hbs +0 -8
- package/templates/create/tanstack-start/service.ts.hbs +0 -19
- package/templates/create/turborepo/apps/api/src/service.ts.hbs +0 -19
- package/templates/create/turborepo/module.ts.hbs +0 -30
- package/templates/create/turborepo/prisma-composer.config.ts.hbs +0 -8
- package/templates/shared/setup-composer-postgres.mjs.hbs +0 -179
- 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}}
|
|
6
|
-
description: "
|
|
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
|
-
<
|
|
20
|
-
<
|
|
21
|
-
|
|
22
|
-
|
|
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
|
-
|
|
28
|
-
|
|
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
|
-
</
|
|
30
|
+
</div>
|
|
31
31
|
|
|
32
|
-
<section className="
|
|
33
|
-
<div className="
|
|
34
|
-
<
|
|
35
|
-
|
|
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
|
|
43
|
-
|
|
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
|
|
44
|
+
<p className="empty">No users yet. Run <code>db:seed</code> after your first migration.</p>
|
|
47
45
|
) : (
|
|
48
|
-
<ul className="
|
|
46
|
+
<ul className="users">
|
|
49
47
|
{users.map((user) => (
|
|
50
|
-
<li
|
|
51
|
-
<
|
|
52
|
-
{
|
|
53
|
-
|
|
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
|
-
<
|
|
68
|
-
<
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
</
|
|
72
|
-
|
|
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}}
|
|
73
97
|
</main>
|
|
74
98
|
);
|
|
75
99
|
}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
+
{{#if (requiresDotenvConfigImport packageManager)}}
|
|
1
2
|
import "dotenv/config";
|
|
2
|
-
|
|
3
|
-
import
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
- `
|
|
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
|
|
39
|
+
## Prisma Compute
|
|
37
40
|
|
|
38
|
-
|
|
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
|
-
|
|
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: "
|
|
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
|
-
<
|
|
42
|
-
<
|
|
43
|
-
|
|
44
|
-
|
|
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
|
-
|
|
50
|
-
|
|
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
|
-
</
|
|
42
|
+
</div>
|
|
53
43
|
|
|
54
|
-
<section class="
|
|
44
|
+
<section class="panel">
|
|
55
45
|
<div class="panel-header">
|
|
56
|
-
<
|
|
57
|
-
|
|
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
|
|
64
|
-
|
|
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
|
|
67
|
-
No users yet. Run <code>db:seed</code
|
|
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="
|
|
70
|
-
<li v-for="user in data.users" :key="user.id"
|
|
71
|
-
<
|
|
72
|
-
|
|
73
|
-
<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
|
-
<
|
|
82
|
-
<
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
</
|
|
86
|
-
|
|
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>
|
|
@@ -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()
|
|
@@ -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}}
|