create-prisma 0.4.1 → 0.4.2-next.37.104.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 +66 -44
- package/dist/cli.mjs +1 -1
- package/dist/{create-H6Tk0JlE.mjs → create-BeFhatOc.mjs} +910 -993
- package/dist/index.d.mts +32 -39
- package/dist/index.mjs +3 -3
- package/package.json +7 -2
- package/templates/create/_shared/prisma/seed.ts.hbs +52 -0
- package/templates/create/astro/README.md.hbs +25 -15
- package/templates/create/astro/astro.config.mjs +6 -1
- package/templates/create/astro/deno.json.hbs +1 -1
- package/templates/create/astro/package.json.hbs +3 -2
- package/templates/create/astro/src/lib/prisma.ts.hbs +60 -40
- package/templates/create/astro/src/pages/api/users.ts.hbs +6 -22
- package/templates/create/astro/src/pages/index.astro.hbs +18 -55
- package/templates/create/elysia/README.md.hbs +27 -17
- package/templates/create/elysia/deno.json.hbs +1 -1
- package/templates/create/elysia/src/index.ts.hbs +15 -11
- package/templates/create/elysia/src/lib/prisma.ts.hbs +60 -43
- package/templates/create/elysia/tsconfig.json +1 -0
- package/templates/create/hono/README.md.hbs +27 -17
- package/templates/create/hono/deno.json.hbs +1 -1
- package/templates/create/hono/src/index.ts.hbs +9 -10
- package/templates/create/hono/src/lib/prisma.ts.hbs +60 -43
- package/templates/create/hono/tsconfig.json +1 -0
- package/templates/create/minimal/.yarnrc.yml.hbs +3 -0
- package/templates/create/minimal/README.md.hbs +39 -0
- package/templates/create/{turborepo → minimal}/deno.json.hbs +1 -1
- package/templates/create/minimal/package.json.hbs +13 -0
- package/templates/create/minimal/src/index.ts.hbs +43 -0
- package/templates/create/minimal/src/lib/prisma.ts.hbs +73 -0
- package/templates/create/{turborepo/apps/api → minimal}/tsconfig.json +3 -4
- package/templates/create/nest/README.md.hbs +28 -17
- package/templates/create/nest/deno.json.hbs +1 -1
- package/templates/create/nest/src/app.module.ts.hbs +5 -6
- package/templates/create/nest/src/lib/prisma.ts.hbs +60 -45
- package/templates/create/nest/src/prisma.service.ts.hbs +6 -5
- package/templates/create/nest/src/users.controller.ts.hbs +1 -2
- package/templates/create/nest/src/users.service.ts.hbs +2 -8
- package/templates/create/nest/tsconfig.json +1 -0
- package/templates/create/next/README.md.hbs +25 -13
- package/templates/create/next/deno.json.hbs +1 -1
- package/templates/create/next/src/app/page.tsx.hbs +16 -57
- package/templates/create/next/src/lib/prisma.ts.hbs +60 -40
- package/templates/create/next/tsconfig.json +1 -0
- package/templates/create/nuxt/README.md.hbs +26 -13
- package/templates/create/nuxt/app/pages/index.vue.hbs +12 -45
- package/templates/create/nuxt/deno.json.hbs +1 -1
- package/templates/create/nuxt/nuxt.config.ts +21 -0
- package/templates/create/nuxt/package.json.hbs +2 -1
- package/templates/create/nuxt/server/api/users.get.ts.hbs +4 -15
- package/templates/create/nuxt/server/utils/prisma.ts.hbs +60 -40
- package/templates/create/svelte/README.md.hbs +25 -15
- package/templates/create/svelte/deno.json.hbs +1 -1
- package/templates/create/svelte/package.json.hbs +1 -1
- package/templates/create/svelte/src/lib/server/prisma.ts.hbs +61 -41
- package/templates/create/svelte/src/routes/+page.server.ts.hbs +4 -15
- package/templates/create/svelte/src/routes/+page.svelte.hbs +13 -163
- package/templates/create/svelte/vite.config.ts +2 -1
- package/templates/create/tanstack-start/README.md.hbs +26 -13
- package/templates/create/tanstack-start/deno.json.hbs +1 -2
- package/templates/create/tanstack-start/package.json.hbs +1 -2
- package/templates/create/tanstack-start/src/lib/prisma.server.ts.hbs +60 -40
- package/templates/create/tanstack-start/src/routes/__root.tsx.hbs +2 -3
- package/templates/create/tanstack-start/src/routes/index.tsx.hbs +26 -77
- package/templates/create/tanstack-start/tsconfig.json +1 -0
- package/templates/create/tanstack-start/vite.config.ts +7 -1
- 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.config.ts +0 -13
- package/templates/create/elysia/prisma/schema.prisma.hbs +0 -25
- package/templates/create/elysia/prisma/seed.ts.hbs +0 -42
- package/templates/create/elysia/prisma.config.ts.hbs +0 -15
- package/templates/create/hono/prisma/schema.prisma.hbs +0 -25
- package/templates/create/hono/prisma/seed.ts.hbs +0 -42
- package/templates/create/hono/prisma.config.ts.hbs +0 -15
- package/templates/create/nest/prisma/schema.prisma.hbs +0 -25
- package/templates/create/nest/prisma/seed.ts.hbs +0 -44
- package/templates/create/nest/prisma.config.ts.hbs +0 -15
- 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.config.ts +0 -13
- 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.config.ts +0 -13
- package/templates/create/svelte/prisma/schema.prisma.hbs +0 -21
- package/templates/create/svelte/prisma/seed.ts.hbs +0 -87
- package/templates/create/svelte/prisma.config.ts +0 -13
- package/templates/create/tanstack-start/prisma/schema.prisma.hbs +0 -21
- package/templates/create/tanstack-start/prisma/seed.ts.hbs +0 -37
- package/templates/create/tanstack-start/prisma.config.ts +0 -13
- package/templates/create/turborepo/README.md.hbs +0 -29
- package/templates/create/turborepo/apps/api/package.json.hbs +0 -19
- package/templates/create/turborepo/apps/api/src/index.ts.hbs +0 -51
- package/templates/create/turborepo/package.json.hbs +0 -24
- package/templates/create/turborepo/packages/db/package.json.hbs +0 -17
- 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 +0 -13
- package/templates/create/turborepo/packages/db/src/client.ts.hbs +0 -58
- 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/turbo.json +0 -28
- /package/templates/create/{turborepo → elysia}/.yarnrc.yml.hbs +0 -0
|
@@ -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 Next</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 Next helper in <code>server/utils/prisma.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 yet. Run
|
|
54
|
+
No users yet. Run db:seed after applying your first migration.
|
|
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;
|
|
@@ -1,5 +1,26 @@
|
|
|
1
|
+
import { prismaVitePlugin } from "@prisma-next/vite-plugin-contract-emit";
|
|
2
|
+
|
|
1
3
|
// https://nuxt.com/docs/api/configuration/nuxt-config
|
|
2
4
|
export default defineNuxtConfig({
|
|
3
5
|
compatibilityDate: "2025-07-15",
|
|
4
6
|
devtools: { enabled: true },
|
|
7
|
+
vite: {
|
|
8
|
+
plugins: [prismaVitePlugin()],
|
|
9
|
+
},
|
|
10
|
+
typescript: {
|
|
11
|
+
tsConfig: {
|
|
12
|
+
compilerOptions: {
|
|
13
|
+
allowImportingTsExtensions: true,
|
|
14
|
+
},
|
|
15
|
+
},
|
|
16
|
+
},
|
|
17
|
+
nitro: {
|
|
18
|
+
typescript: {
|
|
19
|
+
tsConfig: {
|
|
20
|
+
compilerOptions: {
|
|
21
|
+
allowImportingTsExtensions: true,
|
|
22
|
+
},
|
|
23
|
+
},
|
|
24
|
+
},
|
|
25
|
+
},
|
|
5
26
|
});
|
|
@@ -1,18 +1,11 @@
|
|
|
1
|
-
{
|
|
2
|
-
import prisma from "../utils/prisma";
|
|
1
|
+
import { listUsers } from "../utils/prisma";
|
|
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,4 @@ export default defineEventHandler(async () => {
|
|
|
29
22
|
|
|
30
23
|
return { users };
|
|
31
24
|
});
|
|
32
|
-
|
|
33
|
-
export default defineEventHandler(async () => {
|
|
34
|
-
return { users: [] };
|
|
35
|
-
});
|
|
36
|
-
{{/if}}
|
|
25
|
+
|
|
@@ -1,53 +1,73 @@
|
|
|
1
1
|
import "dotenv/config";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
{{#if (eq provider "cockroachdb")}}
|
|
7
|
-
import { PrismaPg } from "@prisma/adapter-pg";
|
|
8
|
-
{{/if}}
|
|
9
|
-
{{#if (eq provider "mysql")}}
|
|
10
|
-
import { PrismaMariaDb } from "@prisma/adapter-mariadb";
|
|
11
|
-
{{/if}}
|
|
12
|
-
{{#if (eq provider "sqlite")}}
|
|
13
|
-
import { PrismaBetterSqlite3 } from "@prisma/adapter-better-sqlite3";
|
|
14
|
-
{{/if}}
|
|
15
|
-
{{#if (eq provider "sqlserver")}}
|
|
16
|
-
import { PrismaMssql } from "@prisma/adapter-mssql";
|
|
2
|
+
{{#if (eq provider "mongo")}}
|
|
3
|
+
import mongo from "@prisma-next/mongo/runtime";
|
|
4
|
+
{{else}}
|
|
5
|
+
import postgres from "@prisma-next/postgres/runtime";
|
|
17
6
|
{{/if}}
|
|
18
7
|
|
|
19
|
-
{{#if (eq provider "
|
|
20
|
-
|
|
8
|
+
{{#if (eq provider "mongo")}}
|
|
9
|
+
import type { DefaultModelRow } from "@prisma-next/mongo-orm";
|
|
21
10
|
{{else}}
|
|
22
|
-
|
|
23
|
-
if (!databaseUrl) {
|
|
24
|
-
throw new Error("DATABASE_URL is required");
|
|
25
|
-
}
|
|
11
|
+
import type { DefaultModelRow } from "@prisma-next/sql-orm-client";
|
|
26
12
|
{{/if}}
|
|
27
13
|
|
|
28
|
-
{
|
|
29
|
-
|
|
30
|
-
|
|
14
|
+
import type { Contract } from "../../prisma/contract.d";
|
|
15
|
+
import contractJson from "../../prisma/contract.json" with { type: "json" };
|
|
16
|
+
|
|
17
|
+
{{#if (eq provider "mongo")}}
|
|
18
|
+
export const db = mongo<Contract>({
|
|
19
|
+
contractJson,
|
|
20
|
+
url: process.env["DATABASE_URL"]!,
|
|
31
21
|
});
|
|
32
|
-
{{
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
22
|
+
{{else}}
|
|
23
|
+
export const db = postgres<Contract>({
|
|
24
|
+
contractJson,
|
|
25
|
+
url: process.env["DATABASE_URL"]!,
|
|
36
26
|
});
|
|
37
27
|
{{/if}}
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
{{#if (eq provider "
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
28
|
+
|
|
29
|
+
type UserRow = DefaultModelRow<Contract, "User">;
|
|
30
|
+
|
|
31
|
+
{{#if (eq provider "mongo")}}
|
|
32
|
+
function toStarterUser(user: Pick<UserRow, "_id" | "email" | "username" | "name">) {
|
|
33
|
+
return {
|
|
34
|
+
id: String(user._id),
|
|
35
|
+
email: user.email,
|
|
36
|
+
username: user.username ?? null,
|
|
37
|
+
name: user.name ?? null,
|
|
38
|
+
createdAt: null as Date | null,
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
{{else}}
|
|
42
|
+
function toStarterUser(user: Pick<UserRow, "id" | "email" | "username" | "name" | "createdAt">) {
|
|
43
|
+
return {
|
|
44
|
+
id: String(user.id),
|
|
45
|
+
email: user.email,
|
|
46
|
+
username: user.username ?? null,
|
|
47
|
+
name: user.name ?? null,
|
|
48
|
+
createdAt: user.createdAt,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
45
51
|
{{/if}}
|
|
46
|
-
|
|
47
|
-
|
|
52
|
+
|
|
53
|
+
export async function listUsers(limit = 10) {
|
|
54
|
+
|
|
55
|
+
{{#if (eq provider "mongo")}}
|
|
56
|
+
const users: ReturnType<typeof toStarterUser>[] = [];
|
|
57
|
+
|
|
58
|
+
for await (const user of db.orm.users.select("_id", "email", "username", "name").take(limit).all()) {
|
|
59
|
+
users.push(toStarterUser(user));
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
return users;
|
|
63
|
+
{{else}}
|
|
64
|
+
const users = await db.orm.User.select("id", "email", "username", "name", "createdAt").take(limit).all();
|
|
65
|
+
|
|
66
|
+
return users.map(toStarterUser);
|
|
48
67
|
{{/if}}
|
|
49
68
|
|
|
50
|
-
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
export type StarterUser = Awaited<ReturnType<typeof listUsers>>[number];
|
|
51
72
|
|
|
52
|
-
export
|
|
53
|
-
export default prisma;
|
|
73
|
+
export default db;
|
|
@@ -9,26 +9,36 @@ Generated by `create-prisma` with the SvelteKit template.
|
|
|
9
9
|
- `{{runScriptCommand packageManager "preview"}}` - preview the production build
|
|
10
10
|
- `{{runScriptCommand packageManager "check"}}` - run SvelteKit sync and type checks
|
|
11
11
|
|
|
12
|
-
## Prisma
|
|
12
|
+
## Prisma Next
|
|
13
13
|
|
|
14
|
-
Prisma setup is scaffolded
|
|
14
|
+
Prisma Next setup is scaffolded in:
|
|
15
15
|
|
|
16
|
-
- `prisma/
|
|
17
|
-
- `prisma
|
|
16
|
+
- `prisma/contract{{#if (eq authoring "typescript")}}.ts{{else}}.prisma{{/if}}`
|
|
17
|
+
- `prisma-next.config.ts`
|
|
18
18
|
- `src/lib/server/prisma.ts`
|
|
19
|
-
- `prisma.config.ts`
|
|
20
|
-
- `src/generated/prisma`
|
|
21
19
|
|
|
22
20
|
Database helper scripts are added to `package.json`:
|
|
23
21
|
|
|
24
|
-
- `
|
|
25
|
-
|
|
26
|
-
- `db:
|
|
27
|
-
- `db:
|
|
28
|
-
{{
|
|
29
|
-
|
|
30
|
-
|
|
22
|
+
- `{{runScriptCommand packageManager "contract:emit"}}` - emit contract artifacts after contract changes
|
|
23
|
+
{{#if (eq provider "mongo")}}
|
|
24
|
+
- `{{runScriptCommand packageManager "db:up"}}` - start the local MongoDB replica set with `mongodb-memory-server`. Data persists in `.mongo-data/` across restarts.
|
|
25
|
+
- `{{runScriptCommand packageManager "db:down"}}` - stop the local MongoDB process (data preserved)
|
|
26
|
+
- `{{runScriptCommand packageManager "db:reset"}}` - stop and wipe `.mongo-data/` for a clean slate
|
|
27
|
+
- `{{runScriptCommand packageManager "migration:plan"}}` - create a MongoDB migration plan
|
|
28
|
+
- `{{runScriptCommand packageManager "migrate"}}` - apply the planned MongoDB migration
|
|
31
29
|
{{else}}
|
|
32
|
-
|
|
33
|
-
|
|
30
|
+
- `{{runScriptCommand packageManager "db:init"}}` - initialize database state manually
|
|
31
|
+
- `{{runScriptCommand packageManager "db:update"}}` - update database state manually
|
|
32
|
+
- `{{runScriptCommand packageManager "migration:plan"}}` - create a migration plan
|
|
33
|
+
- `{{runScriptCommand packageManager "migrate"}}` - apply a planned migration
|
|
34
34
|
{{/if}}
|
|
35
|
+
|
|
36
|
+
- `{{runScriptCommand packageManager "db:seed"}}` - insert sample users manually
|
|
37
|
+
|
|
38
|
+
For provider-specific Prisma Next reference docs, see `prisma-next.md`. Prisma Next skills live in the upstream `skills/` directory: https://github.com/prisma/prisma-next/tree/main/skills.
|
|
39
|
+
The SvelteKit Vite dev server also auto-emits Prisma Next contract artifacts when the contract changes.
|
|
40
|
+
|
|
41
|
+
Node-based Prisma Next projects expect Node.js 24 LTS or newer.
|
|
42
|
+
|
|
43
|
+
The starter page loads users in `+page.server.ts` and renders them in `+page.svelte` after you initialize and apply your schema.
|
|
44
|
+
|
|
@@ -1,53 +1,73 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
{{#if (eq provider "cockroachdb")}}
|
|
7
|
-
import { PrismaPg } from "@prisma/adapter-pg";
|
|
8
|
-
{{/if}}
|
|
9
|
-
{{#if (eq provider "mysql")}}
|
|
10
|
-
import { PrismaMariaDb } from "@prisma/adapter-mariadb";
|
|
11
|
-
{{/if}}
|
|
12
|
-
{{#if (eq provider "sqlite")}}
|
|
13
|
-
import { PrismaBetterSqlite3 } from "@prisma/adapter-better-sqlite3";
|
|
14
|
-
{{/if}}
|
|
15
|
-
{{#if (eq provider "sqlserver")}}
|
|
16
|
-
import { PrismaMssql } from "@prisma/adapter-mssql";
|
|
1
|
+
import "dotenv/config";
|
|
2
|
+
{{#if (eq provider "mongo")}}
|
|
3
|
+
import mongo from "@prisma-next/mongo/runtime";
|
|
4
|
+
{{else}}
|
|
5
|
+
import postgres from "@prisma-next/postgres/runtime";
|
|
17
6
|
{{/if}}
|
|
18
7
|
|
|
19
|
-
{{#if (eq provider "
|
|
20
|
-
|
|
8
|
+
{{#if (eq provider "mongo")}}
|
|
9
|
+
import type { DefaultModelRow } from "@prisma-next/mongo-orm";
|
|
21
10
|
{{else}}
|
|
22
|
-
|
|
23
|
-
if (!databaseUrl) {
|
|
24
|
-
throw new Error("DATABASE_URL is required");
|
|
25
|
-
}
|
|
11
|
+
import type { DefaultModelRow } from "@prisma-next/sql-orm-client";
|
|
26
12
|
{{/if}}
|
|
27
13
|
|
|
28
|
-
{
|
|
29
|
-
|
|
30
|
-
|
|
14
|
+
import type { Contract } from "../../../prisma/contract.d";
|
|
15
|
+
import contractJson from "../../../prisma/contract.json" with { type: "json" };
|
|
16
|
+
|
|
17
|
+
{{#if (eq provider "mongo")}}
|
|
18
|
+
export const db = mongo<Contract>({
|
|
19
|
+
contractJson,
|
|
20
|
+
url: process.env["DATABASE_URL"]!,
|
|
31
21
|
});
|
|
32
|
-
{{
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
22
|
+
{{else}}
|
|
23
|
+
export const db = postgres<Contract>({
|
|
24
|
+
contractJson,
|
|
25
|
+
url: process.env["DATABASE_URL"]!,
|
|
36
26
|
});
|
|
37
27
|
{{/if}}
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
{{#if (eq provider "
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
28
|
+
|
|
29
|
+
type UserRow = DefaultModelRow<Contract, "User">;
|
|
30
|
+
|
|
31
|
+
{{#if (eq provider "mongo")}}
|
|
32
|
+
function toStarterUser(user: Pick<UserRow, "_id" | "email" | "username" | "name">) {
|
|
33
|
+
return {
|
|
34
|
+
id: String(user._id),
|
|
35
|
+
email: user.email,
|
|
36
|
+
username: user.username ?? null,
|
|
37
|
+
name: user.name ?? null,
|
|
38
|
+
createdAt: null as Date | null,
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
{{else}}
|
|
42
|
+
function toStarterUser(user: Pick<UserRow, "id" | "email" | "username" | "name" | "createdAt">) {
|
|
43
|
+
return {
|
|
44
|
+
id: String(user.id),
|
|
45
|
+
email: user.email,
|
|
46
|
+
username: user.username ?? null,
|
|
47
|
+
name: user.name ?? null,
|
|
48
|
+
createdAt: user.createdAt,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
45
51
|
{{/if}}
|
|
46
|
-
|
|
47
|
-
|
|
52
|
+
|
|
53
|
+
export async function listUsers(limit = 10) {
|
|
54
|
+
|
|
55
|
+
{{#if (eq provider "mongo")}}
|
|
56
|
+
const users: ReturnType<typeof toStarterUser>[] = [];
|
|
57
|
+
|
|
58
|
+
for await (const user of db.orm.users.select("_id", "email", "username", "name").take(limit).all()) {
|
|
59
|
+
users.push(toStarterUser(user));
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
return users;
|
|
63
|
+
{{else}}
|
|
64
|
+
const users = await db.orm.User.select("id", "email", "username", "name", "createdAt").take(limit).all();
|
|
65
|
+
|
|
66
|
+
return users.map(toStarterUser);
|
|
48
67
|
{{/if}}
|
|
49
68
|
|
|
50
|
-
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
export type StarterUser = Awaited<ReturnType<typeof listUsers>>[number];
|
|
51
72
|
|
|
52
|
-
export
|
|
53
|
-
export default prisma;
|
|
73
|
+
export default db;
|
|
@@ -1,28 +1,17 @@
|
|
|
1
1
|
import type { PageServerLoad } from "./$types";
|
|
2
|
-
|
|
3
|
-
import
|
|
2
|
+
|
|
3
|
+
import { listUsers } from "$lib/server/prisma";
|
|
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
17
|
|
|
25
|
-
export const load: PageServerLoad = async () => {
|
|
26
|
-
return {};
|
|
27
|
-
};
|
|
28
|
-
{{/if}}
|