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,19 +1,12 @@
|
|
|
1
1
|
import type { APIRoute } from "astro";
|
|
2
|
-
|
|
3
|
-
import
|
|
2
|
+
|
|
3
|
+
import { listUsers } from "../../prisma/users";
|
|
4
4
|
|
|
5
5
|
export const GET: APIRoute = async () => {
|
|
6
|
-
const users = await
|
|
7
|
-
.
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
createdAt: "desc",
|
|
11
|
-
},
|
|
12
|
-
})
|
|
13
|
-
.catch((error) => {
|
|
14
|
-
console.error("Failed to query users:", error);
|
|
15
|
-
return undefined;
|
|
16
|
-
});
|
|
6
|
+
const users = await listUsers(10).catch((error) => {
|
|
7
|
+
console.error("Failed to query users:", error);
|
|
8
|
+
return undefined;
|
|
9
|
+
});
|
|
17
10
|
|
|
18
11
|
if (!users) {
|
|
19
12
|
return new Response(JSON.stringify({ error: "Could not query users yet." }), {
|
|
@@ -30,13 +23,3 @@ export const GET: APIRoute = async () => {
|
|
|
30
23
|
},
|
|
31
24
|
});
|
|
32
25
|
};
|
|
33
|
-
{{else}}
|
|
34
|
-
|
|
35
|
-
export const GET: APIRoute = async () => {
|
|
36
|
-
return new Response(JSON.stringify([]), {
|
|
37
|
-
headers: {
|
|
38
|
-
"Content-Type": "application/json",
|
|
39
|
-
},
|
|
40
|
-
});
|
|
41
|
-
};
|
|
42
|
-
{{/if}}
|
|
@@ -1,21 +1,14 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
import
|
|
2
|
+
|
|
3
|
+
import { listUsers } from "../prisma/users";
|
|
4
4
|
|
|
5
5
|
const formatter = new Intl.DateTimeFormat("en", {
|
|
6
6
|
dateStyle: "medium",
|
|
7
7
|
timeStyle: "short",
|
|
8
8
|
});
|
|
9
9
|
|
|
10
|
-
const users = await
|
|
11
|
-
|
|
12
|
-
take: 10,
|
|
13
|
-
orderBy: {
|
|
14
|
-
createdAt: "desc",
|
|
15
|
-
},
|
|
16
|
-
})
|
|
17
|
-
.catch(() => undefined);
|
|
18
|
-
{{/if}}
|
|
10
|
+
const users = await listUsers(10).catch(() => undefined);
|
|
11
|
+
|
|
19
12
|
---
|
|
20
13
|
|
|
21
14
|
<html lang="en">
|
|
@@ -29,12 +22,12 @@ const users = await prisma.user
|
|
|
29
22
|
<body>
|
|
30
23
|
<main class="shell">
|
|
31
24
|
<div class="hero">
|
|
32
|
-
<p class="eyebrow">Astro + Prisma
|
|
33
|
-
|
|
25
|
+
<p class="eyebrow">Astro + Prisma 8</p>
|
|
26
|
+
|
|
34
27
|
<h1>Users from your database, loaded on the server.</h1>
|
|
35
28
|
<p class="lede">
|
|
36
|
-
This page reads from <code>src/pages/index.astro</code> using the Prisma
|
|
37
|
-
<code>src/
|
|
29
|
+
This page reads from <code>src/pages/index.astro</code> using the Prisma 8 helper in
|
|
30
|
+
<code>src/prisma/users.ts</code>. An Astro API route is also scaffolded in
|
|
38
31
|
<code>src/pages/api/users.ts</code>.
|
|
39
32
|
</p>
|
|
40
33
|
</div>
|
|
@@ -47,63 +40,32 @@ const users = await prisma.user
|
|
|
47
40
|
|
|
48
41
|
{!users ? (
|
|
49
42
|
<p class="empty">
|
|
50
|
-
Could not query users yet. Run <code>
|
|
43
|
+
Could not query users yet. Run <code>contract:emit</code> and apply your schema,
|
|
51
44
|
then refresh.
|
|
52
45
|
</p>
|
|
53
46
|
) : users.length === 0 ? (
|
|
54
|
-
<p class="empty">No users
|
|
47
|
+
<p class="empty">No users found.</p>
|
|
55
48
|
) : (
|
|
56
49
|
<ul class="users">
|
|
57
50
|
{users.map((user) => (
|
|
58
51
|
<li>
|
|
59
52
|
<div>
|
|
60
53
|
<strong>{user.name ?? "Unnamed user"}</strong>
|
|
61
|
-
<p>{user.email}</p>
|
|
54
|
+
<p>{user.username ? `@${user.username}` : user.email}</p>
|
|
62
55
|
</div>
|
|
63
|
-
|
|
64
|
-
{
|
|
65
|
-
|
|
56
|
+
{user.createdAt ? (
|
|
57
|
+
<time datetime={user.createdAt.toISOString()}>
|
|
58
|
+
{formatter.format(user.createdAt)}
|
|
59
|
+
</time>
|
|
60
|
+
) : (
|
|
61
|
+
<span class="muted">No timestamp</span>
|
|
62
|
+
)}
|
|
66
63
|
</li>
|
|
67
64
|
))}
|
|
68
65
|
</ul>
|
|
69
66
|
)}
|
|
70
67
|
</section>
|
|
71
|
-
{{else}}
|
|
72
|
-
<h1>Your Astro app is ready.</h1>
|
|
73
|
-
<p class="lede">
|
|
74
|
-
Edit <code>prisma/schema.prisma</code>, run <code>db:migrate</code>, then load your data
|
|
75
|
-
in Astro pages or API routes with the Prisma instance in <code>src/lib/prisma.ts</code>.
|
|
76
|
-
</p>
|
|
77
|
-
</div>
|
|
78
68
|
|
|
79
|
-
<section class="panel">
|
|
80
|
-
<div class="panel-header">
|
|
81
|
-
<h2>What's included</h2>
|
|
82
|
-
<span>Starter kit</span>
|
|
83
|
-
</div>
|
|
84
|
-
|
|
85
|
-
<ul class="users">
|
|
86
|
-
<li>
|
|
87
|
-
<div>
|
|
88
|
-
<strong>Prisma client</strong>
|
|
89
|
-
<p>Use the shared instance from <code>src/lib/prisma.ts</code>.</p>
|
|
90
|
-
</div>
|
|
91
|
-
</li>
|
|
92
|
-
<li>
|
|
93
|
-
<div>
|
|
94
|
-
<strong>API route example</strong>
|
|
95
|
-
<p>See <code>src/pages/api/users.ts</code> for an Astro server endpoint.</p>
|
|
96
|
-
</div>
|
|
97
|
-
</li>
|
|
98
|
-
<li>
|
|
99
|
-
<div>
|
|
100
|
-
<strong>Seed script</strong>
|
|
101
|
-
<p>Run <code>db:seed</code> after your first migration.</p>
|
|
102
|
-
</div>
|
|
103
|
-
</li>
|
|
104
|
-
</ul>
|
|
105
|
-
</section>
|
|
106
|
-
{{/if}}
|
|
107
69
|
</main>
|
|
108
70
|
</body>
|
|
109
71
|
</html>
|
|
@@ -171,6 +133,7 @@ const users = await prisma.user
|
|
|
171
133
|
|
|
172
134
|
.panel-header span,
|
|
173
135
|
.empty,
|
|
136
|
+
.muted,
|
|
174
137
|
time {
|
|
175
138
|
color: #888;
|
|
176
139
|
font-size: 0.8rem;
|
|
@@ -5,18 +5,17 @@
|
|
|
5
5
|
"packageManager": "{{packageManagerManifestValue packageManager}}",
|
|
6
6
|
{{/if}}
|
|
7
7
|
"type": "module",
|
|
8
|
-
"main": "src/index.ts",
|
|
9
8
|
"scripts": {
|
|
10
|
-
"dev": "
|
|
11
|
-
"build": "
|
|
12
|
-
"start": "
|
|
9
|
+
"dev": "tsx watch src/index.ts",
|
|
10
|
+
"build": "esbuild src/index.ts --bundle --platform=node --format=esm --outfile=dist/server.mjs",
|
|
11
|
+
"start": "node dist/server.mjs"
|
|
13
12
|
},
|
|
14
13
|
"dependencies": {
|
|
15
|
-
"@sinclair/typebox": "^0.34.
|
|
16
|
-
"elysia": "^1.4.
|
|
14
|
+
"@sinclair/typebox": "^0.34.48",
|
|
15
|
+
"elysia": "^1.4.28",
|
|
17
16
|
"openapi-types": "^12.1.3"
|
|
18
17
|
},
|
|
19
18
|
"devDependencies": {
|
|
20
|
-
"typescript": "^
|
|
19
|
+
"typescript": "^5.9.3"
|
|
21
20
|
}
|
|
22
21
|
}
|
|
@@ -1,43 +1,34 @@
|
|
|
1
|
-
{{#if (requiresDotenvConfigImport packageManager)}}
|
|
2
|
-
import "dotenv/config";
|
|
3
|
-
{{/if}}
|
|
4
|
-
{{#if (eq packageManager "deno")}}
|
|
5
|
-
{{else}}
|
|
6
1
|
import { node } from "@elysiajs/node";
|
|
7
|
-
{{/if}}
|
|
8
2
|
import { Elysia } from "elysia";
|
|
9
|
-
{{#if (eq schemaPreset "basic")}}
|
|
10
|
-
import { prisma } from "./lib/prisma{{#if (eq packageManager "deno")}}.ts{{/if}}";
|
|
11
|
-
{{/if}}
|
|
12
3
|
|
|
13
|
-
|
|
4
|
+
import { listUsers } from "./prisma/users";
|
|
5
|
+
|
|
6
|
+
const rawPort = (process.env.PORT ?? "").trim();
|
|
14
7
|
const parsedPort = rawPort.length > 0 ? Number(rawPort) : Number.NaN;
|
|
15
8
|
const port =
|
|
16
|
-
Number.isInteger(parsedPort) && parsedPort >= 0 && parsedPort <= 65535 ? parsedPort :
|
|
9
|
+
Number.isInteger(parsedPort) && parsedPort >= 0 && parsedPort <= 65535 ? parsedPort : 3000;
|
|
17
10
|
|
|
18
|
-
const app = new Elysia({
|
|
11
|
+
const app = new Elysia({ adapter: "Bun" in globalThis ? undefined : node() })
|
|
19
12
|
.get("/", () => {
|
|
20
13
|
return {
|
|
21
14
|
message: "hello from create-prisma + elysia",
|
|
22
15
|
};
|
|
23
16
|
})
|
|
24
|
-
|
|
25
|
-
.get("/users", async () => {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
createdAt: "desc",
|
|
30
|
-
},
|
|
17
|
+
|
|
18
|
+
.get("/users", async ({ set }) => {
|
|
19
|
+
const users = await listUsers(10).catch((error) => {
|
|
20
|
+
console.error("Failed to query users:", error);
|
|
21
|
+
return undefined;
|
|
31
22
|
});
|
|
23
|
+
|
|
24
|
+
if (!users) {
|
|
25
|
+
set.status = 500;
|
|
26
|
+
return { error: "Could not query users yet. Run contract:emit and apply your schema first." };
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
return users;
|
|
32
30
|
})
|
|
33
|
-
{{/if}}
|
|
34
|
-
{{#if (eq packageManager "deno")}}
|
|
35
|
-
;
|
|
36
31
|
|
|
37
|
-
|
|
38
|
-
console.log(`Server running at http://localhost:${port}`);
|
|
39
|
-
{{else}}
|
|
40
|
-
.listen(port);
|
|
32
|
+
.listen({ port, hostname: "0.0.0.0" });
|
|
41
33
|
|
|
42
34
|
console.log(`Server running at http://localhost:${app.server?.port ?? port}`);
|
|
43
|
-
{{/if}}
|
|
@@ -3,12 +3,14 @@
|
|
|
3
3
|
"target": "ES2022",
|
|
4
4
|
"module": "ESNext",
|
|
5
5
|
"moduleResolution": "Bundler",
|
|
6
|
+
"resolveJsonModule": true,
|
|
6
7
|
"verbatimModuleSyntax": true,
|
|
7
8
|
"strict": true,
|
|
8
9
|
"esModuleInterop": true,
|
|
9
10
|
"skipLibCheck": true,
|
|
10
11
|
"forceConsistentCasingInFileNames": true,
|
|
11
12
|
"outDir": "dist",
|
|
12
|
-
"rootDir": "."
|
|
13
|
+
"rootDir": ".",
|
|
14
|
+
"types": ["node"]
|
|
13
15
|
}
|
|
14
16
|
}
|
|
@@ -5,18 +5,17 @@
|
|
|
5
5
|
"packageManager": "{{packageManagerManifestValue packageManager}}",
|
|
6
6
|
{{/if}}
|
|
7
7
|
"type": "module",
|
|
8
|
-
"main": "src/index.ts",
|
|
9
8
|
"scripts": {
|
|
10
9
|
"dev": "{{runtimeScript packageManager "dev" "src/index.ts" "dist/src/index.js"}}",
|
|
11
|
-
"build": "
|
|
12
|
-
"start": "
|
|
10
|
+
"build": "esbuild src/index.ts --bundle --platform=node --format=esm --outfile=dist/server.mjs",
|
|
11
|
+
"start": "node dist/server.mjs"
|
|
13
12
|
},
|
|
14
13
|
"dependencies": {
|
|
15
|
-
"@hono/node-server": "^
|
|
16
|
-
"hono": "^4.12.
|
|
14
|
+
"@hono/node-server": "^1.19.9",
|
|
15
|
+
"hono": "^4.12.2"
|
|
17
16
|
},
|
|
18
17
|
"devDependencies": {
|
|
19
|
-
"@types/node": "^
|
|
20
|
-
"typescript": "^
|
|
18
|
+
"@types/node": "^20.11.17",
|
|
19
|
+
"typescript": "^5.9.3"
|
|
21
20
|
}
|
|
22
21
|
}
|
|
@@ -1,11 +1,7 @@
|
|
|
1
|
-
{{#if (requiresDotenvConfigImport packageManager)}}
|
|
2
|
-
import "dotenv/config";
|
|
3
|
-
{{/if}}
|
|
4
1
|
import { serve } from "@hono/node-server";
|
|
5
2
|
import { Hono } from "hono";
|
|
6
|
-
|
|
7
|
-
import {
|
|
8
|
-
{{/if}}
|
|
3
|
+
|
|
4
|
+
import { listUsers } from "./prisma/users";
|
|
9
5
|
|
|
10
6
|
const app = new Hono();
|
|
11
7
|
|
|
@@ -14,24 +10,24 @@ app.get("/", (c) => {
|
|
|
14
10
|
message: "hello from create-prisma + hono",
|
|
15
11
|
});
|
|
16
12
|
});
|
|
17
|
-
{{#if (eq schemaPreset "basic")}}
|
|
18
13
|
|
|
19
14
|
app.get("/users", async (c) => {
|
|
20
|
-
const users = await
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
createdAt: "desc",
|
|
24
|
-
},
|
|
15
|
+
const users = await listUsers(10).catch((error) => {
|
|
16
|
+
console.error("Failed to query users:", error);
|
|
17
|
+
return undefined;
|
|
25
18
|
});
|
|
26
19
|
|
|
20
|
+
if (!users) {
|
|
21
|
+
return c.json({ error: "Could not query users yet. Run contract:emit and apply your schema first." }, 500);
|
|
22
|
+
}
|
|
23
|
+
|
|
27
24
|
return c.json(users);
|
|
28
25
|
});
|
|
29
|
-
{{/if}}
|
|
30
26
|
|
|
31
|
-
const rawPort = (
|
|
27
|
+
const rawPort = (process.env.PORT ?? "").trim();
|
|
32
28
|
const parsedPort = rawPort.length > 0 ? Number(rawPort) : Number.NaN;
|
|
33
29
|
const port =
|
|
34
|
-
Number.isInteger(parsedPort) && parsedPort >= 0 && parsedPort <= 65535 ? parsedPort :
|
|
30
|
+
Number.isInteger(parsedPort) && parsedPort >= 0 && parsedPort <= 65535 ? parsedPort : 3000;
|
|
35
31
|
serve({
|
|
36
32
|
fetch: app.fetch,
|
|
37
33
|
port,
|
|
@@ -3,12 +3,14 @@
|
|
|
3
3
|
"target": "ES2022",
|
|
4
4
|
"module": "ESNext",
|
|
5
5
|
"moduleResolution": "Bundler",
|
|
6
|
+
"resolveJsonModule": true,
|
|
6
7
|
"verbatimModuleSyntax": true,
|
|
7
8
|
"strict": true,
|
|
8
9
|
"esModuleInterop": true,
|
|
9
10
|
"skipLibCheck": true,
|
|
10
11
|
"forceConsistentCasingInFileNames": true,
|
|
11
12
|
"outDir": "dist",
|
|
12
|
-
"rootDir": "."
|
|
13
|
+
"rootDir": ".",
|
|
14
|
+
"types": ["node"]
|
|
13
15
|
}
|
|
14
16
|
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "{{projectName}}",
|
|
3
|
+
"private": true,
|
|
4
|
+
{{#if (packageManagerManifestValue packageManager)}}
|
|
5
|
+
"packageManager": "{{packageManagerManifestValue packageManager}}",
|
|
6
|
+
{{/if}}
|
|
7
|
+
"type": "module",
|
|
8
|
+
"scripts": {
|
|
9
|
+
"dev": "tsx watch src/index.ts",
|
|
10
|
+
"build": "esbuild src/index.ts --bundle --platform=node --format=esm --outfile=dist/server.mjs",
|
|
11
|
+
"start": "node dist/server.mjs"
|
|
12
|
+
},
|
|
13
|
+
"dependencies": {},
|
|
14
|
+
"devDependencies": {}
|
|
15
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { createServer } from "node:http";
|
|
2
|
+
|
|
3
|
+
import { listUsers } from "./prisma/users";
|
|
4
|
+
|
|
5
|
+
const port = Number(process.env.PORT ?? 3000);
|
|
6
|
+
|
|
7
|
+
createServer(async (_request, response) => {
|
|
8
|
+
try {
|
|
9
|
+
const users = await listUsers();
|
|
10
|
+
response.writeHead(200, { "content-type": "application/json" });
|
|
11
|
+
response.end(JSON.stringify({ users }));
|
|
12
|
+
} catch (error) {
|
|
13
|
+
console.error("Failed to query users:", error);
|
|
14
|
+
response.writeHead(500, { "content-type": "application/json" });
|
|
15
|
+
response.end(JSON.stringify({ error: "Could not query users yet." }));
|
|
16
|
+
}
|
|
17
|
+
}).listen(port, "0.0.0.0", () => {
|
|
18
|
+
console.log(`Server running at http://localhost:${port}`);
|
|
19
|
+
});
|
|
@@ -3,13 +3,13 @@
|
|
|
3
3
|
"target": "ES2022",
|
|
4
4
|
"module": "ESNext",
|
|
5
5
|
"moduleResolution": "Bundler",
|
|
6
|
+
"resolveJsonModule": true,
|
|
6
7
|
"verbatimModuleSyntax": true,
|
|
7
8
|
"strict": true,
|
|
8
9
|
"esModuleInterop": true,
|
|
9
10
|
"skipLibCheck": true,
|
|
10
11
|
"forceConsistentCasingInFileNames": true,
|
|
11
|
-
"
|
|
12
|
-
"rootDir": "."
|
|
12
|
+
"types": ["node"]
|
|
13
13
|
},
|
|
14
14
|
"include": ["src/**/*.ts"]
|
|
15
15
|
}
|
|
@@ -7,18 +7,18 @@
|
|
|
7
7
|
"type": "module",
|
|
8
8
|
"scripts": {
|
|
9
9
|
"dev": "{{runtimeScript packageManager "dev" "src/main.ts" "dist/main.js"}}",
|
|
10
|
-
"build": "
|
|
11
|
-
"start": "
|
|
10
|
+
"build": "esbuild src/main.ts --bundle --platform=node --format=esm --outfile=dist/server.mjs --banner:js=\"import { createRequire } from 'node:module'; const require = createRequire(import.meta.url);\" --external:'@nestjs/websockets/*' --external:@nestjs/microservices --external:'@nestjs/microservices/*' --external:@nestjs/platform-socket.io --external:class-transformer --external:class-validator",
|
|
11
|
+
"start": "node dist/server.mjs"
|
|
12
12
|
},
|
|
13
13
|
"dependencies": {
|
|
14
|
-
"@nestjs/common": "^11.1.
|
|
15
|
-
"@nestjs/core": "^11.1.
|
|
16
|
-
"@nestjs/platform-express": "^11.1.
|
|
14
|
+
"@nestjs/common": "^11.1.17",
|
|
15
|
+
"@nestjs/core": "^11.1.17",
|
|
16
|
+
"@nestjs/platform-express": "^11.1.17",
|
|
17
17
|
"reflect-metadata": "^0.2.2",
|
|
18
18
|
"rxjs": "^7.8.2"
|
|
19
19
|
},
|
|
20
20
|
"devDependencies": {
|
|
21
|
-
"@types/node": "^
|
|
22
|
-
"typescript": "^
|
|
21
|
+
"@types/node": "^25.5.0",
|
|
22
|
+
"typescript": "^5.9.3"
|
|
23
23
|
}
|
|
24
24
|
}
|
|
@@ -1,20 +1,19 @@
|
|
|
1
1
|
import { Module } from "@nestjs/common";
|
|
2
|
-
import { AppController } from "./app.controller
|
|
3
|
-
import { PrismaService } from "./prisma.service
|
|
4
|
-
|
|
5
|
-
import { UsersController } from "./users.controller
|
|
6
|
-
import { UsersService } from "./users.service
|
|
7
|
-
{{/if}}
|
|
2
|
+
import { AppController } from "./app.controller";
|
|
3
|
+
import { PrismaService } from "./prisma.service";
|
|
4
|
+
|
|
5
|
+
import { UsersController } from "./users.controller";
|
|
6
|
+
import { UsersService } from "./users.service";
|
|
8
7
|
|
|
9
8
|
@Module({
|
|
10
9
|
imports: [],
|
|
11
10
|
controllers: [
|
|
12
|
-
AppController
|
|
13
|
-
UsersController
|
|
11
|
+
AppController,
|
|
12
|
+
UsersController
|
|
14
13
|
],
|
|
15
14
|
providers: [
|
|
16
|
-
PrismaService
|
|
17
|
-
UsersService
|
|
15
|
+
PrismaService,
|
|
16
|
+
UsersService
|
|
18
17
|
],
|
|
19
18
|
})
|
|
20
19
|
export class AppModule {}
|
|
@@ -1,27 +1,20 @@
|
|
|
1
1
|
import "reflect-metadata";
|
|
2
|
-
{{#if (requiresDotenvConfigImport packageManager)}}
|
|
3
|
-
import "dotenv/config";
|
|
4
|
-
{{/if}}
|
|
5
2
|
|
|
6
3
|
import { NestFactory } from "@nestjs/core";
|
|
7
4
|
|
|
8
|
-
import { AppModule } from "./app.module
|
|
5
|
+
import { AppModule } from "./app.module";
|
|
9
6
|
|
|
10
7
|
async function bootstrap() {
|
|
11
8
|
const app = await NestFactory.create(AppModule);
|
|
12
|
-
const rawPort = (
|
|
9
|
+
const rawPort = (process.env.PORT ?? "").trim();
|
|
13
10
|
const parsedPort = rawPort.length > 0 ? Number(rawPort) : Number.NaN;
|
|
14
11
|
const port =
|
|
15
12
|
Number.isFinite(parsedPort) && parsedPort >= 0 && parsedPort <= 65535 ? parsedPort : 3000;
|
|
16
|
-
await app.listen(port
|
|
13
|
+
await app.listen(port);
|
|
17
14
|
console.log(`Server running at http://localhost:${port}`);
|
|
18
15
|
}
|
|
19
16
|
|
|
20
17
|
bootstrap().catch((error) => {
|
|
21
18
|
console.error("Failed to start server", error);
|
|
22
|
-
{{#if (eq packageManager "deno")}}
|
|
23
|
-
Deno.exit(1);
|
|
24
|
-
{{else}}
|
|
25
19
|
process.exit(1);
|
|
26
|
-
{{/if}}
|
|
27
20
|
});
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { Injectable } from "@nestjs/common";
|
|
2
|
-
import {
|
|
3
|
-
import { prismaClientOptions } from "./lib/prisma{{#if (eq packageManager "deno")}}.ts{{/if}}";
|
|
2
|
+
import { db, listUsers, type StarterUser } from "./prisma/users";
|
|
4
3
|
|
|
5
4
|
@Injectable()
|
|
6
|
-
export class PrismaService
|
|
7
|
-
|
|
8
|
-
|
|
5
|
+
export class PrismaService {
|
|
6
|
+
readonly db = db;
|
|
7
|
+
|
|
8
|
+
listUsers(limit = 10): Promise<StarterUser[]> {
|
|
9
|
+
return listUsers(limit);
|
|
9
10
|
}
|
|
10
11
|
}
|
|
@@ -1,15 +1,13 @@
|
|
|
1
|
-
{
|
|
2
|
-
import { Controller, Get } from "@nestjs/common";
|
|
1
|
+
import { Controller, Get, Inject } from "@nestjs/common";
|
|
3
2
|
|
|
4
|
-
import { UsersService } from "./users.service
|
|
3
|
+
import { UsersService } from "./users.service";
|
|
5
4
|
|
|
6
5
|
@Controller("users")
|
|
7
6
|
export class UsersController {
|
|
8
|
-
constructor(private readonly usersService: UsersService) {}
|
|
7
|
+
constructor(@Inject(UsersService) private readonly usersService: UsersService) {}
|
|
9
8
|
|
|
10
9
|
@Get()
|
|
11
10
|
findAll() {
|
|
12
11
|
return this.usersService.findAll();
|
|
13
12
|
}
|
|
14
13
|
}
|
|
15
|
-
{{/if}}
|
|
@@ -1,19 +1,12 @@
|
|
|
1
|
-
{
|
|
2
|
-
import { Injectable } from "@nestjs/common";
|
|
1
|
+
import { Inject, Injectable } from "@nestjs/common";
|
|
3
2
|
|
|
4
|
-
import { PrismaService } from "./prisma.service
|
|
3
|
+
import { PrismaService } from "./prisma.service";
|
|
5
4
|
|
|
6
5
|
@Injectable()
|
|
7
6
|
export class UsersService {
|
|
8
|
-
constructor(private readonly prisma: PrismaService) {}
|
|
7
|
+
constructor(@Inject(PrismaService) private readonly prisma: PrismaService) {}
|
|
9
8
|
|
|
10
9
|
async findAll() {
|
|
11
|
-
return this.prisma.
|
|
12
|
-
take: 10,
|
|
13
|
-
orderBy: {
|
|
14
|
-
createdAt: "desc",
|
|
15
|
-
},
|
|
16
|
-
});
|
|
10
|
+
return this.prisma.listUsers(10);
|
|
17
11
|
}
|
|
18
12
|
}
|
|
19
|
-
{{/if}}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
"target": "ES2022",
|
|
4
4
|
"module": "ESNext",
|
|
5
5
|
"moduleResolution": "Bundler",
|
|
6
|
+
"resolveJsonModule": true,
|
|
6
7
|
"verbatimModuleSyntax": true,
|
|
7
8
|
"strict": true,
|
|
8
9
|
"esModuleInterop": true,
|
|
@@ -10,8 +11,8 @@
|
|
|
10
11
|
"forceConsistentCasingInFileNames": true,
|
|
11
12
|
"emitDecoratorMetadata": true,
|
|
12
13
|
"experimentalDecorators": true,
|
|
13
|
-
"
|
|
14
|
-
"
|
|
14
|
+
"outDir": "dist",
|
|
15
|
+
"types": ["node"]
|
|
15
16
|
},
|
|
16
17
|
"include": ["src/**/*.ts"]
|
|
17
18
|
}
|
|
@@ -5,7 +5,14 @@ import nextTs from "eslint-config-next/typescript";
|
|
|
5
5
|
const eslintConfig = defineConfig([
|
|
6
6
|
...nextVitals,
|
|
7
7
|
...nextTs,
|
|
8
|
-
globalIgnores([
|
|
8
|
+
globalIgnores([
|
|
9
|
+
".next/**",
|
|
10
|
+
"out/**",
|
|
11
|
+
"build/**",
|
|
12
|
+
"migrations/**",
|
|
13
|
+
"src/prisma/**/*.d.ts",
|
|
14
|
+
"next-env.d.ts",
|
|
15
|
+
]),
|
|
9
16
|
]);
|
|
10
17
|
|
|
11
18
|
export default eslintConfig;
|
|
@@ -13,17 +13,17 @@
|
|
|
13
13
|
"lint": "eslint"
|
|
14
14
|
},
|
|
15
15
|
"dependencies": {
|
|
16
|
-
"next": "16.
|
|
17
|
-
"react": "19.2.
|
|
18
|
-
"react-dom": "19.2.
|
|
16
|
+
"next": "16.1.6",
|
|
17
|
+
"react": "19.2.3",
|
|
18
|
+
"react-dom": "19.2.3"
|
|
19
19
|
},
|
|
20
20
|
"devDependencies": {
|
|
21
|
-
"@types/node": "^
|
|
22
|
-
"@types/react": "^19
|
|
23
|
-
"@types/react-dom": "^19
|
|
24
|
-
"eslint": "^
|
|
25
|
-
"eslint-config-next": "16.
|
|
26
|
-
"tsx": "^4.
|
|
27
|
-
"typescript": "^
|
|
21
|
+
"@types/node": "^20",
|
|
22
|
+
"@types/react": "^19",
|
|
23
|
+
"@types/react-dom": "^19",
|
|
24
|
+
"eslint": "^9",
|
|
25
|
+
"eslint-config-next": "16.1.6",
|
|
26
|
+
"tsx": "^4.7.1",
|
|
27
|
+
"typescript": "^5.9.3"
|
|
28
28
|
}
|
|
29
29
|
}
|