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
|
@@ -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}}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { ReactNode } from "react";
|
|
2
|
-
import { HeadContent, Scripts, createRootRoute } from "@tanstack/react-router";
|
|
2
|
+
import { HeadContent, Link, Scripts, createRootRoute } from "@tanstack/react-router";
|
|
3
3
|
|
|
4
4
|
import appCss from "../styles.css?url";
|
|
5
5
|
|
|
@@ -14,11 +14,11 @@ export const Route = createRootRoute({
|
|
|
14
14
|
content: "width=device-width, initial-scale=1",
|
|
15
15
|
},
|
|
16
16
|
{
|
|
17
|
-
title: "{{projectName}}
|
|
17
|
+
title: "{{projectName}}",
|
|
18
18
|
},
|
|
19
19
|
{
|
|
20
20
|
name: "description",
|
|
21
|
-
content: "
|
|
21
|
+
content: "TanStack Start + Prisma starter generated by create-prisma.",
|
|
22
22
|
},
|
|
23
23
|
],
|
|
24
24
|
links: [
|
|
@@ -38,9 +38,34 @@ function RootDocument({ children }: { children: ReactNode }) {
|
|
|
38
38
|
<HeadContent />
|
|
39
39
|
</head>
|
|
40
40
|
<body>
|
|
41
|
-
|
|
41
|
+
<div className="shell">
|
|
42
|
+
<header className="topbar">
|
|
43
|
+
<div>
|
|
44
|
+
<p className="eyebrow">create-prisma</p>
|
|
45
|
+
<h1>TanStack Start + Prisma</h1>
|
|
46
|
+
</div>
|
|
47
|
+
|
|
48
|
+
<nav className="nav">
|
|
49
|
+
<Link to="/" className="navLink">
|
|
50
|
+
Home
|
|
51
|
+
</Link>
|
|
52
|
+
<a
|
|
53
|
+
className="navLink"
|
|
54
|
+
href="https://tanstack.com/start/latest/docs/framework/react/overview"
|
|
55
|
+
rel="noreferrer"
|
|
56
|
+
target="_blank"
|
|
57
|
+
>
|
|
58
|
+
Docs
|
|
59
|
+
</a>
|
|
60
|
+
</nav>
|
|
61
|
+
</header>
|
|
62
|
+
|
|
63
|
+
{children}
|
|
64
|
+
</div>
|
|
65
|
+
|
|
42
66
|
<Scripts />
|
|
43
67
|
</body>
|
|
44
68
|
</html>
|
|
45
69
|
);
|
|
46
70
|
}
|
|
71
|
+
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { createFileRoute } from "@tanstack/react-router";
|
|
2
|
-
|
|
3
2
|
import { createServerFn } from "@tanstack/react-start";
|
|
3
|
+
{{#if (eq schemaPreset "basic")}}
|
|
4
4
|
import { prisma } from "../lib/prisma.server";
|
|
5
|
+
{{/if}}
|
|
5
6
|
|
|
7
|
+
{{#if (eq schemaPreset "basic")}}
|
|
6
8
|
function isBootstrapQueryError(error: unknown): error is { code?: string } {
|
|
7
9
|
return (
|
|
8
10
|
typeof error === "object" &&
|
|
@@ -28,59 +30,57 @@ const listUsers = createServerFn({ method: "GET" }).handler(async () => {
|
|
|
28
30
|
throw error;
|
|
29
31
|
}
|
|
30
32
|
});
|
|
33
|
+
{{/if}}
|
|
31
34
|
|
|
32
35
|
export const Route = createFileRoute("/")({
|
|
36
|
+
{{#if (eq schemaPreset "basic")}}
|
|
33
37
|
loader: async () => listUsers(),
|
|
38
|
+
{{/if}}
|
|
34
39
|
component: Home,
|
|
35
40
|
});
|
|
36
41
|
|
|
37
42
|
function Home() {
|
|
43
|
+
{{#if (eq schemaPreset "basic")}}
|
|
38
44
|
const formatter = new Intl.DateTimeFormat("en", {
|
|
39
45
|
dateStyle: "medium",
|
|
46
|
+
timeStyle: "short",
|
|
40
47
|
timeZone: "UTC",
|
|
41
48
|
});
|
|
42
49
|
const users = Route.useLoaderData();
|
|
50
|
+
{{/if}}
|
|
43
51
|
|
|
44
52
|
return (
|
|
45
53
|
<main className="shell">
|
|
46
|
-
<
|
|
47
|
-
<
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
<span className="framework">TanStack Start</span>
|
|
51
|
-
</div>
|
|
52
|
-
<h1>Start building with Prisma.</h1>
|
|
54
|
+
<div className="hero">
|
|
55
|
+
<p className="eyebrow">TanStack Start + Prisma 7</p>
|
|
56
|
+
{{#if (eq schemaPreset "basic")}}
|
|
57
|
+
<h1>Users from your database, loaded through a server function.</h1>
|
|
53
58
|
<p className="lede">
|
|
54
|
-
|
|
55
|
-
|
|
59
|
+
This route uses TanStack Start's server function API and the Prisma client in{" "}
|
|
60
|
+
<code>src/lib/prisma.server.ts</code>.
|
|
56
61
|
</p>
|
|
57
|
-
</
|
|
62
|
+
</div>
|
|
58
63
|
|
|
59
|
-
<section className="
|
|
60
|
-
<div className="
|
|
61
|
-
<
|
|
62
|
-
|
|
63
|
-
<p>Latest records</p>
|
|
64
|
-
</div>
|
|
65
|
-
<span className="count">{users?.length ?? 0}</span>
|
|
64
|
+
<section className="panel">
|
|
65
|
+
<div className="panelHeader">
|
|
66
|
+
<h2>Seeded users</h2>
|
|
67
|
+
<span>{users?.length ?? 0} total</span>
|
|
66
68
|
</div>
|
|
67
69
|
|
|
68
70
|
{!users ? (
|
|
69
|
-
<p className="empty
|
|
70
|
-
|
|
71
|
+
<p className="empty">
|
|
72
|
+
Could not query users yet. Run <code>db:migrate</code>, then <code>db:seed</code>,
|
|
73
|
+
then refresh.
|
|
71
74
|
</p>
|
|
72
75
|
) : users.length === 0 ? (
|
|
73
|
-
<p className="empty
|
|
76
|
+
<p className="empty">No users yet. Run <code>db:seed</code> after your first migration.</p>
|
|
74
77
|
) : (
|
|
75
|
-
<ul className="
|
|
78
|
+
<ul className="users">
|
|
76
79
|
{users.map((user) => (
|
|
77
|
-
<li
|
|
78
|
-
<
|
|
79
|
-
{
|
|
80
|
-
|
|
81
|
-
<div className="user-copy">
|
|
82
|
-
<p className="user-name">{user.name ?? "Unnamed user"}</p>
|
|
83
|
-
<p className="user-email">{user.email}</p>
|
|
80
|
+
<li key={user.id}>
|
|
81
|
+
<div>
|
|
82
|
+
<strong>{user.name ?? "Unnamed user"}</strong>
|
|
83
|
+
<p>{user.email}</p>
|
|
84
84
|
</div>
|
|
85
85
|
<time dateTime={user.createdAt.toISOString()}>
|
|
86
86
|
{formatter.format(user.createdAt)}
|
|
@@ -90,13 +90,54 @@ function Home() {
|
|
|
90
90
|
</ul>
|
|
91
91
|
)}
|
|
92
92
|
</section>
|
|
93
|
+
{{else}}
|
|
94
|
+
<h1>Your TanStack Start app is ready.</h1>
|
|
95
|
+
<p className="lede">
|
|
96
|
+
Edit <code>prisma/schema.prisma</code>, run <code>db:migrate</code>, then query your
|
|
97
|
+
database from server functions or route loaders.
|
|
98
|
+
</p>
|
|
99
|
+
</div>
|
|
100
|
+
|
|
101
|
+
<section className="panel">
|
|
102
|
+
<div className="panelHeader">
|
|
103
|
+
<h2>What's included</h2>
|
|
104
|
+
<span>Starter kit</span>
|
|
105
|
+
</div>
|
|
93
106
|
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
107
|
+
<ul className="users">
|
|
108
|
+
<li>
|
|
109
|
+
<div>
|
|
110
|
+
<strong>File-based routing</strong>
|
|
111
|
+
<p>Add new routes in <code>src/routes</code>.</p>
|
|
112
|
+
</div>
|
|
113
|
+
</li>
|
|
114
|
+
<li>
|
|
115
|
+
<div>
|
|
116
|
+
<strong>Prisma client</strong>
|
|
117
|
+
<p>Use the shared instance from <code>src/lib/prisma.server.ts</code>.</p>
|
|
118
|
+
</div>
|
|
119
|
+
</li>
|
|
120
|
+
<li>
|
|
121
|
+
<div>
|
|
122
|
+
<strong>Seed script</strong>
|
|
123
|
+
<p>Run <code>db:seed</code> after your first migration.</p>
|
|
124
|
+
</div>
|
|
125
|
+
</li>
|
|
126
|
+
</ul>
|
|
127
|
+
</section>
|
|
128
|
+
{{/if}}
|
|
129
|
+
|
|
130
|
+
<section className="panel">
|
|
131
|
+
<div className="panelHeader">
|
|
132
|
+
<h2>Next steps</h2>
|
|
133
|
+
</div>
|
|
134
|
+
|
|
135
|
+
<ul className="steps">
|
|
136
|
+
<li>Run <code>db:generate</code> after schema changes.</li>
|
|
137
|
+
<li>Use TanStack Start server functions for server-only logic.</li>
|
|
138
|
+
<li>Preview production output with <code>preview</code>.</li>
|
|
139
|
+
</ul>
|
|
140
|
+
</section>
|
|
100
141
|
</main>
|
|
101
142
|
);
|
|
102
143
|
}
|
|
@@ -0,0 +1,146 @@
|
|
|
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
|
+
.panel + .panel {
|
|
56
|
+
margin-top: 1rem;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
.panelHeader {
|
|
60
|
+
display: flex;
|
|
61
|
+
align-items: center;
|
|
62
|
+
justify-content: space-between;
|
|
63
|
+
gap: 1rem;
|
|
64
|
+
margin-bottom: 0.75rem;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
h2 {
|
|
68
|
+
margin: 0;
|
|
69
|
+
font-size: 0.875rem;
|
|
70
|
+
font-weight: 600;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
.panelHeader span,
|
|
74
|
+
.empty,
|
|
75
|
+
time {
|
|
76
|
+
color: #888;
|
|
77
|
+
font-size: 0.8rem;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
.panel p {
|
|
81
|
+
color: #666;
|
|
82
|
+
font-size: 0.8rem;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
.users {
|
|
86
|
+
list-style: none;
|
|
87
|
+
margin: 0;
|
|
88
|
+
padding: 0;
|
|
89
|
+
display: grid;
|
|
90
|
+
gap: 0.5rem;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
.users li {
|
|
94
|
+
display: flex;
|
|
95
|
+
align-items: center;
|
|
96
|
+
justify-content: space-between;
|
|
97
|
+
gap: 1rem;
|
|
98
|
+
padding: 0.625rem 0.75rem;
|
|
99
|
+
border: 1px solid #eee;
|
|
100
|
+
border-radius: 0.375rem;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
.users p {
|
|
104
|
+
margin: 0.125rem 0 0;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
time {
|
|
108
|
+
font-size: 0.75rem;
|
|
109
|
+
white-space: nowrap;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
code {
|
|
113
|
+
padding: 0.125rem 0.25rem;
|
|
114
|
+
border-radius: 0.25rem;
|
|
115
|
+
background: #f5f5f5;
|
|
116
|
+
font-family: SFMono-Regular, Consolas, monospace;
|
|
117
|
+
font-size: 0.875em;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
.steps {
|
|
121
|
+
list-style: none;
|
|
122
|
+
margin: 0;
|
|
123
|
+
padding: 0;
|
|
124
|
+
display: grid;
|
|
125
|
+
gap: 0.25rem;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
.steps li {
|
|
129
|
+
color: #444;
|
|
130
|
+
font-size: 0.8rem;
|
|
131
|
+
line-height: 1.5;
|
|
132
|
+
padding: 0.375rem 0;
|
|
133
|
+
border-bottom: 1px solid #f5f5f5;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
.steps li:last-child {
|
|
137
|
+
border-bottom: none;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
@media (max-width: 640px) {
|
|
141
|
+
.users li,
|
|
142
|
+
.panelHeader {
|
|
143
|
+
flex-direction: column;
|
|
144
|
+
align-items: flex-start;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
@@ -16,7 +16,9 @@ Generated by `create-prisma` with the Turborepo template.
|
|
|
16
16
|
- `{{runScriptCommand packageManager "db:generate"}}` - generate Prisma Client in `packages/db`
|
|
17
17
|
- `{{runScriptCommand packageManager "db:migrate"}}` - create/apply migrations in `packages/db`
|
|
18
18
|
- `{{runScriptCommand packageManager "db:seed"}}` - run seed script in `packages/db`
|
|
19
|
-
|
|
19
|
+
{{#if compute}}
|
|
20
|
+
- `{{runScriptCommand packageManager "compute:deploy"}}` - redeploy to Prisma Compute with environment variables from `packages/db/.env`
|
|
21
|
+
{{/if}}
|
|
20
22
|
|
|
21
23
|
## Prisma
|
|
22
24
|
|
|
@@ -26,15 +28,15 @@ Prisma is scaffolded inside `packages/db`:
|
|
|
26
28
|
- `packages/db/prisma/seed.ts`
|
|
27
29
|
- `packages/db/src/client.ts`
|
|
28
30
|
- `packages/db/prisma.config.ts`
|
|
29
|
-
- `
|
|
30
|
-
- `apps/api/src/service.ts`
|
|
31
|
-
- `prisma-composer.config.ts`
|
|
31
|
+
- `prisma.compute.ts`
|
|
32
32
|
- `packages/db/src/generated/prisma`
|
|
33
33
|
|
|
34
34
|
`apps/api/src/index.ts` imports the shared Prisma client from `@repo/db`.
|
|
35
|
+
{{#if compute}}
|
|
35
36
|
|
|
36
|
-
## Prisma
|
|
37
|
+
## Prisma Compute
|
|
37
38
|
|
|
38
|
-
|
|
39
|
+
This project includes a Prisma Compute deploy script and deploy defaults in `prisma.compute.ts`. Deploys load environment variables from `packages/db/.env`; if setup created a Prisma Postgres database, its `DATABASE_URL` is already written there.
|
|
39
40
|
|
|
40
|
-
|
|
41
|
+
After local changes, run `{{runScriptCommand packageManager "compute:deploy"}}` to redeploy.
|
|
42
|
+
{{/if}}
|
|
@@ -3,10 +3,17 @@
|
|
|
3
3
|
"private": true,
|
|
4
4
|
"type": "module",
|
|
5
5
|
"scripts": {
|
|
6
|
+
{{#if (eq packageManager "deno")}}
|
|
7
|
+
"dev": "deno run -A --env-file=../../packages/db/.env --watch src/index.ts",
|
|
8
|
+
"build": "deno check src/index.ts",
|
|
9
|
+
"start": "deno run -A --env-file=../../packages/db/.env src/index.ts",
|
|
10
|
+
"typecheck": "deno check src/index.ts"
|
|
11
|
+
{{else}}
|
|
6
12
|
"dev": "tsx watch src/index.ts",
|
|
7
|
-
"build": "
|
|
8
|
-
"start": "node dist/
|
|
13
|
+
"build": "tsc",
|
|
14
|
+
"start": "node dist/src/index.js",
|
|
9
15
|
"typecheck": "tsc --noEmit"
|
|
16
|
+
{{/if}}
|
|
10
17
|
},
|
|
11
18
|
"dependencies": {
|
|
12
19
|
"@hono/node-server": "^2.0.6",
|
|
@@ -3,32 +3,23 @@ import "dotenv/config";
|
|
|
3
3
|
{{/if}}
|
|
4
4
|
import { serve } from "@hono/node-server";
|
|
5
5
|
import { Hono } from "hono";
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
}
|
|
13
|
-
composerDatabaseUrl = undefined;
|
|
14
|
-
}
|
|
15
|
-
if (composerDatabaseUrl) {
|
|
16
|
-
process.env.DATABASE_URL = composerDatabaseUrl;
|
|
17
|
-
}
|
|
18
|
-
const { prisma } = await import("@repo/db");
|
|
6
|
+
{{#if (eq schemaPreset "basic")}}
|
|
7
|
+
{{#if (eq packageManager "deno")}}
|
|
8
|
+
import { prisma } from "../../../packages/db/src/index.ts";
|
|
9
|
+
{{else}}
|
|
10
|
+
import { prisma } from "@repo/db";
|
|
11
|
+
{{/if}}
|
|
12
|
+
{{/if}}
|
|
19
13
|
|
|
20
14
|
const app = new Hono();
|
|
21
15
|
|
|
22
16
|
app.get("/", (c) => {
|
|
23
17
|
return c.json({
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
status: "ready",
|
|
27
|
-
endpoints: {
|
|
28
|
-
users: "/users",
|
|
29
|
-
},
|
|
18
|
+
ok: true,
|
|
19
|
+
message: "Turborepo API is running.",
|
|
30
20
|
});
|
|
31
21
|
});
|
|
22
|
+
{{#if (eq schemaPreset "basic")}}
|
|
32
23
|
|
|
33
24
|
app.get("/users", async (c) => {
|
|
34
25
|
const users = await prisma.user
|
|
@@ -54,18 +45,11 @@ app.get("/users", async (c) => {
|
|
|
54
45
|
|
|
55
46
|
return c.json(users);
|
|
56
47
|
});
|
|
48
|
+
{{/if}}
|
|
57
49
|
|
|
58
50
|
const rawPort = (process.env.PORT ?? "").trim();
|
|
59
51
|
const parsedPort = rawPort.length > 0 ? Number(rawPort) : Number.NaN;
|
|
60
|
-
|
|
61
|
-
let composerPort: number | undefined;
|
|
62
|
-
try {
|
|
63
|
-
composerPort = service.port();
|
|
64
|
-
} catch {
|
|
65
|
-
composerPort = undefined;
|
|
66
|
-
}
|
|
67
|
-
|
|
68
52
|
const port =
|
|
69
|
-
|
|
53
|
+
Number.isFinite(parsedPort) && parsedPort >= 0 && parsedPort <= 65535 ? parsedPort : 3000;
|
|
70
54
|
console.log(`API listening at http://localhost:${port}`);
|
|
71
55
|
serve({ fetch: app.fetch, port });
|
|
@@ -10,9 +10,15 @@
|
|
|
10
10
|
"packages/*"
|
|
11
11
|
],
|
|
12
12
|
"scripts": {
|
|
13
|
+
{{#if (eq packageManager "deno")}}
|
|
14
|
+
"build": "deno task --filter=@repo/db build && deno task --filter=@repo/api build",
|
|
15
|
+
"dev": "deno task --filter=@repo/api dev",
|
|
16
|
+
"typecheck": "deno task --filter=@repo/db typecheck && deno task --filter=@repo/api typecheck",
|
|
17
|
+
{{else}}
|
|
13
18
|
"build": "turbo run build",
|
|
14
19
|
"dev": "turbo run dev --filter=@repo/api",
|
|
15
20
|
"typecheck": "turbo run typecheck",
|
|
21
|
+
{{/if}}
|
|
16
22
|
"db:generate": "{{runScriptInDirectoryCommand packageManager "packages/db" "db:generate"}}",
|
|
17
23
|
"db:push": "{{runScriptInDirectoryCommand packageManager "packages/db" "db:push"}}",
|
|
18
24
|
"db:migrate": "{{runScriptInDirectoryCommand packageManager "packages/db" "db:migrate"}}",
|
|
@@ -6,12 +6,13 @@
|
|
|
6
6
|
".": "./src/index.ts"
|
|
7
7
|
},
|
|
8
8
|
"scripts": {
|
|
9
|
+
{{#if (eq packageManager "deno")}}
|
|
10
|
+
"build": "deno check src/index.ts",
|
|
11
|
+
"typecheck": "deno check src/index.ts"
|
|
12
|
+
{{else}}
|
|
9
13
|
"build": "tsc",
|
|
10
|
-
"db:generate": "{{prismaCommand packageManager "generate"}}",
|
|
11
|
-
"db:push": "{{prismaCommand packageManager "db push"}}",
|
|
12
|
-
"db:migrate": "{{prismaCommand packageManager "migrate dev"}}",
|
|
13
|
-
"db:seed": "{{prismaCommand packageManager "db seed"}}",
|
|
14
14
|
"typecheck": "tsc --noEmit"
|
|
15
|
+
{{/if}}
|
|
15
16
|
},
|
|
16
17
|
"devDependencies": {
|
|
17
18
|
"@types/node": "^26.0.0",
|
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
generator client {
|
|
2
2
|
provider = "prisma-client"
|
|
3
3
|
output = "../src/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 "../src/client";
|
|
1
|
+
import prisma from "../src/client{{#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,8 +1,9 @@
|
|
|
1
|
+
{{#unless (eq packageManager "deno")}}
|
|
1
2
|
import path from "node:path";
|
|
2
3
|
import { fileURLToPath } from "node:url";
|
|
3
4
|
import dotenv from "dotenv";
|
|
4
|
-
|
|
5
|
-
import { PrismaClient } from "./generated/prisma/client";
|
|
5
|
+
{{/unless}}
|
|
6
|
+
import { PrismaClient } from "./generated/prisma/client{{#if (eq packageManager "deno")}}.ts{{/if}}";
|
|
6
7
|
{{#if (eq provider "postgresql")}}
|
|
7
8
|
import { PrismaPg } from "@prisma/adapter-pg";
|
|
8
9
|
{{/if}}
|
|
@@ -19,8 +20,10 @@ import { {{sqliteAdapterClass packageManager}} } from "{{sqliteAdapterPackage pa
|
|
|
19
20
|
import { PrismaMssql } from "@prisma/adapter-mssql";
|
|
20
21
|
{{/if}}
|
|
21
22
|
|
|
23
|
+
{{#unless (eq packageManager "deno")}}
|
|
22
24
|
const moduleDir = path.dirname(fileURLToPath(import.meta.url));
|
|
23
25
|
dotenv.config({ path: path.resolve(moduleDir, "../.env"), quiet: true });
|
|
26
|
+
{{/unless}}
|
|
24
27
|
|
|
25
28
|
const rawDatabaseUrl = process.env.DATABASE_URL;
|
|
26
29
|
{{#if (eq provider "sqlite")}}
|